le level editor se fiait à ce que le designer crée les tilemaps nécessaires avant de cliquer sur load maintenant le level editor génère les bons tilemaps avec leurs spécificités (layers sorting order, collider, visibilité etc)
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>();
|
|
}
|
|
}
|
|
} |