Added action per round
This commit is contained in:
@@ -65,10 +65,10 @@ public partial class FightInstance : Node2D //TODO: remake
|
|||||||
ReleaseCamera();
|
ReleaseCamera();
|
||||||
break;
|
break;
|
||||||
case FightStateManager.FightState.Input:
|
case FightStateManager.FightState.Input:
|
||||||
if (CheckWin())
|
if (CheckWinAndSetState())
|
||||||
{
|
break;
|
||||||
|
if (CheckFriendlyActionsLeftAndSetState())
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
ShowAttackButtons();
|
ShowAttackButtons();
|
||||||
break;
|
break;
|
||||||
case FightStateManager.FightState.InputTargetSelect:
|
case FightStateManager.FightState.InputTargetSelect:
|
||||||
@@ -76,19 +76,19 @@ public partial class FightInstance : Node2D //TODO: remake
|
|||||||
break;
|
break;
|
||||||
case FightStateManager.FightState.FriendAttackAnim:
|
case FightStateManager.FightState.FriendAttackAnim:
|
||||||
ExecuteAttack();
|
ExecuteAttack();
|
||||||
GetTree().CreateTimer(1).Timeout += () => _fightStateManager.CurrentFightState = FightStateManager.FightState.Enemy;
|
GetTree().CreateTimer(1).Timeout += () => _fightStateManager.CurrentFightState = FightStateManager.FightState.Input;
|
||||||
break;
|
break;
|
||||||
case FightStateManager.FightState.Enemy:
|
case FightStateManager.FightState.Enemy:
|
||||||
if (CheckWin())
|
if (CheckWinAndSetState())
|
||||||
{
|
break;
|
||||||
|
if (CheckEnemyActionsLeftAndSetState())
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
DecideEnemyAttack();
|
DecideEnemyAttack();
|
||||||
_fightStateManager.CurrentFightState = FightStateManager.FightState.EnemyAttackAnim;
|
_fightStateManager.CurrentFightState = FightStateManager.FightState.EnemyAttackAnim;
|
||||||
break;
|
break;
|
||||||
case FightStateManager.FightState.EnemyAttackAnim:
|
case FightStateManager.FightState.EnemyAttackAnim:
|
||||||
ExecuteAttack();
|
ExecuteAttack();
|
||||||
GetTree().CreateTimer(1).Timeout += () => _fightStateManager.CurrentFightState = FightStateManager.FightState.Input;
|
GetTree().CreateTimer(1).Timeout += () => _fightStateManager.CurrentFightState = FightStateManager.FightState.Enemy;
|
||||||
break;
|
break;
|
||||||
case FightStateManager.FightState.PlayerWinAnim:
|
case FightStateManager.FightState.PlayerWinAnim:
|
||||||
_fightEndText.Text = "You Win!";
|
_fightEndText.Text = "You Win!";
|
||||||
@@ -98,9 +98,59 @@ public partial class FightInstance : Node2D //TODO: remake
|
|||||||
_fightEndText.Text = "You Died :(";
|
_fightEndText.Text = "You Died :(";
|
||||||
GetTree().CreateTimer(3).Timeout += () => _fightStateManager.CurrentFightState = FightStateManager.FightState.None;
|
GetTree().CreateTimer(3).Timeout += () => _fightStateManager.CurrentFightState = FightStateManager.FightState.None;
|
||||||
break;
|
break;
|
||||||
|
case FightStateManager.FightState.ChangeSideToEnemy:
|
||||||
|
ResetEnemyActions();
|
||||||
|
_fightStateManager.CurrentFightState = FightStateManager.FightState.Enemy;
|
||||||
|
break;
|
||||||
|
case FightStateManager.FightState.ChangeSideToFriendly:
|
||||||
|
ResetFriendlyActions();
|
||||||
|
_fightStateManager.CurrentFightState = FightStateManager.FightState.Input;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
private void ResetEnemyActions()
|
||||||
|
{
|
||||||
|
_enemyFighters.ForEach(f => f.ResetActions());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ResetFriendlyActions()
|
||||||
|
{
|
||||||
|
_friendlyFighters.ForEach(f => f.ResetActions());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <returns>
|
||||||
|
* <c>true</c> if the state was changed
|
||||||
|
* </returns>
|
||||||
|
*/
|
||||||
|
private bool CheckFriendlyActionsLeftAndSetState()
|
||||||
|
{
|
||||||
|
var hasActionsLeft = _friendlyFighters.Where(f => !f.IsDead()).Any(f => f.HasActionsLeft());
|
||||||
|
if (hasActionsLeft)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
} // else
|
||||||
|
_fightStateManager.CurrentFightState = FightStateManager.FightState.ChangeSideToEnemy;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <returns>
|
||||||
|
* <c>true</c> if the state was changed
|
||||||
|
* </returns>
|
||||||
|
*/
|
||||||
|
private bool CheckEnemyActionsLeftAndSetState()
|
||||||
|
{
|
||||||
|
var hasActionsLeft = _enemyFighters.Where(f => !f.IsDead()).Any(f => f.HasActionsLeft());
|
||||||
|
if (hasActionsLeft)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
} // else
|
||||||
|
_fightStateManager.CurrentFightState = FightStateManager.FightState.ChangeSideToFriendly;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
private void CleanUp()
|
private void CleanUp()
|
||||||
{
|
{
|
||||||
_enemyFighters.ForEach(f => f.QueueFree());
|
_enemyFighters.ForEach(f => f.QueueFree());
|
||||||
@@ -110,16 +160,23 @@ public partial class FightInstance : Node2D //TODO: remake
|
|||||||
}
|
}
|
||||||
private void DecideEnemyAttack()
|
private void DecideEnemyAttack()
|
||||||
{
|
{
|
||||||
var aliveEnemyFighters = _enemyFighters.Where(f => !f.IsDead()).ToList();
|
var availableEnemyFighters =
|
||||||
var aliveFriendlyFighters = _friendlyFighters.Where(f => !f.IsDead()).ToList();
|
_enemyFighters
|
||||||
|
.Where(f => !f.IsDead())
|
||||||
|
.Where(f=>f.HasActionsLeft())
|
||||||
|
.ToList();
|
||||||
|
var aliveFriendlyFighters =
|
||||||
|
_friendlyFighters
|
||||||
|
.Where(f => !f.IsDead())
|
||||||
|
.ToList();
|
||||||
|
|
||||||
if (aliveEnemyFighters.Count <= 0)
|
if (availableEnemyFighters.Count <= 0)
|
||||||
throw new InvalidOperationException("No enemy fighters available for attack.");
|
throw new InvalidOperationException("No enemy fighters available for attack.");
|
||||||
|
|
||||||
if (aliveFriendlyFighters.Count <= 0)
|
if (aliveFriendlyFighters.Count <= 0)
|
||||||
throw new InvalidOperationException("No friendly fighters available to target.");
|
throw new InvalidOperationException("No friendly fighters available to target.");
|
||||||
|
|
||||||
var fighter = aliveEnemyFighters.Random();
|
var fighter = availableEnemyFighters.Random();
|
||||||
var target = aliveFriendlyFighters.Random();
|
var target = aliveFriendlyFighters.Random();
|
||||||
|
|
||||||
_stagedAttack = new FightAttack
|
_stagedAttack = new FightAttack
|
||||||
@@ -143,7 +200,7 @@ public partial class FightInstance : Node2D //TODO: remake
|
|||||||
throw new InvalidOperationException("No target selected for the staged attack.");
|
throw new InvalidOperationException("No target selected for the staged attack.");
|
||||||
|
|
||||||
_stagedAttack.target!.Health -= _stagedAttack.damage;
|
_stagedAttack.target!.Health -= _stagedAttack.damage;
|
||||||
|
_stagedAttack.attacker.DecrementActions();
|
||||||
_stagedAttack.attacker.AttackAnimation(_stagedAttack);
|
_stagedAttack.attacker.AttackAnimation(_stagedAttack);
|
||||||
|
|
||||||
UpdateHealthVisual();
|
UpdateHealthVisual();
|
||||||
@@ -243,7 +300,7 @@ public partial class FightInstance : Node2D //TODO: remake
|
|||||||
|
|
||||||
private void ShowTargetButtons()
|
private void ShowTargetButtons()
|
||||||
{
|
{
|
||||||
_enemyFighters.Where(f=>!f.IsDead()).ForEach(f => f.ShowTargetButtons());
|
_enemyFighters.Where(f => !f.IsDead()).ForEach(f => f.ShowTargetButtons());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SelectTargetAndAttack(Fighter fighter)
|
public void SelectTargetAndAttack(Fighter fighter)
|
||||||
@@ -256,7 +313,7 @@ public partial class FightInstance : Node2D //TODO: remake
|
|||||||
_fightStateManager.CurrentFightState = FightStateManager.FightState.FriendAttackAnim;
|
_fightStateManager.CurrentFightState = FightStateManager.FightState.FriendAttackAnim;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CheckWin()
|
public bool CheckWinAndSetState()
|
||||||
{
|
{
|
||||||
if (_enemyFighters.All(f => f.IsDead()))
|
if (_enemyFighters.All(f => f.IsDead()))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,7 +19,9 @@ public partial class FightStateManager : Node
|
|||||||
Enemy,
|
Enemy,
|
||||||
EnemyAttackAnim,
|
EnemyAttackAnim,
|
||||||
PlayerWinAnim,
|
PlayerWinAnim,
|
||||||
EnemyWinAnim
|
EnemyWinAnim,
|
||||||
|
ChangeSideToEnemy,
|
||||||
|
ChangeSideToFriendly,
|
||||||
}
|
}
|
||||||
|
|
||||||
private FightState _fightStateBacking = FightState.None;
|
private FightState _fightStateBacking = FightState.None;
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ public partial class Fighter : Node2D
|
|||||||
[Export] public string name;
|
[Export] public string name;
|
||||||
[Export] public int maxHealth;
|
[Export] public int maxHealth;
|
||||||
[Export] public int attackStrength;
|
[Export] public int attackStrength;
|
||||||
|
[Export] public int maxActions = 1;
|
||||||
|
|
||||||
[ExportCategory("References")]
|
[ExportCategory("References")]
|
||||||
[Export] private Node2D _attackButtons;
|
[Export] private Node2D _attackButtons;
|
||||||
@@ -20,6 +21,7 @@ public partial class Fighter : Node2D
|
|||||||
|
|
||||||
|
|
||||||
private int _health;
|
private int _health;
|
||||||
|
private int _actions;
|
||||||
|
|
||||||
|
|
||||||
public FightInstance fightInstance;
|
public FightInstance fightInstance;
|
||||||
@@ -47,6 +49,7 @@ public partial class Fighter : Node2D
|
|||||||
{
|
{
|
||||||
Health = maxHealth;
|
Health = maxHealth;
|
||||||
UpdateHealthVisual();
|
UpdateHealthVisual();
|
||||||
|
ResetActions();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Attack()
|
public void Attack()
|
||||||
@@ -127,7 +130,7 @@ public partial class Fighter : Node2D
|
|||||||
EmitSignalDamageTaken();
|
EmitSignalDamageTaken();
|
||||||
var tween = GetTree().CreateTween();
|
var tween = GetTree().CreateTween();
|
||||||
tween.TweenProperty(this, "scale", new Vector2(1.4f, 0.6f), 0.15);
|
tween.TweenProperty(this, "scale", new Vector2(1.4f, 0.6f), 0.15);
|
||||||
tween.TweenProperty(this, "scale", new Vector2(1,1), 0.4)
|
tween.TweenProperty(this, "scale", new Vector2(1, 1), 0.4)
|
||||||
.SetTrans(Tween.TransitionType.Cubic).SetEase(Tween.EaseType.Out);
|
.SetTrans(Tween.TransitionType.Cubic).SetEase(Tween.EaseType.Out);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,4 +138,18 @@ public partial class Fighter : Node2D
|
|||||||
{
|
{
|
||||||
return Health <= 0;
|
return Health <= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ResetActions()
|
||||||
|
{
|
||||||
|
_actions = maxActions;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool HasActionsLeft()
|
||||||
|
{
|
||||||
|
return _actions > 0;
|
||||||
|
}
|
||||||
|
public void DecrementActions()
|
||||||
|
{
|
||||||
|
_actions--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user