コード例 #1
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
                       ));
        }
コード例 #2
0
    GameObject initRemoteButton(string name, GameObject remote)
    {
        GameObject button = new GameObject(name);

        button.transform.parent        = remote.transform;
        button.transform.localPosition = new Vector3(0, 0, 0);
        button.transform.localRotation = new Quaternion(0, 0, 0, 0);
        button.transform.localScale    = new Vector3(1, 1, 1);
        BoxCollider collider = button.AddComponent <BoxCollider> ();

        collider.isTrigger = true;
        collider.size      = new Vector3(0.01f, 0.05f, 0.02f);

        button.AddComponent <VRC_EventHandler> ();
        VRC_Trigger trigger = button.AddComponent <VRC_Trigger> ();

        VRC_Trigger.TriggerEvent onInteract = new VRC_Trigger.TriggerEvent();
        onInteract.TriggerType   = VRC_Trigger.TriggerType.OnInteract;
        onInteract.BroadcastType = VRC_EventHandler.VrcBroadcastType.AlwaysBufferOne;

        trigger.Triggers.Add(onInteract);

        return(button);
    }
コード例 #3
0
        private static void ExecuteEventForObject(VRC_EventHandler.VrcEvent triggerEvent, GameObject obj, VRC_EventHandler.EventInfo eventInfo, VRC_Trigger.TriggerEvent originalTrigger)
        {
            instance_.Log("Executing Trigger Event: " + triggerEvent.GetEventAsString(obj) + "\n_On Trigger: " + originalTrigger?.GetTriggerEventAsString());

            bool isBufferedExecution = eventInfo.broadcast.IsBufferedBroadcastType() && eventInfo.instagator == null;

            if (eventInfo.broadcast.IsOwnerBroadcastType())
            {
                if (!Networking.IsOwner(obj) || isBufferedExecution)
                {
                    instance_.LogWarning("Not executing as user is not the owner");
                    return;
                }
            }

            if (!isBufferedExecution && eventInfo.broadcast.IsMasterBroadcastType())
            {
                if (!Networking.IsMaster || isBufferedExecution)
                {
                    instance_.LogWarning("Not executing as user is not the master");
                    return;
                }
            }

            if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.ActivateCustomTrigger)
            {
                // Only activates first one
                VRC_Trigger trigger = obj.GetComponent <VRC_Trigger>();
                if (obj.activeInHierarchy && trigger.enabled)
                {
                    trigger.ExecuteCustomTrigger(triggerEvent.ParameterString);
                }
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AnimationBool)
            {
                Animator animator = obj.GetComponent <Animator>();
                bool     value    = animator.GetBool(triggerEvent.ParameterString);
                bool     newValue = VRC_EventHandler.BooleanOp(triggerEvent.ParameterBoolOp, value);
                animator.SetBool(triggerEvent.ParameterString, newValue);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AnimationInt)
            {
                Animator animator = obj.GetComponent <Animator>();
                animator.SetInteger(triggerEvent.ParameterString, triggerEvent.ParameterInt);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AnimationFloat)
            {
                Animator animator = obj.GetComponent <Animator>();
                animator.SetFloat(triggerEvent.ParameterString, triggerEvent.ParameterFloat);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AnimationIntAdd)
            {
                Animator animator = obj.GetComponent <Animator>();
                int      value    = animator.GetInteger(triggerEvent.ParameterString);
                animator.SetInteger(triggerEvent.ParameterString, value + triggerEvent.ParameterInt);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AnimationIntDivide)
            {
                Animator animator = obj.GetComponent <Animator>();
                int      value    = animator.GetInteger(triggerEvent.ParameterString);
                animator.SetInteger(triggerEvent.ParameterString, value / triggerEvent.ParameterInt);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AnimationIntMultiply)
            {
                Animator animator = obj.GetComponent <Animator>();
                int      value    = animator.GetInteger(triggerEvent.ParameterString);
                animator.SetInteger(triggerEvent.ParameterString, value * triggerEvent.ParameterInt);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AnimationIntSubtract)
            {
                Animator animator = obj.GetComponent <Animator>();
                int      value    = animator.GetInteger(triggerEvent.ParameterString);
                animator.SetInteger(triggerEvent.ParameterString, value - triggerEvent.ParameterInt);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AnimationTrigger)
            {
                obj.GetComponent <Animator>().SetTrigger(triggerEvent.ParameterString);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.PlayAnimation)
            {
                obj.GetComponent <Animation>().Play(triggerEvent.ParameterString);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AudioTrigger)
            {
                AudioSource[] audioSources = obj.GetComponents <AudioSource>();
                foreach (var source in audioSources)
                {
                    if (source.clip.name == triggerEvent.ParameterString)
                    {
                        source.Play();
                    }
                }
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.DestroyObject)
            {
                Destroy(obj);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SendRPC)
            {
                object[] parameters     = VRC_Serialization.ParameterDecoder(triggerEvent.ParameterBytes);
                Type[]   parameterTypes = new Type[parameters.Length];
                for (int paramIndex = 0; paramIndex < parameters.Length; ++paramIndex)
                {
                    parameterTypes[paramIndex] = parameters[paramIndex].GetType();
                }

                foreach (MonoBehaviour mono in obj.GetComponents <MonoBehaviour>())
                {
                    MethodInfo methodInfo = mono.GetType().GetMethod(triggerEvent.ParameterString, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance, Type.DefaultBinder, parameterTypes, null);

                    if (methodInfo != null)
                    {
                        methodInfo.Invoke(mono, parameters);
                    }
                }
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SetComponentActive)
            {
                Type type = instance_.GetTypeForComponent(triggerEvent.ParameterString);
                if (type != null)
                {
                    PropertyInfo property = type.GetProperty("enabled");
                    if (property != null)
                    {
                        foreach (Component component in obj.GetComponents(type))
                        {
                            bool value    = (bool)property.GetValue(component, null);
                            bool newValue = VRC_EventHandler.BooleanOp(triggerEvent.ParameterBoolOp, value);
                            property.SetValue(component, newValue, null);
                        }
                    }
                }
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SetGameObjectActive)
            {
                bool newValue = VRC_EventHandler.BooleanOp(triggerEvent.ParameterBoolOp, obj.activeSelf);
                obj.SetActive(newValue);

                CyanEmuTriggerHelper triggerHelper = obj.GetComponent <CyanEmuTriggerHelper>();
                if (triggerHelper != null && isTriggerGlobalBroadcast_)
                {
                    if (newValue && triggerHelper.HasGlobalOnDisable)
                    {
                        instance_.LogWarning("Posisble OnEnable or OnTimer oversync!");
                    }
                    else if (!newValue && triggerHelper.HasGlobalOnDisable)
                    {
                        instance_.LogWarning("Posisble OnDisable oversync!");
                    }
                }
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SetLayer)
            {
                obj.layer = triggerEvent.ParameterInt;
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SetMaterial)
            {
                Material mat = VRC_SceneDescriptor.GetMaterial(triggerEvent.ParameterString);
                obj.GetComponent <Renderer>().material = mat;
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SetParticlePlaying)
            {
                ParticleSystem system   = obj.GetComponent <ParticleSystem>();
                bool           newValue = VRC_EventHandler.BooleanOp(triggerEvent.ParameterBoolOp, system.isPlaying);
                if (newValue)
                {
                    system.Play();
                }
                else
                {
                    system.Stop();
                }
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SetUIText)
            {
                obj.GetComponent <UnityEngine.UI.Text>().text = triggerEvent.ParameterString;
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SpawnObject)
            {
                GameObject prefab = VRC_SceneDescriptor.GetPrefab(triggerEvent.ParameterString);
                CyanEmuMain.SpawnObject(prefab, obj.transform.position, obj.transform.rotation);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.TeleportPlayer)
            {
                if (isBufferedExecution)
                {
                    instance_.LogWarning("Teleport player actions should not be buffered. Ignoring");
                }
                else
                {
                    if (CyanEmuPlayerController.instance != null)
                    {
                        CyanEmuPlayerController.instance.Teleport(triggerEvent.ParameterObjects[0].transform, triggerEvent.ParameterBoolOp == VRC_EventHandler.VrcBooleanOp.True);
                    }
                    else
                    {
                        instance_.LogWarning("No player container to teleport!");
                    }

                    if (eventInfo.broadcast != VRC_EventHandler.VrcBroadcastType.Local)
                    {
                        instance_.LogWarning("TeleportPlayer action should be set to local!");
                    }
                }
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AddForce)
            {
                HandleTriggerPhysicsEvent(triggerEvent, obj);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AddVelocity)
            {
                HandleTriggerPhysicsEvent(triggerEvent, obj);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SetVelocity)
            {
                HandleTriggerPhysicsEvent(triggerEvent, obj);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AddAngularVelocity)
            {
                HandleTriggerPhysicsEvent(triggerEvent, obj);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SetAngularVelocity)
            {
                HandleTriggerPhysicsEvent(triggerEvent, obj);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AddDamage)
            {
                HandleTriggerDamageEvent(triggerEvent, obj);

                if (isBufferedExecution)
                {
                    instance_.LogWarning("AddDamage action should not be buffered!");
                }
                else if (eventInfo.broadcast != VRC_EventHandler.VrcBroadcastType.Local)
                {
                    instance_.LogWarning("AddDamage action should be set to local!");
                }
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AddHealth)
            {
                HandleTriggerDamageEvent(triggerEvent, obj);

                if (isBufferedExecution)
                {
                    instance_.LogWarning("AddHealth action should not be buffered!");
                }
                else if (eventInfo.broadcast != VRC_EventHandler.VrcBroadcastType.Local)
                {
                    instance_.LogWarning("AddHealth action should be set to local!");
                }
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SetWebPanelURI)
            {
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SetWebPanelVolume)
            {
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.MeshVisibility)
            {
            }
        }
