private void TryAddImprovementTo(IImprovementTemplate template, IHexCell location) { if (ImprovementValidityLogic.IsTemplateValidForCell(template, location, true) && ImprovementLocationCanon.CanPlaceImprovementOfTemplateAtLocation(template, location) ) { ImprovementFactory.BuildImprovement(template, location, 0, true, false); } }
public void DecomposeImprovements(SerializableMapData mapData) { foreach (var improvementData in mapData.Improvements) { var templateToBuild = AvailableImprovementTemplates.Where( template => template.name.Equals(improvementData.Template) ).First(); var locationToBuild = Grid.GetCellAtCoordinates(improvementData.Location); ImprovementFactory.BuildImprovement( templateToBuild, locationToBuild, improvementData.WorkInvested, improvementData.IsConstructed, improvementData.IsPillaged ); } }
public void HandleCommandOnUnit(AbilityCommandRequest command, IUnit unit) { if (!CanHandleCommandOnUnit(command, unit)) { throw new InvalidOperationException("Cannot handle command"); } if (CanHandleWithExistingSite(command, unit)) { var unitLocation = UnitPositionCanon.GetOwnerOfPossession(unit); unit.LockIntoConstruction(); var improvementOnCell = ImprovementLocationCanon.GetPossessionsOfOwner(unitLocation).FirstOrDefault(); improvementOnCell.WorkInvested += ImprovementWorkLogic.GetWorkOfUnitOnImprovement(unit, improvementOnCell); if (improvementOnCell.IsReadyToConstruct) { improvementOnCell.Construct(); } } else { var unitLocation = UnitPositionCanon.GetOwnerOfPossession(unit); var templateOfName = GetTemplateOfName(command.ArgsToPass.FirstOrDefault()); var improvementAtLocation = ImprovementLocationCanon.GetPossessionsOfOwner(unitLocation).FirstOrDefault(); if (improvementAtLocation != null) { ImprovementLocationCanon.ChangeOwnerOfPossession(improvementAtLocation, null); improvementAtLocation.Destroy(); } var newImprovement = ImprovementFactory.BuildImprovement(templateOfName, unitLocation); unit.LockIntoConstruction(); newImprovement.WorkInvested += ImprovementWorkLogic.GetWorkOfUnitOnImprovement(unit, newImprovement); if (newImprovement.IsReadyToConstruct) { newImprovement.Construct(); } } }