public void AddToDescriptionBuffer(GameEntity_Squad RelatedEntityOrNull, GameEntityTypeData RelatedEntityTypeData, ArcenDoubleCharacterBuffer Buffer) { // Make sure we are getting an entity. if (RelatedEntityOrNull == null) { return; } // Load our cargo data. CivilianCargo cargoData = RelatedEntityOrNull.GetCivilianCargoExt(); SpecialFaction_SKCivilianIndustry civFaction; if (RelatedEntityOrNull.PlanetFaction.Faction.Implementation is SpecialFaction_SKCivilianIndustry) { civFaction = (SpecialFaction_SKCivilianIndustry)RelatedEntityOrNull.PlanetFaction.Faction.Implementation; } else { civFaction = (SpecialFaction_SKCivilianIndustry)SpecialFaction_SKCivilianIndustry.GetFriendlyIndustry(RelatedEntityOrNull.PlanetFaction.Faction).Implementation; } // Inform them about what the station has on it. for (int x = 0; x < cargoData.Amount.Length; x++) { if (civFaction.IgnoreResource[x]) { if (cargoData.PerSecond[x] != 0) { Buffer.StartColor(CivilianResourceHexColors.Color[x]); Buffer.Add("\n" + ((CivilianResource)x).ToString()); Buffer.EndColor(); Buffer.StartColor(UnityEngine.Color.red); Buffer.Add(" is produced here but currently ignored due to tech level."); Buffer.EndColor(); } } else { Buffer.StartColor(CivilianResourceHexColors.Color[x]); if (cargoData.Amount[x] > 0 || cargoData.PerSecond[x] != 0) { Buffer.Add($"\n{cargoData.Amount[x]}/{cargoData.Capacity[x]} {(CivilianResource)x}"); } Buffer.EndColor(); // If resource has generation or drain, notify them. if (cargoData.PerSecond[x] > 0) { int income = cargoData.PerSecond[x] + RelatedEntityOrNull.CurrentMarkLevel; Buffer.Add($" +{income} per second"); } } } // Add in an empty line to stop any other gunk (such as the fleet display) from messing up our given information. Buffer.Add("\n"); return; }
public void AddToDescriptionBuffer(GameEntity_Squad RelatedEntityOrNull, GameEntityTypeData RelatedEntityTypeData, ArcenDoubleCharacterBuffer Buffer) { // Make sure we are getting an entity. if (RelatedEntityOrNull == null) { return; } // Load our militia data CivilianMilitia militiaData = RelatedEntityOrNull.GetCivilianMilitiaExt(); CivilianCargo cargoData = RelatedEntityOrNull.GetCivilianCargoExt(); CivilianFaction factionData = RelatedEntityOrNull.PlanetFaction.Faction.GetCivilianFactionExt(); if (factionData == null) { return; } // Inform them about any focus the ship may have. GameEntity_Squad centerpiece = World_AIW2.Instance.GetEntityByID_Squad(militiaData.Centerpiece); if (centerpiece != null && centerpiece.PrimaryKeyID != RelatedEntityOrNull.PrimaryKeyID) { Buffer.Add(" This structure is producing ships for " + centerpiece.FleetMembership.Fleet.GetName() + " on the planet " + centerpiece.Planet.Name + "."); } else { Planet targetPlanet = World_AIW2.Instance.GetPlanetByIndex(militiaData.PlanetFocus); if (targetPlanet != null) { Buffer.Add($" This ship's planetary focus is {targetPlanet.Name}"); } else { Buffer.Add(" This ship is currently waiting for a protection request."); } } if (militiaData.Ships.Count > 0) { for (int x = 0; x < (int)CivilianResource.Length; x++) { GameEntityTypeData entityData = GameEntityTypeDataTable.Instance.GetRowByName(militiaData.ShipTypeData[x], false, null); if (entityData == null) { continue; } int count = militiaData.GetShipCount(entityData.InternalName); Buffer.Add($"\n{entityData.DisplayName}:"); Buffer.StartColor(UnityEngine.Color.green); Buffer.Add($" {count}/{militiaData.ShipCapacity[x]}"); Buffer.EndColor(); Buffer.StartColor(CivilianResourceHexColors.Color[x]); Buffer.Add($" ({(CivilianResource)x})"); Buffer.EndColor(); int cost; if (RelatedEntityOrNull.TypeData.GetHasTag("BuildsProtectors")) { cost = (int)(12000 * SpecialFaction_SKCivilianIndustry.CostIntensityModifier(RelatedEntityOrNull.PlanetFaction.Faction)); } else { double countCostModifier = 1.0 + (1.0 - ((militiaData.ShipCapacity[x] - count + 1.0) / militiaData.ShipCapacity[x])); int baseCost = entityData.CostForAIToPurchase; cost = (int)(SpecialFaction_SKCivilianIndustry.CostIntensityModifier(RelatedEntityOrNull.PlanetFaction.Faction) * (baseCost * countCostModifier * (militiaData.CostMultiplier / 100.0))); } if (count < militiaData.ShipCapacity[x]) { double perc = Math.Min(100, 100.0 * (1.0 * cargoData.Amount[x] / cost)); Buffer.Add($" {perc.ToString("0.##")}% (Building)"); } else { double perc = Math.Min(100, 100.0 * (1.0 * cargoData.Amount[x] / cargoData.Capacity[x])); Buffer.Add($" {perc.ToString("0.##")}% (Stockpiling)"); } Buffer.EndColor(); } } // Add in an empty line to stop any other gunk (such as the fleet display) from messing up our given information. Buffer.Add("\n"); return; }