|
|
|
|
using System.Collections;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
using UnityEngine.Events;
|
|
|
|
|
using UnityEngine.Serialization;
|
|
|
|
|
|
|
|
|
|
[System.Serializable]
|
|
|
|
|
public class SkillData
|
|
|
|
|
{
|
|
|
|
|
public string IDX;
|
|
|
|
|
|
|
|
|
|
[Space(10)]
|
|
|
|
|
public string trigger;
|
|
|
|
|
|
|
|
|
|
[Space(10)]
|
|
|
|
|
public float delay;
|
|
|
|
|
[OnlyRead]
|
|
|
|
|
public float timeLast;
|
|
|
|
|
|
|
|
|
|
[Space(10)]
|
|
|
|
|
public int rate;//1000 분율
|
|
|
|
|
|
|
|
|
|
[OnlyRead]
|
|
|
|
|
[Space(10)]
|
|
|
|
|
public int cntUse;
|
|
|
|
|
public int cntUseMax;
|
|
|
|
|
|
|
|
|
|
[Space(10)]
|
|
|
|
|
public string work;
|
|
|
|
|
public string work2;
|
|
|
|
|
public float value;
|
|
|
|
|
public string value2;
|
|
|
|
|
[Space(10)]
|
|
|
|
|
public float duration;
|
|
|
|
|
public float timeRepeat;
|
|
|
|
|
|
|
|
|
|
[Space(10)]
|
|
|
|
|
public Motion.SpineControl motion;
|
|
|
|
|
public Motion.SpineControl motion2;
|
|
|
|
|
|
|
|
|
|
[Space(10)]
|
|
|
|
|
public GameObject prefab;
|
|
|
|
|
|
|
|
|
|
static public SkillData Create(string[] spl)
|
|
|
|
|
{
|
|
|
|
|
int i = 0;
|
|
|
|
|
SkillData skill = new SkillData();
|
|
|
|
|
|
|
|
|
|
skill.IDX = spl[i++];
|
|
|
|
|
|
|
|
|
|
skill.trigger = spl[i++];
|
|
|
|
|
|
|
|
|
|
skill.delay = float.Parse(spl[i++]);
|
|
|
|
|
|
|
|
|
|
skill.rate = int.Parse(spl[i++]);
|
|
|
|
|
|
|
|
|
|
skill.cntUse = 0;
|
|
|
|
|
string str = spl[i++];
|
|
|
|
|
skill.cntUseMax = str.CompareTo("MAX") == 0 ? int.MaxValue : int.Parse(str);
|
|
|
|
|
|
|
|
|
|
skill.work = spl[i++];
|
|
|
|
|
skill.work2 = spl[i++];
|
|
|
|
|
|
|
|
|
|
skill.value = float.Parse(spl[i++]);
|
|
|
|
|
skill.value2 = spl[i++];
|
|
|
|
|
|
|
|
|
|
skill.duration = float.Parse(spl[i++]);
|
|
|
|
|
skill.timeRepeat = float.Parse(spl[i++]);
|
|
|
|
|
|
|
|
|
|
return skill;
|
|
|
|
|
}
|
|
|
|
|
static public SkillData Create(string str)
|
|
|
|
|
{
|
|
|
|
|
SkillData skill = new SkillData();
|
|
|
|
|
|
|
|
|
|
string[] values = str.Split('&');
|
|
|
|
|
|
|
|
|
|
for(int i = 0; i < values.Length; i++)
|
|
|
|
|
{
|
|
|
|
|
string[] data = values[i].Split('=');
|
|
|
|
|
|
|
|
|
|
switch(data[0])
|
|
|
|
|
{
|
|
|
|
|
case "I":
|
|
|
|
|
{
|
|
|
|
|
SkillData origin = DataManager.Instance.dataSkill.Search(data[1]);
|
|
|
|
|
if (origin != null)
|
|
|
|
|
skill = Copy(origin);
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Debug.LogError($"{data[1]} : Skill 테이블에 존재하지 않는 IDX 입니다.");
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "T"://Trigger
|
|
|
|
|
{
|
|
|
|
|
skill.trigger = data[1];
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "D"://Delay
|
|
|
|
|
{
|
|
|
|
|
skill.delay = float.Parse(data[1]);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "R"://Rate
|
|
|
|
|
{
|
|
|
|
|
skill.rate = int.Parse(data[1]);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "C"://Count
|
|
|
|
|
{
|
|
|
|
|
skill.cntUse = 0;
|
|
|
|
|
skill.cntUseMax = str.CompareTo("MAX") == 0 ? int.MaxValue : int.Parse(data[1]);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "W"://Work
|
|
|
|
|
{
|
|
|
|
|
skill.work = data[1];
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "W2"://Work2
|
|
|
|
|
{
|
|
|
|
|
skill.work2 = data[1];
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "V"://Value
|
|
|
|
|
{
|
|
|
|
|
skill.value = float.Parse(data[1]);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "V2"://Value2
|
|
|
|
|
{
|
|
|
|
|
skill.value2 = data[1];
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "TR"://Time Repeat
|
|
|
|
|
{
|
|
|
|
|
skill.timeRepeat = float.Parse(data[1]);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "DU"://DUration
|
|
|
|
|
{
|
|
|
|
|
skill.duration = float.Parse(data[1]);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return skill;
|
|
|
|
|
}
|
|
|
|
|
static public SkillData Copy(SkillData origin)
|
|
|
|
|
{
|
|
|
|
|
SkillData skill = new SkillData();
|
|
|
|
|
|
|
|
|
|
skill.IDX = origin.IDX;
|
|
|
|
|
skill.trigger = origin.trigger;
|
|
|
|
|
skill.work = origin.work;
|
|
|
|
|
skill.work2 = origin.work2;
|
|
|
|
|
skill.value = origin.value;
|
|
|
|
|
skill.value2 = origin.value2;
|
|
|
|
|
|
|
|
|
|
skill.delay = origin.delay;
|
|
|
|
|
skill.timeRepeat = origin.timeRepeat;
|
|
|
|
|
|
|
|
|
|
skill.rate = origin.rate;
|
|
|
|
|
|
|
|
|
|
skill.cntUse = 0;
|
|
|
|
|
skill.cntUseMax = origin.cntUseMax;
|
|
|
|
|
|
|
|
|
|
skill.duration = origin.duration;
|
|
|
|
|
|
|
|
|
|
return skill;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[System.Serializable]
|
|
|
|
|
public class ConnectEvent : UnityEvent<int, List<object>> { }
|
|
|
|
|
[FormerlySerializedAs("onConnect")]
|
|
|
|
|
[SerializeField]
|
|
|
|
|
[Space(10)]
|
|
|
|
|
public ConnectEvent onConnect = new ConnectEvent();
|
|
|
|
|
|
|
|
|
|
public bool Activate(string trigger)
|
|
|
|
|
{
|
|
|
|
|
if (this.trigger.Equals(trigger))
|
|
|
|
|
{
|
|
|
|
|
if ((delay < Time.realtimeSinceStartup - timeLast) && (Random.Range(0, 1000) < rate) && (cntUse < cntUseMax))
|
|
|
|
|
{
|
|
|
|
|
timeLast = Time.realtimeSinceStartup;
|
|
|
|
|
cntUse++;
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[System.Serializable]
|
|
|
|
|
public class DataSkill : IData
|
|
|
|
|
{
|
|
|
|
|
Dictionary<string, SkillData> listSkill;
|
|
|
|
|
public List<SkillData> skills;
|
|
|
|
|
public override void TableLoad()
|
|
|
|
|
{
|
|
|
|
|
string[] strLine = FileLoadWithLineSplit(path == string.Empty ? "CSV/Skill" : path);
|
|
|
|
|
string[] spl;
|
|
|
|
|
|
|
|
|
|
listSkill = new Dictionary<string, SkillData>();
|
|
|
|
|
for (int i = 1; i < strLine.Length; i++)
|
|
|
|
|
{
|
|
|
|
|
if (1 < strLine[i].Length)
|
|
|
|
|
{
|
|
|
|
|
spl = strLine[i].Split(',');
|
|
|
|
|
|
|
|
|
|
SkillData item = SkillData.Create(spl);
|
|
|
|
|
listSkill.Add(item.IDX, item);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
skills = new List<SkillData>(listSkill.Values);
|
|
|
|
|
}
|
|
|
|
|
public override void LoadedCheck()
|
|
|
|
|
{
|
|
|
|
|
if (listSkill == null)
|
|
|
|
|
TableLoad();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public SkillData Search(string idx)
|
|
|
|
|
{
|
|
|
|
|
LoadedCheck();
|
|
|
|
|
|
|
|
|
|
if (listSkill.ContainsKey(idx))
|
|
|
|
|
return listSkill[idx];
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
}
|