コード例 #1
0
 private void TryAddImprovementTo(IImprovementTemplate template, IHexCell location)
 {
     if (ImprovementValidityLogic.IsTemplateValidForCell(template, location, true) &&
         ImprovementLocationCanon.CanPlaceImprovementOfTemplateAtLocation(template, location)
         )
     {
         ImprovementFactory.BuildImprovement(template, location, 0, true, false);
     }
 }
コード例 #2
0
        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
                    );
            }
        }
コード例 #3
0
        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();
                }
            }
        }