示例#1
0
    // Token: 0x06005AB4 RID: 23220 RVA: 0x001F9958 File Offset: 0x001F7D58
    protected override void OnNetworkReady()
    {
        base.OnNetworkReady();
        if (!VRC_EventHandler.HasEventTrigger(base.gameObject))
        {
            VRC_Trigger orAddComponent = base.gameObject.GetOrAddComponent <VRC_Trigger>();
            List <VRC_Trigger.TriggerEvent> triggers     = orAddComponent.Triggers;
            VRC_Trigger.TriggerEvent        triggerEvent = new VRC_Trigger.TriggerEvent();
            triggerEvent.BroadcastType = VRC_EventHandler.VrcBroadcastType.Local;
            triggerEvent.TriggerType   = VRC_Trigger.TriggerType.OnInteract;
            triggerEvent.Events        = (from evt in this.baseStation.ProvideEvents()
                                          where evt.Name == "UseStation"
                                          select evt).ToList <VRC_EventHandler.VrcEvent>();
            triggers.Add(triggerEvent);
        }
        else
        {
            VRC_Trigger component = base.GetComponent <VRC_Trigger>();
            if (component != null)
            {
                foreach (VRC_Trigger.TriggerEvent triggerEvent2 in from t in component.Triggers
                         where t.Events.Any((VRC_EventHandler.VrcEvent e) => e.ParameterString == "UseStation" || e.ParameterString == "ExitStation")
                         select t)
                {
                    triggerEvent2.BroadcastType = VRC_EventHandler.VrcBroadcastType.Local;
                }
            }
            VRC_UseEvents component2 = base.GetComponent <VRC_UseEvents>();
            if (component2 != null)
            {
                component2.BroadcastType = VRC_EventHandler.VrcBroadcastType.Local;
                component2.EventName     = "UseStation";
            }
        }
        Collider component3 = base.gameObject.GetComponent <Collider>();

        if (component3 == null)
        {
            BoxCollider boxCollider = base.gameObject.AddComponent <BoxCollider>();
            boxCollider.isTrigger = true;
        }
        VRC_EventHandler component4 = base.GetComponent <VRC_EventHandler>();

        if (component4 != null)
        {
            VRC_Station component5 = base.GetComponent <VRC_Station>();
            using (IEnumerator <VRC_EventHandler.VrcEvent> enumerator2 = component5.ProvideEvents().GetEnumerator())
            {
                while (enumerator2.MoveNext())
                {
                    VRC_EventHandler.VrcEvent evt = enumerator2.Current;
                    VRC_StationInternal       t   = this;
                    if (!component4.Events.Any((VRC_EventHandler.VrcEvent item) => item.Name == evt.Name && item.ParameterObjects != null && item.ParameterObjects.Contains(t.gameObject)))
                    {
                        component4.Events.Add(evt);
                    }
                }
            }
        }
    }
示例#2
0
    private void InternalUseStation(VRC.Player player)
    {
        bool flag = false;

        if (player == null || (this.Occupant != null && this.Occupant != player) || player == this.Occupant)
        {
            return;
        }
        List <VRC_StationInternal> source = VRC_StationInternal.FindActiveStations(player);

        if (source.FirstOrDefault((VRC_StationInternal s) => s != this) != null)
        {
            if (!this.canUseStationFromStation)
            {
                return;
            }
            if (!VRC_StationInternal.ExitAllStations(player))
            {
                return;
            }
            flag = true;
        }
        else
        {
            VRC_StationInternal.ExitAllStations(player);
        }
        if (this.Occupant != null)
        {
            return;
        }
        VRC_StationInternal.FlagDiscontinuity(player);
        this.Occupant = player;
        if (flag)
        {
            this._occupant = null;
            return;
        }
        if (VRC_EventHandler.HasEventTrigger(base.gameObject))
        {
            this.AddUseExit(player);
        }
        if (this.stationControls != null)
        {
            this.stationControls.controllingPlayer = player.GetComponent <VRC_PlayerApi>();
        }
        Vector3    position = Vector3.zero;
        Quaternion rhs      = Quaternion.identity;

        if (player.isLocal)
        {
            VRCPlayer component = player.GetComponent <VRCPlayer>();
            component.AlignTrackingToPlayer();
            Transform  trackingTransform = VRCTrackingManager.GetTrackingTransform();
            Vector3    position2         = trackingTransform.position;
            Quaternion rotation          = trackingTransform.rotation;
            position = player.transform.InverseTransformPoint(trackingTransform.position);
            rhs      = Quaternion.Inverse(player.transform.rotation) * rotation;
        }
        if (this.isSeated)
        {
            this.ApplySeatedAnimation(player);
        }
        this.SetEnterPlayerTransform(player.gameObject);
        player.currentStation = this;
        if (player.isLocal)
        {
            VRCTrackingManager.SetTrackingWorldOrigin(player.transform.TransformPoint(position), player.transform.rotation * rhs);
            if (this.isSeated)
            {
                VRCTrackingManager.UseAvatarStationViewPoint(true);
            }
            if (this.stationEnterPlayerLocation != null)
            {
                this.stationEnterInitialRotation = this.stationEnterPlayerLocation.rotation;
            }
            else
            {
                this.stationEnterInitialRotation = base.transform.rotation;
            }
            this.trackingOriginDeltaPosition = VRCTrackingManager.GetTrackingWorldOrigin() - player.transform.position;
            this.trackingOriginDeltaRotation = Quaternion.FromToRotation(player.transform.TransformDirection(Vector3.forward), VRCTrackingManager.GetTrackingTransform().TransformDirection(Vector3.forward));
            player.GetComponent <LocomotionInputController>().immobilize = this.isImmobilized;
            player.GetComponent <VRCMotionState>().IsSeated  = this.isSeated;
            player.GetComponent <VRCMotionState>().InVehicle = this.inVehicle;
        }
        if (this.isImmobilized)
        {
            Collider component2 = player.GetComponent <Collider>();
            if (component2 != null)
            {
                component2.enabled = false;
            }
            if (player.isLocal)
            {
                this.AttachInputControllerTo(player, "ImmobileInputController");
            }
        }
        if (this.controlsObject != null)
        {
            VRC.Network.SetOwner(player, this.controlsObject.gameObject, VRC.Network.OwnershipModificationType.Request, false);
        }
        if (TutorialManager.Instance != null && player.isLocal && this.isImmobilized && !this.disableStationExit)
        {
            base.StartCoroutine(this.ShowGetUpInstructions());
        }
        VRC_StationInternal.AddActiveStation(this);
        base.SendMessage("OnStationEntered", SendMessageOptions.DontRequireReceiver);
    }