コード例 #1
0
        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);
        }
コード例 #2
0
 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;
 }
コード例 #3
0
 public override void RemoveAvatar(PhysicsActor actor)
 {
     BasicActor act = (BasicActor)actor;
     if (_actors.Contains(act))
     {
         _actors.Remove(act);
     }
 }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
 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;
 }
コード例 #9
0
 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;
 }