Exemple #1
0
 public void Gravity(float seconds, AnimatedEntity entity)
 {
     if (!entity.isStanding)
     {
         entity.velocityY = Math.Max(entity.velocityY + (seconds * -gravity), -30);
     }
 }
Exemple #2
0
        public bool PerformCollisionAgainst(string type, AnimatedEntity entity)
        {
            List <RectWithDirection> collisionSet = new List <RectWithDirection>();

            if (type == "solid")
            {
                collisionSet = collisions;
            }
            else if (type == "win")
            {
                collisionSet = finishTiles;
            }
            else if (type == "death")
            {
                collisionSet = deathTiles;
            }
            else if (type == "coin")
            {
                collisionSet = coinTiles;
            }

            bool didCollisionOccur = false;

            int leftIndex;
            int rightIndex;

            GetIndicesBetween(collisionSet,
                              entity.BoundingBoxWorld.LowerLeft.X, entity.BoundingBoxWorld.UpperRight.X, out leftIndex, out rightIndex);

            var boundingBoxWorld = entity.BoundingBoxWorld;

            for (int i = leftIndex; i < rightIndex; i++)
            {
                var separatingVector = GetSeparatingVector(boundingBoxWorld, collisionSet[i]);

                if (separatingVector != CCVector2.Zero)
                {
                    didCollisionOccur = true;
                    if (type == "solid")
                    {
                        entity.PositionX += separatingVector.X;
                        entity.PositionY += separatingVector.Y;
                        // refresh boundingBoxWorld:
                        boundingBoxWorld = entity.BoundingBoxWorld;
                    }
                    if (type == "coin")
                    {
                        var tileCords = Tilemap.LayerNamed("fg2").ClosestTileCoordAtNodePosition(collisionSet[i].ToRect().Center);
                        Tilemap.LayerNamed("fg2").RemoveTile(tileCords);
                        collisionSet.Remove(collisionSet[i]);
                    }
                }
            }

            return(didCollisionOccur);
        }