Skip to content

Commit

Permalink
Removed dependency on tile palettes
Browse files Browse the repository at this point in the history
  • Loading branch information
skner-dev committed Jan 11, 2025
1 parent 136c858 commit f3a78c6
Show file tree
Hide file tree
Showing 9 changed files with 111 additions and 18 deletions.
47 changes: 35 additions & 12 deletions Editor/DualGridBrush.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
using UnityEditor.Tilemaps;
using System.Collections.Generic;
using UnityEditor.Tilemaps;
using UnityEngine;
using UnityEngine.Tilemaps;

namespace skner.DualGrid.Editor
{
Expand All @@ -15,26 +17,47 @@ public class DualGridBrush : GridBrush

public override void BoxFill(GridLayout gridLayout, GameObject brushTarget, BoundsInt bounds)
{
base.BoxFill(gridLayout, brushTarget, bounds);

RefreshDualGridTilemap(brushTarget, bounds);
if (brushTarget.TryGetComponent(out DualGridTilemapModule dualGridTilemapModule))
{
SetDualGridTiles(dualGridTilemapModule, dualGridTilemapModule.Tile.DataTile, bounds);
}
else
{
base.BoxFill(gridLayout, brushTarget, bounds);
}
}

public override void BoxErase(GridLayout gridLayout, GameObject brushTarget, BoundsInt bounds)
{
base.BoxErase(gridLayout, brushTarget, bounds);
if (brushTarget.TryGetComponent(out DualGridTilemapModule dualGridTilemapModule))
{
SetDualGridTiles(dualGridTilemapModule, null, bounds);
}
else
{
base.BoxErase(gridLayout, brushTarget, bounds);
}
}

private void SetDualGridTiles(DualGridTilemapModule dualGridTilemapModule, TileBase tile, BoundsInt bounds)
{
var tileChangeData = new List<TileChangeData>();

RefreshDualGridTilemap(brushTarget, bounds);
foreach (var position in bounds.allPositionsWithin)
{
tileChangeData.Add(new TileChangeData { position = position, tile = tile });
}

dualGridTilemapModule.DataTilemap.SetTiles(tileChangeData.ToArray(), ignoreLockFlags: false);
RefreshDualGridTilemap(dualGridTilemapModule, bounds);
}

protected virtual void RefreshDualGridTilemap(GameObject brushTarget, BoundsInt bounds)
protected virtual void RefreshDualGridTilemap(DualGridTilemapModule dualGridTilemapModule, BoundsInt bounds)
{
if (brushTarget.TryGetComponent(out DualGridTilemapModule dualGridTilemapModule))
foreach (var position in bounds.allPositionsWithin)
{
foreach (var position in bounds.allPositionsWithin)
{
dualGridTilemapModule.RefreshRenderTiles(position);
}
dualGridTilemapModule.RefreshRenderTiles(position);
dualGridTilemapModule.DataTilemap.RefreshTile(position);
}
}

Expand Down
11 changes: 10 additions & 1 deletion Editor/DualGridBrush.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Editor/Editors/DualGridBrushEditor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ protected virtual void DualGridPaintPreview(DualGridTilemapModule dualGridTilema
_lastTool = GridBrushBase.Tool.Paint;
}

#if UNITY_2023_1_OR_NEWER
public override void ErasePreview(GridLayout gridLayout, GameObject brushTarget, Vector3Int position)
{
if (brushTarget.TryGetComponent(out DualGridTilemapModule dualGridTilemapModule))
Expand All @@ -120,6 +121,7 @@ private void DualGridErasePreview(DualGridTilemapModule dualGridTilemapModule, B
_lastBounds = bounds;
_lastTool = GridBrushBase.Tool.Erase;
}
#endif

public override void BoxFillPreview(GridLayout gridLayout, GameObject brushTarget, BoundsInt bounds)
{
Expand Down
11 changes: 10 additions & 1 deletion Editor/Editors/DualGridBrushEditor.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Editor/Editors/DualGridRuleTileEditor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ public override void OnInspectorGUI()

if (EditorGUI.EndChangeCheck())
{
_targetDualGridRuleTile.RefreshDataTile();
EditorUtility.SetDirty(_targetDualGridRuleTile);
}
}
Expand Down
11 changes: 10 additions & 1 deletion Editor/Extensions/DualGridTilemapModuleExtensions.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 10 additions & 1 deletion Runtime/Extensions/GameObjectExtensions.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 10 additions & 1 deletion Runtime/Tiles/DualGridPreviewTile.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

24 changes: 23 additions & 1 deletion Runtime/Tiles/DualGridRuleTile.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,13 @@ public class DualGridRuleTile : RuleTile<DualGridNeighbor>
[SerializeField]
[HideInInspector]
private Texture2D _originalTexture;
public Texture2D OriginalTexture { get { return _originalTexture; } internal set { _originalTexture = value; } }
public Texture2D OriginalTexture { get => _originalTexture; internal set => _originalTexture = value; }

private Tile _dataTile;
/// <summary>
/// The Data Tile is a tile generated from this Dual Grid Rule Tile to populate the DataTilemap.
/// </summary>
public Tile DataTile { get => _dataTile != null ? _dataTile : RefreshDataTile(); }

private DualGridTilemapModule _dualGridTilemapModule;

Expand Down Expand Up @@ -55,6 +61,21 @@ public override void GetTileData(Vector3Int position, ITilemap tilemap, ref Tile
base.GetTileData(position, tilemap, ref tileData);
}

/// <summary>
/// Refreshes the <see cref="DataTile"/> with this <see cref="DualGridRuleTile"/>'s configuration.
/// </summary>
/// <returns>The refreshed data tile.</returns>
public virtual Tile RefreshDataTile()
{
if (_dataTile == null) _dataTile = ScriptableObject.CreateInstance<Tile>();

_dataTile.name = this.name;
_dataTile.colliderType = this.m_DefaultColliderType;
_dataTile.gameObject = this.m_DefaultGameObject;

return _dataTile;
}

/// <inheritdoc/>
public override bool RuleMatches(TilingRule ruleToValidate, Vector3Int renderTilePosition, ITilemap tilemap, ref Matrix4x4 transform)
{
Expand Down Expand Up @@ -147,5 +168,6 @@ private void SetDataTilemap(ITilemap tilemap)
// $"If the tilemap is a tile palette, discard this warning, otherwise investigate it, as this tile won't work properly.", originTilemap);
}
}

}
}

0 comments on commit f3a78c6

Please sign in to comment.