public static void PutOnGround(this IPlatformerObject obj, TileMap tiles, int ignoreDistance) { var tile = tiles.GetTilesHit(obj.Position).First(); while (!tile.IsSolid) { var nextTile = tile.GetAdjacent(Direction.Down); if (nextTile.Position.Top > tiles.Position.Height) { return; } tile = nextTile; } if (tile.Position.Top < obj.Position.Bottom + ignoreDistance) { obj.Position.SetBottom(tile.Position.Top); } }
public static void AddWaterPhysics(IPlatformerObject actor) { actor.Motion.AddMultiplier(new MotionMultiplier(actor.IsUnderWater, "underwater")); }