@@ -78,28 +78,64 @@ private static void Unit_SetVisible(Unit __instance)
7878 [ HarmonyPatch ( typeof ( Resource ) , nameof ( Resource . SetVisible ) ) ]
7979 private static void Resource_SetVisible ( Resource __instance )
8080 {
81- string tribe ;
82- //__result = ModLoader.sprites["fruit_minerskagg_"];
83- try
81+ Sprite ? sprite = GetSpriteForTerrainOrResource ( __instance . tile . data , EnumCache < ResourceData . Type > . GetName ( __instance . data . type ) . ToLower ( ) ) ;
82+ if ( sprite != null )
8483 {
85- if ( ModLoader . gldDictionaryInversed . ContainsKey ( ModLoader . climateToTribeData [ __instance . tile . data . climate ] ) )
86- {
87- tribe = ModLoader . gldDictionaryInversed [ ModLoader . climateToTribeData [ __instance . tile . data . climate ] ] ;
88- }
89- else
84+ __instance . Sprite = sprite ;
85+ }
86+ }
87+
88+ [ HarmonyPostfix ]
89+ [ HarmonyPatch ( typeof ( TerrainRenderer ) , nameof ( TerrainRenderer . UpdateGraphics ) ) ]
90+ private static void TerrainRenderer_UpdateGraphics ( TerrainRenderer __instance , Tile tile )
91+ {
92+ string ? terrainName = null ;
93+ if ( tile . data . terrain == Polytopia . Data . TerrainData . Type . Forest || tile . data . terrain == Polytopia . Data . TerrainData . Type . Mountain )
94+ {
95+ terrainName = "field" ;
96+ }
97+ Sprite ? sprite = GetSpriteForTerrainOrResource ( tile . data , terrainName ) ;
98+ if ( sprite != null )
99+ {
100+ __instance . spriteRenderer . Sprite = sprite ;
101+ }
102+ }
103+
104+ [ HarmonyPostfix ]
105+ [ HarmonyPatch ( typeof ( PolytopiaSpriteRenderer ) , nameof ( PolytopiaSpriteRenderer . ForceUpdateMesh ) ) ]
106+ private static void PolytopiaSpriteRenderer_ForceUpdateMesh ( PolytopiaSpriteRenderer __instance )
107+ {
108+ Transform terrainTranform = __instance . transform . parent ;
109+ if ( terrainTranform != null )
110+ {
111+ Transform tileTransform = terrainTranform . parent ;
112+ if ( tileTransform != null )
90113 {
91- tribe = ( ( TribeData . Type ) __instance . tile . data . climate ) . ToString ( ) ;
114+ Tile tile = tileTransform . GetComponent < Tile > ( ) ;
115+ if ( tile != null )
116+ {
117+ if ( __instance . sprite . name . Contains ( "Forest" ) || __instance . sprite . name . Contains ( "Mountain" ) || __instance . sprite . name . Contains ( "forest" ) || __instance . sprite . name . Contains ( "mountain" ) )
118+ {
119+ Sprite ? sprite = GetSpriteForTerrainOrResource ( tile . data ) ;
120+ if ( sprite != null )
121+ {
122+ __instance . Sprite = sprite ;
123+ }
124+ }
125+ }
92126 }
93- Sprite ? sprite = ModLoader . GetSprite (
94- EnumCache < ResourceData . Type > . GetName ( __instance . data . type ) . ToLower ( ) ,
95- tribe
96- ) ;
97- if ( sprite != null )
127+ }
128+ if ( __instance . atlasName != null )
129+ {
130+ if ( string . IsNullOrEmpty ( __instance . atlasName ) )
98131 {
99- __instance . Sprite = sprite ;
132+ MaterialPropertyBlock materialPropertyBlock ;
133+ materialPropertyBlock = new MaterialPropertyBlock ( ) ;
134+ materialPropertyBlock . SetVector ( "_Flip" , new Vector4 ( 1f , 1f , 0f , 0f ) ) ;
135+ materialPropertyBlock . SetTexture ( "_MainTex" , __instance . sprite . texture ) ;
136+ __instance . meshRenderer . SetPropertyBlock ( materialPropertyBlock ) ;
100137 }
101138 }
102- catch { }
103139 }
104140
105141 [ HarmonyPostfix ]
@@ -196,21 +232,31 @@ private static void InteractionBar_AddImprovementButtons(InteractionBar __instan
196232 // }
197233 }
198234
199- [ HarmonyPostfix ]
200- [ HarmonyPatch ( typeof ( PolytopiaSpriteRenderer ) , nameof ( PolytopiaSpriteRenderer . ForceUpdateMesh ) ) ]
201- private static void PolytopiaSpriteRenderer_ForceUpdateMesh ( PolytopiaSpriteRenderer __instance )
235+ public static Sprite ? GetSpriteForTerrainOrResource ( TileData tileData , string ? name = null )
202236 {
203- if ( __instance . atlasName != null )
237+ string tribe ;
238+ if ( name == null )
204239 {
205- if ( string . IsNullOrEmpty ( __instance . atlasName ) )
240+ name = EnumCache < Polytopia . Data . TerrainData . Type > . GetName ( tileData . terrain ) . ToLower ( ) ;
241+ }
242+ try
243+ {
244+ if ( ModLoader . gldDictionaryInversed . ContainsKey ( ModLoader . climateToTribeData [ tileData . climate ] ) )
206245 {
207- MaterialPropertyBlock materialPropertyBlock ;
208- materialPropertyBlock = new MaterialPropertyBlock ( ) ;
209- materialPropertyBlock . SetVector ( "_Flip" , new Vector4 ( 1f , 1f , 0f , 0f ) ) ;
210- materialPropertyBlock . SetTexture ( "_MainTex" , __instance . sprite . texture ) ;
211- __instance . meshRenderer . SetPropertyBlock ( materialPropertyBlock ) ;
246+ tribe = ModLoader . gldDictionaryInversed [ ModLoader . climateToTribeData [ tileData . climate ] ] ;
212247 }
248+ else
249+ {
250+ tribe = ( ( TribeData . Type ) tileData . climate ) . ToString ( ) ;
251+ }
252+ Sprite ? sprite = ModLoader . GetSprite (
253+ name ,
254+ tribe
255+ ) ;
256+ return sprite ;
213257 }
258+ catch { }
259+ return null ;
214260 }
215261
216262 public static Sprite BuildSprite ( byte [ ] data , Vector2 pivot )
0 commit comments