private void logLocomotionAction(string locomotionType)
    {
        LocomotionController currentController = locomotionTracker.GetCurrentController();
        string tier   = (currentController != null) ? currentController.GetType().Name.Replace("Controller", "") : "undefined";
        string callID = $"locomotion_{locomotionType}";

        Service.Get <ICPSwrveService>().ActionSingular(callID, locomotionType, tier);
    }
 private void OnEnable()
 {
     if (canSitFromCurrentState() || !base.gameObject.CompareTag("Player"))
     {
         prevLocoController = tracker.GetCurrentController();
         animator.SetBool(AnimationHashes.Params.Sit, value: true);
         mode           = Mode.Jumping;
         exitingViaJump = false;
         base.Broadcaster.OnInteractionPreStartedEvent += onInteractionPreStartedEvent;
         base.Broadcaster.BroadcastOnControlsLocked();
     }
     else
     {
         base.enabled = false;
     }
     if (base.gameObject.CompareTag("Player"))
     {
         LoadControlsLayout();
     }
 }
    private bool onAFKEvent(AwayFromKeyboardEvent evt)
    {
        if (evt.FaceCamera)
        {
            locomotionTracker.GetCurrentController().SteerRotation(Vector2.down);
        }
        LocomotionEventBroadcaster component = GetComponent <LocomotionEventBroadcaster>();

        if (component != null)
        {
            component.BroadcastOnSteerRotationFlushEvent();
        }
        Service.Get <INetworkServicesManager>().PlayerStateService.SetAwayFromKeyboard((int)evt.Type);
        return(false);
    }
    protected void startInteraction()
    {
        GameObject gameObject = ActionSequencer.FindActionGraphObject(currentActionGraphGameObject);

        if (gameObject != null && ClubPenguin.SceneRefs.ActionSequencer.StartSequence(base.gameObject, gameObject))
        {
            if (locoEventBroadcaster != null)
            {
                locoEventBroadcaster.BroadcastOnInteractionStarted(gameObject);
            }
            if (AvatarDataHandle.TryGetPlayerHandle(base.gameObject, out DataEntityHandle handle) && dataEntityCollection.TryGetComponent(handle, out SessionIdData component))
            {
                dispatcher.DispatchEvent(new PenguinInteraction.InteractionStartedEvent(component.SessionId, gameObject));
            }
            LocomotionController currentController = locomotionTracker.GetCurrentController();
            if (currentController != null && (gameObject.GetComponent <ToggleCoreGameplayAction>() != null || gameObject.GetComponent <WarpTunnelAction>() != null))
            {
                currentController.OnBlockingInteractionStarted();
            }
            interactRequest.Reset();
            RetainParticipationWithActionGraphGO();
            ClubPenguin.SceneRefs.ActionSequencer.SequenceCompleted += OnActionSequencerSequenceCompleted;
        }
    }
예제 #5
0
    private void onViewReady(AvatarBaseAsync view)
    {
        if (locomotionData == null)
        {
            return;
        }
        LocomotionTracker component = GetComponent <LocomotionTracker>();

        switch (locomotionData.LocoState)
        {
        case LocomotionState.Slide:
            if (component.IsCurrentControllerOfType <SlideController>())
            {
                GetComponent <Animator>().SetBool(AnimationHashes.Params.Slide, value: true);
                GetComponent <Animator>().Play(AnimationHashes.States.Slide.Enter, 0);
            }
            else
            {
                component.SetCurrentController <SlideController>();
            }
            break;

        case LocomotionState.Sitting:
        {
            if (!component.IsCurrentControllerOfType <SitController>())
            {
                component.SetCurrentController <SitController>();
            }
            SitController sitController = component.GetCurrentController() as SitController;
            if (sitController != null)
            {
                sitController.RemoteSit(null);
            }
            break;
        }
        }
    }
