using Assets.MyGame.Scripts.Characters.Monster; using Assets.MyGame.Scripts.Net; using Assets.MyGame.Scripts.Net.API; using Assets.MyGame.Scripts.Net.API.GameConfig_SubClass; using Assets.MyGame.Scripts.Net.APIResponses.Enum; using Assets.MyGame.Scripts.Net.WebResponses; using cfg; using Newtonsoft.Json; using System; using System.Collections; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Threading; using Unity.Collections; using Unity.Jobs; using UnityEditor; using UnityEngine; using Random = UnityEngine.Random; public class CreateFishManager : MonoSingleton { #region //这里不用了 但是留着 /*public CreateFishData createFishData; public async void InitCreateFishData(string path) { createFishData = await Addressables.LoadAssetAsync(path).Task; } public string path;*/ /// /// 全局配置(外部初始化) /// //public GameConfig M_GameConfig { get { return GameManager.Instance.gameConfig; } } #endregion public GameConfig M_GameConfig => GameManager.Instance.gameConfig; // 缓存字段 private Dictionary roomFishConfig; private Dictionary> createDic; private Dictionary fishDatas; public Dictionary fishDatas_hashCodekey = new Dictionary(); public Dictionary fishDatas_hashCodekey_Boss = new Dictionary(); public Dictionary fishDatas_hashCodekey_Small = new Dictionary(); // ================= 新增缓存字典 ================= private Dictionary fishArrayConfigDic; private Dictionary fishTypeConfigDic; private void BuildConfigCache() { // 构建 fishArrayConfigs 字典缓存 fishArrayConfigDic = GameManager.Instance.gameConfig.fishArrayConfigs .ToDictionary(a => a.fishArrayNumber, a => a); // 构建 fishTypeConfigs 字典缓存 fishTypeConfigDic = GameManager.Instance.gameConfig.fishTypeConfigs .ToDictionary(f => f.fishNumber, f => f); } ///// ///// 懒加载初始化(只执行一次) ///// //private void EnsureInit() //{ // if (roomFishConfig != null) // return; // FishYZ.Init(); // roomFishConfig = new Dictionary(); // createDic = new Dictionary>(); // var list = GameManager.Instance.gameConfig.roomFishConfigs; // if (list == null || list.Count == 0) // return; // foreach (var item in list) // { // GameTypeEnum gameType = (GameTypeEnum)item.gameType; // // 安全添加(避免重复 key 抛异常) // roomFishConfig[gameType] = item; // // 初始化子字典 // var fishDic = new Dictionary(); // createDic[gameType] = fishDic; // // 普通鱼 // if (item.normalFishList != null) // { // foreach (var fish in item.normalFishList) // fishDic[fish.fishNumber] = fish; // } // // 等级鱼(若与基础鱼相同素材替换基础的) // if (item.roomFishLevelList != null) // { // foreach (var fish in item.roomFishLevelList) // fishDic[fish.fishNumber] = fish; // } // } //} private void EnsureInit() { if (roomFishConfig != null) return; FishYZ.Init(); roomFishConfig = new Dictionary(); createDic = new Dictionary>(); var list = GameManager.Instance.gameConfig.roomFishConfigs; if (list == null || list.Count == 0) return; // 初始化缓存字典 BuildConfigCache(); foreach (var item in list) { GameTypeEnum gameType = (GameTypeEnum)item.gameType; roomFishConfig[gameType] = item; var fishDic = new Dictionary(); createDic[gameType] = fishDic; if (item.normalFishList != null) { foreach (var fish in item.normalFishList) fishDic[fish.fishNumber] = fish; } if (item.roomFishLevelList != null) { foreach (var fish in item.roomFishLevelList) fishDic[fish.fishNumber] = fish; } } } public Dictionary FishDatas { get { if (fishDatas != null) return fishDatas; fishDatas = new Dictionary(); foreach (var item in M_GameConfig.fishTypeConfigs) { fishDatas.Add(item.fishNumber, item); } return fishDatas; } } #region 初始化鱼生成配置 /// /// 房间鱼配置(按游戏类型) /// public Dictionary RoomFishConfig { get { EnsureInit(); return roomFishConfig; } } /// /// 鱼号 → 鱼配置(按游戏类型) /// public Dictionary> CreateDic { get { EnsureInit(); return createDic; } } #endregion #region // 鱼生成计时器相关 private NativeArray timers; private NativeArray frequencies; private NativeArray shouldSpawn; public GameObject dieFXPrefab; public GameObject dieFXPrefabAward; private List spawnList; // 当前房间的鱼配置 private Dictionary spawnDic; // 当前房间的鱼配置 Dictionary> fishTypeConfig;//当前房间鱼类型配置列表 Dictionary> yz_FishConfig_Line;//当前房间鱼路线列表 Dictionary> yz_FishConfig_LineTree;//当前房间鱼路线列表 Dictionary> yz_FishConfig_LineFalse;//当前房间鱼路线列表 public void InitSpawnSystem(GameTypeEnum gameType) { EnsureInit(); fishTypeConfig = new Dictionary>(); yz_FishConfig_Line = new Dictionary>(); var config = RoomFishConfig[gameType]; spawnList = new List(); spawnDic = new Dictionary(); // 合并普通鱼 + 等级鱼 //spawnList.AddRange(config.normalFishList); //spawnList.AddRange(config.roomFishLevelList); GameConfig gameConfig = GameManager.Instance.gameConfig; foreach (var item in config.normalFishList) { spawnDic.Add(item.fishNumber, item); spawnDic[item.fishNumber] = item; spawnList.Add(item); if (item.type == 1) { FishTypeEnum typeEnum = (FishTypeEnum)FishDatas[item.fishNumber].fishType; if (!fishTypeConfig.ContainsKey(typeEnum)) { fishTypeConfig[typeEnum] = new List(); } fishTypeConfig[typeEnum].Add(item); // yz_FishTypeConfig.Add } if (item.type == 2) { //var yz = GameManager.Instance.gameConfig.fishArrayConfigs.Find(a => a.fishArrayNumber == item.fishNumber); //if (!yz_FishConfig_Line.ContainsKey(yz.arrayNumber)) //{ // yz_FishConfig_Line[yz.arrayNumber] = new List(); //} //yz_FishConfig_Line[yz.arrayNumber].Add(item); // ====== 修改点:用字典替代 List.Find ====== if (fishArrayConfigDic.TryGetValue(item.fishNumber, out var yz)) { if (!yz_FishConfig_Line.ContainsKey(yz.arrayNumber)) { yz_FishConfig_Line[yz.arrayNumber] = new List(); } yz_FishConfig_Line[yz.arrayNumber].Add(item); } } } foreach (var item in config.roomFishLevelList) { if (item.roomLevel == GameManager.Instance.gameData.currRoomData.roomLevel) { if (item.type == 2) { spawnDic.Add(item.fishNumber, item); spawnList.Add(item); //var yz = GameManager.Instance.gameConfig.fishArrayConfigs.Find(a => a.fishArrayNumber == item.fishNumber); //if (!yz_FishConfig_Line.ContainsKey(yz.arrayNumber)) //{ // yz_FishConfig_Line[yz.arrayNumber] = new List(); //} //yz_FishConfig_Line[yz.arrayNumber].Add(item); // ====== 修改点:用字典替代 List.Find ====== if (fishArrayConfigDic.TryGetValue(item.fishNumber, out var yz)) { if (!yz_FishConfig_Line.ContainsKey(yz.arrayNumber)) { yz_FishConfig_Line[yz.arrayNumber] = new List(); } yz_FishConfig_Line[yz.arrayNumber].Add(item); } } else { var typeEnum = (FishTypeEnum)FishDatas[item.fishNumber].fishType; if (!fishTypeConfig.ContainsKey(typeEnum)) { fishTypeConfig[typeEnum] = new List(); } fishTypeConfig[typeEnum].Add(item); if (item.roomLevel == GameManager.Instance.gameData.currRoomData.roomLevel) { spawnDic.Add(item.fishNumber, item); spawnList.Add(item); } } } } int count = spawnList.Count; timers = new NativeArray(count, Allocator.Persistent); frequencies = new NativeArray(count, Allocator.Persistent); shouldSpawn = new NativeArray(count, Allocator.Persistent); for (int i = 0; i < count; i++) { timers[i] = 0; frequencies[i] = spawnList[i].fishFrequency; shouldSpawn[i] = 1; //shouldSpawn[i] = spawnList[i].isCreate; } yz_FishConfig_LineTree = yz_FishConfig_Line; yz_FishConfig_LineFalse = new Dictionary>(); foreach (var item in MonsterMoveLine.dic_BezierCurveDatas.Keys) { if (item.Substring(0, 2) == "鱼阵") { yz_LineCount++; } } } int yz_LineCount = 0; public void CloseSpawnSystem() { spawnList = null; for (int i = 0; i < fishRoot.childCount; i++) { Destroy(fishRoot.GetChild(i).gameObject); } } #endregion /// /// 鱼的父节点(用于层级管理) /// public Transform fishRoot; protected override void Awake() { base.Awake(); if (fishRoot == null) { fishRoot = new GameObject("FishRoot").transform; } // CreateSingleFish(); EventCenter.Instance.AddEventListener(ConstEventString.SyncGameData_CreateFish, CreateFish); yz_Time = (int)Random.Range(2, 6);//2-4鱼阵 yzCount = Random.Range(2, 5);//2-4鱼阵 ptCount = Random.Range(1, 4);//1-3个 } private void OnDestroy() { EventCenter.Instance.RemoveEventListener(ConstEventString.SyncGameData_CreateFish, CreateFish); } public bool fangzhu; float boss = 1; //float boss = 25; float yz_Time; int yzCount; Dictionary isyzCreate = new Dictionary(); float pt = 3;//1-3个 int ptCount; public static List RandomUniqueNumbers(int count, int min, int max) { HashSet result = new HashSet(); System.Random rand = new System.Random(); while (result.Count < count) { result.Add(rand.Next(min, max)); // max 是开区间 } return result.ToList(); } /// /// 检测是否创建鱼(主线程执行,负责生成鱼对象) /// private void Update() { if (spawnList == null) return; if (!fangzhu) { return; } var job = new FishSpawnTimerJob { deltaTime = Time.deltaTime, timers = timers, frequencies = frequencies, shouldSpawn = shouldSpawn, //keyValues }; JobHandle handle = job.Schedule(); handle.Complete(); float deltatime = Time.deltaTime; boss -= deltatime; yz_Time -= deltatime; pt -= deltatime; if (boss <= 0) { if (fishTypeConfig.ContainsKey(FishTypeEnum.Boss鱼)) { List list = new List(); foreach (var item in fishTypeConfig[FishTypeEnum.Boss鱼]) { list.Add(item); } list[Random.Range(0, list.Count)].isCreate = 2; //foreach (var item in list) //{ // if (item.fishNumber == 13029.ToString()) // { // item.isCreate = 2; // } //} } boss = 25; } if (yz_Time <= 0) { var list = RandomUniqueNumbers(yzCount, 0, FishYZ.dicfishYZ.Count); for (int i = 0; i < yzCount; i++) { string str = FishYZ.dicfishYZ_list[list[i]].ToString(); if (yz_FishConfig_LineTree.ContainsKey(str)) { //yz_FishConfig_LineTree[str] = new List(); if (yz_FishConfig_LineTree[str].Count > 0) { var va = yz_FishConfig_LineTree[str][Random.Range(0, yz_FishConfig_LineTree[str].Count)]; va.isCreate = 2; //yz_FishConfig_LineTree[str].Remove(va); if (!yz_FishConfig_LineFalse.ContainsKey(str)) { yz_FishConfig_LineFalse[str] = new List(); } yz_FishConfig_LineFalse[str].Add(va); } } } yz_Time = Random.Range(1, 6); yzCount = Random.Range(1, 5); } if (pt <= 0) { List list = new List(); foreach (var item in fishTypeConfig[FishTypeEnum.普通鱼]) { list.Add(item); } var va = RandomUniqueNumbers(ptCount, 0, fishTypeConfig[FishTypeEnum.普通鱼].Count); foreach (var item in va) { list[item].isCreate = 2; } pt = 3; ptCount = Random.Range(1, 4); } // 主线程执行生成 for (int i = 0; i < spawnList.Count; i++) { if (shouldSpawn[i] == 1) { var fish = spawnList[i]; if (fish.isCreate == 0) { fish.isCreate = 1; if (fish.type == 2) { var yz = GameManager.Instance.gameConfig.fishArrayConfigs.Find(a => a.fishArrayNumber == fish.fishNumber); yz_FishConfig_LineFalse[yz.arrayNumber].Remove(fish); yz_FishConfig_LineTree[yz.arrayNumber].Add(fish); } } if (fish.isCreate == 2) { { List list; int pathId; if (fish.type == 2) { //list = FishYZ.dicfishYZ[GameManager.Instance.gameConfig.fishArrayConfigs. fish.fishNumber]; pathId = 0; } else { list = FishDatas[fish.fishNumber].pathList; pathId = list[Random.Range(0, list.Count)]; } SyncGameData sgd = new SyncGameData { sitPos = GameManager.Instance.gameData.roomJoinNotice.position, frameType = FrameDataType.createFish, time = BeijingTimeManager.Instance.CurrentTimestampMs, frameData = new FrameData_CreateFish { fishNumber = fish.fishNumber, guid = Guid.NewGuid().ToString(), moveLineId = pathId.ToString() } }; WebSocketSendList.SyncGameData(sgd); } fish.isCreate = 0; shouldSpawn[i] = 0; } //SpawnFishMainThread(fish); } } } #region 创建鱼 public void CreateFish(SyncGameData syncGameData) { //if (syncGameData.sitPos == GameManager.Instance.gameData.roomJoinNotice.position) { var rotateData = JsonConvert.DeserializeObject(syncGameData.frameData.ToString()); SpawnFishMainThread(rotateData, syncGameData.time); } } private async void SpawnFishMainThread(FrameData_CreateFish createFishData, long time) { RoomFishDetailConfig cfg = spawnDic[createFishData.fishNumber]; if (cfg.type == 1) { bool flowControl = OnlyFish(createFishData, time); if (!flowControl) { return; } } else if (cfg.type == 2) { //cfg.fishNumber;3 if (fishArrayConfigDic.TryGetValue(cfg.fishNumber, out var yz)) { } FishTypeConfig fishType = null; if (fishTypeConfigDic.TryGetValue(yz.fishNumber, out var ft)) { fishType = ft; } // 3. 出生点 Vector3 pos = new Vector3( 9999, 9999, 0 ); var prefab = FishResourcesData.GetFishPrefab(int.Parse(fishType.fishNumber)); int pathId = 0; int count = 0; count = yz.fishCount; List list = new List(); switch (yz.arrayNumber.Substring(0, 3)) { case "700": list = FishYZ.dicfishYZ[yz.arrayNumber]; StartCoroutine(IeShanXing(createFishData, yz, pos, prefab, list, time, count)); break; case "701": list = FishYZ.dicfishYZ[yz.arrayNumber]; foreach (var item in list) Quan(createFishData, yz, pos, prefab, item, count, time); break; case "702": list = FishYZ.dicfishYZ[yz.arrayNumber]; foreach (var item in list) { StartCoroutine(YZ7007(createFishData, yz, pos, prefab, item, time, count)); } break; case "7007": list = FishYZ.dicfishYZ[yz.arrayNumber]; foreach (var item in list) { StartCoroutine(YZ7007(createFishData, yz, pos, prefab, item, time, count)); } break; case "710": list = FishYZ.dicfishYZ[yz.arrayNumber]; StartCoroutine(YZ7007(createFishData, yz, pos, prefab, list[Random.Range(0, list.Count)], time, count)); break; default: break; } //// 4. 实例化 //GameObject fish = Instantiate(prefab, pos, Quaternion.identity, fishRoot); //var v = fish.GetComponent(); } } IEnumerator IeShanXing(FrameData_CreateFish createFishData, FishArrayConfig yz, Vector3 pos, GameObject prefab, List list, long time, int count) { RoomFishDetailConfig cfg = spawnDic[createFishData.fishNumber]; foreach (var item in list) { ShanXing(createFishData, yz, pos, prefab, item, count, time); yield return new WaitForSeconds(0.8f); } } private void ShanXing(FrameData_CreateFish createFishData, FishArrayConfig yz, Vector3 pos, GameObject prefab, int pathId, int count, long time) { RoomFishDetailConfig cfg = spawnDic[createFishData.fishNumber]; for (int i = 1; i <= 16; i++) { // 4. 实例化 GameObject fish = Instantiate(prefab, pos, Quaternion.Euler((i * 5 * (i % 2 == 0 ? -1 : 1)) * Vector3.forward + prefab.transform.eulerAngles), fishRoot); var v = fish.GetComponent(); v.monsterData.fishTypeConfig = FishDatas[yz.fishNumber]; v.guid = createFishData.guid + i; fishDatas_hashCodekey[v.guid] = v; fishDatas_hashCodekey_Small[v.guid] = v; v.moveTime = (BeijingTimeManager.Instance.CurrentTimestampMs - time) / 1000; //int pathId = list[Random.Range(0, list.Count)]; v.Init(pathId.ToString(), cfg.times, true, yz.arrayNumber); } } private void Quan(FrameData_CreateFish createFishData, FishArrayConfig yz, Vector3 pos, GameObject prefab, int pathId, int count, long time) { RoomFishDetailConfig cfg = spawnDic[createFishData.fishNumber]; for (int i = 0; i < count; i++) { // 4. 实例化 GameObject fish = Instantiate(prefab, pos, Quaternion.Euler((360 / count) * i * Vector3.forward + prefab.transform.eulerAngles), fishRoot); var v = fish.GetComponent(); v.monsterData.fishTypeConfig = FishDatas[yz.fishNumber]; v.guid = createFishData.guid + i; fishDatas_hashCodekey[v.guid] = v; fishDatas_hashCodekey_Small[v.guid] = v; v.moveTime = (BeijingTimeManager.Instance.CurrentTimestampMs - time) / 1000; //int pathId = list[Random.Range(0, list.Count)]; v.Init(pathId.ToString(), cfg.times, true, yz.arrayNumber); } } //顺序出 IEnumerator YZ7007(FrameData_CreateFish createFishData, FishArrayConfig yz, Vector3 pos, GameObject prefab, int pathId, long time, int count) { RoomFishDetailConfig cfg = spawnDic[createFishData.fishNumber]; List list = FishDatas[yz.fishNumber].pathList; for (int i = 0; i < count; i++) { //// 4. 实例化 //GameObject fish = Instantiate(prefab, pos, Quaternion.Euler((360 / 20) * i * Vector3.forward), fishRoot); //var v = fish.GetComponent(); //v.monsterData.roomFishDetailConfig = cfg; //v.hashCode = v.gameObject.GetHashCode().ToString(); //fishDatas_hashCodekey[v.hashCode] = v; ////int pathId = list[Random.Range(0, list.Count)]; //v.Init(MonsterMoveLine.dic_BezierCurveDatas["鱼阵" + (pathId + 1)], 15, true, cfg.fishNumber); //v.fishType = (FishTypeEnum)FishDatas[yz.fishNumber].fishType; // 4. 实例化 GameObject fish = Instantiate(prefab, pos, prefab.transform.rotation, fishRoot); var v = fish.GetComponent(); // 5. 初始化路径 if (v == null) { v = fish.AddComponent(); } v.monsterData.fishTypeConfig = FishDatas[yz.fishNumber]; v.guid = createFishData.guid + i; v.moveTime = ((BeijingTimeManager.Instance.CurrentTimestampMs - time) / 1000) - i; fishDatas_hashCodekey_Small[v.guid] = v; fishDatas_hashCodekey[v.guid] = v; v.Init(pathId.ToString(), cfg.times, true, yz.arrayNumber); yield return new WaitForSeconds(1f); } } private bool OnlyFish(FrameData_CreateFish createFishData, long time) { RoomFishDetailConfig cfg = spawnDic[createFishData.fishNumber]; // 1. 找到鱼的基础配置 //FishTypeConfig fishType = M_GameConfig.fishTypeConfigs // .Find(f => f.fishNumber == cfg.fishNumber); // ====== 修改点:用字典替代 List.Find ====== if (!fishTypeConfigDic.TryGetValue(cfg.fishNumber, out var fishType)) { Debug.LogError($"找不到鱼配置:{cfg.fishNumber}"); return false; } //if (fishType == null) //{ // Debug.LogError($"找不到鱼配置:{cfg.fishNumber}"); // return false; //} // 2. 加载 Prefab(imageUrl 你可以换成自己的字段) //var prefab = await Addressables.LoadAssetAsync(fishType.imageUrl).Task; var prefab = FishResourcesData.GetFishPrefab(int.Parse(fishType.fishNumber)); // 3. 出生点 Vector3 pos = new Vector3( 9999, 9999, 0 ); // 4. 实例化 GameObject fish = Instantiate(prefab, pos, prefab.transform.rotation, fishRoot); var v = fish.GetComponent(); // 5. 初始化路径 if (v == null) { v = fish.AddComponent(); } v.monsterData.fishTypeConfig = FishDatas[cfg.fishNumber]; v.guid = createFishData.guid; v.moveTime = (BeijingTimeManager.Instance.CurrentTimestampMs - time) / 1000; switch (fishType.fishType) { case 1: fishDatas_hashCodekey_Small[v.guid] = v; break; case 2: fishDatas_hashCodekey_Boss[v.guid] = v; break; case 3: fishDatas_hashCodekey_Small[v.guid] = v; break; default: break; } fishDatas_hashCodekey[v.guid] = v; var list = FishDatas[cfg.fishNumber].pathList; string pathId = createFishData.moveLineId; v.Init(pathId, cfg.times); //v.monsterData.moveLine.Init(MonsterMoveLine.dic_BezierCurveDatas["曲线" + Random.Range(1, 4).ToString()], 10); ////初始化 //GameObject obj = Instantiate(prefab, Vector3.one * 999, Quaternion.identity); //var v = obj.GetComponent(); ////v.dic_AnimKeyAnimName.Add(CharacterAnimationType.move, "stand2"); //v.monsterData.moveLine.Init(MonsterMoveLine.dic_BezierCurveDatas["曲线" + Random.Range(1, 4).ToString()], 10); Debug.Log($"生成鱼:{fishType.fishName}"); return true; } public void CreateFishArray(string arrayNumber) { var array = M_GameConfig.fishArrayConfigs .Find(a => a.fishArrayNumber == arrayNumber); if (array == null) { Debug.LogError($"找不到鱼阵:{arrayNumber}"); return; } // 未来扩展:阵型、路径、Boss、普通鱼 //// array.ty.fishNumber // // 2. 加载 Prefab(imageUrl 你可以换成自己的字段) // //var prefab = await Addressables.LoadAssetAsync(fishType.imageUrl).Task; // var prefab = FishResourcesData.CreateFishPrefab(fishType.fishNumber); // // 3. 随机出生点 // Vector3 pos = new Vector3( // Random.Range(-8f, 8f), // Random.Range(-5f, 5f), // 0 // ); // // 4. 实例化 // GameObject fish = Instantiate(prefab, pos, Quaternion.identity, fishRoot); // var v = fish.GetComponent(); // // 5. 初始化路径 // if (v == null) // { // v = fish. // // // (); // } // v.monsterData.roomFishDetailConfig = cfg; // v.hashCode = v.gameObject.GetHashCode().ToString(); // fishDatas_hashCodekey[v.hashCode] = v; // var list = FishDatas[cfg.fishNumber].pathList; // int pathId = list[Random.Range(0, list.Count)]; // v.monsterData.moveLine.Init(MonsterMoveLine.dic_BezierCurveDatas["曲线" + pathId], 10); // v.fishType = (FishTypeEnum)FishDatas[cfg.fishNumber].fishType; // //v.monsterData.moveLine.Init(MonsterMoveLine.dic_BezierCurveDatas["曲线" + Random.Range(1, 4).ToString()], 10); // ////初始化 // //GameObject obj = Instantiate(prefab, Vector3.one * 999, Quaternion.identity); // //var v = obj.GetComponent(); // ////v.dic_AnimKeyAnimName.Add(CharacterAnimationType.move, "stand2"); // //v.monsterData.moveLine.Init(MonsterMoveLine.dic_BezierCurveDatas["曲线" + Random.Range(1, 4).ToString()], 10); // Debug.Log($"生成鱼:{fishType.fishName}"); } #endregion public void EnterRoom(GameTypeEnum gameType) { InitSpawnSystem(gameType); } public void ExitRoom() { CloseSpawnSystem(); } // ============================================================ // 1. 生成单条鱼 // ============================================================ public async void CreateSingleFish(string fishNumber, int pathId) { switch ((GameTypeEnum)GameManager.Instance.gameData.currGameType) { case GameTypeEnum.风雷之渊: break; case GameTypeEnum.太古仙墟: break; case GameTypeEnum.中国象棋: break; case GameTypeEnum.星际迷航: break; case GameTypeEnum.黑神话悟空: break; default: break; } } #region 杀鱼 /// /// 随机杀死count条小鱼/黄金鱼 /// /// /// public List SyncGameData_SendRendromDieFishID(int count) { List list = new List(); List templist = new List(); templist.AddRange(fishDatas_hashCodekey_Small.Keys); if (fishDatas_hashCodekey_Small.Count < count) { foreach (var item in fishDatas_hashCodekey_Small) { list.Add(item.Key); } } else { for (int i = 0; i < count; i++) { int index = Random.Range(0, templist.Count); list.Add(templist[index]); templist.RemoveAt(index); } } { int posID=0; switch (GameManager.Instance.gameData.currGameType) { case GameType.JQQD: break; case GameType.defaultPanel: break; case GameType.FLZY: posID = UIManager.Instance.Get(UIPanel.MainGamePanelFLZY).currSitData.posID; break; case GameType.TGXX: posID = UIManager.Instance.Get(UIPanel.MainGamePanelTGXX).currSitData.posID; break; case GameType.ZGXQ: break; case GameType.XJMH: posID = UIManager.Instance.Get(UIPanel.MainGamePanelXJMH).currSitData.posID; break; case GameType.HHWK: posID = UIManager.Instance.Get(UIPanel.MainGamePanelHHWK).currSitData.posID; break; default: break; } SyncGameData sgd = new SyncGameData { sitPos = posID, frameType = FrameDataType.changeAutoTarget, time = BeijingTimeManager.Instance.CurrentTimestampMs, frameData = new FrameData_RandomDieFish { guids = list } }; WebSocketSendList.SyncGameData(sgd); } return list; } public void Id_DieFish_NotFX(string fishId) { if (fishDatas_hashCodekey.ContainsKey(fishId)) { var monster = fishDatas_hashCodekey[fishId]; monster.DieFish(); //Destroy(monster.gameObject); fishDatas_hashCodekey.Remove(fishId); } } public void Id_DieFish_FX(string fishId) { if (fishDatas_hashCodekey.ContainsKey(fishId)) { AudioManager.Instance.PlayerFX(60004); var monster = fishDatas_hashCodekey[fishId]; Instantiate(monster.effect_Die == null ? dieFXPrefab : monster.effect_Die, monster.transform.position, Quaternion.identity, transform.parent); //award效果 //Instantiate(monster.effect_DieAward == null ? dieFXPrefabAward : monster.effect_DieAward, monster.transform.position, Quaternion.identity, transform.parent); MonsterDieList.Instance.SmallHuangYiHuang(monster.transform.position, monster.monsterData.fishTypeConfig.fishNumber, 1000); //Destroy(monster.gameObject); monster.DieFish(); fishDatas_hashCodekey.Remove(fishId); //GameManager.Instance.gameData.roomJoinNotice.gold += killFish.gold; var list = UIManager.Instance.Get(UIPanel.MainGamePanelXJMH).list_Sits; //foreach (var item in list) //{ // if (item.user != null) // { // if (item.user == killFish.userId) // { // item.goldNum += killFish.gold; // } // } //} } } public void Id_DieListFish_FX(List ids) { foreach (var item in ids) { Id_DieFish_FX(item); } } public void Ws_DieFish(string msg) { var killFish = JsonConvert.DeserializeObject>(msg).arguments[0]; Debug.Log("时间123:" + (DateTimeOffset.Now.ToUnixTimeSeconds() - killFish.timespan) + "秒"); if (fishDatas_hashCodekey.ContainsKey(killFish.fishId)) { AudioManager.Instance.PlayerFX(60004); var monster = fishDatas_hashCodekey[killFish.fishId]; Instantiate(monster.effect_Die == null ? dieFXPrefab : monster.effect_Die, monster.transform.position, Quaternion.identity, transform.parent); MonsterDieList.Instance.SmallHuangYiHuang(monster.transform.position, monster.monsterData.fishTypeConfig.fishNumber, 1000); //Destroy(monster.gameObject); monster.DieFish(); fishDatas_hashCodekey.Remove(killFish.fishId); //GameManager.Instance.gameData.roomJoinNotice.gold += killFish.gold; List list = null; switch (GameManager.Instance.gameData.currGameType) { case GameType.JQQD: break; case GameType.defaultPanel: list = UIManager.Instance.Get(UIPanel.MainGamePanelDefault).list_Sits; break; case GameType.FLZY: list = UIManager.Instance.Get(UIPanel.MainGamePanelFLZY).list_Sits; break; case GameType.TGXX: list = UIManager.Instance.Get(UIPanel.MainGamePanelTGXX).list_Sits; break; case GameType.ZGXQ: break; case GameType.XJMH: list = UIManager.Instance.Get(UIPanel.MainGamePanelXJMH).list_Sits; break; case GameType.HHWK: list = UIManager.Instance.Get(UIPanel.MainGamePanelHHWK).list_Sits; break; default: break; } foreach (var item in list) { if (item.user != null) { if (item.user == killFish.userId) { item.goldNum += killFish.gold; } } } } } #endregion }