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); }
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; } } } } } } }
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; } } } } } }
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); }
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; } } } } } }
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; }
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; }
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); }