basic tests for a wider variety of files
This commit is contained in:
@@ -7,7 +7,7 @@ using Movementtests.systems.damage;
|
||||
[GlobalClass]
|
||||
public partial class RDamageModifier : Resource, IDamageable
|
||||
{
|
||||
public event Action<IDamageable, DamageRecord> DamageTaken;
|
||||
public event Action<IDamageable, DamageRecord> DamageTaken = null!;
|
||||
|
||||
[Export]
|
||||
public EDamageTypes DamageType { get; set;}
|
||||
|
||||
@@ -5,11 +5,11 @@ using Movementtests.interfaces;
|
||||
[GlobalClass, Icon("res://assets/ui/IconGodotNode/white/icon_heart.png")]
|
||||
public partial class CHealth : Node, IHealthable
|
||||
{
|
||||
public event Action<IHealthable, HealthChangedRecord> HealthChanged;
|
||||
public event Action<IHealthable> HealthDepleted;
|
||||
public event Action<IHealthable, HealthChangedRecord> HealthChanged = null!;
|
||||
public event Action<IHealthable> HealthDepleted = null!;
|
||||
|
||||
[Export]
|
||||
public RHealth RHealth { get; set; }
|
||||
public RHealth RHealth { get; set; } = null!;
|
||||
|
||||
public float CurrentHealth { get; set; }
|
||||
|
||||
|
||||
@@ -5,9 +5,9 @@ using Movementtests.interfaces;
|
||||
[GlobalClass, Icon("res://assets/ui/IconGodotNode/node_3D/icon_wind.png")]
|
||||
public partial class CKnockback : Node3D, IKnockbackable
|
||||
{
|
||||
[Export] public RKnockback RKnockback { get; set;}
|
||||
|
||||
private KnockbackRecord _knockbackRecord = null;
|
||||
[Export] public RKnockback RKnockback { get; set;} = null!;
|
||||
|
||||
private KnockbackRecord _knockbackRecord = null!;
|
||||
|
||||
public void RegisterKnockback(KnockbackRecord knockbackRecord)
|
||||
{
|
||||
@@ -20,7 +20,7 @@ public partial class CKnockback : Node3D, IKnockbackable
|
||||
|
||||
var knockbackDirection = GlobalPosition - _knockbackRecord.DamageRecord.SourceLocation;
|
||||
var finalKnockback = knockbackDirection.Normalized() * RKnockback.Modifier * _knockbackRecord.ForceMultiplier;
|
||||
_knockbackRecord = null;
|
||||
_knockbackRecord = null!;
|
||||
return finalKnockback;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,10 +6,9 @@ namespace Movementtests.scenes.movement;
|
||||
[GlobalClass, Icon("res://assets/ui/IconGodotNode/node_3D/icon_path_follow.png")]
|
||||
public partial class CGroundedMovement : Node3D, IMoveable
|
||||
{
|
||||
[Export] public RMovement RMovement { get; set; }
|
||||
[Export] public RMovement RMovement { get; set; } = null!;
|
||||
|
||||
[Export]
|
||||
public RayCast3D WallInFrontRayCast { get; set; }
|
||||
[Export] public RayCast3D WallInFrontRayCast { get; set; } = null!;
|
||||
|
||||
|
||||
public Vector3 ComputeVelocity(MovementInputs inputs)
|
||||
|
||||
@@ -16,36 +16,37 @@ public partial class Enemy : CharacterBody3D,
|
||||
IStunnable
|
||||
{
|
||||
// Signals and events
|
||||
public event Action<IDamageable, DamageRecord> DamageTaken;
|
||||
public event Action<IHealthable, HealthChangedRecord> HealthChanged;
|
||||
public event Action<IHealthable> HealthDepleted;
|
||||
public event Action<IDamageable, DamageRecord> DamageTaken = null!;
|
||||
public event Action<IHealthable, HealthChangedRecord> HealthChanged = null!;
|
||||
public event Action<IHealthable> HealthDepleted = null!;
|
||||
|
||||
// Public export components
|
||||
[Export]
|
||||
public Node3D Target { get; set; }
|
||||
public Node3D Target { get; set; } = null!;
|
||||
|
||||
[Export]
|
||||
public float EnemyHeight { get; set; } = 1f;
|
||||
|
||||
[ExportGroup("Health")]
|
||||
[Export]
|
||||
public RHealth RHealth { get; set; }
|
||||
public RHealth RHealth { get; set; } = null!;
|
||||
[Export]
|
||||
public RDeathEffect[] DeathEffects { get; set; }
|
||||
public IHealthable CHealth { get; set; }
|
||||
public RDeathEffect[] DeathEffects { get; set; } = null!;
|
||||
public IHealthable CHealth { get; set; } = null!;
|
||||
|
||||
[ExportGroup("Damage")]
|
||||
[Export]
|
||||
public RDamage RDamage { get; set; }
|
||||
public IDamageable CDamageable { get; set; }
|
||||
public RDamage RDamage { get; set; } = null!;
|
||||
public IDamageable CDamageable { get; set; } = null!;
|
||||
|
||||
[Export]
|
||||
public RKnockback RKnockback { get; set; }
|
||||
public IKnockbackable CKnockback { get; set; }
|
||||
public RKnockback RKnockback { get; set; } = null!;
|
||||
public IKnockbackable CKnockback { get; set; } = null!;
|
||||
|
||||
[ExportGroup("Movement")]
|
||||
[Export]
|
||||
public RMovement RMovement { get; set; }
|
||||
public IMoveable CMovement { get; set; }
|
||||
public RMovement RMovement { get; set; } = null!;
|
||||
public IMoveable CMovement { get; set; } = null!;
|
||||
|
||||
// Public stuff
|
||||
public float CurrentHealth
|
||||
@@ -55,9 +56,9 @@ public partial class Enemy : CharacterBody3D,
|
||||
}
|
||||
|
||||
// Private stuff
|
||||
private Area3D _damageBox;
|
||||
private Node3D _target;
|
||||
private Healthbar _healthbar;
|
||||
private Area3D _damageBox = null!;
|
||||
internal Node3D _target = null!;
|
||||
private Healthbar _healthbar = null!;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
@@ -70,34 +71,28 @@ public partial class Enemy : CharacterBody3D,
|
||||
_damageBox = GetNode<Area3D>("DamageBox");
|
||||
_target = GetNode<Node3D>("CTarget");
|
||||
|
||||
CDamageable = GetNode<Node>("CDamageable") as IDamageable;
|
||||
CMovement = GetNode<Node>("CMovement") as IMoveable;
|
||||
CHealth = GetNode<Node>("CHealth") as IHealthable;
|
||||
CKnockback = GetNode<Node>("CKnockback") as IKnockbackable;
|
||||
if (CDamageable is null) GD.PrintErr("This node needs a 'CDamage' child of type IDamageable!");
|
||||
if (CMovement is null) GD.PrintErr("This node needs a 'CMovement' child of type IMoveable!");
|
||||
if (CHealth is null) GD.PrintErr("This node needs a 'CHealth' child of type IHealthable!");
|
||||
if (CKnockback is null) GD.PrintErr("This node needs a 'CKnockback' child of type IKnockbackable!");
|
||||
CDamageable = (GetNode<Node>("CDamageable") as IDamageable)!;
|
||||
CMovement = (GetNode<Node>("CMovement") as IMoveable)!;
|
||||
CHealth = (GetNode<Node>("CHealth") as IHealthable)!;
|
||||
CKnockback = (GetNode<Node>("CKnockback") as IKnockbackable)!;
|
||||
|
||||
_healthbar = GetNode<CHealthbar>("CHealthBar").Healthbar;
|
||||
|
||||
if (RMovement != null) CMovement!.RMovement = RMovement;
|
||||
if (RHealth != null)
|
||||
{
|
||||
CHealth!.RHealth = RHealth;
|
||||
CHealth.CurrentHealth = RHealth.StartingHealth;
|
||||
}
|
||||
if (RKnockback != null) CKnockback!.RKnockback = RKnockback;
|
||||
_healthbar.Initialize(CHealth!.CurrentHealth);
|
||||
CMovement.RMovement = RMovement;
|
||||
CHealth.RHealth = RHealth;
|
||||
CHealth.CurrentHealth = RHealth.StartingHealth;
|
||||
CKnockback.RKnockback = RKnockback;
|
||||
|
||||
_healthbar.Initialize(CHealth.CurrentHealth);
|
||||
}
|
||||
|
||||
public void SetupSignals()
|
||||
{
|
||||
// Anonymous function call to erase return values of ReduceHealth
|
||||
CDamageable.DamageTaken += (source, record) => ReduceHealth(source, record);
|
||||
CDamageable.DamageTaken += (source, record) => RegisterKnockback(new KnockbackRecord(record));
|
||||
CDamageable.DamageTaken += (_, record) => RegisterKnockback(new KnockbackRecord(record));
|
||||
CHealth.HealthDepleted += Kill;
|
||||
HealthChanged += (source, record) => _healthbar.SetHealth(record.CurrentHealth);
|
||||
HealthChanged += (_, record) => _healthbar.SetHealth(record.CurrentHealth);
|
||||
}
|
||||
|
||||
public override void _PhysicsProcess(double delta)
|
||||
@@ -187,24 +182,21 @@ public partial class Enemy : CharacterBody3D,
|
||||
|
||||
public void RegisterKnockback(KnockbackRecord knockbackRecord)
|
||||
{
|
||||
if (CKnockback is null) return;
|
||||
CKnockback.RegisterKnockback(knockbackRecord);
|
||||
}
|
||||
|
||||
public Vector3 ComputeKnockback()
|
||||
{
|
||||
if (CKnockback is null) return Vector3.Zero;
|
||||
return CKnockback.ComputeKnockback();
|
||||
}
|
||||
|
||||
public Vector3 GetTargetGlobalPosition()
|
||||
{
|
||||
if (_target is null) return GlobalPosition;
|
||||
return _target.GlobalPosition;
|
||||
return _target == null ? GlobalPosition : _target.GlobalPosition;
|
||||
}
|
||||
|
||||
// Stun management
|
||||
public bool IsStunned { get; set; } = false;
|
||||
public bool IsStunned { get; set; }
|
||||
|
||||
[Export(PropertyHint.Range, "0.1, 2, 0.1, or_greater")]
|
||||
public float StunDuration { get; set; } = 1f;
|
||||
|
||||
@@ -5,7 +5,7 @@ using Movementtests.interfaces;
|
||||
[GlobalClass, Icon("res://assets/ui/IconGodotNode/control/icon_text_panel.png")]
|
||||
public partial class PlayerUi : Control
|
||||
{
|
||||
private TextureRect[] _dashIcons = new TextureRect[3];
|
||||
internal TextureRect[] _dashIcons = new TextureRect[3];
|
||||
private TextureRect _enemyTarget;
|
||||
private Healthbar _healthbar;
|
||||
|
||||
|
||||
@@ -26,18 +26,18 @@ public partial class DashSystem: Node3D
|
||||
public Vector3 PlannedMantleLocation { get; set; }
|
||||
public MantleSystem MantleSystem { get; set; }
|
||||
|
||||
private HeadSystem _head;
|
||||
internal HeadSystem _head;
|
||||
public ShapeCast3D DashCast3D;
|
||||
private Camera3D _camera;
|
||||
private Vector3 _dashDirection = Vector3.Zero;
|
||||
internal Camera3D _camera;
|
||||
internal Vector3 _dashDirection = Vector3.Zero;
|
||||
|
||||
private ShapeCast3D _dashCastDrop;
|
||||
private MeshInstance3D _dashDropIndicator;
|
||||
private MeshInstance3D _dashDropLocationIndicator;
|
||||
internal ShapeCast3D _dashCastDrop;
|
||||
internal MeshInstance3D _dashDropIndicator;
|
||||
internal MeshInstance3D _dashDropLocationIndicator;
|
||||
|
||||
private MeshInstance3D _dashTarget;
|
||||
private CpuParticles3D _dashIndicator;
|
||||
private AnimationPlayer _dashIndicatorAnim;
|
||||
internal MeshInstance3D _dashTarget;
|
||||
internal CpuParticles3D _dashIndicator;
|
||||
internal AnimationPlayer _dashIndicatorAnim;
|
||||
|
||||
[Export]
|
||||
public PackedScene DashIndicatorScene { get; set; }
|
||||
@@ -77,7 +77,7 @@ public partial class DashSystem: Node3D
|
||||
_dashIndicatorAnim = GetNode<AnimationPlayer>("DashIndicator/AnimationPlayer");
|
||||
}
|
||||
|
||||
private DashLocation ComputeDashLocation()
|
||||
internal DashLocation ComputeDashLocation()
|
||||
{
|
||||
var targetLocation = DashCast3D.ToGlobal(DashCast3D.TargetPosition);
|
||||
var hasHit = DashCast3D.IsColliding();
|
||||
|
||||
@@ -39,10 +39,10 @@ public partial class HeadSystem : Node3D
|
||||
float BobbingMultiplier,
|
||||
float FovMultiplier);
|
||||
|
||||
private Camera3D _camera;
|
||||
private Marker3D _cameraAnchor;
|
||||
private AnimationPlayer _animationPlayer;
|
||||
private AnimationTree _animationTree;
|
||||
internal Camera3D _camera;
|
||||
internal Marker3D _cameraAnchor;
|
||||
internal AnimationPlayer _animationPlayer;
|
||||
internal AnimationTree _animationTree;
|
||||
|
||||
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
|
||||
public float LookSensitivity { get; set; } = 1f;
|
||||
@@ -63,11 +63,11 @@ public partial class HeadSystem : Node3D
|
||||
[Export(PropertyHint.Range, "0,1,0.01,or_greater")]
|
||||
public float SlidingJitterAmplitude { get; set; } = 0.1f;
|
||||
|
||||
private FastNoiseLite _slidingNoise = new FastNoiseLite();
|
||||
internal FastNoiseLite _slidingNoise = new FastNoiseLite();
|
||||
|
||||
[ExportGroup("Bobbing")]
|
||||
|
||||
private float _bobbingAccumulator; // Constantly increases when player moves in X or/and Z axis
|
||||
internal float _bobbingAccumulator; // Constantly increases when player moves in X or/and Z axis
|
||||
[Export(PropertyHint.Range, "0,10,0.01,or_greater")]
|
||||
public float BobbingFrequency { set; get; } = 2.4f;
|
||||
[Export(PropertyHint.Range, "0,0.4,0.01,or_greater")]
|
||||
@@ -84,11 +84,11 @@ public partial class HeadSystem : Node3D
|
||||
public float FovMaxedOutSpeed { get; set; } = 20f;
|
||||
|
||||
[ExportGroup("First Person rig")]
|
||||
private Node3D _fpRig;
|
||||
private Node3D _rightHandedWeapon;
|
||||
private Node3D _leftHandedWeapon;
|
||||
private Node3D _fpDisplacedRig;
|
||||
private Vector3 _fpDisplacedRigInitialRotation;
|
||||
internal Node3D _fpRig;
|
||||
internal Node3D _rightHandedWeapon;
|
||||
internal Node3D _leftHandedWeapon;
|
||||
internal Node3D _fpDisplacedRig;
|
||||
internal Vector3 _fpDisplacedRigInitialRotation;
|
||||
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
|
||||
public float WeaponSway { get; set; } = 5f;
|
||||
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
|
||||
@@ -190,8 +190,8 @@ public partial class HeadSystem : Node3D
|
||||
EmitSignalHitboxDeactivated();
|
||||
}
|
||||
|
||||
private bool _footstepEmitted;
|
||||
private bool _isPlayingForcingAnim;
|
||||
internal bool _footstepEmitted;
|
||||
internal bool _isPlayingForcingAnim;
|
||||
|
||||
public void ResetHeadBobbing()
|
||||
{
|
||||
|
||||
@@ -265,8 +265,8 @@ public partial class PlayerController : CharacterBody3D,
|
||||
private float _inputRotateFloorplane;
|
||||
|
||||
// Basic falling
|
||||
private float _targetSpeed;
|
||||
private float _gravity;
|
||||
internal float _targetSpeed;
|
||||
internal float _gravity;
|
||||
|
||||
// Jump stuff
|
||||
private int _currentInputBufferFrames;
|
||||
@@ -290,7 +290,7 @@ public partial class PlayerController : CharacterBody3D,
|
||||
private Vector3 _currentWallContactPoint = Vector3.Zero;
|
||||
|
||||
// Dash stuff
|
||||
private bool _canDash = true;
|
||||
internal bool _canDash = true;
|
||||
private bool _canDashAirborne = true;
|
||||
private float _playerHeight;
|
||||
private float _playerRadius;
|
||||
|
||||
Reference in New Issue
Block a user