using UnityEngine;
|
using Snxxz.UI;
|
|
[XLua.LuaCallCSharp]
|
public class PrepareHandler : Singleton<PrepareHandler>
|
|
{
|
public struct ClientH0812
|
{
|
public uint PlayerID; // 玩家id
|
public byte PrepareState; //准备类型, TPreparingState
|
public float MaxTime; //最大时间
|
public int PrepareID; //准备ID, 如果是技能, 则是技能ID
|
}
|
|
public ClientH0812 clientPrepareH0812;
|
public H0812_tagBeginPrepare H0812
|
{
|
get; private set;
|
}
|
public bool isPreparing = false;
|
|
public enum E_PrepareType
|
{
|
pstDig = 1, // 挖宝
|
pstHorse,// 上马中
|
pstSkill,// 开始释放技能 根据字段CastTime
|
pstTruck,// 开始拉镖
|
pstCollecting, // 访问采集NPC
|
pstCatching,// 捕捉各类东西
|
pstTownPortal,// 回城
|
pstMissionCollecting,// 任务采集
|
pstCatchPet,// 捕捉宠物
|
pstMax,
|
}
|
|
public void ServerPrepareStart(H0812_tagBeginPrepare h0812)
|
{
|
// 做一些清理或者重置工作
|
if (H0812 != null)
|
{
|
Debug.LogWarningFormat("进度条处理: {0} 似乎没有结束.", (E_PrepareType)H0812.PrepareState);
|
}
|
|
H0812 = h0812;
|
isPreparing = true;
|
GActorPlayerBase _player = null;
|
GActorFight _fighter = null;
|
|
switch ((E_PrepareType)H0812.PrepareState)
|
{
|
case E_PrepareType.pstDig:
|
break;
|
case E_PrepareType.pstHorse:
|
break;
|
case E_PrepareType.pstSkill:
|
|
_fighter = GAMgr.Instance.GetBySID(H0812.PlayerID) as GActorFight;
|
|
if (H0812.PlayerID == PlayerDatas.Instance.PlayerId)
|
{
|
clientPrepareH0812 = new ClientH0812();
|
clientPrepareH0812.PlayerID = PlayerDatas.Instance.PlayerId;
|
clientPrepareH0812.MaxTime = H0812.MaxTime * Constants.F_GAMMA;
|
clientPrepareH0812.PrepareState = (byte)E_PrepareType.pstSkill;
|
clientPrepareH0812.PrepareID = (int)H0812.PrepareID;
|
WindowCenter.Instance.Open<PrepareWin>();
|
}
|
else
|
{
|
Skill _skill = _fighter.SkillMgr.Get((int)H0812.PrepareID);
|
_fighter.SkillMgr.CastSkill(_fighter.ServerInstID, _skill.id);
|
_skill.SkillPreparing = true;
|
_fighter.NextAction = 200;
|
_fighter.SkillMgr.DoingPrepareSkill = true;
|
}
|
|
if (_fighter != null)
|
{
|
_fighter.SkillMgr.Get((int)H0812.PrepareID).SSkillPrepareStatus = Skill.E_SkillPrepareStatus.Begin;
|
}
|
|
break;
|
case E_PrepareType.pstTruck:
|
break;
|
case E_PrepareType.pstCollecting:
|
|
if (H0812.PlayerID == PlayerDatas.Instance.PlayerId)
|
{
|
NormalCollectWin.s_CollectInfo = new ClientH0812()
|
{
|
PlayerID = PlayerDatas.Instance.PlayerId,
|
PrepareState = (byte)E_PrepareType.pstMissionCollecting,
|
MaxTime = H0812.MaxTime,
|
PrepareID = (int)H0812.PrepareID,
|
};
|
WindowCenter.Instance.Open<NormalCollectWin>();
|
}
|
|
_player = GAMgr.Instance.GetBySID(H0812.PlayerID) as GActorPlayerBase;
|
if (_player != null)
|
{
|
_player.Collect();
|
}
|
|
if (H0812.PlayerID == PlayerDatas.Instance.PlayerId)
|
{
|
if (PlayerDatas.Instance.hero != null)
|
{
|
PlayerDatas.Instance.hero.Behaviour.StopHandupAI(true);
|
}
|
}
|
|
break;
|
case E_PrepareType.pstCatching:
|
break;
|
case E_PrepareType.pstTownPortal:
|
break;
|
case E_PrepareType.pstMissionCollecting:
|
|
if (H0812.PlayerID == PlayerDatas.Instance.PlayerId)
|
{
|
NormalCollectWin.s_CollectInfo = new ClientH0812()
|
{
|
PlayerID = PlayerDatas.Instance.PlayerId,
|
PrepareState = (byte)E_PrepareType.pstMissionCollecting,
|
MaxTime = H0812.MaxTime,
|
PrepareID = (int)H0812.PrepareID,
|
};
|
WindowCenter.Instance.Open<NormalCollectWin>();
|
}
|
|
_player = GAMgr.Instance.GetBySID(H0812.PlayerID) as GActorPlayerBase;
|
if (_player != null)
|
{
|
if (_player.MovingState != E_MovingState.Ride)
|
{
|
_player.Collect();
|
}
|
}
|
|
if (H0812.PlayerID == PlayerDatas.Instance.PlayerId)
|
{
|
if (PlayerDatas.Instance.hero != null)
|
{
|
PlayerDatas.Instance.hero.Behaviour.StopHandupAI(true);
|
}
|
}
|
|
break;
|
case E_PrepareType.pstCatchPet:
|
break;
|
}
|
|
}
|
|
public UnityEngine.Events.UnityAction OnPrepareEndSuccess;
|
public UnityEngine.Events.UnityAction<int, int> OnPrepareEnd;
|
|
public void ServerPrepareEnd(H0813_tagPrepareEnd h0813)
|
{
|
isPreparing = false;
|
|
if (H0812 == null)
|
{
|
Debug.Log("服务端拉进度条结束,H0812 是空的");
|
return;
|
}
|
|
WindowCenter.Instance.Close<PrepareWin>();
|
|
if (h0813.PlayerID == PlayerDatas.Instance.baseData.PlayerID)
|
{
|
WindowCenter.Instance.Close<NormalCollectWin>();
|
}
|
|
GActorPlayerBase _player = null;
|
|
if (h0813.Type == 0)
|
{
|
// 正常结束
|
switch ((E_PrepareType)H0812.PrepareState)
|
{
|
case E_PrepareType.pstDig:
|
break;
|
case E_PrepareType.pstHorse:
|
break;
|
case E_PrepareType.pstSkill:
|
HandlerSkillPrepareEnd(h0813);
|
break;
|
case E_PrepareType.pstTruck:
|
break;
|
case E_PrepareType.pstCollecting:
|
_player = GAMgr.Instance.GetBySID(h0813.PlayerID) as GActorPlayerBase;
|
if (_player != null)
|
{
|
if (_player.IsCollect())
|
{
|
_player.IdleImmediate();
|
}
|
}
|
break;
|
case E_PrepareType.pstCatching:
|
break;
|
case E_PrepareType.pstTownPortal:
|
break;
|
case E_PrepareType.pstMissionCollecting:
|
_player = GAMgr.Instance.GetBySID(h0813.PlayerID) as GActorPlayerBase;
|
if (_player != null)
|
{
|
_player.IdleImmediate();
|
}
|
break;
|
case E_PrepareType.pstCatchPet:
|
break;
|
}
|
|
if (OnPrepareEndSuccess != null)
|
{
|
OnPrepareEndSuccess();
|
}
|
}
|
else
|
{
|
// 异常结束
|
switch ((E_PrepareType)h0813.Type)
|
{
|
case E_PrepareType.pstDig:
|
break;
|
case E_PrepareType.pstHorse:
|
break;
|
case E_PrepareType.pstSkill:
|
HandlerSkillPrepareException(h0813);
|
break;
|
case E_PrepareType.pstTruck:
|
break;
|
case E_PrepareType.pstCollecting:
|
_player = GAMgr.Instance.GetBySID(h0813.PlayerID) as GActorPlayerBase;
|
if (_player != null)
|
{
|
if (_player.IsCollect())
|
{
|
_player.IdleImmediate();
|
}
|
}
|
break;
|
case E_PrepareType.pstCatching:
|
break;
|
case E_PrepareType.pstTownPortal:
|
break;
|
case E_PrepareType.pstMissionCollecting:
|
_player = GAMgr.Instance.GetBySID(h0813.PlayerID) as GActorPlayerBase;
|
if (_player != null)
|
{
|
if (_player.IsCollect())
|
{
|
_player.IdleImmediate();
|
}
|
}
|
break;
|
case E_PrepareType.pstCatchPet:
|
break;
|
}
|
|
//Debug.LogFormat("收到进度条结束异常情况: {0}", (E_PrepareType)h0813.Type);
|
}
|
|
if (OnPrepareEnd != null)
|
{
|
OnPrepareEnd((int)h0813.PlayerID, h0813.Type);
|
}
|
|
H0812 = null;
|
}
|
|
private void HandlerSkillPrepareEnd(H0813_tagPrepareEnd h0813)
|
{
|
GActorFight _actor = GAMgr.Instance.GetBySID(h0813.PlayerID) as GActorFight;
|
|
if (_actor == null)
|
{
|
Debug.Log("服务端拉进度条结束 => 找不到角色");
|
return;
|
}
|
|
if (_actor != null)
|
{
|
Skill _skill = _actor.SkillMgr.Get((int)H0812.PrepareID);
|
|
if (_skill != null)
|
{
|
_skill.DoPreparingEnd(h0813.PlayerID);
|
}
|
}
|
|
}
|
|
private void HandlerSkillPrepareException(H0813_tagPrepareEnd h0813)
|
{
|
GActorFight _actor = GAMgr.Instance.GetBySID(h0813.PlayerID) as GActorFight;
|
|
if (_actor == null)
|
{
|
Debug.Log("服务端拉进度条异常 => 找不到角色");
|
return;
|
}
|
|
if (_actor != null)
|
{
|
Skill _skill = _actor.SkillMgr.Get((int)H0812.PrepareID);
|
|
if (_skill != null)
|
{
|
_skill.DoPreparingFail(h0813.PlayerID);
|
}
|
}
|
}
|
|
}
|