private Vector2 GetDashDirection() { float[] directions = GetDirections(); Vector2 lhs = Vector2.zero; Vector2 unitCenter = m_aiActor.specRigidbody.GetUnitCenter(ColliderType.Ground); for (int i = 0; i < directions.Length; i++) { bool flag = false; bool flag2 = false; Vector2 vector = BraveMathCollege.DegreesToVector(directions[i], 1f); RaycastResult raycastResult; bool flag3 = PhysicsEngine.Instance.Raycast(unitCenter, vector, dashDistance, out raycastResult, true, true, int.MaxValue, new CollisionLayer?(CollisionLayer.EnemyCollider), false, null, m_aiActor.specRigidbody); RaycastResult.Pool.Free(ref raycastResult); float num = 0.25f; while (num <= dashDistance && !flag && !flag3) { Vector2 vector2 = unitCenter + num * vector; if (!GameManager.Instance.Dungeon.CellExists(vector2)) { flag = true; } else if (GameManager.Instance.Dungeon.ShouldReallyFall(vector2)) { flag = true; } num += 0.25f; } num = 0.25f; while (num <= dashDistance && !flag && !flag2 && !flag3) { IntVector2 intVector = (unitCenter + num * vector).ToIntVector2(VectorConversions.Floor); if (!GameManager.Instance.Dungeon.CellExists(intVector)) { flag2 = true; } else if (GameManager.Instance.Dungeon.data.CheckInBoundsAndValid(intVector) && GameManager.Instance.Dungeon.data[intVector].isExitCell) { flag2 = true; } num += 0.25f; } if (avoidTarget && m_behaviorSpeculator.TargetRigidbody && !flag && !flag2 && !flag3) { Vector2 unitCenter2 = m_aiActor.specRigidbody.GetUnitCenter(ColliderType.HitBox); Vector2 vector3 = m_behaviorSpeculator.TargetRigidbody.GetUnitCenter(ColliderType.HitBox) - unitCenter2; float num2 = dashDistance + 2f; if (vector3.magnitude < num2 && BraveMathCollege.AbsAngleBetween(vector3.ToAngle(), directions[i]) < 80f) { flag3 = true; } if (GameManager.Instance.CurrentGameType == GameManager.GameType.COOP_2_PLAYER && !flag3) { PlayerController playerController = m_aiActor.PlayerTarget as PlayerController; if (playerController) { PlayerController otherPlayer = GameManager.Instance.GetOtherPlayer(playerController); if (otherPlayer && otherPlayer.healthHaver.IsAlive) { vector3 = otherPlayer.specRigidbody.GetUnitCenter(ColliderType.HitBox) - unitCenter2; if (vector3.magnitude < num2 && BraveMathCollege.AbsAngleBetween(vector3.ToAngle(), directions[i]) < 80f) { flag3 = true; } } } } } if (!flag3 && !flag && !flag2) { lhs = vector; break; } } if (lhs != Vector2.zero) { return(lhs.normalized); } if (directions.Length > 0) { return(BraveMathCollege.DegreesToVector(directions[directions.Length - 1], 1f)); } float num3 = UnityEngine.Random.Range(0f, 360f); if (quantizeDirection > 0f) { BraveMathCollege.QuantizeFloat(num3, quantizeDirection); } return(BraveMathCollege.DegreesToVector(num3, 1f)); }
private void Update() { RoomHandler currentRoom = GameManager.Instance.PrimaryPlayer.CurrentRoom; List <AIActor> activeEnemies = currentRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.All); Vector2 vector = Vector2.zero; Vector2 b = Vector2.zero; float num; if (GameManager.Instance.PrimaryPlayer.CurrentGun && !GameManager.Instance.PrimaryPlayer.IsGhost) { num = GameManager.Instance.PrimaryPlayer.CurrentGun.CurrentAngle; } else { num = BraveMathCollege.Atan2Degrees(GameManager.Instance.PrimaryPlayer.unadjustedAimPoint.XY()); } vector = GameManager.Instance.PrimaryPlayer.CenterPosition; float a; if (GameManager.Instance.CurrentGameType == GameManager.GameType.COOP_2_PLAYER) { if (GameManager.Instance.SecondaryPlayer.CurrentGun && !GameManager.Instance.SecondaryPlayer.IsGhost) { a = GameManager.Instance.SecondaryPlayer.CurrentGun.CurrentAngle; } else { a = BraveMathCollege.Atan2Degrees(GameManager.Instance.SecondaryPlayer.unadjustedAimPoint.XY()); } b = GameManager.Instance.SecondaryPlayer.CenterPosition; } else { b = vector; a = num; } for (int i = 0; i < activeEnemies.Count; i++) { AIActor aiactor = activeEnemies[i]; if (aiactor && aiactor.healthHaver && aiactor.IsNormalEnemy && !aiactor.healthHaver.IsBoss && !aiactor.healthHaver.IsDead) { Vector2 centerPosition = aiactor.CenterPosition; float b2 = BraveMathCollege.Atan2Degrees(centerPosition - vector); float b3 = BraveMathCollege.Atan2Degrees(centerPosition - b); bool flag = BraveMathCollege.AbsAngleBetween(num, b2) < ConeAngle || BraveMathCollege.AbsAngleBetween(a, b3) < ConeAngle; if (flag) { if (aiactor.behaviorSpeculator) { aiactor.behaviorSpeculator.Stun(0.25f, false); } if (aiactor.IsBlackPhantom) { aiactor.UnbecomeBlackPhantom(); } aiactor.RegisterOverrideColor(new Color(0.4f, 0.4f, 0.33f, 1), "Turn to Stone"); } else if (!aiactor.IsBlackPhantom) { aiactor.DeregisterOverrideColor("Turn to Stone"); aiactor.BecomeBlackPhantom(); } } } }