summaryrefslogtreecommitdiff
path: root/ROUNDS/Photon.Pun.Simple/OnStateChangeToggle.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ROUNDS/Photon.Pun.Simple/OnStateChangeToggle.cs')
-rw-r--r--ROUNDS/Photon.Pun.Simple/OnStateChangeToggle.cs94
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;
+ }
+ }
+}