public override float Simulate(float timeStep) { float fps = 0; for (int i = 0; i < _actors.Count; ++i) { BasicActor actor = _actors[i]; Vector3 actorPosition = actor.Position; Vector3 actorVelocity = actor.Velocity; 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 >= Constants.RegionSize) { actorPosition.Y = ((int)Constants.RegionSize - 0.1f); } if (actor.Position.X < 0) { actorPosition.X = 0.1F; } else if (actor.Position.X >= Constants.RegionSize) { actorPosition.X = ((int)Constants.RegionSize - 0.1f); } float height = _heightMap[(int)actor.Position.Y * Constants.RegionSize + (int)actor.Position.X] + actor.Size.Z; if (actor.Flying) { if (actor.Position.Z + (actor.Velocity.Z * timeStep) < _heightMap[(int)actor.Position.Y * Constants.RegionSize + (int)actor.Position.X] + 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); }
public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 size, bool isFlying) { BasicActor act = new BasicActor(); act.Position = position; act.Flying = isFlying; _actors.Add(act); return act; }
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 size, bool isFlying) { BasicActor act = new BasicActor(); act.Position = position; act.Flying = isFlying; _actors.Add(act); return(act); }
public override PhysicsActor AddAvatar(string avName, OpenMetaverse.Vector3 position, OpenMetaverse.Quaternion rotation, OpenMetaverse.Vector3 size, bool isFlying, OpenMetaverse.Vector3 initialVelocity) { BasicActor act = new BasicActor(); act.Position = position; act.Flying = isFlying; _actors.Add(act); return(act); }
public override float Simulate(float timeStep) { // Console.WriteLine("Simulating"); float fps = 0; 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; 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); }
public override float Simulate(float timeStep, uint ticksSinceLastSimulate, uint frameNum, bool dilated) { if (!_simulating) { return(0); } float fps = 0; for (int i = 0; i < _actors.Count; ++i) { BasicActor actor = _actors[i]; Vector3 temp; temp.X = actor.Position.X + actor.Velocity.X * timeStep; temp.Y = actor.Position.Y + actor.Velocity.Y * timeStep; temp.Z = actor.Position.Z; if (temp.Y < 0) { temp.Y = 0.1F; } else if (temp.Y >= Constants.RegionSize) { temp.Y = 255.9F; } if (temp.X < 0) { temp.X = 0.1F; } else if (actor.Position.X >= Constants.RegionSize) { temp.X = 255.9F; } float height = _heightMap[(int)temp.Y * Constants.RegionSize + (int)temp.X] + actor.Size.Z; if (actor.Flying) { if (temp.Z + (temp.Z * timeStep) < _heightMap[(int)temp.Y * Constants.RegionSize + (int)temp.X] + 2) { temp.Z = height; temp.Z = 0; actor.IsColliding = true; } else { temp.Z += actor.Velocity.Z * timeStep; actor.IsColliding = false; } } else { temp.Z = height; temp.Z = 0; actor.IsColliding = true; } actor.Position = temp; } return(fps); }
public override PhysicsActor AddAvatar(string avName, OpenMetaverse.Vector3 position, OpenMetaverse.Quaternion rotation, OpenMetaverse.Vector3 size, bool isFlying, OpenMetaverse.Vector3 initialVelocity) { BasicActor act = new BasicActor(); act.Position = position; act.Flying = isFlying; _actors.Add(act); return act; }
public override PhysicsActor AddAvatar(string avName, OpenMetaverse.Vector3 position, OpenMetaverse.Quaternion rotation, OpenMetaverse.Vector3 size, bool isFlying, OpenMetaverse.Vector3 initialVelocity) { BasicActor act = new BasicActor(this, size.Z, size.X, position, rotation, isFlying, initialVelocity); _actors.Add(act); return act; }