84 lines
3.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public enum LogicBattleFieldStateType
{
None, //无状态,不执行任何操作
DialogBeforeSearch, //巡游前对话
Search, //寻敌阶段(英雄一直往前跑)
Start, //刷怪阶段(提示信息,怪物刷新,站位变化)
Prepare, //准备阶段buff Debuff阶段接近阶段战场位置说明
BossIntro, //boss出场阶段
BossIntroPrepare, //boss出场结束后准备阶段
StartingFight, //开始战斗开始战斗UI动画相机切换到开战
Fighting, //战斗
Win, //胜利(人物归位)
Failed, //失败(人物归位)
End, //结束
Explore, //玩家使用遥控杆控制角色探索或者点击任务寻路探索
EditorFighting, //编辑器单机战斗
}
delegate LogicBattleFieldState LogicBattleFieldStateCreator (LogicBattleField field);
public abstract class LogicBattleFieldState
{
static Dictionary<LogicBattleFieldStateType, LogicBattleFieldStateCreator> creators;
public static LogicBattleFieldState Create (LogicBattleField field, LogicBattleFieldStateType state)
{
if (creators == null)
RegisterCreators ();
return creators.ContainsKey (state) ? creators [state] (field) : null;
}
static void RegisterCreators ()
{
creators = new Dictionary<LogicBattleFieldStateType, LogicBattleFieldStateCreator> ();
creators.Add(LogicBattleFieldStateType.DialogBeforeSearch, LogicBattleFieldStateDialogBS.Creator);
creators.Add(LogicBattleFieldStateType.Search, LogicBattleFieldStateSearch.Creator);
creators.Add(LogicBattleFieldStateType.Start, LogicBattleFieldStateStart.Creator);
creators.Add(LogicBattleFieldStateType.BossIntro, LogicBattleFieldStateBossIntro.Creator);
creators.Add(LogicBattleFieldStateType.BossIntroPrepare, LogicBattleFieldStateBossIntroPrepare.Creator);
creators.Add(LogicBattleFieldStateType.StartingFight, LogicBattleFieldStateStartingFight.Creator);
creators.Add(LogicBattleFieldStateType.Fighting, LogicBattleFieldStateFighting.Creator);
creators.Add(LogicBattleFieldStateType.Win, LogicBattleFieldStateWin.Creator);
creators.Add(LogicBattleFieldStateType.Failed, LogicBattleFieldStateFailed.Creator);
creators.Add(LogicBattleFieldStateType.End, LogicBattleFieldStateEnd.Creator);
creators.Add(LogicBattleFieldStateType.Explore, LogicBattleFieldStateExplore.Creator);
creators.Add(LogicBattleFieldStateType.EditorFighting, LogicBattleFieldStateEditorFighting.Creator);
}
protected LogicBattleFieldStateType mState;
protected LogicBattleField mField;
protected LogicBattleFieldState (LogicBattleField field, LogicBattleFieldStateType state)
{
mField = field;
mState = state;
}
public LogicBattleFieldStateType State { get { return mState; } }
public float StateTime { get; protected set; }
protected void ChangeState (LogicBattleFieldStateType state)
{
if (mField != null)
mField.CurrentState = state;
}
public abstract void OnEnter ();
public abstract void OnLeave ();
public abstract void Update (float deltaTime);
public abstract void OnDataChanged();
}