export target variables and made a targetable interface
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user