コード例 #1
0
 /// <summary>
 /// 显示
 /// </summary>
 public override void showDialog()
 {
     m_gridSelectedRowsChangedEvent = new FCEvent(gridSelectedRowsChanged);
     m_tvTypes.addEvent(m_gridSelectedRowsChangedEvent, FCEventID.GRIDSELECTEDROWSCHANGED);
     base.showDialog();
 }
コード例 #2
0
        //Drawing
        public override void DoWindowContents(Rect inRect)
        {
            FactionFC faction = Find.World.GetComponent <FactionFC>();

            faction.roadBuilder.displayPaths();

            if (Find.WorldSelector.selectedTile != -1 && Find.WorldSelector.selectedTile != currentTileSelected)
            {
                currentTileSelected = Find.WorldSelector.selectedTile;
                //Log.Message("Current: " + currentTileSelected + ", Selected: " + Find.WorldSelector.selectedTile);
                currentBiomeSelected = DefDatabase <BiomeResourceDef> .GetNamed(Find.WorldGrid.tiles[currentTileSelected].biome.ToString(), false);

                //default biome
                if (currentBiomeSelected == default(BiomeResourceDef))
                {
                    //Log Modded Biome
                    currentBiomeSelected = BiomeResourceDefOf.defaultBiome;
                }
                currentHillinessSelected = DefDatabase <BiomeResourceDef> .GetNamed(Find.WorldGrid.tiles[currentTileSelected].hilliness.ToString());

                if (currentBiomeSelected.canSettle == true && currentHillinessSelected.canSettle == true && currentTileSelected != 1)
                {
                    timeToTravel = FactionColonies.ReturnTicksToArrive(Find.World.GetComponent <FactionFC>().capitalLocation, currentTileSelected);
                }
                else
                {
                    timeToTravel = 0;
                }
            }


            //grab before anchor/font
            GameFont   fontBefore   = Text.Font;
            TextAnchor anchorBefore = Text.Anchor;


            int silverToCreateSettlement = (int)(traitUtilsFC.cycleTraits(new double(), "createSettlementMultiplier", Find.World.GetComponent <FactionFC>().traits, "multiply") * (FactionColonies.silverToCreateSettlement + (500 * (Find.World.GetComponent <FactionFC>().settlements.Count() + Find.World.GetComponent <FactionFC>().settlementCaravansList.Count())) + (traitUtilsFC.cycleTraits(new double(), "createSettlementBaseCost", Find.World.GetComponent <FactionFC>().traits, "add"))));



            //Draw Label
            Text.Font   = GameFont.Medium;
            Text.Anchor = TextAnchor.MiddleCenter;
            Widgets.Label(new Rect(0, 0, 268, 40), "SettleANewColony".Translate());

            //hori line
            Widgets.DrawLineHorizontal(0, 40, 300);


            //Upper menu
            Widgets.DrawMenuSection(new Rect(5, 45, 258, 220));

            DrawLabelBox(10, 50, 100, 100, "TravelTime".Translate(), GenDate.ToStringTicksToDays(timeToTravel));
            DrawLabelBox(153, 50, 100, 100, "InitialCost".Translate(), silverToCreateSettlement + " " + "Silver".Translate());


            //Lower Menu label
            Text.Font   = GameFont.Medium;
            Text.Anchor = TextAnchor.MiddleCenter;
            Widgets.Label(new Rect(0, 270, 268, 40), "BaseProductionStats".Translate());


            //Lower menu
            Widgets.DrawMenuSection(new Rect(5, 310, 258, 220));


            //Draw production
            Text.Font   = GameFont.Small;
            Text.Anchor = TextAnchor.MiddleCenter;

            //Production headers
            Widgets.Label(new Rect(40, 310, 60, 25), "Base".Translate());
            Widgets.Label(new Rect(110, 310, 60, 25), "Modifier".Translate());
            Widgets.Label(new Rect(180, 310, 60, 25), "Final".Translate());

            if (currentTileSelected != -1)
            {
                for (int i = 0; i < Find.World.GetComponent <FactionFC>().returnNumberResource(); i++)
                {
                    int height = 15;
                    if (Widgets.ButtonImage(new Rect(20, 335 + i * (5 + height), height, height), faction.returnResourceByInt(i).getIcon()))
                    {
                        Find.WindowStack.Add(new descWindowFC("SettlementProductionOf".Translate() + ": " + faction.returnResourceByInt(i).label, char.ToUpper(faction.returnResourceByInt(i).label[0]) + faction.returnResourceByInt(i).label.Substring(1)));
                    }
                    Widgets.Label(new Rect(40, 335 + i * (5 + height), 60, height + 2), (currentBiomeSelected.BaseProductionAdditive[i] + currentHillinessSelected.BaseProductionAdditive[i]).ToString());
                    Widgets.Label(new Rect(110, 335 + i * (5 + height), 60, height + 2), (currentBiomeSelected.BaseProductionMultiplicative[i] * currentHillinessSelected.BaseProductionMultiplicative[i]).ToString());
                    Widgets.Label(new Rect(180, 335 + i * (5 + height), 60, height + 2), ((currentBiomeSelected.BaseProductionAdditive[i] + currentHillinessSelected.BaseProductionAdditive[i]) * (currentBiomeSelected.BaseProductionMultiplicative[i] * currentHillinessSelected.BaseProductionMultiplicative[i])).ToString());
                }
            }



            //Settle button
            Text.Font   = GameFont.Small;
            Text.Anchor = TextAnchor.MiddleCenter;
            int buttonLength = 130;

            if (Widgets.ButtonText(new Rect((InitialSize.x - 32 - buttonLength) / 2f, 535, buttonLength, 32), "Settle".Translate() + ": (" + silverToCreateSettlement + ")")) //add inital cost
            {                                                                                                                                                                 //if click button to settle
                if (PaymentUtil.getSilver() >= silverToCreateSettlement)                                                                                                      //if have enough monies to make new settlement
                {
                    StringBuilder reason = new StringBuilder();
                    if (!TileFinder.IsValidTileForNewSettlement(currentTileSelected, reason) || currentTileSelected == -1 || Find.World.GetComponent <FactionFC>().checkSettlementCaravansList(currentTileSelected.ToString()))
                    {
                        //Alert Error to User
                        Messages.Message(reason.ToString() ?? "CaravanOnWay".Translate() + "!", MessageTypeDefOf.NegativeEvent);
                    }
                    else
                    {   //Else if valid tile
                        PaymentUtil.paySilver(silverToCreateSettlement);
                        //if PROCESS MONEY HERE

                        //create settle event
                        FCEvent tmp = FCEventMaker.MakeEvent(FCEventDefOf.settleNewColony);
                        tmp.location        = currentTileSelected;
                        tmp.planetName      = Find.World.info.name;
                        tmp.timeTillTrigger = Find.TickManager.TicksGame + timeToTravel;
                        tmp.source          = Find.World.GetComponent <FactionFC>().capitalLocation;
                        Find.World.GetComponent <FactionFC>().addEvent(tmp);

                        Find.World.GetComponent <FactionFC>().settlementCaravansList.Add(tmp.location.ToString());
                        Messages.Message("CaravanSentToLocation".Translate() + " " + GenDate.ToStringTicksToDays((tmp.timeTillTrigger - Find.TickManager.TicksGame)) + "!", MessageTypeDefOf.PositiveEvent);
                        // when event activate FactionColonies.createPlayerColonySettlement(currentTileSelected);
                    }
                }
                else
                {  //if don't have enough monies to make settlement
                    Messages.Message("NotEnoughSilverToSettle".Translate() + "!", MessageTypeDefOf.NeutralEvent);
                }
            }



            //reset anchor/font
            Text.Font   = fontBefore;
            Text.Anchor = anchorBefore;
        }
