191 lines
7.4 KiB
C#
191 lines
7.4 KiB
C#
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using Ichni.RhythmGame;
|
||
using UnityEngine;
|
||
using UnityEngine.Events;
|
||
using UnityEngine.UI;
|
||
|
||
namespace Ichni.Editor
|
||
{
|
||
public partial class CompositeParameterWindow : MovableWindow
|
||
{
|
||
public Button addNewUnitButton;
|
||
public GameObject unitPrefab;
|
||
public IBaseElement connectedBaseElement;
|
||
public List<DynamicUICompositeUnit> unitList;
|
||
public string parameterName;
|
||
public UnityAction ApplyParameters;
|
||
|
||
public void Initialize(IBaseElement baseElement, string title, string parameterName)
|
||
{
|
||
transform.localScale = Vector3.zero;
|
||
this.connectedBaseElement = baseElement;
|
||
this.parameterName = parameterName;
|
||
this.title.text = title;
|
||
unitList = new List<DynamicUICompositeUnit>();
|
||
closeButton.onClick.AddListener(Quit);
|
||
|
||
StartCoroutine(WindowAnim.ShowPanel(gameObject));
|
||
}
|
||
|
||
public void RemoveUnit(DynamicUICompositeUnit unit)
|
||
{
|
||
unitList.Remove(unit);
|
||
Destroy(unit.gameObject);
|
||
}
|
||
}
|
||
|
||
public partial class CompositeParameterWindow
|
||
{
|
||
public void SetAsStringList()
|
||
{
|
||
//生成Unit
|
||
void GenerateUnit(string content)
|
||
{
|
||
DynamicUIStringUnit unit = Instantiate(unitPrefab, windowRect).GetComponent<DynamicUIStringUnit>();
|
||
unitList.Add(unit);
|
||
unit.SetUnit(this, content);
|
||
}
|
||
|
||
unitPrefab = EditorManager.instance.basePrefabs.stringUnit;
|
||
|
||
//初始化:获取当前的List<string>,并生成对应的Unit
|
||
List<string> list = connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement) as List<string>;
|
||
foreach (string item in list)
|
||
{
|
||
GenerateUnit(item);
|
||
}
|
||
addNewUnitButton.GetComponent<RectTransform>().SetAsLastSibling();
|
||
|
||
//为添加新的Unit的按钮设置点击事件
|
||
addNewUnitButton.onClick.AddListener(() =>
|
||
{
|
||
GenerateUnit("");
|
||
addNewUnitButton.GetComponent<RectTransform>().SetAsLastSibling();
|
||
});
|
||
|
||
//将当前所有Unit的值应用到对应的变量中
|
||
ApplyParameters = () =>
|
||
{
|
||
List<string> list = new List<string>();
|
||
foreach (var unit in unitList)
|
||
{
|
||
list.Add((unit as DynamicUIStringUnit).GetValue());
|
||
Debug.Log((unit as DynamicUIStringUnit).GetValue());
|
||
}
|
||
connectedBaseElement.GetType().GetField(parameterName).SetValue(connectedBaseElement, list);
|
||
};
|
||
}
|
||
|
||
public void SetAsFlexibleFloat()
|
||
{
|
||
void GenerateUnit(AnimatedFloat content)
|
||
{
|
||
DynamicUIAnimatedFloatUnit unit = Instantiate(unitPrefab, windowRect).GetComponent<DynamicUIAnimatedFloatUnit>();
|
||
unitList.Add(unit);
|
||
unit.SetUnit(this, content);
|
||
}
|
||
|
||
unitPrefab = EditorManager.instance.basePrefabs.animatedFloatUnit;
|
||
|
||
FlexibleFloat flexibleFloat = connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement) as FlexibleFloat;
|
||
foreach (AnimatedFloat animatedFloat in flexibleFloat.animations)
|
||
{
|
||
GenerateUnit(animatedFloat);
|
||
}
|
||
addNewUnitButton.GetComponent<RectTransform>().SetAsLastSibling();
|
||
|
||
addNewUnitButton.onClick.AddListener(() =>
|
||
{
|
||
GenerateUnit(new AnimatedFloat(0, 0, 0, 0, AnimationCurveType.Linear));
|
||
addNewUnitButton.GetComponent<RectTransform>().SetAsLastSibling();
|
||
});
|
||
|
||
ApplyParameters = () =>
|
||
{
|
||
FlexibleFloat newFlexibleFloat = new FlexibleFloat();
|
||
foreach (var unit in unitList)
|
||
{
|
||
newFlexibleFloat.animations.Add((unit as DynamicUIAnimatedFloatUnit).GetValue());
|
||
}
|
||
connectedBaseElement.GetType().GetField(parameterName).SetValue(connectedBaseElement, newFlexibleFloat);
|
||
};
|
||
}
|
||
|
||
public void SetAsFlexibleInt()
|
||
{
|
||
void GenerateUnit(AnimatedInt content)
|
||
{
|
||
DynamicUIAnimatedIntUnit unit = Instantiate(unitPrefab, windowRect).GetComponent<DynamicUIAnimatedIntUnit>();
|
||
unitList.Add(unit);
|
||
unit.SetUnit(this, content);
|
||
}
|
||
|
||
unitPrefab = EditorManager.instance.basePrefabs.animatedIntUnit;
|
||
|
||
FlexibleInt flexibleInt = connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement) as FlexibleInt;
|
||
foreach (AnimatedInt animatedInt in flexibleInt.animations)
|
||
{
|
||
GenerateUnit(animatedInt);
|
||
}
|
||
addNewUnitButton.GetComponent<RectTransform>().SetAsLastSibling();
|
||
|
||
addNewUnitButton.onClick.AddListener(() =>
|
||
{
|
||
GenerateUnit(new AnimatedInt(0, 0));
|
||
addNewUnitButton.GetComponent<RectTransform>().SetAsLastSibling();
|
||
});
|
||
|
||
ApplyParameters = () =>
|
||
{
|
||
FlexibleInt newFlexibleInt = new FlexibleInt();
|
||
foreach (var unit in unitList)
|
||
{
|
||
newFlexibleInt.animations.Add((unit as DynamicUIAnimatedIntUnit).GetValue());
|
||
}
|
||
connectedBaseElement.GetType().GetField(parameterName).SetValue(connectedBaseElement, newFlexibleInt);
|
||
};
|
||
}
|
||
|
||
public void SetAsFlexibleBool()
|
||
{
|
||
void GenerateUnit(AnimatedBool content)
|
||
{
|
||
DynamicUIAnimatedBoolUnit unit = Instantiate(unitPrefab, windowRect).GetComponent<DynamicUIAnimatedBoolUnit>();
|
||
unitList.Add(unit);
|
||
unit.SetUnit(this, content);
|
||
}
|
||
|
||
unitPrefab = EditorManager.instance.basePrefabs.animatedBoolUnit;
|
||
FlexibleBool flexibleBool = connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement) as FlexibleBool;
|
||
foreach (AnimatedBool animatedBool in flexibleBool.animations)
|
||
{
|
||
GenerateUnit(animatedBool);
|
||
}
|
||
addNewUnitButton.GetComponent<RectTransform>().SetAsLastSibling();
|
||
|
||
addNewUnitButton.onClick.AddListener(() =>
|
||
{
|
||
GenerateUnit(new AnimatedBool(0, false));
|
||
addNewUnitButton.GetComponent<RectTransform>().SetAsLastSibling();
|
||
});
|
||
|
||
ApplyParameters = () =>
|
||
{
|
||
FlexibleBool newFlexibleBool = new FlexibleBool();
|
||
foreach (var unit in unitList)
|
||
{
|
||
newFlexibleBool.animations.Add((unit as DynamicUIAnimatedBoolUnit).GetValue());
|
||
}
|
||
connectedBaseElement.GetType().GetField(parameterName).SetValue(connectedBaseElement, newFlexibleBool);
|
||
};
|
||
}
|
||
public void Quit()
|
||
{
|
||
ApplyParameters();
|
||
//StartCoroutine(WindowAnim.HidePanel(gameObject, true));
|
||
Destroy(gameObject);
|
||
|
||
}
|
||
}
|
||
} |