using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using System;
|
#if UNITY_EDITOR
|
using UnityEditor;
|
#endif
|
namespace vnxbqy.UI
|
{
|
public class TalentTreeScriptable : ScriptableObject
|
{
|
[SerializeField] TalentTree talentTrees;
|
[SerializeField] Vector2 m_ContentSizeDelta;
|
[SerializeField] List<TalentElement> skillElements;
|
[SerializeField] List<ArrowElement> arrowElements;
|
|
public Vector2 contentSizeDelta
|
{
|
get { return m_ContentSizeDelta; }
|
}
|
|
public int arrowCount
|
{
|
get { return arrowElements == null ? 0 : arrowElements.Count; }
|
}
|
|
public int skillCount
|
{
|
get { return skillElements == null ? 0 : skillElements.Count; }
|
}
|
|
public TalentElement GetTalentElement(int index)
|
{
|
if (skillElements != null && index < skillElements.Count)
|
{
|
return skillElements[index];
|
}
|
return default(TalentElement);
|
}
|
|
public ArrowElement GetArrowElement(int index)
|
{
|
if (arrowElements != null && index < arrowElements.Count)
|
{
|
return arrowElements[index];
|
}
|
return default(ArrowElement);
|
}
|
|
public float GetPercentBySkillElement(int index, float viewHeight, float offset)
|
{
|
if (skillElements != null && index < skillElements.Count)
|
{
|
var element = skillElements[index];
|
var height = contentSizeDelta.y - Mathf.Abs(element.position.y);
|
var percent = Mathf.Clamp01((height - viewHeight) / (contentSizeDelta.y - viewHeight));
|
return Mathf.Clamp01(percent + (offset / (contentSizeDelta.y - viewHeight)));//偏移
|
}
|
return 1;
|
}
|
|
#if UNITY_EDITOR
|
public void ApplyTalentElement(int index,Vector3 _position)
|
{
|
if (skillElements == null)
|
{
|
skillElements = new List<TalentElement>();
|
}
|
var element = new TalentElement()
|
{
|
position = _position,
|
};
|
if (index >= skillElements.Count)
|
{
|
skillElements.Add(element);
|
}
|
else
|
{
|
skillElements[index] = element;
|
}
|
}
|
|
public void SyncTalentElementsCount(int count)
|
{
|
if (count < skillElements.Count)
|
{
|
skillElements.RemoveRange(count, skillElements.Count - count);
|
}
|
}
|
|
public void ApplyArrowElement(int index, Vector3 _position, Vector2 _sizeDelta, Vector3 _rotation, string _iconKey)
|
{
|
if (arrowElements == null)
|
{
|
arrowElements = new List<ArrowElement>();
|
}
|
var element = new ArrowElement()
|
{
|
position = _position,
|
sizeDelta = _sizeDelta,
|
rotation = _rotation,
|
iconKey = _iconKey,
|
};
|
if (index >= arrowElements.Count)
|
{
|
arrowElements.Add(element);
|
}
|
else
|
{
|
arrowElements[index] = element;
|
}
|
}
|
|
public void SyncArrowElementsCount(int count)
|
{
|
if (count < arrowElements.Count)
|
{
|
arrowElements.RemoveRange(count, arrowElements.Count - count);
|
}
|
}
|
#endif
|
|
public bool Belong(int job, int talentType, int talentSeries)
|
{
|
return talentTrees.Belong(job, talentType, talentSeries);
|
}
|
|
[Serializable]
|
public struct TalentTree
|
{
|
public int[] jobs;
|
public int[] talentTypes;
|
public int[] talentSeriess;
|
|
public bool Belong(int job, int talentType, int talentSeries)
|
{
|
bool sameJob = false;
|
for (int i = 0; i < jobs.Length; i++)
|
{
|
if (jobs[i] == job)
|
{
|
sameJob = true;
|
break;
|
}
|
}
|
bool sameType = false;
|
for (int i = 0; i < talentTypes.Length; i++)
|
{
|
if (talentTypes[i] == talentType)
|
{
|
sameType = true;
|
break;
|
}
|
}
|
bool sameSeries = false;
|
for (int i = 0; i < talentSeriess.Length; i++)
|
{
|
if (talentSeriess[i] == talentSeries)
|
{
|
sameSeries = true;
|
break;
|
}
|
}
|
return sameJob && sameType && sameSeries;
|
}
|
}
|
|
[Serializable]
|
public struct TalentElement
|
{
|
public Vector3 position;
|
}
|
|
[Serializable]
|
public struct ArrowElement
|
{
|
public string iconKey;
|
public Vector3 position;
|
public Vector3 rotation;
|
public Vector2 sizeDelta;
|
}
|
}
|
|
#if UNITY_EDITOR
|
public class TalentTreeScriptableEditor : Editor
|
{
|
[MenuItem("策划工具/生成天赋配置文件")]
|
static void BuildConfig()
|
{
|
TalentTreeScriptable config = CreateInstance<TalentTreeScriptable>();
|
string _path = StringUtility.Contact("Assets/ResourcesOut/Refdata/ScriptableObject/SoTalentTree/",
|
"SoTalentTree_",
|
".asset");
|
AssetDatabase.CreateAsset(config, _path);
|
AssetDatabase.Refresh();
|
ProjectWindowUtil.ShowCreatedAsset(config);
|
}
|
}
|
#endif
|
}
|