public override void RemoveAvatar(PhysicsActor actor) { BasicActor act = (BasicActor)actor; if (_actors.Contains(act)) { _actors.Remove(act); } }
public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 velocity, Vector3 size, bool isFlying) { BasicActor act = new BasicActor(size); act.Position = position; act.Velocity = velocity; act.Flying = isFlying; _actors.Add(act); return(act); }
public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 velocity, Vector3 size, bool isFlying) { BasicActor act = new BasicActor(size); act.Position = position; act.Velocity = velocity; act.Flying = isFlying; _actors.Add(act); return act; }
public override float Simulate(float timeStep) { // Console.WriteLine("Simulating"); float fps = 1.0f / timeStep; for (int i = 0; i < _actors.Count; ++i) { BasicActor actor = _actors[i]; Vector3 actorPosition = actor.Position; Vector3 actorVelocity = actor.Velocity; //Console.WriteLine( // "Processing actor {0}, starting pos {1}, starting vel {2}", i, actorPosition, actorVelocity); actorPosition.X += actor.Velocity.X * timeStep; actorPosition.Y += actor.Velocity.Y * timeStep; if (actor.Position.Y < 0) { actorPosition.Y = 0.1F; } else if (actor.Position.Y >= m_regionExtent.Y) { actorPosition.Y = (m_regionExtent.Y - 0.1f); } if (actor.Position.X < 0) { actorPosition.X = 0.1F; } else if (actor.Position.X >= m_regionExtent.X) { actorPosition.X = (m_regionExtent.X - 0.1f); } float terrainHeight = 0; if (_heightMap != null) { terrainHeight = _heightMap[(int)actor.Position.Y * (int)m_regionExtent.Y + (int)actor.Position.X]; } float height = terrainHeight + actor.Size.Z; // Console.WriteLine("height {0}, actorPosition {1}", height, actorPosition); if (actor.Flying) { if (actor.Position.Z + (actor.Velocity.Z * timeStep) < terrainHeight + 2) { actorPosition.Z = height; actorVelocity.Z = 0; actor.IsColliding = true; } else { actorPosition.Z += actor.Velocity.Z * timeStep; actor.IsColliding = false; } } else { actorPosition.Z = height; actorVelocity.Z = 0; actor.IsColliding = true; } actor.Position = actorPosition; actor.Velocity = actorVelocity; } return(fps); }