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

@@ -446,6 +446,7 @@ layout_mode = 2
[node name="EnemyTarget" type="TextureRect" parent="UI"]
unique_name_in_owner = true
modulate = Color(0.9882353, 0, 0.10980392, 1)
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5

View File

@@ -29,8 +29,10 @@ public partial class PlayerUi : Control
var (state, position) = targetProperties;
var visible = state != TargetState.NoTarget;
var modulation = state == TargetState.TargetInRange ? new Color("ffffff") : new Color("fc001c");
_enemyTarget.SetVisible(visible);
_enemyTarget.SetPosition(position);
_enemyTarget.SetPosition(position - _enemyTarget.Size / 2);
_enemyTarget.SetModulate(modulation);
}

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));
}