Beispiel #1
0
    public static MercCaravan3d GetCaravan3dForMC(MercCaravan theMC)
    {
        foreach (MercCaravan3d MC3d in instance.spawnedMCs)
        {
            if (MC3d.data.ID == theMC.ID)
            {
                return(MC3d);
            }
        }

        return(null);
    }
Beispiel #2
0
    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);
    }
Beispiel #3
0
    /// <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);
    }
Beispiel #4
0
    /// <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();
        }
    }
Beispiel #5
0
    /// <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);
    }
Beispiel #6
0
    /// <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);
    }
Beispiel #7
0
    /// <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);
    }
Beispiel #8
0
 public void EditMercCaravan(MercCaravan targetMC, bool isNewEntry)
 {
     editMercCaravanPanel.Open(targetMC, isNewEntry);
 }