コード例 #3
0
ファイル: DeliveryEvent.cs プロジェクト: BigBadE/Empire-Mod
 public static void Action(FCEvent evt)
 {
     Action(evt, Find.World.GetComponent <FactionFC>().settlements.FirstOrFallback(settlement => settlement.mapLocation == evt.source)?.traits.Contains(FCTraitEffectDefOf.shuttlePort) ?? false);
 }
コード例 #4
0
 /// <summary>
 /// 创建分割布局控件
 /// </summary>
 public FCSplitLayoutDiv()
 {
     m_splitterDraggingEvent = new FCEvent(SplitterDragging);
 }
コード例 #5
0
ファイル: FCEvent.cs プロジェクト: Shane32/Empire
        public static FCEvent MakeRandomEvent(FCEventDef def, List <SettlementFC> SettlementTraitLocations)
        {
            FCEvent tempEvent = new FCEvent(true);

            tempEvent.def                      = def;
            tempEvent.timeTillTrigger          = def.timeTillTrigger + Find.TickManager.TicksGame;
            tempEvent.traits                   = def.traits;
            tempEvent.settlementTraitLocations = new List <SettlementFC>();



            //if affects specific settlement(s) then get settlements.
            if (tempEvent.def.rangeSettlementsAffected.max != 0)
            {
                int numSettlements = tempEvent.def.rangeSettlementsAffected.RandomInRange;

                //Log.Message("Pre- " + numSettlements);
                //if random number of settlements more than total settlements, reset number settlements.
                if (numSettlements > Find.World.GetComponent <FactionFC>().settlements.Count())
                {
                    numSettlements = Find.World.GetComponent <FactionFC>().settlements.Count();
                    //Log.Message("Post- " + numSettlements);
                }

                //List of map locations
                List <SettlementFC> settlements = new List <SettlementFC>();
                //temporary list of settlemnts.
                List <SettlementFC> tmp = new List <SettlementFC>();

                if (SettlementTraitLocations == null || SettlementTraitLocations.Count == 0)
                {
                    foreach (SettlementFC settlement in Find.World.GetComponent <FactionFC>().settlements.InRandomOrder())
                    {
                        if (tempEvent.def.requiredResource != "")
                        {     //if there is a required resource
                            if (settlement.returnResource(tempEvent.def.requiredResource).assignedWorkers > 0)
                            { //if have someone working on that resource
                                tmp.Add(settlement);
                            }
                            else
                            {
                                //don't add
                            }
                        }
                        else
                        {
                            tmp.Add(settlement);
                        }
                    }

                    while (tmp.Count() > 0)
                    {
                        SettlementFC cSettlement = tmp.RandomElement();
                        if (settlements.Count() < numSettlements)
                        {
                            settlements.Add(cSettlement);
                        }
                        tmp.Remove(cSettlement);
                    }

                    tempEvent.settlementTraitLocations.AddRange(settlements);
                }
                else
                {
                    tempEvent.settlementTraitLocations.AddRange(SettlementTraitLocations);
                    //Log.Message(tempEvent.settlementTraitLocations.Count().ToString());
                }
                //foreach(int loc in tempEvent.settlementTraitLocations)
                //{
                //Log.Message("Location: " + loc);
                //}
            }
            //if event has options
            //open event option window
            //Log.Message("option count: " + tempEvent.def.options.Count().ToString());
            if (tempEvent.def.options.Count > 0 && tempEvent.def.activateAtStart == true)
            {
                Find.WindowStack.Add(new FCOptionWindow(tempEvent.def, tempEvent));
                return(null);
            }
            else
            {
                return(tempEvent);
            }

            //
        }
