You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
237 lines
6.1 KiB
237 lines
6.1 KiB
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; |
|
} |
|
}
|
|
|