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)); }
private bool IsEnoughResourses(ResourseHolder resourseSource) { bool isEnough = true; NecessaryResourses.ForEach(r => isEnough = isEnough && resourseSource.FindByResourseId(r.Resourse.Id).Amount - r.Amount >= 0); return(isEnough); }
public Planet ( string name, ResourseHolder resourseHolder, SpaceObject spaceObject, ColonyHolder colonyHolder ) { this.Name = name; this.ResourseHolder = resourseHolder; this.SpaceObject = spaceObject; this.ColonyHolder = colonyHolder; }
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; }
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; } }
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); }
public bool Remove(List <ResourseBunch> ts) { return(ResourseHolder.Remove(ts)); }
public bool Remove(ResourseBunch t) { return(ResourseHolder.Remove(t)); }
public bool Move(List <ResourseBunch> ts, IGeneralHolder <ResourseBunch> generalHolder) { return(ResourseHolder.Move(ts, generalHolder)); }
public bool Move(ResourseBunch t, IGeneralHolder <ResourseBunch> generalHolder) { return(ResourseHolder.Move(t, generalHolder)); }
public bool Add(List <ResourseBunch> ts) { return(ResourseHolder.Add(ts)); }
public bool Add(ResourseBunch t) { return(ResourseHolder.Add(t)); }
public abstract bool ProduceResourse(ResourseHolder resourseHolderForRaw, ResourseHolder resourseHolderForProduct);