97 lines
3.4 KiB
C#
97 lines
3.4 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
|
|
#if UNITY_EDITOR
|
|
using UnityEditor;
|
|
#endif
|
|
|
|
using UnityEngine;
|
|
using UnityEngine.Tilemaps;
|
|
|
|
namespace Platformer.View
|
|
{
|
|
[System.Serializable]
|
|
[CreateAssetMenu(fileName = "New Animated Tile", menuName = "Tiles/Animated Tile")]
|
|
public class AnimatedTile : TileBase
|
|
{
|
|
public Sprite[] m_AnimatedSprites;
|
|
public float m_MinSpeed = 1f;
|
|
public float m_MaxSpeed = 1f;
|
|
public float m_AnimationStartTime;
|
|
public Tile.ColliderType m_TileColliderType;
|
|
|
|
public override void GetTileData(Vector3Int location, ITilemap tileMap, ref TileData tileData)
|
|
{
|
|
tileData.transform = Matrix4x4.identity;
|
|
tileData.color = Color.white;
|
|
if (m_AnimatedSprites != null && m_AnimatedSprites.Length > 0)
|
|
{
|
|
tileData.sprite = m_AnimatedSprites[m_AnimatedSprites.Length - 1];
|
|
tileData.colliderType = m_TileColliderType;
|
|
}
|
|
}
|
|
|
|
public override bool GetTileAnimationData(Vector3Int location, ITilemap tileMap, ref TileAnimationData tileAnimationData)
|
|
{
|
|
if (m_AnimatedSprites.Length > 0)
|
|
{
|
|
tileAnimationData.animatedSprites = m_AnimatedSprites;
|
|
tileAnimationData.animationSpeed = Random.Range(m_MinSpeed, m_MaxSpeed);
|
|
tileAnimationData.animationStartTime = m_AnimationStartTime;
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
|
|
#if UNITY_EDITOR
|
|
[CustomEditor(typeof(AnimatedTile))]
|
|
public class AnimatedTileEditor : Editor
|
|
{
|
|
private AnimatedTile tile { get { return (target as AnimatedTile); } }
|
|
|
|
public override void OnInspectorGUI()
|
|
{
|
|
EditorGUI.BeginChangeCheck();
|
|
int count = EditorGUILayout.DelayedIntField("Number of Animated Sprites", tile.m_AnimatedSprites != null ? tile.m_AnimatedSprites.Length : 0);
|
|
if (count < 0)
|
|
count = 0;
|
|
|
|
if (tile.m_AnimatedSprites == null || tile.m_AnimatedSprites.Length != count)
|
|
{
|
|
System.Array.Resize<Sprite>(ref tile.m_AnimatedSprites, count);
|
|
}
|
|
|
|
if (count == 0)
|
|
return;
|
|
|
|
EditorGUILayout.LabelField("Place sprites shown based on the order of animation.");
|
|
EditorGUILayout.Space();
|
|
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
tile.m_AnimatedSprites[i] = (Sprite)EditorGUILayout.ObjectField("Sprite " + (i + 1), tile.m_AnimatedSprites[i], typeof(Sprite), false, null);
|
|
}
|
|
|
|
float minSpeed = EditorGUILayout.FloatField("Minimum Speed", tile.m_MinSpeed);
|
|
float maxSpeed = EditorGUILayout.FloatField("Maximum Speed", tile.m_MaxSpeed);
|
|
if (minSpeed < 0.0f)
|
|
minSpeed = 0.0f;
|
|
|
|
if (maxSpeed < 0.0f)
|
|
maxSpeed = 0.0f;
|
|
|
|
if (maxSpeed < minSpeed)
|
|
maxSpeed = minSpeed;
|
|
|
|
tile.m_MinSpeed = minSpeed;
|
|
tile.m_MaxSpeed = maxSpeed;
|
|
|
|
tile.m_AnimationStartTime = EditorGUILayout.FloatField("Start Time", tile.m_AnimationStartTime);
|
|
tile.m_TileColliderType = (Tile.ColliderType)EditorGUILayout.EnumPopup("Collider Type", tile.m_TileColliderType);
|
|
if (EditorGUI.EndChangeCheck())
|
|
EditorUtility.SetDirty(tile);
|
|
}
|
|
}
|
|
#endif
|
|
} |