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"); }
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); } } }