Add EnemySpawnType - AfterAction

This commit is contained in:
Liza 2024-09-01 14:21:26 +02:00
parent 86f764aca3
commit d7aa4243d7
Signed by: liza
GPG Key ID: 7199F8D727D55F67
5 changed files with 24 additions and 2 deletions

View File

@ -584,6 +584,7 @@
"AutoOnEnterArea", "AutoOnEnterArea",
"AfterInteraction", "AfterInteraction",
"AfterItemUse", "AfterItemUse",
"AfterAction",
"OverworldEnemies" "OverworldEnemies"
] ]
}, },

View File

@ -9,6 +9,7 @@ public sealed class EnemySpawnTypeConverter() : EnumConverter<EEnemySpawnType>(V
{ {
{ EEnemySpawnType.AfterInteraction, "AfterInteraction" }, { EEnemySpawnType.AfterInteraction, "AfterInteraction" },
{ EEnemySpawnType.AfterItemUse, "AfterItemUse" }, { EEnemySpawnType.AfterItemUse, "AfterItemUse" },
{ EEnemySpawnType.AfterAction, "AfterAction" },
{ EEnemySpawnType.AutoOnEnterArea, "AutoOnEnterArea" }, { EEnemySpawnType.AutoOnEnterArea, "AutoOnEnterArea" },
{ EEnemySpawnType.OverworldEnemies, "OverworldEnemies" }, { EEnemySpawnType.OverworldEnemies, "OverworldEnemies" },
}; };

View File

@ -9,6 +9,7 @@ public enum EEnemySpawnType
None = 0, None = 0,
AfterInteraction, AfterInteraction,
AfterItemUse, AfterItemUse,
AfterAction,
AutoOnEnterArea, AutoOnEnterArea,
OverworldEnemies, OverworldEnemies,
} }

View File

@ -24,13 +24,18 @@ internal static class Action
ArgumentNullException.ThrowIfNull(step.Action); ArgumentNullException.ThrowIfNull(step.Action);
var task = new UseOnObject(step.DataId, step.Action.Value, gameFunctions, var task = OnObject(step.DataId, step.Action.Value);
loggerFactory.CreateLogger<UseOnObject>());
if (step.Action.Value.RequiresMount()) if (step.Action.Value.RequiresMount())
return [task]; return [task];
else else
return [mountFactory.Unmount(), task]; return [mountFactory.Unmount(), task];
} }
public ITask OnObject(uint? dataId, EAction action)
{
return new UseOnObject(dataId, action, gameFunctions,
loggerFactory.CreateLogger<UseOnObject>());
}
} }
private sealed class UseOnObject( private sealed class UseOnObject(

View File

@ -18,6 +18,7 @@ internal static class Combat
Interact.Factory interactFactory, Interact.Factory interactFactory,
Mount.Factory mountFactory, Mount.Factory mountFactory,
UseItem.Factory useItemFactory, UseItem.Factory useItemFactory,
Action.Factory actionFactory,
QuestFunctions questFunctions) : ITaskFactory QuestFunctions questFunctions) : ITaskFactory
{ {
public IEnumerable<ITask> CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step) public IEnumerable<ITask> CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step)
@ -58,6 +59,19 @@ internal static class Combat
break; break;
} }
case EEnemySpawnType.AfterAction:
{
ArgumentNullException.ThrowIfNull(step.DataId);
ArgumentNullException.ThrowIfNull(step.Action);
if (!step.Action.Value.RequiresMount())
yield return mountFactory.Unmount();
yield return actionFactory.OnObject(step.DataId.Value, step.Action.Value);
yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(1));
yield return CreateTask(quest, sequence, step);
break;
} ;
case EEnemySpawnType.AutoOnEnterArea: case EEnemySpawnType.AutoOnEnterArea:
if (step.CombatDelaySecondsAtStart == null) if (step.CombatDelaySecondsAtStart == null)
yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(1)); yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(1));