diff --git a/ROADMAP.txt b/ROADMAP.txt index deac67a..1dea6df 100644 --- a/ROADMAP.txt +++ b/ROADMAP.txt @@ -1,6 +1,5 @@ ------------ Tyra's v2.0 roadmap to publish on GitHub ------------ -- [Demo] Enemy running and rotating to player - [Demo] Crosshair - [Demo] 2D Health bar - [Demo] Change enemy to monster diff --git a/demo/inc/states/game/enemy/enemy.hpp b/demo/inc/states/game/enemy/enemy.hpp index 190a0c1..be61eab 100644 --- a/demo/inc/states/game/enemy/enemy.hpp +++ b/demo/inc/states/game/enemy/enemy.hpp @@ -36,7 +36,6 @@ class Enemy { void update(const Heightmap& heightmap, const Vec4& playerPosition); private: - Vec4 direction; void allocateOptions(); }; diff --git a/demo/src/states/game/enemy/enemy.cpp b/demo/src/states/game/enemy/enemy.cpp index f7b9ae4..8bcc78e 100644 --- a/demo/src/states/game/enemy/enemy.cpp +++ b/demo/src/states/game/enemy/enemy.cpp @@ -13,6 +13,7 @@ #include using Tyra::FileUtils; +using Tyra::Math; using Tyra::ObjLoader; using Tyra::ObjLoaderOptions; @@ -43,8 +44,6 @@ Enemy::Enemy(TextureRepository* repo) { allocateOptions(); pair = new RendererDynamicPair{mesh, options}; - - direction = Vec4(1.0F, 0.0F, 1.0F, 0.0F); } Enemy::~Enemy() { @@ -54,18 +53,25 @@ Enemy::~Enemy() { } void Enemy::update(const Heightmap& heightmap, const Vec4& playerPosition) { - auto* pos = mesh->getPosition(); - auto nextPos = *pos + direction; + auto* enemyPosition = mesh->getPosition(); - if (heightmap.isOutside(nextPos)) { - direction.x = -direction.x; - direction.z = -direction.z; + auto diff = *enemyPosition - playerPosition; + auto ang = Math::atan2(diff.x, diff.z); + + if (diff.length() > 120.0F) { + diff.normalize(); + const float speed = 1.5F; + auto nextPos = *enemyPosition - diff * speed; + nextPos.y = heightmap.getHeightOffset(nextPos) - 150.0F; + + mesh->translation.identity(); + mesh->translation.translate(nextPos); } - nextPos = *pos + direction; - nextPos.y = heightmap.getHeightOffset(nextPos) - 150.0F; - mesh->translation.identity(); - mesh->translation.translate(nextPos); + const float naturalRotation = 3.1F; + mesh->rotation.identity(); + ang += naturalRotation; + mesh->rotation.rotateByAngle(ang, Vec4(0.0F, 1.0F, 0.0F, 0.0F)); mesh->animate(); } diff --git a/demo/src/states/game/game_state.cpp b/demo/src/states/game/game_state.cpp index efc2e67..c318ad9 100644 --- a/demo/src/states/game/game_state.cpp +++ b/demo/src/states/game/game_state.cpp @@ -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/terrain/terrain.cpp b/demo/src/states/game/terrain/terrain.cpp index e8b18ec..9736b9d 100644 --- a/demo/src/states/game/terrain/terrain.cpp +++ b/demo/src/states/game/terrain/terrain.cpp @@ -23,24 +23,24 @@ Terrain::Terrain(TextureRepository* repo) 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) { diff --git a/engine/src/math/m4x4.cpp b/engine/src/math/m4x4.cpp index c8f586e..620e9ce 100644 --- a/engine/src/math/m4x4.cpp +++ b/engine/src/math/m4x4.cpp @@ -338,9 +338,9 @@ void M4x4::rotationZ(const float& v) { void M4x4::rotationByAngle(const float& angle, const Vec4& axis) { Vec4 localAxis = Vec4(axis); localAxis.normalize(); - float x = localAxis.x; - float y = localAxis.y; - float z = localAxis.z; + const float& x = localAxis.x; + const float& y = localAxis.y; + const float& z = localAxis.z; float c = Math::cos(angle); float s = Math::sin(angle);