Exemplo n.º 1
0
        public void OnMapUpdated()
        {
            Ensure.IsEditor();
            this.GameObject.DestroyAllChildrenImmediate();

            // if the map was removed, then no need to create a new map
            if (this.TmxAsset == null || this.Tilemaps == null || this.Tilemaps.Count == 0)
            {
                return;
            }

            if (this.TilemapPrefab == null)
            {
                FlaiDebug.LogErrorWithTypeTag <TilemapContainer>("TilemapPrefab is null - aborting!");
                return;
            }

            foreach (TilemapData data in this.Tilemaps)
            {
                FlaiDebug.LogWithTypeTag <TilemapContainer>("Building a tilemap \"{2}\" ({0}x{1})", data.Width, data.Height, data.Name);
                GameObject tilemap = this.TilemapPrefab.Instantiate();
                if (data.HasProperty("CreateColliders"))
                {
                    bool value;
                    if (bool.TryParse(data.GetProperty("CreateColliders"), out value))
                    {
                        tilemap.Get <Tilemap>().CreateColliders = value;
                    }
                }

                tilemap.name = data.Name.NullIfEmpty() ?? "Tilemap";
                tilemap.SetParent(this.GameObject);
                tilemap.SetLayer("Tiles");

                try
                {
                    tilemap.Get <Tilemap>().CreateFrom(data, this.TmxAsset.TilesetManager);
                }
                catch
                {
                    FlaiDebug.LogErrorWithTypeTag <TilemapContainer>("Error - Aborting");
                    throw;
                }

                this.TmxAsset.NeedsRefresh = false;
            }
        }
        private void DrawMapDataField()
        {
            TilemapContainer tilemap  = this.Target;
            TmxAsset         tmxAsset = (TmxAsset)EditorGUILayout.ObjectField("Map Data", tilemap.TmxAsset, typeof(TmxAsset), false);

            if (tilemap.TmxAsset != null && tmxAsset == null)
            {
                FlaiDebug.LogWithTypeTag <TilemapContainerInspector>("Map Data set null!");
            }

            if (tilemap.TmxAsset != tmxAsset || (tilemap.TmxAsset != null && tilemap.TmxAsset.NeedsRefresh))
            {
                tilemap.TmxAsset = tmxAsset;
                tilemap.OnMapUpdated();
                EditorUtility.SetDirty(tilemap);
            }
        }
Exemplo n.º 3
0
        protected static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromPath)
        {
            if (importedAssets == null)
            {
                return;
            }

            foreach (string tilemapAsset in importedAssets.Where(asset => asset != null && asset.EndsWith(".tmx")))
            {
                if (tilemapAsset == null)
                {
                    continue;
                }

                const string TilemapPath = "Assets/Tile Maps/Maps/";
                string       fileName    = Path.GetFileNameWithoutExtension(tilemapAsset);
                string       finalPath   = Path.Combine(TilemapPath, fileName) + ".asset";

                // ensure that the directory exists
                Directory.CreateDirectory(TilemapPath);

                TmxAsset tmxAsset = TilemapLoader.LoadTilemap(tilemapAsset);
                TmxAsset previous = (TmxAsset)AssetDatabase.LoadAssetAtPath(finalPath, typeof(TmxAsset));
                if (previous != null)
                {
                    previous.CopyFrom(tmxAsset);
                    FlaiDebug.LogWithTypeTag <TilemapImporter>("Tilemap {0} updated!", fileName);
                    EditorUtility.SetDirty(previous);
                }
                else
                {
                    AssetDatabase.CreateAsset(tmxAsset, finalPath);
                    EditorUtility.SetDirty(tmxAsset);
                    FlaiDebug.LogWithTypeTag <TilemapImporter>("Tilemap {0} imported succesfully!", fileName);
                }

                TilemapImporter.SaveTilemapFile(tilemapAsset);
                AssetDatabase.DeleteAsset(tilemapAsset);
            }

            AssetDatabase.Refresh();
            AssetDatabase.SaveAssets();
        }