using UnityEngine; namespace Code.OfficeGame.BattleMode.Actions { public abstract class BattleActionDecisionResult { public BattleActionType ActionType; public BattleActionDecisionResultCode ResultCode; public abstract BattleActionDecisionResult GetSnapshot(); public abstract void RestoreSnapshot(BattleActionDecisionResult snapshot); } public class PositionBattleActionDeciderResult : BattleActionDecisionResult { public Vector3 Position; public Quaternion Rotation; public override BattleActionDecisionResult GetSnapshot() { var snapshot = new PositionBattleActionDeciderResult { Position = Position, Rotation = Rotation, ActionType = ActionType, ResultCode = ResultCode }; return snapshot; } public override void RestoreSnapshot(BattleActionDecisionResult snapshot) { if (snapshot is not PositionBattleActionDeciderResult) return; var deciderResult = (PositionBattleActionDeciderResult)snapshot; Position = deciderResult.Position; Rotation = deciderResult.Rotation; ActionType = deciderResult.ActionType; ResultCode = deciderResult.ResultCode; } } public class RotationBattleActionDeciderResult : BattleActionDecisionResult { public Quaternion Rotation; public override BattleActionDecisionResult GetSnapshot() { return new RotationBattleActionDeciderResult { Rotation = Rotation, ActionType = ActionType, ResultCode = ResultCode }; } public override void RestoreSnapshot(BattleActionDecisionResult snapshot) { if (snapshot is not RotationBattleActionDeciderResult deciderResult) return; Rotation = deciderResult.Rotation; ActionType = deciderResult.ActionType; ResultCode = deciderResult.ResultCode; } } public class FrameBattleActionDeciderResult : BattleActionDecisionResult { public int FrameCount; public override BattleActionDecisionResult GetSnapshot() { var snapshot = new FrameBattleActionDeciderResult { FrameCount = FrameCount, ActionType = ActionType, ResultCode = ResultCode }; return snapshot; } public override void RestoreSnapshot(BattleActionDecisionResult snapshot) { if (snapshot is not FrameBattleActionDeciderResult) return; var deciderResult = (FrameBattleActionDeciderResult)snapshot; FrameCount = deciderResult.FrameCount; ActionType = deciderResult.ActionType; ResultCode = deciderResult.ResultCode; } } public class AsIsBattleActionDeciderResult : BattleActionDecisionResult { public override BattleActionDecisionResult GetSnapshot() { var snapshot = new AsIsBattleActionDeciderResult(); snapshot.ActionType = ActionType; snapshot.ResultCode = ResultCode; return snapshot; } public override void RestoreSnapshot(BattleActionDecisionResult snapshot) { ActionType = snapshot.ActionType; ResultCode = snapshot.ResultCode; } } }