예제 #6
0
        private void Update()
        {
            if (!receivingEnabled)
            {
                return;
            }
            switch (state)
            {
            case SyncState.IDLE:
                if (positionTimeline.Count > 0)
                {
                    desiredTargetEvent = positionTimeline.Peek();
                    snapIfNeeded(desiredTargetEvent.Position);
                    timer.Reset();
                    timer.Start();
                    state = SyncState.WAITING;
                }
                break;

            case SyncState.WAITING:
                if (timer.ElapsedMilliseconds > InterpolationDelay || positionTimeline.PeekLast().Timestamp - desiredTargetEvent.Timestamp >= InterpolationDelay)
                {
                    timer.Reset();
                    timer.Start();
                    switchToNextPosition();
                    motionSequenceStartTime = desiredStartEvent.Timestamp;
                }
                break;

            case SyncState.INTERPOLATION:
                if (!timeForPosition(desiredStartEvent, desiredTargetEvent))
                {
                    break;
                }
                triggerEventAction(desiredTargetEvent);
                if (positionTimeline.Count == 0)
                {
                    LocomotionController currentController = locomotionTracker.GetCurrentController();
                    if (currentController != null && !(currentController is SlideController))
                    {
                        currentController.Steer(lastStickDirection.normalized);
                    }
                    if (lastStickDirection == Vector3.zero)
                    {
                        timer.Stop();
                        state = SyncState.IDLE;
                    }
                    else
                    {
                        state = SyncState.EXTRAPOLATION;
                    }
                }
                else
                {
                    switchToNextPosition();
                }
                break;

            case SyncState.EXTRAPOLATION:
            {
                LocomotionController currentController = locomotionTracker.GetCurrentController();
                if (positionTimeline.Count == 0)
                {
                    if (timer.ElapsedMilliseconds > MaxExtrapolationTime)
                    {
                        if (currentController != null && !(currentController is SlideController))
                        {
                            currentController.Steer(Vector3.zero);
                        }
                        timer.Stop();
                        lastStickDirection = Vector3.zero;
                        state = SyncState.IDLE;
                    }
                }
                else
                {
                    desiredTargetEvent.Position  = ((currentController != null) ? currentController.GetPosition() : base.transform.position);
                    desiredTargetEvent.Timestamp = motionSequenceStartTime + timer.ElapsedMilliseconds;
                    switchToNextPosition();
                }
                break;
            }
            }
        }
 protected override void Update()
 {
     if (keyFrames.Count > 1)
     {
         if (isWarpingToStart)
         {
             if (SnapToStart)
             {
                 vehicleTransform.position = keyFrames[0].pos;
                 isWarpingToStart          = false;
             }
             else
             {
                 Vector3 position   = vehicleTransform.position;
                 Vector3 rhs        = keyFrames[0].pos - position;
                 Vector3 normalized = rhs.normalized;
                 curWarpSpeed    += StartAccel * Time.deltaTime;
                 curWarpSpeed     = Mathf.Clamp(curWarpSpeed, 0f, TravelSpeed);
                 elapsedWarpTime += Time.deltaTime;
                 float   t = Mathf.Clamp01(elapsedWarpTime / timeToAlign);
                 Vector3 b = normalized * curWarpSpeed;
                 curVel = Vector3.Lerp(curVel, b, t);
                 Vector3 vector = position + curVel * Time.deltaTime;
                 vehicleTransform.position = vector;
                 Vector3 lhs          = keyFrames[0].pos - vector;
                 float   sqrMagnitude = lhs.sqrMagnitude;
                 if (sqrMagnitude < closeEnoughDistSq || Vector3.Dot(lhs, rhs) <= 0f)
                 {
                     isWarpingToStart = false;
                 }
             }
             if (!isWarpingToStart && TravelStartSpeed >= 0f)
             {
                 curWarpSpeed = TravelStartSpeed;
             }
             updateSeat();
         }
         else
         {
             elapsedTravelTime += Time.deltaTime;
             if (elapsedTravelTime >= TravelDelay)
             {
                 if (TravelAccelCurve.length > 1)
                 {
                     curWarpSpeed = TravelAccelCurve.Evaluate(elapsedTravelTime) * TravelSpeed;
                     curWarpSpeed = Mathf.Clamp(curWarpSpeed, minAccelCurveValue, TravelSpeed);
                 }
                 else
                 {
                     curWarpSpeed = TravelSpeed;
                 }
                 float   deltaDist = curWarpSpeed * Time.deltaTime;
                 Vector3 vector    = GetNextPos(deltaDist);
                 if (vector != vehicleTransform.position)
                 {
                     curVel = (vector - vehicleTransform.position) / Time.deltaTime;
                     vehicleTransform.position = vector;
                     updateSeat();
                 }
                 else
                 {
                     if (!string.IsNullOrEmpty(ExitAnimTrigger))
                     {
                         int trigger = Animator.StringToHash(ExitAnimTrigger);
                         anim.SetTrigger(trigger);
                     }
                     if (StopAtEndPoint)
                     {
                         vehicleTransform.position = vehicleStartPos;
                         vehicleTransform.rotation = vehicleStartRot;
                     }
                     else
                     {
                         vehicleTransform.position += curVel * Time.deltaTime;
                         updateSeat();
                         LocomotionTracker component = GetTarget().GetComponent <LocomotionTracker>();
                         if (component != null)
                         {
                             LocomotionController currentController = component.GetCurrentController();
                             if (currentController != null)
                             {
                                 currentController.SetForce(curVel);
                             }
                         }
                     }
                     Completed(curVel);
                 }
             }
         }
         if (!(elapsedTravelTime >= TravelDelay) || !(curVel.sqrMagnitude > 0f))
         {
             return;
         }
         Vector3 normalized2 = curVel.normalized;
         Vector3 upwards     = Vector3.up;
         if (!UseWorldUp)
         {
             if (!Is3DSpace)
             {
                 upwards = new Vector3(0f - normalized2.y, normalized2.x, 0f);
             }
             else
             {
                 Vector3 lhs2 = Vector3.Cross(normalized2, Vector3.up);
                 upwards = Vector3.Cross(lhs2, normalized2);
             }
         }
         Quaternion b2 = Quaternion.LookRotation(normalized2, upwards);
         vehicleTransform.rotation = Quaternion.Slerp(vehicleTransform.rotation, b2, TurnSmoothing * Time.deltaTime);
     }
     else
     {
         Completed(Vector3.zero);
     }
 }
예제 #8
0
    private Vector3 getCurrentPosition()
    {
        LocomotionController currentController = locomotionTracker.GetCurrentController();

        return((currentController != null) ? currentController.GetPosition() : base.transform.position);
    }