diff --git a/DungeonShooting_Godot/src/game/role/enemy/state/AiLeaveForState.cs b/DungeonShooting_Godot/src/game/role/enemy/state/AiLeaveForState.cs index 8d11412..ccfdfb4 100644 --- a/DungeonShooting_Godot/src/game/role/enemy/state/AiLeaveForState.cs +++ b/DungeonShooting_Godot/src/game/role/enemy/state/AiLeaveForState.cs @@ -9,7 +9,7 @@ //导航目标点刷新计时器 private float _navigationUpdateTimer = 0; private float _navigationInterval = 0.3f; - + public AiLeaveForState() : base(AiStateEnum.AiLeaveFor) { } diff --git a/DungeonShooting_Godot/src/game/role/enemy/state/AiNormalState.cs b/DungeonShooting_Godot/src/game/role/enemy/state/AiNormalState.cs index 3752b51..c451a40 100644 --- a/DungeonShooting_Godot/src/game/role/enemy/state/AiNormalState.cs +++ b/DungeonShooting_Godot/src/game/role/enemy/state/AiNormalState.cs @@ -36,7 +36,7 @@ _againstWallNormalAngle = 0; _pauseTimer = 0; } - + public override void PhysicsProcess(float delta) { //其他敌人发现玩家 @@ -45,7 +45,7 @@ ChangeStateLate(AiStateEnum.AiLeaveFor); return; } - + if (_isFindPlayer) //已经找到玩家了 { //现临时处理, 直接切换状态 @@ -86,7 +86,17 @@ _pauseTimer = Utils.RandRange(0.3f, 2f); _isMoveOver = true; } + else + { + var lastSlideCollision = Master.GetLastSlideCollision(); + if (lastSlideCollision != null && lastSlideCollision.Collider is Role) //碰到其他角色 + { + _pauseTimer = Utils.RandRange(0.1f, 0.5f); + _isMoveOver = true; + } + } } + //关闭射线检测 Master.TestViewRayCastOver(); } diff --git a/DungeonShooting_Godot/src/game/role/enemy/state/AiTargetInViewState.cs b/DungeonShooting_Godot/src/game/role/enemy/state/AiTargetInViewState.cs index d468ca3..3ee2124 100644 --- a/DungeonShooting_Godot/src/game/role/enemy/state/AiTargetInViewState.cs +++ b/DungeonShooting_Godot/src/game/role/enemy/state/AiTargetInViewState.cs @@ -45,14 +45,26 @@ _navigationUpdateTimer -= delta; } - if (!Master.NavigationAgent2D.IsNavigationFinished()) + var masterPosition = Master.GlobalPosition; + var canMove = false; + + var weapon = Master.Holster.ActiveWeapon; + if (weapon != null) { - //计算移动 - var nextPos = Master.NavigationAgent2D.GetNextLocation(); - Master.LookTargetPosition(playerPos); - Master.AnimatedSprite.Animation = AnimatorNames.Run; - Master.Velocity = (nextPos - Master.GlobalPosition - Master.NavigationPoint.Position).Normalized() * Master.MoveSpeed; - Master.CalcMove(delta); + canMove = masterPosition.DistanceSquaredTo(playerPos) >= 50 * 50; + } + + if (canMove) + { + if (!Master.NavigationAgent2D.IsNavigationFinished()) + { + //计算移动 + var nextPos = Master.NavigationAgent2D.GetNextLocation(); + Master.LookTargetPosition(playerPos); + Master.AnimatedSprite.Animation = AnimatorNames.Run; + Master.Velocity = (nextPos - masterPosition - Master.NavigationPoint.Position).Normalized() * Master.MoveSpeed; + Master.CalcMove(delta); + } } //检测玩家是否在视野内 diff --git a/DungeonShooting_Godot/src/game/room/RoomManager.cs b/DungeonShooting_Godot/src/game/room/RoomManager.cs index b663e06..87299d1 100644 --- a/DungeonShooting_Godot/src/game/room/RoomManager.cs +++ b/DungeonShooting_Godot/src/game/room/RoomManager.cs @@ -85,14 +85,14 @@ enemy1.PickUpWeapon(WeaponManager.GetGun("1003")); enemy1.PickUpWeapon(WeaponManager.GetGun("1001")); - // for (int i = 0; i < 10; i++) - // { - // var enemyTemp = new Enemy(); - // enemyTemp.Name = "EnemyTemp" + i; - // enemyTemp.PutDown(new Vector2(150 + (i + 1) * 20, 300)); - // enemyTemp.PickUpWeapon(WeaponManager.GetGun("1003")); - // enemyTemp.PickUpWeapon(WeaponManager.GetGun("1001")); - // } + for (int i = 0; i < 10; i++) + { + var enemyTemp = new Enemy(); + enemyTemp.Name = "EnemyTemp" + i; + enemyTemp.PutDown(new Vector2(150 + (i + 1) * 20, 300)); + enemyTemp.PickUpWeapon(WeaponManager.GetGun("1003")); + enemyTemp.PickUpWeapon(WeaponManager.GetGun("1001")); + } var enemy2 = new Enemy(); enemy2.Name = "Enemy2";