public Monster SearchNearestPlayerMonster()
        {
            Vector3 m_position           = m_PlayerGo.transform.position;
            Dictionary <int, Wave> waves = m_WaveMgr.GetWaves();
            float      recordMag         = float.MaxValue;
            GameObject recordGo          = null;;

            foreach (KeyValuePair <int, Wave> kv in waves)
            {
                List <Monster> monsters = kv.Value.GetMonsters();
                foreach (Monster monster in monsters)
                {
                    if (monster.gameObject != m_LockMonsterGo && monster.InShadowView)
                    {
                        Vector3 postion      = monster.transform.position;
                        Vector3 dtPosition   = m_position - postion;
                        float   sqrMagnitude = dtPosition.sqrMagnitude;
                        if (sqrMagnitude <= recordMag)
                        {
                            recordMag = sqrMagnitude;
                            recordGo  = monster.gameObject;
                        }
                    }
                }
            }
            SetLockMonster(recordGo);
            return(m_LockMonster);
        }
Example #2
0
        private void FindGuidEnemy()
        {
            bool onlyCheckMonsterVisible = false;

            if (m_TargetTsf)
            {
                if (!m_Monster.InCameraView && !m_Monster.InDeath)
                {
                    onlyCheckMonsterVisible = true;
                }
                else
                {
                    SetLockEnemy(null);
                }
            }
            Vector3 m_position           = m_PlayerTsf.position;
            float   m_lastPositionSqure  = 0;
            Dictionary <int, Wave> waves = m_WaveMgr.GetWaves();

            foreach (KeyValuePair <int, Wave> kv in waves)
            {
                List <Monster> monsters = kv.Value.GetMonsters();
                foreach (Monster monster in monsters)
                {
                    int monsterId = monster.GetMonsterId();
                    if (m_MonsterIds.Contains(monsterId))
                    {
                        if (monster.InCameraView)
                        {
                            SetLockEnemy(null);
                            return;
                        }
                        else if (!onlyCheckMonsterVisible)
                        {
                            Vector3 postion      = monster.transform.position;
                            Vector3 dtPosition   = m_position - postion;
                            float   sqrMagnitude = dtPosition.sqrMagnitude;
                            if (sqrMagnitude > 4)
                            {
                                if (m_TargetTsf != null)
                                {
                                    if (sqrMagnitude < m_lastPositionSqure)
                                    {
                                        m_lastPositionSqure = sqrMagnitude;
                                        SetLockEnemy(monster.transform);
                                    }
                                }
                                else
                                {
                                    SetLockEnemy(monster.transform);
                                    m_lastPositionSqure = (m_TargetTsf.transform.position - m_position).sqrMagnitude;
                                }
                            }
                        }
                    }
                }
            }
        }
Example #3
0
        private void FindLockEnemy()
        {
            // 非普通模式不需要锁定怪物
            if (!m_InNormalPassType)
            {
                return;
            }
            Vector3 m_position = m_Transform.position;

            //if (m_LockGameEnemy != null)
            //{
            //	Vector3 postion1 = m_LockGameEnemy.transform.position;
            //	Vector3 dtPosition1 = m_position - postion1;
            //	if (dtPosition1.sqrMagnitude <= m_RadiusSqr) {
            //		return;
            //	}
            //}

            SetLockEnemy(null);
            float m_lastPositionSqure    = 0;
            Dictionary <int, Wave> waves = m_WaveMgr.GetWaves();

            foreach (KeyValuePair <int, Wave> kv in waves)
            {
                List <Monster> monsters = kv.Value.GetMonsters();
                foreach (Monster monster in monsters)
                {
                    Vector3 postion      = monster.transform.position;
                    Vector3 dtPosition   = m_position - postion;
                    float   sqrMagnitude = dtPosition.sqrMagnitude;
                    if (sqrMagnitude <= m_RadiusSqr)
                    {
                        if (m_LockGameEnemy != null)
                        {
                            if (sqrMagnitude < m_lastPositionSqure)
                            {
                                m_lastPositionSqure = sqrMagnitude;
                                SetLockEnemy(monster.gameObject);
                                if (sqrMagnitude <= 0.8f)
                                {
                                    break;
                                }
                            }
                        }
                        else
                        {
                            SetLockEnemy(monster.gameObject);
                            m_lastPositionSqure = (m_LockGameEnemy.transform.position - m_position).sqrMagnitude;
                            if (m_lastPositionSqure <= 0.8f)
                            {
                                break;
                            }
                        }
                    }
                }
            }
        }
Example #4
0
 private void FindNextLink(int linkTimes)
 {
     if (m_WaveMgr != null)
     {
         // 死亡的情况下会连接到同一个多次
         Dictionary <int, Wave> waves = m_WaveMgr.GetWaves();
         Vector3 startPos             = m_StartObj.transform.position;
         foreach (KeyValuePair <int, Wave> kv in waves)
         {
             List <Monster> monsters     = kv.Value.GetMonsters();
             int            monsterCount = monsters.Count;
             int            startIndex   = Random.Range(0, monsterCount);
             for (int i = 0; i < monsterCount; i++)
             {
                 int     newIndex = startIndex % monsterCount;
                 Monster monster  = monsters[newIndex];
                 if (monster.gameObject != m_StartObj)
                 {
                     Vector3 postion      = monster.transform.position;
                     float   sqrMagnitude = (startPos - postion).sqrMagnitude;
                     if (sqrMagnitude <= m_LinkRangeSqr)
                     {
                         linkTimes--;
                         //OnHitted(linkObj.transform, monster.transform,Mathf.Sqrt(sqrMagnitude));
                         LinkBullet.Add(monster);
                         if (linkTimes <= 0)
                         {
                             break;
                         }
                     }
                 }
                 startIndex++;
             }
         }
         Monster startMonster = m_StartObj.GetComponent <Monster>();
         for (int i = 0; i < LinkBullet.Count; i++)
         {
             Monster linkObj = LinkBullet[i];
             OnHitted(startMonster, linkObj);
             startMonster = linkObj;
         }
         LinkBullet.Clear();
     }
     Destroy(gameObject);
 }
