mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Make option to generate mesh colliders
This commit is contained in:
parent
f3a0378217
commit
dd68fabf1c
@ -58,7 +58,7 @@ namespace NewHorizons.Builder.Props
|
|||||||
return MakeDetail(go, sector, prefab, position, rotation, scale, alignWithNormal);
|
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;
|
if (prefab == null) return null;
|
||||||
|
|
||||||
@ -80,35 +80,42 @@ namespace NewHorizons.Builder.Props
|
|||||||
sector.OnOccupantEnterSector += ((SectorDetector sd) => StreamingManager.LoadStreamingAssets(assetBundle));
|
sector.OnOccupantEnterSector += ((SectorDetector sd) => StreamingManager.LoadStreamingAssets(assetBundle));
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach(var component in prop.GetComponents<SectoredMonoBehaviour>())
|
foreach(var component in prop.GetComponents<Component>().Concat(prop.GetComponentsInChildren<Component>()))
|
||||||
{
|
{
|
||||||
component.SetSector(sector);
|
// Enable all children or something
|
||||||
if(component is AnglerfishController)
|
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
|
try
|
||||||
{
|
{
|
||||||
(component as AnglerfishController)._chaseSpeed += OWPhysics.CalculateOrbitVelocity(go.GetAttachedOWRigidbody(), go.GetComponent<AstroObject>().GetPrimaryBody().GetAttachedOWRigidbody()).magnitude;
|
(component as AnglerfishController)._chaseSpeed += OWPhysics.CalculateOrbitVelocity(go.GetAttachedOWRigidbody(), go.GetComponent<AstroObject>().GetPrimaryBody().GetAttachedOWRigidbody()).magnitude;
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Logger.LogError($"Couldn't update AnglerFish chase speed: {e.Message}");
|
Logger.LogError($"Couldn't update AnglerFish chase speed: {e.Message}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
foreach (var component in prop.GetComponentsInChildren<SectoredMonoBehaviour>())
|
|
||||||
{
|
|
||||||
component.SetSector(sector);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// Mesh colliders
|
||||||
foreach (var component in prop.GetComponentsInChildren<Component>())
|
if (generateColliders)
|
||||||
{
|
{
|
||||||
// TODO: Make this work or smthng
|
if(component is MeshFilter && component.gameObject.GetComponent<MeshCollider>() == null)
|
||||||
if (component is GhostIK) (component as GhostIK).enabled = false;
|
{
|
||||||
if(component is GhostEffects) (component as GhostEffects).enabled = false;
|
var mc = component.gameObject.AddComponent<MeshCollider>();
|
||||||
|
mc.sharedMesh = (component as MeshFilter).mesh;
|
||||||
var enabledField = component.GetType().GetField("enabled");
|
}
|
||||||
if(enabledField != null && enabledField.FieldType == typeof(bool)) enabledField.SetValue(component, true);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
2
NewHorizons/External/PropModule.cs
vendored
2
NewHorizons/External/PropModule.cs
vendored
@ -21,6 +21,7 @@ namespace NewHorizons.External
|
|||||||
public MVector3 offset;
|
public MVector3 offset;
|
||||||
public MVector3 rotation;
|
public MVector3 rotation;
|
||||||
public float scale { get; set; } = 1f;
|
public float scale { get; set; } = 1f;
|
||||||
|
public bool generateColliders = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class DetailInfo
|
public class DetailInfo
|
||||||
@ -33,6 +34,7 @@ namespace NewHorizons.External
|
|||||||
public MVector3 rotation;
|
public MVector3 rotation;
|
||||||
public float scale { get; set; } = 1f;
|
public float scale { get; set; } = 1f;
|
||||||
public bool alignToNormal;
|
public bool alignToNormal;
|
||||||
|
public bool generateColliders = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class GeyserInfo
|
public class GeyserInfo
|
||||||
|
|||||||
@ -660,6 +660,11 @@
|
|||||||
"scale": {
|
"scale": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"default": 1
|
"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",
|
"type": "boolean",
|
||||||
"description": "Do we override rotation and try to automatically align this object to stand upright on the body's surface?",
|
"description": "Do we override rotation and try to automatically align this object to stand upright on the body's surface?",
|
||||||
"default": false
|
"default": false
|
||||||
|
},
|
||||||
|
"generateColliders": {
|
||||||
|
"type": "bool",
|
||||||
|
"default": false,
|
||||||
|
"description": "For each mesh filter found here should we make a mesh collider?"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user