Minor fixes to navigation
This commit is contained in:
@@ -11,7 +11,7 @@ config_version=5
|
||||
[application]
|
||||
|
||||
config/name="GameJamDungeon"
|
||||
run/main_scene="res://src/Main.tscn"
|
||||
run/main_scene="uid://d1gjaijijd5ot"
|
||||
config/features=PackedStringArray("4.4", "C#", "GL Compatibility")
|
||||
boot_splash/show_image=false
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ using System.Threading.Tasks;
|
||||
namespace GameJamDungeon;
|
||||
|
||||
[Meta(typeof(IAutoNode))]
|
||||
public partial class Enemy : RigidBody3D, IEnemy, IProvide<IEnemyLogic>
|
||||
public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
|
||||
{
|
||||
#region Registration
|
||||
public override void _Notification(int what) => this.Notify(what);
|
||||
@@ -25,7 +25,7 @@ public partial class Enemy : RigidBody3D, IEnemy, IProvide<IEnemyLogic>
|
||||
|
||||
[Dependency] IGameEventDepot GameEventDepot => this.DependOn<IGameEventDepot>();
|
||||
|
||||
[Dependency] protected IPlayer Player => this.DependOn<IPlayer>(() => GetParent().GetChildren().OfType<IPlayer>().Single());
|
||||
[Dependency] protected IPlayer Player => this.DependOn(() => GetParent().GetChildren().OfType<IPlayer>().Single());
|
||||
#endregion
|
||||
|
||||
#region Exports
|
||||
@@ -67,12 +67,14 @@ public partial class Enemy : RigidBody3D, IEnemy, IProvide<IEnemyLogic>
|
||||
_enemyLogic.Set(this as IEnemy);
|
||||
_enemyLogic.Set(Player);
|
||||
|
||||
_currentTarget = GlobalPosition;
|
||||
|
||||
NavAgent.VelocityComputed += NavAgent_VelocityComputed;
|
||||
NavAgent.TargetReached += NavAgent_TargetReached;
|
||||
|
||||
_thinkTimer = new Timer
|
||||
{
|
||||
WaitTime = 1f
|
||||
WaitTime = 0.4f
|
||||
};
|
||||
AddChild(_thinkTimer);
|
||||
_thinkTimer.Timeout += NavAgent_TargetReached;
|
||||
@@ -89,13 +91,9 @@ public partial class Enemy : RigidBody3D, IEnemy, IProvide<IEnemyLogic>
|
||||
if (CurrentHP <= 0)
|
||||
return;
|
||||
|
||||
var lookDir = GlobalPosition - safeVelocity;
|
||||
var leveledLookDir = new Vector3(lookDir.X, Position.Y, lookDir.Z);
|
||||
if (leveledLookDir.DistanceTo(GlobalPosition) > 0.2f)
|
||||
LookAt(new Vector3(lookDir.X, Position.Y, lookDir.Z), Vector3.Up);
|
||||
|
||||
_knockbackStrength = _knockbackStrength * 0.9f;
|
||||
MoveAndCollide(safeVelocity + (_knockbackDirection * _knockbackStrength));
|
||||
Velocity = safeVelocity + (_knockbackDirection * _knockbackStrength);
|
||||
MoveAndSlide();
|
||||
}
|
||||
|
||||
public void SetTarget(Vector3 target)
|
||||
@@ -122,6 +120,7 @@ public partial class Enemy : RigidBody3D, IEnemy, IProvide<IEnemyLogic>
|
||||
|
||||
EnemyModelView.PlayHitAnimation();
|
||||
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
|
||||
NavAgent_TargetReached();
|
||||
|
||||
if (Player.EquippedWeapon.Value.WeaponTags.Contains(WeaponTag.SelfDamage))
|
||||
Player.Stats.SetCurrentHP(Player.Stats.CurrentHP.Value - 5);
|
||||
@@ -133,16 +132,21 @@ public partial class Enemy : RigidBody3D, IEnemy, IProvide<IEnemyLogic>
|
||||
if (CurrentHP <= 0)
|
||||
return;
|
||||
|
||||
if (_enemyLogic.Value is EnemyLogic.State.Attacking)
|
||||
SetTarget(GlobalPosition);
|
||||
|
||||
var nextPathPosition = NavAgent.GetNextPathPosition();
|
||||
var movementDelta = 2f * (float)delta;
|
||||
|
||||
var newVelocity = GlobalPosition.DirectionTo(nextPathPosition) * movementDelta;
|
||||
|
||||
var newVelocity = GlobalPosition.DirectionTo(nextPathPosition) * 2f;
|
||||
if (NavAgent.AvoidanceEnabled)
|
||||
NavAgent.Velocity = newVelocity;
|
||||
else
|
||||
NavAgent_VelocityComputed(newVelocity);
|
||||
|
||||
var lookDir = GlobalPosition + Velocity;
|
||||
if (_enemyLogic.Value is not EnemyLogic.State.Attacking && (!lookDir.IsEqualApprox(GlobalPosition) || !Velocity.IsZeroApprox()))
|
||||
LookAt(lookDir, Vector3.Up, true);
|
||||
|
||||
var isWalking = _enemyLogic.Value is EnemyLogic.State.Patrolling or EnemyLogic.State.FollowPlayer;
|
||||
EnemyModelView.RotateModel(GlobalTransform.Basis, -Player.CurrentBasis.Z, isWalking);
|
||||
}
|
||||
@@ -200,7 +204,7 @@ public partial class Enemy : RigidBody3D, IEnemy, IProvide<IEnemyLogic>
|
||||
{
|
||||
var rng = new RandomNumberGenerator();
|
||||
rng.Randomize();
|
||||
var randomizedSpot = new Vector3(rng.RandfRange(-7.0f, 7.0f), 0, rng.RandfRange(-7.0f, 7.0f));
|
||||
var randomizedSpot = new Vector3(rng.RandfRange(-5.0f, 5.0f), 0, rng.RandfRange(-5.0f, 5.0f));
|
||||
_enemyLogic.Input(new EnemyLogic.Input.PatrolToRandomSpot(GlobalPosition + randomizedSpot));
|
||||
_enemyLogic.Input(new EnemyLogic.Input.StartPatrol());
|
||||
PatrolTimer.WaitTime = rng.RandfRange(5.0f, 10.0f);
|
||||
|
||||
@@ -84,7 +84,7 @@ public partial class EnemyModelView : Node3D, IEnemyModelView
|
||||
tweener.TweenCallback(Callable.From(QueueFree));
|
||||
}
|
||||
|
||||
public void RotateModel(Basis enemyBasis, Vector3 cameraDirection, bool isWalking) => RotateModel(enemyBasis, cameraDirection, 0.85f, 0.3f, isWalking);
|
||||
public void RotateModel(Basis enemyBasis, Vector3 cameraDirection, bool isWalking) => RotateModel(enemyBasis, cameraDirection, 0.55f, 0.45f, isWalking);
|
||||
|
||||
public void RotateModel(
|
||||
Basis enemyBasis,
|
||||
|
||||
@@ -24,11 +24,11 @@ public partial class Sproingy : Enemy, IHasPrimaryAttack
|
||||
{
|
||||
_enemyLogic.Input(new EnemyLogic.Input.PhysicsTick(delta));
|
||||
|
||||
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(Player.CurrentPosition) < 3f)
|
||||
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(Player.CurrentPosition) < 3.5f)
|
||||
_enemyLogic.Input(new EnemyLogic.Input.StartAttacking());
|
||||
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(Player.CurrentPosition) > 45f)
|
||||
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(Player.CurrentPosition) > 30f)
|
||||
_enemyLogic.Input(new EnemyLogic.Input.LostPlayer());
|
||||
if (_enemyLogic.Value is EnemyLogic.State.Attacking && GlobalPosition.DistanceTo(Player.CurrentPosition) > 3f)
|
||||
if (_enemyLogic.Value is EnemyLogic.State.Attacking && GlobalPosition.DistanceTo(Player.CurrentPosition) > 5f)
|
||||
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
|
||||
}
|
||||
|
||||
|
||||
@@ -23,8 +23,6 @@ DropsSoulGemChance = 0.75
|
||||
metadata/_custom_type_script = ExtResource("2_oln85")
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_cwfph"]
|
||||
radius = 0.3
|
||||
height = 2.02807
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_jbgmx"]
|
||||
height = 5.0
|
||||
@@ -33,16 +31,13 @@ radius = 1.0
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_8vcnq"]
|
||||
radius = 1.20703
|
||||
|
||||
[node name="Sproingy" type="RigidBody3D"]
|
||||
[node name="Sproingy" type="CharacterBody3D"]
|
||||
process_mode = 1
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0)
|
||||
collision_layer = 10
|
||||
collision_mask = 11
|
||||
collision_mask = 3
|
||||
axis_lock_linear_y = true
|
||||
axis_lock_angular_x = true
|
||||
axis_lock_angular_z = true
|
||||
contact_monitor = true
|
||||
max_contacts_reported = 1
|
||||
script = ExtResource("1_xsluo")
|
||||
_enemyStatResource = SubResource("Resource_oln85")
|
||||
|
||||
@@ -53,9 +48,10 @@ shape = SubResource("CapsuleShape3D_cwfph")
|
||||
|
||||
[node name="NavAgent" type="NavigationAgent3D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
path_desired_distance = 2.0
|
||||
target_desired_distance = 2.5
|
||||
avoidance_enabled = true
|
||||
radius = 1.5
|
||||
neighbor_distance = 5.0
|
||||
time_horizon_obstacles = 1.0
|
||||
debug_enabled = true
|
||||
debug_use_custom = true
|
||||
|
||||
@@ -577,10 +577,8 @@ switch_mode = 2
|
||||
switch_mode = 2
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_bmy1k"]
|
||||
switch_mode = 2
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_mxl7w"]
|
||||
switch_mode = 2
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_qq0ru"]
|
||||
advance_mode = 2
|
||||
@@ -664,6 +662,7 @@ switch_mode = 2
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_irq32"]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_2khaq"]
|
||||
switch_mode = 2
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_k7x0x"]
|
||||
|
||||
@@ -678,7 +677,7 @@ states/idle_back/position = Vector2(180.116, -34)
|
||||
states/idle_back_walk/node = SubResource("AnimationNodeAnimation_o0tmb")
|
||||
states/idle_back_walk/position = Vector2(1024, 12.9474)
|
||||
states/idle_front/node = SubResource("AnimationNodeAnimation_d5bmw")
|
||||
states/idle_front/position = Vector2(676, 119)
|
||||
states/idle_front/position = Vector2(644, 532)
|
||||
states/idle_front_walk/node = SubResource("AnimationNodeAnimation_a6s5c")
|
||||
states/idle_front_walk/position = Vector2(644, -100)
|
||||
states/idle_left/node = SubResource("AnimationNodeAnimation_fpvxl")
|
||||
@@ -686,9 +685,9 @@ states/idle_left/position = Vector2(466.116, 119)
|
||||
states/idle_left_walk/node = SubResource("AnimationNodeAnimation_dvj10")
|
||||
states/idle_left_walk/position = Vector2(438, 242.947)
|
||||
states/primary_attack/node = SubResource("AnimationNodeAnimation_erbrx")
|
||||
states/primary_attack/position = Vector2(1521, 176.947)
|
||||
states/primary_attack/position = Vector2(1760, 309)
|
||||
transitions = ["idle_front_walk", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_3xv6a"), "idle_left_walk", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_0h1op"), "idle_front_walk", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_361b7"), "idle_back_walk", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_wftla"), "idle_back_walk", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_gqqkl"), "idle_left_walk", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_5cj36"), "idle_front_walk", "primary_attack", SubResource("AnimationNodeStateMachineTransition_4t05h"), "primary_attack", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_8hgxu"), "primary_attack", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_fq2yw"), "primary_attack", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_yqm0k"), "idle_back_walk", "primary_attack", SubResource("AnimationNodeStateMachineTransition_bmy1k"), "idle_left_walk", "primary_attack", SubResource("AnimationNodeStateMachineTransition_mxl7w"), "Start", "idle_front", SubResource("AnimationNodeStateMachineTransition_qq0ru"), "idle_front", "idle_back", SubResource("AnimationNodeStateMachineTransition_c54uj"), "idle_back", "idle_left", SubResource("AnimationNodeStateMachineTransition_qmo72"), "idle_left", "idle_front", SubResource("AnimationNodeStateMachineTransition_jyt1n"), "idle_left", "idle_back", SubResource("AnimationNodeStateMachineTransition_5un2v"), "idle_back", "idle_front", SubResource("AnimationNodeStateMachineTransition_2x3nl"), "idle_front", "idle_left", SubResource("AnimationNodeStateMachineTransition_6a5nw"), "idle_back", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_0jqty"), "idle_front", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_yjcrh"), "idle_back", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_2ybyh"), "idle_left", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_n454k"), "idle_back_walk", "idle_left", SubResource("AnimationNodeStateMachineTransition_vrcjv"), "idle_back_walk", "idle_front", SubResource("AnimationNodeStateMachineTransition_h1yxw"), "idle_back_walk", "idle_back", SubResource("AnimationNodeStateMachineTransition_kg6hd"), "idle_back", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_25i3y"), "idle_left", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_5g722"), "idle_front", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_a6y4x"), "idle_left_walk", "idle_front", SubResource("AnimationNodeStateMachineTransition_7y7m4"), "idle_left_walk", "idle_left", SubResource("AnimationNodeStateMachineTransition_ldcvv"), "idle_left_walk", "idle_back", SubResource("AnimationNodeStateMachineTransition_aalmk"), "idle_front_walk", "idle_back", SubResource("AnimationNodeStateMachineTransition_2le5t"), "idle_front_walk", "idle_front", SubResource("AnimationNodeStateMachineTransition_4nmgu"), "idle_front_walk", "idle_left", SubResource("AnimationNodeStateMachineTransition_mw5r6"), "idle_front", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_jbtxi"), "idle_left", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_mjxlk"), "idle_back", "primary_attack", SubResource("AnimationNodeStateMachineTransition_al2xs"), "primary_attack", "idle_back", SubResource("AnimationNodeStateMachineTransition_afa0q"), "idle_front", "primary_attack", SubResource("AnimationNodeStateMachineTransition_irq32"), "primary_attack", "idle_front", SubResource("AnimationNodeStateMachineTransition_2khaq"), "idle_left", "primary_attack", SubResource("AnimationNodeStateMachineTransition_k7x0x"), "primary_attack", "idle_left", SubResource("AnimationNodeStateMachineTransition_noc6c")]
|
||||
graph_offset = Vector2(-124.884, 28.2972)
|
||||
graph_offset = Vector2(495.706, -34.8579)
|
||||
|
||||
[node name="EnemyModelView" type="Node3D"]
|
||||
script = ExtResource("1_0vbio")
|
||||
|
||||
@@ -27,18 +27,19 @@ height = 5.0
|
||||
radius = 1.0
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_0h5s2"]
|
||||
radius = 0.3
|
||||
height = 2.66932
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_wrps7"]
|
||||
radius = 1.0
|
||||
|
||||
[node name="Michael" type="RigidBody3D"]
|
||||
[node name="Michael" type="CharacterBody3D"]
|
||||
process_mode = 1
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0)
|
||||
collision_layer = 10
|
||||
collision_mask = 11
|
||||
axis_lock_linear_y = true
|
||||
axis_lock_angular_x = true
|
||||
axis_lock_angular_z = true
|
||||
motion_mode = 1
|
||||
script = ExtResource("1_wfjxm")
|
||||
_enemyStatResource = SubResource("Resource_xhsah")
|
||||
|
||||
@@ -76,6 +77,8 @@ shape = SubResource("CapsuleShape3D_0h5s2")
|
||||
[node name="NavAgent" type="NavigationAgent3D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
path_postprocessing = 2
|
||||
simplify_path = true
|
||||
simplify_epsilon = 1.0
|
||||
avoidance_enabled = true
|
||||
radius = 5.0
|
||||
debug_enabled = true
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -777,6 +777,14 @@ shape = SubResource("BoxShape3D_phhs1")
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.66204, -0.677457, 94.7863)
|
||||
shape = SubResource("BoxShape3D_phhs1")
|
||||
|
||||
[node name="CollisionShape3D9" type="CollisionShape3D" parent="Antechamber A/StaticBody3D2"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.41592, -0.677457, 78.7059)
|
||||
shape = SubResource("BoxShape3D_phhs1")
|
||||
|
||||
[node name="CollisionShape3D10" type="CollisionShape3D" parent="Antechamber A/StaticBody3D2"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.24982, -0.677457, 78.8461)
|
||||
shape = SubResource("BoxShape3D_phhs1")
|
||||
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0314088, 4.23029, -0.0385468)
|
||||
visible = false
|
||||
|
||||
@@ -497,7 +497,7 @@ blend_shape_mode = 0
|
||||
shadow_mesh = SubResource("ArrayMesh_p4f4g")
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_gbjb2"]
|
||||
size = Vector3(4.40063, 4, 1.67725)
|
||||
size = Vector3(4.40063, 4, 1.72632)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_lepkf"]
|
||||
transparency = 1
|
||||
@@ -707,6 +707,8 @@ mesh = SubResource("ArrayMesh_pjk1a")
|
||||
skeleton = NodePath("")
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="18_A1_CORRIDOR_A"]
|
||||
collision_layer = 2147483649
|
||||
collision_mask = 2147483649
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="18_A1_CORRIDOR_A/StaticBody3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -11.7192, 2.25405, -0.816737)
|
||||
@@ -740,7 +742,7 @@ collision_layer = 2147483648
|
||||
collision_mask = 2147483648
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="DOOR?_F_CUT/StaticBody3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0286865, 0, 0.463623)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0286865, 0, 0.439088)
|
||||
shape = SubResource("BoxShape3D_gbjb2")
|
||||
|
||||
[node name="DOOR?_R_CUT" type="CSGBox3D" parent="."]
|
||||
|
||||
@@ -20,6 +20,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.791832, 0)
|
||||
|
||||
[node name="Sproingy" parent="." instance=ExtResource("2_3keei")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.64783, -11.9575)
|
||||
motion_mode = 1
|
||||
|
||||
[node name="NavigationRegion3D" type="NavigationRegion3D" parent="."]
|
||||
navigation_mesh = SubResource("NavigationMesh_3keei")
|
||||
|
||||
Reference in New Issue
Block a user