コード例 #4
0
ファイル: CyanEmuTriggerHelper.cs プロジェクト: esnya/CyanEmu
        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();
        }
コード例 #5
0
ファイル: CyanEmuTriggerHelper.cs プロジェクト: esnya/CyanEmu
 public void OnStationExit(VRC.SDKBase.VRCStation station)
 {
     VRC_Trigger.TriggerCustom((station as VRCSDK2.VRC_Station).OnLocalPlayerExitStation);
     Trigger.ExecuteTriggerType(VRC_Trigger.TriggerType.OnStationExited);
 }
コード例 #6
0
 public void OnOwnershipTransferred(int ownerID)
 {
     VRC_Trigger.Trigger(gameObject, VRC.SDKBase.VRC_Trigger.TriggerType.OnOwnershipTransfer);
 }
コード例 #7
0
    public bool GetProperties(GameObject GO)
    {
        int i;
        List <Component>       ListOfComponents = new List <Component>();
        Transform              MyTransform;
        ParticleSystem         MyParticleSystem;
        ParticleSystemRenderer MyParticleSystemRenderer;

        ParticleSystem.MainModule  MyMainModule;
        ParticleSystem.MinMaxCurve MyMinMaxCurve;
        AnimationCurve             MyAnimationCurve;

        if (GO == null)
        {
            CustomMessage = "You've To Select Object";
            return(false);
        }

        CustomMessage = "";
        GUIList_Bool.Clear();
        AddInfo(ref CustomMessage, "Tag: " + GO.tag, "|");
        AddInfo(ref CustomMessage, "Layer: " + GO.layer, "; ");
        GO.GetComponents(ListOfComponents);
        AddInfo(ref CustomMessage, "Count Of Components: " + ListOfComponents.Count, "|");

        for (i = 0; i < ListOfComponents.Count; i++)
        {
            AddInfo(ref CustomMessage, "Foldout_Start(" + i + ". ", "| |");

            if (ListOfComponents[i] is Transform)
            {
                MyTransform = (Transform)ListOfComponents[i];

                if (MyTransform != null)
                {
                    AddInfo(ref CustomMessage, "Transform (" + ListOfComponents[i].ToString() + "))", "");
                    AddInfo(ref CustomMessage, "Position: X=" + MyTransform.localPosition.x + "; Y=" + MyTransform.localPosition.y + "; Z=" + MyTransform.localPosition.z, "|");
                    AddInfo(ref CustomMessage, "Global Position: X=" + MyTransform.position.x + "; Y=" + MyTransform.position.y + "; Z=" + MyTransform.position.z, "|");
                    AddInfo(ref CustomMessage, "Rotation: X=" + MyTransform.localRotation.x + "; Y=" + MyTransform.localRotation.y + "; Z=" + MyTransform.localRotation.z, "|");
                    AddInfo(ref CustomMessage, "Global Rotation: X=" + MyTransform.rotation.x + "; Y=" + MyTransform.rotation.y + "; Z=" + MyTransform.rotation.z, "|");
                    AddInfo(ref CustomMessage, "Scale: X=" + MyTransform.localScale.x + "; Y=" + MyTransform.localScale.y + "; Z=" + MyTransform.localScale.z, "|");
                    AddInfo(ref CustomMessage, "Global Scale: X=" + MyTransform.lossyScale.x + "; Y=" + MyTransform.lossyScale.y + "; Z=" + MyTransform.lossyScale.z, "|");
                }
            }
            else if (ListOfComponents[i] is ParticleSystem)
            {
                MyParticleSystem = (ParticleSystem)ListOfComponents[i];

                if (MyParticleSystem != null)
                {
                    AddInfo(ref CustomMessage, "ParticleSystem (" + ListOfComponents[i].ToString() + "))", "");
                    MyMainModule = MyParticleSystem.main;
                    AddInfo(ref CustomMessage, "Foldout_Start(Main)", "|");
                    AddInfo(ref CustomMessage, "Duration: " + MyMainModule.duration, "|");
                    AddInfo(ref CustomMessage, "Looping: " + MyMainModule.loop, "|");
                    AddInfo(ref CustomMessage, "Prewarm: " + MyMainModule.prewarm, "|");
                    MyMinMaxCurve = MyParticleSystem.startDelay;
                    AddInfo(ref CustomMessage, "Foldout_Start(MinMaxCurve)", "|");
                    AddInfo(ref CustomMessage, "Mode: " + MyMinMaxCurve.mode, "|");

                    if (MyMinMaxCurve.mode == ParticleSystemCurveMode.Constant)
                    {
                        AddInfo(ref CustomMessage, "Value: " + MyMinMaxCurve.constant, "|");
                    }
                    else if (MyMinMaxCurve.mode == ParticleSystemCurveMode.Curve)
                    {
                        MyAnimationCurve = MyMinMaxCurve.curve;

                        if (MyAnimationCurve != null)
                        {
                            AddInfo(ref CustomMessage, "Length: " + MyAnimationCurve.length, "|");
                            AddInfo(ref CustomMessage, "Foldout_Start(Curve)", "|");

                            for (i = 0; i < MyAnimationCurve.length; i++)
                            {
                                AddInfo(ref CustomMessage, "Key[" + i + "]: Time: " + MyAnimationCurve.keys[i].time, "|");
                                AddInfo(ref CustomMessage, "Value: " + MyAnimationCurve.keys[i].value, ";");
                            }

                            AddInfo(ref CustomMessage, "Foldout_End", "|");
                        }
                    }
                    else if (MyMinMaxCurve.mode == ParticleSystemCurveMode.TwoCurves)
                    {
                    }
                    else if (MyMinMaxCurve.mode == ParticleSystemCurveMode.TwoConstants)
                    {
                    }

                    AddInfo(ref CustomMessage, "Foldout_End", "|");
                    AddInfo(ref CustomMessage, "Foldout_End", "|");
                }
            }
            else if (ListOfComponents[i] is ParticleSystemRenderer)
            {
                MyParticleSystemRenderer = (ParticleSystemRenderer)ListOfComponents[i];

                if (MyParticleSystemRenderer != null)
                {
                    AddInfo(ref CustomMessage, "ParticleSystemRenderer (" + ListOfComponents[i].ToString() + "))", "");
                    AddInfo(ref CustomMessage, "Render Mode: " + MyParticleSystemRenderer.renderMode, "|");
                    AddInfo(ref CustomMessage, "Material: " + MyParticleSystemRenderer.sharedMaterial, "|");
                    AddInfo(ref CustomMessage, "Sort Mode: " + MyParticleSystemRenderer.sortMode, "|");
                    AddInfo(ref CustomMessage, "Sorting Fudge: " + MyParticleSystemRenderer.sortingFudge, "|");
                    AddInfo(ref CustomMessage, "Alignment: " + MyParticleSystemRenderer.alignment, "|");
                    AddInfo(ref CustomMessage, "Pivot: X=" + MyParticleSystemRenderer.pivot.x + "; Y=" + MyParticleSystemRenderer.pivot.y + "; Z=" + MyParticleSystemRenderer.pivot.z, "|");
                    AddInfo(ref CustomMessage, "Shadow Casting Mode: " + MyParticleSystemRenderer.shadowCastingMode, "|");
                    AddInfo(ref CustomMessage, "Receive Shadows: " + MyParticleSystemRenderer.receiveShadows, "|");
                    AddInfo(ref CustomMessage, "Sorting Layer ID: " + MyParticleSystemRenderer.sortingLayerID, "|");
                    AddInfo(ref CustomMessage, "Sorting Layer Name: " + MyParticleSystemRenderer.sortingLayerName, "|");
                    AddInfo(ref CustomMessage, "Sorting Order: " + MyParticleSystemRenderer.sortingOrder, "|");
                    AddInfo(ref CustomMessage, "Use Light Probes: " + MyParticleSystemRenderer.useLightProbes, "|");
                    AddInfo(ref CustomMessage, "Reflection Probe Usage: " + MyParticleSystemRenderer.reflectionProbeUsage, "|");
                }
            }
            else if (ListOfComponents[i] is VRC_Trigger)
            {
                VRC_Trigger MyVRC_Trigger = (VRC_Trigger)ListOfComponents[i];

                if (MyVRC_Trigger != null)
                {
                    AddInfo(ref CustomMessage, "VRC_Trigger (" + ListOfComponents[i].ToString() + "))", "");

                    foreach (VRC.SDKBase.VRC_Trigger.TriggerEvent TE in MyVRC_Trigger.Triggers)
                    {
                        AddInfo(ref CustomMessage, "Foldout_Start(TriggerType: " + Eval(TE.TriggerType == VRC_Trigger.TriggerType.Custom, TE.TriggerType + " (" + TE.Name + ")", TE.TriggerType.ToString()) + "; BroadcastType: " + TE.BroadcastType + ")", "|");
                        AddInfo(ref CustomMessage, "AfterSeconds: " + TE.AfterSeconds, "|");

                        foreach (VRC.SDKBase.VRC_EventHandler.VrcEvent VRCE in TE.Events)
                        {
                            AddInfo(ref CustomMessage, "Foldout_Start(EventType: " + VRCE.EventType + ")", "|");

                            for (int l = 0; l < VRCE.ParameterObjects.Length; l++)
                            {
                                GameObject GO2 = VRCE.ParameterObjects[l];

                                if (!GO2)
                                {
                                    continue;
                                }

                                AddInfo(ref CustomMessage, "ParameterObjects[" + l + "]: " + GO, "|");
                            }

                            AddInfo(ref CustomMessage, "ParameterBoolOp: " + VRCE.ParameterBoolOp, "|");
                            AddInfo(ref CustomMessage, "ParameterString: " + VRCE.ParameterString, "|");
                            AddInfo(ref CustomMessage, "ParameterBool: " + VRCE.ParameterBool, "|");
                            AddInfo(ref CustomMessage, "ParameterFloat: " + VRCE.ParameterFloat, "|");
                            AddInfo(ref CustomMessage, "ParameterInt: " + VRCE.ParameterInt, "|");
                            AddInfo(ref CustomMessage, "ParameterObject: " + VRCE.ParameterObject, "|");
                            AddInfo(ref CustomMessage, "Foldout_End", "|");
                        }

                        AddInfo(ref CustomMessage, "Foldout_End", "|");
                    }
                }
            }
            else
            {
                AddInfo(ref CustomMessage, "Error (" + ListOfComponents[i].ToString() + "))", "");
            }

            AddInfo(ref CustomMessage, "Foldout_End", "|");
        }

        return(true);
    }
        public void OnOwnershipTransferred(int ownerID)
        {
#if VRC_SDK_VRCSDK2
            VRC_Trigger.Trigger(gameObject, VRC.SDKBase.VRC_Trigger.TriggerType.OnOwnershipTransfer);
#endif
        }
