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.

242 lines
6.9 KiB

using System;
using System.Collections.Generic;
using UnityEngine;
namespace MU3
{
// Token: 0x0200073B RID: 1851
public class MotionEffectManager : MonoBehaviour
{
// Token: 0x06002FC3 RID: 12227 RVA: 0x000FE8E8 File Offset: 0x000FE8E8
public void copyFrom(MotionEffectManager src)
{
this._effectDefines = new MotionEffectDefine[src._effectDefines.Length];
for (int i = 0; i < src._effectDefines.Length; i++)
{
this._effectDefines[i] = new MotionEffectDefine();
this._effectDefines[i].copyFrom(src._effectDefines[i]);
}
this._attachmentEffectDefinesList = new MotionEffectDefineList[src._attachmentEffectDefinesList.Length];
for (int j = 0; j < src._attachmentEffectDefinesList.Length; j++)
{
MotionEffectDefine[] effectDefines = src._attachmentEffectDefinesList[j].EffectDefines;
for (int k = 0; k < effectDefines.Length; k++)
{
this._attachmentEffectDefinesList[j].EffectDefines[k] = new MotionEffectDefine();
this._attachmentEffectDefinesList[j].EffectDefines[k].copyFrom(effectDefines[k]);
}
}
}
// Token: 0x17000706 RID: 1798
// (set) Token: 0x06002FC4 RID: 12228 RVA: 0x000FE9BC File Offset: 0x000FE9BC
public bool isAttached
{
set
{
this._isAttached = value;
}
}
// Token: 0x17000707 RID: 1799
// (set) Token: 0x06002FC5 RID: 12229 RVA: 0x000FE9C8 File Offset: 0x000FE9C8
public int attachmentMotionIndex
{
set
{
this._attachmentMotionIndex = value;
}
}
// Token: 0x06002FC6 RID: 12230 RVA: 0x000FE9D4 File Offset: 0x000FE9D4
private void Start()
{
this.initialize();
}
// Token: 0x06002FC7 RID: 12231 RVA: 0x000FE9DC File Offset: 0x000FE9DC
private void LateUpdate()
{
this._removeInstanceNameList.Clear();
foreach (KeyValuePair<string, MotionEffectInstance> keyValuePair in this._effectInstanceDictionary)
{
keyValuePair.Value.execute();
if (keyValuePair.Value.isDestroyed)
{
this._removeInstanceNameList.Add(keyValuePair.Key);
}
}
foreach (string key in this._removeInstanceNameList)
{
this._effectInstanceDictionary.Remove(key);
}
}
// Token: 0x06002FC8 RID: 12232 RVA: 0x000FEABC File Offset: 0x000FEABC
public void TriggerEffect(string text)
{
if (text.StartsWith("Start"))
{
string name = text.Substring(this.CommandStartLength);
this.startEffect(name);
}
else if (text.StartsWith("End"))
{
string key = text.Substring(this.CommandEndLength);
MotionEffectInstance motionEffectInstance;
if (this._effectInstanceDictionary.TryGetValue(key, out motionEffectInstance))
{
motionEffectInstance.stop();
}
}
else if (text.StartsWith("Destroy"))
{
string key2 = text.Substring(this.CommandDestroyLength);
MotionEffectInstance motionEffectInstance2;
if (this._effectInstanceDictionary.TryGetValue(key2, out motionEffectInstance2))
{
motionEffectInstance2.destroy();
}
}
else
{
this.startEffect(text);
}
}
// Token: 0x06002FC9 RID: 12233 RVA: 0x000FEB70 File Offset: 0x000FEB70
public void initialize()
{
this._effectDefineDictionary = new Dictionary<string, MotionEffectDefine>();
MotionEffectDefine[] array;
if (!this._isAttached)
{
array = this._effectDefines;
}
else
{
MotionEffectDefine[] array2 = (this._attachmentEffectDefinesList.Length <= 0) ? null : this._attachmentEffectDefinesList[this._attachmentMotionIndex].EffectDefines;
if (array2 == null || array2.Length < 1)
{
array = this._effectDefines;
}
else
{
array = array2;
}
}
if (array == null)
{
array = new MotionEffectDefine[0];
}
foreach (MotionEffectDefine motionEffectDefine in array)
{
motionEffectDefine.initialize();
if (!string.IsNullOrEmpty(motionEffectDefine.name))
{
this._effectDefineDictionary.Add(motionEffectDefine.name, motionEffectDefine);
}
}
this._effectInstanceDictionary = new Dictionary<string, MotionEffectInstance>();
this._removeInstanceNameList = new List<string>();
}
// Token: 0x06002FCA RID: 12234 RVA: 0x000FEC54 File Offset: 0x000FEC54
private MotionEffectInstance createEffect(MotionEffectDefine effectDefine)
{
MotionEffectInstance motionEffectInstance = MotionEffectInstance.create(effectDefine);
if (motionEffectInstance != null)
{
if (effectDefine.isSingleton)
{
foreach (KeyValuePair<string, MotionEffectInstance> keyValuePair in this._effectInstanceDictionary)
{
if (keyValuePair.Value != null && keyValuePair.Value.effectDefine.isSingleton)
{
keyValuePair.Value.destroy();
}
}
}
if (effectDefine.isSingletonName)
{
foreach (KeyValuePair<string, MotionEffectInstance> keyValuePair2 in this._effectInstanceDictionary)
{
if (keyValuePair2.Value != null && keyValuePair2.Value.effectDefine.nameHash == effectDefine.nameHash)
{
keyValuePair2.Value.destroy();
}
}
}
MotionEffectInstance value;
if (this._effectInstanceDictionary.TryGetValue(effectDefine.name, out value))
{
this._effectInstanceDictionary.Remove(effectDefine.name);
string key = effectDefine.name + this._copyIndex.ToString("000");
this._effectInstanceDictionary.Add(key, value);
this._copyIndex++;
}
this._effectInstanceDictionary.Add(effectDefine.name, motionEffectInstance);
}
return motionEffectInstance;
}
// Token: 0x06002FCB RID: 12235 RVA: 0x000FEDEC File Offset: 0x000FEDEC
private void startEffect(string name)
{
MotionEffectDefine effectDefine;
if (this._effectDefineDictionary.TryGetValue(name, out effectDefine))
{
MotionEffectInstance motionEffectInstance = this.createEffect(effectDefine);
if (motionEffectInstance != null)
{
motionEffectInstance.play();
}
}
}
// Token: 0x0400553F RID: 21823
[SerializeField]
private MotionEffectDefine[] _effectDefines;
// Token: 0x04005540 RID: 21824
[SerializeField]
private MotionEffectDefineList[] _attachmentEffectDefinesList;
// Token: 0x04005541 RID: 21825
private const string CommandStart = "Start";
// Token: 0x04005542 RID: 21826
private const string CommandEnd = "End";
// Token: 0x04005543 RID: 21827
private const string CommandDestroy = "Destroy";
// Token: 0x04005544 RID: 21828
private int CommandStartLength = "Start".Length;
// Token: 0x04005545 RID: 21829
private int CommandEndLength = "End".Length;
// Token: 0x04005546 RID: 21830
private int CommandDestroyLength = "Destroy".Length;
// Token: 0x04005547 RID: 21831
private Dictionary<string, MotionEffectDefine> _effectDefineDictionary;
// Token: 0x04005548 RID: 21832
private Dictionary<string, MotionEffectInstance> _effectInstanceDictionary;
// Token: 0x04005549 RID: 21833
private List<string> _removeInstanceNameList;
// Token: 0x0400554A RID: 21834
private int _copyIndex;
// Token: 0x0400554B RID: 21835
private bool _isAttached;
// Token: 0x0400554C RID: 21836
private int _attachmentMotionIndex = -1;
}
}