Ejemplo n.º 1
0
        public void ReplayTriggers()
        {
            Debug.Log("Replaying Triggers!");

            foreach (var eventInfo in eventList_)
            {
                CyanEmuTriggerExecutor.ExecuteEvent(eventInfo, null);
            }
        }
Ejemplo n.º 2
0
        public void ExecuteTrigger(VRC_Trigger.TriggerEvent trigger)
        {
            if (!gameObject.activeInHierarchy || !Trigger.enabled)
            {
                return;
            }

            CyanEmuTriggerExecutor.ExecuteTrigger(trigger);
        }
Ejemplo n.º 3
0
        public void ExecuteTrigger(VRC_Trigger.TriggerEvent trigger)
        {
            if (
                (!gameObject.activeInHierarchy || !Trigger.enabled) &&
                trigger.TriggerType != VRC.SDKBase.VRC_Trigger.TriggerType.OnDisable
                )
            {
                return;
            }

            CyanEmuTriggerExecutor.ExecuteTrigger(trigger);
        }
Ejemplo n.º 4
0
        private void RemoveListeners()
        {
            if (!hasAddedListeners)
            {
                return;
            }
            hasAddedListeners = false;

            if (onKeyTriggers.Count > 0)
            {
                CyanEmuTriggerExecutor.RemoveKeyTrigger(this);
            }

            if (timerTriggers.Count > 0)
            {
                CyanEmuTriggerExecutor.RemoveTimerTrigger(this);
            }
        }
Ejemplo n.º 5
0
        private void AddListeners()
        {
            if (hasAddedListeners)
            {
                return;
            }
            hasAddedListeners = true;

            if (onKeyTriggers.Count > 0)
            {
                CyanEmuTriggerExecutor.AddKeyTrigger(this);
            }

            if (timerTriggers.Count > 0)
            {
                CyanEmuTriggerExecutor.AddTimerTrigger(this);
            }
        }
        private void Awake()
        {
            if (instance_ != null)
            {
                this.LogError("Already have an instance of Trigger executor!");
                DestroyImmediate(this);
                return;
            }

            instance_ = this;

            settings_ = CyanEmuSettings.Instance;

            bufferManager_ = new CyanEmuBufferManager();

            if (settings_.replayBufferedTriggers)
            {
                CyanEmuBufferManager.LoadBufferedTriggersFromFile();
            }
        }
Ejemplo n.º 7
0
        private void Awake()
        {
            if (instance_ != null)
            {
                this.LogError("Already have an instance of Trigger executor!");
                DestroyImmediate(this);
                return;
            }

            instance_ = this;

            settings_   = CyanEmuSettings.Instance;
            descriptor_ = FindObjectOfType <VRC_SceneDescriptor>();

            bufferManager_ = new CyanEmuBufferManager();

            if (settings_.replayBufferedTriggers)
            {
                CyanEmuBufferManager.LoadBufferedTriggersFromFile();
            }

            SetupCombat();
        }
Ejemplo n.º 8
0
        public static string GetTriggerEventAsString(this VRC_Trigger.TriggerEvent trigEvent)
        {
            string path       = "null";
            int    eventIndex = -1;

            VRC_Trigger trig = CyanEmuTriggerExecutor.GetTriggerForEvent(trigEvent);

            if (trig != null)
            {
                eventIndex = trig.GetTriggerEventIndex(trigEvent);
                path       = CyanEmuUtils.PathForObject(trig.gameObject);
            }

            return(string.Format(
                       "Trigger Event[{0}] \"{1}\" type: {2}, broadcast: {3}, delay: {4}, path: {5}",
                       eventIndex,
                       trigEvent.Name,
                       trigEvent.TriggerType,
                       trigEvent.BroadcastType,
                       trigEvent.AfterSeconds,
                       path
                       ));
        }
