diff --git a/src/samples/dolphin/dolphin.cpp b/src/samples/dolphin/dolphin.cpp index 1c12dee..9df9247 100755 --- a/src/samples/dolphin/dolphin.cpp +++ b/src/samples/dolphin/dolphin.cpp @@ -27,8 +27,20 @@ Dolphin::~Dolphin() {} void Dolphin::onInit() { + player.init(engine); engine->renderer->setCameraDefinitions(&camera.worldView, &camera.position, camera.planes); + engine->audio.loadSong("sound/dirediredocks.wav"); + engine->audio.playSong(); + engine->audio.setSongVolume(60); + + surfaceAmbient = engine->audio.loadADPCM("sound/surface.sad"); + underwaterAmbient = engine->audio.loadADPCM("sound/underwater.sad"); + pickupSound = engine->audio.loadADPCM("sound/pickup.sad"); + + engine->audio.playADPCM(surfaceAmbient, 0); + engine->audio.playADPCM(underwaterAmbient, 1); + texRepo = engine->renderer->getTextureRepository(); engine->renderer->disableVSync(); @@ -138,8 +150,9 @@ void Dolphin::onUpdate() if (dist < 2.5F && player.isJumping() && oysters[i].isActive()) { printf("Pickup %d Dist %d\n", i, dist); - //oysters[i].setActive(false); oysters[i].disappear(); + engine->audio.setADPCMVolume(30, 3); + engine->audio.playADPCM(pickupSound, 3); } } @@ -168,5 +181,14 @@ void Dolphin::onUpdate() } engine->renderer->draw(player.mesh); if (camera.position.y < WATER_LEVEL) + { engine->renderer->draw(waterOverlay); + engine->audio.setADPCMVolume(0, 0); //Surface ambient + engine->audio.setADPCMVolume(65, 1); //Underwater ambient + } + else + { + engine->audio.setADPCMVolume(50, 0); //Surface ambient + engine->audio.setADPCMVolume(0, 1); //Underwater ambient + } } diff --git a/src/samples/dolphin/dolphin.hpp b/src/samples/dolphin/dolphin.hpp index 1d1ce9c..614b94f 100755 --- a/src/samples/dolphin/dolphin.hpp +++ b/src/samples/dolphin/dolphin.hpp @@ -50,6 +50,8 @@ private: Mesh water; Mesh waterbox; Sprite lifeSprites[3]; + audsrv_adpcm_t *underwaterAmbient, *surfaceAmbient; + audsrv_adpcm_t *pickupSound; }; #endif diff --git a/src/samples/dolphin/objects/player.cpp b/src/samples/dolphin/objects/player.cpp index a430173..7a8d70a 100755 --- a/src/samples/dolphin/objects/player.cpp +++ b/src/samples/dolphin/objects/player.cpp @@ -32,6 +32,12 @@ Player::~Player() { } +void Player::init(Engine *t_engine) +{ + pEngine = t_engine; + waterImpact = t_engine->audio.loadADPCM("sound/water_impact.sad"); +} + void Player::update(Pad &t_pad) { if (lift > 0.0F) @@ -81,6 +87,19 @@ void Player::update(Pad &t_pad) printf("Swim animation\n"); mesh.playAnimation(1, 14, 0); } + if (mesh.getCurrentAnimationFrame() == 42) + { + if (!bIsImpactingWater) + { + pEngine->audio.setADPCMVolume(50, 2); + pEngine->audio.playADPCM(waterImpact, 2); + } + bIsImpactingWater = true; + } + else if (bIsImpactingWater) + { + bIsImpactingWater = false; + } velocity *= 60.0F / Dolphin::engineFPS; //Moving by deltatime of last frame. mesh.position.z += diff --git a/src/samples/dolphin/objects/player.hpp b/src/samples/dolphin/objects/player.hpp index 39d6f8b..3c37938 100755 --- a/src/samples/dolphin/objects/player.hpp +++ b/src/samples/dolphin/objects/player.hpp @@ -14,9 +14,10 @@ #define WATER_LEVEL -5.0F #include "../camera.hpp" +#include #include #include - +class Engine; class Player { @@ -25,6 +26,7 @@ public: Mesh mesh; Player(); ~Player(); + void init(Engine *t_engine); void update(Pad &t_pad); const u8 &isJumping() { return bIsJumping; } const u8 &getLifes() { return lifes; } @@ -33,6 +35,9 @@ private: u8 bIsJumping; Vector3 playerNextPosition; u8 lifes; + audsrv_adpcm_t *waterImpact; + Engine *pEngine; + u8 bIsImpactingWater; }; #endif