mirror of
https://github.com/mwpenny/portal64-still-alive.git
synced 2024-10-19 22:27:36 -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)
|
||||
$(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) $<
|
||||
|
||||
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 0;
|
||||
return (gTriggeredCutscenes & cutsceneMask) != 0;
|
||||
}
|
||||
|
||||
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];
|
||||
|
||||
if ((object->collisionLayers & collisionLayers) == 0) {
|
||||
if ((object->collisionLayers & collisionLayers) == 0 || object->trigger != NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -609,6 +609,10 @@ void sceneUpdate(struct Scene* scene) {
|
|||
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);
|
||||
|
||||
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) {
|
||||
struct TriggerListener* listener = data;
|
||||
|
||||
struct Trigger* trigger = listener->trigger;
|
||||
|
||||
struct Vector3 offset;
|
||||
vector3Sub(
|
||||
&objectEnteringTrigger->body->transform.position,
|
||||
|
@ -47,17 +45,7 @@ void triggerTrigger(void* data, struct CollisionObject* objectEnteringTrigger) {
|
|||
|
||||
enum ObjectTriggerType triggerType = triggerDetermineType(objectEnteringTrigger);
|
||||
|
||||
for (int i = 0; i < trigger->triggerCount; ++i) {
|
||||
struct ObjectTriggerInfo* triggerInfo = &trigger->triggers[i];
|
||||
|
||||
if (triggerInfo->objectType == triggerType) {
|
||||
if (triggerInfo->signalIndex != -1) {
|
||||
signalsSend(triggerInfo->signalIndex);
|
||||
}
|
||||
|
||||
cutsceneTrigger(triggerInfo->cutsceneIndex, listener->triggerIndex + i);
|
||||
}
|
||||
}
|
||||
listener->lastTriggerMask |= (1 << triggerType);
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
short triggerIndex;
|
||||
short lastTriggerMask;
|
||||
};
|
||||
|
||||
void triggerInit(struct TriggerListener* listener, struct Trigger* trigger, int triggerIndex);
|
||||
void triggerListenerUpdate(struct TriggerListener* listener);
|
||||
|
||||
#endif
|
Loading…
Reference in a new issue