public void ChangePosition(GridPoint oldPos, GridPoint newPos) { if (_positions.Contains(oldPos)) { _positions.Remove(oldPos); _positions.Add(newPos); } }
public static HashSet<GridPoint> CreateCircle(GridPoint center, int radius, bool filled = false) { var points = new HashSet<GridPoint>(); points.Add(new GridPoint(center.X + radius, center.Y)); points.Add(new GridPoint(center.X - radius, center.Y)); points.Add(new GridPoint(center.X, center.Y + radius)); points.Add(new GridPoint(center.X, center.Y - radius)); if (filled) for (var i = center.X - radius + 1; i < center.X + radius; i++) points.Add(new GridPoint(i, center.Y)); var x = 0; var y = radius; var ddfX = 1; var ddfY = -2*radius; var f = 1 - radius; while (x < y) { if (f >= 0) { y -= 1; ddfY += 2; f += ddfY; } x += 1; ddfX += 2; f += ddfX; points.Add(new GridPoint(center.X + x, center.Y + y)); points.Add(new GridPoint(center.X - x, center.Y + y)); if (filled) for (var i = center.X - x + 1; i < center.X + x; i++) points.Add(new GridPoint(i, center.Y + y)); points.Add(new GridPoint(center.X + x, center.Y - y)); points.Add(new GridPoint(center.X - x, center.Y - y)); if (filled) for (var i = center.X - x + 1; i < center.X + x; i++) points.Add(new GridPoint(i, center.Y - y)); points.Add(new GridPoint(center.X + y, center.Y + x)); points.Add(new GridPoint(center.X - y, center.Y + x)); if (filled) for (var i = center.X - y + 1; i < center.X + y; i++) points.Add(new GridPoint(i, center.Y + x)); points.Add(new GridPoint(center.X + y, center.Y - x)); points.Add(new GridPoint(center.X - y, center.Y - x)); if (filled) for (var i = center.X - y + 1; i < center.X + y; i++) points.Add(new GridPoint(i, center.Y - x)); } return points; }
public void MoveEntity(Entity entity, GridPoint oldPos, GridPoint newPos, bool checkPassable = true) { var canMove = true; if (checkPassable == true) { if (CanPassThroughSquare(entity, newPos) == false) canMove = false; } if (canMove == true) { var pos = entity.Component<IPosition>(); pos.ChangePosition(oldPos, newPos); GameState.DrawMap(); } }
private GridPoint GetBuildCoords() { _buildPos = _buildPos.Add(_buildDelta); return _buildPos; }
public GridPoint Add(GridPoint point) { return new GridPoint(X + point.X, Y + point.Y); }
public void ChangePosition(GridPoint oldPos, GridPoint newPos) { Coords = newPos; }
public Position(GridPoint coords) { Coords = coords; }
public Position(int x, int y) { Coords = new GridPoint(x, y); }
public Position() { Coords = new GridPoint(0, 0); }
public void ChangePosition(GridPoint oldPos, GridPoint newPos) { _xOffset = _basePosition.X - newPos.X; _yOffset = _basePosition.Y - newPos.Y; }
public RelativePosition(GridPoint basePosition, int xOffset, int yOffset) { _basePosition = basePosition; _xOffset = xOffset; _yOffset = yOffset; }
private bool CanPassThroughSquare(Entity traveler, GridPoint pos) { var obstacles = from entity in _obstacles where entity.Component<IPosition>().IsAtPosition(pos.X, pos.Y) && CanPass(traveler, entity) == false select entity; return !obstacles.Any(); }
// Not finished yet private void GetMovementPath(Entity entity, GridPoint destination) { /* var mob = entity.GetComponent<Mob>(); var pos = entity.GetComponent<Position>(); var blockedEntityCoords = from blocker in _obstacles let obstacle = blocker.GetComponent<Obstacle>() where CanPass(mob, obstacle) == false select blocker.GetComponent<Position>(); //var blockedTileCoords = Singleton<GameState>.Instance.GetBlockedTileCoords(mob.MovementTypes); //var blockedCoords = blockedEntityCoords.Union(blockedTileCoords); */ throw new NotImplementedException(); }
private void StartWindow(string name, int x, int y, int width, int height, Color color, int buffer) { _name = name; _position = new GridPoint(x, y); _size = new GridPoint(width, height); _buffer = buffer; _graphic.Color = color; for (var i = 0; i < width; i++) { for (var j = 0; j < height; j++) { _positions.AddPosition(i + x, j + y); if (i > buffer && i < width - buffer && j > buffer && j < width - buffer) { // Note that these are relative to the window, not the whole screen! _freeSpots.Add(new GridPoint(i, j)); } } } }