diff --git a/assets/sound/ambient/machines/ticktock1.sox b/assets/sound/ambient/machines/ticktock1.sox new file mode 100644 index 0000000..86f4847 --- /dev/null +++ b/assets/sound/ambient/machines/ticktock1.sox @@ -0,0 +1 @@ +-c 1 \ No newline at end of file diff --git a/src/audio/clips.c b/src/audio/clips.c index b47fa58..48b624d 100644 --- a/src/audio/clips.c +++ b/src/audio/clips.c @@ -47,6 +47,7 @@ unsigned short soundsFastFalling = SOUNDS_FAST_WINDLOOP1; unsigned short soundsBallCatcher = SOUNDS_ALYX_STUNNER1; unsigned short soundsPortalOpen2 = SOUNDS_PORTAL_OPEN2; +unsigned short soundsTickTock = SOUNDS_TICKTOCK1; unsigned short soundsPortalFizzle = SOUNDS_PORTAL_FIZZLE2; diff --git a/src/audio/clips.h b/src/audio/clips.h index 90888e5..704ca8f 100644 --- a/src/audio/clips.h +++ b/src/audio/clips.h @@ -17,6 +17,7 @@ extern unsigned short soundsDoor; extern unsigned short soundsFastFalling; extern unsigned short soundsBallCatcher; extern unsigned short soundsPortalOpen2; +extern unsigned short soundsTickTock; extern unsigned short soundsPortalFizzle; diff --git a/src/player/player.c b/src/player/player.c index c5a2307..d0266c6 100644 --- a/src/player/player.c +++ b/src/player/player.c @@ -316,6 +316,9 @@ void playerUpdateGrabbedObject(struct Player* player) { player->grabbingThroughPortal = PLAYER_GRABBING_THROUGH_NOTHING; } } + else if ((hit.object->body)){ + player->flags |= PlayerJustSelect; + } else{ player->flags |= PlayerJustDeniedSelect; } diff --git a/src/scene/switch.c b/src/scene/switch.c index 4a55486..9605714 100644 --- a/src/scene/switch.c +++ b/src/scene/switch.c @@ -11,6 +11,7 @@ #include "../util/time.h" #define COLLIDER_HEIGHT 0.7f +#define TICKTOCK_PAUSE_LENGTH 0.25f struct Vector2 gSwitchCylinderEdgeVectors[] = { {0.0f, 1.0f}, @@ -92,13 +93,15 @@ void switchInit(struct Switch* switchObj, struct SwitchDefinition* definition) { switchObj->duration = definition->duration; switchObj->flags = 0; switchObj->timeLeft = 0.0f; + switchObj->ticktockPauseTimer = 0.0f; } void switchActivate(struct Switch* switchObj) { if (switchObj->timeLeft > 0.0f) { return; } - + soundPlayerPlay(soundsButton, 1.0f, 0.5f, &switchObj->rigidBody.transform.position, &gZeroVec); + switchObj->ticktockSoundLoopId = soundPlayerPlay(soundsTickTock, 1.0f, 0.5f, NULL, NULL); switchObj->flags |= SwitchFlagsDepressed; switchObj->timeLeft = switchObj->duration; signalsSend(switchObj->signalIndex); @@ -125,9 +128,23 @@ void switchUpdate(struct Switch* switchObj) { switchObj->timeLeft -= FIXED_DELTA_TIME; + + + if (switchObj->timeLeft < 0.0f) { switchObj->timeLeft = 0.0f; } else { + if (!soundPlayerIsPlaying(switchObj->ticktockSoundLoopId)){ + if (switchObj->ticktockPauseTimer < TICKTOCK_PAUSE_LENGTH){ + switchObj->ticktockPauseTimer += FIXED_DELTA_TIME; + }else{ + switchObj->ticktockPauseTimer = 0; + switchObj->ticktockSoundLoopId = soundPlayerPlay(soundsTickTock, 1.0f, 0.5f, NULL, NULL); + } + }else{ + switchObj->ticktockPauseTimer = 0; + } + signalsSend(switchObj->signalIndex); } } \ No newline at end of file diff --git a/src/scene/switch.h b/src/scene/switch.h index da96621..3f86851 100644 --- a/src/scene/switch.h +++ b/src/scene/switch.h @@ -4,6 +4,8 @@ #include "../sk64/skelatool_armature.h" #include "../sk64/skelatool_animator.h" #include "../physics/collision_object.h" +#include "../audio/soundplayer.h" +#include "../audio/clips.h" #include "../levels/level_definition.h" @@ -21,6 +23,8 @@ struct Switch { short flags; float duration; float timeLeft; + short ticktockSoundLoopId; + float ticktockPauseTimer; }; void switchInit(struct Switch* switchObj, struct SwitchDefinition* definition);