/// <summary> /// 显示 /// </summary> public override void showDialog() { m_gridSelectedRowsChangedEvent = new FCEvent(gridSelectedRowsChanged); m_tvTypes.addEvent(m_gridSelectedRowsChangedEvent, FCEventID.GRIDSELECTEDROWSCHANGED); base.showDialog(); }
//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; }
public static void Action(FCEvent evt) { Action(evt, Find.World.GetComponent <FactionFC>().settlements.FirstOrFallback(settlement => settlement.mapLocation == evt.source)?.traits.Contains(FCTraitEffectDefOf.shuttlePort) ?? false); }
/// <summary> /// 创建分割布局控件 /// </summary> public FCSplitLayoutDiv() { m_splitterDraggingEvent = new FCEvent(SplitterDragging); }
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); } // }
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 }
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); } }
public void AddListener(FCEventListener listener, FCEvent fcEvent) { observable.AddListener(listener, fcEvent); }
public static void deliverThings(FCEvent evt, Letter let = null, Message msg = null) { DeliveryEvent.Action(evt, let, msg); }
public void AddLandingListener(FCEventListener listener, FCEvent fcEvent) { demoStack.AddLandingListener(listener, fcEvent); }
public void AddLandingListener(FCEventListener listener, FCEvent fcEvent) { landingObservable.AddListener(listener, fcEvent); }
public void AddLandingListener(FCEventListener listener, FCEvent fcEvent) { flipper.AddLandingListener(listener, fcEvent); }
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)); }
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; }
public void RemoveListener(FCEventListener listener, FCEvent fcEvent) { map [fcEvent].Remove(listener); }
/// <summary> /// 创建日期控件 /// </summary> public FCDateTimePicker() { m_dropDownButtonTouchDownEvent = new FCTouchEvent(DropDownButtonTouchDown); m_selectedTimeChangedEvent = new FCEvent(selectedTimeChanged); }
/// <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; } } } }
public void RemoveListener(FCEventListener listener, FCEvent fcEvent) { observable.RemoveListener(listener, fcEvent); }
public static militaryForce returnDefendingMilitaryForce(FCEvent evt) { return(evt.militaryForceDefending); }
/// <summary> /// 创建设计层 /// </summary> public DesignerDiv() { BorderColor = FCColor.None; m_parentVisibleChangedEvent = new FCEvent(parentVisibleChanged); Layout = FCTabPageLayout.Bottom; }
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); } }
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); } } }
private static void SpawnOnTaxSpot(FCEvent evt) { MakeDeliveryLetterAndMessage(evt); evt.goods.ForEach(thing => PaymentUtil.placeThing(thing)); }