Esempio n. 1
0
 public void DetermineOverlaps(ISimplePhysicsEntity entity)
 {
     this.DetermineOverlapsInternal((IPhysicsEntity)entity, this.CameraManager.Viewpoint);
 }
Esempio n. 2
0
        public bool Update(ISimplePhysicsEntity entity, bool simple, bool keepInFront)
        {
            QueryOptions queryOptions = QueryOptions.None;

            if (entity.Background)
            {
                queryOptions |= QueryOptions.Background;
            }
            if (simple)
            {
                queryOptions |= QueryOptions.Simple;
            }
            if (entity is InstancePhysicsState)
            {
                (entity as InstancePhysicsState).UpdatingPhysics = true;
            }
            if (!simple)
            {
                this.MoveAlongWithGround((IPhysicsEntity)entity, queryOptions);
            }
            Vector3?clampToGroundDistance = new Vector3?();
            bool    grounded = entity.Grounded;
            MultipleHits <CollisionResult> horizontalResults;
            MultipleHits <CollisionResult> verticalResults;

            if (!entity.IgnoreCollision)
            {
                this.CollisionManager.CollideRectangle(entity.Center, entity.Velocity, entity.Size, queryOptions, entity.Elasticity, out horizontalResults, out verticalResults);
                bool            flag            = (double)this.CollisionManager.GravityFactor < 0.0;
                FaceOrientation faceOrientation = this.CameraManager.VisibleOrientation;
                if (entity.Background)
                {
                    faceOrientation = FezMath.GetOpposite(faceOrientation);
                }
                if ((flag ? ((double)entity.Velocity.Y > 0.0 ? 1 : 0) : ((double)entity.Velocity.Y < 0.0 ? 1 : 0)) != 0 && BoxCollisionResultExtensions.AnyCollided(verticalResults))
                {
                    MultipleHits <TrileInstance> ground = entity.Ground;
                    CollisionResult collisionResult1    = verticalResults.NearLow;
                    CollisionResult collisionResult2    = verticalResults.FarHigh;
                    if (collisionResult2.Destination != null && collisionResult2.Destination.GetRotatedFace(faceOrientation) != CollisionType.None)
                    {
                        ground.FarHigh = collisionResult2.Destination;
                        if (collisionResult2.Collided && collisionResult2.ShouldBeClamped)
                        {
                            clampToGroundDistance = new Vector3?(collisionResult2.NearestDistance);
                        }
                    }
                    else
                    {
                        ground.FarHigh = (TrileInstance)null;
                    }
                    if (collisionResult1.Destination != null && collisionResult1.Destination.GetRotatedFace(faceOrientation) != CollisionType.None)
                    {
                        ground.NearLow = collisionResult1.Destination;
                        if (collisionResult1.Collided && collisionResult1.ShouldBeClamped)
                        {
                            clampToGroundDistance = new Vector3?(collisionResult1.NearestDistance);
                        }
                    }
                    else
                    {
                        ground.NearLow = (TrileInstance)null;
                    }
                    entity.Ground = ground;
                }
                else
                {
                    entity.Ground = new MultipleHits <TrileInstance>();
                }
            }
            else
            {
                horizontalResults = new MultipleHits <CollisionResult>();
                verticalResults   = new MultipleHits <CollisionResult>();
            }
            bool flag1 = this.UpdateInternal((IPhysicsEntity)entity, horizontalResults, verticalResults, clampToGroundDistance, grounded, keepInFront, false, simple);

            if (entity is InstancePhysicsState)
            {
                (entity as InstancePhysicsState).UpdatingPhysics = false;
            }
            return(flag1);
        }
Esempio n. 3
0
 public bool Update(ISimplePhysicsEntity entity)
 {
     return(this.Update(entity, false, true));
 }
Esempio n. 4
0
 public void DetermineOverlaps(ISimplePhysicsEntity entity)
 {
   this.DetermineOverlapsInternal((IPhysicsEntity) entity, this.CameraManager.Viewpoint);
 }
Esempio n. 5
0
 public bool Update(ISimplePhysicsEntity entity, bool simple, bool keepInFront)
 {
   QueryOptions queryOptions = QueryOptions.None;
   if (entity.Background)
     queryOptions |= QueryOptions.Background;
   if (simple)
     queryOptions |= QueryOptions.Simple;
   if (entity is InstancePhysicsState)
     (entity as InstancePhysicsState).UpdatingPhysics = true;
   if (!simple)
     this.MoveAlongWithGround((IPhysicsEntity) entity, queryOptions);
   Vector3? clampToGroundDistance = new Vector3?();
   bool grounded = entity.Grounded;
   MultipleHits<CollisionResult> horizontalResults;
   MultipleHits<CollisionResult> verticalResults;
   if (!entity.IgnoreCollision)
   {
     this.CollisionManager.CollideRectangle(entity.Center, entity.Velocity, entity.Size, queryOptions, entity.Elasticity, out horizontalResults, out verticalResults);
     bool flag = (double) this.CollisionManager.GravityFactor < 0.0;
     FaceOrientation faceOrientation = this.CameraManager.VisibleOrientation;
     if (entity.Background)
       faceOrientation = FezMath.GetOpposite(faceOrientation);
     if ((flag ? ((double) entity.Velocity.Y > 0.0 ? 1 : 0) : ((double) entity.Velocity.Y < 0.0 ? 1 : 0)) != 0 && BoxCollisionResultExtensions.AnyCollided(verticalResults))
     {
       MultipleHits<TrileInstance> ground = entity.Ground;
       CollisionResult collisionResult1 = verticalResults.NearLow;
       CollisionResult collisionResult2 = verticalResults.FarHigh;
       if (collisionResult2.Destination != null && collisionResult2.Destination.GetRotatedFace(faceOrientation) != CollisionType.None)
       {
         ground.FarHigh = collisionResult2.Destination;
         if (collisionResult2.Collided && collisionResult2.ShouldBeClamped)
           clampToGroundDistance = new Vector3?(collisionResult2.NearestDistance);
       }
       else
         ground.FarHigh = (TrileInstance) null;
       if (collisionResult1.Destination != null && collisionResult1.Destination.GetRotatedFace(faceOrientation) != CollisionType.None)
       {
         ground.NearLow = collisionResult1.Destination;
         if (collisionResult1.Collided && collisionResult1.ShouldBeClamped)
           clampToGroundDistance = new Vector3?(collisionResult1.NearestDistance);
       }
       else
         ground.NearLow = (TrileInstance) null;
       entity.Ground = ground;
     }
     else
       entity.Ground = new MultipleHits<TrileInstance>();
   }
   else
   {
     horizontalResults = new MultipleHits<CollisionResult>();
     verticalResults = new MultipleHits<CollisionResult>();
   }
   bool flag1 = this.UpdateInternal((IPhysicsEntity) entity, horizontalResults, verticalResults, clampToGroundDistance, grounded, keepInFront, false, simple);
   if (entity is InstancePhysicsState)
     (entity as InstancePhysicsState).UpdatingPhysics = false;
   return flag1;
 }
Esempio n. 6
0
 public bool Update(ISimplePhysicsEntity entity)
 {
   return this.Update(entity, false, true);
 }