From 4ff162e3afa472ad15594ac689933339f98861fc Mon Sep 17 00:00:00 2001 From: Peter Ruibal Date: Sun, 6 Mar 2022 17:26:03 -0800 Subject: [PATCH] Add m_ObjectType, SuperCustomProperties to Objects' Colliders Currently, there is no great way to access the collision type OR any custom properties set on the collisions at runtime. Let's: - Add a new public field, m_ObjectType to SuperColliderComponent. - Add a SuperCustomProperties component to our collision subobjects. --- .../Extensions/CollisionObjectExtensions.cs | 42 ++++++++++++++++--- .../Scripts/SuperColliderComponent.cs | 1 + 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/SuperTiled2Unity/Assets/SuperTiled2Unity/Scripts/Editor/Extensions/CollisionObjectExtensions.cs b/SuperTiled2Unity/Assets/SuperTiled2Unity/Scripts/Editor/Extensions/CollisionObjectExtensions.cs index fbb04c2e..dd5d65df 100644 --- a/SuperTiled2Unity/Assets/SuperTiled2Unity/Scripts/Editor/Extensions/CollisionObjectExtensions.cs +++ b/SuperTiled2Unity/Assets/SuperTiled2Unity/Scripts/Editor/Extensions/CollisionObjectExtensions.cs @@ -1,5 +1,6 @@ using UnityEngine; using SuperTiled2Unity.Editor.Geometry; +using System.Linq; namespace SuperTiled2Unity.Editor { @@ -27,7 +28,7 @@ public static void AddCollider(this CollisionObject collision, SuperTile tile, G } else if (collision.CollisionShapeType == CollisionShapeType.Point) { - AddPointCollider(go, collision, importContext); + AddPointCollider(go, collision, tile, importContext); } // Additional settings on the collider that was just added @@ -55,6 +56,10 @@ private static void AddPolygonCollider(GameObject go, CollisionObject collision, var convexPolygons = composition.Compose(triangles); PolygonUtils.AddCompositePolygonCollider(go, convexPolygons, importContext); + foreach (var superCollider in go.GetComponentsInChildren()) { + superCollider.m_ObjectType = collision.m_ObjectType; + AddSuperCustomProperties(go, collision, tile, importContext); + } } private static void AddEdgeCollider(GameObject go, CollisionObject collision, SuperTile tile, SuperImportContext importContext) @@ -62,7 +67,9 @@ private static void AddEdgeCollider(GameObject go, CollisionObject collision, Su var edge = go.AddComponent(); edge.points = importContext.MakePointsPPU(collision.Points); - go.AddComponent(); + var superCollision = go.AddComponent(); + superCollision.m_ObjectType = collision.m_ObjectType; + AddSuperCustomProperties(go, collision, tile, importContext); } private static void AddEllipseCollider(GameObject go, CollisionObject collision, SuperTile tile, SuperImportContext importContext) @@ -79,7 +86,9 @@ private static void AddEllipseCollider(GameObject go, CollisionObject collision, go.transform.localPosition = new Vector3(xpos, ypos); go.transform.localEulerAngles = new Vector3(0, 0, importContext.MakeRotation(collision.m_Rotation)); - go.AddComponent(); + var superCollision = go.AddComponent(); + superCollision.m_ObjectType = collision.m_ObjectType; + AddSuperCustomProperties(go, collision, tile, importContext); } else { @@ -99,10 +108,12 @@ private static void AddBoxCollider(GameObject go, CollisionObject collision, Sup go.transform.localPosition = new Vector3(xpos, ypos); go.transform.localEulerAngles = new Vector3(0, 0, importContext.MakeRotation(collision.m_Rotation)); - go.AddComponent(); + var superCollision = go.AddComponent(); + superCollision.m_ObjectType = collision.m_ObjectType; + AddSuperCustomProperties(go, collision, tile, importContext); } - private static void AddPointCollider(GameObject go, CollisionObject collision, SuperImportContext importContext) + private static void AddPointCollider(GameObject go, CollisionObject collision, SuperTile tile, SuperImportContext importContext) { var xpos = importContext.MakeScalar(collision.m_Position.x); var ypos = importContext.MakeScalar(collision.m_Position.y); @@ -110,7 +121,26 @@ private static void AddPointCollider(GameObject go, CollisionObject collision, S go.transform.localPosition = new Vector3(xpos, ypos); go.transform.localEulerAngles = new Vector3(0, 0, importContext.MakeRotation(collision.m_Rotation)); - go.AddComponent(); + var superCollision = go.AddComponent(); + superCollision.m_ObjectType = collision.m_ObjectType; + AddSuperCustomProperties(go, collision, tile, importContext); + } + + private static void AddSuperCustomProperties(GameObject go, CollisionObject collision, SuperTile tile, SuperImportContext importContext) + { + var properties = collision.m_CustomProperties.ToList(); + // Do we have any properties from a tile to add? + if (tile != null) + { + properties.CombineFromSource(tile.m_CustomProperties); + } + + // Add properties from our object type (this should be last) + properties.AddPropertiesFromType(collision.m_ObjectType, importContext); + + // Sort the properties alphabetically + var component = go.AddComponent(); + component.m_Properties = properties.OrderBy(p => p.m_Name).ToList(); } } } diff --git a/SuperTiled2Unity/Assets/SuperTiled2Unity/Scripts/SuperColliderComponent.cs b/SuperTiled2Unity/Assets/SuperTiled2Unity/Scripts/SuperColliderComponent.cs index f8c2c579..dfec6aaa 100644 --- a/SuperTiled2Unity/Assets/SuperTiled2Unity/Scripts/SuperColliderComponent.cs +++ b/SuperTiled2Unity/Assets/SuperTiled2Unity/Scripts/SuperColliderComponent.cs @@ -18,6 +18,7 @@ public class Shape // Editor code to help us manage when we draw gizmo colliders for this component public List m_PolygonShapes = new List(); public List m_OutlineShapes = new List(); + public string m_ObjectType; #if UNITY_EDITOR public void AddPolygonShape(IEnumerable points)