private List <SpawnMonster> GetWaveSpawnMonsters(int zoneID, int waveSeq) { List <SpawnMonster> filterdMonsters = new List <SpawnMonster>(); OneZoneData zoneData = m_gameDBMgr.GetAimPosZoneData(m_curMonsterGroupId, zoneID); SpawnMonster[] monsters = m_gameDBMgr.GetSpawnMonsterInfo(m_curMonsterGroupId); for (int i = 0; i < monsters.Length; ++i) { if (!monsters[i].enable) { continue; } if (waveSeq != monsters[i].waveSequence) { continue; } Vector3 pos = monsters[i].pos; //是否当前区域怪 if (zoneData != null) { if (pos.x < zoneData.startPos.x || pos.x > zoneData.endPos.x || pos.z < zoneData.startPos.z || pos.z > zoneData.endPos.z) { continue; } } filterdMonsters.Add(monsters[i]); } return(filterdMonsters); }
//加载非主角 void LoadMonster() { OneZoneData zoneData = m_gameDBMgr.GetAimPosZoneData(m_curMonsterGroupId, m_sceneMgr.curOpenZoneID); if (zoneData == null) { LogMgr.UnityError("Load zoneData error. mapid:" + m_curMonsterGroupId + " zoneid:" + m_sceneMgr.curOpenZoneID); return; } //add by lzp SetGuidSkill(); StartLoadMonster(); //所有的种怪 SpawnMonster[] monsters = m_gameDBMgr.GetSpawnMonsterInfo(m_curMonsterGroupId); for (int i = 0; i < monsters.Length; ++i) { if (!monsters[i].enable) { continue; } if (CurMonsterWaveSeq != monsters[i].waveSequence) { continue; } Vector3 pos = monsters[i].pos; //是否当前区域怪 if (zoneData != null && m_isLoadZone) { if (pos.x < zoneData.startPos.x || pos.x > zoneData.endPos.x || pos.z < zoneData.startPos.z || pos.z > zoneData.endPos.z) { continue; } } //刷怪时间扰动,避免所有怪一起刷新动作太整齐的问题 if (m_curWaveTriggerInfo.turbulenceTime > 0f) { m_TurbulenceSpawnMonsters.Add(monsters[i]); } else { SpawnActor(monsters[i]); } } //发送怪物被加载完了 m_eventMgr.TriggerEvent(GameEvent.GE_EVENT_AFTER_MONSTER_LOADED, null); if (m_TurbulenceSpawnMonsters.Count > 0) { InvokeRepeating("TurbulenceSpawnMonster", Random.Range(0f, m_curWaveTriggerInfo.turbulenceTime / m_TurbulenceSpawnMonsters.Count), m_curWaveTriggerInfo.turbulenceTime / m_TurbulenceSpawnMonsters.Count); } //m_bCurWaveLoaded = true; if (m_bWaveLoop == false && IsLoopMonsterAllDeath() == false) { m_bWaveLoop = true; TriggerLoopWave(); } // 下一波怪在这波开始时延时刷新情况 if (IsOpenZoneFinalWaveMonster() == false && (GetNextWaveTrigType() == WTC_TYPE.LASTWAVEBEGAN || GetNextWaveTrigType() == WTC_TYPE.ZONE)) { CurMonsterWaveSeq++; UpdateWaveTriggerInfo(); //m_bCurWaveLoaded = false; if (m_curWaveTriggerInfo.trigType == (int)WTC_TYPE.LASTWAVEBEGAN) { if (m_curWaveTriggerInfo.arg1 > 0) { StartDelayLoadMonster(); Invoke("DelaySpawnMonster", m_curWaveTriggerInfo.arg1); } else { LoadMonster(); } } else if (m_curWaveTriggerInfo.trigType == (int)WTC_TYPE.ZONE) { m_bNeedCheckZone = true; SetMonsterTips(true); } } }