Merge in CGD/gather-and-defend from maintenance/tidyUpRepo to main * commit '5347f2c3fff0fbac0807beb259f6b440dea16e37': ranger les scripts du LevelEditor
93 lines
2.8 KiB
C#
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>();
|
|
}
|
|
}
|
|
} |