diff --git a/Enemy.cpp b/Enemy.cpp index a5a907f..c62fb46 100644 --- a/Enemy.cpp +++ b/Enemy.cpp @@ -60,16 +60,17 @@ void Enemy::update(float delta) dz = target.z - position.z; length = sqrt(dx*dx + dz*dz); - dx /= length; - dz /= length; + if (length > 0.03) + { + dx /= length; + dz /= length; - dx *= speed*delta; - dz *= speed*delta; + dx *= speed*delta; + dz *= speed*delta; - position.x += dx; - position.z += dz; - - rotation.y = atan2f(target.x - position.x, target.z - position.z) * 180 / M_PI; + position.x += dx; + position.z += dz; + } + rotation.y = atan2f(dx, dz) * 180 / M_PI; } - } diff --git a/World.cpp b/World.cpp index 74306d5..f8d2eb6 100644 --- a/World.cpp +++ b/World.cpp @@ -123,7 +123,7 @@ void World::update(float elapsedTime) for (auto &enemy : enemies) { if (enemy->position.Distance(player.position) <= enemy->radius) - { + { enemy->hasTarget = true; enemy->target.x = player.position.x; enemy->target.z = player.position.z; @@ -131,7 +131,19 @@ void World::update(float elapsedTime) else enemy->hasTarget = false; + Vec3f oldpos = enemy->position; enemy->update(elapsedTime); + if (enemy->hasTarget) + { + for (auto e : entities) + { + if (e->canCollide && e->inObject(enemy->position)) + { + enemy->position = oldpos; + break; + } + } + } } }