예제 #1
0
        private void CreateAssetButton()
        {
            const float height = 2;

            Rect buttonRect = EditorGUILayout.GetControlRect(false, height);//_headerArea;

            buttonRect.height = EditorGUIUtility.singleLineHeight;

            const float width = 45;

            buttonRect.x     = buttonRect.xMax - width;
            buttonRect.width = width;

            GUIStyle miniButton = new GUIStyle(EditorStyles.miniButton)
            {
                font = EditorStyles.boldFont
            };

            if (!GUI.Button(buttonRect, _buttonContent, miniButton))
            {
                return;
            }

            string assetName      = $"New {nameof(LDtkIntGridTile)}.asset";
            string path           = $"{GetSelectedPathOrFallback()}{assetName}";
            string uniquePath     = AssetDatabase.GenerateUniqueAssetPath(path);
            string uniqueFileName = Path.GetFileNameWithoutExtension(uniquePath);

            LDtkIntGridTile blankTile = ScriptableObject.CreateInstance <LDtkIntGridTile>();

            blankTile.name = uniqueFileName;

            AssetDatabase.CreateAsset(blankTile, uniquePath);
            EditorGUIUtility.PingObject(blankTile);
        }
예제 #2
0
        private LDtkIntGridTile TryGetIntGridTile(string intGridValueKey)
        {
            LDtkIntGridTile intGridTile = Importer.GetIntGridValueTile(intGridValueKey);

            if (intGridTile == null)
            {
                intGridTile = LDtkResourcesLoader.LoadDefaultTile();
            }

            return(intGridTile);
        }
예제 #3
0
        public void BuildIntGridValues()
        {
            RoundTilemapPos();
            SortingOrder.Next();

            int[] intGridValues = Layer.IntGridCsv.Select(p => (int)p).ToArray();

            for (int i = 0; i < intGridValues.Length; i++)
            {
                int intGridValue = intGridValues[i];

                //all empty intgrid values are 0
                if (intGridValue == 0)
                {
                    continue;
                }

                LayerDefinition        intGridDef      = Layer.Definition;
                IntGridValueDefinition intGridValueDef = intGridDef.IntGridValues[intGridValue - 1];

                string          intGridValueKey = LDtkKeyFormatUtil.IntGridValueFormat(intGridDef, intGridValueDef);
                LDtkIntGridTile intGridTile     = TryGetIntGridTile(intGridValueKey);

                if (intGridTile == null)
                {
                    Debug.LogError("LDtk: Issue loading a IntGridTile. This is always expected to not be null");
                    continue;
                }

                TilemapKey key = new TilemapKey(intGridTile.TilemapTag, intGridTile.TilemapLayerMask, intGridTile.PhysicsMaterial);
                Tilemap    tilemapToBuildOn = GetTilemapToBuildOn(key);

                BuildIntGridValue(tilemapToBuildOn, intGridValueDef, i, intGridTile);
            }

            foreach (KeyValuePair <TilemapKey, Tilemap> pair in _tilemaps)
            {
                TilemapKey key     = pair.Key;
                Tilemap    tilemap = pair.Value;

                tilemap.SetOpacity(Layer);
                AddLayerOffset(tilemap);

                GameObject obj = tilemap.gameObject;
                obj.tag   = key.Tag;
                obj.layer = key.LayerMask;
                if (obj.TryGetComponent(out Rigidbody2D rb))
                {
                    rb.sharedMaterial = key.PhysicsMaterial;
                }
            }
        }
        public void BuildIntGridValues()
        {
            RoundTilemapPos();

            SortingOrder.Next();

            GameObject tilemapGameObject = LayerGameObject.CreateChildGameObject(Layer.Type);

            /*if (Importer.DeparentInRuntime)
             * {
             *  tilemapGameObject.AddComponent<LDtkDetachChildren>();
             * }*/

            Tilemap = tilemapGameObject.AddComponent <Tilemap>();


            if (Importer.IntGridValueColorsVisible)
            {
                TilemapRenderer renderer = tilemapGameObject.AddComponent <TilemapRenderer>();
                renderer.sortingOrder = SortingOrder.SortingOrderValue;
            }

            TilemapCollider2D collider = tilemapGameObject.AddComponent <TilemapCollider2D>();

            int[] intGridValues = Layer.IntGridCsv.Select(p => (int)p).ToArray();

            for (int i = 0; i < intGridValues.Length; i++)
            {
                int intGridValue = intGridValues[i];

                //all empty intgrid values are 0
                if (intGridValue == 0)
                {
                    continue;
                }

                LayerDefinition        intGridDef      = Layer.Definition;
                IntGridValueDefinition intGridValueDef = intGridDef.IntGridValues[intGridValue - 1];

                string          intGridValueKey = LDtkKeyFormatUtil.IntGridValueFormat(intGridDef, intGridValueDef);
                LDtkIntGridTile intGridTile     = Importer.GetIntGridValueTile(intGridValueKey);

                if (intGridTile == null)
                {
                    intGridTile = LDtkResourcesLoader.LoadDefaultTile();
                }

                BuildIntGridValue(intGridValueDef, i, intGridTile);
            }

            Tilemap.SetOpacity(Layer);
        }
