using System.Collections.Generic; using ClusterVR.CreatorKit.Gimmick; using UnityEngine; namespace ClusterVR.CreatorKit.Operation.Implements { public abstract class LogicAttribute : PropertyAttribute { public abstract List TargetStateTargetSelectables { get; } public abstract List SourceStateTargetSelectables { get; } public virtual string FormatTargetStateTarget(TargetStateTarget target) { return target.ToString(); } public virtual string FormatSourceTarget(GimmickTarget target) { return target.ToString(); } } public sealed class ItemLogicAttribute : LogicAttribute { public override List TargetStateTargetSelectables => new List { TargetStateTarget.Item, TargetStateTarget.Player }; public override List SourceStateTargetSelectables => new List { GimmickTarget.Item, GimmickTarget.Player, GimmickTarget.Global }; public override string FormatTargetStateTarget(TargetStateTarget target) { switch (target) { case TargetStateTarget.Item: return "This"; case TargetStateTarget.Player: return "Owner"; default: return target.ToString(); } } public override string FormatSourceTarget(GimmickTarget target) { switch (target) { case GimmickTarget.Item: return "This"; case GimmickTarget.Player: return "Owner"; default: return target.ToString(); } } } public sealed class PlayerLogicAttribute : LogicAttribute { public override List TargetStateTargetSelectables => new List { TargetStateTarget.Player }; public override List SourceStateTargetSelectables => new List { GimmickTarget.Player, GimmickTarget.Global }; } public sealed class GlobalLogicAttribute : LogicAttribute { public override List TargetStateTargetSelectables => new List { TargetStateTarget.Global }; public override List SourceStateTargetSelectables => new List { GimmickTarget.Global }; } }