From ec5b475d019f5ab83cd016aeb9228a798d3ad8a7 Mon Sep 17 00:00:00 2001 From: Feiryn <98115666+feiryn@users.noreply.github.com> Date: Mon, 16 Sep 2024 22:57:31 +0200 Subject: [PATCH] Fix bug with blob prefab --- LethalMon/Behaviours/BlobTamedBehaviour.cs | 101 +++++++++++---------- LethalMon/Utils.cs | 10 +- 2 files changed, 57 insertions(+), 54 deletions(-) diff --git a/LethalMon/Behaviours/BlobTamedBehaviour.cs b/LethalMon/Behaviours/BlobTamedBehaviour.cs index 6d9d0ca..3de2638 100644 --- a/LethalMon/Behaviours/BlobTamedBehaviour.cs +++ b/LethalMon/Behaviours/BlobTamedBehaviour.cs @@ -73,62 +73,71 @@ internal static void AddPhysicsSectionToPrefab() { if (PhysicsRegionAdded) return; - var enemyType = Utils.GetEnemyType(Utils.Enemy.Blob); - if (enemyType == null) + var enemyTypes = Utils.GetEnemyTypes(Utils.Enemy.Blob); + if (enemyTypes.Length == 0) { - LethalMon.Log("Unable to get blob prefab.", LethalMon.LogType.Error); + LethalMon.Log("Unable to get blob types.", LethalMon.LogType.Error); return; } LethalMon.Log("Tamed Blob: CreatePhysicsRegion"); - // Root object + foreach (var enemyType in enemyTypes) + { + if (enemyType.enemyPrefab == null) + { + LethalMon.Log("Unable to get blob prefab.", LethalMon.LogType.Error); + continue; + } + + // Root object #if _DEBUG - GameObject rootObject = GameObject.CreatePrimitive(PrimitiveType.Cube); + GameObject rootObject = GameObject.CreatePrimitive(PrimitiveType.Cube); - if (rootObject.TryGetComponent(out MeshRenderer meshRenderer)) - { - meshRenderer.material = new Material(Shader.Find("HDRP/Lit")) { color = Color.red }; - meshRenderer.enabled = true; - } - rootObject.name = PhysicsObjectName; - var rootCollider = rootObject.GetComponent(); + if (rootObject.TryGetComponent(out MeshRenderer meshRenderer)) + { + meshRenderer.material = new Material(Shader.Find("HDRP/Lit")) { color = Color.red }; + meshRenderer.enabled = true; + } + rootObject.name = PhysicsObjectName; + var rootCollider = rootObject.GetComponent(); #else - var rootObject = new GameObject(PhysicsObjectName); - var rootCollider = rootObject.AddComponent(); + var rootObject = new GameObject(PhysicsObjectName); + var rootCollider = rootObject.AddComponent(); #endif - rootObject.layer = (int)Utils.LayerMasks.Mask.Room; - rootObject.transform.SetParent(enemyType.enemyPrefab.transform, false); - rootCollider.isTrigger = false; - - // ItemDropCollider - var itemDropColliderObject = new GameObject("ItemDropCollider"); - itemDropColliderObject.layer = (int)Utils.LayerMasks.Mask.Triggers; - var itemDropCollider = itemDropColliderObject.AddComponent(); - itemDropCollider.isTrigger = true; - itemDropColliderObject.transform.localScale = new(1f, 1.5f, 1f); - itemDropColliderObject.transform.SetParent(rootObject.transform, false); - - var physicsRegionObject = new GameObject("PlayerPhysicsRegion"); - physicsRegionObject.layer = (int)Utils.LayerMasks.Mask.Triggers; - var physicsCollider = physicsRegionObject.AddComponent(); - physicsCollider.isTrigger = true; - physicsRegionObject.transform.localScale = new(1f, 1.5f, 1f); - physicsRegionObject.transform.SetParent(rootObject.transform, false); - - var physicsRegion = physicsRegionObject.AddComponent(); - physicsRegion.parentNetworkObject = enemyType.enemyPrefab.GetComponent(); - physicsRegion.physicsTransform = enemyType.enemyPrefab.gameObject.transform; - physicsRegion.allowDroppingItems = true; - physicsRegion.itemDropCollider = itemDropCollider; - physicsRegion.physicsCollider = physicsCollider; - physicsRegion.disablePhysicsRegion = false; - physicsRegion.priority = 1; - physicsRegion.maxTippingAngle = 360; - - rootObject.SetActive(false); - - PhysicsRegionAdded = true; + rootObject.layer = (int)Utils.LayerMasks.Mask.Room; + rootObject.transform.SetParent(enemyType.enemyPrefab.transform, false); + rootCollider.isTrigger = false; + + // ItemDropCollider + var itemDropColliderObject = new GameObject("ItemDropCollider"); + itemDropColliderObject.layer = (int)Utils.LayerMasks.Mask.Triggers; + var itemDropCollider = itemDropColliderObject.AddComponent(); + itemDropCollider.isTrigger = true; + itemDropColliderObject.transform.localScale = new(1f, 1.5f, 1f); + itemDropColliderObject.transform.SetParent(rootObject.transform, false); + + var physicsRegionObject = new GameObject("PlayerPhysicsRegion"); + physicsRegionObject.layer = (int)Utils.LayerMasks.Mask.Triggers; + var physicsCollider = physicsRegionObject.AddComponent(); + physicsCollider.isTrigger = true; + physicsRegionObject.transform.localScale = new(1f, 1.5f, 1f); + physicsRegionObject.transform.SetParent(rootObject.transform, false); + + var physicsRegion = physicsRegionObject.AddComponent(); + physicsRegion.parentNetworkObject = enemyType.enemyPrefab.GetComponent(); + physicsRegion.physicsTransform = enemyType.enemyPrefab.gameObject.transform; + physicsRegion.allowDroppingItems = true; + physicsRegion.itemDropCollider = itemDropCollider; + physicsRegion.physicsCollider = physicsCollider; + physicsRegion.disablePhysicsRegion = false; + physicsRegion.priority = 1; + physicsRegion.maxTippingAngle = 360; + + rootObject.SetActive(false); + + PhysicsRegionAdded = true; + } } internal override void OnEscapedFromBall(PlayerControllerB playerWhoThrewBall) diff --git a/LethalMon/Utils.cs b/LethalMon/Utils.cs index b411219..b17a26f 100644 --- a/LethalMon/Utils.cs +++ b/LethalMon/Utils.cs @@ -194,16 +194,10 @@ public static bool IsHost #region Enemy public static List EnemyTypes => Resources.FindObjectsOfTypeAll().ToList(); - public static EnemyType? GetEnemyType(Enemy enemy) + public static EnemyType[] GetEnemyTypes(Enemy enemy) { var enemyName = enemy.ToString(); - foreach(var enemyType in EnemyTypes) - { - if (enemyType.name == enemyName) - return enemyType; - } - - return null; + return EnemyTypes.Where(e => e.name == enemyName).ToArray(); } public static void OpenDoorsAsEnemyAroundPosition(Vector3 position)