mirror of
https://github.com/mwpenny/portal64-still-alive.git
synced 2024-10-20 10:37:37 -04:00
Fix some trigger related bugs
This commit is contained in:
parent
1839294448
commit
73f4e6f9a7
2
Makefile
2
Makefile
|
@ -294,7 +294,7 @@ build/%.fbx: %.blend
|
||||||
@mkdir -p $(@D)
|
@mkdir -p $(@D)
|
||||||
$(BLENDER_3_0) $< --background --python tools/export_fbx.py -- $@
|
$(BLENDER_3_0) $< --background --python tools/export_fbx.py -- $@
|
||||||
|
|
||||||
build/assets/test_chambers/%.h build/assets/test_chambers/%_geo.c build/assets/test_chambers/%_anim.c: build/assets/test_chambers/%.fbx build/assets/materials/static.h $(SKELATOOL64) $(TEXTURE_IMAGES) $(LUA_FILES)
|
build/assets/test_chambers/%.h build/assets/test_chambers/%_geo.c build/assets/test_chambers/%_anim.c: build/assets/test_chambers/%.fbx assets/test_chambers/%.yaml build/assets/materials/static.h $(SKELATOOL64) $(TEXTURE_IMAGES) $(LUA_FILES)
|
||||||
$(SKELATOOL64) --script tools/export_level.lua --fixed-point-scale ${SCENE_SCALE} --model-scale 0.01 --name $(<:build/assets/test_chambers/%.fbx=%) -m assets/materials/static.skm.yaml -o $(<:%.fbx=%.h) $<
|
$(SKELATOOL64) --script tools/export_level.lua --fixed-point-scale ${SCENE_SCALE} --model-scale 0.01 --name $(<:build/assets/test_chambers/%.fbx=%) -m assets/materials/static.skm.yaml -o $(<:%.fbx=%.h) $<
|
||||||
|
|
||||||
build/assets/test_chambers/%.o: build/assets/test_chambers/%.c build/assets/materials/static.h
|
build/assets/test_chambers/%.o: build/assets/test_chambers/%.c build/assets/materials/static.h
|
||||||
|
|
|
@ -468,7 +468,7 @@ int cutsceneTrigger(int cutsceneIndex, int triggerIndex) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return (gTriggeredCutscenes & cutsceneMask) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cutsceneSerialize(struct CutsceneRunner* runner, struct CutsceneSerialized* result) {
|
void cutsceneSerialize(struct CutsceneRunner* runner, struct CutsceneSerialized* result) {
|
||||||
|
|
|
@ -397,7 +397,7 @@ void collisionSceneRaycastDynamic(struct CollisionScene* scene, struct Ray* ray,
|
||||||
|
|
||||||
struct CollisionObject* object = scene->dynamicObjects[i];
|
struct CollisionObject* object = scene->dynamicObjects[i];
|
||||||
|
|
||||||
if ((object->collisionLayers & collisionLayers) == 0) {
|
if ((object->collisionLayers & collisionLayers) == 0 || object->trigger != NULL) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -609,6 +609,10 @@ void sceneUpdate(struct Scene* scene) {
|
||||||
ballCatcherUpdate(&scene->ballCatchers[i], scene->ballLaunchers, scene->ballLancherCount);
|
ballCatcherUpdate(&scene->ballCatchers[i], scene->ballLaunchers, scene->ballLancherCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < scene->triggerListenerCount; ++i) {
|
||||||
|
triggerListenerUpdate(&scene->triggerListeners[i]);
|
||||||
|
}
|
||||||
|
|
||||||
signalsEvaluateSignals(gCurrentLevel->signalOperators, gCurrentLevel->signalOperatorCount);
|
signalsEvaluateSignals(gCurrentLevel->signalOperators, gCurrentLevel->signalOperatorCount);
|
||||||
|
|
||||||
for (int i = 0; i < scene->doorCount; ++i) {
|
for (int i = 0; i < scene->doorCount; ++i) {
|
||||||
|
|
|
@ -29,8 +29,6 @@ enum ObjectTriggerType triggerDetermineType(struct CollisionObject* objectEnteri
|
||||||
void triggerTrigger(void* data, struct CollisionObject* objectEnteringTrigger) {
|
void triggerTrigger(void* data, struct CollisionObject* objectEnteringTrigger) {
|
||||||
struct TriggerListener* listener = data;
|
struct TriggerListener* listener = data;
|
||||||
|
|
||||||
struct Trigger* trigger = listener->trigger;
|
|
||||||
|
|
||||||
struct Vector3 offset;
|
struct Vector3 offset;
|
||||||
vector3Sub(
|
vector3Sub(
|
||||||
&objectEnteringTrigger->body->transform.position,
|
&objectEnteringTrigger->body->transform.position,
|
||||||
|
@ -47,17 +45,7 @@ void triggerTrigger(void* data, struct CollisionObject* objectEnteringTrigger) {
|
||||||
|
|
||||||
enum ObjectTriggerType triggerType = triggerDetermineType(objectEnteringTrigger);
|
enum ObjectTriggerType triggerType = triggerDetermineType(objectEnteringTrigger);
|
||||||
|
|
||||||
for (int i = 0; i < trigger->triggerCount; ++i) {
|
listener->lastTriggerMask |= (1 << triggerType);
|
||||||
struct ObjectTriggerInfo* triggerInfo = &trigger->triggers[i];
|
|
||||||
|
|
||||||
if (triggerInfo->objectType == triggerType) {
|
|
||||||
if (triggerInfo->signalIndex != -1) {
|
|
||||||
signalsSend(triggerInfo->signalIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
cutsceneTrigger(triggerInfo->cutsceneIndex, listener->triggerIndex + i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void triggerInit(struct TriggerListener* listener, struct Trigger* trigger, int triggerIndex) {
|
void triggerInit(struct TriggerListener* listener, struct Trigger* trigger, int triggerIndex) {
|
||||||
|
@ -83,4 +71,28 @@ void triggerInit(struct TriggerListener* listener, struct Trigger* trigger, int
|
||||||
listener->triggerIndex = triggerIndex;
|
listener->triggerIndex = triggerIndex;
|
||||||
|
|
||||||
collisionSceneAddDynamicObject(&listener->collisionObject);
|
collisionSceneAddDynamicObject(&listener->collisionObject);
|
||||||
|
|
||||||
|
listener->lastTriggerMask = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void triggerListenerUpdate(struct TriggerListener* listener) {
|
||||||
|
if (!listener->lastTriggerMask) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Trigger* trigger = listener->trigger;
|
||||||
|
|
||||||
|
for (int i = 0; i < trigger->triggerCount; ++i) {
|
||||||
|
struct ObjectTriggerInfo* triggerInfo = &trigger->triggers[i];
|
||||||
|
|
||||||
|
if ((1 << triggerInfo->objectType) & listener->lastTriggerMask) {
|
||||||
|
if (triggerInfo->signalIndex != -1) {
|
||||||
|
signalsSend(triggerInfo->signalIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
cutsceneTrigger(triggerInfo->cutsceneIndex, listener->triggerIndex + i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
listener->lastTriggerMask = 0;
|
||||||
}
|
}
|
|
@ -15,8 +15,10 @@ struct TriggerListener {
|
||||||
|
|
||||||
struct Trigger* trigger;
|
struct Trigger* trigger;
|
||||||
short triggerIndex;
|
short triggerIndex;
|
||||||
|
short lastTriggerMask;
|
||||||
};
|
};
|
||||||
|
|
||||||
void triggerInit(struct TriggerListener* listener, struct Trigger* trigger, int triggerIndex);
|
void triggerInit(struct TriggerListener* listener, struct Trigger* trigger, int triggerIndex);
|
||||||
|
void triggerListenerUpdate(struct TriggerListener* listener);
|
||||||
|
|
||||||
#endif
|
#endif
|
Loading…
Reference in a new issue