Selaa lähdekoodia

enemy collison added, no jittering anymore

Remco 9 vuotta sitten
vanhempi
commit
cf124b3f38
2 muutettua tiedostoa jossa 23 lisäystä ja 10 poistoa
  1. 10 9
      Enemy.cpp
  2. 13 1
      World.cpp

+ 10 - 9
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;		
 	}	
-
 }

+ 13 - 1
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;
+				}
+			}
+		}		
 	}
 }