using System; using Microsoft.Extensions.Logging; using Questionable.Functions; using Questionable.Model.Questing; namespace Questionable.Controller.Steps.Shared; internal static class SkipMissingObject { internal sealed record Task(uint DataId, ElementId ElementId, int Sequence) : ITask { public override string ToString() { return $"SkipMissingObject({DataId})"; } } internal sealed class Executor(GameFunctions gameFunctions, QuestController questController, ILogger logger) : TaskExecutor() { private long _skipAt; protected override bool Start() { _skipAt = Environment.TickCount64 + 500; return true; } public override ETaskResult Update() { if (gameFunctions.FindObjectByDataId(base.Task.DataId, null, warnIfMissing: false) != null) { return ETaskResult.TaskComplete; } if (Environment.TickCount64 < _skipAt) { return ETaskResult.StillRunning; } logger.LogInformation("Skipping simulated actions because GameObject {DataId} is not present", base.Task.DataId); questController.IncreaseStepCount(base.Task.ElementId, base.Task.Sequence, shouldContinue: true); return ETaskResult.SkipRemainingTasksForStep; } public override bool ShouldInterruptOnDamage() { return false; } } }