コード例 #9
0
        private void CheckForMissingComponents()
        {
            Collider stationCollider = GetComponent <Collider>();

            if (stationCollider == null)
            {
                gameObject.AddComponent <BoxCollider>().isTrigger = true;
            }

#if UDON && UNITY_EDITOR
            UdonBehaviour udon = GetComponent <UdonBehaviour>();
            if (udon == null)
            {
                udon = gameObject.AddComponent <UdonBehaviour>();
                udon.interactText = "Sit";
                AbstractUdonProgramSource program = UnityEditor.AssetDatabase.LoadAssetAtPath <AbstractUdonProgramSource>("Assets/VRChat Examples/Prefabs/VRCChair/StationGraph.asset");
                if (program != null)
                {
                    udon.AssignProgramAndVariables(program.SerializedProgramAsset, new UdonVariableTable());
                }
            }
#endif

#if VRC_SDK_VRCSDK2
            // Auto add a Interact Trigger to use the station
            VRC_Trigger trigger = GetComponent <VRC_Trigger>();
            if (trigger == null)
            {
                trigger              = gameObject.AddComponent <VRCSDK2.VRC_Trigger>();
                trigger.Triggers     = new List <VRC_Trigger.TriggerEvent>();
                trigger.interactText = "Sit";

                VRC_Trigger.TriggerEvent onInteract = new VRC_Trigger.TriggerEvent
                {
                    BroadcastType = VRC_EventHandler.VrcBroadcastType.Local,
                    TriggerType   = VRC_Trigger.TriggerType.OnInteract,
                    Events        = new List <VRC_EventHandler.VrcEvent>()
                };

                VRC_EventHandler.VrcEvent useStationEvent = new VRC_EventHandler.VrcEvent
                {
                    EventType        = VRC_EventHandler.VrcEventType.SendRPC,
                    ParameterString  = "UseStation",
                    ParameterObjects = new[] { gameObject },
                    ParameterInt     = 6,
                };

                onInteract.Events.Add(useStationEvent);
                trigger.Triggers.Add(onInteract);

                // Reinitialize the trigger now that it has the proper events added.
                // Note that this only works as there were no vrc triggers on this object before.
                CyanEmuTriggerHelper helper = GetComponent <CyanEmuTriggerHelper>();
                if (helper != null)
                {
                    DestroyImmediate(helper);
                }
                CyanEmuTriggerHelper.InitializeTrigger(trigger);
            }
#endif
        }
