|
8 | 8 | using PolyMod.Json; |
9 | 9 | using System.Text.Json.Serialization; |
10 | 10 | using UnityEngine.EventSystems; |
| 11 | +using PolytopiaBackendBase.Auth; |
11 | 12 |
|
12 | 13 | namespace PolyMod.Managers; |
13 | 14 |
|
@@ -428,27 +429,28 @@ private static void CityRenderer_GetHouse(ref PolytopiaSpriteRenderer __result, |
428 | 429 | /// <summary>Provides custom sprites for houses in the UI city renderer.</summary> |
429 | 430 | [HarmonyPostfix] |
430 | 431 | [HarmonyPatch(typeof(UICityRenderer), nameof(UICityRenderer.GetResource))] |
431 | | - private static void UICityRenderer_GetResource(ref GameObject __result, string baseName, TribeData.Type tribe, SkinType skin) |
| 432 | + private static void UICityRenderer_GetResource(ref GameObject __result, Il2CppInterop.Runtime.InteropTypes.Arrays.Il2CppReferenceArray<SpriteAddress> spriteAddresses) |
432 | 433 | { |
433 | | - Image imageComponent = __result.GetComponent<Image>(); |
434 | | - string[] tokens = baseName.Split('_'); |
435 | | - if (tokens.Length > 0) |
| 434 | + foreach (var address in spriteAddresses) |
436 | 435 | { |
437 | | - if (tokens[0] == "House") |
| 436 | + Image imageComponent = __result.GetComponent<Image>(); |
| 437 | + string[] tokens = address.sprite.Split('_'); |
| 438 | + if (tokens.Length == 3 && tokens[0] == "House") |
438 | 439 | { |
439 | | - int level = 0; |
440 | | - if (tokens.Length > 1) |
| 440 | + if (tokens[0] == "House") |
441 | 441 | { |
442 | | - _ = int.TryParse(tokens[1], out level); |
443 | | - } |
444 | | - |
445 | | - Sprite? sprite = Registry.GetSprite("house", Util.GetStyle(tribe, skin), level); |
446 | | - if (sprite == null) |
447 | | - { |
448 | | - return; |
| 442 | + string style = tokens[1]; |
| 443 | + if(int.TryParse(tokens[2], out int level) && !string.IsNullOrEmpty(style)) |
| 444 | + { |
| 445 | + Sprite? sprite = Registry.GetSprite("house", style, level); |
| 446 | + if (sprite == null) |
| 447 | + { |
| 448 | + return; |
| 449 | + } |
| 450 | + imageComponent.sprite = sprite; |
| 451 | + imageComponent.SetNativeSize(); |
| 452 | + } |
449 | 453 | } |
450 | | - imageComponent.sprite = sprite; |
451 | | - imageComponent.SetNativeSize(); |
452 | 454 | } |
453 | 455 | } |
454 | 456 | } |
@@ -514,12 +516,17 @@ private static void GameInfoRow_LoadFaceIcon(GameInfoRow __instance, TribeData.T |
514 | 516 |
|
515 | 517 | /// <summary>Provides custom sprites for player info icons.</summary> |
516 | 518 | [HarmonyPostfix] |
517 | | - [HarmonyPatch(typeof(PlayerInfoIcon), nameof(PlayerInfoIcon.SetData), typeof(TribeData.Type), typeof(SkinType), typeof(SpriteData.SpecialFaceIcon), typeof(Color), typeof(DiplomacyRelationState), typeof(PlayerInfoIcon.Mood))] |
518 | | - private static void PlayerInfoIcon_SetData(PlayerInfoIcon __instance, TribeData.Type tribe, SkinType skin, SpriteData.SpecialFaceIcon face, Color color, DiplomacyRelationState diplomacyState, PlayerInfoIcon.Mood mood) |
| 519 | + [HarmonyPatch(typeof(PlayerInfoIcon), nameof(PlayerInfoIcon.SetData))] |
| 520 | + private static void PlayerInfoIcon_SetData(PlayerInfoIcon __instance, PlayerState player, PlayerState otherPlayer, PlayerInfoIcon.Mood mood, bool shouldShowDiplomaticState, bool forceKnownPlayer) |
519 | 521 | { |
520 | | - if (face == SpriteData.SpecialFaceIcon.neutral) |
| 522 | + GameState gameState = GameManager.GameState; |
| 523 | + bool flag = player.IsAlive(gameState); |
| 524 | + PlayerState localPlayer = GameManager.LocalPlayer; |
| 525 | + bool flag2 = localPlayer.KnowsPlayer(player.Id) || forceKnownPlayer; |
| 526 | + |
| 527 | + if (flag && !(localPlayer.Id != player.Id && !flag2)) |
521 | 528 | { |
522 | | - Sprite? sprite = Registry.GetSprite("head", Util.GetStyle(tribe, skin)); |
| 529 | + Sprite? sprite = Registry.GetSprite("head", Util.GetStyle(player.tribe, player.skinType)); |
523 | 530 | if (sprite != null) |
524 | 531 | { |
525 | 532 | __instance.HeadImage.sprite = sprite; |
|
0 commit comments