// Copyright (c) CypherCore All rights reserved. // Licensed under the GNU GENERAL PUBLIC LICENSE. See LICENSE file in the project root for full license information. using System; using System.Collections.Generic; using System.Linq; namespace Game.Scripting.v2 { public class ActionBase { bool _isReady; public virtual bool IsReady() { return _isReady; } public void MarkCompleted() { _isReady = true; } } public class WaitAction : ActionBase { DateTime _waitEnd; public WaitAction(DateTime waitEnd) { _waitEnd = waitEnd; } public override bool IsReady() { return _waitEnd <= GameTime.Now(); } } public class ActionResult : ActionBase { T _result; public static ActionResultSetter GetResultSetter(ActionResult action) { T resultPtr = action._result; return new ActionResultSetter(action, resultPtr); } } public class ActionResult : ActionBase { public static ActionResultSetter GetResultSetter(ActionResult action) { return new ActionResultSetter(action); } } public class MultiActionResult : ActionResult { public List> Results = new(); public ActionResult CreateAndGetResult() { ActionResult result = new(); Results.Add(result); return result; } public override bool IsReady() { return Results.All(result => result.IsReady()); } } }