diff --git a/NewHorizons/Builder/Props/PropBuilder.cs b/NewHorizons/Builder/Props/PropBuilder.cs index a23afc08..5fc08cb5 100644 --- a/NewHorizons/Builder/Props/PropBuilder.cs +++ b/NewHorizons/Builder/Props/PropBuilder.cs @@ -58,7 +58,7 @@ namespace NewHorizons.Builder.Props return MakeDetail(go, sector, prefab, position, rotation, scale, alignWithNormal); } - public static GameObject MakeDetail(GameObject go, Sector sector, GameObject prefab, MVector3 position, MVector3 rotation, float scale, bool alignWithNormal, bool snapToSurface = false) + public static GameObject MakeDetail(GameObject go, Sector sector, GameObject prefab, MVector3 position, MVector3 rotation, float scale, bool alignWithNormal, bool snapToSurface, bool generateColliders) { if (prefab == null) return null; @@ -80,35 +80,42 @@ namespace NewHorizons.Builder.Props sector.OnOccupantEnterSector += ((SectorDetector sd) => StreamingManager.LoadStreamingAssets(assetBundle)); } - foreach(var component in prop.GetComponents()) + foreach(var component in prop.GetComponents().Concat(prop.GetComponentsInChildren())) { - component.SetSector(sector); - if(component is AnglerfishController) + // Enable all children or something + var enabledField = component.GetType().GetField("enabled"); + if (enabledField != null && enabledField.FieldType == typeof(bool)) enabledField.SetValue(component, true); + + // TODO: Make this work or smthng + if (component is GhostIK) (component as GhostIK).enabled = false; + if (component is GhostEffects) (component as GhostEffects).enabled = false; + + if(component is SectoredMonoBehaviour) + { + (component as SectoredMonoBehaviour).SetSector(sector); + } + + if (component is AnglerfishController) { try { (component as AnglerfishController)._chaseSpeed += OWPhysics.CalculateOrbitVelocity(go.GetAttachedOWRigidbody(), go.GetComponent().GetPrimaryBody().GetAttachedOWRigidbody()).magnitude; } - catch(Exception e) + catch (Exception e) { Logger.LogError($"Couldn't update AnglerFish chase speed: {e.Message}"); } } - } - foreach (var component in prop.GetComponentsInChildren()) - { - component.SetSector(sector); - } - - foreach (var component in prop.GetComponentsInChildren()) - { - // TODO: Make this work or smthng - if (component is GhostIK) (component as GhostIK).enabled = false; - if(component is GhostEffects) (component as GhostEffects).enabled = false; - - var enabledField = component.GetType().GetField("enabled"); - if(enabledField != null && enabledField.FieldType == typeof(bool)) enabledField.SetValue(component, true); + // Mesh colliders + if (generateColliders) + { + if(component is MeshFilter && component.gameObject.GetComponent() == null) + { + var mc = component.gameObject.AddComponent(); + mc.sharedMesh = (component as MeshFilter).mesh; + } + } } diff --git a/NewHorizons/External/PropModule.cs b/NewHorizons/External/PropModule.cs index fae6e3f6..20c7e866 100644 --- a/NewHorizons/External/PropModule.cs +++ b/NewHorizons/External/PropModule.cs @@ -21,6 +21,7 @@ namespace NewHorizons.External public MVector3 offset; public MVector3 rotation; public float scale { get; set; } = 1f; + public bool generateColliders = false; } public class DetailInfo @@ -33,6 +34,7 @@ namespace NewHorizons.External public MVector3 rotation; public float scale { get; set; } = 1f; public bool alignToNormal; + public bool generateColliders = false; } public class GeyserInfo diff --git a/NewHorizons/schema.json b/NewHorizons/schema.json index f8b7f42c..342aff36 100644 --- a/NewHorizons/schema.json +++ b/NewHorizons/schema.json @@ -660,6 +660,11 @@ "scale": { "type": "number", "default": 1 + }, + "generateColliders": { + "type": "bool", + "default": false, + "description": "For each mesh filter found here should we make a mesh collider?" } } } @@ -723,6 +728,11 @@ "type": "boolean", "description": "Do we override rotation and try to automatically align this object to stand upright on the body's surface?", "default": false + }, + "generateColliders": { + "type": "bool", + "default": false, + "description": "For each mesh filter found here should we make a mesh collider?" } } }