コード例 #10
0
    public void setupTriggers(List <TScreen> screens)
    {
        foreach (SOption o in options)
        {
            if (!o.optionObj)
            {
                throw new MissingReferenceException("Could not set up triggers; Game Objects for screen " + id + " have not been generated.");
            }

            VRC_EventHandler evh = o.optionObj.GetComponent <VRC_EventHandler>();
            if (!evh)
            {
                o.optionObj.AddComponent <VRC_EventHandler>();
            }

            // Remove any pre-existing triggers
            VRC_Trigger t = o.optionObj.GetComponent <VRC_Trigger>();
            if (t)
            {
                Object.DestroyImmediate(t);
            }

            // Add an event handler and trigger

            VRC_Trigger trigger = o.optionObj.AddComponent <VRC_Trigger> ();
            trigger.interactText = "Select";
            trigger.proximity    = 1;

            VRC_Trigger.TriggerEvent onInteract = new VRC_Trigger.TriggerEvent();
            onInteract.TriggerType   = VRC_Trigger.TriggerType.OnInteract;
            onInteract.BroadcastType = VRC_EventHandler.VrcBroadcastType.AlwaysBufferOne;

            VRC_EventHandler.VrcEvent enableDestination = new VRC_EventHandler.VrcEvent();
            VRC_EventHandler.VrcEvent disableThisScreen = new VRC_EventHandler.VrcEvent();

            enableDestination.EventType = VRC_EventHandler.VrcEventType.SetGameObjectActive;
            disableThisScreen.EventType = VRC_EventHandler.VrcEventType.SetGameObjectActive;

            enableDestination.ParameterBoolOp = VRC_EventHandler.VrcBooleanOp.True;
            disableThisScreen.ParameterBoolOp = VRC_EventHandler.VrcBooleanOp.False;

            enableDestination.ParameterObjects = new GameObject[1];
            disableThisScreen.ParameterObjects = new GameObject[1];

            enableDestination.ParameterObjects.SetValue(screens [o.destination].gameScreen, 0);
            if (o.screen == null)
            {
                throw new MissingReferenceException("option has no screen");
            }
            if (o.screen.gameScreen == null)
            {
                throw new MissingReferenceException("Screen has no game screen");
            }
            if (disableThisScreen.ParameterObjects == null)
            {
                throw new MissingReferenceException("No paraemter objects found");
            }
            disableThisScreen.ParameterObjects.SetValue(o.screen.gameScreen, 0);

            onInteract.Events.Add(enableDestination);
            onInteract.Events.Add(disableThisScreen);

            trigger.Triggers.Add(onInteract);
        }
    }
