示例#1
0
        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);
        }
示例#2
0
        //加载非主角
        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);
                }
            }
        }