mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
fixed box shape size issues
This commit is contained in:
parent
aa292ebbfa
commit
2a8897a997
@ -10,6 +10,8 @@ using System.Text;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
|
using Logger = NewHorizons.Utility.Logger;
|
||||||
|
|
||||||
namespace NewHorizons.Builder.Props
|
namespace NewHorizons.Builder.Props
|
||||||
{
|
{
|
||||||
public static class QuantumBuilder
|
public static class QuantumBuilder
|
||||||
@ -70,12 +72,13 @@ namespace NewHorizons.Builder.Props
|
|||||||
if (prop.GetComponentInChildren<ShapeVisibilityTracker>() != null) continue;
|
if (prop.GetComponentInChildren<ShapeVisibilityTracker>() != null) continue;
|
||||||
|
|
||||||
var boxBounds = GetBoundsOfSelfAndChildMeshes(prop);
|
var boxBounds = GetBoundsOfSelfAndChildMeshes(prop);
|
||||||
var boxShape = prop.AddComponent<BoxShape>();
|
//var boxShape = prop.AddComponent<BoxShape>();
|
||||||
boxShape.center = boxBounds.center;
|
//boxShape.center = boxBounds.center;
|
||||||
boxShape.extents = boxBounds.size;
|
//boxShape.extents = boxBounds.size;
|
||||||
|
|
||||||
prop.AddComponent<ShapeVisibilityTracker>();
|
//prop.AddComponent<ShapeVisibilityTracker>();
|
||||||
prop.AddComponent<BoxShapeVisualizer>();
|
//prop.AddComponent<BoxShapeVisualizer>();
|
||||||
|
AddBoundsVisibility(prop);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,16 +100,15 @@ namespace NewHorizons.Builder.Props
|
|||||||
|
|
||||||
if (prop.GetComponentInChildren<ShapeVisibilityTracker>() != null) continue;
|
if (prop.GetComponentInChildren<ShapeVisibilityTracker>() != null) continue;
|
||||||
|
|
||||||
var boxBounds = GetBoundsOfSelfAndChildMeshes(prop);
|
//var boxBounds = GetBoundsOfSelfAndChildMeshes(prop);
|
||||||
var boxShape = prop.AddComponent<BoxShape>();
|
//var boxShape = prop.AddComponent<BoxShape>();
|
||||||
boxShape.center = (boxBounds.center);
|
//boxShape.center = (boxBounds.center);
|
||||||
boxShape.extents = boxBounds.size;
|
//boxShape.extents = boxBounds.size;
|
||||||
prop.AddComponent<BoxShapeVisualizer>();
|
//prop.AddComponent<BoxShapeVisualizer>();
|
||||||
|
|
||||||
prop.AddComponent<ShapeVisibilityTracker>();
|
//prop.AddComponent<ShapeVisibilityTracker>();
|
||||||
|
|
||||||
var goo = new GameObject("Visibility Tracker Point - " + prop.name);
|
AddBoundsVisibility(prop);
|
||||||
goo.transform.position = prop.transform.TransformPoint(boxShape.center);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (quantumGroup.hasEmptyState)
|
if (quantumGroup.hasEmptyState)
|
||||||
@ -151,18 +153,64 @@ namespace NewHorizons.Builder.Props
|
|||||||
NewHorizons.Utility.Logger.Log($"Shuffled objects {shuffle._shuffledObjects}, propsInGroup count {propsInGroup.Count()}");
|
NewHorizons.Utility.Logger.Log($"Shuffled objects {shuffle._shuffledObjects}, propsInGroup count {propsInGroup.Count()}");
|
||||||
shuffle.Awake(); // this doesn't get called on its own for some reason
|
shuffle.Awake(); // this doesn't get called on its own for some reason
|
||||||
|
|
||||||
var boxBounds = GetBoundsOfSelfAndChildMeshes(shuffleParent); // TODO: add a box shape to each prop instead of to the parent
|
//var boxBounds = GetBoundsOfSelfAndChildMeshes(shuffleParent); // TODO: add a box shape to each prop instead of to the parent
|
||||||
var boxShape = shuffleParent.AddComponent<BoxShape>();
|
//var boxShape = shuffleParent.AddComponent<BoxShape>();
|
||||||
boxShape.center = boxBounds.center;
|
//boxShape.center = boxBounds.center;
|
||||||
boxShape.extents = boxBounds.size;
|
//boxShape.extents = boxBounds.size;
|
||||||
//Logger.Log();
|
////Logger.Log();
|
||||||
|
|
||||||
shuffleParent.AddComponent<BoxShapeVisualizer>();
|
//shuffleParent.AddComponent<BoxShapeVisualizer>();
|
||||||
|
|
||||||
shuffleParent.AddComponent<ShapeVisibilityTracker>();
|
//shuffleParent.AddComponent<ShapeVisibilityTracker>();
|
||||||
|
AddBoundsVisibility(shuffleParent);
|
||||||
shuffleParent.SetActive(true);
|
shuffleParent.SetActive(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void AddBoundsVisibility(GameObject g)
|
||||||
|
{
|
||||||
|
var meshFilters = g.GetComponentsInChildren<MeshFilter>();
|
||||||
|
foreach(var meshFilter in meshFilters)
|
||||||
|
{
|
||||||
|
//var copy = GameObject.Instantiate(meshFilter.gameObject);
|
||||||
|
//copy.transform.parent = meshFilter.transform.parent;
|
||||||
|
|
||||||
|
//copy.AddComponent<RendererVisibilityTracker>();
|
||||||
|
|
||||||
|
//var mesh = new Mesh();
|
||||||
|
//mesh.vertices = meshFilter.mesh.vertices;
|
||||||
|
//mesh.RecalculateBounds();
|
||||||
|
//NewHorizons.Utility.Logger.Log("go name: " + meshFilter.gameObject.name + " copy bounds size: " + mesh.bounds.size);
|
||||||
|
//NewHorizons.Utility.Logger.Log("go name: " + meshFilter.gameObject.name + " original bounds size: " + meshFilter.mesh.bounds.size);
|
||||||
|
|
||||||
|
var bounds = meshFilter.mesh.bounds;
|
||||||
|
Logger.Log("go name: " + meshFilter.gameObject.name + " original bounds size: " + bounds.max + " " + bounds.min);
|
||||||
|
|
||||||
|
var box = meshFilter.gameObject.AddComponent<BoxShape>();
|
||||||
|
//meshFilter.mesh.RecalculateBounds();
|
||||||
|
meshFilter.gameObject.AddComponent<ShapeVisibilityTracker>();
|
||||||
|
meshFilter.gameObject.AddComponent<BoxShapeVisualizer>();
|
||||||
|
|
||||||
|
box.center = bounds.center;
|
||||||
|
box.size = bounds.size;
|
||||||
|
NewHorizons.Utility.Logger.Log("go name: " + meshFilter.gameObject.name + " bounds size: " + bounds.size + " box size: " + box.size);
|
||||||
|
|
||||||
|
var fixer = meshFilter.gameObject.AddComponent<BoxShapeFixer>();
|
||||||
|
fixer.shape = box;
|
||||||
|
fixer.meshFilter = meshFilter;
|
||||||
|
|
||||||
|
//Main.Instance.ModHelper.Events.Unity.FireInNUpdates(() =>
|
||||||
|
// {
|
||||||
|
// var bounds = meshFilter.mesh.bounds;
|
||||||
|
// box.center = bounds.center;
|
||||||
|
// box.size = bounds.size;
|
||||||
|
// NewHorizons.Utility.Logger.Log("go name: " + meshFilter.gameObject.name + " bounds size: " + bounds.size + " box size: " + box.size);
|
||||||
|
// //box.RecalculateLocalBounds();
|
||||||
|
// },
|
||||||
|
// 20
|
||||||
|
//);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static Bounds GetBoundsOfSelfAndChildMeshes(GameObject g)
|
public static Bounds GetBoundsOfSelfAndChildMeshes(GameObject g)
|
||||||
{
|
{
|
||||||
var meshFilters = g.GetComponentsInChildren<MeshFilter>();
|
var meshFilters = g.GetComponentsInChildren<MeshFilter>();
|
||||||
@ -182,6 +230,8 @@ namespace NewHorizons.Builder.Props
|
|||||||
{
|
{
|
||||||
var bounds = m.mesh.bounds;
|
var bounds = m.mesh.bounds;
|
||||||
|
|
||||||
|
Logger.Log(m.gameObject.name + " " + bounds.min + " " + bounds.max);
|
||||||
|
|
||||||
var localCorners = new Vector3[]
|
var localCorners = new Vector3[]
|
||||||
{
|
{
|
||||||
bounds.min,
|
bounds.min,
|
||||||
@ -201,4 +251,37 @@ namespace NewHorizons.Builder.Props
|
|||||||
return globalCorners.Select(globalCorner => relativeTo.transform.InverseTransformPoint(globalCorner)).ToArray();
|
return globalCorners.Select(globalCorner => relativeTo.transform.InverseTransformPoint(globalCorner)).ToArray();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class BoxShapeFixer : MonoBehaviour
|
||||||
|
{
|
||||||
|
bool _fixed = false;
|
||||||
|
public BoxShape shape;
|
||||||
|
public MeshFilter meshFilter;
|
||||||
|
public SkinnedMeshRenderer skinnedMeshRenderer;
|
||||||
|
|
||||||
|
void Update()
|
||||||
|
{
|
||||||
|
if (meshFilter == null && skinnedMeshRenderer == null) { Logger.Log("Useless BoxShapeFixer, destroying"); GameObject.DestroyImmediate(this); }
|
||||||
|
|
||||||
|
Mesh sharedMesh = null;
|
||||||
|
if (meshFilter != null) sharedMesh = meshFilter.sharedMesh;
|
||||||
|
if (skinnedMeshRenderer != null) sharedMesh = skinnedMeshRenderer.sharedMesh;
|
||||||
|
|
||||||
|
if (sharedMesh == null) return;
|
||||||
|
if (sharedMesh.bounds.size == Vector3.zero) return;
|
||||||
|
|
||||||
|
shape.size = sharedMesh.bounds.size;
|
||||||
|
shape.center = sharedMesh.bounds.center;
|
||||||
|
|
||||||
|
GameObject.DestroyImmediate(this);
|
||||||
|
|
||||||
|
//// TODO: try checking for sharedMesh
|
||||||
|
//if (_fixed) return;
|
||||||
|
|
||||||
|
//shape.size = meshFilter.mesh.bounds.size;
|
||||||
|
//shape.center = meshFilter.mesh.bounds.center;
|
||||||
|
|
||||||
|
//_fixed = (shape.size != Vector3.zero);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,7 +17,7 @@ namespace NewHorizons.Utility
|
|||||||
box = GetComponent<BoxShape>();
|
box = GetComponent<BoxShape>();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnGUI()
|
void OnRenderObject()
|
||||||
{
|
{
|
||||||
Popcron.Gizmos.Cube(transform.TransformPoint(box.center), transform.rotation, box.size);
|
Popcron.Gizmos.Cube(transform.TransformPoint(box.center), transform.rotation, box.size);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user