コード例 #6
0
        public void DrawButtons(int x, int y, int length, int size, int set)
        {
            Text.Anchor = TextAnchor.MiddleCenter;
            Text.Font   = GameFont.Tiny;

            if (set == 1)
            {
                for (int i = 0; i < buttons.Count(); i++)
                {
                    if (Widgets.ButtonText(new Rect(x, y + ((size + 10) * i), length, size), buttons[i]))
                    {
                        //If click a button button
                        if (buttons[i] == "UpgradeTown".Translate())
                        {
                            //if click upgrade town button
                            Find.WindowStack.Add(new SettlementUpgradeWindowFc(settlement));
                            //Log.Message(buttons[i]);
                        }

                        if (buttons[i] == "AreYouSureRemove".Translate())
                        {
                            //if click to delete colony
                            Find.WindowStack.TryRemove(this);
                            FactionColonies.removePlayerSettlement(settlement);
                        }

                        if (buttons[i] == "DeleteSettlement".Translate())
                        {
                            //if click town log button
                            //Log.Message(buttons[i]);
                            buttons[i] = "AreYouSureRemove".Translate();
                        }

                        if (buttons[i] == "FCSpecialActions".Translate())
                        {
                            List <FloatMenuOption> list = new List <FloatMenuOption>
                            {
                                //Add to all
                                new FloatMenuOption("GoToLocation".Translate(), delegate
                                {
                                    Find.WindowStack.TryRemove(this);
                                    settlement.goTo();
                                })
                            };


                            if (factionfc.hasPolicy(FCPolicyDefOf.authoritarian))
                            {
                                list.Add(new FloatMenuOption("FCBuyLoyalty".Translate(),
                                                             delegate { Find.WindowStack.Add(new FCWindow_Pay_Silver(settlement)); }));
                            }

                            if (factionfc.hasPolicy(FCPolicyDefOf.egalitarian))
                            {
                                list.Add(new FloatMenuOption("FCGiveTaxBreak".Translate(), delegate
                                {
                                    if (settlement.trait_Egalitarian_TaxBreak_Enabled == false)
                                    {
                                        Find.WindowStack.Add(new FCWindow_Confirm_TaxBreak(settlement));
                                    }
                                    else
                                    {
                                        Messages.Message(
                                            "FCAlreadyGivingTaxBreak".Translate(Math.Round(
                                                                                    (settlement.trait_Egalitarian_TaxBreak_Tick +
                                                                                     GenDate.TicksPerDay * 10 -
                                                                                     Find.TickManager.TicksGame) / (double)GenDate.TicksPerDay, 1)),
                                            MessageTypeDefOf.RejectInput);
                                    }
                                }));
                            }

                            if (list.Count() == 0)
                            {
                                list.Add(new FloatMenuOption("No special actions to take", delegate { }));
                            }
                            Find.WindowStack.Add(new FloatMenu(list));
                        }

                        if (buttons[i] == "PrisonersMenu".Translate())
                        {
                            Find.WindowStack.Add(new FCPrisonerMenu(settlement));
                        }

                        if (buttons[i] == "Military".Translate())
                        {
                            List <FloatMenuOption> list = new List <FloatMenuOption>
                            {
                                new FloatMenuOption(
                                    "ToggleAutoDefend".Translate(settlement.autoDefend.ToString()),
                                    delegate
                                {
                                    settlement.autoDefend = !settlement.autoDefend;
                                    Messages.Message("autoDefendWarning".Translate(), MessageTypeDefOf.CautionInput);
                                })
                            };

                            if (settlement.isUnderAttack)
                            {
                                FCEvent evt = MilitaryUtilFC.returnMilitaryEventByLocation(settlement.mapLocation);

                                list.Add(new FloatMenuOption(
                                             "SettlementDefendingInformation".Translate(
                                                 evt.militaryForceDefending.homeSettlement.name,
                                                 evt.militaryForceDefending.militaryLevel), null, MenuOptionPriority.High));
                                list.Add(new FloatMenuOption("ChangeDefendingForce".Translate(), delegate
                                {
                                    List <FloatMenuOption> settlementList = new List <FloatMenuOption>();
                                    SettlementFC homeSettlement           = settlement;

                                    settlementList.Add(new FloatMenuOption(
                                                           "ResetToHomeSettlement".Translate(homeSettlement.settlementMilitaryLevel),
                                                           delegate { MilitaryUtilFC.changeDefendingMilitaryForce(evt, homeSettlement); },
                                                           MenuOptionPriority.High));

                                    foreach (SettlementFC settlement in Find.World.GetComponent <FactionFC>().settlements
                                             )
                                    {
                                        if (settlement.isMilitaryValid() && settlement != homeSettlement)
                                        {
                                            //if military is valid to use.

                                            settlementList.Add(new FloatMenuOption(
                                                                   settlement.name + " " + "ShortMilitary".Translate() + " " +
                                                                   settlement.settlementMilitaryLevel + " - " + "FCAvailable".Translate() +
                                                                   ": " + (!settlement.isMilitaryBusySilent()).ToString(), delegate
                                            {
                                                if (settlement.isMilitaryBusy())
                                                {
                                                    //military is busy
                                                }
                                                else
                                                {
                                                    MilitaryUtilFC.changeDefendingMilitaryForce(evt, settlement);
                                                }
                                            }
                                                                   ));
                                        }
                                    }

                                    if (settlementList.Count == 0)
                                    {
                                        settlementList.Add(new FloatMenuOption("NoValidMilitaries".Translate(), null));
                                    }

                                    Find.WindowStack.Add(new FloatMenuSearchable(settlementList)
                                    {
                                        vanishIfMouseDistant = true
                                    });


                                    //set to raid settlement here
                                }));

                                Find.WindowStack.Add(new FloatMenu(list));
                            }
                            else
                            {
                                list.Add(new FloatMenuOption("SettlementNotBeingAttacked".Translate(), null));
                                Find.WindowStack.Add(new FloatMenu(list));
                            }
                        }
                    }
                }
            }

            //set two buttons
        }
