using System; using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; using UnityEngine; using Object = System.Object; namespace nadena.dev.modular_avatar.core { [RequireComponent(typeof(ModularAvatarMenuItem))] [AddComponentMenu("Modular Avatar/MA Action Toggle Object")] public class ActionToggleObject : AvatarTagComponent, SwitchedMenuAction { [Serializable] public class ObjectEntry { public GameObject target; public bool Active; } public List Objects; protected override void OnValidate() { base.OnValidate(); if (Objects == null) { Objects = new List(); } } public ImmutableDictionary GetCurves() { return Objects.Select(obj => new KeyValuePair( new MenuCurveBinding(obj.target, typeof(GameObject), "m_IsActive"), AnimationCurve.Constant(0, 1, obj.Active ? 1 : 0)) ).ToImmutableDictionary(); } public ImmutableDictionary GetInactiveCurves(bool isDefault) { return Objects.Select(obj => { bool active; if (isDefault) { active = !obj.Active; // inactive state is the opposite of the default state } else { active = obj.target.activeSelf; // inactive state is the current state } return new KeyValuePair( new MenuCurveBinding(obj.target, typeof(GameObject), "m_IsActive"), AnimationCurve.Constant(0, 1, active ? 1 : 0)); } ).ToImmutableDictionary(); } public bool BindsParameter(TargetParameter parameter) { return parameter == TargetParameter.BaseParameter; } } }