diff --git a/Assemblies/Numbers.dll b/Assemblies/Numbers.dll index 2ca5342..9c6d7be 100644 Binary files a/Assemblies/Numbers.dll and b/Assemblies/Numbers.dll differ diff --git a/Defs/PawnColumnDef/PawnColumns_Numbers.xml b/Defs/PawnColumnDef/PawnColumns_Numbers.xml index d79cd4d..3cca929 100644 --- a/Defs/PawnColumnDef/PawnColumns_Numbers.xml +++ b/Defs/PawnColumnDef/PawnColumns_Numbers.xml @@ -203,4 +203,10 @@ + + Numbers_Traits + Numbers.PawnColumnWorker_Traits + true + + \ No newline at end of file diff --git a/Numbers/Numbers.csproj b/Numbers/Numbers.csproj index 9e3daf8..0f7cf71 100644 --- a/Numbers/Numbers.csproj +++ b/Numbers/Numbers.csproj @@ -35,13 +35,16 @@ 7.2 false + + false + ..\packages\Lib.Harmony.2.0.0.8\lib\net472\0Harmony.dll False - ..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\Assembly-CSharp.dll False @@ -52,251 +55,251 @@ - ..\..\..\RimWorldWin64_Data\Managed\Unity.TextMeshPro.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\Unity.TextMeshPro.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.AccessibilityModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.AccessibilityModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.AIModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.AIModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.AndroidJNIModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.AndroidJNIModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.AnimationModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.AnimationModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.ARModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.ARModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.AssetBundleModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.AssetBundleModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.AudioModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.AudioModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.ClothModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.ClothModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.ClusterInputModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.ClusterInputModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.ClusterRendererModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.ClusterRendererModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.CrashReportingModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.CrashReportingModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.DirectorModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.DirectorModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.DSPGraphModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.DSPGraphModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.FileSystemHttpModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.FileSystemHttpModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.GameCenterModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.GameCenterModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.GridModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.GridModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.HotReloadModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.HotReloadModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.ImageConversionModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.ImageConversionModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.IMGUIModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.IMGUIModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.InputLegacyModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.InputLegacyModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.InputModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.InputModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.JSONSerializeModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.JSONSerializeModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.LocalizationModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.LocalizationModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.ParticleSystemModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.ParticleSystemModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.PerformanceReportingModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.PerformanceReportingModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.Physics2DModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.Physics2DModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.PhysicsModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.PhysicsModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.ProfilerModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.ProfilerModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.ScreenCaptureModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.ScreenCaptureModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.SharedInternalsModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.SharedInternalsModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.SpriteMaskModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.SpriteMaskModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.SpriteShapeModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.SpriteShapeModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.StreamingModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.StreamingModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.SubstanceModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.SubstanceModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.TerrainModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.TerrainModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.TerrainPhysicsModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.TerrainPhysicsModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.TextCoreModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.TextCoreModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.TextRenderingModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.TextRenderingModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.TilemapModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.TilemapModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.TLSModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.TLSModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UI.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.UI.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UIElementsModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.UIElementsModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UIModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.UIModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UmbraModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.UmbraModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UNETModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.UNETModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UnityAnalyticsModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.UnityAnalyticsModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UnityConnectModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.UnityConnectModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UnityTestProtocolModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.UnityTestProtocolModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UnityWebRequestAssetBundleModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.UnityWebRequestAssetBundleModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UnityWebRequestAudioModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.UnityWebRequestAudioModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UnityWebRequestModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.UnityWebRequestModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UnityWebRequestTextureModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.UnityWebRequestTextureModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UnityWebRequestWWWModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.UnityWebRequestWWWModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.VehiclesModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.VehiclesModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.VFXModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.VFXModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.VideoModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.VideoModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.VRModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.VRModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.WindModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.WindModule.dll False - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.XRModule.dll + ..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.XRModule.dll False @@ -311,6 +314,7 @@ + @@ -356,5 +360,8 @@ + + + \ No newline at end of file diff --git a/Numbers/OptionsMaker.cs b/Numbers/OptionsMaker.cs index e1430e9..27605d9 100644 --- a/Numbers/OptionsMaker.cs +++ b/Numbers/OptionsMaker.cs @@ -23,7 +23,9 @@ private static IEnumerable LivingThings DefDatabase.GetNamedSilentFail("Numbers_MentalState"), DefDatabase.GetNamedSilentFail("Numbers_JobCurrent"), DefDatabase.GetNamedSilentFail("Numbers_JobQueued"), - DefDatabase.GetNamedSilentFail("Numbers_HediffList") }; + DefDatabase.GetNamedSilentFail("Numbers_HediffList"), + DefDatabase.GetNamedSilentFail("Numbers_Traits") + }; private static IEnumerable Prisoners => new[] { DefDatabase.GetNamedSilentFail("Numbers_PrisonerInteraction"), diff --git a/Numbers/PawnColumnWorkers/PawnColumnWorker_Traits.cs b/Numbers/PawnColumnWorkers/PawnColumnWorker_Traits.cs new file mode 100644 index 0000000..ddb3558 --- /dev/null +++ b/Numbers/PawnColumnWorkers/PawnColumnWorker_Traits.cs @@ -0,0 +1,63 @@ +namespace Numbers +{ + using RimWorld; + using UnityEngine; + using Verse; + using System.Collections.Generic; + using System.Linq; + + //simply copy from PawnColumnWorker_Jobcurrent and implement formatted trait + //test with English and Chinese + //tested compatible with the mod [more practical traits], even with colorful traits + public class PawnColumnWorker_Traits : PawnColumnWorker_Text + { + protected override string GetTextFor(Pawn pawn) + { + if (pawn.story == null) + { + return null; + } + if (pawn.story.traits.allTraits != null && pawn.story.traits.allTraits.Count!=0) + { + + List trait_name_list= new List(); + foreach (Trait i_trait in pawn.story.traits.allTraits){ + if (i_trait.def.degreeDatas.Count == 1) + { + trait_name_list.Add(i_trait.def.degreeDatas.First().label);//use label for multiple language + } + else + { + //for something like beauty, the degree matters + foreach(TraitDegreeData j_degree in i_trait.def.degreeDatas) + { + if (j_degree.degree == i_trait.Degree) + { + trait_name_list.Add(j_degree.label); + } + } + } + + } + string text = string.Join(" , ", trait_name_list); + GenText.SetTextSizeToFit(text, new Rect(0f, 0f, Mathf.CeilToInt(Text.CalcSize(def.LabelCap).x), GetMinCellHeight(pawn))); + + return text; + } + return null; + } + + protected override string GetTip(Pawn pawn) => GetTextFor(pawn); + + //use a stupid method to sort, maybe it needs to be sharpen + public override int Compare(Pawn a, Pawn b) + => (GetTextFor(a) ?? string.Empty).CompareTo((GetTextFor(b) ?? string.Empty)); + + public override int GetMinWidth(PawnTable table) + //adjust width because traits need more space + => Mathf.Max(base.GetMinWidth(table), 350); + + public override int GetMinHeaderHeight(PawnTable table) + => Mathf.CeilToInt(Text.CalcSize(Numbers_Utility.WordWrapAt(def.LabelCap, GetMinWidth(table))).y); + } +}