コード例 #7
0
        public override void DoWindowContents(Rect inRect)
        {
            //grab before anchor/font
            GameFont   fontBefore   = Text.Font;
            TextAnchor anchorBefore = Text.Anchor;



            //Settlement Tax Collection Header
            Text.Anchor = TextAnchor.MiddleLeft;
            Text.Font   = GameFont.Medium;
            Widgets.Label(new Rect(2, 0, 300, 60), headerString);



            //settlement buttons

            Text.Anchor = TextAnchor.MiddleCenter;
            Text.Font   = GameFont.Tiny;

            //0 tithe total string
            //1 source - -1
            //2 due/delivery date
            //3 Silver (- || +)
            //4 tithe

            List <String> headerList = new List <String>()
            {
                "Name".Translate(), "Cost".Translate(), "Effect".Translate(), "Enact".Translate()
            };

            for (int i = 0; i < 3; i++)              //-2 to exclude location and ID
            {
                if (i == 0)
                {
                    Widgets.Label(new Rect(xoffset + 2 + i * xspacing, yoffset - yspacing, xspacing + headerSpacing, yspacing), headerList[i]);
                }
                else
                {
                    Widgets.Label(new Rect(xoffset + headerSpacing + 2 + i * xspacing, yoffset - yspacing, xspacing, yspacing), headerList[i]);
                }
            }

            for (int i = 0; i < list.Count(); i++)             //browse through policy list
            {
                if (i * yspacing + scroll >= 0 && i * yspacing + scroll <= height)
                {
                    if (i % 2 == 0)
                    {
                        Widgets.DrawHighlight(new Rect(xoffset, yoffset + i * yspacing + scroll, length, yspacing));
                    }
                    for (int k = 0; k < 4; k++)                                                                                                                      //Browse through thing information
                    {
                        if (k == 0)                                                                                                                                  //name of policy
                        {
                            Widgets.Label(new Rect(xoffset + 2 + k * xspacing, yoffset + i * yspacing + scroll, xspacing + headerSpacing, yspacing), list[i].label); //timedue is date made
                        }
                        else
                        if (k == 1)                         //Cost of policy
                        {
                            Widgets.Label(new Rect(xoffset + headerSpacing + 2 + k * xspacing, yoffset + i * yspacing + scroll, xspacing, yspacing), list[i].cost.ToString());
                        }
                        else
                        if (k == 2)                         // Desc/Effect of policy
                        {
                            if (Widgets.ButtonText(new Rect(xoffset + headerSpacing + 2 + k * xspacing, yoffset + i * yspacing + scroll, xspacing, yspacing), "Info".Translate()))
                            {
                                Find.WindowStack.Add(new descWindowFC(list[i].desc, list[i].label));
                            }
                        }
                        else
                        if (k == 3)                         //Enact button
                        {
                            if (list[i].defName == def.defName && list[i].defName != "Empty")
                            {
                                Widgets.Label(new Rect(xoffset + headerSpacing + 2 + k * xspacing, yoffset + i * yspacing + scroll, xspacing, yspacing), "Enacted".Translate());
                                if (Widgets.ButtonText(new Rect(xoffset + headerSpacing + 2 + (k + 1) * xspacing, yoffset + i * yspacing + scroll, xspacing, yspacing), "Repeal".Translate()))
                                {
                                    Find.World.GetComponent <FactionFC>().repealPolicy(policySlot);
                                    Find.WindowStack.TryRemove(this);
                                }
                            }
                            else
                            {
                                if (Widgets.ButtonText(new Rect(xoffset + headerSpacing + 2 + k * xspacing, yoffset + i * yspacing + scroll, xspacing, yspacing), "Enact".Translate()))
                                {
                                    if (Find.World.GetComponent <FactionFC>().validEnactPolicy(list[i], i))
                                    {
                                        FCEvent tmp = new FCEvent(true);
                                        tmp.def             = FCEventDefOf.enactFactionPolicy;
                                        tmp.policy          = list[i];
                                        tmp.policySlot      = policySlot;
                                        tmp.timeTillTrigger = Find.TickManager.TicksGame + list[i].enactDuration;
                                        //Log.Message(list[i].enactDuration.ToString());
                                        //Log.Message(tmp.timeTillTrigger.ToString());
                                        Find.World.GetComponent <FactionFC>().addEvent(tmp);
                                        PaymentUtil.paySilver(Convert.ToInt32(list[i].cost));
                                        Find.World.GetComponent <FactionFC>().repealPolicy(policySlot);
                                        Find.World.GetComponent <FactionFC>().policies[policySlot] = PolicyFCDefOf.Enacting;
                                        Messages.Message(list[i].label + " " + "WillBeEnactedIn".Translate() + " " + GenDate.ToStringTicksToDays(tmp.timeTillTrigger - Find.TickManager.TicksGame), MessageTypeDefOf.PositiveEvent);
                                        Find.WindowStack.TryRemove(this);
                                    }
                                }
                            }
                        }
                        else                         //Catch all
                        {
                            Widgets.Label(new Rect(xoffset + headerSpacing + 2 + k * xspacing, yoffset + i * yspacing + scroll, xspacing, yspacing), "REPORT THIS listpolicyfc");
                        }
                    }
                }
            }

            Widgets.DrawBox(new Rect(xoffset, yoffset - yspacing, length, height + yspacing * 2));

            //reset anchor/font
            Text.Font   = fontBefore;
            Text.Anchor = anchorBefore;

            if (Event.current.type == EventType.ScrollWheel)
            {
                scrollWindow(Event.current.delta.y);
            }
        }
