Added A Few More Sounds and Utilized Flags

- Door open and close sound implemented
- Pedestal rotating sound implemented
- Elevator moving sound and timing implemented
- fixed implementation to make use of object flags rather than global variables (this was a good catch because it fixed a bug when there were two buttons loaded at once)
This commit is contained in:
Weston Salinas 2023-03-15 18:04:08 -05:00
parent ef476af8a3
commit e360a288df
15 changed files with 68 additions and 9 deletions

View file

@ -108,9 +108,9 @@ Where `/home/james/Blender/blender-2.93.1-linux-x64` is the folder where Blender
- [ ] Portal not rending recursively sometimes
- [ ] Passing into a ceiling portal can sometimes mess with the player rotation
- [ ] Correct elevator timing
- [ ] Elevator and door sounds
- [ ] Presort portal gun polygon order
- [ ] Camera shake
- [x] Elevator and door sounds
- [?] Skips audio sometimes
- [x] Signage should not always be on
- [x] sound effects for ball (portal_pak_dir/scripts/npc_sounds_energy_ball.txt)

View file

@ -0,0 +1 @@
-c 1 -r 22050

View file

@ -0,0 +1 @@
-c 1 -r 22050

View file

@ -1 +1 @@
-c 1 -r 22050 -b 16
-c 1 -r 22050 -b 16

View file

@ -0,0 +1 @@
-c 1 -r 22050

View file