Example #5
0
        private void FindLockEnemy()
        {
            Vector3 m_position = transform.position;

            SetLockEnemy(null);
            float m_lastPositionSqure    = 0;
            Dictionary <int, Wave> waves = m_WaveMgr.GetWaves();

            foreach (Wave wave in waves.Values)
            {
                List <Monster> monsters = wave.GetMonsters();
                foreach (Monster monster in monsters)
                {
                    Vector3 postion    = monster.transform.position;
                    Vector3 dtPosition = m_position - postion;
                    float   curDtSqure = dtPosition.sqrMagnitude;
                    if (curDtSqure <= m_RadiusSqr)
                    {
                        if (m_LockGameEnemy != null)
                        {
                            if (curDtSqure < m_lastPositionSqure)
                            {
                                m_lastPositionSqure = curDtSqure;
                                SetLockEnemy(monster.gameObject);
                                if (curDtSqure <= 3.2f)
                                {
                                    break;
                                }
                            }
                        }
                        else
                        {
                            SetLockEnemy(monster.gameObject);
                            m_lastPositionSqure = (m_LockGameEnemy.transform.position - m_position).sqrMagnitude;
                            if (m_lastPositionSqure <= 3.2f)
                            {
                                break;
                            }
                        }
                    }
                }
            }
        }
Example #6
0
        private void AddRangeHp()
        {
            WaveMgr mgr = m_Player.GetComponent <Player>().GetWaveMgr();
            Dictionary <int, Wave> waves = mgr.GetWaves();
            Vector3 curPos = transform.position;

            foreach (KeyValuePair <int, Wave> kv in waves)
            {
                List <Monster> monsters = kv.Value.GetMonsters();
                foreach (Monster monster in monsters)
                {
                    if ((monster.transform.position - curPos).sqrMagnitude < m_SqrTriggerRange)
                    {
                        monster.AddBuff(AiBuffType.MoveSpeed, EffectTime, IncreaseSpeedPercentage / 100.0f);
                    }
                }
            }
            GameObject effect = Global.gApp.gResMgr.InstantiateObj(EffectConfig.Skill01_2021_1);

            effect.transform.position = transform.position;
        }
Example #7
0
        private void AddRangeHp()
        {
            WaveMgr mgr = m_Player.GetComponent <Player>().GetWaveMgr();
            Dictionary <int, Wave> waves = mgr.GetWaves();
            Vector3 curPos = transform.position;

            foreach (KeyValuePair <int, Wave> kv in waves)
            {
                List <Monster> monsters = kv.Value.GetMonsters();
                foreach (Monster monster in monsters)
                {
                    if ((monster.transform.position - curPos).sqrMagnitude < m_SqrTriggerRange)
                    {
                        monster.AddHpByPercent(HpPercentage / 100);
                        GameObject hpEffect = Global.gApp.gResMgr.InstantiateObj(EffectConfig.Skill01_2018_2);
                        hpEffect.transform.SetParent(monster.GetBodyNode(), false);
                    }
                }
            }
            GameObject effect = Global.gApp.gResMgr.InstantiateObj(EffectConfig.Skill01_2018_1);

            effect.transform.position = transform.position;
        }
Example #8
0
        private void FindNextLink()
        {
            if (m_BounceTimes <= 0)
            {
                Destroy(gameObject);
                return;
            }
            m_BounceTimes--;
            GameObject linkObj = m_StartObj;

            if (m_WaveMgr != null)
            {
                Dictionary <int, Wave> waves = m_WaveMgr.GetWaves();
                Vector3 startPos             = linkObj.transform.position;
                foreach (KeyValuePair <int, Wave> kv in waves)
                {
                    List <Monster> monsters     = kv.Value.GetMonsters();
                    int            monsterCount = monsters.Count;
                    int            startIndex   = Random.Range(0, monsterCount);
                    for (int i = 0; i < monsterCount; i++)
                    {
                        int     newIndex = startIndex % monsterCount;
                        Monster monster  = monsters[newIndex];
                        if (!m_BouncedGo.Contains(monster.gameObject))
                        {
                            Vector3 postion      = monster.transform.position;
                            float   sqrMagnitude = (startPos - postion).sqrMagnitude;
                            if (sqrMagnitude <= m_BounceRangeSqr)
                            {
                                m_LockPos          = m_StartObj.transform.position;
                                transform.position = m_LockPos;

                                m_StartObj    = monster.gameObject;
                                m_NextMonster = m_StartObj.GetComponent <Monster>();
                                m_BouncedGo.Add(m_StartObj);
                                m_BounceTime = Mathf.Sqrt(sqrMagnitude) / BounceSpeed;
                                return;
                            }
                        }
                        startIndex++;
                    }
                }
                foreach (GameObject go in m_BouncedGo)
                {
                    if (go != null && go != m_StartObj && !go.GetComponent <Monster>().InDeath)
                    {
                        Vector3 postion      = go.transform.position;
                        float   sqrMagnitude = (startPos - postion).sqrMagnitude;
                        if (sqrMagnitude <= m_BounceRangeSqr)
                        {
                            m_LockPos          = m_StartObj.transform.position;
                            transform.position = m_LockPos;
                            m_StartObj         = go;
                            m_NextMonster      = m_StartObj.GetComponent <Monster>();
                            return;
                        }
                    }
                }
            }
            Destroy(gameObject);
        }