386 lines
15 KiB
C#
386 lines
15 KiB
C#
using FSM;
|
||
using System;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using System.Security.Cryptography;
|
||
using UnityEngine;
|
||
using ZXKFramework;
|
||
|
||
namespace YiLiao.XinFeiTingZhen
|
||
{
|
||
public class FSMManager : FsmBase<FSMManager>
|
||
{
|
||
[HideInInspector]
|
||
public bool nextState;
|
||
public GameModel gameModel;
|
||
public Main.GameModel main_gameModel;
|
||
public void Init()
|
||
{
|
||
gameModel = MVC.GetModel<GameModel>();
|
||
main_gameModel = MVC.GetModel<Main.GameModel>();
|
||
StartCoroutine(InitData(ChangeStateEvent));
|
||
}
|
||
|
||
private void ChangeStateEvent(string stateName)
|
||
{
|
||
gameModel.ChangeState(stateName);
|
||
if (gameModel.bData != null)
|
||
{
|
||
InteractionDisableAll();
|
||
GameManager.Instance.uiManager.CloseUI<PopPanel>();
|
||
GameManager.Instance.uiManager.CloseUI<SpeakPanel>();
|
||
GameManager.Instance.uiManager.CloseUI<ImgSelectQuestionPanel>();
|
||
GameManager.Instance.uiManager.CloseUI<DragQuestionPanel>();
|
||
GameManager.Instance.uiManager.CloseUI<LineQuestionPanel>();
|
||
GameManager.Instance.uiManager.CloseUI<TxtSelectQuestionPanel>();
|
||
GameManager.Instance.uiManager.CloseUI<BookPanel>();
|
||
GameManager.Instance.uiManager.CloseUI<ArrowPanel>();
|
||
GameManager.Instance.highLightManager.HideAllHighLight();
|
||
GameManager.Instance.sceneDataHandler.SaveSceneDataToJson(main_gameModel.mainData.folder + "/SaveData/" + stateName + ".json");
|
||
GameManager.Instance.uiManager.GetUI<TipPanel>().AddTip(gameModel.bData.txt);
|
||
//GameManager.Instance.kaoheManager.AddData(gameModel.bData.parentName, gameModel.bData.name, gameModel.bData.type, gameModel.bData.score_kh);
|
||
if (main_gameModel.modeType == ModeType.KaoHe)
|
||
{
|
||
GameManager.Instance.kaoheManager.AddData(gameModel.bData.name1, gameModel.bData.name2, gameModel.bData.name3, gameModel.bData.name4, gameModel.bData.type, gameModel.bData.score_kh);
|
||
}
|
||
if (main_gameModel.modeType == ModeType.ShiXun)
|
||
{
|
||
GameManager.Instance.kaoheManager.AddData(gameModel.bData.name1, gameModel.bData.name2, gameModel.bData.name3, gameModel.bData.name4, gameModel.bData.type, gameModel.bData.score_sx);
|
||
}
|
||
GameManager.Instance.uiManager.GetUI<TreeViewPanel>().Expand(gameModel.bData.state);
|
||
}
|
||
}
|
||
public void ShowPopText(string str)
|
||
{
|
||
GameManager.Instance.uiManager.ShowUI<PopPanel>(null, new string[] { str });
|
||
}
|
||
public void ClosePopText()
|
||
{
|
||
GameManager.Instance.uiManager.CloseUI<PopPanel>();
|
||
}
|
||
public void ShowTip(int i, bool isKaohe = false)
|
||
{
|
||
if (main_gameModel.modeType == ModeType.KaoHe && !isKaohe) return;//<2F><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>ʾ
|
||
GameManager.Instance.uiManager.GetUI<TipPanel>().ShowTip(i);
|
||
GameManager.Instance.uiManager.ShowUI<TipPanel>();
|
||
}
|
||
public void HideTip()
|
||
{
|
||
GameManager.Instance.uiManager.CloseUI<TipPanel>();
|
||
}
|
||
public void ShowCamera(string value)
|
||
{
|
||
GameManager.Instance.virtualCameraManager.ShowCamera(value);
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
public void PlayBgm(int id)
|
||
{
|
||
if (main_gameModel.modeType == ModeType.KaoHe) return;//<2F><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>ʾ
|
||
if (gameModel.bData.sound.Split('|').Length <= id) return;
|
||
Game.Instance.eventManager.Raise(new PlaySoundEvent()
|
||
{
|
||
path = gameModel.bData.sound.Split('|')[id],
|
||
});
|
||
}
|
||
public GameObject Get(string value)
|
||
{
|
||
return GameManager.Instance.interactionManager._allInteraction[value];
|
||
}
|
||
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||
public void Show(string value)
|
||
{
|
||
GameManager.Instance.interactionManager._allInteraction[value].SetActive(true);
|
||
}
|
||
//<2F><><EFBFBD>ؽ<EFBFBD><D8BD><EFBFBD>
|
||
public void Hide(string value)
|
||
{
|
||
GameManager.Instance.interactionManager._allInteraction[value].SetActive(false);
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD>Down<77><6E><EFBFBD><EFBFBD>
|
||
public void InteractionDown(string value, Action<GameObject> callBack)
|
||
{
|
||
GameManager.Instance.interactionManager._allInteraction[value].TryGetComponent(out IDown down);
|
||
down?.Down(callBack);
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD>Stay<61><79><EFBFBD><EFBFBD>
|
||
public void InteractionStay(string value, Action<GameObject> callBack)
|
||
{
|
||
GameManager.Instance.interactionManager._allInteraction[value].TryGetComponent(out IStay stay);
|
||
stay?.Stay(callBack);
|
||
}
|
||
|
||
//<2F><><EFBFBD><EFBFBD>Trigger<65><72><EFBFBD><EFBFBD>
|
||
public void InteractionTrigger(string value, Action<GameObject> callBack)
|
||
{
|
||
GameManager.Instance.interactionManager._allInteraction[value].TryGetComponent(out ITrigger trigger);
|
||
trigger?.Trigger(callBack);
|
||
}
|
||
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||
|
||
public void Light(string value, bool isKaoHeLight = false)
|
||
{
|
||
if (!isKaoHeLight)
|
||
{
|
||
if (main_gameModel.modeType == ModeType.ShiXun)
|
||
{
|
||
Game.Instance.eventManager.Raise(new HighLightEvent()
|
||
{
|
||
name = value,
|
||
visiable = true
|
||
});
|
||
}
|
||
}
|
||
else
|
||
{
|
||
Game.Instance.eventManager.Raise(new HighLightEvent()
|
||
{
|
||
name = value,
|
||
visiable = true
|
||
});
|
||
}
|
||
}
|
||
|
||
public void Light(string value)
|
||
{
|
||
if (main_gameModel.modeType == ModeType.KaoHe) return;//<2F><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
Game.Instance.eventManager.Raise(new HighLightEvent()
|
||
{
|
||
name = value,
|
||
visiable = true
|
||
});
|
||
}
|
||
/// <summary>
|
||
/// <20><EFBFBD><F2BFAAB8><EFBFBD> <20><EFBFBD><F2BFAABD><EFBFBD>
|
||
/// </summary>
|
||
public void Light_EnableInteraction(string value)
|
||
{
|
||
Light(value);
|
||
GameManager.Instance.interactionManager.EnableInteraction(value);
|
||
}
|
||
//<2F><><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||
public void Unlight(string value)
|
||
{
|
||
Game.Instance.eventManager.Raise(new HighLightEvent()
|
||
{
|
||
name = value,
|
||
visiable = false
|
||
});
|
||
}
|
||
/// <summary>
|
||
/// <20>رո<D8B1><D5B8><EFBFBD> <20>رս<D8B1><D5BD><EFBFBD>
|
||
/// </summary>
|
||
public void Unlight_DisableInteraction(string value)
|
||
{
|
||
Unlight(value);
|
||
GameManager.Instance.interactionManager.DisableInteraction(value);
|
||
}
|
||
public void InteractionDisableAll()
|
||
{
|
||
foreach (var item in GameManager.Instance.interactionManager._allInteraction)
|
||
{
|
||
item.Value.TryGetComponent(out ITrigger trigger);
|
||
trigger?.Trigger(null);
|
||
item.Value.TryGetComponent(out IStay stay);
|
||
stay?.Stay(null);
|
||
item.Value.TryGetComponent(out IDown down);
|
||
down?.Down(null);
|
||
}
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD>Timeline
|
||
Coroutine coroutine;
|
||
|
||
public void PlayClip(string value, Action callBack = null)
|
||
{
|
||
float t = GetClipLength(value);
|
||
if (t > 0.1f) GameManager.Instance.uiManager.GetUI<TreeViewPanel>().LockAllBtn();
|
||
GameManager.Instance.timelineManager.PlayNormalClip(value);
|
||
if (Game.Instance)
|
||
{
|
||
if (coroutine != null) Game.Instance.IEnumeratorManager.Stop(coroutine);
|
||
coroutine = Game.Instance.IEnumeratorManager.Run(WaitExecute(t, () => {
|
||
GameManager.Instance.uiManager.GetUI<TreeViewPanel>().UnLockAllBtn();
|
||
callBack?.Invoke();
|
||
}));
|
||
}
|
||
}
|
||
public void StopClip(string value)
|
||
{
|
||
if (Game.Instance)
|
||
{
|
||
Game.Instance.IEnumeratorManager.Stop(coroutine);
|
||
GameManager.Instance.timelineManager.StopNormalCilp(value);
|
||
}
|
||
}
|
||
IEnumerator WaitExecute(float length, Action callBack)
|
||
{
|
||
yield return new WaitForSeconds(length);
|
||
callBack?.Invoke();
|
||
}
|
||
//ʱ<><CAB1>Timeline
|
||
public float GetClipLength(string value)
|
||
{
|
||
return GameManager.Instance.timelineManager.GetNormalTime(value);
|
||
}
|
||
/// <summary>
|
||
/// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD> <20><EFBFBD><F2BFAAB8><EFBFBD>
|
||
/// </summary>
|
||
public void Show_Light(string value)
|
||
{
|
||
Show(value);
|
||
Light(value);
|
||
}
|
||
/// <summary>
|
||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>رո<D8B1><D5B8><EFBFBD>
|
||
/// </summary>
|
||
public void Hide_Unlight(string value)
|
||
{
|
||
Hide(value);
|
||
Unlight(value);
|
||
}
|
||
|
||
public void ShowTxtQuestion(int id, int scoreId, int score, Action nextFun)
|
||
{
|
||
TxtSelectQuestionPanel txtSelectQuestionPanel = GameManager.Instance.uiManager.GetUI<TxtSelectQuestionPanel>();
|
||
txtSelectQuestionPanel.ShowImgQuestion(id);
|
||
txtSelectQuestionPanel.nextAction = nextFun;
|
||
txtSelectQuestionPanel.subAction = isTrue =>
|
||
{
|
||
if (isTrue)
|
||
{
|
||
AddScore(scoreId, score);
|
||
}
|
||
else
|
||
{
|
||
AddScore(scoreId, 0);
|
||
}
|
||
};
|
||
}
|
||
public void ShowImgQuestion(int id, int scoreId, int score, Action nextFun)
|
||
{
|
||
ImgSelectQuestionPanel imgSelectQuestionPanel = GameManager.Instance.uiManager.GetUI<ImgSelectQuestionPanel>();
|
||
imgSelectQuestionPanel.ShowImgQuestion(id);
|
||
imgSelectQuestionPanel.nextAction = nextFun;
|
||
imgSelectQuestionPanel.subAction = isTrue =>
|
||
{
|
||
if (isTrue)
|
||
{
|
||
GameManager.Instance.kaoheManager.AddScore(scoreId, score, (s, t) =>
|
||
{
|
||
GameManager.Instance.uiManager.GetUI<ScorePanel>().SetScore(s.ToString(), t.ToString());
|
||
});
|
||
}
|
||
else
|
||
{
|
||
GameManager.Instance.kaoheManager.AddScore(scoreId, 0, (s, t) =>
|
||
{
|
||
GameManager.Instance.uiManager.GetUI<ScorePanel>().SetScore(s.ToString(), t.ToString());
|
||
});
|
||
}
|
||
};
|
||
}
|
||
public void ShowDragQuestion(string stepName, int id, int scoreId, int score, Action nextFun)
|
||
{
|
||
DragQuestionPanel dragQuestionPanel = GameManager.Instance.uiManager.GetUI<DragQuestionPanel>();
|
||
dragQuestionPanel.ShowDragQuestion(id, stepName);
|
||
dragQuestionPanel.nextAction = nextFun;
|
||
dragQuestionPanel.subAction = isTrue =>
|
||
{
|
||
if (isTrue)
|
||
{
|
||
GameManager.Instance.kaoheManager.AddScore(scoreId, score, (s, t) =>
|
||
{
|
||
GameManager.Instance.uiManager.GetUI<ScorePanel>().SetScore(s.ToString(), t.ToString());
|
||
});
|
||
}
|
||
else
|
||
{
|
||
GameManager.Instance.kaoheManager.AddScore(scoreId, 0, (s, t) =>
|
||
{
|
||
GameManager.Instance.uiManager.GetUI<ScorePanel>().SetScore(s.ToString(), t.ToString());
|
||
});
|
||
}
|
||
};
|
||
}
|
||
public void ShowLineQuestion(int id, int scoreId, int score, Action nextFun)
|
||
{
|
||
LineQuestionPanel lineQuestionPanel = GameManager.Instance.uiManager.GetUI<LineQuestionPanel>();
|
||
lineQuestionPanel.ShowLineQuestion(id);
|
||
lineQuestionPanel.nextAction = nextFun;
|
||
lineQuestionPanel.subAction = isTrue =>
|
||
{
|
||
if (isTrue)
|
||
{
|
||
GameManager.Instance.kaoheManager.AddScore(scoreId, score, (s, t) =>
|
||
{
|
||
GameManager.Instance.uiManager.GetUI<ScorePanel>().SetScore(s.ToString(), t.ToString());
|
||
});
|
||
}
|
||
else
|
||
{
|
||
GameManager.Instance.kaoheManager.AddScore(scoreId, 0, (s, t) =>
|
||
{
|
||
GameManager.Instance.uiManager.GetUI<ScorePanel>().SetScore(s.ToString(), t.ToString());
|
||
});
|
||
}
|
||
};
|
||
}
|
||
public void AddScore(int id, float score)
|
||
{
|
||
if (score > 0)
|
||
{
|
||
Game.Instance.eventManager.Raise(new PlayTrueOrFalseEvent() { isTrue = true });
|
||
}
|
||
else
|
||
{
|
||
Game.Instance.eventManager.Raise(new PlayTrueOrFalseEvent() { isTrue = false });
|
||
}
|
||
if (GameManager.Instance.uiManager.GetUI<TipBtnPanel>().tip == false)
|
||
{
|
||
GameManager.Instance.kaoheManager.AddScore(id, score, (s, t) =>
|
||
{
|
||
GameManager.Instance.uiManager.GetUI<ScorePanel>().SetScore(s.ToString(), t.ToString());
|
||
});
|
||
}
|
||
GameManager.Instance.uiManager.GetUI<TipBtnPanel>().tip = false;
|
||
}
|
||
|
||
public void ShowArrow(string txt, Vector2 v, int showtime = 2, int hidetime = 5, bool isKaoHe = false)
|
||
{
|
||
if (main_gameModel.modeType == ModeType.KaoHe && !isKaoHe) return;
|
||
GameManager.Instance.uiManager.GetUI<ArrowPanel>().ShowArrow(txt, v, 0, showtime, hidetime);
|
||
}
|
||
public void ShowArrow(Vector2 v, int showtime = 2, int hidetime = 5, bool isKaoHe = false)
|
||
{
|
||
if (main_gameModel.modeType == ModeType.KaoHe && !isKaoHe) return;
|
||
GameManager.Instance.uiManager.GetUI<ArrowPanel>().ShowArrow(v, 0, showtime, hidetime);
|
||
}
|
||
public void ShowArrow(string txt, string objName, int showtime = 2, int hidetime = 5, bool isKaoHe = false)
|
||
{
|
||
if (main_gameModel.modeType == ModeType.KaoHe && !isKaoHe) return;
|
||
GameManager.Instance.uiManager.GetUI<ArrowPanel>().ShowArrow(GameManager.Instance.interactionManager._allInteraction[objName].transform, txt, 0, showtime, hidetime);
|
||
}
|
||
public void HideArrow()
|
||
{
|
||
GameManager.Instance.uiManager.GetUI<ArrowPanel>().HideArrow();
|
||
}
|
||
|
||
public void ShowTipBtn(Action action, int showt = 2)
|
||
{
|
||
if (main_gameModel.modeType == ModeType.ShiXun) return;
|
||
GameManager.Instance.uiManager.GetUI<TipBtnPanel>().ShowTipBtn(action, showt);
|
||
}
|
||
public void HideTipBtn()
|
||
{
|
||
GameManager.Instance.uiManager.CloseUI<TipBtnPanel>();
|
||
}
|
||
public void ShowSpeakPanel(string stepName, string tipTxt, Vector2 v, int delayShowTime, int id, int score, Action<bool> action)
|
||
{
|
||
GameManager.Instance.uiManager.GetUI<SpeakPanel>().ShowSpeakPanel(stepName, tipTxt, v, delayShowTime, id, score, action);
|
||
}
|
||
public void HideSpeakPanel()
|
||
{
|
||
GameManager.Instance.uiManager.CloseUI<SpeakPanel>();
|
||
}
|
||
}
|
||
}
|