Felix-gabriel Boucher-luneau fe7485f815 Pull request #7: ranger les scripts du LevelEditor
Merge in CGD/gather-and-defend from maintenance/tidyUpRepo to main

* commit '5347f2c3fff0fbac0807beb259f6b440dea16e37':
  ranger les scripts du LevelEditor
2023-05-24 17:10:07 +00:00

93 lines
2.8 KiB
C#

using System.Collections.Generic;
using UnityEngine.Tilemaps;
using UnityEngine;
using System;
using System.Collections;
namespace GatherAndDefend.LevelEditor
{
[Serializable]
public class TilemapData : IEnumerable<TileData>
{
public const int INVISIBLE_LAYER = 6;
[SerializeField]
private string _key;
[SerializeField]
private List<TileData> _tiles;
[SerializeField]
private bool _isInvisible;
[SerializeField]
private bool _isCollidable;
[SerializeField]
private bool _isTrigger;
[SerializeField]
private int _renderOrder;
[SerializeField]
private string _renderLayer;
public string Key => _key;
public void LoadToTilemap(Tilemap reference)
{
var rend = reference.GetComponent<TilemapRenderer>();
rend.sortingOrder = _renderOrder;
rend.sortingLayerName = _renderLayer;
if (_isInvisible) rend.gameObject.layer = INVISIBLE_LAYER;
if (_isCollidable)
{
var collision = rend.gameObject.AddComponent<TilemapCollider2D>();
collision.isTrigger = _isTrigger;
}
foreach (TileData data in _tiles)
{
reference.SetTile(data.Position, data.Tile);
}
}
public void SaveFromTilemap(Tilemap reference)
{
_key = reference.name;
if (_isCollidable = reference.GetComponent<TilemapCollider2D>())
{
_isTrigger = reference.GetComponent<TilemapCollider2D>().isTrigger;
}
_isInvisible = reference.gameObject.layer == INVISIBLE_LAYER;
_renderLayer = reference.GetComponent<TilemapRenderer>().sortingLayerName;
_renderOrder = reference.GetComponent<TilemapRenderer>().sortingOrder;
_tiles = new List<TileData>();
BoundsInt bounds = reference.cellBounds;
for (int i = bounds.xMin; i <= bounds.xMax; i++)
{
for (int j = bounds.yMin; j <= bounds.yMax; j++)
{
Vector3Int position = new Vector3Int(i, j);
TileBase tile = reference.GetTile(position);
if (!tile) continue;
var tileData = new TileData(position, tile);
_tiles.Add(tileData);
}
}
}
public IEnumerator<TileData> GetEnumerator()
{
return _tiles.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return _tiles.GetEnumerator();
}
public TilemapData()
{
_tiles = new List<TileData>();
}
}
}