コード例 #8
0
 public void AddListener(FCEventListener listener, FCEvent fcEvent)
 {
     observable.AddListener(listener, fcEvent);
 }
コード例 #9
0
 public static void deliverThings(FCEvent evt, Letter let = null, Message msg = null)
 {
     DeliveryEvent.Action(evt, let, msg);
 }
コード例 #10
0
 public void AddLandingListener(FCEventListener listener, FCEvent fcEvent)
 {
     demoStack.AddLandingListener(listener, fcEvent);
 }
コード例 #11
0
ファイル: Flipper.cs プロジェクト: magnusjerre/FlippaChippa
 public void AddLandingListener(FCEventListener listener, FCEvent fcEvent)
 {
     landingObservable.AddListener(listener, fcEvent);
 }
コード例 #12
0
ファイル: Stack.cs プロジェクト: magnusjerre/FlippaChippa
 public void AddLandingListener(FCEventListener listener, FCEvent fcEvent)
 {
     flipper.AddLandingListener(listener, fcEvent);
 }
コード例 #13
0
ファイル: DeliveryEvent.cs プロジェクト: BigBadE/Empire-Mod
 public static void Action(FCEvent evt, Letter let = null, Message msg = null, bool CanUseShuttle = false)
 {
     evt.let = let;
     evt.msg = msg;
     Action(evt, CanUseShuttle || (Find.World.GetComponent <FactionFC>().settlements.FirstOrFallback(settlement => settlement.mapLocation == evt.source)?.traits.Contains(FCTraitEffectDefOf.shuttlePort) ?? false));
 }
コード例 #14
0
        public override void DoWindowContents(Rect inRect)
        {
            //grab before anchor/font
            GameFont   fontBefore   = Text.Font;
            TextAnchor anchorBefore = Text.Anchor;



            //Settlement Tax Collection Header
            Text.Anchor = TextAnchor.MiddleLeft;
            Text.Font   = GameFont.Medium;
            Widgets.Label(new Rect(2, 0, 300, 60), header);



            //settlement buttons

            Text.Anchor = TextAnchor.UpperLeft;
            Text.Font   = GameFont.Tiny;

            //0 tithe total string
            //1 source - -1
            //2 due/delivery date
            //3 Silver (- || +)
            //4 tithe

            if (settlement.settlementLevel < LoadedModManager.GetMod <FactionColoniesMod>().GetSettings <FactionColonies>().settlementMaxLevel)           //if settlement is not max level
            {
                if (Widgets.ButtonText(new Rect(xoffset + ((335 - 150) / 2), height + 10, 150, 40), "UpgradeSettlement".Translate() + ": " + settlementUpgradeCost))
                {                                                                                                                                       //if upgrade button clicked
                    //if max level
                    if (settlement.settlementLevel < LoadedModManager.GetMod <FactionColoniesMod>().GetSettings <FactionColonies>().settlementMaxLevel) //if below max level
                    {
                        if (PaymentUtil.getSilver() > settlementUpgradeCost)                                                                            //if have enough monies to pay
                        {
                            foreach (FCEvent evt in Find.World.GetComponent <FactionFC>().events)
                            {
                                if (evt.def == FCEventDefOf.upgradeSettlement && evt.location == settlement.mapLocation)
                                {                                 //if already existing event
                                    Messages.Message("AlreadyUpgradeSettlement".Translate(), MessageTypeDefOf.RejectInput);
                                    return;
                                }
                            }
                            PaymentUtil.paySilver(settlementUpgradeCost);
                            //settlement.upgradeSettlement();
                            FCEvent tmp = new FCEvent(true);
                            tmp.def             = FCEventDefOf.upgradeSettlement;
                            tmp.location        = settlement.mapLocation;
                            tmp.timeTillTrigger = Find.TickManager.TicksGame + (settlement.settlementLevel + 1) * 60000 * 2;
                            //Log.Message(list[i].enactDuration.ToString());
                            //Log.Message(tmp.timeTillTrigger.ToString());
                            Find.World.GetComponent <FactionFC>().addEvent(tmp);
                            Find.WindowStack.TryRemove(this);
                            Find.WindowStack.WindowOfType <settlementWindowFC>().WindowUpdateFC();
                            Messages.Message("StartUpgradeSettlement".Translate(), MessageTypeDefOf.NeutralEvent);
                        }
                        else
                        {                         //if don't have enough monies
                            Messages.Message("NotEnoughSilverUpgrade".Translate(), MessageTypeDefOf.RejectInput);
                        }
                    }
                    else
                    {
                        Messages.Message(settlement.name + " " + "AlreadyMaxLevel".Translate() + "!", MessageTypeDefOf.RejectInput);
                    }
                }
            }
            else               //if settlement is max level
            {
                desc = "CannotBeUpgradedPastMax".Translate() + ": " + LoadedModManager.GetMod <FactionColoniesMod>().GetSettings <FactionColonies>().settlementMaxLevel;
            }

            Widgets.Label(new Rect(xoffset + 2, yoffset - yspacing + 2, length - 4, height - 4 + yspacing * 2), desc);
            Widgets.DrawBox(new Rect(xoffset, yoffset - yspacing, length, height - yspacing * 2));



            //reset anchor/font
            Text.Font   = fontBefore;
            Text.Anchor = anchorBefore;
        }
