private void TryAddUnit(IHexCell location)
 {
     if (ActiveCivilization != null && ActiveTemplate != null &&
         UnitFactory.CanBuildUnit(location, ActiveTemplate, ActiveCivilization)
         )
     {
         UnitFactory.BuildUnit(location, ActiveTemplate, ActiveCivilization);
     }
 }
        private IHexCell GetValidNearbyCell(IHexCell centerCell, IUnitTemplate template, ICivilization owner)
        {
            for (int i = 0; i < 10; i++)
            {
                foreach (var nearbyCell in Grid.GetCellsInRing(centerCell, i))
                {
                    if (UnitFactory.CanBuildUnit(nearbyCell, template, owner))
                    {
                        return(nearbyCell);
                    }
                }
            }

            throw new InvalidOperationException("There is no cell within 10 cells of the argued location that can support this person");
        }
예제 #3
0
        public void PlaceStartingUnitsInRegion(
            MapRegion region, ICivilization owner, IMapTemplate mapTemplate
            )
        {
            if (owner.Template.IsBarbaric)
            {
                return;
            }

            var centralLocation = GetBestStartingCell(region);

            if (centralLocation == null)
            {
                throw new InvalidOperationException("Failed to find an appropriate central location");
            }

            UnitFactory.BuildUnit(centralLocation, mapTemplate.StartingUnits[0], owner);

            for (int i = 1; i < mapTemplate.StartingUnits.Count; i++)
            {
                var unitTemplate = mapTemplate.StartingUnits[i];

                var location = Grid.GetCellsInRadius(centralLocation, 2).Where(
                    cell => !UnitPositionCanon.GetPossessionsOfOwner(cell).Any() &&
                    UnitFactory.CanBuildUnit(cell, unitTemplate, owner) &&
                    cell != null
                    ).FirstOrDefault();

                if (location == null)
                {
                    throw new InvalidOperationException(
                              string.Format("Failed to place starting unit {0} for civ {1}", unitTemplate, owner)
                              );
                }
                else
                {
                    UnitFactory.BuildUnit(location, unitTemplate, owner);
                }
            }
        }