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); }
private LDtkIntGridTile TryGetIntGridTile(string intGridValueKey) { LDtkIntGridTile intGridTile = Importer.GetIntGridValueTile(intGridValueKey); if (intGridTile == null) { intGridTile = LDtkResourcesLoader.LoadDefaultTile(); } return(intGridTile); }
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); }
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); }
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); } }