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; } }
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; } } }
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); } }
private Vector3 getCurrentPosition() { LocomotionController currentController = locomotionTracker.GetCurrentController(); return((currentController != null) ? currentController.GetPosition() : base.transform.position); }