HeavenStudio/Assets/Scripts/LevelEditor/EventSelector/EventParameterManager.cs

192 lines
6.4 KiB
C#
Raw Normal View History

2022-02-03 22:20:26 +00:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
2022-03-14 14:21:05 +00:00
using HeavenStudio.Editor.Track;
2022-03-14 14:21:05 +00:00
namespace HeavenStudio.Editor
2022-02-03 22:20:26 +00:00
{
public class EventParameterManager : MonoBehaviour
{
[Header("General References")]
[SerializeField] private GameObject eventSelector;
[SerializeField] private GridGameSelector gridGameSelector;
2022-02-03 22:20:26 +00:00
[Header("Property Prefabs")]
[SerializeField] private GameObject IntegerP;
[SerializeField] private GameObject FloatP;
[SerializeField] private GameObject BooleanP;
2022-02-04 22:16:22 +00:00
[SerializeField] private GameObject DropdownP;
[SerializeField] private GameObject ColorP;
[SerializeField] private GameObject StringP;
2022-02-03 22:20:26 +00:00
public DynamicBeatmap.DynamicEntity entity;
2022-02-03 22:20:26 +00:00
2022-06-30 01:58:21 +00:00
public bool active;
2022-02-06 09:28:32 +00:00
private int childCountAtStart;
public bool canDisable = true;
2022-02-03 22:20:26 +00:00
public static EventParameterManager instance { get; set; }
private void Awake()
{
instance = this;
}
2022-02-06 09:28:32 +00:00
private void Start()
{
childCountAtStart = transform.childCount;
}
private void Update()
{
if (Input.GetMouseButtonDown(0))
{
if (canDisable && active)
{
Disable();
}
}
2022-07-08 20:20:39 +00:00
canDisable = true;
}
public void Disable()
{
active = false;
eventSelector.SetActive(true);
DestroyParams();
2022-03-04 00:15:56 +00:00
Editor.instance.SetGameEventTitle($"Select game event for {gridGameSelector.SelectedMinigame.Replace("\n", "")}");
}
public void StartParams(DynamicBeatmap.DynamicEntity entity)
2022-02-03 22:20:26 +00:00
{
active = true;
2022-02-03 22:20:26 +00:00
AddParams(entity);
}
static string TrackToThemeColour(int track) => track switch
{
1 => EditorTheme.theme.properties.Layer2Col,
2 => EditorTheme.theme.properties.Layer3Col,
3 => EditorTheme.theme.properties.Layer4Col,
4 => EditorTheme.theme.properties.Layer5Col,
_ => EditorTheme.theme.properties.Layer1Col
};
private void AddParams(DynamicBeatmap.DynamicEntity entity)
2022-02-03 22:20:26 +00:00
{
var minigame = EventCaller.instance.GetMinigame(entity.datamodel.Split(0));
int actionIndex = minigame.actions.IndexOf(minigame.actions.Find(c => c.actionName == entity.datamodel.Split(1)));
Minigames.GameAction action = minigame.actions[actionIndex];
if (action.parameters != null)
{
eventSelector.SetActive(false);
this.entity = entity;
string col = TrackToThemeColour(entity.track);
Editor.instance.SetGameEventTitle($"Properties for <color=#{col}>{action.displayName}</color> on Beat {entity.beat}");
2022-02-03 22:20:26 +00:00
DestroyParams();
2022-02-03 22:20:26 +00:00
for (int i = 0; i < action.parameters.Count; i++)
{
object param = action.parameters[i].parameter;
string caption = action.parameters[i].propertyCaption;
string propertyName = action.parameters[i].propertyName;
string tooltip = action.parameters[i].tooltip;
2022-02-03 22:20:26 +00:00
AddParam(propertyName, param, caption, tooltip);
2022-02-03 22:20:26 +00:00
}
active = true;
2022-02-03 22:20:26 +00:00
}
else
{
active = false;
}
2022-02-03 22:20:26 +00:00
}
private void AddParam(string propertyName, object type, string caption, string tooltip = "")
2022-02-03 22:20:26 +00:00
{
GameObject prefab = IntegerP;
GameObject input;
2022-02-03 22:20:26 +00:00
var objType = type.GetType();
if (objType == typeof(EntityTypes.Integer))
2022-02-03 22:20:26 +00:00
{
prefab = IntegerP;
input = InitPrefab(prefab, tooltip);
var property = input.GetComponent<NumberPropertyPrefab>();
property.SetProperties(propertyName, type, caption);
2022-02-03 22:20:26 +00:00
}
else if (objType == typeof(EntityTypes.Float))
{
prefab = FloatP;
input = InitPrefab(prefab, tooltip);
var property = input.GetComponent<NumberPropertyPrefab>();
property.SetProperties(propertyName, type, caption);
}
else if(type is bool)
{
prefab = BooleanP;
input = InitPrefab(prefab, tooltip);
var property = input.GetComponent<BoolPropertyPrefab>();
property.SetProperties(propertyName, type, caption);
}
else if (objType.IsEnum)
2022-02-04 22:16:22 +00:00
{
prefab = DropdownP;
input = InitPrefab(prefab, tooltip);
var property = input.GetComponent<EnumPropertyPrefab>();
property.SetProperties(propertyName, type, caption);
2022-02-04 22:16:22 +00:00
}
else if (objType == typeof(Color))
{
prefab = ColorP;
input = InitPrefab(prefab, tooltip);
var property = input.GetComponent<ColorPropertyPrefab>();
property.SetProperties(propertyName, type, caption);
}
else if(objType == typeof(string))
{
prefab = StringP;
input = InitPrefab(prefab, tooltip);
var property = input.GetComponent<StringPropertyPrefab>();
property.SetProperties(propertyName, type, caption);
}
else
{
Debug.LogError("Can't make property interface of type: " + type.GetType());
return;
}
}
2022-02-03 22:20:26 +00:00
private GameObject InitPrefab(GameObject prefab, string tooltip = "")
{
2022-02-03 22:20:26 +00:00
GameObject input = Instantiate(prefab);
input.transform.SetParent(this.gameObject.transform);
input.SetActive(true);
input.transform.localScale = Vector2.one;
if(tooltip != string.Empty)
Tooltip.AddTooltip(input, "", tooltip);
return input;
2022-02-03 22:20:26 +00:00
}
private void DestroyParams()
{
Editor.instance.editingInputField = false;
active = false;
2022-02-06 09:28:32 +00:00
for (int i = childCountAtStart; i < transform.childCount; i++)
{
Destroy(transform.GetChild(i).gameObject);
}
}
2022-02-03 22:20:26 +00:00
}
}