audio rework

This commit is contained in:
h4570
2022-08-11 23:18:50 +02:00
parent 74c642bd83
commit 472ab5c2ad
20 changed files with 706 additions and 386 deletions
+20 -2
View File
@@ -13,28 +13,46 @@
#include <renderer/3d/mesh/static/static_mesh.hpp>
#include <renderer/3d/pipeline/static/stapip_options.hpp>
#include <renderer/renderer.hpp>
#include <engine.hpp>
#include <pad/pad.hpp>
#include <audio/audio.hpp>
#include <time/timer.hpp>
using Tyra::Audio;
using Tyra::Engine;
using Tyra::Pad;
using Tyra::Renderer;
using Tyra::StaPipOptions;
using Tyra::StaticMesh;
using Tyra::TextureRepository;
using Tyra::Timer;
using Tyra::Vec4;
namespace Demo {
class Weapon {
public:
Weapon(TextureRepository* repo);
Weapon(Engine* engine);
~Weapon();
StaticMesh* mesh;
StaPipOptions* options;
void update();
// void debugPosition(Pad* pad);
private:
bool isShootAnimation1, isShootAnimation2;
Pad* pad;
Audio* audio;
Timer shootTimer;
Vec4 initialPosition;
u8 adpcmCurrentChannel;
u8 adpcmChannelsCount;
audsrv_adpcm_t* shootAdpcm;
void allocateOptions();
u8 getShootChannel();
};
} // namespace Demo
+21 -18
View File
@@ -19,31 +19,32 @@ using Tyra::ObjLoaderOptions;
namespace Demo {
Enemy::Enemy(TextureRepository* repo) {
ObjLoader loader;
// ObjLoader loader;
ObjLoaderOptions objOptions;
objOptions.animation.count = 4;
objOptions.flipUVs = true;
objOptions.scale = 25.0F;
// ObjLoaderOptions objOptions;
// objOptions.animation.count = 4;
// objOptions.flipUVs = true;
// objOptions.scale = 35.0F;
auto* bodyData = loader.load(
FileUtils::fromCwd("game/models/soldier/soldier.obj"), objOptions);
bodyData->normalsEnabled = false;
bodyMesh = new DynamicMesh(*bodyData);
// auto* bodyData = loader.load(
// FileUtils::fromCwd("game/models/soldier/soldier.obj"), objOptions);
// bodyData->normalsEnabled = false;
// bodyMesh = new DynamicMesh(*bodyData);
delete bodyData;
// delete bodyData;
bodyMesh->playAnimation(0, bodyMesh->frames.size() - 1);
bodyMesh->setAnimSpeed(0.1F);
// bodyMesh->playAnimation(0, bodyMesh->frames.size() - 1);
// bodyMesh->setAnimSpeed(0.1F);
repo->addByMesh(bodyMesh, FileUtils::fromCwd("game/models/soldier/"), "png");
// repo->addByMesh(bodyMesh, FileUtils::fromCwd("game/models/soldier/"),
// "png");
bodyMesh->translation.translateY(-5.0F);
// bodyMesh->translation.translateY(-5.0F);
allocateOptions();
// allocateOptions();
pairs.push_back(new RendererDynamicPair{bodyMesh, options});
// pairs.push_back(new RendererDynamicPair{gunMesh, options});
// pairs.push_back(new RendererDynamicPair{bodyMesh, options});
// // pairs.push_back(new RendererDynamicPair{gunMesh, options});
}
Enemy::~Enemy() {
@@ -55,7 +56,9 @@ Enemy::~Enemy() {
}
}
void Enemy::update(const Vec4& playerPosition) { bodyMesh->animate(); }
void Enemy::update(const Vec4& playerPosition) {
// bodyMesh->animate();
}
void Enemy::allocateOptions() { options = new DynPipOptions(); }
+5 -4
View File
@@ -26,7 +26,7 @@ GameState::~GameState() {}
void GameState::onStart() {
TYRA_LOG("Game. RAM: ", engine->info.getAvailableRAM(), "MB");
engine->audio.stopSong();
engine->audio.song.stop();
auto* repository = &engine->renderer.core.texture.repository;
player = new Player(engine);
@@ -62,7 +62,8 @@ void GameState::update() {
engine->renderer.beginFrame(cameraInfo);
dbgObj->setPosition(*cameraInfo.looksAt);
float terrainHeight = terrain->getHeightOffset(player->getPosition());
float terrainHeight = 0.0F;
// float terrainHeight = terrain->getHeightOffset(player->getPosition());
player->update(terrainHeight);
enemy->update(player->getPosition());
@@ -70,8 +71,8 @@ void GameState::update() {
{
renderer.add(skybox->pair);
renderer.add(player->pair);
renderer.add(enemy->pairs);
renderer.add(terrain->pair);
// renderer.add(enemy->pairs);
// renderer.add(terrain->pair);
renderer.add(dbgObj->pair);
}
renderer.render();
+1 -1
View File
@@ -22,7 +22,7 @@ Camera::Camera(Pad* t_pad) : lookAt(0.0F), position(0.0F), pad(t_pad) {
Camera::~Camera() {}
void Camera::update(const Vec4& playerPosition, const float& terrainHeight) {
const float rotationOffset = 0.03F;
const float rotationOffset = 0.045F;
const float heightOffset = 0.5F;
const auto& rightJoy = pad->getRightJoyPad();
+3 -5
View File
@@ -13,14 +13,12 @@
namespace Demo {
Player::Player(Engine* engine)
: position(0.0F),
weapon(&engine->renderer.core.texture.repository),
camera(&engine->pad) {
: position(0.0F), weapon(engine), camera(&engine->pad) {
pair = new RendererStaticPair{weapon.mesh, weapon.options};
pad = &engine->pad;
position = Vec4(3.0F, 50.0F, 0.0F);
camera.lookAt = Vec4(0.0F, 0.0F, -30.0F);
speed = 2.0F;
speed = 3.5F;
}
Player::~Player() { delete pair; }
@@ -39,7 +37,7 @@ void Player::handlePlayerPosition(const float& terrainHeight) {
normalizedCamera *= speed;
Vec4 nextPosition(position);
nextPosition.y = terrainHeight;
nextPosition.y = terrainHeight - 100.0F;
if (leftJoy.v <= 100) {
nextPosition.x += normalizedCamera.x;
+70 -7
View File
@@ -18,13 +18,16 @@ using Tyra::ObjLoaderOptions;
namespace Demo {
Weapon::Weapon(TextureRepository* repo) {
Weapon::Weapon(Engine* engine) {
ObjLoader loader;
ObjLoaderOptions objOptions;
objOptions.flipUVs = true;
objOptions.scale = .5F;
pad = &engine->pad;
audio = &engine->audio;
auto* repo = &engine->renderer.core.texture.repository;
auto* data =
loader.load(FileUtils::fromCwd("game/models/ak47/ak47.obj"), objOptions);
data->normalsEnabled = false;
@@ -42,10 +45,75 @@ Weapon::Weapon(TextureRepository* repo) {
repo->addByMesh(mesh, FileUtils::fromCwd("game/models/ak47/"), "png");
initialPosition = *mesh->getPosition();
allocateOptions();
shootAdpcm =
audio->adpcm.load(FileUtils::fromCwd("game/models/ak47/ak47.adpcm"));
isShootAnimation1 = isShootAnimation2 = false;
adpcmChannelsCount = 8;
adpcmCurrentChannel = 0;
const u8 shootVolume = 40;
for (u8 i = 0; i < adpcmChannelsCount; i++) {
audio->adpcm.setVolume(shootVolume, i);
}
}
void Weapon::update() {}
Weapon::~Weapon() {
delete mesh;
delete options;
delete shootAdpcm;
}
u8 Weapon::getShootChannel() {
auto result = adpcmCurrentChannel++;
if (adpcmCurrentChannel >= adpcmChannelsCount) {
adpcmCurrentChannel = 0;
}
return result;
}
void Weapon::update() {
if (!isShootAnimation1 && !isShootAnimation2 && pad->getPressed().Cross) {
shootTimer.prime();
audio->adpcm.tryPlay(shootAdpcm, getShootChannel());
isShootAnimation1 = true;
}
auto* position = mesh->getPosition();
const float recoil = 0.5F;
const float speed = 500;
if (isShootAnimation1) {
position->z += recoil;
position->y -= recoil / 4;
if (shootTimer.getTimeDelta() > speed) {
isShootAnimation1 = false;
shootTimer.prime();
isShootAnimation2 = true;
}
}
if (isShootAnimation2) {
position->z -= recoil / 2;
position->y += recoil / 8;
if (shootTimer.getTimeDelta() > speed * 2) {
isShootAnimation2 = false;
*position = initialPosition;
if (pad->getPressed().Cross) {
shootTimer.prime();
audio->adpcm.tryPlay(shootAdpcm, getShootChannel());
isShootAnimation1 = true;
}
}
}
}
// float tX = 0.0F;
// float tY = -3.0F;
@@ -100,11 +168,6 @@ void Weapon::update() {}
// TYRA_LOG("tX: ", tX, " tY: ", tY, " tZ: ", tZ, " rY: ", rY, " rZ: ", rZ);
// }
Weapon::~Weapon() {
delete mesh;
delete options;
}
void Weapon::allocateOptions() {
options = new StaPipOptions();
options->textureMappingType = Tyra::TyraNearest;
+16 -16
View File
@@ -18,29 +18,29 @@ using Tyra::ObjLoaderOptions;
namespace Demo {
Terrain::Terrain(TextureRepository* repo)
: heightmap(-5.0F, // Min height
100.0F, // Max height
Vec4(-196.6F, 0.0F, -412.0F, 1.0F), // Left up
Vec4(286.0F, 0.0F, 443.3F, 1.0F) // Right down
: heightmap(-5.0F, // Min height
450.0F, // Max height
Vec4(-784.6F, 0.0F, -1648.0F, 1.0F), // Left up
Vec4(1144.0F, 0.0F, 1772.3F, 1.0F) // Right down
) {
ObjLoader loader;
// ObjLoader loader;
ObjLoaderOptions objOptions;
objOptions.flipUVs = true;
objOptions.scale = 25.0F;
// ObjLoaderOptions objOptions;
// objOptions.flipUVs = true;
// objOptions.scale = 100.0F;
auto* data = loader.load(
FileUtils::fromCwd("game/models/terrain/terrain.obj"), objOptions);
data->normalsEnabled = false;
mesh = new StaticMesh(*data);
// auto* data = loader.load(
// FileUtils::fromCwd("game/models/terrain/terrain.obj"), objOptions);
// data->normalsEnabled = false;
// mesh = new StaticMesh(*data);
delete data;
// delete data;
repo->addByMesh(mesh, FileUtils::fromCwd("game/models/terrain/"), "png");
// repo->addByMesh(mesh, FileUtils::fromCwd("game/models/terrain/"), "png");
allocateOptions();
// allocateOptions();
pair = new RendererStaticPair{mesh, options};
// pair = new RendererStaticPair{mesh, options};
}
float Terrain::getHeightOffset(const Vec4& playerPosition) {
+4 -4
View File
@@ -32,10 +32,10 @@ IntroState::~IntroState() {}
void IntroState::onStart() {
TYRA_LOG("Intro. RAM: ", engine->info.getAvailableRAM(), "MB");
engine->audio.loadSong(FileUtils::fromCwd("intro/intro.wav"));
engine->audio.setSongLoop(false);
engine->audio.setSongVolume(80);
engine->audio.playSong();
engine->audio.song.load(FileUtils::fromCwd("intro/intro.wav"));
engine->audio.song.inLoop = false;
engine->audio.song.setVolume(80);
engine->audio.song.play();
stateManager.add(new IntroPs2DevState(engine));
stateManager.add(new IntroTyraState(engine));