public static List <Point> GetTerritoryCells(Fraction owner, JEventBus eventBus = null)
        {
            FindTerritoriesCellEvent findTerritoriesCellEvent = new FindTerritoriesCellEvent(owner);

            BaseApi.SendEvent(eventBus, findTerritoriesCellEvent);
            return(findTerritoriesCellEvent.Results ?? new List <Point>());
        }
        public static int GetTerritoryCellsAmount(Fraction owner, JEventBus eventBus = null)
        {
            FindTerritoriesCellEvent findTerritoriesCellEvent = new FindTerritoriesCellEvent(owner);

            BaseApi.SendEvent(eventBus, findTerritoriesCellEvent);
            return(findTerritoriesCellEvent.Results?.Count ?? 0);
        }
        public static void AddObstacle(Point position, ObstacleDefinition obstacleDefinition, JEventBus eventBus = null)
        {
            Obstacle obstacle = new Obstacle(obstacleDefinition);
            AddObstacleOnWorldMapEvent addObstacleOnWorldMapEvent =
                new AddObstacleOnWorldMapEvent(obstacle, position);

            BaseApi.SendEvent(eventBus, addObstacleOnWorldMapEvent);
        }
        public static void AddStructure(Point position, string structureName, JEventBus eventBus = null)
        {
            StructureDefinition         structureDefinition         = new StructureDefinition(structureName, new Point(1, 1));
            Structure                   structure                   = new Structure(structureDefinition);
            AddStructureOnWorldMapEvent addStructureOnWorldMapEvent =
                new AddStructureOnWorldMapEvent(structure, position);

            BaseApi.SendEvent(eventBus, addStructureOnWorldMapEvent);
        }
        public static void AddResourcePiles(Point position, string resourceName, int amount = 1, JEventBus eventBus = null)
        {
            ResourceDefinition         resourceDefinition         = new ResourceDefinition(resourceName);
            Resource                   resource                   = new Resource(resourceDefinition);
            AddResourceOnWorldMapEvent addResourceOnWorldMapEvent =
                new AddResourceOnWorldMapEvent(resource, position);

            BaseApi.SendEvent(eventBus, addResourceOnWorldMapEvent);
        }
        public static void ChangeTerritoryOwner(Point tilePosition, Fraction newOwner, JEventBus eventBus = null)
        {
            if (eventBus == null)
            {
                eventBus = JEventBus.GetDefault();
            }

            TerritoryChangeEvent territoryChangeEvent = new TerritoryChangeEvent(tilePosition, newOwner);

            BaseApi.SendEvent(eventBus, territoryChangeEvent);
        }
        public static void AddHabitat(Point position, CreatureDefinition creatureDefinition, int production = 7, JEventBus eventBus = null)
        {
            string structureName = creatureDefinition.Name + "Habitat";
            StructureDefinition         structureDefinition         = new StructureDefinition(structureName, new Point(1, 1));
            Structure                   structure                   = new Structure(structureDefinition);
            AddStructureOnWorldMapEvent addStructureOnWorldMapEvent =
                new AddStructureOnWorldMapEvent(structure, position);

            addStructureOnWorldMapEvent.Params.Add("template", "Habitat");
            addStructureOnWorldMapEvent.Params.Add("production", production);
            addStructureOnWorldMapEvent.Params.Add("definition", creatureDefinition);
            BaseApi.SendEvent(eventBus, addStructureOnWorldMapEvent);
        }
        public static void AddMine(Point position, ResourceDefinition resourceDefinition, int production = 500, JEventBus eventBus = null)
        {
            string structureName = resourceDefinition.Name + "Mine";
            StructureDefinition         structureDefinition         = new StructureDefinition(structureName, new Point(1, 1));
            Structure                   structure                   = new Structure(structureDefinition);
            AddStructureOnWorldMapEvent addStructureOnWorldMapEvent =
                new AddStructureOnWorldMapEvent(structure, position);

            addStructureOnWorldMapEvent.Params.Add("template", "Mine");
            addStructureOnWorldMapEvent.Params.Add("production", production);
            addStructureOnWorldMapEvent.Params.Add("definition", resourceDefinition);
            BaseApi.SendEvent(eventBus, addStructureOnWorldMapEvent);
        }
        public static void AddArmy(string name, Point startPosition, bool addAi = true, JEventBus eventBus = null)
        {
            CreatureDefinition creatureDefinition = new CreatureDefinition("Peasant");
            Creature           creature           = new Creature(creatureDefinition, 10);

            Army army = new Army();

            army.Fraction = new Fraction(name);
            army.Fraction.Resources.Add("Gold", new Resource(new ResourceDefinition("Gold"), 500));
            army.Creatures.Add(creature);

            AddArmyEvent addArmyEvent = new AddArmyEvent(army, startPosition, addAi);

            BaseApi.SendEvent(eventBus, addArmyEvent);
        }