예제 #5
0
        private void MainAssetGeneration()
        {
            LDtkIntGridTile oldDefaultTile = LDtkResourcesLoader.LoadDefaultTile();
            Tile            newDefaultTile = CreateNativeTile(oldDefaultTile);

            //export default texture
            Texture2D newDefaultTexture = CloneArtifact(_newTexture, "/Sprites", _oldSprite.name + "Texture");

            //export the default sprite
            Sprite newDefaultSprite = Sprite.Create(newDefaultTexture, _oldSprite.rect, GetNormalizedPivotOfSprite(_oldSprite), _oldSprite.pixelsPerUnit, 1, SpriteMeshType.Tight, _oldSprite.border, true);

            newDefaultSprite = CloneArtifact(newDefaultSprite, "/Sprites", _oldSprite.name);

            //clone art tile sprites
            _artTileSprites = CloneArtifacts(_assets.SpriteArtifacts, "/Sprites");

            //clone art tiles
            _artTiles = CloneArtifacts(_assets.TileArtifacts, "/ArtTiles").Cast <Tile>().ToList();

            //clone int grid tiles
            List <TileBase> oldIntGridArtifacts = _importer.GetIntGridTiles().Where(p => p != null).Append(newDefaultTile).ToList();

            _intGridTiles = CloneArtifacts(oldIntGridArtifacts, "/IntGridValues").Cast <Tile>().ToList();

            //clone background sprites
            _backgroundArtifacts = CloneArtifacts(_assets.BackgroundArtifacts, "/Backgrounds");

            EditorApplication.delayCall += TryCloneSpriteAtlas;

            //give each new native art tile a matching cloned sprite to reference
            foreach (Tile artTile in _artTiles)
            {
                string nameMatch        = artTile.name;
                Sprite oldArtTileSprite = _artTileSprites.Find(sprite => sprite.name == nameMatch);
                artTile.sprite = oldArtTileSprite;
            }

            //give the int grid tiles the clone sprite instead if they were using the default tile
            foreach (Tile intGridTile in _intGridTiles)
            {
                if (intGridTile.sprite == _oldSprite)
                {
                    intGridTile.sprite = newDefaultSprite;
                }
            }

            //we've generated the default sprite which is used by multiple, simply add to the list since it's already created
            _backgroundArtifacts.Add(newDefaultSprite);
        }
예제 #6
0
        private void BuildIntGridValue(Tilemap tilemapToBuildOn, IntGridValueDefinition definition, int intValueData, LDtkIntGridTile tileAsset)
        {
            Vector2Int cellCoord = LDtkCoordConverter.IntGridValueCsvCoord(intValueData, Layer.UnityCellSize);
            Vector2    coord     = ConvertCellCoord(cellCoord);

            Vector3Int cell = new Vector3Int((int)coord.x, (int)coord.y, 0);

            tilemapToBuildOn.SetTile(cell, tileAsset);
            tilemapToBuildOn.SetTileFlags(cell, TileFlags.None);
            tilemapToBuildOn.SetColor(cell, definition.UnityColor);

            //for some reason a GameObject is instantiated causing two to exist in play mode; maybe because its the import process. destroy it
            GameObject instantiatedObject = tilemapToBuildOn.GetInstantiatedObject(cell);

            if (instantiatedObject != null)
            {
                Object.DestroyImmediate(instantiatedObject);
            }
        }