making dash through target a dedicated dash action
This commit is contained in:
@@ -1261,6 +1261,13 @@ public partial class PlayerController : CharacterBody3D, IForgeEntity, ICueHandl
|
|||||||
_playerState.SendEvent("cancel_aim");
|
_playerState.SendEvent("cancel_aim");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var isInputtingForward = IsPlayerInputtingForward() || GetMoveInput().Length() < Mathf.Epsilon;
|
||||||
|
if (_isEnemyInDashAttackRange && isInputtingForward)
|
||||||
|
{
|
||||||
|
_playerState.SendEvent("dash_attack");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (GetMoveInput().Length() < Mathf.Epsilon) return;
|
if (GetMoveInput().Length() < Mathf.Epsilon) return;
|
||||||
|
|
||||||
@@ -2399,7 +2406,6 @@ public partial class PlayerController : CharacterBody3D, IForgeEntity, ICueHandl
|
|||||||
PlayerUi.SetEnemyTargetProperties(new PlayerUi.TargetProperties(enemyTargetState, positionOnScreen));
|
PlayerUi.SetEnemyTargetProperties(new PlayerUi.TargetProperties(enemyTargetState, positionOnScreen));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!CloseEnemyDetector.IsColliding())
|
if (!CloseEnemyDetector.IsColliding())
|
||||||
{
|
{
|
||||||
@@ -2419,15 +2425,15 @@ public partial class PlayerController : CharacterBody3D, IForgeEntity, ICueHandl
|
|||||||
// var targetDistance = _targetLocation.DistanceTo(GlobalPosition);
|
// var targetDistance = _targetLocation.DistanceTo(GlobalPosition);
|
||||||
positionOnScreen = Camera.UnprojectPosition(_targetLocation);
|
positionOnScreen = Camera.UnprojectPosition(_targetLocation);
|
||||||
|
|
||||||
var wouldKill = false;
|
// var wouldKill = false;
|
||||||
if (_targetObject is IHealthable h and IDamageable d)
|
// if (_targetObject is IHealthable h and IDamageable d)
|
||||||
{
|
// {
|
||||||
var wouldBeDamage = d.ComputeDamage(new DamageRecord(GlobalPosition, RDamage));
|
// var wouldBeDamage = d.ComputeDamage(new DamageRecord(GlobalPosition, RDamage));
|
||||||
if (h.CurrentHealth < wouldBeDamage.Damage.DamageDealt) wouldKill = true;
|
// if (h.CurrentHealth < wouldBeDamage.Damage.DamageDealt) wouldKill = true;
|
||||||
}
|
// }
|
||||||
_isEnemyInDashAttackRange = true;
|
_isEnemyInDashAttackRange = true;
|
||||||
enemyTargetState = wouldKill ? PlayerUi.TargetState.TargetWouldKill : PlayerUi.TargetState.TargetWouldNotKill;
|
// enemyTargetState = wouldKill ? PlayerUi.TargetState.TargetWouldKill : PlayerUi.TargetState.TargetWouldNotKill;
|
||||||
PlayerUi.SetEnemyTargetProperties(new PlayerUi.TargetProperties(enemyTargetState, positionOnScreen));
|
PlayerUi.SetEnemyTargetProperties(new PlayerUi.TargetProperties(PlayerUi.TargetState.TargetWouldNotKill, positionOnScreen));
|
||||||
}
|
}
|
||||||
|
|
||||||
public DamageRecord TakeDamage(DamageRecord damageRecord)
|
public DamageRecord TakeDamage(DamageRecord damageRecord)
|
||||||
@@ -2475,11 +2481,10 @@ public partial class PlayerController : CharacterBody3D, IForgeEntity, ICueHandl
|
|||||||
private PhysicsDirectSpaceState3D _spaceState = null!;
|
private PhysicsDirectSpaceState3D _spaceState = null!;
|
||||||
public void StartDashAction(bool isParry)
|
public void StartDashAction(bool isParry)
|
||||||
{
|
{
|
||||||
if (isParry) HeadSystem.OnParry();
|
// if (isParry) HeadSystem.OnParry();
|
||||||
else HeadSystem.OnHit();
|
// else HeadSystem.OnHit();
|
||||||
|
// var streamName = isParry ? "parry" : "attacks";
|
||||||
var streamName = isParry ? "parry" : "attacks";
|
_audioStream.SwitchToClipByName("dash");
|
||||||
_audioStream.SwitchToClipByName(streamName);
|
|
||||||
IsInvincible = true;
|
IsInvincible = true;
|
||||||
|
|
||||||
var plannedDashLocation = _targetLocation + Vector3.Down*_playerHeight/2;
|
var plannedDashLocation = _targetLocation + Vector3.Down*_playerHeight/2;
|
||||||
@@ -2518,8 +2523,7 @@ public partial class PlayerController : CharacterBody3D, IForgeEntity, ICueHandl
|
|||||||
{
|
{
|
||||||
if (_targetObject is IForgeEntity entity)
|
if (_targetObject is IForgeEntity entity)
|
||||||
{
|
{
|
||||||
_hitEnemies.Add(entity);
|
TriggerSimpleDashThroughDamage(entity);
|
||||||
TriggerDamage();
|
|
||||||
}
|
}
|
||||||
if (_targetObject is IStunnable stunnable)
|
if (_targetObject is IStunnable stunnable)
|
||||||
{
|
{
|
||||||
@@ -2529,6 +2533,13 @@ public partial class PlayerController : CharacterBody3D, IForgeEntity, ICueHandl
|
|||||||
_playerState.SendEvent("attack_finished");
|
_playerState.SendEvent("attack_finished");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void TriggerSimpleDashThroughDamage(IForgeEntity entity)
|
||||||
|
{
|
||||||
|
// Emulate normal hit
|
||||||
|
_hitEnemies.Add(entity);
|
||||||
|
TriggerDamage();
|
||||||
|
}
|
||||||
|
|
||||||
public void OnDashAttackEnded()
|
public void OnDashAttackEnded()
|
||||||
{
|
{
|
||||||
StopDashAction();
|
StopDashAction();
|
||||||
|
|||||||
Reference in New Issue
Block a user