コード例 #11
0
ファイル: PlayerNet.cs プロジェクト: Smoothstep/VRChat
 // Token: 0x06005436 RID: 21558 RVA: 0x001D15AD File Offset: 0x001CF9AD
 private void OnControllerColliderHit(ControllerColliderHit hit)
 {
     VRC_Trigger.Trigger(hit.collider.gameObject, VRC_Trigger.TriggerType.OnAvatarHit);
 }
コード例 #12
0
    void setupBackTrigger(VRC_Trigger backTrigger, int n, GameObject screen, GameObject remote)
    {
        if (backTrigger == null)
        {
            return;
        }

        backTrigger.interactText = "Back";

        int i;

        VRC_EventHandler.VrcEvent backEventTrue  = new VRC_EventHandler.VrcEvent();
        VRC_EventHandler.VrcEvent backEventFalse = new VRC_EventHandler.VrcEvent();

        backEventTrue.EventType  = VRC_EventHandler.VrcEventType.SetGameObjectActive;
        backEventFalse.EventType = VRC_EventHandler.VrcEventType.SetGameObjectActive;

        backEventTrue.ParameterBoolOp  = VRC_EventHandler.VrcBooleanOp.True;
        backEventFalse.ParameterBoolOp = VRC_EventHandler.VrcBooleanOp.False;

        Transform prevImage = screen.transform.Find("image" + (n - 1));

        if (prevImage == null)
        {
            DestroyImmediate(backTrigger);
            return;
        }

        Transform currentImg = screen.transform.Find("image" + n);

        if (currentImg == null)
        {
            DestroyImmediate(backTrigger);
            return;
        }

        // Setting game objects true
        int trueParamCount = 3;

        Transform nextPrev = remote.transform.Find("backTo" + (n - 2));
        Transform prev2Img = screen.transform.Find("image" + (n - 2));

        if (prev2Img == null || nextPrev == null)
        {
            trueParamCount--;
        }

        Transform prevForward = remote.transform.Find("forwardTo" + (n));

        if (prevForward == null)
        {
            trueParamCount--;
        }

        i = 0;
        backEventTrue.ParameterObjects = new GameObject[trueParamCount];
        backEventTrue.ParameterObjects.SetValue(prevImage.gameObject, i++);
        if (prev2Img != null && nextPrev != null)
        {
            backEventTrue.ParameterObjects.SetValue(nextPrev.gameObject, i++);
        }
        if (prevForward != null)
        {
            backEventTrue.ParameterObjects.SetValue(prevForward.gameObject, i++);
        }

        // Setting game objects false
        int falseParamCount = 3;

        Transform currentForward = remote.transform.Find("forwardTo" + (n + 1));

        if (currentForward == null)
        {
            falseParamCount--;
        }

        i = 0;
        backEventFalse.ParameterObjects = new GameObject[falseParamCount];
        backEventFalse.ParameterObjects.SetValue(currentImg.gameObject, i++);
        backEventFalse.ParameterObjects.SetValue(backTrigger.gameObject, i++);
        if (currentForward != null)
        {
            backEventFalse.ParameterObjects.SetValue(currentForward.gameObject, i++);
        }

        // Add both types of actions to trigger
        backTrigger.Triggers[0].Events.Add(backEventTrue);
        backTrigger.Triggers [0].Events.Add(backEventFalse);
    }
