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);
        }
예제 #3
0
        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;
        }
예제 #4
0
        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);
        }