diff --git a/ROADMAP.txt b/ROADMAP.txt index 1dea6df..3906fac 100644 --- a/ROADMAP.txt +++ b/ROADMAP.txt @@ -1,8 +1,8 @@ ------------ Tyra's v2.0 roadmap to publish on GitHub ------------ +- [Demo] Animation table - [Demo] Crosshair - [Demo] 2D Health bar -- [Demo] Change enemy to monster - [Demo] More monsters! - [Demo] Add ship and other reality stuff - [Demo] Game fadein diff --git a/demo/inc/states/game/player/player.hpp b/demo/inc/states/game/player/player.hpp index 7db8d01..e5636c9 100644 --- a/demo/inc/states/game/player/player.hpp +++ b/demo/inc/states/game/player/player.hpp @@ -12,6 +12,7 @@ #include "states/game/renderer/renderer_dynamic_pair.hpp" #include "states/game/renderer/renderer_static_pair.hpp" +#include "states/game/terrain/heightmap.hpp" #include "./weapon.hpp" #include "./camera.hpp" #include @@ -32,10 +33,10 @@ class Player { RendererStaticPair* pair; - void update(const float& terrainHeight); + void update(const Heightmap& heightmap); private: - void handlePlayerPosition(const float& terrainHeight); + void handlePlayerPosition(const Heightmap& heightmap,const float& terrainHeight); float speed; Pad* pad; diff --git a/demo/src/states/game/enemy/enemy.cpp b/demo/src/states/game/enemy/enemy.cpp index 8bcc78e..a0c42bb 100644 --- a/demo/src/states/game/enemy/enemy.cpp +++ b/demo/src/states/game/enemy/enemy.cpp @@ -23,12 +23,12 @@ Enemy::Enemy(TextureRepository* repo) { ObjLoader loader; ObjLoaderOptions objOptions; - objOptions.animation.count = 4; + objOptions.animation.count = 6; objOptions.flipUVs = true; - objOptions.scale = 60.0F; + objOptions.scale = 250.0F; - auto* data = loader.load( - FileUtils::fromCwd("game/models/soldier/soldier.obj"), objOptions); + auto* data = loader.load(FileUtils::fromCwd("game/models/zombie/zombie.obj"), + objOptions); data->normalsEnabled = false; mesh = new DynamicMesh(*data); @@ -37,7 +37,7 @@ Enemy::Enemy(TextureRepository* repo) { mesh->playAnimation(0, mesh->frames.size() - 1); mesh->setAnimSpeed(0.1F); - repo->addByMesh(mesh, FileUtils::fromCwd("game/models/soldier/"), "png"); + repo->addByMesh(mesh, FileUtils::fromCwd("game/models/zombie/"), "png"); mesh->translation.translateY(-5.0F); @@ -58,11 +58,11 @@ void Enemy::update(const Heightmap& heightmap, const Vec4& playerPosition) { auto diff = *enemyPosition - playerPosition; auto ang = Math::atan2(diff.x, diff.z); - if (diff.length() > 120.0F) { + if (diff.length() > 30.0F) { diff.normalize(); const float speed = 1.5F; auto nextPos = *enemyPosition - diff * speed; - nextPos.y = heightmap.getHeightOffset(nextPos) - 150.0F; + nextPos.y = heightmap.getHeightOffset(nextPos) - 60.0F; mesh->translation.identity(); mesh->translation.translate(nextPos); diff --git a/demo/src/states/game/game_state.cpp b/demo/src/states/game/game_state.cpp index c318ad9..307db6e 100644 --- a/demo/src/states/game/game_state.cpp +++ b/demo/src/states/game/game_state.cpp @@ -69,8 +69,8 @@ void GameState::update() { engine->renderer.beginFrame(cameraInfo); dbgObj->setPosition(*cameraInfo.looksAt); - float terrainHeight = terrain->getHeightOffset(player->getPosition()); - player->update(terrainHeight); + + player->update(terrain->heightmap); enemy->update(terrain->heightmap, player->getPosition()); renderer.clear(); @@ -78,7 +78,7 @@ void GameState::update() { renderer.add(skybox->pair); renderer.add(player->pair); renderer.add(enemy->pair); - // renderer.add(terrain->pair); + renderer.add(terrain->pair); renderer.add(dbgObj->pair); } renderer.render(); diff --git a/demo/src/states/game/player/player.cpp b/demo/src/states/game/player/player.cpp index 80b3561..fec31ea 100644 --- a/demo/src/states/game/player/player.cpp +++ b/demo/src/states/game/player/player.cpp @@ -23,13 +23,16 @@ Player::Player(Engine* engine) Player::~Player() { delete pair; } -void Player::update(const float& terrainHeight) { - handlePlayerPosition(terrainHeight); +void Player::update(const Heightmap& heightmap) { + float terrainHeight = heightmap.getHeightOffset(getPosition()); + + handlePlayerPosition(heightmap, terrainHeight); camera.update(position, terrainHeight); weapon.update(); } -void Player::handlePlayerPosition(const float& terrainHeight) { +void Player::handlePlayerPosition(const Heightmap& heightmap, + const float& terrainHeight) { const auto& leftJoy = pad->getLeftJoyPad(); auto normalizedCamera = Vec4(camera.unitCircle); @@ -37,7 +40,7 @@ void Player::handlePlayerPosition(const float& terrainHeight) { normalizedCamera *= speed; Vec4 nextPosition(position); - nextPosition.y = terrainHeight - 60.0F; + nextPosition.y = terrainHeight + 50.0F; if (leftJoy.v <= 100) { nextPosition.x += normalizedCamera.x; @@ -54,7 +57,7 @@ void Player::handlePlayerPosition(const float& terrainHeight) { nextPosition.z += normalizedCamera.x; } - position = nextPosition; + if (!heightmap.isOutside(nextPosition)) position = nextPosition; camera.position = position; } diff --git a/demo/src/states/game/terrain/terrain.cpp b/demo/src/states/game/terrain/terrain.cpp index 9736b9d..2c2aad3 100644 --- a/demo/src/states/game/terrain/terrain.cpp +++ b/demo/src/states/game/terrain/terrain.cpp @@ -18,29 +18,29 @@ using Tyra::ObjLoaderOptions; namespace Demo { Terrain::Terrain(TextureRepository* repo) - : heightmap(20.0F, // Min height - 320.0F, // Max height + : heightmap(-70.0F, // Min height + 240.0F, // Max height Vec4(-750.0F, 0.0F, -1400.0F, 1.0F), // Left up Vec4(920.0F, 0.0F, 1520.0F, 1.0F) // Right down ) { - // ObjLoader loader; + ObjLoader loader; - // ObjLoaderOptions objOptions; - // objOptions.flipUVs = true; - // objOptions.scale = 100.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) {