export target variables and made a targetable interface

This commit is contained in:
2026-01-21 14:21:47 +01:00
parent 04121f18a4
commit fb78add739
7 changed files with 41 additions and 16 deletions

View File

@@ -71,16 +71,18 @@ public partial class PlayerController : CharacterBody3D,
[Export] public Marker3D TutorialWeaponTarget;
[Export] public bool TutorialDone { get; set; }
// Combat stuff
[ExportCategory("Combat")]
[ExportGroup("Damage")]
[Export]
public RDamage RDamage { get; set; }
[Export] public RDamage RDamage { get; set; }
[Export] public RKnockback RKnockback { get; set; }
[Export] public RHealth RHealth { get; set; }
[Export]
public RKnockback RKnockback { get; set; }
[Export(PropertyHint.Range, "0,20,0.1,or_greater")]
public float TargetingDistance { get; set; } = 10.0f;
[Export]
public RHealth RHealth { get; set; }
[Export(PropertyHint.Range, "0,20,0.1,or_greater")]
public float TargetInRangeDistance { get; set; } = 5.0f;
// Movement stuff
[ExportCategory("Movement")]
@@ -355,6 +357,7 @@ public partial class PlayerController : CharacterBody3D,
// General use stuff
PlayerUi = GetNode<PlayerUi>("UI");
_closeEnemyDetector = GetNode<ShapeCast3D>("%CloseEnemyDetector");
_closeEnemyDetector.TargetPosition = _closeEnemyDetector.TargetPosition.Normalized() * TargetingDistance;
// DashIndicator = GetNode<TextureRect>("%DashIndicator");
PowerCooldownIndicator = GetNode<ColorRect>("%DashCooldownIndicator");
@@ -1831,15 +1834,18 @@ public partial class PlayerController : CharacterBody3D,
PlayerUi.SetEnemyTargetProperties(new PlayerUi.TargetProperties(enemyTargetState, positionOnScreen));
return;
}
var collidedObject = _closeEnemyDetector.GetCollider(0);
if (collidedObject is not Node3D target)
if (collidedObject is not ITargetable target)
{
PlayerUi.SetEnemyTargetProperties(new PlayerUi.TargetProperties(enemyTargetState, positionOnScreen));
return;
}
enemyTargetState = PlayerUi.TargetState.TargetInRange;
positionOnScreen = _camera.UnprojectPosition(target.GlobalPosition);
var targetPos = target.GetTargetGlobalPosition();
var targetDistance = targetPos.DistanceTo(GlobalPosition);
enemyTargetState = targetDistance > TargetInRangeDistance ? PlayerUi.TargetState.TargetInRange : PlayerUi.TargetState.TargetTooFar;
positionOnScreen = _camera.UnprojectPosition(targetPos);
PlayerUi.SetEnemyTargetProperties(new PlayerUi.TargetProperties(enemyTargetState, positionOnScreen));
}