public void AddObstacleListener(AddObstacleOnWorldMapEvent addObstacleOnWorldMapEvent) { IsFreeAreaEvent isFreeAreaEvent = new IsFreeAreaEvent(addObstacleOnWorldMapEvent.Position, addObstacleOnWorldMapEvent.Obstacle.Definition.Size); _eventBus.Post(isFreeAreaEvent); if (!isFreeAreaEvent.IsFree) { // Debug.WriteLine("Area is blocked! " + isFreeAreaEvent); return; } Entity obstacle = entityWorld.CreateEntityFromTemplate("Obstacle", addObstacleOnWorldMapEvent.Obstacle, addObstacleOnWorldMapEvent.Position); PlaceObjectOnMapEvent placeObjectOnMapEvent = new PlaceObjectOnMapEvent(obstacle, addObstacleOnWorldMapEvent.Position, addObstacleOnWorldMapEvent.Obstacle.Definition.Size); _eventBus.Post(placeObjectOnMapEvent); }
public void AddResourceListener(AddResourceOnWorldMapEvent addResourceOnWorldMapEvent) { Point staticResourceSize = new Point(1, 1); IsFreeAreaEvent isFreeAreaEvent = new IsFreeAreaEvent(addResourceOnWorldMapEvent.Position, staticResourceSize); _eventBus.Post(isFreeAreaEvent); if (!isFreeAreaEvent.IsFree) { // Debug.WriteLine("Area is blocked! " + isFreeAreaEvent); return; } Entity resource = entityWorld.CreateEntityFromTemplate("Resource", addResourceOnWorldMapEvent.Resource, addResourceOnWorldMapEvent.Position); PlaceObjectOnMapEvent placeObjectOnMapEvent = new PlaceObjectOnMapEvent(resource, addResourceOnWorldMapEvent.Position, staticResourceSize); _eventBus.Post(placeObjectOnMapEvent); }
public void IsFreeAreaListener(IsFreeAreaEvent isFreeAreaEvent) { int positionX = isFreeAreaEvent.Position.X; int sizeX = isFreeAreaEvent.Size.X; int startX = sizeX > 0 ? positionX : positionX + sizeX; int endX = sizeX > 0 ? positionX + sizeX : positionX; int positionY = isFreeAreaEvent.Position.Y; int sizeY = isFreeAreaEvent.Size.Y; int startY = sizeY > 0 ? positionY : positionY + sizeY; int endY = sizeY > 0 ? positionY + sizeY : positionY; //Bound checker if (startX < 0 || endX >= _grid.Width) { return; } if (startY < 0 || endY >= _grid.Height) { return; } //Obstackle checker for (int x = startX; x < endX; x++) { for (int y = startY; y < endY; y++) { var index = _grid.GetNodeIndex(x, y); if (_nodeToEntityLinker.ContainsKey(index)) { return; } } } isFreeAreaEvent.IsFree = true; }
public void AddStructureListener(AddStructureOnWorldMapEvent addStructureOnWorldMapEvent) { IsFreeAreaEvent isFreeAreaEvent = new IsFreeAreaEvent(addStructureOnWorldMapEvent.Position, addStructureOnWorldMapEvent.Structure.Definition.Size); _eventBus.Post(isFreeAreaEvent); if (!isFreeAreaEvent.IsFree) { // Debug.WriteLine("Area is blocked! " + isFreeAreaEvent); return; } Entity structure = CreateEntityBasedOnStructureType(addStructureOnWorldMapEvent); AddEntrance(structure, addStructureOnWorldMapEvent.Position + addStructureOnWorldMapEvent.Structure.Definition.EntranceOffset); PlaceObjectOnMapEvent placeObjectOnMapEvent = new PlaceObjectOnMapEvent(structure, addStructureOnWorldMapEvent.Position, addStructureOnWorldMapEvent.Structure.Definition.Size); _eventBus.Post(placeObjectOnMapEvent); }