// get positions // public Point GetNearbyBlockClosestToTargetForMovement(Point target, MapTile map) { List <Point> nearbyPoints = new List <Point>(); List <Point> walkablePoints = new List <Point>(); Point closestPoint = new Point(); Point nextClosestPoint = new Point(); Point closestWalkablePoint = new Point(); nearbyPoints.Add(new Point(Position.X, Position.Y + 1)); nearbyPoints.Add(new Point(Position.X, Position.Y - 1)); nearbyPoints.Add(new Point(Position.X + 1, Position.Y)); nearbyPoints.Add(new Point(Position.X - 1, Position.Y)); nearbyPoints.Add(new Point(Position.X - 1, Position.Y + 1)); nearbyPoints.Add(new Point(Position.X + 1, Position.Y - 1)); nearbyPoints.Add(new Point(Position.X + 1, Position.Y + 1)); nearbyPoints.Add(new Point(Position.X - 1, Position.Y - 1)); foreach (Point point in nearbyPoints) { if (map.PointWithinBounds(point) && map[point.X, point.Y].Solid == false) { walkablePoints.Add(point); } if (point.DistFrom(target) < closestPoint.DistFrom(target)) { nextClosestPoint = closestPoint; closestPoint = point; } } if (map[closestPoint.X, closestPoint.Y].Solid == true && map[target.X, target.Y].Solid == false) { closestPoint = nextClosestPoint; } foreach (Point point in walkablePoints) { int deltaX = point.X - target.X; int deltaY = point.Y - target.Y; int closestDeltaX = closestPoint.X - target.X; int closestDeltaY = closestPoint.Y - target.Y; if (Math.Sqrt(deltaX * deltaX + deltaY * deltaY) <= Math.Sqrt(closestDeltaX * closestDeltaX + closestDeltaY * closestDeltaY)) { closestWalkablePoint = point; } } return(closestWalkablePoint); }
public void TrySeed(MapTile map, Point position, Random rng) { if (!map.PointWithinBounds(position)) { return; } bool explored = map.Blocks[position.X * map.Width + position.Y].Explored; if (map.Floor[position.X * map.Width + position.Y] is DirtFloor) { if ((map.Blocks[position.X * map.Width + position.Y] is Plant && rng.Next(0, 50) <= 1) || map.Blocks[position.X * map.Width + position.Y] is Air) { map[position.X, position.Y] = new Plant(growthStages[0], Name, growthInterval, seedRadius, growthStages, requirement, edible, ForeColor, explored); } } }