diff options
Diffstat (limited to 'ROUNDS/Photon.Pun.Simple/OnStateChangeToggle.cs')
-rw-r--r-- | ROUNDS/Photon.Pun.Simple/OnStateChangeToggle.cs | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/ROUNDS/Photon.Pun.Simple/OnStateChangeToggle.cs b/ROUNDS/Photon.Pun.Simple/OnStateChangeToggle.cs new file mode 100644 index 0000000..cf26399 --- /dev/null +++ b/ROUNDS/Photon.Pun.Simple/OnStateChangeToggle.cs @@ -0,0 +1,94 @@ +using UnityEngine; + +namespace Photon.Pun.Simple; + +public class OnStateChangeToggle : NetComponent, IOnStateChange +{ + [HideInInspector] + [Tooltip("How this object should be toggled. GameObject toggles gameObject.SetActive(), Renderer toggles renderer.enabled, and Component toggles component.enabled.")] + public DisplayToggle toggle; + + [Tooltip("User specified component to toggle enabled.")] + [HideInInspector] + public Component component; + + [HideInInspector] + public GameObject _gameObject; + + [HideInInspector] + public Renderer _renderer; + + [HideInInspector] + public ObjStateLogic stateLogic = new ObjStateLogic(); + + private bool reactToAttached; + + private MonoBehaviour monob; + + private bool show; + + public override void OnAwake() + { + base.OnAwake(); + if (toggle == DisplayToggle.Renderer) + { + if (_renderer == null) + { + _renderer = GetComponent<Renderer>(); + } + } + else if (toggle == DisplayToggle.Component) + { + monob = component as MonoBehaviour; + } + else if (_gameObject == null) + { + _gameObject = base.gameObject; + } + stateLogic.RecalculateMasks(); + reactToAttached = (stateLogic.notMask & 2) == 0 && (stateLogic.stateMask & 2) != 0; + } + + public void OnStateChange(ObjState newState, ObjState previousState, Transform pickup, Mount attachedTo = null, bool isReady = true) + { + if (!isReady) + { + show = false; + } + else if (stateLogic.Evaluate((int)newState)) + { + show = true; + if (reactToAttached && attachedTo == null && (newState & ObjState.Mounted) != 0) + { + show = false; + } + } + else + { + show = false; + } + DeferredEnable(); + } + + private void DeferredEnable() + { + switch (toggle) + { + case DisplayToggle.GameObject: + _gameObject.SetActive(show); + break; + case DisplayToggle.Component: + if ((bool)monob) + { + monob.enabled = show; + } + break; + case DisplayToggle.Renderer: + if ((bool)_renderer) + { + _renderer.enabled = show; + } + break; + } + } +} |