Reorganize SFX
This commit is contained in:
@@ -20,57 +20,57 @@ public partial class Sproingy : Enemy, IHasPrimaryAttack, ICanPatrol
|
||||
|
||||
public void OnReady()
|
||||
{
|
||||
SetPhysicsProcess(true);
|
||||
((EnemyModelView2D)_enemyModelView).Hitbox.AreaEntered += Hitbox_AreaEntered;
|
||||
SetPhysicsProcess(true);
|
||||
((EnemyModelView2D)_enemyModelView).Hitbox.AreaEntered += Hitbox_AreaEntered;
|
||||
}
|
||||
|
||||
public void OnPhysicsProcess(double delta)
|
||||
{
|
||||
_enemyLogic.Input(new EnemyLogic.Input.PhysicsTick(delta));
|
||||
_enemyLogic.Input(new EnemyLogic.Input.PhysicsTick(delta));
|
||||
|
||||
if (_enemyLogic.Value is not EnemyLogic.State.Activated)
|
||||
return;
|
||||
if (_enemyLogic.Value is not EnemyLogic.State.Activated)
|
||||
return;
|
||||
|
||||
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(_player.CurrentPosition) < 1.5f)
|
||||
_enemyLogic.Input(new EnemyLogic.Input.StartAttacking());
|
||||
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)
|
||||
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
|
||||
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(_player.CurrentPosition) < 1.5f)
|
||||
_enemyLogic.Input(new EnemyLogic.Input.StartAttacking());
|
||||
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)
|
||||
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
|
||||
|
||||
_navigationAgentClient.CalculateVelocity(GlobalPosition, true);
|
||||
_navigationAgentClient.CalculateVelocity(GlobalPosition, true);
|
||||
|
||||
base._PhysicsProcess(delta);
|
||||
base._PhysicsProcess(delta);
|
||||
}
|
||||
|
||||
public override void TakeAction()
|
||||
{
|
||||
PrimaryAttack();
|
||||
PrimaryAttack();
|
||||
}
|
||||
|
||||
public void PrimaryAttack()
|
||||
{
|
||||
_enemyModelView.PlayPrimaryAttackAnimation();
|
||||
_enemyModelView.PlayPrimaryAttackAnimation();
|
||||
}
|
||||
|
||||
public override void SetTarget(Vector3 target) => _navigationAgentClient.SetTarget(target);
|
||||
|
||||
public void Patrol()
|
||||
{
|
||||
var rng = new RandomNumberGenerator();
|
||||
rng.Randomize();
|
||||
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());
|
||||
var rng = new RandomNumberGenerator();
|
||||
rng.Randomize();
|
||||
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());
|
||||
}
|
||||
|
||||
private void Hitbox_AreaEntered(Area3D area)
|
||||
{
|
||||
var target = area.GetOwner();
|
||||
if (target is IPlayer player)
|
||||
{
|
||||
var damage = _enemyStatResource.CurrentAttack * PrimaryAttackElementalDamageBonus;
|
||||
player.TakeDamage(damage, PrimaryAttackElementalType, BattleExtensions.IsCriticalHit(_enemyStatResource.Luck));
|
||||
}
|
||||
var target = area.GetOwner();
|
||||
if (target is IPlayer player)
|
||||
{
|
||||
var damage = _enemyStatResource.CurrentAttack * PrimaryAttackElementalDamageBonus;
|
||||
player.TakeDamage(damage, PrimaryAttackElementalType, BattleExtensions.IsCriticalHit(_enemyStatResource.Luck));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,13 +27,13 @@ metadata/_custom_type_script = ExtResource("2_oln85")
|
||||
radius = 0.106078
|
||||
height = 1.23076
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_8vcnq"]
|
||||
radius = 0.57308
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_jbgmx"]
|
||||
height = 5.0
|
||||
radius = 1.0
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_8vcnq"]
|
||||
radius = 0.57308
|
||||
|
||||
[node name="Sproingy" type="CharacterBody3D"]
|
||||
process_mode = 1
|
||||
collision_layer = 10
|
||||
@@ -44,46 +44,54 @@ axis_lock_angular_z = true
|
||||
script = ExtResource("1_xsluo")
|
||||
_enemyStatResource = SubResource("Resource_oln85")
|
||||
|
||||
[node name="NavigationAgentClient" parent="." instance=ExtResource("3_ut5m2")]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape3D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0)
|
||||
shape = SubResource("CapsuleShape3D_cwfph")
|
||||
|
||||
[node name="LineOfSight" type="Area3D" parent="."]
|
||||
[node name="Navigation" type="Node3D" parent="."]
|
||||
|
||||
[node name="NavigationAgentClient" parent="Navigation" instance=ExtResource("3_ut5m2")]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="Collision" type="Node3D" parent="."]
|
||||
|
||||
[node name="Collision" type="Area3D" parent="Collision"]
|
||||
collision_layer = 2048
|
||||
collision_mask = 0
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Collision/Collision"]
|
||||
shape = SubResource("SphereShape3D_8vcnq")
|
||||
|
||||
[node name="LineOfSight" type="Area3D" parent="Collision"]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0)
|
||||
collision_layer = 2
|
||||
collision_mask = 2
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="LineOfSight"]
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Collision/LineOfSight"]
|
||||
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, -2)
|
||||
shape = SubResource("CylinderShape3D_jbgmx")
|
||||
|
||||
[node name="PatrolTimer" type="Timer" parent="."]
|
||||
unique_name_in_owner = true
|
||||
wait_time = 10.0
|
||||
autostart = true
|
||||
|
||||
[node name="AttackTimer" type="Timer" parent="."]
|
||||
unique_name_in_owner = true
|
||||
wait_time = 0.8
|
||||
autostart = true
|
||||
|
||||
[node name="Raycast" type="RayCast3D" parent="."]
|
||||
[node name="Raycast" type="RayCast3D" parent="Collision"]
|
||||
unique_name_in_owner = true
|
||||
target_position = Vector3(0, 0, -5)
|
||||
collision_mask = 3
|
||||
|
||||
[node name="EnemyModelView" parent="." instance=ExtResource("4_o3b7p")]
|
||||
[node name="Visual" type="Node3D" parent="."]
|
||||
|
||||
[node name="EnemyModelView" parent="Visual" instance=ExtResource("4_o3b7p")]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0.0862446, 0)
|
||||
|
||||
[node name="Collision" type="Area3D" parent="."]
|
||||
collision_layer = 2048
|
||||
collision_mask = 0
|
||||
[node name="Timers" type="Node" parent="."]
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Collision"]
|
||||
shape = SubResource("SphereShape3D_8vcnq")
|
||||
[node name="PatrolTimer" type="Timer" parent="Timers"]
|
||||
unique_name_in_owner = true
|
||||
wait_time = 10.0
|
||||
autostart = true
|
||||
|
||||
[node name="AttackTimer" type="Timer" parent="Timers"]
|
||||
unique_name_in_owner = true
|
||||
wait_time = 0.8
|
||||
autostart = true
|
||||
|
||||
Reference in New Issue
Block a user