示例#1
0
        public override bool ProduceResourse(ResourseHolder resourseHolderForRaw, ResourseHolder resourseHolderForProduct)
        {
            if (!IsWorking || BuildingState != State.Builded)
            {
                return(false);
            }

            double amount = 0;

            List <Unit> deadList     = new List <Unit>();
            List <Unit> buildedUnits = Units.Where(u => u.BuildingState == State.Builded).ToList();

            buildedUnits.ForEach(u =>
            {
                amount += MineRate * (StrengthMultipler * u.Strength + EnduranceMultipler * u.Endurance);
                u.Damage(DamageRate);

                if (u.IsDead())
                {
                    deadList.Add(u);
                }
            }
                                 );

            Remove(deadList);

            return(resourseHolderForRaw.Move(new ResourseBunch(MiningResourse, amount), resourseHolderForProduct));
        }
示例#2
0
        private bool IsEnoughResourses(ResourseHolder resourseSource)
        {
            bool isEnough = true;

            NecessaryResourses.ForEach(r => isEnough = isEnough && resourseSource.FindByResourseId(r.Resourse.Id).Amount - r.Amount >= 0);

            return(isEnough);
        }
示例#3
0
 public Planet
 (
     string name, ResourseHolder resourseHolder, SpaceObject spaceObject, ColonyHolder colonyHolder
 )
 {
     this.Name           = name;
     this.ResourseHolder = resourseHolder;
     this.SpaceObject    = spaceObject;
     this.ColonyHolder   = colonyHolder;
 }
示例#4
0
 public Colony
 (
     ResourseHolder resourseHolder, StarShipHolder starShipHolder, BuildingHolder buildingHolder,
     string name, State buildingState, TimeSpan timeToBuildSec, TimeSpan timeToDestroySec, List <ResourseBunch> necessaryResourses
 )
     : base(
         name, buildingState, timeToBuildSec, timeToDestroySec, necessaryResourses
         )
 {
     this.ResourseHolder = resourseHolder;
     this.StarShipHolder = starShipHolder;
     this.BuildingHolder = buildingHolder;
 }
示例#5
0
        public override bool ProduceResourse(ResourseHolder resourseHolderForRaw, ResourseHolder resourseHolderForProduct)
        {
            if (!IsWorking || BuildingState != State.Builded)
            {
                return(false);
            }

            double amount = 0;

            List <Unit> buildedUnits = Units.Where(u => u.BuildingState == State.Builded).ToList();

            buildedUnits.ForEach(u =>
            {
                amount += FactoryRate * (StrengthMultipler * u.Strength + EnduranceMultipler * u.Endurance);
            }
                                 );

            bool removed = resourseHolderForRaw.Remove(new ResourseBunch(RawResourse, amount));
            bool added   = resourseHolderForProduct.Add(new ResourseBunch(ProductResourse, FactoryRate * amount));

            if (removed && added)
            {
                List <Unit> deadList = new List <Unit>();

                buildedUnits.ForEach(u =>
                {
                    u.Damage(DamageRate);

                    if (u.IsDead())
                    {
                        deadList.Add(u);
                    }
                }
                                     );

                Remove(deadList);

                return(true);
            }
            if (removed)
            {
                resourseHolderForRaw.Add(new ResourseBunch(RawResourse, amount));
            }
            if (added)
            {
                resourseHolderForProduct.Remove(new ResourseBunch(ProductResourse, FactoryRate * amount));
            }

            return(false);
        }
        public void BuildingWork(ResourseHolder p, ResourseHolder c)
        {
            switch (BuildingType)
            {
            case Type.House:
                ((House)this).Heal();
                break;

            case Type.Mine:
                ((Mine)this).ProduceResourse(p, c);
                break;

            case Type.Factory:
                ((Factory)this).ProduceResourse(c, c);
                break;
            }
        }
示例#7
0
        public async Task <bool> Build(ResourseHolder resourseSource)
        {
            if (IsEnoughResourses(resourseSource) && BuildingState == State.Destroyed)
            {
                BuildingState = State.Building;

                NecessaryResourses.ForEach(r => resourseSource.FindByResourseId(r.Resourse.Id).Remove(r.Amount));

                await Task.Delay(TimeToBuildSec);

                BuildingState = State.Builded;

                return(true);
            }

            return(false);
        }
示例#8
0
 public bool Remove(List <ResourseBunch> ts)
 {
     return(ResourseHolder.Remove(ts));
 }
示例#9
0
 public bool Remove(ResourseBunch t)
 {
     return(ResourseHolder.Remove(t));
 }
示例#10
0
 public bool Move(List <ResourseBunch> ts, IGeneralHolder <ResourseBunch> generalHolder)
 {
     return(ResourseHolder.Move(ts, generalHolder));
 }
示例#11
0
 public bool Move(ResourseBunch t, IGeneralHolder <ResourseBunch> generalHolder)
 {
     return(ResourseHolder.Move(t, generalHolder));
 }
示例#12
0
 public bool Add(List <ResourseBunch> ts)
 {
     return(ResourseHolder.Add(ts));
 }
示例#13
0
 public bool Add(ResourseBunch t)
 {
     return(ResourseHolder.Add(t));
 }
 public abstract bool ProduceResourse(ResourseHolder resourseHolderForRaw, ResourseHolder resourseHolderForProduct);