155 lines
4.6 KiB
C#
155 lines
4.6 KiB
C#
using UnityEngine;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
|
|
public class LogicBattleFieldStateEnd : LogicBattleFieldState
|
|
{
|
|
public static LogicBattleFieldState Creator (LogicBattleField field)
|
|
{
|
|
return new LogicBattleFieldStateEnd (field);
|
|
}
|
|
|
|
public LogicBattleFieldStateEnd (LogicBattleField field)
|
|
: base (field, LogicBattleFieldStateType.End)
|
|
{
|
|
}
|
|
|
|
private BattleEndInfo mEndInfo;
|
|
|
|
bool isPlayRecord = false;
|
|
float mWaitTime = 0;
|
|
FighterManager mFighterMgr;
|
|
const int m_relive_delay_time_cfgid = 31;
|
|
public override void OnEnter ()
|
|
{
|
|
switch (mField.Result)
|
|
{
|
|
case FightingResult.Failed:
|
|
BattleMgr.Instance.OnBattleFailed(mField.IsChallengeBossMode);
|
|
break;
|
|
case FightingResult.Win:
|
|
BattleMgr.Instance.OnBattleWin(mField.IsChallengeBossMode);
|
|
break;
|
|
case FightingResult.Peace:
|
|
BattleMgr.Instance.OnBattleForceStop(mField.IsChallengeBossMode);
|
|
break;
|
|
}
|
|
mWaitTime = (mField.IsChallengeBossMode|| mField.IsExploreMode) ? GlobalConfig.Instance.GetConfigFloatValue(m_relive_delay_time_cfgid) : GlobalConfig.Instance.GetConfigFloatValue(52);
|
|
mFighterMgr = mField.Battle.FighterMgr;
|
|
mField.Battle.NeedBackToLastPos = mField.IsChallengeBossMode || mField.IsExploreMode;
|
|
mField.Battle.BackToPos = mField.PreSpawnPos;
|
|
isPlayRecord = mField.Battle.IsPlayRecord;
|
|
|
|
mEndInfo = new BattleEndInfo();
|
|
mEndInfo.IsPlayRecord = isPlayRecord;
|
|
|
|
mField.Battle.EndStatistics();
|
|
|
|
if (mField.IsChallengeBossMode || mField.IsExploreMode) {
|
|
mField.Battle.Factors = null;
|
|
mField.Battle.BattleScene.RestoreSkyboxMat();
|
|
EventMgr.DispatchEvent<bool>(new CoreEvent<bool>(ECoreEventType.EID_RESTORE_SCENE, true));
|
|
}
|
|
else {
|
|
FadeOut();
|
|
mField.DropItems();
|
|
}
|
|
|
|
ReliveFighters(); //复活我方 清空敌方
|
|
if (mField.HasTeamMemberDead())
|
|
BattleMgr.Instance.PlayCameraReliveEffect();
|
|
|
|
if (mField.Battle.Recorder != null)
|
|
{
|
|
mField.Battle.CloseRecorder();
|
|
}
|
|
|
|
if(isPlayRecord)
|
|
{
|
|
mWaitTime = 0;
|
|
}
|
|
}
|
|
|
|
void ReliveFighters()
|
|
{
|
|
List<Fighter> fighters = mField.Fighters;
|
|
for (int idx = fighters.Count - 1; idx >= 0; idx--)
|
|
{
|
|
Fighter fighter = fighters[idx];
|
|
if (fighter.IsTeamMember)
|
|
{
|
|
if (!fighter.IsAlive)
|
|
{
|
|
fighter.Relive(100);
|
|
}
|
|
else
|
|
{
|
|
fighter.ResetLife();
|
|
fighter.ForceIdle();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (fighter.IsDisposed && fighter.Ctrl != null)
|
|
fighter.Ctrl.OnDisposed(true);
|
|
else if (fighter.IsSpawned && !fighter.IsDisposed)
|
|
fighter.Dispose();
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
void FadeOut()
|
|
{
|
|
List<Fighter> fighters = mField.Fighters;
|
|
for (int idx = fighters.Count - 1; idx >= 0; idx--)
|
|
{
|
|
Fighter fighter = fighters[idx];
|
|
if (fighter.Actor.IsNpc)
|
|
{
|
|
if (fighter.IsSpawned && !fighter.IsAlive)
|
|
fighter.Ctrl.FadeOut(mWaitTime);
|
|
}
|
|
}
|
|
}
|
|
|
|
public override void OnLeave ()
|
|
{
|
|
Dispose();
|
|
mField.ClearFighter();
|
|
mField.Battle.PreviousFightingTime = mField.FightingTime;
|
|
BattleMgr.Instance.OnBattleEnd(0,mEndInfo); //传递mEndInfo 防止在等待中 原值修改
|
|
if (isPlayRecord)
|
|
{
|
|
mField.Battle.FighterMgr.RestoreTeamFighters();
|
|
}
|
|
}
|
|
|
|
public override void Update (float deltaTime)
|
|
{
|
|
mWaitTime -= deltaTime;
|
|
if (mWaitTime <= 0)
|
|
ChangeState (LogicBattleFieldStateType.None);
|
|
}
|
|
|
|
public override void OnDataChanged()
|
|
{
|
|
|
|
}
|
|
|
|
void Dispose()
|
|
{ //刪除存活的敌方
|
|
List<Fighter> fighters = mField.Fighters;
|
|
for (int i = fighters.Count - 1; i >= 0; i--)
|
|
{
|
|
Fighter fighter = fighters[i];
|
|
if (fighter.IsTeamMember)//如果非正常失败 角色没有死亡 会被删除 后续无法复活
|
|
continue;
|
|
if (fighter.IsAlive)
|
|
{
|
|
fighter.Dispose();
|
|
}
|
|
}
|
|
}
|
|
}
|