Ejemplo n.º 9
0
        private void SetTrigger(VRC_Trigger trigger)
        {
            if (trigger == null)
            {
                this.LogError("Trigger is null. Destroying helper.");
                DestroyImmediate(this);
                return;
            }

            Trigger = trigger;

            CyanEmuTriggerExecutor.AddTrigger(Trigger);

            hasObjectSync = GetComponent <VRC_ObjectSync>();

            VRC_CombatSystem combatSystem = FindObjectOfType <VRC_CombatSystem>();

            // Go through and make sure all null targets reference itself.
            for (int trig = 0; trig < Trigger.Triggers.Count; ++trig)
            {
                VRC_Trigger.TriggerEvent trigEvent = Trigger.Triggers[trig];
                for (int trigEventInd = 0; trigEventInd < trigEvent.Events.Count; ++trigEventInd)
                {
                    VRC_EventHandler.VrcEvent vrcEvent = trigEvent.Events[trigEventInd];
                    GameObject obj      = gameObject;
                    bool       isCombat = false;
                    if (
                        (vrcEvent.EventType == VRC_EventHandler.VrcEventType.AddDamage ||
                         vrcEvent.EventType == VRC_EventHandler.VrcEventType.AddHealth) &&
                        combatSystem != null
                        )
                    {
                        obj      = combatSystem.gameObject;
                        isCombat = true;
                    }

                    if (vrcEvent.ParameterObjects == null || vrcEvent.ParameterObjects.Length == 0)
                    {
                        if (vrcEvent.ParameterObject != null)
                        {
                            obj = vrcEvent.ParameterObject;
                        }
                        vrcEvent.ParameterObjects = new GameObject[] { obj };
                        this.LogWarning("VRC_Trigger[" + trig + "][" + trigEventInd + "] has no objects. Setting it to target itself. " + VRC.Tools.GetGameObjectPath(obj));
                    }
                    else
                    {
                        bool found = false;
                        for (int i = 0; i < vrcEvent.ParameterObjects.Length; ++i)
                        {
                            if (vrcEvent.ParameterObjects[i] == null)
                            {
                                vrcEvent.ParameterObjects[i] = obj;
                                found = true;
                            }
                        }

                        if (found && !isCombat)
                        {
                            this.LogWarning("VRC_Trigger[" + trig + "][" + trigEventInd + "] has null targets. Setting targets to itself. " + VRC.Tools.GetGameObjectPath(obj));
                        }
                    }
                }
            }



            for (int i = 0; i < Trigger.Triggers.Count; ++i)
            {
                if (Trigger.Triggers[i].TriggerType == VRC_Trigger.TriggerType.OnEnterTrigger)
                {
                    enterTriggers.Add(Trigger.Triggers[i]);
                    CheckForPlayerLayerOverSync(Trigger.Triggers[i]);
                }
                else if (Trigger.Triggers[i].TriggerType == VRC_Trigger.TriggerType.OnExitTrigger)
                {
                    exitTriggers.Add(Trigger.Triggers[i]);
                    CheckForPlayerLayerOverSync(Trigger.Triggers[i]);
                }
                else if (Trigger.Triggers[i].TriggerType == VRC_Trigger.TriggerType.OnEnterCollider)
                {
                    enterCollider.Add(Trigger.Triggers[i]);
                    CheckForPlayerLayerOverSync(Trigger.Triggers[i]);
                }
                else if (Trigger.Triggers[i].TriggerType == VRC_Trigger.TriggerType.OnExitCollider)
                {
                    exitCollider.Add(Trigger.Triggers[i]);
                    CheckForPlayerLayerOverSync(Trigger.Triggers[i]);
                }
                else if (Trigger.Triggers[i].TriggerType == VRC_Trigger.TriggerType.OnTimer)
                {
                    Trigger.ResetClock(Trigger.Triggers[i]);
                    timerTriggers.Add(Trigger.Triggers[i]);

                    if (Trigger.Triggers[i].BroadcastType.IsAlwaysBufferedBroadcastType())
                    {
                        HasGlobalOnEnable = true;
                    }
                }
                else if (Trigger.Triggers[i].TriggerType == VRC_Trigger.TriggerType.OnInteract)
                {
                    interactTriggers.Add(Trigger.Triggers[i]);
                }
                else if (Trigger.Triggers[i].TriggerType == VRC_Trigger.TriggerType.OnKeyDown || Trigger.Triggers[i].TriggerType == VRC_Trigger.TriggerType.OnKeyUp)
                {
                    onKeyTriggers.Add(Trigger.Triggers[i]);
                }
                else if (Trigger.Triggers[i].TriggerType == VRC_Trigger.TriggerType.OnParticleCollision)
                {
                    particleCollider.Add(Trigger.Triggers[i]);
                }
                else if (Trigger.Triggers[i].TriggerType == VRC_Trigger.TriggerType.OnPlayerJoined)
                {
                    if (Trigger.Triggers[i].BroadcastType.IsAlwaysBufferedBroadcastType())
                    {
                        this.LogWarning("Oversync on player joined! " + Trigger.Triggers[i].GetTriggerEventAsString());
                    }
                }
                else if (Trigger.Triggers[i].TriggerType == VRC_Trigger.TriggerType.OnPlayerLeft)
                {
                    if (Trigger.Triggers[i].BroadcastType.IsAlwaysBufferedBroadcastType())
                    {
                        this.LogWarning("Oversync on player left! " + Trigger.Triggers[i].GetTriggerEventAsString());
                    }
                }
                else if (Trigger.Triggers[i].TriggerType == VRC_Trigger.TriggerType.OnEnable)
                {
                    if (Trigger.Triggers[i].BroadcastType.IsAlwaysBufferedBroadcastType())
                    {
                        HasGlobalOnEnable = true;
                    }
                }
                else if (Trigger.Triggers[i].TriggerType == VRC_Trigger.TriggerType.OnDisable)
                {
                    if (Trigger.Triggers[i].BroadcastType.IsAlwaysBufferedBroadcastType())
                    {
                        HasGlobalOnDisable = true;
                    }
                }
            }

            if (enterTriggers.Count + exitTriggers.Count + enterCollider.Count + exitCollider.Count + timerTriggers.Count + onKeyTriggers.Count + particleCollider.Count == 0)
            {
                enabled = false;
            }

            AddListeners();
        }
Ejemplo n.º 10
0
 private void OnDestroy()
 {
     CyanEmuTriggerExecutor.RemoveTrigger(Trigger);
 }