public void ReplayTriggers() { Debug.Log("Replaying Triggers!"); foreach (var eventInfo in eventList_) { CyanEmuTriggerExecutor.ExecuteEvent(eventInfo, null); } }
public void ExecuteTrigger(VRC_Trigger.TriggerEvent trigger) { if (!gameObject.activeInHierarchy || !Trigger.enabled) { return; } CyanEmuTriggerExecutor.ExecuteTrigger(trigger); }
public void ExecuteTrigger(VRC_Trigger.TriggerEvent trigger) { if ( (!gameObject.activeInHierarchy || !Trigger.enabled) && trigger.TriggerType != VRC.SDKBase.VRC_Trigger.TriggerType.OnDisable ) { return; } CyanEmuTriggerExecutor.ExecuteTrigger(trigger); }
private void RemoveListeners() { if (!hasAddedListeners) { return; } hasAddedListeners = false; if (onKeyTriggers.Count > 0) { CyanEmuTriggerExecutor.RemoveKeyTrigger(this); } if (timerTriggers.Count > 0) { CyanEmuTriggerExecutor.RemoveTimerTrigger(this); } }
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(); } }
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(); }
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 )); }
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(); }
private void OnDestroy() { CyanEmuTriggerExecutor.RemoveTrigger(Trigger); }