コード例 #15
0
 public void RemoveListener(FCEventListener listener, FCEvent fcEvent)
 {
     map [fcEvent].Remove(listener);
 }
コード例 #16
0
 /// <summary>
 /// 创建日期控件
 /// </summary>
 public FCDateTimePicker()
 {
     m_dropDownButtonTouchDownEvent = new FCTouchEvent(DropDownButtonTouchDown);
     m_selectedTimeChangedEvent     = new FCEvent(selectedTimeChanged);
 }
コード例 #17
0
        /// <summary>
        /// 注册事件
        /// </summary>
        /// <param name="control">控件</param>
        /// <param name="eventName">事件名称</param>
        /// <param name="function">方法</param>
        public virtual void registerEvent(FCView control, String eventName, String function)
        {
            int eventID = getEventID(eventName);

            if (eventID != -1)
            {
                FCEventInfo eventInfo = null;
                if (m_events.containsKey(control))
                {
                    eventInfo = m_events.get(control);
                }
                else
                {
                    eventInfo = new FCEventInfo();
                    m_events.put(control, eventInfo);
                }
                eventInfo.addEvent(eventID, function);
                switch (eventID)
                {
                case FCEventID.ADD: {
                    FCEvent cEvent = new FCEvent(callAdd);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.BACKCOLORCHANGED: {
                    FCEvent cEvent = new FCEvent(callBackColorChanged);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.BACKIMAGECHANGED: {
                    FCEvent cEvent = new FCEvent(CallBackImageChanged);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.CHAR: {
                    FCKeyEvent cEvent = new FCKeyEvent(callChar);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.CHECKEDCHANGED: {
                    FCEvent cEvent = new FCEvent(callCheckedChanged);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.CLICK: {
                    FCTouchEvent cEvent = new FCTouchEvent(callClick);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.COPY: {
                    FCEvent cEvent = new FCEvent(callCopy);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.CUT: {
                    FCEvent cEvent = new FCEvent(callCut);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.DOCKCHANGED: {
                    FCEvent cEvent = new FCEvent(callDockChanged);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.DOUBLECLICK: {
                    FCEvent cEvent = new FCEvent(callDoubleClick);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.DRAGBEGIN: {
                    FCEvent cEvent = new FCEvent(callDragBegin);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.DRAGEND: {
                    FCEvent cEvent = new FCEvent(CallDragEnd);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.DRAGGING: {
                    FCEvent cEvent = new FCEvent(callDragging);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.ENABLECHANGED: {
                    FCEvent cEvent = new FCEvent(callEnableChanged);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.FONTCHANGED: {
                    FCEvent cEvent = new FCEvent(callFontChanged);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.TEXTCOLORCHANGED: {
                    FCEvent cEvent = new FCEvent(callTextColorChanged);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.GOTFOCUS: {
                    FCEvent cEvent = new FCEvent(callGotFocus);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.GRIDCELLCLICK: {
                    FCEvent cEvent = new FCEvent(callFCGridCellClick);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.GRIDCELLEDITBEGIN: {
                    FCEvent cEvent = new FCEvent(callFCGridCellEditBegin);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.GRIDCELLEDITEND: {
                    FCEvent cEvent = new FCEvent(callFCGridCellEditEnd);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.GRIDCELLTOUCHDOWN: {
                    FCEvent cEvent = new FCEvent(callFCGridCellTouchDown);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.GRIDCELLTOUCHMOVE: {
                    FCEvent cEvent = new FCEvent(callFCGridCellTouchMove);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.GRIDCELLTOUCHUP: {
                    FCEvent cEvent = new FCEvent(callFCGridCellTouchUp);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.INVOKE: {
                    FCInvokeEvent cEvent = new FCInvokeEvent(callInvoke);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.KEYDOWN: {
                    FCKeyEvent cEvent = new FCKeyEvent(callKeyDown);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.KEYUP: {
                    FCKeyEvent cEvent = new FCKeyEvent(CallKeyUp);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.LOAD: {
                    FCEvent cEvent = new FCEvent(callLoad);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.LOCATIONCHANGED: {
                    FCEvent cEvent = new FCEvent(callLocationChanged);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.LOSTFOCUS: {
                    FCEvent cEvent = new FCEvent(callLostFocus);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.MARGINCHANGED: {
                    FCEvent cEvent = new FCEvent(callMarginChanged);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.MENUITEMCLICK: {
                    FCMenuItemTouchEvent cEvent = new FCMenuItemTouchEvent(callMenuItemClick);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.TOUCHDOWN: {
                    FCTouchEvent cEvent = new FCTouchEvent(callTouchDown);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.TOUCHENTER: {
                    FCTouchEvent cEvent = new FCTouchEvent(callTouchEnter);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.TOUCHLEAVE: {
                    FCTouchEvent cEvent = new FCTouchEvent(callTouchLeave);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.TOUCHMOVE: {
                    FCTouchEvent cEvent = new FCTouchEvent(callTouchMove);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.TOUCHUP: {
                    FCTouchEvent cEvent = new FCTouchEvent(callTouchUp);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.TOUCHWHEEL: {
                    FCTouchEvent cEvent = new FCTouchEvent(callTouchWheel);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.PADDINGCHANGED: {
                    FCPaintEvent cEvent = new FCPaintEvent(callPaddingChanged);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.PAINT: {
                    FCPaintEvent cEvent = new FCPaintEvent(callPaint);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.PAINTBORDER: {
                    FCPaintEvent cEvent = new FCPaintEvent(callPaintBorder);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.PARENTCHANGED: {
                    FCEvent cEvent = new FCEvent(callParentChanged);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.PASTE: {
                    FCEvent cEvent = new FCEvent(callPaste);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.REGIONCHANGED: {
                    FCEvent cEvent = new FCEvent(CallRegionChanged);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.REMOVE: {
                    FCEvent cEvent = new FCEvent(callRemove);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.SCROLLED: {
                    FCEvent cEvent = new FCEvent(callScrolled);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.SELECTEDTIMECHANGED: {
                    FCEvent cEvent = new FCEvent(callSelectedTimeChanged);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.SELECTEDINDEXCHANGED: {
                    FCEvent cEvent = new FCEvent(callSelectedIndexChanged);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.SELECTEDTABPAGECHANGED: {
                    FCEvent cEvent = new FCEvent(CallSelectedTabPageChanged);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.SIZECHANGED: {
                    FCEvent cEvent = new FCEvent(callSizeChanged);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.TABINDEXCHANGED: {
                    FCEvent cEvent = new FCEvent(callTabIndexChanged);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.TABSTOP: {
                    FCEvent cEvent = new FCEvent(CallTabStop);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.TEXTCHANGED: {
                    FCEvent cEvent = new FCEvent(callTextChanged);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.TIMER: {
                    FCTimerEvent cEvent = new FCTimerEvent(callTimer);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.VALUECHANGED: {
                    FCEvent cEvent = new FCEvent(callVisibleChanged);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.VISIBLECHANGED: {
                    FCEvent cEvent = new FCEvent(callVisibleChanged);
                    control.addEvent(cEvent, eventID);
                    break;
                }

                case FCEventID.WINDOWCLOSED: {
                    FCEvent cEvent = new FCEvent(callWindowClosed);
                    control.addEvent(cEvent, eventID);
                    break;
                }
                }
            }
        }
コード例 #18
0
 public void RemoveListener(FCEventListener listener, FCEvent fcEvent)
 {
     observable.RemoveListener(listener, fcEvent);
 }
コード例 #19
0
 public static militaryForce returnDefendingMilitaryForce(FCEvent evt)
 {
     return(evt.militaryForceDefending);
 }
コード例 #20
0
 /// <summary>
 /// 创建设计层
 /// </summary>
 public DesignerDiv()
 {
     BorderColor = FCColor.None;
     m_parentVisibleChangedEvent = new FCEvent(parentVisibleChanged);
     Layout = FCTabPageLayout.Bottom;
 }
コード例 #21
0
        public override void DoWindowContents(Rect inRect)
        {
            //grab before anchor/font
            GameFont   fontBefore   = Text.Font;
            TextAnchor anchorBefore = Text.Anchor;

            //Buildings
            for (int i = 0; i < buildingList.Count; i++)
            {
                BuildingFCDef building = buildingList[i];
                newBuildingWindow = new Rect(BaseBuildingWindow.x, BaseBuildingWindow.y + (i * (rowHeight)) + scroll, BaseBuildingWindow.width, BaseBuildingWindow.height);
                newBuildingIcon   = new Rect(BaseBuildingIcon.x, BaseBuildingIcon.y + (i * (rowHeight)) + scroll, BaseBuildingIcon.width, BaseBuildingIcon.height);
                newBuildingLabel  = new Rect(BaseBuildingLabel.x, BaseBuildingLabel.y + (i * (rowHeight)) + scroll, BaseBuildingLabel.width, BaseBuildingLabel.height);
                newBuildingDesc   = new Rect(BaseBuildingDesc.x, BaseBuildingDesc.y + (i * (rowHeight)) + scroll, BaseBuildingDesc.width, BaseBuildingDesc.height);

                if (Widgets.ButtonInvisible(newBuildingWindow))
                {
                    //If click on building
                    List <FloatMenuOption> list = new List <FloatMenuOption>();

                    if (building == buildingDef)
                    {
                        //if the same building
                        list.Add(new FloatMenuOption("Destroy".Translate(), delegate
                        {
                            settlement.deconstructBuilding(buildingSlot);
                            Find.WindowStack.TryRemove(this);
                            Find.WindowStack.WindowOfType <SettlementWindowFc>().windowUpdateFc();
                        }));
                    }
                    else
                    {
                        //if not the same building
                        list.Add(new FloatMenuOption("Build".Translate(), delegate
                        {
                            if (!settlement.validConstructBuilding(building, buildingSlot, settlement))
                            {
                                return;
                            }
                            FCEvent tmpEvt = new FCEvent(true)
                            {
                                def          = FCEventDefOf.constructBuilding,
                                source       = settlement.mapLocation,
                                planetName   = settlement.planetName,
                                building     = building,
                                buildingSlot = buildingSlot
                            };


                            int triggerTime = building.constructionDuration;
                            if (factionfc.hasPolicy(FCPolicyDefOf.isolationist))
                            {
                                triggerTime /= 2;
                            }

                            tmpEvt.timeTillTrigger = Find.TickManager.TicksGame + triggerTime;
                            Find.World.GetComponent <FactionFC>().addEvent(tmpEvt);

                            PaymentUtil.paySilver(Convert.ToInt32(building.cost));
                            settlement.deconstructBuilding(buildingSlot);
                            Messages.Message(building.label + " " + "WillBeConstructedIn".Translate() + " " + (tmpEvt.timeTillTrigger - Find.TickManager.TicksGame).ToTimeString(), MessageTypeDefOf.PositiveEvent);
                            settlement.buildings[buildingSlot] = BuildingFCDefOf.Construction;
                            Find.WindowStack.TryRemove(this);
                            Find.WindowStack.WindowOfType <SettlementWindowFc>().windowUpdateFc();
                        }));
                    }



                    FloatMenu menu = new FloatMenu(list);
                    Find.WindowStack.Add(menu);
                }


                Widgets.DrawMenuSection(newBuildingWindow);
                Widgets.DrawMenuSection(newBuildingIcon);
                Widgets.DrawLightHighlight(newBuildingIcon);
                Widgets.ButtonImage(newBuildingIcon, building.Icon);

                Text.Font = GameFont.Small;
                Widgets.ButtonTextSubtle(newBuildingLabel, "");
                Widgets.Label(newBuildingLabel, "  " + building.LabelCap + " - " + "Cost".Translate() + ": " + building.cost);

                Text.Font = GameFont.Tiny;
                Widgets.Label(newBuildingDesc, building.desc);
            }


            //Top Window
            Widgets.DrawMenuSection(TopWindow);
            Widgets.DrawHighlight(TopWindow);
            Widgets.DrawMenuSection(TopIcon);
            Widgets.DrawLightHighlight(TopIcon);

            Widgets.DrawBox(new Rect(0, 0, 400, 500));
            Widgets.ButtonImage(TopIcon, buildingDef.Icon);

            Widgets.ButtonTextSubtle(TopName, "");
            Text.Font   = GameFont.Medium;
            Text.Anchor = TextAnchor.UpperLeft;
            Widgets.Label(new Rect(TopName.x + 5, TopName.y, TopName.width, TopName.height), buildingDef.LabelCap);

            Widgets.DrawMenuSection(new Rect(TopDescription.x - 5, TopDescription.y - 5, TopDescription.width, TopDescription.height));
            Text.Font = GameFont.Small;
            Widgets.Label(TopDescription, buildingDef.desc);

            Widgets.DrawLineHorizontal(0, TopWindow.y + TopWindow.height, 400);

            //reset anchor/font
            Text.Font   = fontBefore;
            Text.Anchor = anchorBefore;

            if (Event.current.type == EventType.ScrollWheel)
            {
                scrollWindow(Event.current.delta.y);
            }
        }
コード例 #22
0
ファイル: FCEvent.cs プロジェクト: BigBadE/Empire-Mod
        public static void calculateSuccess(FCOptionDef option, FCEvent parentEvent)
        {
            float baseChance = option.baseChanceOfSuccess;
            int   roll       = Rand.Range(1, 100);
            //Log.Message(roll.ToString());

            FCEvent tempEvent = new FCEvent(true);


            if (roll <= baseChance)
            {
                //if success
                if (option.parentEvent.settlementsCarryOver)
                {
                    tempEvent = MakeRandomEvent(option.successEvent, parentEvent.settlementTraitLocations);
                }
                else
                {
                    tempEvent = MakeRandomEvent(option.successEvent, null);
                }
            }
            else
            {
                if (option.parentEvent.settlementsCarryOver)
                {
                    tempEvent = MakeRandomEvent(option.failEvent, parentEvent.settlementTraitLocations);
                }
                else
                {
                    tempEvent = MakeRandomEvent(option.failEvent, null);
                }
            }

            if (tempEvent.def != FCEventDefOf.Null)
            {
                Find.World.GetComponent <FactionFC>().addEvent(tempEvent);

                //letter

                string settlementString = "";
                foreach (SettlementFC loc in tempEvent.settlementTraitLocations)
                {
                    if (settlementString == "")
                    {
                        settlementString = settlementString + loc.name;
                    }
                    else
                    {
                        settlementString = settlementString + ", " + loc.name;
                    }
                }

                if (settlementString != "")
                {
                    Find.LetterStack.ReceiveLetter(tempEvent.def.label,
                                                   tempEvent.def.desc + "\n This event is affecting the following settlements: " +
                                                   settlementString, LetterDefOf.NeutralEvent);
                }
                else
                {
                    Find.LetterStack.ReceiveLetter(tempEvent.def.label, tempEvent.def.desc, LetterDefOf.NeutralEvent);
                }
            }
        }
コード例 #23
0
ファイル: DeliveryEvent.cs プロジェクト: BigBadE/Empire-Mod
 private static void SpawnOnTaxSpot(FCEvent evt)
 {
     MakeDeliveryLetterAndMessage(evt);
     evt.goods.ForEach(thing => PaymentUtil.placeThing(thing));
 }