@ -39,6 +39,9 @@ unsigned short soundsIntercom[2] = {
unsigned short soundsButton = SOUNDS_BUTTON3;
unsigned short soundsReleaseCube = SOUNDS_DOORMOVE2;
unsigned short soundsPedestalShooting = SOUNDS_CHARGING;
unsigned short soundsDoor= SOUNDS_DOOR_METAL_THIN_CLOSE2;
unsigned short soundsElevatorMoving = SOUNDS_WALL_MOVE5;
unsigned short soundsPedestalMoving = SOUNDS_PORTALGUN_ROTATE1;
unsigned short soundsPortalOpen2 = SOUNDS_PORTAL_OPEN2;

View file

@ -11,6 +11,10 @@ extern unsigned short soundsIntercom[2];
extern unsigned short soundsButton;
extern unsigned short soundsReleaseCube;
extern unsigned short soundsPedestalShooting;
extern unsigned short soundsPedestalMoving;
extern unsigned short soundsDoor;
extern unsigned short soundsElevatorMoving;

View file

@ -36,8 +36,6 @@ struct ColliderTypeData gButtonCollider = {
&gCollisionCylinderCallbacks
};
int gPrevButtonState = 0; //0 == unpressed, 1 == pressed
#define MASS_BUTTON_PRESS_THRESHOLD 1.9f
#define BUTTON_MOVEMENT_AMOUNT 0.1f
#define BUTTON_MOVE_VELOCTY 0.3f
@ -87,6 +85,7 @@ void buttonInit(struct Button* button, struct ButtonDefinition* definition) {
button->originalPos = definition->location;
button->cubeSignalIndex = definition->cubeSignalIndex;
button->flags = 0;
dynamicSceneSetRoomFlags(button->dynamicId, ROOM_FLAG_FROM_INDEX(button->rigidBody.currentRoom));
}
@ -135,14 +134,14 @@ void buttonUpdate(struct Button* button) {
if (targetPos.y != button->rigidBody.transform.position.y) {
//actively going down
if (shouldPress){
if (gPrevButtonState == 0){
if (!(button->flags & ButtonFlagsBeingPressed)){
soundPlayerPlay(soundsButton, 2.5f, 0.5f, &button->rigidBody.transform.position, &gZeroVec);
}
gPrevButtonState = 1;
button->flags |= ButtonFlagsBeingPressed;
}
// actively going up
else{
gPrevButtonState = 0;
button->flags &= ~ButtonFlagsBeingPressed;
}
vector3MoveTowards(&button->rigidBody.transform.position, &targetPos, BUTTON_MOVE_VELOCTY * FIXED_DELTA_TIME, &button->rigidBody.transform.position);

View file

@ -7,6 +7,10 @@
#include "../audio/clips.h"
#include "../audio/soundplayer.h"
enum ButtonFlags {
ButtonFlagsBeingPressed = (1 << 0),
};
struct Button {
struct CollisionObject collisionObject;
struct RigidBody rigidBody;
@ -14,6 +18,7 @@ struct Button {
short signalIndex;
short cubeSignalIndex;
struct Vector3 originalPos;
short flags;
};
void buttonInit(struct Button* button, struct ButtonDefinition* definition);

View file

@ -82,6 +82,7 @@ void doorInit(struct Door* door, struct DoorDefinition* doorDefinition, struct W
} else {
door->forDoorway = NULL;
}
door->flags = 0;
door->doorDefinition = doorDefinition;
@ -90,6 +91,7 @@ void doorInit(struct Door* door, struct DoorDefinition* doorDefinition, struct W
void doorUpdate(struct Door* door) {
float targetOpenAmount = signalsRead(door->signalIndex) ? 1.0f : 0.0f;
door->openAmount = mathfMoveTowards(door->openAmount, targetOpenAmount, OPEN_VELOCITY * FIXED_DELTA_TIME);
if (door->forDoorway) {
if (door->openAmount == 0.0f) {
@ -101,7 +103,17 @@ void doorUpdate(struct Door* door) {
if (door->openAmount == 0.0f) {
door->collisionObject.collisionLayers = COLLISION_LAYERS_TANGIBLE;
door->flags &= ~DoorFlagsJustOpened;
if (!(door->flags & DoorFlagsJustClosed)){
soundPlayerPlay(soundsDoor, 3.0f, 0.5f, &door->rigidBody.transform.position, &gZeroVec);
door->flags |= DoorFlagsJustClosed;
}
} else {
door->flags &= ~DoorFlagsJustClosed;
if (!(door->flags & DoorFlagsJustOpened)){
soundPlayerPlay(soundsDoor, 3.0f, 0.5f, &door->rigidBody.transform.position, &gZeroVec);
door->flags |= DoorFlagsJustOpened;
}
door->collisionObject.collisionLayers = 0;
}
}

View file

@ -3,6 +3,13 @@
#include "../physics/collision_object.h"
#include "../levels/level_definition.h"
#include "../audio/soundplayer.h"
#include "../audio/clips.h"
enum DoorFlags {
DoorFlagsJustClosed = (1 << 0),
DoorFlagsJustOpened = (1 << 1),
};
struct Door {
struct CollisionObject collisionObject;
@ -12,6 +19,7 @@ struct Door {
short dynamicId;
short signalIndex;
float openAmount;
short flags;
};
void doorInit(struct Door* door, struct DoorDefinition* doorDefinition, struct World* world);

View file

@ -21,6 +21,7 @@
#define OPEN_DELAY 1.0f
#define CLOSE_DELAY 13.0f
#define MOVING_SOUND_DELAY 3.5f
struct ColliderTypeData gElevatorColliderType = {
CollisionShapeTypeMesh,
@ -102,6 +103,7 @@ void elevatorInit(struct Elevator* elevator, struct ElevatorDefinition* elevator
elevator->targetElevator = elevatorDefinition->targetElevator;
elevator->timer = elevatorDefinition->targetElevator == -1 ? OPEN_DELAY : CLOSE_DELAY;
elevator->movingTimer = MOVING_SOUND_DELAY;
dynamicSceneSetRoomFlags(elevator->dynamicId, ROOM_FLAG_FROM_INDEX(elevatorDefinition->roomIndex));
}
@ -150,7 +152,8 @@ int elevatorUpdate(struct Elevator* elevator, struct Player* player) {
}
if (shouldLock) {
elevator->flags |= ElevatorFlagsIsLocked;
elevator->flags |= ElevatorFlagsIsLocked;
}
if ((elevator->flags & ElevatorFlagsIsLocked) != 0) {
@ -172,6 +175,15 @@ int elevatorUpdate(struct Elevator* elevator, struct Player* player) {
soundPlayerPlay(soundsElevatorDoor, 1.0f, 0.5f, &elevator->rigidBody.transform.position, &gZeroVec);
}
if ((elevator->flags & ElevatorFlagsIsLocked) && (elevator->openAmount == 0.0f) && (elevator->movingTimer > 0.0f)){
elevator->movingTimer -= FIXED_DELTA_TIME;
}
if ((elevator->flags & ElevatorFlagsIsLocked) && (elevator->openAmount == 0.0f) && !(elevator->flags & ElevatorFlagsMovingSoundPlayed) && (elevator->movingTimer <= 0.0f)){
soundPlayerPlay(soundsElevatorMoving, 1.5f, 0.5f, &elevator->rigidBody.transform.position, &gZeroVec);
elevator->flags |= ElevatorFlagsMovingSoundPlayed;
}
elevator->openAmount = mathfMoveTowards(elevator->openAmount, shouldBeOpen ? 1.0f : 0.0f, OPEN_SPEED * FIXED_DELTA_TIME);
return result;

View file

@ -10,6 +10,7 @@ enum ElevatorFlags {
ElevatorFlagsIsLocked = (1 << 0),
ElevatorFlagsIsExit = (1 << 1),
ElevatorFlagsHasHadPlayer = (1 << 2),
ElevatorFlagsMovingSoundPlayed = (1 << 3),
};
struct Elevator {
@ -21,6 +22,7 @@ struct Elevator {
short roomIndex;
float openAmount;
float timer;
float movingTimer;
};
void elevatorInit(struct Elevator* elevator, struct ElevatorDefinition* elevatorDefinition);

View file

@ -94,14 +94,24 @@ void pedestalUpdate(struct Pedestal* pedestal) {
}
pedestal->flags &= ~PedestalFlagsIsPointing;
}
else{
if (!(pedestal->flags & PedestalFlagsAlreadyMoving) && !(pedestal->flags & PedestalFlagsDown)){
soundPlayerPlay(soundsPedestalMoving, 5.0f, 0.5f, &pedestal->transform.position, &gZeroVec);
pedestal->flags |= PedestalFlagsAlreadyMoving;
}
}
}
else{
pedestal->flags &= ~PedestalFlagsAlreadyMoving;
}
quatAxisComplex(&gUp, &pedestal->currentRotation, &pedestal->armature.pose[PEDESTAL_HOLDER_BONE].rotation);
}
void pedestalHide(struct Pedestal* pedestal) {
soundPlayerPlay(soundsReleaseCube, 3.0f, 0.5f, &pedestal->transform.position, &gZeroVec);
pedestal->flags |= PedestalFlagsDown;
skAnimatorRunClip(&pedestal->animator, &pedestal_Armature_Hide_clip, 0.0f, 0);
}

View file

@ -10,6 +10,7 @@
enum PedestalFlags {
PedestalFlagsDown = (1 << 0),
PedestalFlagsIsPointing = (1 << 1),
PedestalFlagsAlreadyMoving = (1 << 2),
};
struct Pedestal {