From c13685cb3b68f78f2d8fe6ca0b2315bb8ccb8c21 Mon Sep 17 00:00:00 2001 From: Zhentar Date: Mon, 8 May 2017 21:54:13 -0500 Subject: [PATCH 1/4] A17 updates --- About/About.xml | 2 +- Defs/MainTabDefs/kNumbers.xml | 10 ++-- Source/kNumbers/KListObject.cs | 69 +++++++++--------------- Source/kNumbers/MainTabWindow_Numbers.cs | 6 +-- Source/kNumbers/MapComponent_Numbers.cs | 4 +- 5 files changed, 37 insertions(+), 54 deletions(-) diff --git a/About/About.xml b/About/About.xml index 97f293b..3a94071 100644 --- a/About/About.xml +++ b/About/About.xml @@ -3,7 +3,7 @@ Numbers koisama https://ludeon.com/forums/index.php?topic=16558.0 - 0.16.1393 + 0.17.1532 Adds a customizable general overview tab, allowing you to see any stats on all your colonists or prisoners in a single window. diff --git a/Defs/MainTabDefs/kNumbers.xml b/Defs/MainTabDefs/kNumbers.xml index fc0d168..b793b59 100644 --- a/Defs/MainTabDefs/kNumbers.xml +++ b/Defs/MainTabDefs/kNumbers.xml @@ -1,12 +1,12 @@ - + - + kNumbersOverviewTab See every possible stat on every colonist or prisoner in a single table. - kNumbers.MainTabWindow_Numbers + kNumbers.MainTabWindow_Numbers 20 - + - \ No newline at end of file + \ No newline at end of file diff --git a/Source/kNumbers/KListObject.cs b/Source/kNumbers/KListObject.cs index c936ca9..e31ee34 100644 --- a/Source/kNumbers/KListObject.cs +++ b/Source/kNumbers/KListObject.cs @@ -63,33 +63,33 @@ public enum objectType public void ExposeData() { - Scribe_Values.LookValue(ref oType, "oType"); - Scribe_Values.LookValue(ref minWidthDesired, "minWidthDesired"); - Scribe_Values.LookValue(ref this.label, "label"); + Scribe_Values.Look(ref oType, "oType"); + Scribe_Values.Look(ref minWidthDesired, "minWidthDesired"); + Scribe_Values.Look(ref this.label, "label"); switch (oType) { case objectType.Stat: StatDef tempObjectS = (StatDef)displayObject; - Scribe_Defs.LookDef(ref tempObjectS, "displayObject"); + Scribe_Defs.Look(ref tempObjectS, "displayObject"); displayObject = tempObjectS; break; case objectType.Skill: SkillDef tempObjectK = (SkillDef)displayObject; - Scribe_Defs.LookDef(ref tempObjectK, "displayObject"); + Scribe_Defs.Look(ref tempObjectK, "displayObject"); displayObject = tempObjectK; break; case objectType.Need: NeedDef tempObjectN = (NeedDef)displayObject; - Scribe_Defs.LookDef(ref tempObjectN, "displayObject"); + Scribe_Defs.Look(ref tempObjectN, "displayObject"); displayObject = tempObjectN; break; case objectType.Capacity: PawnCapacityDef tempObjectCap = (PawnCapacityDef)displayObject; - Scribe_Defs.LookDef(ref tempObjectCap, "displayObject"); + Scribe_Defs.Look(ref tempObjectCap, "displayObject"); displayObject = tempObjectCap; break; @@ -249,7 +249,7 @@ private void DrawGear(Rect rect, ThingWithComps ownerPawn) Pawn p1 = (ownerPawn is Pawn) ? (ownerPawn as Pawn) : (ownerPawn as Corpse).InnerPawn; if (p1.RaceProps.Animal) return; if (p1.equipment != null) - foreach(ThingWithComps thing in p1.equipment.AllEquipment) + foreach(ThingWithComps thing in p1.equipment.AllEquipmentListForReading) { Rect rect2 = new Rect(x, 0, gWidth, gHeight); DrawThing(rect2, thing, p1); @@ -296,7 +296,7 @@ private void DrawThing(Rect rect, Thing thing, Pawn selPawn) selPawn.apparel.TryDrop(ap, out unused, selPawn.Position, true); }; } - else if (eq != null && selPawn.equipment.AllEquipment.Contains(eq)) + else if (eq != null && selPawn.equipment.AllEquipmentListForReading.Contains(eq)) { ThingWithComps unused; action = delegate @@ -427,7 +427,7 @@ public void Draw(Rect rect, ThingWithComps ownerPawn) // I stole this one line from Fluffy's Medical Tab. THANKS FLUFFY! - string capValue = (p.health.capacities.GetEfficiency(cap) * 100f).ToString("F0") + "%"; + string capValue = (p.health.capacities.GetLevel(cap) * 100f).ToString("F0") + "%"; GUI.color = effLabel.Second; Widgets.Label(rect, capValue); GUI.color = Color.white; @@ -488,39 +488,22 @@ public void Draw(Rect rect, ThingWithComps ownerPawn) case objectType.ControlPrisonerInteraction: if (ownerPawn is Pawn) - { - if (Mouse.IsOver(rect)) - { - GUI.DrawTexture(rect, TexUI.HighlightTex); - } - float x = 8f; - - GUI.BeginGroup(rect); - IEnumerator enumerator = Enum.GetValues(typeof(PrisonerInteractionMode)).GetEnumerator(); - try - { - while (enumerator.MoveNext()) - { - PrisonerInteractionMode prisonerInteractionMode = (PrisonerInteractionMode)((byte)enumerator.Current); - if (Widgets.RadioButton(new Vector2(x, 3f), (ownerPawn as Pawn).guest.interactionMode == prisonerInteractionMode)) - { - (ownerPawn as Pawn).guest.interactionMode = prisonerInteractionMode; - } - TooltipHandler.TipRegion(new Rect(x, 0f, 30f, 30f), new TipSignal(prisonerInteractionMode.GetLabel())); - x += 30f; - } - } - finally - { - IDisposable disposable = enumerator as IDisposable; - if (disposable != null) - { - disposable.Dispose(); - } - } - GUI.EndGroup(); - } - break; + { + if (Mouse.IsOver(rect)) { GUI.DrawTexture(rect, TexUI.HighlightTex); } + float x = 8f; + + GUI.BeginGroup(rect); + + foreach (var prisonerInteractionMode in DefDatabase.AllDefs) + { + if (Widgets.RadioButton(new Vector2(x, 3f), (ownerPawn as Pawn).guest.interactionMode == prisonerInteractionMode)) { (ownerPawn as Pawn).guest.interactionMode = prisonerInteractionMode; } + TooltipHandler.TipRegion(new Rect(x, 0f, 30f, 30f), new TipSignal(prisonerInteractionMode.GetLabel())); + x += 30f; + } + + GUI.EndGroup(); + } + break; case objectType.ControlMedicalCare: if (ownerPawn is Pawn) MedicalCareSetter(rect, ref (ownerPawn as Pawn).playerSettings.medCare); diff --git a/Source/kNumbers/MainTabWindow_Numbers.cs b/Source/kNumbers/MainTabWindow_Numbers.cs index 009e562..2e0331a 100644 --- a/Source/kNumbers/MainTabWindow_Numbers.cs +++ b/Source/kNumbers/MainTabWindow_Numbers.cs @@ -159,7 +159,7 @@ private void PreDrawPawnRow(Rect rect, ThingWithComps p) { Find.MainTabsRoot.EscapeCurrentTab(true); Find.Selector.ClearSelection(); - Find.CameraDriver.JumpTo(p.PositionHeld); + Find.CameraDriver.JumpToVisibleMapLoc(p.PositionHeld); } //finally select if pawn is present @@ -423,7 +423,7 @@ orderby p.GetStatValue((StatDef)sortObject.displayObject, true) ascending this.things = (from p in tempPawns where (p is Pawn) && ((p as Pawn).health != null) - orderby ((p as Pawn).health.capacities.GetEfficiency((PawnCapacityDef)sortObject.displayObject)) ascending + orderby ((p as Pawn).health.capacities.GetLevel((PawnCapacityDef)sortObject.displayObject)) ascending select p).ToList(); break; @@ -437,7 +437,7 @@ orderby p.GetStatValue((StatDef)sortObject.displayObject, true) ascending case KListObject.objectType.Gear: this.things = tempPawns.Where(p=>(p is Pawn)||((p is Corpse)&&(!(p as Corpse).InnerPawn.RaceProps.Animal))).OrderBy(p => { Pawn p1 = (p is Pawn)?(p as Pawn):(p as Corpse).InnerPawn; - return (p1.equipment != null) ? ((p1.equipment.AllEquipment.Count() > 0) ? p1.equipment.AllEquipment.First().LabelCap : "") : ""; + return (p1.equipment != null) ? ((p1.equipment.AllEquipmentListForReading.Any()) ? p1.equipment.AllEquipmentListForReading.First().LabelCap : "") : ""; }).ToList(); break; diff --git a/Source/kNumbers/MapComponent_Numbers.cs b/Source/kNumbers/MapComponent_Numbers.cs index 8d92a13..fe13d3e 100644 --- a/Source/kNumbers/MapComponent_Numbers.cs +++ b/Source/kNumbers/MapComponent_Numbers.cs @@ -34,11 +34,11 @@ public override void ExposeData() if (Scribe.mode == LoadSaveMode.LoadingVars || Scribe.mode == LoadSaveMode.Saving) { - Scribe_Values.LookValue(ref chosenPawnType, "chosenPawnType", MainTabWindow_Numbers.pawnType.Colonists); + Scribe_Values.Look(ref chosenPawnType, "chosenPawnType", MainTabWindow_Numbers.pawnType.Colonists); foreach (MainTabWindow_Numbers.pawnType type in Enum.GetValues(typeof(MainTabWindow_Numbers.pawnType))) { tmpKList = savedKLists[type]; - Scribe_Collections.LookList(ref tmpKList, "klist-" + type, LookMode.Deep); + Scribe_Collections.Look(ref tmpKList, "klist-" + type, LookMode.Deep); savedKLists[type] = tmpKList; /*foreach(KListObject obj in tmpKList) From 7f38dfd60ee16e9bdbc245deeb422e30bcf49f1b Mon Sep 17 00:00:00 2001 From: Zhentar Date: Tue, 9 May 2017 08:33:31 -0500 Subject: [PATCH 2/4] MapComponent -> GameComponent --- Source/kNumbers/GameComponent_Numbers.cs | 42 ++++++++++ Source/kNumbers/MainTabWindow_Numbers.cs | 98 +++++++++++------------- Source/kNumbers/MapComponent_Numbers.cs | 78 ------------------- 3 files changed, 86 insertions(+), 132 deletions(-) create mode 100644 Source/kNumbers/GameComponent_Numbers.cs delete mode 100644 Source/kNumbers/MapComponent_Numbers.cs diff --git a/Source/kNumbers/GameComponent_Numbers.cs b/Source/kNumbers/GameComponent_Numbers.cs new file mode 100644 index 0000000..b816ada --- /dev/null +++ b/Source/kNumbers/GameComponent_Numbers.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Verse; + +namespace kNumbers +{ + class GameComponent_Numbers : GameComponent + { + + public Dictionary> savedKLists = new Dictionary>(5); + public MainTabWindow_Numbers.pawnType chosenPawnType = MainTabWindow_Numbers.pawnType.Colonists; + + + public GameComponent_Numbers() + { + LongEventHandler.ExecuteWhenFinished(() => { if (Current.Game.GetComponent() == null) { Current.Game.components.Add(this); } }); + } + + + public override void ExposeData() + { + + Scribe_Values.Look(ref chosenPawnType, "chosenPawnType", MainTabWindow_Numbers.pawnType.Colonists); + foreach (MainTabWindow_Numbers.pawnType type in Enum.GetValues(typeof(MainTabWindow_Numbers.pawnType))) + { + List tmpKList; + savedKLists.TryGetValue(type, out tmpKList); + Scribe_Collections.Look(ref tmpKList, "klist-" + type, LookMode.Deep); + savedKLists[type] = tmpKList; + + /*foreach(KListObject obj in tmpKList ?? Enumerable.Empty()) + { + Log.Message("scribe loaded object "+ obj.oType.ToString() + ", " + obj.label + "," + (obj.displayObject == null? "NULL!" : obj.displayObject.ToString())); + }*/ + + } + + } + + } +} diff --git a/Source/kNumbers/MainTabWindow_Numbers.cs b/Source/kNumbers/MainTabWindow_Numbers.cs index 2e0331a..93ee67a 100644 --- a/Source/kNumbers/MainTabWindow_Numbers.cs +++ b/Source/kNumbers/MainTabWindow_Numbers.cs @@ -227,9 +227,7 @@ public enum orderBy List pNeedDef; List kList = new List(); - - public static Dictionary> savedKLists = new Dictionary>(5); - public static pawnType chosenPawnType = pawnType.Colonists; + orderBy chosenOrderBy = orderBy.Name; KListObject sortObject; @@ -243,11 +241,7 @@ public override Vector2 RequestedTabSize return new Vector2(maxWidth, 90f + (float)base.ThingsCount * PawnRowHeight + 65f + 16f); } } - - - - - + public MainTabWindow_Numbers() { Pawn tmpPawn; @@ -262,15 +256,6 @@ public MainTabWindow_Numbers() tmpPawn = PawnGenerator.GeneratePawn(PawnKindDefOf.Thrumbo, null); pawnAnimalStatDef = (from s in ((IEnumerable)statsToDraw.Invoke(null, new[] { tmpPawn })) where s.ShouldDisplay && s.stat != null select s.stat).ToList(); pawnAnimalNeedDef = tmpPawn.needs.AllNeeds.Where(x => x.def.showOnNeedList).Select(x => x.def).ToList(); - - savedKLists = new Dictionary>(5); - foreach (MainTabWindow_Numbers.pawnType pType in Enum.GetValues(typeof(MainTabWindow_Numbers.pawnType))) - { - savedKLists.Add(pType, new List()); - } - - MapComponent_Numbers.InitMapComponent(); - } String numbersXMLPath @@ -294,18 +279,18 @@ public void readPresets() public override void PreOpen() { - base.PreOpen(); - isDirty = true; - if (MapComponent_Numbers.hasData) - { - savedKLists = MapComponent_Numbers.savedKLists; - chosenPawnType = MapComponent_Numbers.chosenPawnType; - kList = savedKLists[chosenPawnType]; - MapComponent_Numbers.hasData = false; - } - } - - bool fits(float desiredSize) + var component = Current.Game.GetComponent(); + component.savedKLists.TryGetValue(component.chosenPawnType, out kList); + if (kList == null) + { + kList = new List(); + component.savedKLists[component.chosenPawnType] = kList; + } + base.PreOpen(); + isDirty = true; + } + + bool fits(float desiredSize) { return (kListDesiredWidth + desiredSize + 70 < maxWindowWidth); } @@ -337,11 +322,11 @@ bool isGuest(Pawn p) void UpdatePawnList() { - savedKLists[chosenPawnType] = kList; - + var component = Current.Game.GetComponent(); + this.things.Clear(); IEnumerable tempPawns = new List(); - switch (chosenPawnType) + switch (component.chosenPawnType) { default: case pawnType.Colonists: @@ -515,19 +500,22 @@ orderby p.GetStatValue((StatDef)sortObject.displayObject, true) ascending } public void PawnSelectOptionsMaker() - { - List list = new List(); + { + List list = new List(); foreach (pawnType pawn in Enum.GetValues(typeof(pawnType))) { Action action = delegate - { - if (pawn != chosenPawnType) - { - savedKLists[chosenPawnType] = kList; - savedKLists.TryGetValue(pawn, out kList); - if (kList == null) - kList = new List(); - chosenPawnType = pawn; + { + var component = Current.Game.GetComponent(); + if (pawn != component.chosenPawnType) + { + component.savedKLists.TryGetValue(pawn, out kList); + if (kList == null) + { + kList = new List(); + component.savedKLists[pawn] = kList; + } + component.chosenPawnType = pawn; isDirty = true; } }; @@ -610,11 +598,12 @@ public void PresetOptionsMaker() //other hardcoded options public void OtherOptionsMaker() - { - List list = new List(); + { + var component = Current.Game.GetComponent(); + List list = new List(); //equipment bearers - if (new[] { pawnType.Colonists, pawnType.Prisoners, pawnType.Enemies, pawnType.Corpses }.Contains(chosenPawnType)) + if (new[] { pawnType.Colonists, pawnType.Prisoners, pawnType.Enemies, pawnType.Corpses }.Contains(component.chosenPawnType)) { Action action = delegate { @@ -626,7 +615,7 @@ public void OtherOptionsMaker() } //all living things - if (new[] { pawnType.Colonists, pawnType.Prisoners, pawnType.Enemies, pawnType.Animals, pawnType.WildAnimals, pawnType.Guests }.Contains(chosenPawnType)) + if (new[] { pawnType.Colonists, pawnType.Prisoners, pawnType.Enemies, pawnType.Animals, pawnType.WildAnimals, pawnType.Guests }.Contains(component.chosenPawnType)) { Action action = delegate { @@ -645,7 +634,7 @@ public void OtherOptionsMaker() list.Add(new FloatMenuOption("koisama.MentalState".Translate(), action, MenuOptionPriority.Default, null, null)); } - if (chosenPawnType == pawnType.Prisoners) { + if (component.chosenPawnType == pawnType.Prisoners) { Action action = delegate { KListObject kl = new KListObject(KListObject.objectType.ControlPrisonerGetsFood, "GetsFood".Translate(), null); @@ -663,7 +652,7 @@ public void OtherOptionsMaker() list.Add(new FloatMenuOption("koisama.Interaction".Translate(), action2, MenuOptionPriority.Default, null, null)); } - if (chosenPawnType == pawnType.Animals) + if (component.chosenPawnType == pawnType.Animals) { Action action = delegate { @@ -683,7 +672,7 @@ public void OtherOptionsMaker() } //healable - if (new[] { pawnType.Colonists, pawnType.Prisoners, pawnType.Animals }.Contains(chosenPawnType)) + if (new[] { pawnType.Colonists, pawnType.Prisoners, pawnType.Animals }.Contains(component.chosenPawnType)) { Action action = delegate { @@ -694,7 +683,7 @@ public void OtherOptionsMaker() list.Add(new FloatMenuOption("koisama.MedicalCare".Translate(), action, MenuOptionPriority.Default, null, null)); } - if (! new[] { pawnType.Corpses, pawnType.AnimalCorpses }.Contains(chosenPawnType)) + if (! new[] { pawnType.Corpses, pawnType.AnimalCorpses }.Contains(component.chosenPawnType)) { Action action = delegate { @@ -709,8 +698,9 @@ public void OtherOptionsMaker() } public override void DoWindowContents(Rect r) - { - maxWindowWidth = Screen.width; + { + var component = Current.Game.GetComponent(); + maxWindowWidth = Screen.width; base.DoWindowContents(r); if (pawnListUpdateNext < Find.TickManager.TicksGame) @@ -729,7 +719,7 @@ public override void DoWindowContents(Rect r) //pawn/prisoner list switch Rect sourceButton = new Rect(x, 0f, buttonWidth, PawnRowHeight); - if (Widgets.ButtonText(sourceButton, ("koisama.pawntype." + chosenPawnType.ToString()).Translate())) + if (Widgets.ButtonText(sourceButton, ("koisama.pawntype." + component.chosenPawnType.ToString()).Translate())) { PawnSelectOptionsMaker(); } @@ -745,7 +735,7 @@ public override void DoWindowContents(Rect r) x += buttonWidth + 10; //skills btn - if (new[] { pawnType.Colonists, pawnType.Prisoners, pawnType.Enemies }.Contains(chosenPawnType)) + if (new[] { pawnType.Colonists, pawnType.Prisoners, pawnType.Enemies }.Contains(component.chosenPawnType)) { Rect skillColumnButton = new Rect(x, 0f, buttonWidth, PawnRowHeight); if (Widgets.ButtonText(skillColumnButton, "koisama.Numbers.AddSkillColumnLabel".Translate())) diff --git a/Source/kNumbers/MapComponent_Numbers.cs b/Source/kNumbers/MapComponent_Numbers.cs deleted file mode 100644 index fe13d3e..0000000 --- a/Source/kNumbers/MapComponent_Numbers.cs +++ /dev/null @@ -1,78 +0,0 @@ -using System; -using System.Collections.Generic; -using Verse; - -namespace kNumbers -{ - class MapComponent_Numbers : MapComponent - { - - public static Dictionary> savedKLists; - public static MainTabWindow_Numbers.pawnType chosenPawnType; - public static bool hasData = false; - - private List tmpKList; - - public MapComponent_Numbers(Map map) : base(map) - { - this.map = map; - } - - public override void ExposeData() - { - - if (Scribe.mode == LoadSaveMode.LoadingVars) - { - hasData = false; - SetDefaultValues(); - } - - if(Scribe.mode == LoadSaveMode.Saving) { - savedKLists = MainTabWindow_Numbers.savedKLists; - chosenPawnType = MainTabWindow_Numbers.chosenPawnType; - } - - if (Scribe.mode == LoadSaveMode.LoadingVars || Scribe.mode == LoadSaveMode.Saving) - { - Scribe_Values.Look(ref chosenPawnType, "chosenPawnType", MainTabWindow_Numbers.pawnType.Colonists); - foreach (MainTabWindow_Numbers.pawnType type in Enum.GetValues(typeof(MainTabWindow_Numbers.pawnType))) - { - tmpKList = savedKLists[type]; - Scribe_Collections.Look(ref tmpKList, "klist-" + type, LookMode.Deep); - savedKLists[type] = tmpKList; - - /*foreach(KListObject obj in tmpKList) - { - Log.Message("scribe loaded object "+ obj.oType.ToString() + ", " + obj.label + "," + (obj.displayObject == null? "NULL!" : obj.displayObject.ToString())); - }*/ - - } - hasData = true; - } - - } - - private static void SetDefaultValues() - { - chosenPawnType = MainTabWindow_Numbers.pawnType.Colonists; - savedKLists = new Dictionary>(5); - foreach(MainTabWindow_Numbers.pawnType pType in Enum.GetValues(typeof(MainTabWindow_Numbers.pawnType))) - { - savedKLists.Add(pType, new List(10)); - } - } - - - public static void InitMapComponent() - { - if(Find.VisibleMap.GetComponent() == null) - { - if (!hasData) - { - SetDefaultValues(); - } - Find.VisibleMap.components.Add(new MapComponent_Numbers(Find.VisibleMap)); - } - } - } -} From 12fed65f76354a6b1510f48e57ae7e9b6c435ab9 Mon Sep 17 00:00:00 2001 From: Zhentar Date: Tue, 9 May 2017 08:44:58 -0500 Subject: [PATCH 3/4] Clean up some code redundancies --- Source/kNumbers/GameComponent_Numbers.cs | 4 ++-- Source/kNumbers/KListObject.cs | 26 ++++++++++++------------ Source/kNumbers/MainTabWindow_Numbers.cs | 26 ++++++++++++------------ 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/Source/kNumbers/GameComponent_Numbers.cs b/Source/kNumbers/GameComponent_Numbers.cs index b816ada..2e03eac 100644 --- a/Source/kNumbers/GameComponent_Numbers.cs +++ b/Source/kNumbers/GameComponent_Numbers.cs @@ -21,12 +21,12 @@ public GameComponent_Numbers() public override void ExposeData() { - Scribe_Values.Look(ref chosenPawnType, "chosenPawnType", MainTabWindow_Numbers.pawnType.Colonists); + Scribe_Values.Look(ref chosenPawnType, "chosenPawnType", MainTabWindow_Numbers.pawnType.Colonists); foreach (MainTabWindow_Numbers.pawnType type in Enum.GetValues(typeof(MainTabWindow_Numbers.pawnType))) { List tmpKList; savedKLists.TryGetValue(type, out tmpKList); - Scribe_Collections.Look(ref tmpKList, "klist-" + type, LookMode.Deep); + Scribe_Collections.Look(ref tmpKList, "klist-" + type, LookMode.Deep); savedKLists[type] = tmpKList; /*foreach(KListObject obj in tmpKList ?? Enumerable.Empty()) diff --git a/Source/kNumbers/KListObject.cs b/Source/kNumbers/KListObject.cs index e31ee34..4cae665 100644 --- a/Source/kNumbers/KListObject.cs +++ b/Source/kNumbers/KListObject.cs @@ -290,26 +290,26 @@ private void DrawThing(Rect rect, Thing thing, Pawn selPawn) Apparel ap = thing as Apparel; if (ap != null) { - Apparel unused; action = delegate - { - selPawn.apparel.TryDrop(ap, out unused, selPawn.Position, true); + { + Apparel unused; + selPawn.apparel.TryDrop(ap, out unused, selPawn.Position, true); }; } else if (eq != null && selPawn.equipment.AllEquipmentListForReading.Contains(eq)) { - ThingWithComps unused; action = delegate - { - selPawn.equipment.TryDropEquipment(eq, out unused, selPawn.Position, true); + { + ThingWithComps unused; + selPawn.equipment.TryDropEquipment(eq, out unused, selPawn.Position, true); }; } else if (!thing.def.destroyOnDrop) { - Thing unused; action = delegate - { - selPawn.inventory.innerContainer.TryDrop(thing, selPawn.Position, selPawn.Map, ThingPlaceMode.Near, out unused); + { + Thing unused; + selPawn.inventory.innerContainer.TryDrop(thing, selPawn.Position, selPawn.Map, ThingPlaceMode.Near, out unused); }; } list.Add(new FloatMenuOption("DropThing".Translate(), action, MenuOptionPriority.Default, null, null)); @@ -513,9 +513,9 @@ public void Draw(Rect rect, ThingWithComps ownerPawn) Text.Anchor = TextAnchor.MiddleCenter; if (ownerPawn is Pawn && ((Pawn)ownerPawn).ageTracker.CurLifeStage.milkable) { - var comp = ((Pawn)ownerPawn).AllComps.Where(x => x is CompMilkable).FirstOrDefault(); + var comp = ownerPawn.AllComps.OfType().FirstOrDefault(); if(comp != null) - value = ((CompMilkable)comp).Fullness.ToStringPercent(); + value = comp.Fullness.ToStringPercent(); } Widgets.Label(rect, value); @@ -525,9 +525,9 @@ public void Draw(Rect rect, ThingWithComps ownerPawn) Text.Anchor = TextAnchor.MiddleCenter; if (ownerPawn is Pawn && ((Pawn)ownerPawn).ageTracker.CurLifeStage.shearable) { - var comp = ((Pawn)ownerPawn).AllComps.Where(x => x is CompShearable).FirstOrDefault(); + var comp = ownerPawn.AllComps.OfType().FirstOrDefault(); if (comp != null) - value = ((CompShearable)comp).Fullness.ToStringPercent(); + value = comp.Fullness.ToStringPercent(); } Widgets.Label(rect, value); diff --git a/Source/kNumbers/MainTabWindow_Numbers.cs b/Source/kNumbers/MainTabWindow_Numbers.cs index 93ee67a..1cb620c 100644 --- a/Source/kNumbers/MainTabWindow_Numbers.cs +++ b/Source/kNumbers/MainTabWindow_Numbers.cs @@ -330,49 +330,49 @@ void UpdatePawnList() { default: case pawnType.Colonists: - tempPawns = Find.VisibleMap.mapPawns.FreeColonists.Select(p=>p as ThingWithComps).ToList(); + tempPawns = Find.VisibleMap.mapPawns.FreeColonists.Cast().ToList(); pStatDef = pawnHumanlikeStatDef; pNeedDef = pawnHumanlikeNeedDef; break; case pawnType.Prisoners: - tempPawns = Find.VisibleMap.mapPawns.PrisonersOfColony.Select(p => p as ThingWithComps).ToList(); + tempPawns = Find.VisibleMap.mapPawns.PrisonersOfColony.Cast().ToList(); pStatDef = pawnHumanlikeStatDef; pNeedDef = pawnHumanlikeNeedDef; break; case pawnType.Guests: - tempPawns = Find.VisibleMap.mapPawns.AllPawns.Where(p => isGuest(p)).Select(p => p as ThingWithComps).ToList(); + tempPawns = Find.VisibleMap.mapPawns.AllPawns.Where(isGuest).Cast().ToList(); pStatDef = pawnHumanlikeStatDef; pNeedDef = pawnHumanlikeNeedDef; break; case pawnType.Enemies: - // tempPawns = Find.MapPawns.PawnsHostileToColony.Select(p => p as ThingWithComps).ToList(); - tempPawns = (from p in Find.VisibleMap.mapPawns.AllPawns where isEnemy(p) select p).Select(p => p as ThingWithComps).ToList(); + // tempPawns = Find.MapPawns.PawnsHostileToColony.Cast().ToList(); + tempPawns = (from p in Find.VisibleMap.mapPawns.AllPawns where isEnemy(p) select p).Cast().ToList(); pStatDef = pawnHumanlikeStatDef; pNeedDef = pawnHumanlikeNeedDef; break; case pawnType.Animals: - tempPawns = (from p in Find.VisibleMap.mapPawns.PawnsInFaction(Faction.OfPlayer) where p.RaceProps.Animal select p).Select(p => p as ThingWithComps).ToList(); + tempPawns = (from p in Find.VisibleMap.mapPawns.PawnsInFaction(Faction.OfPlayer) where p.RaceProps.Animal select p).Cast().ToList(); pStatDef = pawnAnimalStatDef; pNeedDef = pawnAnimalNeedDef; break; case pawnType.WildAnimals: - tempPawns = (from p in Find.VisibleMap.mapPawns.AllPawns where isWildAnimal(p) select p).Select(p => p as ThingWithComps).ToList(); + tempPawns = (from p in Find.VisibleMap.mapPawns.AllPawns where isWildAnimal(p) select p).Cast().ToList(); pStatDef = pawnAnimalStatDef; pNeedDef = pawnAnimalNeedDef; break; case pawnType.Corpses: - tempPawns = Find.VisibleMap.listerThings.AllThings.Where(p => (p is Corpse) && (!(p as Corpse).InnerPawn.RaceProps.Animal)).Select(p => p as ThingWithComps).ToList(); + tempPawns = Find.VisibleMap.listerThings.AllThings.Where(p => (p is Corpse) && (!(p as Corpse).InnerPawn.RaceProps.Animal)).Cast().ToList(); pStatDef = new List(); pNeedDef = new List(); break; case pawnType.AnimalCorpses: - tempPawns = Find.VisibleMap.listerThings.AllThings.Where(p => (p is Corpse) && (p as Corpse).InnerPawn.RaceProps.Animal && !p.Position.Fogged(Find.VisibleMap)).Select(p => p as ThingWithComps).ToList(); + tempPawns = Find.VisibleMap.listerThings.AllThings.Where(p => (p is Corpse) && (p as Corpse).InnerPawn.RaceProps.Animal && !p.Position.Fogged(Find.VisibleMap)).Cast().ToList(); pStatDef = new List(); pNeedDef = new List(); break; @@ -456,9 +456,9 @@ orderby p.GetStatValue((StatDef)sortObject.displayObject, true) ascending float f = -1; if ((p as Pawn).ageTracker.CurLifeStage.milkable) { - var comp = (p as Pawn).AllComps.Where(x => x is CompMilkable).FirstOrDefault(); + var comp = p.AllComps.OfType().FirstOrDefault(); if (comp != null) - f = ((CompMilkable)comp).Fullness; + f = comp.Fullness; } return f; } @@ -471,9 +471,9 @@ orderby p.GetStatValue((StatDef)sortObject.displayObject, true) ascending float f = -1; if ((p as Pawn).ageTracker.CurLifeStage.milkable) { - var comp = (p as Pawn).AllComps.Where(x => x is CompShearable).FirstOrDefault(); + var comp = p.AllComps.OfType().FirstOrDefault(); if (comp != null) - f = ((CompShearable)comp).Fullness; + f = comp.Fullness; } return f; } From a39e845fbba3cf62efb37ef877fa7e9d1e1af8d0 Mon Sep 17 00:00:00 2001 From: Zhentar Date: Tue, 9 May 2017 20:38:33 -0500 Subject: [PATCH 4/4] Switch to WorldComponent --- Source/kNumbers/MainTabWindow_Numbers.cs | 10 +++++----- ...eComponent_Numbers.cs => WorldComponent_Numbers.cs} | 9 +++------ Source/kNumbers/kNumbers.csproj | 2 +- 3 files changed, 9 insertions(+), 12 deletions(-) rename Source/kNumbers/{GameComponent_Numbers.cs => WorldComponent_Numbers.cs} (81%) diff --git a/Source/kNumbers/MainTabWindow_Numbers.cs b/Source/kNumbers/MainTabWindow_Numbers.cs index 1cb620c..20d6a14 100644 --- a/Source/kNumbers/MainTabWindow_Numbers.cs +++ b/Source/kNumbers/MainTabWindow_Numbers.cs @@ -279,7 +279,7 @@ public void readPresets() public override void PreOpen() { - var component = Current.Game.GetComponent(); + var component = Find.World.GetComponent(); component.savedKLists.TryGetValue(component.chosenPawnType, out kList); if (kList == null) { @@ -322,7 +322,7 @@ bool isGuest(Pawn p) void UpdatePawnList() { - var component = Current.Game.GetComponent(); + var component = Find.World.GetComponent(); this.things.Clear(); IEnumerable tempPawns = new List(); @@ -506,7 +506,7 @@ public void PawnSelectOptionsMaker() { Action action = delegate { - var component = Current.Game.GetComponent(); + var component = Find.World.GetComponent(); if (pawn != component.chosenPawnType) { component.savedKLists.TryGetValue(pawn, out kList); @@ -599,7 +599,7 @@ public void PresetOptionsMaker() //other hardcoded options public void OtherOptionsMaker() { - var component = Current.Game.GetComponent(); + var component = Find.World.GetComponent(); List list = new List(); //equipment bearers @@ -699,7 +699,7 @@ public void OtherOptionsMaker() public override void DoWindowContents(Rect r) { - var component = Current.Game.GetComponent(); + var component = Find.World.GetComponent(); maxWindowWidth = Screen.width; base.DoWindowContents(r); diff --git a/Source/kNumbers/GameComponent_Numbers.cs b/Source/kNumbers/WorldComponent_Numbers.cs similarity index 81% rename from Source/kNumbers/GameComponent_Numbers.cs rename to Source/kNumbers/WorldComponent_Numbers.cs index 2e03eac..b7d8854 100644 --- a/Source/kNumbers/GameComponent_Numbers.cs +++ b/Source/kNumbers/WorldComponent_Numbers.cs @@ -1,22 +1,19 @@ using System; using System.Collections.Generic; using System.Linq; +using RimWorld.Planet; using Verse; namespace kNumbers { - class GameComponent_Numbers : GameComponent + class WorldComponent_Numbers : WorldComponent { public Dictionary> savedKLists = new Dictionary>(5); public MainTabWindow_Numbers.pawnType chosenPawnType = MainTabWindow_Numbers.pawnType.Colonists; - public GameComponent_Numbers() - { - LongEventHandler.ExecuteWhenFinished(() => { if (Current.Game.GetComponent() == null) { Current.Game.components.Add(this); } }); - } - + public WorldComponent_Numbers(World world) : base(world) { } public override void ExposeData() { diff --git a/Source/kNumbers/kNumbers.csproj b/Source/kNumbers/kNumbers.csproj index 94d9ad0..831da04 100644 --- a/Source/kNumbers/kNumbers.csproj +++ b/Source/kNumbers/kNumbers.csproj @@ -54,7 +54,7 @@ - +