using DragonLi.Core; using Mirror; using System.Collections; using System.Collections.Generic; using UnityEngine; using XPlugin.Data.JsonLiteDB; public class StoryManager : NetworkBehaviour { public static StoryManager Ins { get; private set; } [SyncVar] /// /// 当前选择的难度 /// public int gameDifficulty; [SyncVar] /// /// 当前剧情在哪 /// public int currentStoryIndex = 0; // json数据库 private JsonLiteDB DB; public static void Init() { Ins = new StoryManager(); } [ClientRpc] public void ShowResultPlane() { CoroutineTaskManager.Instance.WaitSecondTodo(() => { WorldUIManager.Ins.Cover("UI/ResultPlane", false); }, 1f); } public void Start() { Ins = this; // currentStoryIndex = 7; EventDispatcher.AddEventListener("NextTrriger", NextTrriger); } [Command(requiresAuthority = false)] public void SetGameDifficultyCmd(int index) { gameDifficulty = index; } public void NextTrriger() { StartCoroutine(MyCoroutine()); } // public IEnumerator MyCoroutine1() // { // // 根据当前剧情索引获取剧情信息 // StoryInfo1 storyInfo1 = GameManager.Ins.GameStoryInfos[currentStoryIndex]; // //创建物体 // } public IEnumerator MyCoroutine() { StoryInfo storyInfo = GameManager.Ins.StoryDescInfos[currentStoryIndex]; //根据难度选择 GameManager.Ins.AllEnemyAmount = storyInfo.ALLEnemyAmount[gameDifficulty]; int pathId = storyInfo.PathId; int crackAmount = storyInfo.CrackAmount[gameDifficulty]; currentStoryIndex = storyInfo.NextId; if (storyInfo.EnergyMask != null) { // 遍历字典的键值对 foreach (KeyValuePair kvp in storyInfo.EnergyMask) { int key = kvp.Key; // 获取键 Vector3 value = kvp.Value; // 获取值 GameManager.Ins.CreateProp((PropType)(key), value); } } //表中传送门数量大于0 需要创建传送门 if (crackAmount > 0) { for (int i = 0; i < crackAmount; i++) { if (i > 0) { yield return new WaitForSeconds(3.0f); } else { //EventDispatcher.TriggerEvent("PlayEnemyInfo", storyInfo.Id); ShowEnemyInfoMessage(storyInfo.Id); } GameObject crack = GameManager.Ins?.CreateCrack(storyInfo.CracksPos[i], storyInfo.Angle[i]); //临时存储创建出来的传送门 GameManager.Ins?.cracksList.Add(crack); //传送门创建出来后根据表内容创建怪物 for (int j = 0; j < storyInfo.EnemyAmount[gameDifficulty]; j++) { float interval = Random.Range(storyInfo.CreateInterva[0], storyInfo.CreateInterva[1]); if (j > 0) { yield return new WaitForSeconds(interval); // ��ÿ�ε���֮��ȴ�1�� } string pathid = (pathId + i).ToString(); GameManager.Ins?.GenerateEnemy((EnemyType)(storyInfo.type), storyInfo.EnemysPos[i], storyInfo.Angle[i], storyInfo.EnemysScale[0], pathid); } } if (GameManager.Ins.cracksList.Count > 0) { for (int i = 0; i < GameManager.Ins.cracksList.Count; i++) { Crack crack = GameManager.Ins.cracksList[i].GetComponent(); crack.CloseCrack(); } } } //如果传送门为0; else { //如果怪物个数超过1; if (GameManager.Ins.AllEnemyAmount > 1) { yield return new WaitForSeconds(storyInfo.Wait); //EventDispatcher.TriggerEvent("PlayEnemyInfo", storyInfo.Id); ShowEnemyInfoMessage(storyInfo.Id); for (int i = 0; i < storyInfo.EnemysPos.Length; i++) { if (i > 0) { yield return new WaitForSeconds(2.0f); // } for (int j = 0; j < storyInfo.EnemyAmount[gameDifficulty]; j++) { string pathid = (pathId + i).ToString(); GameManager.Ins?.GenerateEnemy((EnemyType)(storyInfo.type), storyInfo.EnemysPos[i], storyInfo.Angle[0], storyInfo.EnemysScale[0], pathid); float interval = Random.Range(storyInfo.CreateInterva[0], storyInfo.CreateInterva[1]); yield return new WaitForSeconds(interval); } } } else { yield return new WaitForSeconds(storyInfo.Wait); ShowEnemyInfoMessage(storyInfo.Id); GameManager.Ins?.GenerateEnemy((EnemyType)(storyInfo.type), storyInfo.EnemysPos[0], storyInfo.Angle[0], storyInfo.EnemysScale[0], pathId.ToString()); } } } [ClientRpc] public void ShowEnemyInfoMessage(int index) { EventDispatcher.TriggerEvent("PlayEnemyInfo", index); } [Server] public void CreateStoryItem() { StoryInfo storyInfo = GameManager.Ins.StoryDescInfos[currentStoryIndex]; if (storyInfo.EnergyPump != null) { foreach (KeyValuePair kvp in storyInfo.EnergyPump) { int key = kvp.Key; // 获取键 Vector3 value = kvp.Value; // 获取值 GameManager.Ins.CreateProp((PropType)(key), value); } } } public void Update() { //Transform player= MRNetworkManager.Ins.roomSlots[0].transform; //Debug.Log("玩家当前移动距离:" + Mathf.Floor(player.position.x) + "|" + Mathf.Floor(player.position.y) + "|" + Mathf.Floor(player.position.z)); } }