private static void test12() { var g = new ElementGeometySlenderness() { b = 30, h = 40, izvijanje = Izvijanja.Ukljesten_Sa_Jedne, d1 = 4, L = 350, }; var f = new ForcesSlenderness() { N = 457.5, M_top = 20.25, //M_bottom = 50, }; var m = new Material() { beton = TabeleEC2.BetonClasses.GetBetonClassListEC().First(n => n.name == "C25/30"), armatura = ReinforcementType.GetArmatura().First(n => n.name == "B500B"), }; var v = new VitkostEC2_V2(g, f, m); //v.φ_ef = 3; v.Calculate(); v.KontrolaCentPritPreseka(); v.ProracunArmature(); }
public IActionResult SearchForLine([FromBody] MiNi model) { if (model == null) { throw new System.ArgumentNullException(nameof(model)); } try { var material = new Material() { beton = new BetonModelEC(model.material.betonClass), armatura = ReinforcementType.GetArmatura().First(n => n.name == model.material.armtype), }; var geometry = new ElementGeometry() { b = model.geometry.b, d1 = model.geometry.d1, h = model.geometry.h, }; var w = new SymmetricalReinfByClassicMethod(material, geometry); w.Get_ω(model.mi, model.ni); return(Ok(new { w = w.searchingOf_ω.ω, List = w.searchingOf_ω.ListOfDotsInLineOfDiagram, textResulte = w.TextResult() })); } catch (System.Exception ex) { return(BadRequest(new { error = ex.Message })); } }
private static void test22() { var g = new ElementGeometySlenderness() { b = 25, h = 25, izvijanje = Izvijanja.Pokretan_I_Ukljeste, d1 = 4, L = 400, }; var f = new ForcesSlenderness() { N = 85.725, M_top = 0, M_bottom = 0, }; var m = new Material() { beton = TabeleEC2.BetonClasses.GetBetonClassListEC().First(n => n.name == "C30/37"), armatura = ReinforcementType.GetArmatura().First(n => n.name == "B500B"), }; var v = new VitkostEC2_V2(g, f, m); v.Calculate(); v.KontrolaCentPritPreseka(); v.ProracunArmature(); }
public ReinforcementModelPBAB(ReinforcementTabelModel armatura, int Number) { this.Ø = armatura.diameter; this.armatura = armatura; this.Number = Number; this.Type = ReinforcementType.GetArmatura().First(); }
public ReinforcementModelPBAB(int Ø, int Number) { this.Ø = Ø; armatura = ReinforcementType.GetAramturaList().Single(n => n.diameter == Ø); this.Number = Number; this.Type = ReinforcementType.GetArmatura().First(); }
public async Task CalcTSectionTest() { Section = new SectionStrainsFactory( new Material { beton = new BetonModelEC("C25/30"), armatura = ReinforcementType.GetArmatura().Single(r => r.name == "B500B") }, new ElementGeometryWithReinfI { b_eff_top = 50, h_f_top = 8, b = 30, h = 30, d1 = 6, d2 = 6, As_1 = 6.8, As_2 = 6.8 } ); Stopwatch sw = new Stopwatch(); var Calc = new CalcForces(new ConcreteForceCalc(Section)); Section.SetByEcEs1(-2); var Fc = Calc.Calc(CalcForcesType.ConcreteForces); var Fs1 = Calc.Calc(CalcForcesType.ReinforcementForces1); var Fs2 = Calc.Calc(CalcForcesType.ReinforcementForces2); Assert.IsTrue(Fc.F.Round(2) == -1275 && Fc.Z.Round(2) == 0.0); Assert.IsTrue(Fs1.F.Round(2) == -272.0 && Fs1.Z.Round(2) == 9.0); Assert.IsTrue(Fs2.F.Round(2) == -272.0 && Fs2.Z.Round(2) == 9.0); }
public IActionResult GetListOfAllLines([FromBody] MiNi model) { if (model == null) { throw new System.ArgumentNullException(nameof(model)); } try { var material = new Material() { beton = new BetonModelEC(model.material.betonClass), armatura = ReinforcementType.GetArmatura().First(n => n.name == model.material.armtype), }; var geometry = new ElementGeometry() { b = model.geometry.b, d1 = model.geometry.d1, d2 = model.geometry.d1, h = model.geometry.h, }; var cs = new CoeffService(material, geometry); return(Ok(new SymmetricalReinfByClassicMethod(material, geometry).GetAllLines(cs))); } catch (System.Exception ex) { return(BadRequest(new { error = ex.Message })); } }
private static void PBAB_TacnPostupak() { double Msd = 770; double Mu; double Du; double b_eff = 60; double b_w = 30; double h_f = 10; double d = 51; double s; double δ = h_f / d; //BetonModel beton = BetonClasses.GetBetonClassList().Single(b => b.name == "C25/30"); ReinforcementTypeModelEC arm = ReinforcementType.GetArmatura().Single(a => a.name == "B500B"); var fcd = 2.05; KofZaProracunPravougaonogPresekaModelEC kof1 = new KofZaProracunPravougaonogPresekaModelEC(); KofZaProracunPravougaonogPresekaModelEC kof2 = new KofZaProracunPravougaonogPresekaModelEC(); bool done = false; s = δ; int i = 0; var s_add = 0.1; do { i++; //kof1.SetByS_PBAB(s); var x = s * d; var Du1 = kof1.αv * b_eff * s * d * fcd; var zb1 = d * (1 - kof1.ka * s); var Ebd = ((s - δ) / s) * kof1.εc; kof2.SetByEcEs1(Ebd, 10); var Du2 = kof2.αv * (b_eff - b_w) * (x - h_f) * fcd; var zb2 = d - h_f - kof2.ka * (x - h_f); Mu = Math.Round(Du1 * zb1 / 100 - Du2 * zb2 / 100, 2); if (Mu < Msd) { s += s_add; continue; } //if (Mu > Msd) { s -= 0.09; continue; } if (Mu > Math.Round(Msd * 1.001, 2)) { s_add = s_add / 2; s -= s_add; continue; } if (Mu >= Msd && Mu <= Math.Round(Msd * 1.001, 2)) { done = true; } } while (!done); Console.WriteLine(i); Console.ReadKey(); GC.Collect(); }
public async Task <IActionResult> SearchForLineAsync([FromBody] MN model) { if (model == null) { throw new ArgumentNullException(nameof(model)); } try { var material = new Material() { beton = new BetonModelEC(model.material.betonClass), armatura = ReinforcementType .GetArmatura() .First(n => n.name == model.material.armtype), }; var geometry = new ElementGeometryWithReinfI() { b_eff_top = model.geometry.b_eff, h_f_top = model.geometry.h_f, b = model.geometry.b, d1 = model.geometry.d1, d2 = model.geometry.d2, h = model.geometry.h, As_1 = model.geometry.as1, As_2 = model.geometry.as2, }; var s = new Solver(material, geometry); await s.CalcAsync(); //s.GetWorrnings(model.m, model.n); var isValid = s.List.IsMNValid(model.m, model.n); var listMaxMin = new List <SectionStrainsModel>(); listMaxMin.AddRange( s.List .OrderBy(n => Math.Abs(n.M_Rd - model.m)) .Take(2) ); listMaxMin.AddRange(s.List.OrderBy(n => Math.Abs(n.N_Rd - model.n)) .Take(2)); return(Ok( new { extrims = InfoDetailModel.Converts(listMaxMin.ToArray()), isValid = isValid, worrnings = s.Worrnings, })); } catch (Exception ex) { return(BadRequest(new { error = ex.Message })); } }
public async Task <List <IReinforcementTypeModel> > GetReinforcementTypesAsync() { var reinforcementTypes = new List <IReinforcementTypeModel>(); await Task.Run(() => { reinforcementTypes = ReinforcementType.GetArmatura(); }); return(reinforcementTypes); }
protected override void OnInitialized() { MaterialModel = new MaterialModel(); ListBeton = new List <string>(betonService.GetNameList()); ListArmatura = new List <string>(ReinforcementType.GetArmatura().Select(x => x.name)); MaterialModel.SelectedReinf = ListArmatura.FirstOrDefault(x => x == "B500B"); MaterialModel.SelectedConcrete = ListBeton.FirstOrDefault(x => x == "C25/30"); }
public ReinforcementModelEC(int Ø, int Number, ReinforcementTypeModelEC Type = null) { this.Ø = Ø; armatura = ReinforcementType.GetAramturaList().Single(n => n.diameter == Ø); this.Number = Number; if (Type == null) { this.Type = ReinforcementType.GetArmatura().First(); } }
public async Task <List <ReinforcementTabelModel> > GetReinforcementListsAsync() { var reinforcementList = new List <ReinforcementTabelModel>(); await Task.Run(() => { reinforcementList = ReinforcementType.GetAramturaList(); }); return(reinforcementList); }
public override bool IsValid(object value) { if (value is string) { var b = value as string; return(ReinforcementType.GetArmatura() .Any(x => x.name == (string)value));; } return(false); }
private static void EC_T_Presek_PomocuFormule() { double Msd = 6100; double b_eff = 175; double b_w = 35; double h_f = 15; double d = 143; double s; double δ = h_f / d; var μSd = 0.0; var bi = b_eff; BetonModelEC beton = BetonClasses.GetBetonClassListEC().Single(b => b.name == "C25/30"); ReinforcementTypeModelEC arm = ReinforcementType.GetArmatura().Single(a => a.name == "B500B"); var fcd = beton.fcd / 10; KofZaProracunPravougaonogPresekaModelEC kof1 = new KofZaProracunPravougaonogPresekaModelEC(); KofZaProracunPravougaonogPresekaModelEC kof2 = new KofZaProracunPravougaonogPresekaModelEC(); KofZaProracunPravougaonogPresekaModelEC kof_zvezdica = new KofZaProracunPravougaonogPresekaModelEC(); //kof1. bool done = false; s = δ; kof1.SetByξ(s); kof2 = kof1; int i = 0; //var s_add = 0.1; do { var x = kof2.ξ * d; var Eb = ((x - h_f) / x) * kof2.εc; kof_zvezdica.SetByEcEs1(Eb, 20); if (kof2.εc == 0)///na pocetku ce uvek biti kof2 0; { bi = 1 * b_eff; } else { bi = (1 - (kof_zvezdica.αv / kof1.αv) * (1 - (h_f / (kof2.ξ * d))) * (1 - (b_w / b_eff))) * b_eff; } μSd = Msd * 100 / (bi * Math.Pow(d, 2) * fcd); var kof3 = KofZaProracunPravougaonogPresekaEC.Get_Kof_From_μ(μSd); if (Math.Round(kof2.ξ, 3) == Math.Round(kof3.ξ, 3)) { done = true; continue; } kof2 = kof3; } while (!done); }
private static void test() { var m = new Material() { beton = TabeleEC2.BetonClasses.GetBetonClassListEC().First(n => n.name == "C30/37"), armatura = ReinforcementType.GetArmatura().First(n => n.name == "B500B"), }; var s = new SymmetricalReinforsmentOfColumn(m); var r = s.Get_ρ(457.5, 67.83, 40, 30); }
private static void testqq() { var m = new Material() { beton = TabeleEC2.BetonClasses.GetBetonClassListEC().First(n => n.name == "C30/37"), armatura = ReinforcementType.GetArmatura().First(n => n.name == "B500B"), }; var s = new Generate_ρ_LineForDiagram(m); var r = s.ListOfDotsInLineOfDiagram; }
public void CreckTest() { var a = new CreckingENCalc.Solver( new Material { beton = new BetonModelEC("C40/50"), armatura = ReinforcementType.GetArmatura().Single(r => r.name == "B500B") }, beam, new Forces { M3 = 43.90 }); Assert.IsTrue(a.CalcValid); }
public static EventType ToActionType(ReinforcementType type) { switch (type) { default: case ReinforcementType.CARRYALL: return(EventType.DEPLOY); case ReinforcementType.STARPORT: return(EventType.REINFORCE); case ReinforcementType.SPAWN: return(EventType.ADDUNITS); } }
// Token: 0x0600017C RID: 380 RVA: 0x0000AB34 File Offset: 0x00008D34 protected void SetGroup() { string ownerUid = null; PosReinfLayer posReinfLayer = PosReinfLayer.Undefined; ReinforcementType precastReinfType = ReinforcementType.NotDefined; bool flag = this.Data != null; if (flag) { ownerUid = this.Data.uniqueOwner; posReinfLayer = this.Data.LayerPosition; precastReinfType = this.Data.reinforcementType; } this.Group = new SteelGroup(this.Host, ownerUid, posReinfLayer, precastReinfType); }
private static void testSteper() { var beton = TabeleEC2.BetonClasses.GetBetonClassListEC().First(n => n.name == "C25/30"); var arm = ReinforcementType.GetArmatura().First(n => n.name == "B500B"); //var b = new SavijanjePravougaonogPresekaEC2_V2(25,40,4,4, beton,arm,30,20,20); var b = new SavijanjePravougaonogPresekaEC2_V2(25, 40, 6, 6, beton, arm, 50, 30, 50); b.Calc(); foreach (var item in b.Steper.Steps) { Console.WriteLine("Step number " + item.StepNumber); Console.WriteLine("--" + item.Description + "--"); Console.WriteLine(" " + item.StepText); Console.WriteLine(); } Console.ReadKey(); }
// Token: 0x0600021C RID: 540 RVA: 0x0000ECC4 File Offset: 0x0000CEC4 public override void SetReinforcementType() { ReinforcementType reinforcementType = base.Data.reinforcementType; bool flag = reinforcementType == ReinforcementType.LintelReinf; if (flag) { this.SetReinforcementTypeForLintel(this.IronSetsRealistic); } else { IEqualityComparer <Tuple <double, double> > equalComparer = ItComparerFactory.getEqualComparer <Tuple <double, double> >((Tuple <double, double> t1, Tuple <double, double> t2) => t1.Item1.Eq(t2.Item1, -1.0), (Tuple <double, double> t1) => t1.Item1.GetHashCode()); IEnumerable <Tuple <double, double> > source = (from element in base.Group.Elements select Tuple.Create <double, double>(element.MinZ, element.MaxZ)).Distinct(equalComparer); List <Tuple <double, double> > list = (from t in source orderby t.Item1 select t).ToList <Tuple <double, double> >(); int num = list.FindIndex((Tuple <double, double> t) => base.MinZ.Eq(t.Item1, -1.0)); bool flag2 = num == -1; if (flag2) { base.SetReinforcementTypeUnknown(); } else { bool flag3 = base.Host.productType().isWall(); if (flag3) { this.SetReinforcementTypeForWall(num); } else { bool flag4 = base.Host.productType().isFloor(); if (flag4) { this.SetReinforcementTypeForFloor(num); } else { base.SetReinforcementTypeUnknown(); } } } } }
public static void Init(TestContext tc) { Section = new SectionStrainsFactory( new Material { beton = new BetonModelEC("C25/30"), armatura = ReinforcementType.GetArmatura().Single(r => r.name == "B500B") }, new ElementGeometryWithReinfT { b = 30, h = 30, d1 = 6, d2 = 6, As_1 = 6.8, As_2 = 6.8 } ); }
private void testqq() { var m = new Material() { beton = TabeleEC2.BetonClasses.GetBetonClassListEC().First(n => n.name == "C30/37"), armatura = ReinforcementType.GetArmatura().First(n => n.name == "B500B"), }; var s = new Generate_ρ_LineForDiagram(m); s.GetLineForDiagram(); var r = s.ListOfDotsInLineOfDiagram; var points = r.Select(n => new Point(n.Mbh, n.NbhPower2)).AsEnumerable(); var l = new List <IEnumerable <Point> >(); l.Add(points); list.ItemsSource = l; }
public async Task <List <CoeffForCalcRectCrossSectionModelEC> > GetKofZaProracunPravougaonogPresekaAsync([FromBody] MaterialModel model) { var kofList = new List <CoeffForCalcRectCrossSectionModelEC>(); var material = new Material() { beton = new BetonModelEC(model.betonClass), armatura = ReinforcementType.GetArmatura().First(n => n.name == model.armtype), }; var geometry = new ElementGeometry() { b = model.b, d1 = model.d1, d2 = model.d2, h = model.h, }; var cService = new CoeffService(material, geometry); await Task.Run(() => { kofList = cService.GetList(); }); return(kofList); }
public async Task <IActionResult> GetListOfAllLines([FromBody] MN model) { if (model == null) { Logger.LogError("model not valid"); throw new System.ArgumentNullException(nameof(model)); } try { var material = new Material() { beton = new BetonModelEC(model.material.betonClass), armatura = ReinforcementType.GetArmatura().First(n => n.name == model.material.armtype), }; var geometry = new ElementGeometryWithReinfI() { b_eff_top = model.geometry.b_eff, h_f_top = model.geometry.h_f, b = model.geometry.b, d1 = model.geometry.d1, d2 = model.geometry.d2, h = model.geometry.h, As_1 = model.geometry.as1, As_2 = model.geometry.as2, }; var s = new Solver(material, geometry); await s.CalcAsync(0.5); Logger.LogInformation("API send interacion curves"); return(Ok(s.List.Select(x => new { x = x.M_Rd, y = x.N_Rd }))); } catch (System.Exception ex) { Logger.LogError("something went wrrong: " + ex.Message); return(BadRequest(new { error = ex.Message })); } }
private void CreateMaterialAndGeometry(MaterialModel materalModel, GeometryModel geometryModel) { Material = new Material { armatura = ReinforcementType.GetArmatura().Find(x => x.name == materalModel.SelectedReinf), beton = betonServices.GetNew(materalModel.SelectedConcrete), }; Material.beton.αcc = Settings.MaterialSettings.alfa_cc; Geometry = new ElementGeometryWithReinfI { b = geometryModel.b, h = geometryModel.h, d1 = geometryModel.d1, d2 = geometryModel.d2, As_1 = geometryModel.As_1, As_2 = geometryModel.As_2, b_eff_top = geometryModel.b_eff_top, h_f_top = geometryModel.h_f_top, b_eff_bottom = geometryModel.b_eff_bottom, h_f_bottom = geometryModel.h_f_bottom, }; }
public FInt Reinforce(ArcenSimContext Context, Planet planet, WorldSide side, FInt budget, ReinforcementType reinforcementType) { ShortRangePlanning_StrengthData_CombatSide_Stance strengthData = planet.Combat.GetSideForWorldSide(side).DataByStance[SideStance.Self]; FInt strengthCap; FInt strengthPresent; switch (reinforcementType) { case ReinforcementType.FleetShip: strengthCap = planet.GetGuardingAIFleetShipStrengthCap(); strengthPresent = strengthData.GuardStrength - strengthData.TurretStrength - strengthData.ShieldStrength; break; case ReinforcementType.Turret: strengthCap = planet.GetGuardingAITurretStrengthCap(); strengthPresent = strengthData.TurretStrength; break; case ReinforcementType.Shield: strengthCap = planet.GetGuardingAIShieldStrengthCap(); strengthPresent = strengthData.ShieldStrength; break; default: return(FInt.Zero); } if (strengthPresent >= strengthCap) { return(FInt.Zero); } List <GameEntity> entitiesWeCanReinforce = new List <GameEntity>(); planet.Combat.GetSideForWorldSide(side).Entities.DoForEntities(EntityRollupType.ReinforcementLocations, delegate(GameEntity guardian) { switch (reinforcementType) { case ReinforcementType.Shield: case ReinforcementType.Turret: if (guardian.EntitySpecificOrders.Behavior != EntityBehaviorType.Guard_Guardian_Anchored) { return(DelReturn.Continue); } break; } entitiesWeCanReinforce.Add(guardian); guardian.Working_ReinforcementsOnly_ContentsStrength = guardian.GetStrengthOfContentsIfAny(); return(DelReturn.Continue); }); switch (reinforcementType) { case ReinforcementType.Turret: case ReinforcementType.Shield: GameEntity controller = planet.GetController(); if (controller.Side.WorldSide == side) { entitiesWeCanReinforce.Add(controller); } break; } FInt result = FInt.Zero; List <BuildMenu> buildMenus = null; bool atMostOnePerReinforceable = false; switch (reinforcementType) { case ReinforcementType.Shield: List <GameEntity> entitiesThatNeedMoreShieldCoverage = new List <GameEntity>(); for (int i = 0; i < entitiesWeCanReinforce.Count; i++) { GameEntity entity = entitiesWeCanReinforce[i]; if (entity.ProtectingShieldIDs.Count > 0) { continue; } entitiesThatNeedMoreShieldCoverage.Add(entity); } buildMenus = side.AITypeData.BudgetItems[AIBudgetType.Reinforcement].ShieldMenusToBuyFrom; entitiesWeCanReinforce = entitiesThatNeedMoreShieldCoverage; atMostOnePerReinforceable = true; break; case ReinforcementType.Turret: buildMenus = side.AITypeData.BudgetItems[AIBudgetType.Reinforcement].TurretMenusToBuyFrom; break; case ReinforcementType.FleetShip: buildMenus = side.AITypeData.BudgetItems[AIBudgetType.Reinforcement].NormalMenusToBuyFrom; break; } result += Inner_ReinforceWithFleetShipsOrTurrets(Context, planet, side, ref budget, reinforcementType, strengthCap, ref strengthPresent, buildMenus, entitiesWeCanReinforce, atMostOnePerReinforceable); return(result); }
public TransverzalneSileEc2ResultModel CalculateInit(TransverzalneSileEc2Model trans) { TransverzalneSileEc2ResultModel Result; var beton = new BetonModelEC(trans.betonClass, 1); var arm = ReinforcementType.GetArmatura().Where(n => n.name == trans.armtype).SingleOrDefault(); if (trans.settings != null) { beton = new BetonModelEC(trans.betonClass, trans.settings.alfa_cc, trans.settings.alfa_ct, trans.settings.y_c); arm = ReinforcementType.GetArmatura(trans.settings.y_s).Where(n => n.name == trans.armtype).SingleOrDefault(); } beton.ni = 0.85; var armLong = new ReinforcementModelEC(trans.armLongitudinal.diametar, trans.armLongitudinal.kom); bool armCalc = false; if (trans.u_diametar != 0 && trans.m != 0 && trans.s != 0) { armCalc = true; } var g = new ElementGeometryTransversal() { b = trans.b, h = trans.h, d1 = trans.d1, d2 = trans.d1, As1 = new ReinforcementModelEC(trans.armLongitudinal.diametar, trans.armLongitudinal.kom), unit = UnitDimesionType.cm }; var f = new ForcesTransversal() { Ved = trans.Ved, Vg = trans.Vg, Vq = trans.Vq }; var m = new Material() { beton = beton, armatura = arm, }; using (var t = new TransversalCalcEC2(g, f, m)) { if (armCalc) { if (trans.alfa == null) { t.CalculateArmature(trans.m, trans.s, new ReinforcementModelEC(trans.u_diametar, 1)); } else { t.CalculateArmature(trans.m, trans.s, new ReinforcementModelEC(trans.u_diametar, 1), trans.teta, (double)trans.alfa); } } Result = new TransverzalneSileEc2ResultModel() { Result = t.ToString(), s = t.Asw_min == 0 ? trans.s : t.s, ListS = t.List_s, ListM = t.List_m, m = t.Asw_min == 0 ? trans.m : t.m, teta = t.Θ, alfa = t.alfa, u_diametar = trans.u_diametar, addArm_pot = t.As_add, TransArm_pot = t.Asw, minArm_pot = t.Asw_min, IskorArm = t.IskoriscenostArmature / 100, IskorBeton = t.IskoriscenostBetona / 100, Errors = t.Errors }; } return(Result); }
private FInt Inner_ReinforceWithFleetShipsOrTurrets(ArcenSimContext Context, Planet planet, WorldSide side, ref FInt budget, ReinforcementType reinforcementType, FInt strengthCap, ref FInt strengthPresent, List <BuildMenu> buildMenus, List <GameEntity> entitiesWeCanReinforce, bool atMostOnePerReinforceable) { if (entitiesWeCanReinforce.Count <= 0) { return(FInt.Zero); } ArcenRandomDrawBag <GameEntityTypeData> bag = new ArcenRandomDrawBag <GameEntityTypeData>(); for (int i = 0; i < buildMenus.Count; i++) { BuildMenu menu = buildMenus[i]; for (int j = 0; j < menu.List.Count; j++) { int timesToAdd = 0; GameEntityTypeData buyableType = menu.List[j]; if (buyableType.Balance_MarkLevel.Ordinal > 0 && buyableType.Balance_MarkLevel != planet.MarkLevel) { continue; } if (World_AIW2.Instance.CorruptedAIDesigns.Contains(buyableType)) { continue; } if (!buyableType.AICanUseThisWithoutUnlockingIt && !World_AIW2.Instance.UnlockedAIDesigns.Contains(buyableType)) { continue; } timesToAdd = 1; if (timesToAdd <= 0) { continue; } bag.AddItem(buyableType, timesToAdd); } } if (!bag.GetHasItems()) { return(FInt.Zero); } entitiesWeCanReinforce.Sort(delegate(GameEntity Left, GameEntity Right) { return(Left.Working_ReinforcementsOnly_ContentsStrength.CompareTo(Right.Working_ReinforcementsOnly_ContentsStrength)); }); FInt result = FInt.Zero; while (budget > FInt.Zero && strengthPresent < strengthCap && entitiesWeCanReinforce.Count > 0) { int index = 0; switch (reinforcementType) { case ReinforcementType.Turret: case ReinforcementType.Shield: index = Context.QualityRandom.Next(0, entitiesWeCanReinforce.Count); break; } GameEntity entityToReinforce = entitiesWeCanReinforce[index]; GameEntityTypeData typeToBuy = bag.PickRandomItemAndReplace(Context.QualityRandom); budget -= typeToBuy.BalanceStats.StrengthPerSquad; result += typeToBuy.BalanceStats.StrengthPerSquad; strengthPresent += typeToBuy.BalanceStats.StrengthPerSquad; switch (reinforcementType) { case ReinforcementType.Turret: case ReinforcementType.Shield: { int minDistance = (ExternalConstants.Instance.Balance_AverageGravWellRadius * FInt.FromParts(0, 050)).IntValue; int maxDistance = (ExternalConstants.Instance.Balance_AverageGravWellRadius * FInt.FromParts(0, 150)).IntValue; ArcenPoint point = planet.Combat.GetSafePlacementPoint(Context, typeToBuy, entityToReinforce.WorldLocation, minDistance, maxDistance); if (point == ArcenPoint.ZeroZeroPoint) { continue; } result += typeToBuy.BalanceStats.StrengthPerSquad; GameEntity newEntity = GameEntity.CreateNew(planet.Combat.GetSideForWorldSide(side), typeToBuy, point, Context); newEntity.EntitySpecificOrders.Behavior = EntityBehaviorType.Stationary; } break; case ReinforcementType.FleetShip: { entityToReinforce.ChangeContents(typeToBuy, 1); entityToReinforce.Working_ReinforcementsOnly_ContentsStrength += typeToBuy.BalanceStats.StrengthPerSquad; for (int i = 1; i < entitiesWeCanReinforce.Count; i++) { GameEntity otherReinforceable = entitiesWeCanReinforce[i]; if (entityToReinforce.Working_ReinforcementsOnly_ContentsStrength <= otherReinforceable.Working_ReinforcementsOnly_ContentsStrength) { break; } entitiesWeCanReinforce[i - 1] = otherReinforceable; entitiesWeCanReinforce[i] = entityToReinforce; } } break; } if (atMostOnePerReinforceable) { entitiesWeCanReinforce.Remove(entityToReinforce); } } return(result); }