Move animated meshes to be dynamically loaded
This commit is contained in:
parent
8470c4ae22
commit
69a44eba1d
126
Makefile
126
Makefile
|
@ -171,28 +171,17 @@ build/src/scene/elevator.o: build/assets/models/props/round_elevator_collision.h
|
||||||
MODEL_LIST = assets/models/player/chell.blend \
|
MODEL_LIST = assets/models/player/chell.blend \
|
||||||
assets/models/portal_gun/v_portalgun.blend \
|
assets/models/portal_gun/v_portalgun.blend \
|
||||||
assets/models/portal_gun/w_portalgun.blend \
|
assets/models/portal_gun/w_portalgun.blend \
|
||||||
assets/models/props/button.blend \
|
|
||||||
assets/models/props/door_01.blend \
|
|
||||||
assets/models/props/door_02.blend \
|
|
||||||
assets/models/props/combine_ball_catcher.blend \
|
|
||||||
assets/models/props/combine_ball_launcher.blend \
|
|
||||||
assets/models/props/portal_cleanser.blend \
|
|
||||||
assets/models/props/round_elevator.blend \
|
assets/models/props/round_elevator.blend \
|
||||||
assets/models/props/round_elevator_interior.blend \
|
assets/models/props/round_elevator_interior.blend \
|
||||||
assets/models/props/round_elevator_collision.blend \
|
assets/models/props/round_elevator_collision.blend \
|
||||||
assets/models/props/security_camera.blend \
|
|
||||||
assets/models/props/signage.blend \
|
assets/models/props/signage.blend \
|
||||||
assets/models/props/signage_off.blend \
|
assets/models/props/signage_off.blend \
|
||||||
assets/models/props/switch001.blend \
|
|
||||||
assets/models/props/box_dropper.blend \
|
|
||||||
assets/models/props/box_dropper_glass.blend \
|
|
||||||
assets/models/portal/portal_blue.blend \
|
assets/models/portal/portal_blue.blend \
|
||||||
assets/models/portal/portal_blue_filled.blend \
|
assets/models/portal/portal_blue_filled.blend \
|
||||||
assets/models/portal/portal_blue_face.blend \
|
assets/models/portal/portal_blue_face.blend \
|
||||||
assets/models/portal/portal_orange.blend \
|
assets/models/portal/portal_orange.blend \
|
||||||
assets/models/portal/portal_orange_filled.blend \
|
assets/models/portal/portal_orange_filled.blend \
|
||||||
assets/models/portal/portal_orange_face.blend \
|
assets/models/portal/portal_orange_face.blend \
|
||||||
assets/models/pedestal.blend \
|
|
||||||
assets/models/grav_flare.blend \
|
assets/models/grav_flare.blend \
|
||||||
assets/models/fleck_ash2.blend
|
assets/models/fleck_ash2.blend
|
||||||
|
|
||||||
|
@ -201,16 +190,27 @@ DYNAMIC_MODEL_LIST = assets/models/cube/cube.blend \
|
||||||
assets/models/props/cylinder_test.blend \
|
assets/models/props/cylinder_test.blend \
|
||||||
assets/models/props/radio.blend \
|
assets/models/props/radio.blend \
|
||||||
assets/models/signage/clock_digits.blend \
|
assets/models/signage/clock_digits.blend \
|
||||||
assets/models/signage/clock.blend
|
assets/models/signage/clock.blend \
|
||||||
|
assets/models/props/box_dropper_glass.blend \
|
||||||
|
assets/models/props/portal_cleanser.blend
|
||||||
|
|
||||||
|
DYNAMIC_ANIMATED_MODEL_LIST = assets/models/pedestal.blend \
|
||||||
|
assets/models/props/box_dropper.blend \
|
||||||
|
assets/models/props/button.blend \
|
||||||
|
assets/models/props/combine_ball_catcher.blend \
|
||||||
|
assets/models/props/combine_ball_launcher.blend \
|
||||||
|
assets/models/props/door_01.blend \
|
||||||
|
assets/models/props/door_02.blend \
|
||||||
|
assets/models/props/security_camera.blend \
|
||||||
|
assets/models/props/switch001.blend
|
||||||
|
|
||||||
ANIM_LIST = build/assets/models/pedestal_anim.o \
|
ANIM_LIST = build/assets/models/pedestal_anim.o \
|
||||||
|
build/assets/models/player/chell_anim.o \
|
||||||
build/assets/models/props/box_dropper_anim.o \
|
build/assets/models/props/box_dropper_anim.o \
|
||||||
build/assets/models/props/combine_ball_catcher_anim.o \
|
build/assets/models/props/combine_ball_catcher_anim.o \
|
||||||
build/assets/models/props/combine_ball_launcher_anim.o \
|
build/assets/models/props/combine_ball_launcher_anim.o \
|
||||||
build/assets/models/props/door_01_anim.o \
|
build/assets/models/props/door_01_anim.o \
|
||||||
build/assets/models/props/door_02_anim.o \
|
build/assets/models/props/door_02_anim.o \
|
||||||
build/assets/models/player/chell_anim.o \
|
|
||||||
build/assets/models/props/switch001_anim.o
|
build/assets/models/props/switch001_anim.o
|
||||||
|
|
||||||
MODEL_HEADERS = $(MODEL_LIST:%.blend=build/%.h)
|
MODEL_HEADERS = $(MODEL_LIST:%.blend=build/%.h)
|
||||||
|
@ -219,70 +219,44 @@ MODEL_OBJECTS = $(MODEL_LIST:%.blend=build/%_geo.o)
|
||||||
DYNAMIC_MODEL_HEADERS = $(DYNAMIC_MODEL_LIST:%.blend=build/%.h)
|
DYNAMIC_MODEL_HEADERS = $(DYNAMIC_MODEL_LIST:%.blend=build/%.h)
|
||||||
DYNAMIC_MODEL_OBJECTS = $(DYNAMIC_MODEL_LIST:%.blend=build/%_geo.o)
|
DYNAMIC_MODEL_OBJECTS = $(DYNAMIC_MODEL_LIST:%.blend=build/%_geo.o)
|
||||||
|
|
||||||
|
DYNAMIC_ANIMATED_MODEL_HEADERS = $(DYNAMIC_ANIMATED_MODEL_LIST:%.blend=build/%.h)
|
||||||
|
DYNAMIC_ANIMATED_MODEL_OBJECTS = $(DYNAMIC_ANIMATED_MODEL_LIST:%.blend=build/%_geo.o)
|
||||||
|
|
||||||
build/assets/models/%.h build/assets/models/%_geo.c build/assets/models/%_anim.c: build/assets/models/%.fbx assets/models/%.flags assets/materials/elevator.skm.yaml assets/materials/objects.skm.yaml assets/materials/static.skm.yaml $(TEXTURE_IMAGES) $(SKELATOOL64)
|
build/assets/models/%.h build/assets/models/%_geo.c build/assets/models/%_anim.c: build/assets/models/%.fbx assets/models/%.flags assets/materials/elevator.skm.yaml assets/materials/objects.skm.yaml assets/materials/static.skm.yaml $(TEXTURE_IMAGES) $(SKELATOOL64)
|
||||||
$(SKELATOOL64) --fixed-point-scale 256 --model-scale 0.01 --name $(<:build/assets/models/%.fbx=%) $(shell cat $(<:build/assets/models/%.fbx=assets/models/%.flags)) -o $(<:%.fbx=%.h) $<
|
$(SKELATOOL64) --fixed-point-scale 256 --model-scale 0.01 --name $(<:build/assets/models/%.fbx=%) $(shell cat $(<:build/assets/models/%.fbx=assets/models/%.flags)) -o $(<:%.fbx=%.h) $<
|
||||||
|
|
||||||
build/src/models/models.o: $(MODEL_HEADERS)
|
|
||||||
|
|
||||||
build/src/decor/decor_object_list.o: build/assets/models/dynamic_model_list.h build/assets/materials/static.h
|
|
||||||
|
|
||||||
build/src/scene/portal.o: $(MODEL_HEADERS)
|
|
||||||
|
|
||||||
build/src/scene/signage.o: $(MODEL_HEADERS)
|
|
||||||
|
|
||||||
build/src/scene/box_dropper.o: $(MODEL_HEADERS) build/assets/models/dynamic_model_list.h
|
|
||||||
|
|
||||||
build/src/scene/pedestal.o: $(MODEL_HEADERS)
|
|
||||||
|
|
||||||
build/src/scene/render_plan.o: $(MODEL_HEADERS)
|
|
||||||
|
|
||||||
build/src/scene/portal_render.o: $(MODEL_HEADERS)
|
|
||||||
|
|
||||||
build/src/scene/clock.o: build/assets/models/dynamic_model_list.h
|
|
||||||
|
|
||||||
build/src/scene/fizzler.o: $(MODEL_HEADERS)
|
|
||||||
|
|
||||||
build/src/scene/security_camera.o: build/src/audio/clips.h $(MODEL_HEADERS)
|
|
||||||
|
|
||||||
build/src/scene/switch.o: build/assets/models/props/switch001.h build/assets/materials/static.h
|
|
||||||
|
|
||||||
build/src/player/player.o: build/assets/models/player/chell.h build/assets/materials/static.h
|
|
||||||
|
|
||||||
build/src/scene/ball.o: build/assets/models/grav_flare.h build/assets/models/fleck_ash2.h build/assets/materials/static.h
|
|
||||||
|
|
||||||
build/src/scene/ball_launcher.o: build/assets/models/props/combine_ball_launcher.h build/assets/materials/static.h
|
|
||||||
|
|
||||||
build/src/scene/ball_catcher.o: build/assets/models/props/combine_ball_catcher.h build/assets/materials/static.h
|
|
||||||
|
|
||||||
build/src/scene/door.o: build/assets/models/props/door_01.h build/assets/models/props/door_02.h
|
|
||||||
|
|
||||||
build/src/menu/game_menu.o: build/src/audio/clips.h build/assets/materials/ui.h build/assets/materials/images.h build/assets/test_chambers/test_chamber_00/test_chamber_00.h
|
|
||||||
|
|
||||||
build/src/menu/main_menu.o: build/src/audio/clips.h build/assets/materials/ui.h build/assets/materials/images.h build/assets/test_chambers/test_chamber_00/test_chamber_00.h
|
|
||||||
|
|
||||||
build/src/menu/new_game_menu.o: build/src/audio/clips.h build/assets/materials/ui.h build/assets/materials/images.h build/assets/test_chambers/test_chamber_00/test_chamber_00.h
|
|
||||||
|
|
||||||
build/src/menu/load_game.o: build/assets/materials/ui.h build/src/audio/clips.h
|
|
||||||
|
|
||||||
build/src/menu/save_game_menu.o: build/src/audio/clips.h
|
|
||||||
|
|
||||||
build/src/menu/savefile_list.o: build/assets/materials/ui.h build/src/audio/clips.h
|
|
||||||
|
|
||||||
build/src/menu/landing_menu.o: build/assets/materials/ui.h build/src/audio/clips.h
|
|
||||||
|
|
||||||
build/src/menu/options_menu.o: build/assets/materials/ui.h
|
|
||||||
|
|
||||||
build/src/menu/joystick_options.o: build/assets/materials/ui.h build/src/audio/clips.h
|
|
||||||
|
|
||||||
build/src/menu/controls.o: build/assets/materials/ui.h build/src/audio/clips.h
|
|
||||||
|
|
||||||
build/src/util/dynamic_asset_data.o: build/assets/models/dynamic_model_list_data.h
|
|
||||||
|
|
||||||
build/assets/models/player/chell.h: assets/materials/chell.skm.yaml
|
build/assets/models/player/chell.h: assets/materials/chell.skm.yaml
|
||||||
|
|
||||||
build/assets/models/props/combine_ball_catcher.h: assets/materials/ball_catcher.skm.yaml
|
build/assets/models/props/combine_ball_catcher.h: assets/materials/ball_catcher.skm.yaml
|
||||||
|
|
||||||
build/assets/models/props/combine_ball_launcher.h: assets/materials/ball_catcher.skm.yaml
|
build/assets/models/props/combine_ball_launcher.h: assets/materials/ball_catcher.skm.yaml
|
||||||
|
build/src/decor/decor_object_list.o: build/assets/models/dynamic_model_list.h build/assets/materials/static.h
|
||||||
|
build/src/menu/controls.o: build/assets/materials/ui.h build/src/audio/clips.h
|
||||||
|
build/src/menu/game_menu.o: build/src/audio/clips.h build/assets/materials/ui.h build/assets/materials/images.h build/assets/test_chambers/test_chamber_00/test_chamber_00.h
|
||||||
|
build/src/menu/joystick_options.o: build/assets/materials/ui.h build/src/audio/clips.h
|
||||||
|
build/src/menu/landing_menu.o: build/assets/materials/ui.h build/src/audio/clips.h
|
||||||
|
build/src/menu/load_game.o: build/assets/materials/ui.h build/src/audio/clips.h
|
||||||
|
build/src/menu/main_menu.o: build/src/audio/clips.h build/assets/materials/ui.h build/assets/materials/images.h build/assets/test_chambers/test_chamber_00/test_chamber_00.h
|
||||||
|
build/src/menu/new_game_menu.o: build/src/audio/clips.h build/assets/materials/ui.h build/assets/materials/images.h build/assets/test_chambers/test_chamber_00/test_chamber_00.h
|
||||||
|
build/src/menu/options_menu.o: build/assets/materials/ui.h
|
||||||
|
build/src/menu/save_game_menu.o: build/src/audio/clips.h
|
||||||
|
build/src/menu/savefile_list.o: build/assets/materials/ui.h build/src/audio/clips.h
|
||||||
|
build/src/player/player.o: build/assets/models/player/chell.h build/assets/materials/static.h
|
||||||
|
build/src/scene/ball_catcher.o: build/assets/models/props/combine_ball_catcher.h build/assets/materials/static.h build/assets/models/dynamic_animated_model_list.h
|
||||||
|
build/src/scene/ball_launcher.o: build/assets/models/props/combine_ball_launcher.h build/assets/materials/static.h build/assets/models/dynamic_animated_model_list.h
|
||||||
|
build/src/scene/ball.o: build/assets/models/grav_flare.h build/assets/models/fleck_ash2.h build/assets/materials/static.h
|
||||||
|
build/src/scene/box_dropper.o: build/assets/materials/static.h build/assets/models/props/box_dropper.h build/assets/models/dynamic_model_list.h build/assets/models/dynamic_animated_model_list.h
|
||||||
|
build/src/scene/button.o: build/assets/materials/static.h build/assets/models/props/button.h build/assets/models/dynamic_animated_model_list.h
|
||||||
|
build/src/scene/clock.o: build/assets/models/dynamic_model_list.h
|
||||||
|
build/src/scene/door.o: build/assets/materials/static.h build/assets/models/props/door_01.h build/assets/models/props/door_02.h build/assets/models/dynamic_animated_model_list.h
|
||||||
|
build/src/scene/fizzler.o: build/assets/models/dynamic_model_list.h
|
||||||
|
build/src/scene/pedestal.o: build/assets/materials/static.h build/assets/models/pedestal.h build/assets/models/dynamic_animated_model_list.h build/assets/models/portal_gun/w_portalgun.h
|
||||||
|
build/src/scene/portal_gun.o: $(MODEL_HEADERS)
|
||||||
|
build/src/scene/portal_render.o: $(MODEL_HEADERS)
|
||||||
|
build/src/scene/portal.o: $(MODEL_HEADERS)
|
||||||
|
build/src/scene/render_plan.o: $(MODEL_HEADERS)
|
||||||
|
build/src/scene/security_camera.o: build/src/audio/clips.h build/assets/models/props/security_camera.h build/assets/models/dynamic_animated_model_list.h
|
||||||
|
build/src/scene/signage.o: $(MODEL_HEADERS)
|
||||||
|
build/src/scene/switch.o: build/assets/models/props/switch001.h build/assets/materials/static.h build/assets/models/dynamic_animated_model_list.h
|
||||||
|
build/src/util/dynamic_asset_data.o: build/assets/models/dynamic_model_list_data.h
|
||||||
|
|
||||||
|
|
||||||
ANIM_TEST_CHAMBERS = build/assets/test_chambers/test_chamber_00/test_chamber_00_anim.o \
|
ANIM_TEST_CHAMBERS = build/assets/test_chambers/test_chamber_00/test_chamber_00_anim.o \
|
||||||
|
@ -341,13 +315,17 @@ build/assets/models/dynamic_model_list.h build/assets/models/dynamic_model_list_
|
||||||
@mkdir -p $(@D)
|
@mkdir -p $(@D)
|
||||||
node tools/generate_dynamic_model_list.js build/assets/models/dynamic_model_list.h build/assets/models/dynamic_model_list_data.h $(DYNAMIC_MODEL_HEADERS)
|
node tools/generate_dynamic_model_list.js build/assets/models/dynamic_model_list.h build/assets/models/dynamic_model_list_data.h $(DYNAMIC_MODEL_HEADERS)
|
||||||
|
|
||||||
|
build/assets/models/dynamic_animated_model_list.h build/assets/models/dynamic_animated_model_list_data.h: $(DYNAMIC_ANIMATED_MODEL_HEADERS) tools/generate_dynamic_animated_model_list.js
|
||||||
|
@mkdir -p $(@D)
|
||||||
|
node tools/generate_dynamic_animated_model_list.js build/assets/models/dynamic_animated_model_list.h build/assets/models/dynamic_animated_model_list_data.h $(DYNAMIC_ANIMATED_MODEL_HEADERS)
|
||||||
|
|
||||||
build/levels.ld: $(TEST_CHAMBER_OBJECTS) tools/generate_level_ld.js
|
build/levels.ld: $(TEST_CHAMBER_OBJECTS) tools/generate_level_ld.js
|
||||||
@mkdir -p $(@D)
|
@mkdir -p $(@D)
|
||||||
node tools/generate_level_ld.js $@ 0x02000000 $(TEST_CHAMBER_OBJECTS)
|
node tools/generate_level_ld.js $@ 0x02000000 $(TEST_CHAMBER_OBJECTS)
|
||||||
|
|
||||||
build/dynamic_models.ld: $(DYNAMIC_MODEL_OBJECTS) tools/generate_level_ld.js
|
build/dynamic_models.ld: $(DYNAMIC_MODEL_OBJECTS) $(DYNAMIC_ANIMATED_MODEL_OBJECTS) tools/generate_level_ld.js
|
||||||
@mkdir -p $(@D)
|
@mkdir -p $(@D)
|
||||||
node tools/generate_level_ld.js $@ 0x03000000 $(DYNAMIC_MODEL_OBJECTS)
|
node tools/generate_level_ld.js $@ 0x03000000 $(DYNAMIC_MODEL_OBJECTS) $(DYNAMIC_ANIMATED_MODEL_OBJECTS)
|
||||||
|
|
||||||
build/src/levels/levels.o: build/assets/test_chambers/level_list.h build/assets/materials/static.h
|
build/src/levels/levels.o: build/assets/test_chambers/level_list.h build/assets/materials/static.h
|
||||||
|
|
||||||
|
|
|
@ -155,7 +155,7 @@ aiQuaternion evaluateQuaternionAt(const aiQuatKey* keys, unsigned keyCount, doub
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
void generateanimationV2(const aiAnimation& animation, BoneHierarchy& bones, CFileDefinition& fileDef, const DisplayListSettings& settings) {
|
std::string generateanimationV2(const aiAnimation& animation, int index, BoneHierarchy& bones, CFileDefinition& fileDef, const DisplayListSettings& settings) {
|
||||||
int nFrames = ceil(animation.mDuration * settings.mTicksPerSecond / animation.mTicksPerSecond) + 1;
|
int nFrames = ceil(animation.mDuration * settings.mTicksPerSecond / animation.mTicksPerSecond) + 1;
|
||||||
|
|
||||||
std::vector<std::vector<FrameData>> allFrameData(nFrames);
|
std::vector<std::vector<FrameData>> allFrameData(nFrames);
|
||||||
|
@ -235,13 +235,28 @@ void generateanimationV2(const aiAnimation& animation, BoneHierarchy& bones, CFi
|
||||||
clip->AddPrimitive(bones.GetBoneCount());
|
clip->AddPrimitive(bones.GetBoneCount());
|
||||||
clip->AddPrimitive(framesName);
|
clip->AddPrimitive(framesName);
|
||||||
clip->AddPrimitive(settings.mTicksPerSecond);
|
clip->AddPrimitive(settings.mTicksPerSecond);
|
||||||
fileDef.AddDataDefinition(std::string(animation.mName.C_Str()) + "_clip", "struct SKAnimationClip", false, "_geo", std::move(clip));
|
std::string result = fileDef.AddDataDefinition(std::string(animation.mName.C_Str()) + "_clip", "struct SKAnimationClip", false, "_geo", std::move(clip));
|
||||||
|
|
||||||
|
std::string animationMacroName = fileDef.GetUniqueName(std::string(animation.mName.C_Str()) + "_clip_index");
|
||||||
|
std::transform(animationMacroName.begin(), animationMacroName.end(), animationMacroName.begin(), ::toupper);
|
||||||
|
fileDef.AddMacro(animationMacroName, std::to_string(index));
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void generateAnimationDataV2(const aiScene* scene, BoneHierarchy& bones, CFileDefinition& fileDef, const DisplayListSettings& settings) {
|
void generateAnimationDataV2(const aiScene* scene, BoneHierarchy& bones, CFileDefinition& fileDef, const DisplayListSettings& settings) {
|
||||||
|
std::unique_ptr<StructureDataChunk> clipArray(new StructureDataChunk());
|
||||||
|
|
||||||
for (unsigned animationIndex = 0; animationIndex < scene->mNumAnimations; ++animationIndex) {
|
for (unsigned animationIndex = 0; animationIndex < scene->mNumAnimations; ++animationIndex) {
|
||||||
generateanimationV2(*scene->mAnimations[animationIndex], bones, fileDef, settings);
|
std::string clipName = generateanimationV2(*scene->mAnimations[animationIndex], animationIndex, bones, fileDef, settings);
|
||||||
|
clipArray->AddPrimitive("&" + clipName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fileDef.AddDataDefinition("clips", "struct SKAnimationClip*", true, "_geo", std::move(clipArray));
|
||||||
|
|
||||||
|
std::string clipCountMacroName = fileDef.GetUniqueName("CLIP_COUNT");
|
||||||
|
std::transform(clipCountMacroName.begin(), clipCountMacroName.end(), clipCountMacroName.begin(), ::toupper);
|
||||||
|
fileDef.AddMacro(clipCountMacroName, std::to_string(scene->mNumAnimations));
|
||||||
}
|
}
|
||||||
|
|
||||||
AnimationResults generateAnimationForScene(const aiScene* scene, CFileDefinition &fileDefinition, DisplayListSettings& settings) {
|
AnimationResults generateAnimationForScene(const aiScene* scene, CFileDefinition &fileDefinition, DisplayListSettings& settings) {
|
||||||
|
|
|
@ -1,29 +0,0 @@
|
||||||
#include <ultra64.h>
|
|
||||||
|
|
||||||
#include "sk64/skelatool_animator.h"
|
|
||||||
|
|
||||||
#include "../../build/assets/models/portal_gun/v_portalgun.h"
|
|
||||||
#include "../../build/assets/models/portal_gun/w_portalgun.h"
|
|
||||||
#include "../../build/assets/materials/static.h"
|
|
||||||
#include "../../build/assets/models/props/button.h"
|
|
||||||
#include "../../build/assets/models/props/door_01.h"
|
|
||||||
#include "../../build/assets/models/props/cylinder_test.h"
|
|
||||||
#include "../../build/assets/models/props/box_dropper.h"
|
|
||||||
#include "../../build/assets/models/props/box_dropper_glass.h"
|
|
||||||
|
|
||||||
Gfx* v_portal_gun_gfx = &portal_gun_v_portalgun_model_gfx[0];
|
|
||||||
|
|
||||||
Gfx* w_portal_gun_gfx = &portal_gun_w_portalgun_model_gfx[0];
|
|
||||||
|
|
||||||
Gfx* button_gfx = &props_button_model_gfx[0];
|
|
||||||
short button_material_index = BUTTON_INDEX;
|
|
||||||
|
|
||||||
Gfx* cylinder_gfx = &props_cylinder_test_model_gfx[0];
|
|
||||||
short cylinder_material_index = PLASTIC_PLASTICWALL001A_INDEX;
|
|
||||||
|
|
||||||
short fizzler_material_index = PORTAL_CLEANSER_INDEX;
|
|
||||||
|
|
||||||
Gfx* box_dropper_gfx = props_box_dropper_model_gfx;
|
|
||||||
Gfx* box_dropper_glass_gfx = props_box_dropper_glass_model_gfx;
|
|
||||||
short box_dropper_material_index = DEFAULT_INDEX;
|
|
||||||
short box_dropper_glass_material_index = GLASSWINDOW_FROSTED_002_INDEX;
|
|
|
@ -1,22 +0,0 @@
|
||||||
#ifndef __MODELS_H__
|
|
||||||
#define __MODELS_H__
|
|
||||||
|
|
||||||
extern Gfx* v_portal_gun_gfx;
|
|
||||||
|
|
||||||
extern Gfx* w_portal_gun_gfx;
|
|
||||||
|
|
||||||
extern Gfx* button_gfx;
|
|
||||||
extern short button_material_index;
|
|
||||||
|
|
||||||
extern Gfx* cylinder_gfx;
|
|
||||||
extern short cylinder_material_index;
|
|
||||||
|
|
||||||
extern short fizzler_material_index;
|
|
||||||
|
|
||||||
extern Gfx* box_dropper_gfx;
|
|
||||||
extern Gfx* box_dropper_glass_gfx;
|
|
||||||
extern short box_dropper_material_index;
|
|
||||||
extern short box_dropper_glass_material_index;
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
#include "../build/assets/models/grav_flare.h"
|
#include "../build/assets/models/grav_flare.h"
|
||||||
#include "../build/assets/models/fleck_ash2.h"
|
#include "../build/assets/models/fleck_ash2.h"
|
||||||
#include "../build/assets/models/cube/cube.h"
|
|
||||||
#include "../build/assets/materials/static.h"
|
#include "../build/assets/materials/static.h"
|
||||||
|
|
||||||
#include "../audio/soundplayer.h"
|
#include "../audio/soundplayer.h"
|
||||||
|
|
|
@ -6,9 +6,11 @@
|
||||||
#include "../physics/collision_scene.h"
|
#include "../physics/collision_scene.h"
|
||||||
#include "dynamic_scene.h"
|
#include "dynamic_scene.h"
|
||||||
#include "signals.h"
|
#include "signals.h"
|
||||||
|
#include "../util/dynamic_asset_loader.h"
|
||||||
|
|
||||||
#include "../build/assets/models/props/combine_ball_catcher.h"
|
#include "../build/assets/models/props/combine_ball_catcher.h"
|
||||||
#include "../build/assets/materials/static.h"
|
#include "../build/assets/materials/static.h"
|
||||||
|
#include "../../build/assets/models/dynamic_animated_model_list.h"
|
||||||
|
|
||||||
struct CollisionBox gBallCatcherBox = {
|
struct CollisionBox gBallCatcherBox = {
|
||||||
{0.5f, 0.5f, 0.5f},
|
{0.5f, 0.5f, 0.5f},
|
||||||
|
@ -47,7 +49,7 @@ void ballCatcherRender(void* data, struct DynamicRenderDataList* renderList, str
|
||||||
|
|
||||||
dynamicRenderListAddData(
|
dynamicRenderListAddData(
|
||||||
renderList,
|
renderList,
|
||||||
props_combine_ball_catcher_model_gfx,
|
catcher->armature.displayList,
|
||||||
matrix,
|
matrix,
|
||||||
BALL_CATCHER_INDEX,
|
BALL_CATCHER_INDEX,
|
||||||
&catcher->rigidBody.transform.position,
|
&catcher->rigidBody.transform.position,
|
||||||
|
@ -56,8 +58,10 @@ void ballCatcherRender(void* data, struct DynamicRenderDataList* renderList, str
|
||||||
}
|
}
|
||||||
|
|
||||||
void ballCatcherInit(struct BallCatcher* catcher, struct BallCatcherDefinition* definition) {
|
void ballCatcherInit(struct BallCatcher* catcher, struct BallCatcherDefinition* definition) {
|
||||||
|
struct SKArmatureWithAnimations* armature = dynamicAssetAnimatedModel(PROPS_COMBINE_BALL_CATCHER_DYNAMIC_ANIMATED_MODEL);
|
||||||
|
|
||||||
collisionObjectInit(&catcher->collisionObject, &gBallCatcherCollider, &catcher->rigidBody, 1.0f, COLLISION_LAYERS_TANGIBLE);
|
collisionObjectInit(&catcher->collisionObject, &gBallCatcherCollider, &catcher->rigidBody, 1.0f, COLLISION_LAYERS_TANGIBLE);
|
||||||
rigidBodyMarkKinematic(&catcher->rigidBody);
|
rigidBodyMarkKinematic(&catcher->rigidBody);
|
||||||
collisionSceneAddDynamicObject(&catcher->collisionObject);
|
collisionSceneAddDynamicObject(&catcher->collisionObject);
|
||||||
|
|
||||||
catcher->rigidBody.transform.position = definition->position;
|
catcher->rigidBody.transform.position = definition->position;
|
||||||
|
@ -76,7 +80,7 @@ void ballCatcherInit(struct BallCatcher* catcher, struct BallCatcherDefinition*
|
||||||
dynamicSceneSetRoomFlags(catcher->dynamicId, ROOM_FLAG_FROM_INDEX(catcher->rigidBody.currentRoom));
|
dynamicSceneSetRoomFlags(catcher->dynamicId, ROOM_FLAG_FROM_INDEX(catcher->rigidBody.currentRoom));
|
||||||
|
|
||||||
skAnimatorInit(&catcher->animator, PROPS_COMBINE_BALL_CATCHER_DEFAULT_BONES_COUNT);
|
skAnimatorInit(&catcher->animator, PROPS_COMBINE_BALL_CATCHER_DEFAULT_BONES_COUNT);
|
||||||
skArmatureInit(&catcher->armature, &props_combine_ball_catcher_armature);
|
skArmatureInit(&catcher->armature, armature->armature);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ballCatcherCheckBalls(struct BallCatcher* catcher, struct BallLauncher* ballLaunchers, int ballLauncherCount) {
|
void ballCatcherCheckBalls(struct BallCatcher* catcher, struct BallLauncher* ballLaunchers, int ballLauncherCount) {
|
||||||
|
@ -105,7 +109,7 @@ void ballCatcherCheckBalls(struct BallCatcher* catcher, struct BallLauncher* bal
|
||||||
catcher->caughtBall = &launcher->currentBall;
|
catcher->caughtBall = &launcher->currentBall;
|
||||||
soundPlayerPlay(soundsBallCatcher, 5.0f, 1.0f, &catcher->rigidBody.transform.position, &catcher->rigidBody.velocity);
|
soundPlayerPlay(soundsBallCatcher, 5.0f, 1.0f, &catcher->rigidBody.transform.position, &catcher->rigidBody.velocity);
|
||||||
ballMarkCaught(catcher->caughtBall);
|
ballMarkCaught(catcher->caughtBall);
|
||||||
skAnimatorRunClip(&catcher->animator, &props_combine_ball_catcher_Armature_catch_clip, 0.0f, 0);
|
skAnimatorRunClip(&catcher->animator, dynamicAssetClip(PROPS_COMBINE_BALL_CATCHER_DYNAMIC_ANIMATED_MODEL, PROPS_COMBINE_BALL_CATCHER_ARMATURE_CATCH_CLIP_INDEX), 0.0f, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,10 +8,11 @@
|
||||||
#include "signals.h"
|
#include "signals.h"
|
||||||
#include "../audio/clips.h"
|
#include "../audio/clips.h"
|
||||||
#include "../audio/soundplayer.h"
|
#include "../audio/soundplayer.h"
|
||||||
|
#include "../util/dynamic_asset_loader.h"
|
||||||
|
|
||||||
#include "../build/assets/models/props/combine_ball_launcher.h"
|
#include "../build/assets/models/props/combine_ball_launcher.h"
|
||||||
#include "../build/assets/materials/static.h"
|
#include "../build/assets/materials/static.h"
|
||||||
|
#include "../../build/assets/models/dynamic_animated_model_list.h"
|
||||||
|
|
||||||
struct CollisionBox gBallLauncherBox = {
|
struct CollisionBox gBallLauncherBox = {
|
||||||
{0.5f, 0.5f, 0.5f},
|
{0.5f, 0.5f, 0.5f},
|
||||||
|
@ -46,7 +47,7 @@ void ballLauncherRender(void* data, struct DynamicRenderDataList* renderList, st
|
||||||
|
|
||||||
dynamicRenderListAddData(
|
dynamicRenderListAddData(
|
||||||
renderList,
|
renderList,
|
||||||
props_combine_ball_launcher_model_gfx,
|
launcher->armature.displayList,
|
||||||
matrix,
|
matrix,
|
||||||
BALL_CATCHER_INDEX,
|
BALL_CATCHER_INDEX,
|
||||||
&launcher->rigidBody.transform.position,
|
&launcher->rigidBody.transform.position,
|
||||||
|
@ -55,6 +56,8 @@ void ballLauncherRender(void* data, struct DynamicRenderDataList* renderList, st
|
||||||
}
|
}
|
||||||
|
|
||||||
void ballLauncherInit(struct BallLauncher* launcher, struct BallLauncherDefinition* definition) {
|
void ballLauncherInit(struct BallLauncher* launcher, struct BallLauncherDefinition* definition) {
|
||||||
|
struct SKArmatureWithAnimations* armature = dynamicAssetAnimatedModel(PROPS_COMBINE_BALL_LAUNCHER_DYNAMIC_ANIMATED_MODEL);
|
||||||
|
|
||||||
collisionObjectInit(&launcher->collisionObject, &gBallLauncherCollider, &launcher->rigidBody, 1.0f, COLLISION_LAYERS_TANGIBLE | COLLISION_LAYERS_BLOCK_BALL);
|
collisionObjectInit(&launcher->collisionObject, &gBallLauncherCollider, &launcher->rigidBody, 1.0f, COLLISION_LAYERS_TANGIBLE | COLLISION_LAYERS_BLOCK_BALL);
|
||||||
rigidBodyMarkKinematic(&launcher->rigidBody);
|
rigidBodyMarkKinematic(&launcher->rigidBody);
|
||||||
collisionSceneAddDynamicObject(&launcher->collisionObject);
|
collisionSceneAddDynamicObject(&launcher->collisionObject);
|
||||||
|
@ -74,7 +77,7 @@ void ballLauncherInit(struct BallLauncher* launcher, struct BallLauncherDefiniti
|
||||||
dynamicSceneSetRoomFlags(launcher->dynamicId, ROOM_FLAG_FROM_INDEX(launcher->rigidBody.currentRoom));
|
dynamicSceneSetRoomFlags(launcher->dynamicId, ROOM_FLAG_FROM_INDEX(launcher->rigidBody.currentRoom));
|
||||||
|
|
||||||
skAnimatorInit(&launcher->animator, PROPS_COMBINE_BALL_LAUNCHER_DEFAULT_BONES_COUNT);
|
skAnimatorInit(&launcher->animator, PROPS_COMBINE_BALL_LAUNCHER_DEFAULT_BONES_COUNT);
|
||||||
skArmatureInit(&launcher->armature, &props_combine_ball_launcher_armature);
|
skArmatureInit(&launcher->armature, armature->armature);
|
||||||
|
|
||||||
ballInitInactive(&launcher->currentBall);
|
ballInitInactive(&launcher->currentBall);
|
||||||
}
|
}
|
||||||
|
@ -94,7 +97,7 @@ void ballLauncherUpdate(struct BallLauncher* launcher) {
|
||||||
vector3Scale(&initialVelocity, &initialVelocity, BALL_VELOCITY);
|
vector3Scale(&initialVelocity, &initialVelocity, BALL_VELOCITY);
|
||||||
|
|
||||||
ballInit(&launcher->currentBall, &launcher->rigidBody.transform.position, &initialVelocity, launcher->rigidBody.currentRoom, launcher->ballLifetime);
|
ballInit(&launcher->currentBall, &launcher->rigidBody.transform.position, &initialVelocity, launcher->rigidBody.currentRoom, launcher->ballLifetime);
|
||||||
skAnimatorRunClip(&launcher->animator, &props_combine_ball_launcher_Armature_launch_clip, 0.0f, 0);
|
skAnimatorRunClip(&launcher->animator, dynamicAssetClip(PROPS_COMBINE_BALL_LAUNCHER_DYNAMIC_ANIMATED_MODEL, PROPS_COMBINE_BALL_LAUNCHER_ARMATURE_LAUNCH_CLIP_INDEX), 0.0f, 0);
|
||||||
soundPlayerPlay(soundsBallLaunch, 1.0f, 1.0f, &launcher->rigidBody.transform.position, &gZeroVec);
|
soundPlayerPlay(soundsBallLaunch, 1.0f, 1.0f, &launcher->rigidBody.transform.position, &gZeroVec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
#include "box_dropper.h"
|
#include "box_dropper.h"
|
||||||
|
|
||||||
#include "../scene/dynamic_scene.h"
|
#include "../scene/dynamic_scene.h"
|
||||||
#include "../models/models.h"
|
|
||||||
#include "../defs.h"
|
#include "../defs.h"
|
||||||
#include "../physics/config.h"
|
#include "../physics/config.h"
|
||||||
#include "../util/time.h"
|
#include "../util/time.h"
|
||||||
|
@ -12,6 +11,7 @@
|
||||||
#include "../../build/assets/materials/static.h"
|
#include "../../build/assets/materials/static.h"
|
||||||
#include "../../build/assets/models/props/box_dropper.h"
|
#include "../../build/assets/models/props/box_dropper.h"
|
||||||
#include "../../build/assets/models/dynamic_model_list.h"
|
#include "../../build/assets/models/dynamic_model_list.h"
|
||||||
|
#include "../../build/assets/models/dynamic_animated_model_list.h"
|
||||||
|
|
||||||
#define DROOPER_RELOAD_TIME 2.0f
|
#define DROOPER_RELOAD_TIME 2.0f
|
||||||
#define DROPPER_DROP_TIME 0.5f
|
#define DROPPER_DROP_TIME 0.5f
|
||||||
|
@ -50,18 +50,18 @@ void boxDropperRender(void* data, struct DynamicRenderDataList* renderList, stru
|
||||||
|
|
||||||
dynamicRenderListAddData(
|
dynamicRenderListAddData(
|
||||||
renderList,
|
renderList,
|
||||||
props_box_dropper_model_gfx,
|
dropper->armature.displayList,
|
||||||
matrix,
|
matrix,
|
||||||
box_dropper_material_index,
|
DEFAULT_INDEX,
|
||||||
&dropper->transform.position,
|
&dropper->transform.position,
|
||||||
armature
|
armature
|
||||||
);
|
);
|
||||||
|
|
||||||
dynamicRenderListAddData(
|
dynamicRenderListAddData(
|
||||||
renderList,
|
renderList,
|
||||||
box_dropper_glass_gfx,
|
dynamicAssetModel(PROPS_BOX_DROPPER_GLASS_DYNAMIC_MODEL),
|
||||||
matrix,
|
matrix,
|
||||||
box_dropper_glass_material_index,
|
GLASSWINDOW_FROSTED_002_INDEX,
|
||||||
&dropper->transform.position,
|
&dropper->transform.position,
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
|
@ -90,6 +90,8 @@ void boxDropperRender(void* data, struct DynamicRenderDataList* renderList, stru
|
||||||
}
|
}
|
||||||
|
|
||||||
void boxDropperInit(struct BoxDropper* dropper, struct BoxDropperDefinition* definition) {
|
void boxDropperInit(struct BoxDropper* dropper, struct BoxDropperDefinition* definition) {
|
||||||
|
struct SKArmatureWithAnimations* armature = dynamicAssetAnimatedModel(PROPS_BOX_DROPPER_DYNAMIC_ANIMATED_MODEL);
|
||||||
|
|
||||||
dropper->dynamicId = dynamicSceneAdd(dropper, boxDropperRender, &dropper->transform.position, 1.5f);
|
dropper->dynamicId = dynamicSceneAdd(dropper, boxDropperRender, &dropper->transform.position, 1.5f);
|
||||||
|
|
||||||
dropper->transform.position = definition->position;
|
dropper->transform.position = definition->position;
|
||||||
|
@ -99,7 +101,7 @@ void boxDropperInit(struct BoxDropper* dropper, struct BoxDropperDefinition* def
|
||||||
dropper->roomIndex = definition->roomIndex;
|
dropper->roomIndex = definition->roomIndex;
|
||||||
dropper->signalIndex = definition->signalIndex;
|
dropper->signalIndex = definition->signalIndex;
|
||||||
|
|
||||||
skArmatureInit(&dropper->armature, &props_box_dropper_armature);
|
skArmatureInit(&dropper->armature, armature->armature);
|
||||||
|
|
||||||
skAnimatorInit(&dropper->animator, PROPS_BOX_DROPPER_DEFAULT_BONES_COUNT);
|
skAnimatorInit(&dropper->animator, PROPS_BOX_DROPPER_DEFAULT_BONES_COUNT);
|
||||||
|
|
||||||
|
@ -109,6 +111,7 @@ void boxDropperInit(struct BoxDropper* dropper, struct BoxDropperDefinition* def
|
||||||
dynamicSceneSetRoomFlags(dropper->dynamicId, ROOM_FLAG_FROM_INDEX(dropper->roomIndex));
|
dynamicSceneSetRoomFlags(dropper->dynamicId, ROOM_FLAG_FROM_INDEX(dropper->roomIndex));
|
||||||
|
|
||||||
dynamicAssetModelPreload(CUBE_CUBE_DYNAMIC_MODEL);
|
dynamicAssetModelPreload(CUBE_CUBE_DYNAMIC_MODEL);
|
||||||
|
dynamicAssetModelPreload(PROPS_BOX_DROPPER_GLASS_DYNAMIC_MODEL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void boxDropperUpdate(struct BoxDropper* dropper) {
|
void boxDropperUpdate(struct BoxDropper* dropper) {
|
||||||
|
@ -146,7 +149,7 @@ void boxDropperUpdate(struct BoxDropper* dropper) {
|
||||||
boxDropperFakePos(dropper, &pendingCubePos);
|
boxDropperFakePos(dropper, &pendingCubePos);
|
||||||
|
|
||||||
decorObjectInit(&dropper->activeCube, decorObjectDefinitionForId(DECOR_TYPE_CUBE_UNIMPORTANT), &pendingCubePos, dropper->roomIndex);
|
decorObjectInit(&dropper->activeCube, decorObjectDefinitionForId(DECOR_TYPE_CUBE_UNIMPORTANT), &pendingCubePos, dropper->roomIndex);
|
||||||
skAnimatorRunClip(&dropper->animator, &props_box_dropper_Armature_DropCube_clip, 0.0f, 0);
|
skAnimatorRunClip(&dropper->animator, dynamicAssetClip(PROPS_BOX_DROPPER_DYNAMIC_ANIMATED_MODEL, PROPS_BOX_DROPPER_ARMATURE_DROPCUBE_CLIP_INDEX), 0.0f, 0);
|
||||||
soundPlayerPlay(soundsReleaseCube, 5.0f, 0.5f, &dropper->activeCube.rigidBody.transform.position, &gZeroVec);
|
soundPlayerPlay(soundsReleaseCube, 5.0f, 0.5f, &dropper->activeCube.rigidBody.transform.position, &gZeroVec);
|
||||||
|
|
||||||
dropper->flags &= ~BoxDropperFlagsCubeRequested;
|
dropper->flags &= ~BoxDropperFlagsCubeRequested;
|
||||||
|
|
|
@ -1,15 +1,17 @@
|
||||||
#include "button.h"
|
#include "button.h"
|
||||||
|
|
||||||
#include "defs.h"
|
#include "defs.h"
|
||||||
#include "../models/models.h"
|
|
||||||
#include "../graphics/renderstate.h"
|
#include "../graphics/renderstate.h"
|
||||||
#include "dynamic_scene.h"
|
#include "dynamic_scene.h"
|
||||||
#include "../physics/collision_cylinder.h"
|
#include "../physics/collision_cylinder.h"
|
||||||
#include "../physics/collision_scene.h"
|
#include "../physics/collision_scene.h"
|
||||||
#include "../physics/contact_solver.h"
|
#include "../physics/contact_solver.h"
|
||||||
#include "../util/time.h"
|
#include "../util/time.h"
|
||||||
|
#include "../util/dynamic_asset_loader.h"
|
||||||
|
|
||||||
#include "../build/assets/models/props/button.h"
|
#include "../../build/assets/models/dynamic_animated_model_list.h"
|
||||||
|
#include "../build/assets/materials/static.h"
|
||||||
|
#include "../../build/assets/models/props/button.h"
|
||||||
|
|
||||||
struct Vector2 gButtonCylinderEdgeVectors[] = {
|
struct Vector2 gButtonCylinderEdgeVectors[] = {
|
||||||
{0.0f, 1.0f},
|
{0.0f, 1.0f},
|
||||||
|
@ -59,16 +61,20 @@ void buttonRender(void* data, struct DynamicRenderDataList* renderList, struct R
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
transformToMatrixL(&props_button_default_bones[PROPS_BUTTON_BUTTONBASE_BONE], &armature[PROPS_BUTTON_BUTTONBASE_BONE], 1.0f);
|
struct SKArmatureWithAnimations* armatureDef = dynamicAssetAnimatedModel(PROPS_BUTTON_DYNAMIC_ANIMATED_MODEL);
|
||||||
|
|
||||||
|
transformToMatrixL(&armatureDef->armature->pose[PROPS_BUTTON_BUTTONBASE_BONE], &armature[PROPS_BUTTON_BUTTONBASE_BONE], 1.0f);
|
||||||
|
|
||||||
// reusing global memory
|
// reusing global memory
|
||||||
props_button_default_bones[PROPS_BUTTON_BUTTONPAD_BONE].position.y = (button->rigidBody.transform.position.y - button->originalPos.y) * SCENE_SCALE;
|
armatureDef->armature->pose[PROPS_BUTTON_BUTTONPAD_BONE].position.y = (button->rigidBody.transform.position.y - button->originalPos.y) * SCENE_SCALE;
|
||||||
transformToMatrixL(&props_button_default_bones[PROPS_BUTTON_BUTTONPAD_BONE], &armature[PROPS_BUTTON_BUTTONPAD_BONE], 1.0f);
|
transformToMatrixL(&armatureDef->armature->pose[PROPS_BUTTON_BUTTONPAD_BONE], &armature[PROPS_BUTTON_BUTTONPAD_BONE], 1.0f);
|
||||||
|
|
||||||
dynamicRenderListAddData(renderList, button_gfx, matrix, button_material_index, &button->rigidBody.transform.position, armature);
|
dynamicRenderListAddData(renderList, armatureDef->armature->displayList, matrix, BUTTON_INDEX, &button->rigidBody.transform.position, armature);
|
||||||
}
|
}
|
||||||
|
|
||||||
void buttonInit(struct Button* button, struct ButtonDefinition* definition) {
|
void buttonInit(struct Button* button, struct ButtonDefinition* definition) {
|
||||||
|
dynamicAssetAnimatedModel(PROPS_BUTTON_DYNAMIC_ANIMATED_MODEL);
|
||||||
|
|
||||||
collisionObjectInit(&button->collisionObject, &gButtonCollider, &button->rigidBody, 1.0f, COLLISION_LAYERS_TANGIBLE);
|
collisionObjectInit(&button->collisionObject, &gButtonCollider, &button->rigidBody, 1.0f, COLLISION_LAYERS_TANGIBLE);
|
||||||
rigidBodyMarkKinematic(&button->rigidBody);
|
rigidBodyMarkKinematic(&button->rigidBody);
|
||||||
collisionSceneAddDynamicObject(&button->collisionObject);
|
collisionSceneAddDynamicObject(&button->collisionObject);
|
||||||
|
|
|
@ -2,15 +2,16 @@
|
||||||
|
|
||||||
#include "../graphics/render_scene.h"
|
#include "../graphics/render_scene.h"
|
||||||
#include "defs.h"
|
#include "defs.h"
|
||||||
#include "../models/models.h"
|
|
||||||
#include "../scene/dynamic_scene.h"
|
#include "../scene/dynamic_scene.h"
|
||||||
#include "signals.h"
|
#include "signals.h"
|
||||||
#include "../math/mathf.h"
|
#include "../math/mathf.h"
|
||||||
#include "../util/time.h"
|
#include "../util/time.h"
|
||||||
#include "../physics/collision_box.h"
|
#include "../physics/collision_box.h"
|
||||||
#include "../physics/collision_scene.h"
|
#include "../physics/collision_scene.h"
|
||||||
|
#include "../util/dynamic_asset_loader.h"
|
||||||
|
|
||||||
#include "../build/assets/materials/static.h"
|
#include "../build/assets/materials/static.h"
|
||||||
|
#include "../../build/assets/models/dynamic_animated_model_list.h"
|
||||||
|
|
||||||
#include "../build/assets/models/props/door_01.h"
|
#include "../build/assets/models/props/door_01.h"
|
||||||
#include "../build/assets/models/props/door_02.h"
|
#include "../build/assets/models/props/door_02.h"
|
||||||
|
@ -33,22 +34,20 @@ struct ColliderTypeData gDoorCollider = {
|
||||||
|
|
||||||
struct DoorTypeDefinition gDoorTypeDefinitions[] = {
|
struct DoorTypeDefinition gDoorTypeDefinitions[] = {
|
||||||
[DoorType01] = {
|
[DoorType01] = {
|
||||||
&props_door_01_armature,
|
PROPS_DOOR_01_DYNAMIC_ANIMATED_MODEL,
|
||||||
&props_door_01_model_gfx[0],
|
PROPS_DOOR_01_ARMATURE_OPEN_CLIP_INDEX,
|
||||||
&props_door_01_Armature_open_clip,
|
PROPS_DOOR_01_ARMATURE_CLOSE_CLIP_INDEX,
|
||||||
&props_door_01_Armature_close_clip,
|
PROPS_DOOR_01_ARMATURE_OPENED_CLIP_INDEX,
|
||||||
&props_door_01_Armature_opened_clip,
|
|
||||||
DOOR_01_INDEX,
|
DOOR_01_INDEX,
|
||||||
-1,
|
-1,
|
||||||
1.0f,
|
1.0f,
|
||||||
{0.0f, 0.0f, 0.0f, 1.0f},
|
{0.0f, 0.0f, 0.0f, 1.0f},
|
||||||
},
|
},
|
||||||
[DoorType02] = {
|
[DoorType02] = {
|
||||||
&props_door_02_armature,
|
PROPS_DOOR_02_DYNAMIC_ANIMATED_MODEL,
|
||||||
&props_door_02_model_gfx[0],
|
PROPS_DOOR_02_ARMATURE_OPEN_CLIP_INDEX,
|
||||||
&props_door_02_Armature_open_clip,
|
PROPS_DOOR_02_ARMATURE_CLOSE_CLIP_INDEX,
|
||||||
&props_door_02_Armature_close_clip,
|
PROPS_DOOR_02_ARMATURE_OPENED_CLIP_INDEX,
|
||||||
&props_door_02_Armature_opened_clip,
|
|
||||||
DOOR_02_INDEX,
|
DOOR_02_INDEX,
|
||||||
PROPS_DOOR_02_DOOR_BONE,
|
PROPS_DOOR_02_DOOR_BONE,
|
||||||
3.0f,
|
3.0f,
|
||||||
|
@ -80,7 +79,7 @@ void doorRender(void* data, struct DynamicRenderDataList* renderList, struct Ren
|
||||||
|
|
||||||
skCalculateTransforms(&door->armature, armature);
|
skCalculateTransforms(&door->armature, armature);
|
||||||
|
|
||||||
dynamicRenderListAddData(renderList, typeDefinition->model, matrix, typeDefinition->materialIndex, &door->rigidBody.transform.position, armature);
|
dynamicRenderListAddData(renderList, door->armature.displayList, matrix, typeDefinition->materialIndex, &door->rigidBody.transform.position, armature);
|
||||||
}
|
}
|
||||||
|
|
||||||
void doorInit(struct Door* door, struct DoorDefinition* doorDefinition, struct World* world) {
|
void doorInit(struct Door* door, struct DoorDefinition* doorDefinition, struct World* world) {
|
||||||
|
@ -89,9 +88,10 @@ void doorInit(struct Door* door, struct DoorDefinition* doorDefinition, struct W
|
||||||
collisionSceneAddDynamicObject(&door->collisionObject);
|
collisionSceneAddDynamicObject(&door->collisionObject);
|
||||||
|
|
||||||
struct DoorTypeDefinition* typeDefinition = &gDoorTypeDefinitions[doorDefinition->doorType];
|
struct DoorTypeDefinition* typeDefinition = &gDoorTypeDefinitions[doorDefinition->doorType];
|
||||||
|
struct SKArmatureWithAnimations* armature = dynamicAssetAnimatedModel(typeDefinition->armatureIndex);
|
||||||
|
|
||||||
skArmatureInit(&door->armature, typeDefinition->armature);
|
skArmatureInit(&door->armature, armature->armature);
|
||||||
skAnimatorInit(&door->animator, typeDefinition->armature->numberOfBones);
|
skAnimatorInit(&door->animator, armature->armature->numberOfBones);
|
||||||
|
|
||||||
door->rigidBody.transform.position = doorDefinition->location;
|
door->rigidBody.transform.position = doorDefinition->location;
|
||||||
door->rigidBody.transform.position.y += 1.0f;
|
door->rigidBody.transform.position.y += 1.0f;
|
||||||
|
@ -126,9 +126,9 @@ void doorUpdate(struct Door* door) {
|
||||||
|
|
||||||
if (isOpen != signal) {
|
if (isOpen != signal) {
|
||||||
if (signal) {
|
if (signal) {
|
||||||
skAnimatorRunClip(&door->animator, typeDefinition->openClip, 0.0f, 0);
|
skAnimatorRunClip(&door->animator, dynamicAssetClip(typeDefinition->armatureIndex, typeDefinition->openClipIndex), 0.0f, 0);
|
||||||
} else {
|
} else {
|
||||||
skAnimatorRunClip(&door->animator, typeDefinition->closeClip, 0.0f, 0);
|
skAnimatorRunClip(&door->animator, dynamicAssetClip(typeDefinition->armatureIndex, typeDefinition->closeClipIndex), 0.0f, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
soundPlayerPlay(soundsDoor, 3.0f, 0.5f, &door->rigidBody.transform.position, &gZeroVec);
|
soundPlayerPlay(soundsDoor, 3.0f, 0.5f, &door->rigidBody.transform.position, &gZeroVec);
|
||||||
|
@ -168,6 +168,6 @@ void doorCheckForOpenState(struct Door* door) {
|
||||||
|
|
||||||
int signal = signalsRead(door->signalIndex);
|
int signal = signalsRead(door->signalIndex);
|
||||||
if (signal) {
|
if (signal) {
|
||||||
skAnimatorRunClip(&door->animator, typeDefinition->openedClip, 0.0f, 0);
|
skAnimatorRunClip(&door->animator, dynamicAssetClip(typeDefinition->armatureIndex, typeDefinition->openedClipIndex), 0.0f, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -13,11 +13,10 @@ enum DoorFlags {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct DoorTypeDefinition {
|
struct DoorTypeDefinition {
|
||||||
struct SKArmatureDefinition* armature;
|
short armatureIndex;
|
||||||
Gfx* model;
|
short openClipIndex;
|
||||||
struct SKAnimationClip* openClip;
|
short closeClipIndex;
|
||||||
struct SKAnimationClip* closeClip;
|
short openedClipIndex;
|
||||||
struct SKAnimationClip* openedClip;
|
|
||||||
short materialIndex;
|
short materialIndex;
|
||||||
short colliderBoneIndex;
|
short colliderBoneIndex;
|
||||||
float closeSpeed;
|
float closeSpeed;
|
||||||
|
|
|
@ -4,9 +4,10 @@
|
||||||
#include "../graphics/render_scene.h"
|
#include "../graphics/render_scene.h"
|
||||||
#include "../scene/dynamic_scene.h"
|
#include "../scene/dynamic_scene.h"
|
||||||
#include "../physics/collision_scene.h"
|
#include "../physics/collision_scene.h"
|
||||||
#include "../models/models.h"
|
#include "../util/dynamic_asset_loader.h"
|
||||||
|
|
||||||
|
#include "../../build/assets/models/dynamic_model_list.h"
|
||||||
|
|
||||||
#include "../build/assets/models/props/portal_cleanser.h"
|
|
||||||
#include "../build/assets/materials/static.h"
|
#include "../build/assets/materials/static.h"
|
||||||
|
|
||||||
#define GFX_PER_PARTICLE(particleCount) ((particleCount) + (((particleCount) + 7) >> 3) + 1)
|
#define GFX_PER_PARTICLE(particleCount) ((particleCount) + (((particleCount) + 7) >> 3) + 1)
|
||||||
|
@ -40,7 +41,7 @@ void fizzlerRender(void* data, struct DynamicRenderDataList* renderList, struct
|
||||||
|
|
||||||
transformToMatrixL(&fizzler->rigidBody.transform, matrix, SCENE_SCALE);
|
transformToMatrixL(&fizzler->rigidBody.transform, matrix, SCENE_SCALE);
|
||||||
|
|
||||||
dynamicRenderListAddData(renderList, fizzler->modelGraphics, matrix, fizzler_material_index, &fizzler->rigidBody.transform.position, NULL);
|
dynamicRenderListAddData(renderList, fizzler->modelGraphics, matrix, PORTAL_CLEANSER_INDEX, &fizzler->rigidBody.transform.position, NULL);
|
||||||
|
|
||||||
Mtx* sideMatrices = renderStateRequestMatrices(renderState, 2);
|
Mtx* sideMatrices = renderStateRequestMatrices(renderState, 2);
|
||||||
|
|
||||||
|
@ -52,12 +53,12 @@ void fizzlerRender(void* data, struct DynamicRenderDataList* renderList, struct
|
||||||
gRelativeLeft.position.x = fizzler->collisionBox.sideLength.x;
|
gRelativeLeft.position.x = fizzler->collisionBox.sideLength.x;
|
||||||
transformConcat(&fizzler->rigidBody.transform, &gRelativeLeft, &combinedTransform);
|
transformConcat(&fizzler->rigidBody.transform, &gRelativeLeft, &combinedTransform);
|
||||||
transformToMatrixL(&combinedTransform, &sideMatrices[0], SCENE_SCALE);
|
transformToMatrixL(&combinedTransform, &sideMatrices[0], SCENE_SCALE);
|
||||||
dynamicRenderListAddData(renderList, props_portal_cleanser_model_gfx, &sideMatrices[0], PORTAL_CLEANSER_WALL_INDEX, &fizzler->rigidBody.transform.position, NULL);
|
dynamicRenderListAddData(renderList, dynamicAssetModel(PROPS_PORTAL_CLEANSER_DYNAMIC_MODEL), &sideMatrices[0], PORTAL_CLEANSER_WALL_INDEX, &fizzler->rigidBody.transform.position, NULL);
|
||||||
|
|
||||||
gRelativeRight.position.x = -fizzler->collisionBox.sideLength.x;
|
gRelativeRight.position.x = -fizzler->collisionBox.sideLength.x;
|
||||||
transformConcat(&fizzler->rigidBody.transform, &gRelativeRight, &combinedTransform);
|
transformConcat(&fizzler->rigidBody.transform, &gRelativeRight, &combinedTransform);
|
||||||
transformToMatrixL(&combinedTransform, &sideMatrices[1], SCENE_SCALE);
|
transformToMatrixL(&combinedTransform, &sideMatrices[1], SCENE_SCALE);
|
||||||
dynamicRenderListAddData(renderList, props_portal_cleanser_model_gfx, &sideMatrices[1], PORTAL_CLEANSER_WALL_INDEX, &fizzler->rigidBody.transform.position, NULL);
|
dynamicRenderListAddData(renderList, dynamicAssetModel(PROPS_PORTAL_CLEANSER_DYNAMIC_MODEL), &sideMatrices[1], PORTAL_CLEANSER_WALL_INDEX, &fizzler->rigidBody.transform.position, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void fizzlerSpawnParticle(struct Fizzler* fizzler, int particleIndex) {
|
void fizzlerSpawnParticle(struct Fizzler* fizzler, int particleIndex) {
|
||||||
|
@ -187,6 +188,8 @@ void fizzlerInit(struct Fizzler* fizzler, struct Transform* transform, float wid
|
||||||
fizzler->dynamicId = dynamicSceneAdd(fizzler, fizzlerRender, &fizzler->rigidBody.transform.position, sqrtf(width * width + height * height) * 0.5f);
|
fizzler->dynamicId = dynamicSceneAdd(fizzler, fizzlerRender, &fizzler->rigidBody.transform.position, sqrtf(width * width + height * height) * 0.5f);
|
||||||
|
|
||||||
dynamicSceneSetRoomFlags(fizzler->dynamicId, ROOM_FLAG_FROM_INDEX(room));
|
dynamicSceneSetRoomFlags(fizzler->dynamicId, ROOM_FLAG_FROM_INDEX(room));
|
||||||
|
|
||||||
|
dynamicAssetModelPreload(PROPS_PORTAL_CLEANSER_DYNAMIC_MODEL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void fizzlerUpdate(struct Fizzler* fizzler) {
|
void fizzlerUpdate(struct Fizzler* fizzler) {
|
||||||
|
|
|
@ -2,11 +2,13 @@
|
||||||
|
|
||||||
#include "../scene/dynamic_scene.h"
|
#include "../scene/dynamic_scene.h"
|
||||||
#include "../defs.h"
|
#include "../defs.h"
|
||||||
#include "../models/models.h"
|
|
||||||
#include "../util/time.h"
|
#include "../util/time.h"
|
||||||
|
#include "../util/dynamic_asset_loader.h"
|
||||||
|
|
||||||
#include "../build/assets/materials/static.h"
|
#include "../build/assets/materials/static.h"
|
||||||
#include "../build/assets/models/pedestal.h"
|
#include "../build/assets/models/pedestal.h"
|
||||||
|
#include "../../build/assets/models/dynamic_animated_model_list.h"
|
||||||
|
#include "../../build/assets/models/portal_gun/w_portalgun.h"
|
||||||
|
|
||||||
struct Vector2 gMaxPedistalRotation;
|
struct Vector2 gMaxPedistalRotation;
|
||||||
#define MAX_PEDISTAL_ROTATION_DEGREES_PER_SEC (M_PI / 3.0f)
|
#define MAX_PEDISTAL_ROTATION_DEGREES_PER_SEC (M_PI / 3.0f)
|
||||||
|
@ -30,7 +32,8 @@ void pedestalRender(void* data, struct DynamicRenderDataList* renderList, struct
|
||||||
|
|
||||||
skCalculateTransforms(&pedestal->armature, armature);
|
skCalculateTransforms(&pedestal->armature, armature);
|
||||||
|
|
||||||
Gfx* attachments = skBuildAttachments(&pedestal->armature, (pedestal->flags & PedestalFlagsDown) ? NULL : &w_portal_gun_gfx, renderState);
|
Gfx* gunAttachment = portal_gun_w_portalgun_model_gfx;
|
||||||
|
Gfx* attachments = skBuildAttachments(&pedestal->armature, (pedestal->flags & PedestalFlagsDown) ? NULL : &gunAttachment, renderState);
|
||||||
|
|
||||||
Gfx* objectRender = renderStateAllocateDLChunk(renderState, 4);
|
Gfx* objectRender = renderStateAllocateDLChunk(renderState, 4);
|
||||||
Gfx* dl = objectRender;
|
Gfx* dl = objectRender;
|
||||||
|
@ -39,7 +42,7 @@ void pedestalRender(void* data, struct DynamicRenderDataList* renderList, struct
|
||||||
gSPSegment(dl++, BONE_ATTACHMENT_SEGMENT, osVirtualToPhysical(attachments));
|
gSPSegment(dl++, BONE_ATTACHMENT_SEGMENT, osVirtualToPhysical(attachments));
|
||||||
}
|
}
|
||||||
gSPSegment(dl++, MATRIX_TRANSFORM_SEGMENT, osVirtualToPhysical(armature));
|
gSPSegment(dl++, MATRIX_TRANSFORM_SEGMENT, osVirtualToPhysical(armature));
|
||||||
gSPDisplayList(dl++, pedestal_model_gfx);
|
gSPDisplayList(dl++, pedestal->armature.displayList);
|
||||||
gSPEndDisplayList(dl++);
|
gSPEndDisplayList(dl++);
|
||||||
|
|
||||||
dynamicRenderListAddData(
|
dynamicRenderListAddData(
|
||||||
|
@ -53,12 +56,14 @@ void pedestalRender(void* data, struct DynamicRenderDataList* renderList, struct
|
||||||
}
|
}
|
||||||
|
|
||||||
void pedestalInit(struct Pedestal* pedestal, struct PedestalDefinition* definition) {
|
void pedestalInit(struct Pedestal* pedestal, struct PedestalDefinition* definition) {
|
||||||
|
struct SKArmatureWithAnimations* armature = dynamicAssetAnimatedModel(PEDESTAL_DYNAMIC_ANIMATED_MODEL);
|
||||||
|
|
||||||
transformInitIdentity(&pedestal->transform);
|
transformInitIdentity(&pedestal->transform);
|
||||||
|
|
||||||
pedestal->transform.position = definition->position;
|
pedestal->transform.position = definition->position;
|
||||||
pedestal->roomIndex = definition->roomIndex;
|
pedestal->roomIndex = definition->roomIndex;
|
||||||
|
|
||||||
skArmatureInit(&pedestal->armature, &pedestal_armature);
|
skArmatureInit(&pedestal->armature, armature->armature);
|
||||||
|
|
||||||
skAnimatorInit(&pedestal->animator, PEDESTAL_DEFAULT_BONES_COUNT);
|
skAnimatorInit(&pedestal->animator, PEDESTAL_DEFAULT_BONES_COUNT);
|
||||||
|
|
||||||
|
@ -112,7 +117,7 @@ void pedestalUpdate(struct Pedestal* pedestal) {
|
||||||
void pedestalHide(struct Pedestal* pedestal) {
|
void pedestalHide(struct Pedestal* pedestal) {
|
||||||
soundPlayerPlay(soundsReleaseCube, 3.0f, 0.5f, &pedestal->transform.position, &gZeroVec);
|
soundPlayerPlay(soundsReleaseCube, 3.0f, 0.5f, &pedestal->transform.position, &gZeroVec);
|
||||||
pedestal->flags |= PedestalFlagsDown;
|
pedestal->flags |= PedestalFlagsDown;
|
||||||
skAnimatorRunClip(&pedestal->animator, &pedestal_Armature_Hide_clip, 0.0f, 0);
|
skAnimatorRunClip(&pedestal->animator, dynamicAssetClip(PEDESTAL_DYNAMIC_ANIMATED_MODEL, PEDESTAL_ARMATURE_HIDE_CLIP_INDEX), 0.0f, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pedestalPointAt(struct Pedestal* pedestal, struct Vector3* target) {
|
void pedestalPointAt(struct Pedestal* pedestal, struct Vector3* target) {
|
||||||
|
@ -121,5 +126,5 @@ void pedestalPointAt(struct Pedestal* pedestal, struct Vector3* target) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void pedestalSetDown(struct Pedestal* pedestal) {
|
void pedestalSetDown(struct Pedestal* pedestal) {
|
||||||
skAnimatorRunClip(&pedestal->animator, &pedestal_Armature_Hidden_clip, 0.0f, 0);
|
skAnimatorRunClip(&pedestal->animator, dynamicAssetClip(PEDESTAL_DYNAMIC_ANIMATED_MODEL, PEDESTAL_ARMATURE_HIDDEN_CLIP_INDEX), 0.0f, 0);
|
||||||
}
|
}
|
|
@ -1,6 +1,5 @@
|
||||||
#include "portal.h"
|
#include "portal.h"
|
||||||
|
|
||||||
#include "models/models.h"
|
|
||||||
#include "../graphics/screen_clipper.h"
|
#include "../graphics/screen_clipper.h"
|
||||||
#include "../graphics/graphics.h"
|
#include "../graphics/graphics.h"
|
||||||
#include "../defs.h"
|
#include "../defs.h"
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
|
|
||||||
#include "../physics/collision_scene.h"
|
#include "../physics/collision_scene.h"
|
||||||
#include "../physics/collision_cylinder.h"
|
#include "../physics/collision_cylinder.h"
|
||||||
#include "models/models.h"
|
|
||||||
|
#include "../../build/assets/models/portal_gun/v_portalgun.h"
|
||||||
|
|
||||||
#define PORTAL_GUN_RECOIL_TIME (0.18f)
|
#define PORTAL_GUN_RECOIL_TIME (0.18f)
|
||||||
|
|
||||||
|
@ -55,7 +56,7 @@ void portalGunRenderReal(struct PortalGun* portalGun, struct RenderState* render
|
||||||
|
|
||||||
transformToMatrixL(&portalGun->rigidBody.transform, matrix, SCENE_SCALE);
|
transformToMatrixL(&portalGun->rigidBody.transform, matrix, SCENE_SCALE);
|
||||||
gSPMatrix(renderState->dl++, matrix, G_MTX_MODELVIEW | G_MTX_PUSH | G_MTX_MUL);
|
gSPMatrix(renderState->dl++, matrix, G_MTX_MODELVIEW | G_MTX_PUSH | G_MTX_MUL);
|
||||||
gSPDisplayList(renderState->dl++, v_portal_gun_gfx);
|
gSPDisplayList(renderState->dl++, portal_gun_v_portalgun_model_gfx);
|
||||||
gSPPopMatrix(renderState->dl++, G_MTX_MODELVIEW);
|
gSPPopMatrix(renderState->dl++, G_MTX_MODELVIEW);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
|
|
||||||
#include "defs.h"
|
#include "defs.h"
|
||||||
#include "graphics/graphics.h"
|
#include "graphics/graphics.h"
|
||||||
#include "models/models.h"
|
|
||||||
#include "materials/shadow_caster.h"
|
#include "materials/shadow_caster.h"
|
||||||
#include "materials/subject.h"
|
#include "materials/subject.h"
|
||||||
#include "materials/light.h"
|
#include "materials/light.h"
|
||||||
|
|
|
@ -8,10 +8,12 @@
|
||||||
#include "../util/time.h"
|
#include "../util/time.h"
|
||||||
#include "../levels/cutscene_runner.h"
|
#include "../levels/cutscene_runner.h"
|
||||||
#include "../decor/decor_object.h"
|
#include "../decor/decor_object.h"
|
||||||
|
#include "../util/dynamic_asset_loader.h"
|
||||||
|
|
||||||
#include "../build/assets/models/props/security_camera.h"
|
|
||||||
#include "../build/assets/materials/static.h"
|
#include "../build/assets/materials/static.h"
|
||||||
#include "../build/src/audio/clips.h"
|
#include "../build/src/audio/clips.h"
|
||||||
|
#include "../../build/assets/models/dynamic_animated_model_list.h"
|
||||||
|
#include "../../build/assets/models/props/security_camera.h"
|
||||||
|
|
||||||
struct CollisionBox gSecurityCameraCollisionBox = {
|
struct CollisionBox gSecurityCameraCollisionBox = {
|
||||||
{0.15, 0.3f, 0.35f}
|
{0.15, 0.3f, 0.35f}
|
||||||
|
@ -100,7 +102,7 @@ void securityCameraRender(void* data, struct DynamicRenderDataList* renderList,
|
||||||
|
|
||||||
dynamicRenderListAddData(
|
dynamicRenderListAddData(
|
||||||
renderList,
|
renderList,
|
||||||
decorBuildFizzleGfx(props_security_camera_model_gfx, securityCamera->fizzleTime, renderState),
|
decorBuildFizzleGfx(securityCamera->armature.displayList, securityCamera->fizzleTime, renderState),
|
||||||
matrix,
|
matrix,
|
||||||
securityCamera->fizzleTime > 0.0f ? SECURITY_CAMERA_FIZZLED_INDEX : SECURITY_CAMERA_INDEX,
|
securityCamera->fizzleTime > 0.0f ? SECURITY_CAMERA_FIZZLED_INDEX : SECURITY_CAMERA_INDEX,
|
||||||
&securityCamera->rigidBody.transform.position,
|
&securityCamera->rigidBody.transform.position,
|
||||||
|
@ -109,11 +111,13 @@ void securityCameraRender(void* data, struct DynamicRenderDataList* renderList,
|
||||||
}
|
}
|
||||||
|
|
||||||
void securityCameraInit(struct SecurityCamera* securityCamera, struct SecurityCameraDefinition* definition) {
|
void securityCameraInit(struct SecurityCamera* securityCamera, struct SecurityCameraDefinition* definition) {
|
||||||
|
struct SKArmatureWithAnimations* armature = dynamicAssetAnimatedModel(PROPS_SECURITY_CAMERA_DYNAMIC_ANIMATED_MODEL);
|
||||||
|
|
||||||
collisionObjectInit(&securityCamera->collisionObject, &gSecurityCameraCollider, &securityCamera->rigidBody, 1.0f, COLLISION_LAYERS_TANGIBLE | COLLISION_LAYERS_FIZZLER);
|
collisionObjectInit(&securityCamera->collisionObject, &gSecurityCameraCollider, &securityCamera->rigidBody, 1.0f, COLLISION_LAYERS_TANGIBLE | COLLISION_LAYERS_FIZZLER);
|
||||||
rigidBodyMarkKinematic(&securityCamera->rigidBody);
|
rigidBodyMarkKinematic(&securityCamera->rigidBody);
|
||||||
collisionSceneAddDynamicObject(&securityCamera->collisionObject);
|
collisionSceneAddDynamicObject(&securityCamera->collisionObject);
|
||||||
|
|
||||||
skArmatureInit(&securityCamera->armature, &props_security_camera_armature);
|
skArmatureInit(&securityCamera->armature, armature->armature);
|
||||||
|
|
||||||
securityCamera->rigidBody.transform.position = definition->position;
|
securityCamera->rigidBody.transform.position = definition->position;
|
||||||
securityCamera->rigidBody.transform.rotation = definition->rotation;
|
securityCamera->rigidBody.transform.rotation = definition->rotation;
|
||||||
|
|
|
@ -4,9 +4,11 @@
|
||||||
#include "../physics/collision_scene.h"
|
#include "../physics/collision_scene.h"
|
||||||
#include "dynamic_scene.h"
|
#include "dynamic_scene.h"
|
||||||
#include "signals.h"
|
#include "signals.h"
|
||||||
|
#include "../util/dynamic_asset_loader.h"
|
||||||
|
|
||||||
#include "../build/assets/models/props/switch001.h"
|
#include "../build/assets/models/props/switch001.h"
|
||||||
#include "../build/assets/materials/static.h"
|
#include "../build/assets/materials/static.h"
|
||||||
|
#include "../../build/assets/models/dynamic_animated_model_list.h"
|
||||||
|
|
||||||
#include "../util/time.h"
|
#include "../util/time.h"
|
||||||
|
|
||||||
|
@ -62,7 +64,7 @@ void switchRender(void* data, struct DynamicRenderDataList* renderList, struct R
|
||||||
|
|
||||||
dynamicRenderListAddData(
|
dynamicRenderListAddData(
|
||||||
renderList,
|
renderList,
|
||||||
props_switch001_model_gfx,
|
switchObj->armature.displayList,
|
||||||
matrix,
|
matrix,
|
||||||
BUTTON_INDEX,
|
BUTTON_INDEX,
|
||||||
&switchObj->rigidBody.transform.position,
|
&switchObj->rigidBody.transform.position,
|
||||||
|
@ -71,6 +73,8 @@ void switchRender(void* data, struct DynamicRenderDataList* renderList, struct R
|
||||||
}
|
}
|
||||||
|
|
||||||
void switchInit(struct Switch* switchObj, struct SwitchDefinition* definition) {
|
void switchInit(struct Switch* switchObj, struct SwitchDefinition* definition) {
|
||||||
|
struct SKArmatureWithAnimations* armature = dynamicAssetAnimatedModel(PROPS_SWITCH001_DYNAMIC_ANIMATED_MODEL);
|
||||||
|
|
||||||
collisionObjectInit(&switchObj->collisionObject, &gSwitchCollider, &switchObj->rigidBody, 1.0f, COLLISION_LAYERS_TANGIBLE);
|
collisionObjectInit(&switchObj->collisionObject, &gSwitchCollider, &switchObj->rigidBody, 1.0f, COLLISION_LAYERS_TANGIBLE);
|
||||||
rigidBodyMarkKinematic(&switchObj->rigidBody);
|
rigidBodyMarkKinematic(&switchObj->rigidBody);
|
||||||
collisionSceneAddDynamicObject(&switchObj->collisionObject);
|
collisionSceneAddDynamicObject(&switchObj->collisionObject);
|
||||||
|
@ -88,7 +92,7 @@ void switchInit(struct Switch* switchObj, struct SwitchDefinition* definition) {
|
||||||
dynamicSceneSetRoomFlags(switchObj->dynamicId, ROOM_FLAG_FROM_INDEX(switchObj->rigidBody.currentRoom));
|
dynamicSceneSetRoomFlags(switchObj->dynamicId, ROOM_FLAG_FROM_INDEX(switchObj->rigidBody.currentRoom));
|
||||||
|
|
||||||
skAnimatorInit(&switchObj->animator, PROPS_SWITCH001_DEFAULT_BONES_COUNT);
|
skAnimatorInit(&switchObj->animator, PROPS_SWITCH001_DEFAULT_BONES_COUNT);
|
||||||
skArmatureInit(&switchObj->armature, &props_switch001_armature);
|
skArmatureInit(&switchObj->armature, armature->armature);
|
||||||
|
|
||||||
switchObj->duration = definition->duration;
|
switchObj->duration = definition->duration;
|
||||||
switchObj->flags = 0;
|
switchObj->flags = 0;
|
||||||
|
@ -105,7 +109,7 @@ void switchActivate(struct Switch* switchObj) {
|
||||||
switchObj->flags |= SwitchFlagsDepressed;
|
switchObj->flags |= SwitchFlagsDepressed;
|
||||||
switchObj->timeLeft = switchObj->duration;
|
switchObj->timeLeft = switchObj->duration;
|
||||||
signalsSend(switchObj->signalIndex);
|
signalsSend(switchObj->signalIndex);
|
||||||
skAnimatorRunClip(&switchObj->animator, &props_switch001_Armature_down_clip, 0.0f, 0);
|
skAnimatorRunClip(&switchObj->animator, dynamicAssetClip(PROPS_SWITCH001_DYNAMIC_ANIMATED_MODEL, PROPS_SWITCH001_ARMATURE_DOWN_CLIP_INDEX), 0.0f, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void switchUpdate(struct Switch* switchObj) {
|
void switchUpdate(struct Switch* switchObj) {
|
||||||
|
@ -120,7 +124,7 @@ void switchUpdate(struct Switch* switchObj) {
|
||||||
if ((switchObj->flags & SwitchFlagsDepressed) != 0 &&
|
if ((switchObj->flags & SwitchFlagsDepressed) != 0 &&
|
||||||
!skAnimatorIsRunning(&switchObj->animator)) {
|
!skAnimatorIsRunning(&switchObj->animator)) {
|
||||||
switchObj->flags &= ~SwitchFlagsDepressed;
|
switchObj->flags &= ~SwitchFlagsDepressed;
|
||||||
skAnimatorRunClip(&switchObj->animator, &props_switch001_Armature_up_clip, 0.0f, 0);
|
skAnimatorRunClip(&switchObj->animator, dynamicAssetClip(PROPS_SWITCH001_DYNAMIC_ANIMATED_MODEL, PROPS_SWITCH001_ARMATURE_UP_CLIP_INDEX), 0.0f, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
2
src/util/dynamic_animated_asset_data.c
Normal file
2
src/util/dynamic_animated_asset_data.c
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
|
||||||
|
#include "../build/assets/models/dynamic_animated_model_list_data.h"
|
|
@ -3,24 +3,51 @@
|
||||||
#include "rom.h"
|
#include "rom.h"
|
||||||
|
|
||||||
#include "../build/assets/models/dynamic_model_list.h"
|
#include "../build/assets/models/dynamic_model_list.h"
|
||||||
|
#include "../build/assets/models/dynamic_animated_model_list.h"
|
||||||
|
|
||||||
extern struct DynamicAssetModel gDynamicModels[];
|
extern struct DynamicAssetModel gDynamicModels[];
|
||||||
|
extern struct DynamicAnimatedAssetModel gDynamicAnimatedModels[];
|
||||||
|
|
||||||
Gfx* gLoadedModels[DYNAMIC_MODEL_COUNT];
|
Gfx* gLoadedModels[DYNAMIC_MODEL_COUNT];
|
||||||
u32 gModelPointerOffset[DYNAMIC_MODEL_COUNT];
|
u32 gModelPointerOffset[DYNAMIC_MODEL_COUNT];
|
||||||
|
|
||||||
|
struct SKArmatureWithAnimations gLoadedAnimatedModels[DYNAMIC_ANIMATED_MODEL_COUNT];
|
||||||
|
|
||||||
Gfx gBlankGfx[] = {
|
Gfx gBlankGfx[] = {
|
||||||
gsSPEndDisplayList(),
|
gsSPEndDisplayList(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct SKArmatureDefinition gBlankArmature = {
|
||||||
|
gBlankGfx,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SKArmatureWithAnimations gBlankArmatureWithAnimations = {
|
||||||
|
&gBlankArmature,
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SKAnimationClip gBlankClip = {
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
};
|
||||||
|
|
||||||
void dynamicAssetsReset() {
|
void dynamicAssetsReset() {
|
||||||
zeroMemory(gLoadedModels, sizeof(gLoadedModels));
|
zeroMemory(gLoadedModels, sizeof(gLoadedModels));
|
||||||
|
zeroMemory(gLoadedAnimatedModels, sizeof(gLoadedAnimatedModels));
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ADJUST_POINTER_POS(ptr, offset) (void*)((ptr) ? (char*)(ptr) + (offset) : 0)
|
#define ADJUST_POINTER_POS(ptr, offset) (void*)((ptr) ? (char*)(ptr) + (offset) : 0)
|
||||||
|
|
||||||
Gfx* dynamicAssetFixModelPointers(Gfx* gfx, u32 pointerOffset, u32 segmentStart, u32 segmentLength) {
|
Gfx* dynamicAssetFixModelPointers(Gfx* gfx, u32 pointerOffset, u32 segmentStart, u32 segmentEnd) {
|
||||||
// only adjust pointers that land within the segment
|
// only adjust pointers that land within the segment
|
||||||
if ((u32)gfx < segmentStart || (u32)gfx >= segmentStart + segmentLength) {
|
if ((u32)gfx < segmentStart || (u32)gfx >= segmentEnd) {
|
||||||
return gfx;
|
return gfx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,9 +55,8 @@ Gfx* dynamicAssetFixModelPointers(Gfx* gfx, u32 pointerOffset, u32 segmentStart,
|
||||||
|
|
||||||
Gfx* result = gfx;
|
Gfx* result = gfx;
|
||||||
|
|
||||||
// prevent an infinite loop, although this G_ENDL
|
// prevent an infinite loop if G_ENDL isn't found
|
||||||
// isn't reached this will be bad anyway
|
Gfx* maxGfx = ADJUST_POINTER_POS(segmentEnd, pointerOffset);
|
||||||
Gfx* maxGfx = gfx + (segmentLength >> 3);
|
|
||||||
while (gfx < maxGfx) {
|
while (gfx < maxGfx) {
|
||||||
int commandType = _SHIFTR(gfx->words.w0, 24, 8);
|
int commandType = _SHIFTR(gfx->words.w0, 24, 8);
|
||||||
|
|
||||||
|
@ -41,7 +67,7 @@ Gfx* dynamicAssetFixModelPointers(Gfx* gfx, u32 pointerOffset, u32 segmentStart,
|
||||||
if (gfx->dma.par == G_DL_NOPUSH) {
|
if (gfx->dma.par == G_DL_NOPUSH) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
gfx->dma.addr = (u32)dynamicAssetFixModelPointers((Gfx*)gfx->dma.addr, pointerOffset, segmentStart, segmentLength);
|
gfx->dma.addr = (u32)dynamicAssetFixModelPointers((Gfx*)gfx->dma.addr, pointerOffset, segmentStart, segmentEnd);
|
||||||
break;
|
break;
|
||||||
case G_VTX:
|
case G_VTX:
|
||||||
gfx->dma.addr = (u32)ADJUST_POINTER_POS(gfx->dma.addr, pointerOffset);
|
gfx->dma.addr = (u32)ADJUST_POINTER_POS(gfx->dma.addr, pointerOffset);
|
||||||
|
@ -59,7 +85,35 @@ Gfx* dynamicAssetLoadModel(struct DynamicAssetModel* model, u32* pointerOffset)
|
||||||
void* assetMemoryChunk = malloc(length);
|
void* assetMemoryChunk = malloc(length);
|
||||||
romCopy(model->addressStart, assetMemoryChunk, length);
|
romCopy(model->addressStart, assetMemoryChunk, length);
|
||||||
*pointerOffset = (u32)assetMemoryChunk - (u32)model->segmentStart;
|
*pointerOffset = (u32)assetMemoryChunk - (u32)model->segmentStart;
|
||||||
return dynamicAssetFixModelPointers(model->model, *pointerOffset, (u32)model->segmentStart, length);
|
Gfx* result = dynamicAssetFixModelPointers(model->model, *pointerOffset, (u32)model->segmentStart, (u32)model->segmentStart + length);
|
||||||
|
|
||||||
|
if (!result) {
|
||||||
|
free(assetMemoryChunk);
|
||||||
|
*pointerOffset = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void dynamicAssetLoadAnimatedModel(struct DynamicAnimatedAssetModel* model, struct SKArmatureWithAnimations* result) {
|
||||||
|
u32 length = (u32)model->addressEnd - (u32)model->addressStart;
|
||||||
|
void* assetMemoryChunk = malloc(length);
|
||||||
|
romCopy(model->addressStart, assetMemoryChunk, length);
|
||||||
|
u32 pointerOffset = (u32)assetMemoryChunk - (u32)model->segmentStart;
|
||||||
|
|
||||||
|
result->armature = ADJUST_POINTER_POS(model->armature, pointerOffset);
|
||||||
|
|
||||||
|
result->armature->displayList = dynamicAssetFixModelPointers(result->armature->displayList, pointerOffset, (u32)model->segmentStart, (u32)model->segmentStart + length);
|
||||||
|
result->armature->pose = ADJUST_POINTER_POS(result->armature->pose, pointerOffset);
|
||||||
|
result->armature->boneParentIndex = ADJUST_POINTER_POS(result->armature->boneParentIndex, pointerOffset);
|
||||||
|
|
||||||
|
result->clips = ADJUST_POINTER_POS(model->clips, pointerOffset);
|
||||||
|
|
||||||
|
for (int i = 0; i < model->clipCount; i++) {
|
||||||
|
result->clips[i] = ADJUST_POINTER_POS(result->clips[i], pointerOffset);
|
||||||
|
}
|
||||||
|
|
||||||
|
result->clipCount = model->clipCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dynamicAssetModelPreload(int index) {
|
void dynamicAssetModelPreload(int index) {
|
||||||
|
@ -84,4 +138,30 @@ void* dynamicAssetFixPointer(int index, void* ptr) {
|
||||||
}
|
}
|
||||||
|
|
||||||
return (void*)ADJUST_POINTER_POS(ptr, gModelPointerOffset[index]);
|
return (void*)ADJUST_POINTER_POS(ptr, gModelPointerOffset[index]);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct SKArmatureWithAnimations* dynamicAssetAnimatedModel(int index) {
|
||||||
|
if (index < 0 || index >= DYNAMIC_ANIMATED_MODEL_COUNT) {
|
||||||
|
return &gBlankArmatureWithAnimations;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!gLoadedAnimatedModels[index].armature) {
|
||||||
|
dynamicAssetLoadAnimatedModel(&gDynamicAnimatedModels[index], &gLoadedAnimatedModels[index]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!gLoadedAnimatedModels[index].armature) {
|
||||||
|
return &gBlankArmatureWithAnimations;
|
||||||
|
}
|
||||||
|
|
||||||
|
return &gLoadedAnimatedModels[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
struct SKAnimationClip* dynamicAssetClip(int index, int clipIndex) {
|
||||||
|
struct SKArmatureWithAnimations* armature = dynamicAssetAnimatedModel(index);
|
||||||
|
|
||||||
|
if (clipIndex < 0 || clipIndex >= armature->clipCount) {
|
||||||
|
return &gBlankClip;
|
||||||
|
}
|
||||||
|
|
||||||
|
return armature->clips[clipIndex];
|
||||||
}
|
}
|
|
@ -3,6 +3,9 @@
|
||||||
|
|
||||||
#include <ultra64.h>
|
#include <ultra64.h>
|
||||||
|
|
||||||
|
#include "../sk64/skelatool_armature.h"
|
||||||
|
#include "../sk64/skelatool_clip.h"
|
||||||
|
|
||||||
struct DynamicAssetModel {
|
struct DynamicAssetModel {
|
||||||
void* addressStart;
|
void* addressStart;
|
||||||
void* addressEnd;
|
void* addressEnd;
|
||||||
|
@ -10,6 +13,21 @@ struct DynamicAssetModel {
|
||||||
Gfx* model;
|
Gfx* model;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct DynamicAnimatedAssetModel {
|
||||||
|
void* addressStart;
|
||||||
|
void* addressEnd;
|
||||||
|
void* segmentStart;
|
||||||
|
struct SKArmatureDefinition* armature;
|
||||||
|
struct SKAnimationClip** clips;
|
||||||
|
short clipCount;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SKArmatureWithAnimations {
|
||||||
|
struct SKArmatureDefinition* armature;
|
||||||
|
struct SKAnimationClip** clips;
|
||||||
|
short clipCount;
|
||||||
|
};
|
||||||
|
|
||||||
void dynamicAssetsReset();
|
void dynamicAssetsReset();
|
||||||
|
|
||||||
void dynamicAssetModelPreload(int index);
|
void dynamicAssetModelPreload(int index);
|
||||||
|
@ -17,4 +35,7 @@ Gfx* dynamicAssetModel(int index);
|
||||||
|
|
||||||
void* dynamicAssetFixPointer(int index, void* ptr);
|
void* dynamicAssetFixPointer(int index, void* ptr);
|
||||||
|
|
||||||
|
struct SKArmatureWithAnimations* dynamicAssetAnimatedModel(int index);
|
||||||
|
struct SKAnimationClip* dynamicAssetClip(int index, int clipIndex);
|
||||||
|
|
||||||
#endif
|
#endif
|
103
tools/generate_dynamic_animated_model_list.js
Normal file
103
tools/generate_dynamic_animated_model_list.js
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
function generateInclude(outputLocation, headerLocation) {
|
||||||
|
return `#include "${path.relative(path.dirname(outputLocation), headerLocation)}"`
|
||||||
|
}
|
||||||
|
|
||||||
|
const InvalidTokenCharacter = /[^A-Za-z0-9_]/gim;
|
||||||
|
|
||||||
|
function getSegmentName(headerLocation) {
|
||||||
|
const levelName = path.basename(headerLocation);
|
||||||
|
const noExtension = levelName.slice(0, levelName.length - path.extname(levelName).length);
|
||||||
|
|
||||||
|
return noExtension.replace(InvalidTokenCharacter, '_');
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateArmatureName(outputLocation, headerLocation) {
|
||||||
|
const relative = path.relative(path.dirname(outputLocation), headerLocation).slice(0, -2);
|
||||||
|
return relative.replace(InvalidTokenCharacter, '_') + '_armature';
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateClipsName(outputLocation, headerLocation) {
|
||||||
|
const relative = path.relative(path.dirname(outputLocation), headerLocation).slice(0, -2);
|
||||||
|
return relative.replace(InvalidTokenCharacter, '_') + '_clips';
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateClipCountName(outputLocation, headerLocation) {
|
||||||
|
const relative = path.relative(path.dirname(outputLocation), headerLocation).slice(0, -2);
|
||||||
|
return relative.replace(InvalidTokenCharacter, '_').toUpperCase() + '_CLIP_COUNT';
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateDynamicModelName(outputLocation, headerLocation, index) {
|
||||||
|
const relative = path.relative(path.dirname(outputLocation), headerLocation).slice(0, -2);
|
||||||
|
return relative.replace(InvalidTokenCharacter, '_') + '_DYNAMIC_ANIMATED_MODEL';
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateMetadata(outputLocation, headerLocation) {
|
||||||
|
const segmentName = getSegmentName(headerLocation);
|
||||||
|
return ` {
|
||||||
|
_${segmentName}_geoSegmentRomStart,
|
||||||
|
_${segmentName}_geoSegmentRomEnd,
|
||||||
|
_${segmentName}_geoSegmentStart,
|
||||||
|
&${generateArmatureName(outputLocation, headerLocation)},
|
||||||
|
${generateClipsName(outputLocation, headerLocation)},
|
||||||
|
${generateClipCountName(outputLocation, headerLocation)},
|
||||||
|
},`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateExterns(headerLocation) {
|
||||||
|
const segmentName = getSegmentName(headerLocation);
|
||||||
|
return `
|
||||||
|
extern char _${segmentName}_geoSegmentRomStart[];
|
||||||
|
extern char _${segmentName}_geoSegmentRomEnd[];
|
||||||
|
extern char _${segmentName}_geoSegmentStart[];
|
||||||
|
`;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateModelList(outputLocation, headerLocations) {
|
||||||
|
return `struct DynamicAnimatedAssetModel gDynamicAnimatedModels[] = {
|
||||||
|
${headerLocations.map(headerLocation => generateMetadata(outputLocation, headerLocation)).join('\n')}
|
||||||
|
};`
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateMetadataDeclaration(outputLocation, headerLocation, index) {
|
||||||
|
const segmentName = getSegmentName(headerLocation);
|
||||||
|
return `#define ${generateDynamicModelName(outputLocation, headerLocation).toUpperCase()} ${index}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateModelHeaderList(outputLocation, headerLocations) {
|
||||||
|
return headerLocations.map((headerLocation, index) => generateMetadataDeclaration(outputLocation, headerLocation, index)).join('\n');
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateData(outputLocation, headerLocations) {
|
||||||
|
return `#ifndef __DYNAMIC_ANIMATED_MODEL_LIST_DATA_H__
|
||||||
|
#define __DYNAMIC_ANIMATED_MODEL_LIST_DATA_H__
|
||||||
|
|
||||||
|
#include "util/dynamic_asset_loader.h"
|
||||||
|
|
||||||
|
${headerLocations.map(headerLocation => generateInclude(outputLocation, headerLocation)).join('\n')}
|
||||||
|
|
||||||
|
${headerLocations.map(generateExterns).join('\n')}
|
||||||
|
|
||||||
|
${generateModelList(outputLocation, headerLocations)}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateHeader(outputLocation, headerLocations) {
|
||||||
|
return `#ifndef __DYNAMIC_ANIMATED_MODEL_LIST_DEFINITION_H__
|
||||||
|
#define __DYNAMIC_ANIMATED_MODEL_LIST_DEFINITION_H__
|
||||||
|
|
||||||
|
#define DYNAMIC_ANIMATED_MODEL_COUNT ${headerLocations.length}
|
||||||
|
|
||||||
|
${generateModelHeaderList(outputLocation, headerLocations)}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.writeFileSync(process.argv[2], generateHeader(process.argv[2], process.argv.slice(4)));
|
||||||
|
fs.writeFileSync(process.argv[3], generateData(process.argv[3], process.argv.slice(4)));
|
Loading…
Reference in a new issue