コード例 #13
0
    void OnGUI()
    {
        GUILayout.Label("Drag Slideshow From Scene", EditorStyles.boldLabel);
        slideshow = (GameObject)EditorGUILayout.ObjectField("Slideshow Asset", slideshow, typeof(GameObject), true);
        GUILayout.Label("Click to select folder of images to add to the slideshow:", EditorStyles.label);

        if (GUILayout.Button("Select directory with images"))
        {
            if (slideshow == null)
            {
                Debug.Log("Please select slideshow asset first.");
                return;
            }


            string path = EditorUtility.OpenFolderPanel("Load png Textures", "", "");

            // Set up relative path of texture image
            string[] pathArray         = path.Split('/');       // OpenFolderPanel always uses "/" instead of OS directory separator.
            string[] relativePathArray = new string[0];
            int      j       = 0;
            bool     pathing = false;
            for (int i = 0; i < pathArray.Length; i++)
            {
                if (pathArray [i] == "Assets")
                {
                    pathing           = true;
                    relativePathArray = new string[pathArray.Length - i];
                }

                if (pathing)
                {
                    relativePathArray [j] = pathArray [i];
                    j++;
                }
            }

            string   imagesDirPath = string.Join(SLASH_STRING, relativePathArray);
            string[] files         = Directory.GetFiles(path);

            // Create Materials folder
            materialsPath = imagesDirPath + SLASH_STRING + "Materials";
            if (!AssetDatabase.IsValidFolder(materialsPath))
            {
                Debug.Log("No Materials folder found");
                try {
                    AssetDatabase.CreateFolder(imagesDirPath, "Materials");
                } catch (IOException e) {
                    Debug.Log("Exception while creating Materials Directory!");
                    Debug.Log(e.Message);
                    return;
                }
            }

            GameObject screen     = slideshow.transform.Find("screen").gameObject;
            GameObject remote     = slideshow.transform.Find("remote_control").gameObject;
            GameObject sharedQuad = GameObject.CreatePrimitive(PrimitiveType.Quad);


            int n          = 1;
            int imageCount = 0;
            Array.Sort(files, new AlphanumComparatorFast());
            foreach (string file in files)
            {
                if (endsWithImageExt(file))
                {
                    imageCount++;

                    // Create new material
                    string[] filepathArray = file.Split(SLASH);
                    string   filename      = filepathArray [filepathArray.Length - 1];
                    Material newMaterial   = new Material(Shader.Find("Standard"));


                    // Set new material's color and texture
                    newMaterial.color = new Color(0, 0, 0);
                    newMaterial.EnableKeyword("_EMISSION");
                    newMaterial.globalIlluminationFlags = MaterialGlobalIlluminationFlags.BakedEmissive;
                    Texture tex = (Texture)AssetDatabase.LoadAssetAtPath(imagesDirPath + SLASH_STRING + filename, typeof(Texture));
                    newMaterial.SetTexture("_EmissionMap", tex);
                    newMaterial.SetColor("_EmissionColor", Color.white);

                    // Save new material to file
                    AssetDatabase.CreateAsset(newMaterial, materialsPath + SLASH_STRING + filename + ".mat");

                    // Create image panel for each file
                    GameObject imgObj = initScreenImage("image" + n, screen, sharedQuad, newMaterial);
                    if (n != 1)
                    {
                        imgObj.SetActive(false);
                    }

                    // Create remote triggers for each file
                    GameObject forwardButton = initRemoteButton("forwardTo" + (n + 1), remote);
                    if (n != 1)
                    {
                        forwardButton.SetActive(false);
                    }
                    GameObject backButton = initRemoteButton("backTo" + (n - 1), remote);
                    backButton.SetActive(false);

                    backButton.GetComponent <BoxCollider>().center    = new Vector3(-0.0325f, -0.0247f, -0.002f);
                    forwardButton.GetComponent <BoxCollider>().center = new Vector3(0.0325f, -0.0247f, -0.002f);
                    n++;
                }
            }

            n = 1;
            for (int i = 0; i < imageCount; i++)
            {
                // Set up triggers now that all game objects are created;
                GameObject backButton    = remote.transform.Find("backTo" + (n - 1)).gameObject;
                GameObject forwardButton = remote.transform.Find("forwardTo" + (n + 1)).gameObject;

                VRC_Trigger backTrigger    = backButton.GetComponent <VRC_Trigger> ();
                VRC_Trigger forwardTrigger = forwardButton.GetComponent <VRC_Trigger> ();

                setupForwardTrigger(forwardTrigger, n, screen, remote);
                setupBackTrigger(backTrigger, n, screen, remote);

                n++;
            }

            Debug.Log("Set up " + imageCount + " images in the slideshow.");
            DestroyImmediate(sharedQuad);
        }
    }
