From 65f40091dbb1f340dd2ff5df44103dded6244f77 Mon Sep 17 00:00:00 2001 From: h4570 Date: Sun, 14 Aug 2022 20:20:56 +0200 Subject: [PATCH] shoot action in demo --- demo/inc/states/game/player/weapon.hpp | 2 ++ demo/src/states/game/game_state.cpp | 35 +++++++++++++++----------- demo/src/states/game/player/player.cpp | 5 ++++ demo/src/states/game/player/weapon.cpp | 17 ++++++++----- 4 files changed, 38 insertions(+), 21 deletions(-) diff --git a/demo/inc/states/game/player/weapon.hpp b/demo/inc/states/game/player/weapon.hpp index 9353316..5a3be04 100644 --- a/demo/inc/states/game/player/weapon.hpp +++ b/demo/inc/states/game/player/weapon.hpp @@ -31,6 +31,7 @@ class Weapon { StaticMesh* mesh; StaPipOptions* options; + bool isShooting = false; void update(); @@ -45,6 +46,7 @@ class Weapon { audsrv_adpcm_t* shootAdpcm; + void shoot(); void allocateOptions(); u8 getShootChannel(); }; diff --git a/demo/src/states/game/game_state.cpp b/demo/src/states/game/game_state.cpp index dbcf8f4..bfc324e 100644 --- a/demo/src/states/game/game_state.cpp +++ b/demo/src/states/game/game_state.cpp @@ -66,26 +66,31 @@ void GameState::update() { } skybox->update(player->getPosition()); - auto cameraInfo = player->getCameraInfo(); - engine->renderer.beginFrame(cameraInfo); - - dbgObj->setPosition(*cameraInfo.looksAt); - player->update(terrain->heightmap); enemyManager->update(terrain->heightmap, player->getPosition()); - renderer.clear(); - { - renderer.add(skybox->pair); // First, because of ALLPASS - renderer.add(ship->pair); - renderer.add(dbgObj->pair); - - renderer.add(player->pair); - renderer.add(enemyManager->getPairs()); - renderer.add(terrain->pair); + auto shootAction = player->getShootAction(); + if (shootAction.isShooting) { + shootAction.ray.value().print(); } - renderer.render(); + auto cameraInfo = player->getCameraInfo(); + dbgObj->setPosition(*cameraInfo.looksAt); + + engine->renderer.beginFrame(cameraInfo); + { + renderer.clear(); + { + renderer.add(skybox->pair); // First, because of ALLPASS + renderer.add(ship->pair); + renderer.add(dbgObj->pair); + + renderer.add(player->pair); + renderer.add(enemyManager->getPairs()); + renderer.add(terrain->pair); + } + renderer.render(); + } engine->renderer.endFrame(); } diff --git a/demo/src/states/game/player/player.cpp b/demo/src/states/game/player/player.cpp index 6446248..29726db 100644 --- a/demo/src/states/game/player/player.cpp +++ b/demo/src/states/game/player/player.cpp @@ -33,6 +33,11 @@ void Player::update(const Heightmap& heightmap) { PlayerShootAction Player::getShootAction() const { PlayerShootAction action; + action.isShooting = weapon.isShooting; + + if (action.isShooting) { + action.ray = Ray(camera.position, camera.lookAt); + } return action; } diff --git a/demo/src/states/game/player/weapon.cpp b/demo/src/states/game/player/weapon.cpp index 5f6b417..dc36c1e 100644 --- a/demo/src/states/game/player/weapon.cpp +++ b/demo/src/states/game/player/weapon.cpp @@ -77,10 +77,10 @@ u8 Weapon::getShootChannel() { } void Weapon::update() { + isShooting = false; + if (!isShootAnimation1 && !isShootAnimation2 && pad->getPressed().Cross) { - shootTimer.prime(); - audio->adpcm.tryPlay(shootAdpcm, getShootChannel()); - isShootAnimation1 = true; + shoot(); } auto* position = mesh->getPosition(); @@ -105,14 +105,19 @@ void Weapon::update() { isShootAnimation2 = false; *position = initialPosition; if (pad->getPressed().Cross) { - shootTimer.prime(); - audio->adpcm.tryPlay(shootAdpcm, getShootChannel()); - isShootAnimation1 = true; + shoot(); } } } } +void Weapon::shoot() { + isShooting = true; + shootTimer.prime(); + audio->adpcm.tryPlay(shootAdpcm, getShootChannel()); + isShootAnimation1 = true; +} + void Weapon::allocateOptions() { options = new StaPipOptions(); options->textureMappingType = Tyra::TyraNearest;