public void Gravity(float seconds, AnimatedEntity entity) { if (!entity.isStanding) { entity.velocityY = Math.Max(entity.velocityY + (seconds * -gravity), -30); } }
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); }