Skip to content

Commit 5861de0

Browse files
committed
Implemented terrains and resources for level
1 parent 72e4e3f commit 5861de0

File tree

1 file changed

+72
-26
lines changed

1 file changed

+72
-26
lines changed

src/SpriteLoader.cs

Lines changed: 72 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)