public static MercCaravan3d GetCaravan3dForMC(MercCaravan theMC) { foreach (MercCaravan3d MC3d in instance.spawnedMCs) { if (MC3d.data.ID == theMC.ID) { return(MC3d); } } return(null); }
public void ShowTooltipForZone(Zone targetZone, Vector3 basePos, bool showGarrInfo = true, bool refreshCanvasesBeforeGetSize = false) { baseTooltipPos = basePos; Faction ownerFaction = GameController.GetFactionByID(targetZone.ownerFaction); if (ownerFaction != null) { ChangeBackgroundAccordingToFactionRelations(ownerFaction); AddTooltipTitleEntry(targetZone.name, ownerFaction.color, 70); AddTooltipTitleEntry("(" + ownerFaction.name + ")", ownerFaction.color); AddTooltipTitleEntry("Garrison: " + targetZone.troopsContained.TotalTroopAmount + "/" + targetZone.MaxTroopsInGarrison, Color.white, 55); foreach (TroopNumberPair tnp in targetZone.troopsContained) { AddTooltipTroopEntry(GameController.GetTroopTypeByID(tnp.troopTypeID).name, tnp.troopAmount.ToString()); } List <Commander> cmdersInZone = GameController.GetCommandersOfFactionAndAlliesInZone(targetZone, ownerFaction); if (cmdersInZone.Count > 0) { TroopList totalArmy = GameController.GetCombinedTroopsInZoneFromFactionAndAllies(targetZone, ownerFaction); AddTooltipTitleEntry("Commanders: " + cmdersInZone.Count.ToString(), ownerFaction.color, 60); AddTooltipTitleEntry("Combined Army: " + totalArmy.TotalTroopAmount, Color.white, 50); foreach (TroopNumberPair tnp in totalArmy) { AddTooltipTroopEntry(GameController.GetTroopTypeByID(tnp.troopTypeID).name, tnp.troopAmount.ToString()); } } } else { backgroundImg.color = defaultColor; AddTooltipTitleEntry(targetZone.name, Color.white, 70); AddTooltipTitleEntry("(" + Rules.NO_FACTION_NAME + ")", Color.white); } AddTooltipInfoEntry(targetZone.multRecruitmentPoints.ToString("0%"), targetZone.multTrainingPoints.ToString("0%")); MercCaravan localCaravan = GameController.GetMercCaravanInZone(targetZone.ID); if (localCaravan != null) { AddTooltipInfoEntry("Merc Caravan Troop", GameController.GetTroopTypeByID(localCaravan.containedTroopType).name); } ContextualTooltipUpdate(refreshCanvasesBeforeGetSize); }
/// <summary> /// place a merc caravan in the world using its saved location /// </summary> /// <param name="targetZone"></param> public static MercCaravan3d PlaceSavedMercCaravan(MercCaravan MCdata) { Zone targetZone = GameController.GetZoneByID(MCdata.zoneIAmIn); GameObject mc3d = Instantiate(instance.mercCaravan3dPrefab, targetZone.CoordsForWorld, Quaternion.identity); mc3d.transform.parent = instance.mercCaravansContainer; MercCaravan3d MC3dScript = mc3d.GetComponent <MercCaravan3d>(); MC3dScript.data = MCdata; MC3dScript.RefreshDataDisplay(); instance.spawnedMCs.Add(MC3dScript); return(MC3dScript); }
/// <summary> /// visually updates things that rely on the zone's position, like merc caravans and links /// </summary> public void RefreshPositionRelatedStuff() { Zone thisZone = data as Zone; MercCaravan localCaravan = GameController.GetMercCaravanInZone(thisZone.ID); if (localCaravan != null) { localCaravan.MeIn3d.InstantlyUpdatePosition(); } foreach (int zoneID in thisZone.linkedZones) { Zone linkedZone = GameController.GetZoneByID(zoneID); World.GetLinkLineBetween(data, linkedZone).UpdatePositions(); } }
/// <summary> /// true if at least 1 troop was successfully recruited /// </summary> /// <returns></returns> public override bool RecruitTroops() { Faction ownerFac = GameController.GetFactionByID(ownerFaction); if (troopsContained.TotalTroopAmount < MaxTroopsInGarrison && multRecruitmentPoints > 0) { //recruitment! TroopType recruitableTroopType = null; MercCaravan localCaravan = GameController.GetMercCaravanInZone(ID); if (localCaravan != null) { recruitableTroopType = GameController.GetTroopTypeByID(localCaravan.containedTroopType); } else if (ownerFac.troopLine.Count == 0) { return(false); //maybe this is some kind of special faction that only relies on mercs? } else { recruitableTroopType = GameController.GetTroopTypeByID(ownerFac.troopLine[0]); } int pointsForRecruitment = Mathf.RoundToInt(pointsToSpend * multRecruitmentPoints); int recruitableTroopsAmount = 0; recruitableTroopsAmount = Mathf.Min(pointsForRecruitment / recruitableTroopType.pointCost, MaxTroopsInGarrison - troopsContained.TotalTroopAmount); troopsContained.AddTroop(recruitableTroopType.ID, recruitableTroopsAmount); pointsToSpend -= Mathf.RoundToInt(recruitableTroopsAmount * recruitableTroopType.pointCost / multRecruitmentPoints); WorldFXManager.instance.EmitParticle(WorldFXManager.instance.recruitParticle, MyZoneSpot.transform.position, GameController.GetFactionByID(ownerFaction).color); troopsContained.Sort(TroopNumberPair.CompareTroopNumberPairsByAutocalcPower); return(true); } return(false); }
/// <summary> /// returns either our faction's base troop type /// or the local merc caravan's type... /// or null, if there is no caravan and our faction has no troop types at all /// </summary> /// <returns></returns> public TroopType GetTroopTypeRecruitedWhereIAm(Faction ownerFac = null) { if (ownerFac == null) { ownerFac = GameController.GetFactionByID(ownerFaction); } TroopType recruitableTroopType = null; MercCaravan localCaravan = GameController.GetMercCaravanInZone(zoneIAmIn); if (localCaravan != null) { recruitableTroopType = GameController.GetTroopTypeByID(localCaravan.containedTroopType); } else if (ownerFac.troopLine.Count > 0) { recruitableTroopType = GameController.GetTroopTypeByID(ownerFac.troopLine[0]); //maybe this is some kind of special faction that only relies on mercs? } return(recruitableTroopType); }
/// <summary> /// places a new merc caravan in the target zone. There shouldn't be two caravans in the same zone! /// </summary> /// <param name="targetZone"></param> public static MercCaravan CreateNewMercCaravanAtZone(Zone targetZone) { MercCaravan newCaravan = new MercCaravan(targetZone.ID); return(PlaceSavedMercCaravan(newCaravan).data); }
public void EditMercCaravan(MercCaravan targetMC, bool isNewEntry) { editMercCaravanPanel.Open(targetMC, isNewEntry); }