Initial set up for item use

This commit is contained in:
2025-01-10 11:11:50 +01:00
parent 85ea31f7cd
commit 0518499a4c
23 changed files with 305 additions and 59 deletions

View File

@@ -25,10 +25,10 @@ internal static class MoveTurnExecutor
var secondaryEffect = moveData.SecondaryEffect;
if (secondaryEffect != null)
{
if (moveChoice.User.Library.ScriptResolver.TryResolve(ScriptCategory.Move, secondaryEffect.Name, out var script))
if (moveChoice.User.Library.ScriptResolver.TryResolve(ScriptCategory.Move, secondaryEffect.Name,
secondaryEffect.Parameters, out var script))
{
moveChoice.Script.Set(script);
script.OnInitialize(moveChoice.User.Library, secondaryEffect.Parameters);
}
}

View File

@@ -90,7 +90,9 @@ public static class TurnRunner
case IFleeChoice fleeChoice:
ExecuteFleeChoice(battle, fleeChoice);
break;
// TODO: Implement item choice types
case IItemChoice itemChoice:
ExecuteItemChoice(battle, itemChoice);
break;
}
}
@@ -155,4 +157,36 @@ public static class TurnRunner
battle.ValidateBattleState();
}
private static void ExecuteItemChoice(IBattle battle, IItemChoice itemChoice)
{
var user = itemChoice.User;
var battleData = user.BattleData;
if (battleData == null)
return;
if (!battle.Library.ScriptResolver.TryResolveBattleItemScript(itemChoice.Item, out var itemScript))
{
return;
}
if (!itemScript.IsItemUsable)
return;
itemScript.OnInitialize(itemChoice.Item.BattleEffect!.Parameters);
IPokemon? target = null;
if (itemChoice is { TargetSide: not null, TargetPosition: not null })
{
var side = battle.Sides[itemChoice.TargetSide.Value];
target = side.Pokemon[itemChoice.TargetPosition.Value];
}
var requiresTarget = itemScript.RequiresTarget;
if (requiresTarget)
{
target ??= user;
itemScript.OnUseWithTarget(target);
}
else
{
itemScript.OnUse();
}
}
}