138 lines
5.2 KiB
C#
138 lines
5.2 KiB
C#
|
using Thousandto.Code.Logic;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using UnityEditor;
|
|||
|
using UnityEngine;
|
|||
|
|
|||
|
namespace Thousandto.SkillEditor.DIY
|
|||
|
{
|
|||
|
//技能
|
|||
|
public class EditorSkill
|
|||
|
{
|
|||
|
public EditorEntity Owner { get; private set; }
|
|||
|
public SkillVisualInfo VisualInfo { get; private set; }
|
|||
|
public List<SkillEditorBaseEvent> EventList { get; private set; }
|
|||
|
public bool IsFinish { get; private set; }
|
|||
|
public int CurFrame { get; private set; }
|
|||
|
public float FrameTimer { get; private set; }
|
|||
|
public const float OneFrameTime = 1f / 30f;
|
|||
|
|
|||
|
public EditorSkill(EditorEntity owner, SkillVisualInfo visualInfo)
|
|||
|
{
|
|||
|
Owner = owner;
|
|||
|
VisualInfo = visualInfo;
|
|||
|
|
|||
|
EventList = new List<SkillEditorBaseEvent>(visualInfo.DataList.Count);
|
|||
|
for (int i = 0; i < visualInfo.DataList.Count; ++i)
|
|||
|
{
|
|||
|
if (!visualInfo.DataList[i].IsEnable)
|
|||
|
continue;
|
|||
|
|
|||
|
var newEvent = NewEvent(visualInfo.DataList[i]);
|
|||
|
if (newEvent != null)
|
|||
|
{
|
|||
|
EventList.Add(newEvent);
|
|||
|
}
|
|||
|
}
|
|||
|
EventList.Sort(SortEvent);
|
|||
|
}
|
|||
|
|
|||
|
private int SortEvent(SkillEditorBaseEvent left, SkillEditorBaseEvent right)
|
|||
|
{
|
|||
|
return right.EventType.CompareTo(left.EventType);
|
|||
|
}
|
|||
|
|
|||
|
public void Start()
|
|||
|
{
|
|||
|
IsFinish = false;
|
|||
|
CurFrame = 0;
|
|||
|
FrameTimer = 0f;
|
|||
|
DoEvent(CurFrame);
|
|||
|
}
|
|||
|
|
|||
|
public void Stop()
|
|||
|
{
|
|||
|
IsFinish = true;
|
|||
|
for (int i = 0; i < EventList.Count; ++i)
|
|||
|
{
|
|||
|
EventList[i].Stop();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void Update(float dt)
|
|||
|
{
|
|||
|
if (IsFinish)
|
|||
|
return;
|
|||
|
|
|||
|
for (int i = 0; i < EventList.Count; ++i)
|
|||
|
{
|
|||
|
EventList[i].Update(dt);
|
|||
|
}
|
|||
|
|
|||
|
FrameTimer += dt;
|
|||
|
while (FrameTimer >= OneFrameTime)
|
|||
|
{
|
|||
|
++CurFrame;
|
|||
|
FrameTimer -= OneFrameTime;
|
|||
|
DoEvent(CurFrame);
|
|||
|
}
|
|||
|
|
|||
|
if(CurFrame >= VisualInfo.FrameCount)
|
|||
|
{
|
|||
|
//技能结束
|
|||
|
Stop();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void DoEvent(int frame)
|
|||
|
{
|
|||
|
for (int i = 0; i < EventList.Count; ++i)
|
|||
|
{
|
|||
|
EventList[i].FrameUpdate(frame);
|
|||
|
if(EventList[i].BaseEventInfo.EventFrame == frame)
|
|||
|
{
|
|||
|
EventList[i].Enter();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
private SkillEditorBaseEvent NewEvent(SkillBaseEventInfo info)
|
|||
|
{
|
|||
|
switch (info.EventType)
|
|||
|
{
|
|||
|
case SkillEventDefine.PlayAnimation: //播放动作
|
|||
|
return new EditorPlayAnimEvent(VisualInfo, info, Owner);
|
|||
|
case SkillEventDefine.PlayVfx: //播放特效
|
|||
|
return new EditorPlayVfxEvent(VisualInfo, info, Owner);
|
|||
|
case SkillEventDefine.PlaySfx: //播放音效
|
|||
|
return new EditorPlaySFXEvent(VisualInfo, info, Owner);
|
|||
|
case SkillEventDefine.PlayCameraShake: //播放摄像机震动
|
|||
|
return new EditorPlayCameraShakeEvent(VisualInfo, info, Owner);
|
|||
|
case SkillEventDefine.PlayBlur: //播放辐射状模糊效果
|
|||
|
return new EditorPlayBlurEvent(VisualInfo, info, Owner);
|
|||
|
case SkillEventDefine.PlaySlow: //播放减速效果
|
|||
|
return new EditorPlaySlowEvent(VisualInfo, info, Owner);
|
|||
|
case SkillEventDefine.DisableMove: //禁止角色移动事件
|
|||
|
return new EditorDisableMoveEvent(VisualInfo, info, Owner);
|
|||
|
case SkillEventDefine.DisableChangeDir: //禁止角色改变方向事件
|
|||
|
return new EditorDisableChangeDirEvent(VisualInfo, info, Owner);
|
|||
|
case SkillEventDefine.PlayLockTrajectory: //播放锁定弹道
|
|||
|
return new EditorPlayLockTrajectoryEvent(VisualInfo, info, Owner);
|
|||
|
case SkillEventDefine.PlaySimpleSkillObject: //播放简单召唤物
|
|||
|
return new EditorPlaySimpleSkillObjectEvent(VisualInfo, info, Owner);
|
|||
|
case SkillEventDefine.PlaySkillObject: //播放技能召唤物
|
|||
|
return new EditorPlaySkillObjectEvent(VisualInfo, info, Owner);
|
|||
|
case SkillEventDefine.PlayHit: //播放产生伤害事件
|
|||
|
return new EditorPlayHitEvent(VisualInfo, info, Owner);
|
|||
|
case SkillEventDefine.PlaySelfMove: //播放自身移动事件
|
|||
|
return new EditorPlaySelfMoveEvent(VisualInfo, info, Owner);
|
|||
|
case SkillEventDefine.PlayHideWeapon:
|
|||
|
return new EditorPlayHideWeaponEvent(VisualInfo, info, Owner);
|
|||
|
case SkillEventDefine.PlayLinkDamage:
|
|||
|
return new EditorPlayLinkDamageEvent(VisualInfo, info, Owner);
|
|||
|
}
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|