From 1500e31c7508c8b64f7574360a4ab25ae8909a98 Mon Sep 17 00:00:00 2001 From: Ville Nurmi Date: Thu, 5 Jan 2023 22:09:40 +0200 Subject: [PATCH] Added TmxAssetImporter.GetObject(int id). This enables custom TMX importers to interpret Tiled properties that are of type "object". For example, in an overridden method CustomTmxImporter.TmxAssetImported(TmxAssetImportedArgs args) you can do this: GameObject go = ...; int objectId = go.GetSuperPropertyValueInt("myObjectProperty", -1); GameObject otherGo = args.AssetImporter.GetObject(objectId); --- .../Editor/Importers/TmxAssetImporter.cs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/SuperTiled2Unity/Assets/SuperTiled2Unity/Scripts/Editor/Importers/TmxAssetImporter.cs b/SuperTiled2Unity/Assets/SuperTiled2Unity/Scripts/Editor/Importers/TmxAssetImporter.cs index 0abc240f..a4521e53 100644 --- a/SuperTiled2Unity/Assets/SuperTiled2Unity/Scripts/Editor/Importers/TmxAssetImporter.cs +++ b/SuperTiled2Unity/Assets/SuperTiled2Unity/Scripts/Editor/Importers/TmxAssetImporter.cs @@ -26,6 +26,8 @@ public partial class TmxAssetImporter : TiledAssetImporter private Dictionary m_TilePolygonDatabase; private int m_NextTileAsObjectId; + private Dictionary m_ObjectsById; + [SerializeField] private bool m_TilesAsObjects = false; public bool TilesAsObjects { get { return m_TilesAsObjects; } } @@ -44,6 +46,17 @@ public partial class TmxAssetImporter : TiledAssetImporter [SerializeField] private List m_InternalTilesets; + /// + /// Returns the game object corresponding to a Tiled object ID. + /// If no such object could be found, returns null. + /// + public GameObject GetObject(int targetId) + { + return m_ObjectsById.TryGetValue(targetId, out var go) + ? go + : null; + } + protected override void InternalOnImportAsset() { base.InternalOnImportAsset(); @@ -395,7 +408,7 @@ private void DoPrefabReplacements() { // Should any of our objects (from Tiled) be replaced by instantiated prefabs? var supers = m_MapComponent.GetComponentsInChildren(); - var objectsById = supers.ToDictionary(so => so.m_Id, so => so.gameObject); + m_ObjectsById = supers.ToDictionary(so => so.m_Id, so => so.gameObject); var goToDestroy = new List(); foreach (var so in supers) @@ -414,7 +427,7 @@ private void DoPrefabReplacements() // Update bookkeeping for later custom property replacement. goToDestroy.Add(so.gameObject); - objectsById[so.m_Id] = instance; + m_ObjectsById[so.m_Id] = instance; } } @@ -428,7 +441,7 @@ private void DoPrefabReplacements() { foreach (var p in props.m_Properties) { - objectsById[so.m_Id].BroadcastProperty(p, objectsById); + m_ObjectsById[so.m_Id].BroadcastProperty(p, m_ObjectsById); } } }