Add wood punch sound
This commit is contained in:
@@ -34,6 +34,8 @@ add_executable(PixelDefense
|
|||||||
game/map_layers.h
|
game/map_layers.h
|
||||||
game/pathfinding.c
|
game/pathfinding.c
|
||||||
game/pathfinding.h
|
game/pathfinding.h
|
||||||
|
game/sounds.c
|
||||||
|
game/sounds.h
|
||||||
game/ui_widgets.c
|
game/ui_widgets.c
|
||||||
game/ui_widgets.h
|
game/ui_widgets.h
|
||||||
game/unit_actions.c
|
game/unit_actions.c
|
||||||
|
|||||||
BIN
assets/sounds/wood hit 17.wav
Normal file
BIN
assets/sounds/wood hit 17.wav
Normal file
Binary file not shown.
38
game/main.c
38
game/main.c
@@ -16,10 +16,12 @@
|
|||||||
#include "unit_actions.h"
|
#include "unit_actions.h"
|
||||||
|
|
||||||
#include "pathfinding.h"
|
#include "pathfinding.h"
|
||||||
|
#include "sounds.h"
|
||||||
|
|
||||||
|
|
||||||
ECS_COMPONENT_DECLARE(Game);
|
ECS_COMPONENT_DECLARE(Game);
|
||||||
ECS_COMPONENT_DECLARE(InputState);
|
ECS_COMPONENT_DECLARE(InputState);
|
||||||
|
ECS_COMPONENT_DECLARE(SoundState);
|
||||||
|
|
||||||
BzUI *UI = NULL;
|
BzUI *UI = NULL;
|
||||||
ecs_world_t *ECS = NULL;
|
ecs_world_t *ECS = NULL;
|
||||||
@@ -180,18 +182,29 @@ bool init(void *userData) {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
ECS_COMPONENT_DEFINE(ECS, InputState);
|
{
|
||||||
ecs_singleton_set(ECS, InputState, {});
|
ECS_COMPONENT_DEFINE(ECS, InputState);
|
||||||
InputState *input = ecs_singleton_get_mut(ECS, InputState);
|
ecs_singleton_set(ECS, InputState, {});
|
||||||
|
InputState *input = ecs_singleton_get_mut(ECS, InputState);
|
||||||
|
|
||||||
input->mapping = inputDefaultMapping();
|
input->mapping = inputDefaultMapping();
|
||||||
|
|
||||||
// Create queries
|
// Create queries
|
||||||
input->queries.selected = ecs_query(ECS, {
|
input->queries.selected = ecs_query(ECS, {
|
||||||
.filter.terms = {
|
.filter.terms = {
|
||||||
{ ecs_id(Position) }, { ecs_id(Size) }, { ecs_id(Selected) }
|
{ecs_id(Position)},
|
||||||
}
|
{ecs_id(Size)},
|
||||||
});
|
{ecs_id(Selected)}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
{
|
||||||
|
InitAudioDevice();
|
||||||
|
ECS_COMPONENT_DEFINE(ECS, SoundState);
|
||||||
|
ecs_singleton_set(ECS, SoundState, {});
|
||||||
|
SoundState *sounds = ecs_singleton_get_mut(ECS, SoundState);
|
||||||
|
soundsLoad(sounds, SOUND_WOOD_PUNCH, 0.1f, "assets/sounds/wood hit 17.wav");
|
||||||
|
}
|
||||||
|
|
||||||
game->stackAlloc = bzStackAllocCreate(10 * 1000 * 1000); // 10 MB
|
game->stackAlloc = bzStackAllocCreate(10 * 1000 * 1000); // 10 MB
|
||||||
// init pools
|
// init pools
|
||||||
@@ -230,6 +243,7 @@ void deinit(void *userData) {
|
|||||||
BZ_UNUSED(userData);
|
BZ_UNUSED(userData);
|
||||||
Game *game = ecs_singleton_get_mut(ECS, Game);
|
Game *game = ecs_singleton_get_mut(ECS, Game);
|
||||||
InputState *input = ecs_singleton_get_mut(ECS, InputState);
|
InputState *input = ecs_singleton_get_mut(ECS, InputState);
|
||||||
|
SoundState *sounds = ecs_singleton_get_mut(ECS, SoundState);
|
||||||
|
|
||||||
unloadMap(game);
|
unloadMap(game);
|
||||||
|
|
||||||
@@ -239,6 +253,7 @@ void deinit(void *userData) {
|
|||||||
|
|
||||||
Game gameCopy = *game;
|
Game gameCopy = *game;
|
||||||
InputState inputCopy = *input;
|
InputState inputCopy = *input;
|
||||||
|
SoundState soundsCopy = *sounds;
|
||||||
|
|
||||||
// Destroy ECS
|
// Destroy ECS
|
||||||
ecs_fini(ECS);
|
ecs_fini(ECS);
|
||||||
@@ -246,6 +261,7 @@ void deinit(void *userData) {
|
|||||||
|
|
||||||
game = &gameCopy;
|
game = &gameCopy;
|
||||||
input = &inputCopy;
|
input = &inputCopy;
|
||||||
|
sounds = &soundsCopy;
|
||||||
|
|
||||||
bzTilesetDestroy(&game->tileset);
|
bzTilesetDestroy(&game->tileset);
|
||||||
|
|
||||||
@@ -255,6 +271,8 @@ void deinit(void *userData) {
|
|||||||
|
|
||||||
bzArrayDestroy(game->drawData);
|
bzArrayDestroy(game->drawData);
|
||||||
|
|
||||||
|
soundsUnloadAll(sounds);
|
||||||
|
|
||||||
bzUIDestroy(UI);
|
bzUIDestroy(UI);
|
||||||
UI = NULL;
|
UI = NULL;
|
||||||
|
|
||||||
|
|||||||
17
game/sounds.c
Normal file
17
game/sounds.c
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
#include "sounds.h"
|
||||||
|
|
||||||
|
void soundsLoad(SoundState *sounds, SoundType type, f32 interval, const char *path) {
|
||||||
|
Sound newSound = LoadSound(path);
|
||||||
|
sounds->sounds[type] = newSound;
|
||||||
|
sounds->soundInterval[type] = interval;
|
||||||
|
sounds->playing = newSound;
|
||||||
|
}
|
||||||
|
void soundsPlay(SoundState *sounds, SoundType type) {
|
||||||
|
PlaySound(sounds->playing);
|
||||||
|
}
|
||||||
|
|
||||||
|
void soundsUnloadAll(SoundState *sounds) {
|
||||||
|
for (i32 i = 0; i < SOUND_COUNT; i++) {
|
||||||
|
UnloadSound(sounds->sounds[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
30
game/sounds.h
Normal file
30
game/sounds.h
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
#ifndef PIXELDEFENSE_SOUNDS_H
|
||||||
|
#define PIXELDEFENSE_SOUNDS_H
|
||||||
|
|
||||||
|
#include <breeze.h>
|
||||||
|
#include <flecs.h>
|
||||||
|
#include <raylib.h>
|
||||||
|
|
||||||
|
typedef enum SoundType {
|
||||||
|
SOUND_WOOD_PUNCH,
|
||||||
|
SOUND_COUNT
|
||||||
|
} SoundType;
|
||||||
|
|
||||||
|
typedef struct SoundState {
|
||||||
|
Sound sounds[SOUND_COUNT];
|
||||||
|
Sound playing;
|
||||||
|
// How long it needs to wait,
|
||||||
|
// before playing the same sound
|
||||||
|
f32 soundInterval[SOUND_COUNT];
|
||||||
|
} SoundState;
|
||||||
|
|
||||||
|
void soundsLoad(SoundState *sounds, SoundType type, f32 interval, const char *path);
|
||||||
|
void soundsPlay(SoundState *sounds, SoundType type);
|
||||||
|
|
||||||
|
void soundsUnloadAll(SoundState *sounds);
|
||||||
|
|
||||||
|
extern ECS_COMPONENT_DECLARE(SoundState); // defined in main.c
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif //PIXELDEFENSE_SOUNDS_H
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
#include "systems.h"
|
#include "systems.h"
|
||||||
|
|
||||||
#include "../game_state.h"
|
#include "../game_state.h"
|
||||||
|
#include "../sounds.h"
|
||||||
|
|
||||||
i32 harvestEvent(ecs_entity_t entity, HarvestEvent event) {
|
i32 harvestEvent(ecs_entity_t entity, HarvestEvent event) {
|
||||||
BZ_ASSERT(ecs_has_id(ECS, entity, Harvestable));
|
BZ_ASSERT(ecs_has_id(ECS, entity, Harvestable));
|
||||||
@@ -10,13 +11,15 @@ i32 harvestEvent(ecs_entity_t entity, HarvestEvent event) {
|
|||||||
.compID = ecs_id(Rotation),
|
.compID = ecs_id(Rotation),
|
||||||
.memberOffset = 0,
|
.memberOffset = 0,
|
||||||
.easingFunc = BZ_EASE_OUT_ELASTIC,
|
.easingFunc = BZ_EASE_OUT_ELASTIC,
|
||||||
.duration = 0.4f,
|
.duration = 0.6f,
|
||||||
|
|
||||||
// 45 * (1.0f + (-1.0f) * x)
|
// 45 * (1.0f + (-1.0f) * x)
|
||||||
.target = 45,
|
.target = 45,
|
||||||
.easeTarget = -1.0f,
|
.easeTarget = -1.0f,
|
||||||
.easeStart = 1.0f
|
.easeStart = 1.0f
|
||||||
});
|
});
|
||||||
|
SoundState *sounds = ecs_singleton_get_mut(ECS, SoundState);
|
||||||
|
soundsPlay(sounds, SOUND_WOOD_PUNCH);
|
||||||
|
|
||||||
Resource *res = ecs_get_mut(ECS, entity, Resource);
|
Resource *res = ecs_get_mut(ECS, entity, Resource);
|
||||||
event.amount = BZ_MIN(event.amount, res->amount);
|
event.amount = BZ_MIN(event.amount, res->amount);
|
||||||
|
|||||||
Reference in New Issue
Block a user