public void HandleCommandOnUnit(AbilityCommandRequest command, IUnit unit) { if (CanHandleCommandOnUnit(command, unit)) { var unitOwner = UnitPossessionCanon.GetOwnerOfPossession(unit); TechCanon.AddFreeTechToCiv(unitOwner); } else { throw new InvalidOperationException("Cannot handle command"); } }
protected override void DoOnPossessionEstablished(IBuilding building, ICity newOwner) { if (newOwner == null) { return; } var cityOwner = CityPossessionCanon.GetOwnerOfPossession(newOwner); foreach (var resource in building.Template.ResourcesConsumed) { ResourceLockingCanon.LockCopyOfResourceForCiv(resource, cityOwner); } if (building.Template.ProvidesFreeTech) { TechCanon.AddFreeTechToCiv(cityOwner); } CitySignals.GainedBuilding.OnNext(new Tuple <ICity, IBuilding>(newOwner, building)); }