コード例 #14
0
    void setupForwardTrigger(VRC_Trigger forwardTrigger, int n, GameObject screen, GameObject remote)
    {
        forwardTrigger.interactText = "Forward";

        VRC_EventHandler.VrcEvent forwardEventTrue  = new VRC_EventHandler.VrcEvent();
        VRC_EventHandler.VrcEvent forwardEventFalse = new VRC_EventHandler.VrcEvent();
        forwardEventTrue.EventType        = VRC_EventHandler.VrcEventType.SetGameObjectActive;
        forwardEventFalse.EventType       = VRC_EventHandler.VrcEventType.SetGameObjectActive;
        forwardEventTrue.ParameterBoolOp  = VRC_EventHandler.VrcBooleanOp.True;
        forwardEventFalse.ParameterBoolOp = VRC_EventHandler.VrcBooleanOp.False;

        int i;

        Transform nextImage = screen.transform.Find("image" + (n + 1));

        if (nextImage == null)
        {
            DestroyImmediate(forwardTrigger);
            return;
        }

        Transform currentImg = screen.transform.Find("image" + (n));

        if (currentImg == null)
        {
            DestroyImmediate(forwardTrigger);
            return;
        }

        // Setting Game Objects True
        int trueParamCount = 3;

        Transform nextForward = remote.transform.Find("forwardTo" + (n + 2));
        Transform next2Img    = screen.transform.Find("image" + (n + 2));

        if (next2Img == null || nextForward == null)
        {
            trueParamCount--;
        }

        Transform nextBack = remote.transform.Find("backTo" + n);

        if (nextBack == null)
        {
            trueParamCount--;
        }

        i = 0;
        forwardEventTrue.ParameterObjects = new GameObject [trueParamCount];
        forwardEventTrue.ParameterObjects.SetValue(nextImage.gameObject, i++);
        if (nextForward != null && next2Img != null)
        {
            forwardEventTrue.ParameterObjects.SetValue(nextForward.gameObject, i++);
        }
        if (nextBack != null)
        {
            forwardEventTrue.ParameterObjects.SetValue(nextBack.gameObject, i++);
        }

        // Setting Game Objects False
        int falseParamCount = 3;

        Transform currentBack = remote.transform.Find("backTo" + (n - 1));

        if (currentBack == null)
        {
            falseParamCount--;
        }

        i = 0;
        forwardEventFalse.ParameterObjects = new GameObject[falseParamCount];
        forwardEventFalse.ParameterObjects.SetValue(currentImg.gameObject, i++);
        forwardEventFalse.ParameterObjects.SetValue(forwardTrigger.gameObject, i++);
        if (currentBack != null)
        {
            forwardEventFalse.ParameterObjects.SetValue(currentBack.gameObject, i++);
        }

        // Add both type of actions to Trigger
        forwardTrigger.Triggers [0].Events.Add(forwardEventTrue);
        forwardTrigger.Triggers [0].Events.Add(forwardEventFalse);
    }