void BuildFleets(IEnumerable <Fleet> fleets) { foreach (var guard in fleets) { var colony = Colonies.FirstOrDefault(x => x.Location == guard.HomeBase); var design = PickWarshipDesign(); if (Resouces < design.Cost) { savingFor = design; savingTarget = colony; return; } colony.BuildShip(design); } }
bool BuildColonies() { List <Distances> distanceMatrix = new List <Distances>(); var buildable = Colonies.Where(x => x.ColonyAction != ColonyAction.Building); var empty = EntityManager.GetAllUncolonized(); if (empty.Count == 0) { return(false); } foreach (var col in buildable) { foreach (var uncol in empty) { distanceMatrix.Add(new Distances() { colony = col, empty = uncol, distance = OffsetCoord.RFromUnity(col.Location).Distance(OffsetCoord.RFromUnity(uncol)) }); } } if (distanceMatrix.Count < 1) { return(false); } var ordered = distanceMatrix.OrderBy(x => x.distance); var design = Designs.Where(x => x.Value.Type == "ColonyShip").Random().Value; foreach (var col in ordered) { if (Resouces < design.Cost) { savingFor = design; savingTarget = col.colony; return(true); } col.colony.BuildShip(design); } return(true); }
/// <summary> /// Loads up the build menu for the given colony. /// </summary> /// <param name="colonyControl"></param> public void LoadBuildMenu(ColonyControl colonyControl) { CloseMenu("build"); SetAllInactive(); List <PageObjectDef> buttonDefs = new List <PageObjectDef>(); var pageo = Instantiate(PageMenuObj, Canvas.transform); var page = pageo.GetComponentInChildren <PageMenu>(); foreach (var design in Cursor.PlayerEmpire.Designs) { var weapons = design.Value.BaseComponents.OfType <WeaponComponent>(); buttonDefs.Add(new ButtonDef() { name = $"design{design.Key}", OnClick = () => { if (colonyControl.ColonyAction != ColonyAction.Building) { if (colonyControl.Empire.Resouces > design.Value.Cost) { colonyControl.BuildShip(design.Value); CloseMenu("build"); return; } Logger.Log("Not enough resources", colonyControl.Location); return; } Logger.Log("Colony is building currently", colonyControl.Location); }, text = $"{design.Key}: {design.Value.Type}{Environment.NewLine}" + $"{design.Value.Cost} L:{weapons.Where(x => x.DamageType == DamageType.Energy).Sum(x => x.Amount)} M:{weapons.Where(x => x.DamageType == DamageType.Mass).Sum(x => x.Amount)} O:{weapons.Where(x => x.DamageType == DamageType.Mass).Sum(x => x.Amount)}", }); } page.Close = () => { CloseMenu("build"); }; page.Populate(buttonDefs); Menus.Add("build", page); }
/// <summary> /// handles the shipbuilding for the ai. /// </summary> void ShipBuilding() { if (savingFor != null) { if (savingTarget == null) { savingTarget = Colonies.Where(x => x.ColonyAction != ColonyAction.Building).Random(); } if (Resouces > savingFor.Cost && savingTarget.ColonyAction != ColonyAction.Building) { savingTarget.BuildShip(savingFor); savingTarget = null; savingFor = null; } return; } if (AIPriority == Priority.guard) { var percentage = Random.Range(0, 100); if (percentage < 50) { BuildGuards(); return; } if (percentage < 90) { if (BuildColonies()) { return; } //if (BuildGuards()) // return; //BuildRaiders(); } BuildRaiders(); } if (AIPriority == Priority.attack) { var percentage = Random.Range(0, 100); if (percentage < 50) { BuildRaiders(); return; } if (percentage < 75) { BuildGuards(); return; } BuildColonies(); } if (AIPriority == Priority.colonize) { var percentage = Random.Range(0, 100); if (percentage < 50) { if (BuildColonies()) { return; } //if (BuildGuards()) // return; //BuildRaiders(); } if (percentage < 85) { if (BuildGuards()) { return; } //if (BuildRaiders()) // return; //BuildColonies(); } BuildRaiders(); } }