Files
Robii Aragon fd87a6ffd5 add ckg
plantilla base para movimiento básico
2026-02-05 05:07:55 -08:00

1114 lines
28 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class slideSystem : externalControllerBehavior
{
[Header ("Main Settings")]
[Space]
public bool slideEnabled = true;
public LayerMask raycastLayermask;
public float raycastDistance = 0.6f;
public float slideActiveRaycastDistance = 3;
[Space]
[Header ("Speed Settings")]
[Space]
public float slideSpeed;
public float slideHorizontalSpeed;
public float slideSprintSpeed;
public float slideSlowDownSped;
public float slideVerticalSpeed;
public float slideRotationSpeed;
public bool sliderCanBeUsed = true;
public Vector3 impulseOnJump;
public Vector3 endOfSurfaceImpulse;
public float horizontalInputAmount = 1;
public float regularSlideMovementAmount = 0.4f;
public float minWaitTimeToSlideCheckSlideActive = 1;
[Space]
[Header ("Surface Angle Speed Multiplier Settings")]
[Space]
public bool changeSpeedBasedOnSurfaceAngle;
public float minAngleToIncreaseSpeed;
public float speedOnSurfaceAngleMultiplier;
public bool stopSlideIfSurfaceAngleTooLow;
public float minAngleToStopSlide;
[Space]
[Header ("Other Settings")]
[Space]
public float maxVelocityChangeSlide;
public bool keepWeapons;
public bool drawWeaponsIfCarriedPreviously;
public bool setNewAimWeaponCameraState;
public string customDefaultThirdPersonAimRightStateName = "Aim Right On Slide";
public string customDefaultThirdPersonAimLeftStateName = "Aim Left On Slide";
public string newCameraState = "Slide View";
public bool stopSlideIfObstacleDetected;
public LayerMask obstacleLayermask;
[Space]
[Header ("Manual Slide Settings")]
[Space]
public bool manualSlideCanBeEnabled = true;
public bool stopManualSlideAfterTimeDelay;
public float timeDelayToStopManualSlide;
[Space]
[Header ("Gravity Settings")]
[Space]
public bool adhereToSurfacesEnabled;
public float adhereToSurfacesRotationSpeed;
public bool disableSlideWhenDisablingAdhereState = true;
public bool resetGravityDirectionOnSlideExitEnabled = true;
[Space]
[Header ("Third Person Settings")]
[Space]
public int actionID = 08632946;
public int slideStandingActionID = 08632945;
public bool useSlideStandingActionIDOnManualSlide;
public bool useSlideStandingActionIDOnTriggerSlide;
public string externalControlleBehaviorActiveAnimatorName = "External Behavior Active";
public string actionIDAnimatorName = "Action ID";
public string horizontalAnimatorName = "Horizontal Action";
public float inputLerpSpeed = 3;
[Space]
[Header ("Third Person Camera State Settings")]
[Space]
public bool setNewCameraStateOnThirdPerson;
public string newCameraStateOnThirdPerson;
public bool setNewCameraStateOnFBA;
public string newCameraStateOnFBA;
[Space]
[Header ("Debug")]
[Space]
public bool showDebugPrint;
public bool checkIfDetectSlideActive;
public bool slideActive;
public bool isFirstPersonActive;
public float currentHorizontalMovement;
public float currentVerticalMovement;
public float slideSpeedMultiplier = 1;
public bool carryingWeaponsPreviously;
public Transform currentSlideTransform;
public float currentSlideSpeed;
public Vector3 moveInput;
public Vector3 localMove;
public int currentSlideZonesAmountDetected;
public bool slideActivatedBySlideZone;
public bool adhereToSurfacesActive;
public Vector3 originalNormal;
public bool runningActive;
public bool manualSlideActive;
public float targetRotation;
[Space]
[Header ("First Person Events Settings")]
[Space]
public bool useEventsOnFirstPerson;
public UnityEvent eventOnStartFirstPerson;
public UnityEvent eventOnEndFirstPerson;
[Space]
[Header ("Third Person Events Settings")]
[Space]
public bool useEventsOnThirdPerson;
public UnityEvent eventOnStartThirdPerson;
public UnityEvent eventOnEndThirdPerson;
[Space]
[Header ("Run On Slide Events Settings")]
[Space]
public bool useEventtsOnRunSlideStateChange;
public UnityEvent eventOnStartRunOnSlide;
public UnityEvent eventOnStopRunOnSlide;
[Space]
[Header ("Components")]
[Space]
public playerController mainPlayerController;
public Transform playerTransform;
public Rigidbody mainRigidbody;
public Transform playerCameraTransform;
public playerCamera mainPlayerCamera;
public playerWeaponsManager mainPlayerWeaponsManager;
public gravitySystem mainGravitySystem;
public headTrack mainHeadTrack;
public Animator mainAnimator;
Vector3 currentMovementDirection;
float lastSlideRunningActive;
RaycastHit slideHit;
bool originalSlideEnabled;
Vector3 playerTransformUp;
Vector3 playerTransformForward;
RaycastHit hit;
Vector3 velocityChange;
int externalControlleBehaviorActiveAnimatorID;
int actionIDAnimatorID;
string previousCameraState = "";
float lastTimeSlideActive;
bool resetAnimatorIDValue;
int horizontalAnimatorID;
bool jumpInputUsed;
Transform mainSlideTransform;
string defaultThirdPersonStateName = "";
Vector3 currentSurfaceNormal;
bool runStartEventActive;
bool runStopEventActive;
bool canUseRunPaused;
bool originalResetGravityDirectionOnSlideExitEnabled;
bool animationStandingResult;
Transform currentLockedCameraTransform;
bool isPlayerMovingOn3dWorld;
float lastTimeGroundDetected;
float lastTimeObstacleDetected;
void Start ()
{
originalSlideEnabled = slideEnabled;
externalControlleBehaviorActiveAnimatorID = Animator.StringToHash (externalControlleBehaviorActiveAnimatorName);
actionIDAnimatorID = Animator.StringToHash (actionIDAnimatorName);
horizontalAnimatorID = Animator.StringToHash (horizontalAnimatorName);
originalResetGravityDirectionOnSlideExitEnabled = resetGravityDirectionOnSlideExitEnabled;
}
public override void updateControllerBehavior ()
{
if (slideActive) {
if (resetAnimatorIDValue) {
if (Time.time > lastTimeSlideActive + 0.3f) {
mainAnimator.SetInteger (actionIDAnimatorID, 0);
resetAnimatorIDValue = false;
}
}
float currentFixedUpdateDeltaTime = Time.fixedDeltaTime;
playerTransformUp = playerTransform.up;
playerTransformForward = playerTransform.forward;
Vector3 currentRaycastPosition = playerTransform.position + playerTransformUp * 2 + playerTransform.forward * regularSlideMovementAmount;
Vector3 currentRaycastDirection = -playerTransformUp;
currentVerticalMovement = mainPlayerController.getVerticalInput ();
currentHorizontalMovement = mainPlayerController.getHorizontalInput ();
if (isPlayerMovingOn3dWorld) {
moveInput = playerCameraTransform.forward * (currentVerticalMovement) + playerCameraTransform.right * (currentHorizontalMovement);
if (moveInput.magnitude > 1) {
moveInput.Normalize ();
}
localMove = playerTransform.InverseTransformDirection (moveInput);
mainAnimator.SetFloat (horizontalAnimatorID, localMove.x, inputLerpSpeed, Time.fixedDeltaTime);
} else {
currentLockedCameraTransform = mainPlayerCamera.getLockedCameraTransform ();
localMove = currentLockedCameraTransform.right * (currentHorizontalMovement);
mainAnimator.SetFloat (horizontalAnimatorID, 0, inputLerpSpeed, Time.fixedDeltaTime);
}
if (slideActivatedBySlideZone) {
mainSlideTransform = currentSlideTransform;
} else {
mainSlideTransform = playerTransform;
}
if (isPlayerMovingOn3dWorld) {
currentRaycastPosition += mainSlideTransform.right * localMove.x * horizontalInputAmount;
}
runningActive = mainPlayerController.isPlayerRunning ();
if (canUseRunPaused) {
runningActive = false;
}
if (runningActive) {
if (!runStartEventActive) {
checkEventsOnRunOnSlideStateChange (true);
runStartEventActive = true;
}
runStopEventActive = false;
} else {
if (!runStopEventActive) {
checkEventsOnRunOnSlideStateChange (false);
runStopEventActive = true;
}
runStartEventActive = false;
}
float angle = 0;
if (slideActivatedBySlideZone) {
angle = Vector3.SignedAngle (playerTransformForward, mainSlideTransform.forward, playerTransformUp);
} else {
angle = Vector3.SignedAngle (playerTransformForward, playerCameraTransform.forward, playerTransformUp);
}
currentSlideSpeed = slideSpeed;
if (runningActive) {
currentSlideSpeed = slideSprintSpeed;
}
if (isPlayerMovingOn3dWorld) {
if (localMove.z > 0) {
currentSlideSpeed += localMove.z * slideVerticalSpeed;
}
currentSlideSpeed += Mathf.Abs (localMove.x) * slideHorizontalSpeed;
if (!runningActive) {
if (localMove.z < 0) {
currentSlideSpeed += slideSlowDownSped * localMove.z;
}
}
} else {
float currentLocalMoveX = localMove.x;
bool isPlayerLookingAtRightOn2_5d = mainPlayerController.isPlayerLookingAtRightOn2_5d ();
if (!isPlayerLookingAtRightOn2_5d) {
currentLocalMoveX *= (-1);
}
if (currentLocalMoveX > 0) {
currentSlideSpeed += currentLocalMoveX * slideVerticalSpeed;
}
if (!runningActive) {
if (currentLocalMoveX < 0) {
currentSlideSpeed += slideSlowDownSped * currentLocalMoveX;
}
}
}
currentSlideSpeed *= slideSpeedMultiplier;
if (!adhereToSurfacesActive) {
if (changeSpeedBasedOnSurfaceAngle) {
float surfaceAngle = Vector3.SignedAngle (playerTransformUp, currentSurfaceNormal, playerTransform.right);
float surfaceAngleABS = Mathf.Abs (surfaceAngle);
if (surfaceAngleABS > minAngleToIncreaseSpeed) {
currentSlideSpeed += speedOnSurfaceAngleMultiplier * surfaceAngleABS;
}
}
if (stopSlideIfSurfaceAngleTooLow) {
if (Mathf.Abs (angle) < minAngleToStopSlide) {
currentSlideSpeed = mainRigidbody.linearVelocity.magnitude / 2;
if (currentSlideSpeed < 0.5f) {
setCheckIfDetectSlideActiveState (false, false);
return;
}
}
}
}
Debug.DrawRay (currentRaycastPosition, currentRaycastDirection * 3, Color.yellow);
if (Physics.Raycast (currentRaycastPosition, currentRaycastDirection, out hit, slideActiveRaycastDistance, raycastLayermask)) {
slideHit = hit;
currentMovementDirection = slideHit.point;
mainRigidbody.position = Vector3.MoveTowards (mainRigidbody.position, currentMovementDirection, currentFixedUpdateDeltaTime * currentSlideSpeed);
currentSurfaceNormal = hit.normal;
} else {
stopSlide ();
}
if (stopSlideIfObstacleDetected && manualSlideActive) {
currentRaycastPosition = playerTransform.position + playerTransformUp;
currentRaycastDirection = playerTransformForward;
if (Physics.Raycast (currentRaycastPosition, currentRaycastDirection, out hit,
slideActiveRaycastDistance, obstacleLayermask)) {
if (hit.rigidbody == null) {
if (lastTimeObstacleDetected == 0) {
lastTimeObstacleDetected = Time.time;
}
}
} else {
lastTimeObstacleDetected = 0;
}
if (lastTimeObstacleDetected > 0) {
if (Time.time > lastTimeObstacleDetected + 1) {
setCheckIfDetectSlideActiveState (false, false);
return;
}
}
}
mainPlayerController.setCurrentVelocityValue (mainRigidbody.linearVelocity);
targetRotation = angle;
if (!mainPlayerCamera.isFullBodyAwarenessActive () && isPlayerMovingOn3dWorld) {
if (Mathf.Abs (targetRotation) > 0.001f) {
playerTransform.Rotate (0, targetRotation * slideRotationSpeed * currentFixedUpdateDeltaTime, 0);
}
}
if (mainPlayerController.updateHeadbobState) {
mainPlayerController.setCurrentHeadBobState ();
}
if (adhereToSurfacesActive) {
updateGravityValues ();
}
if (manualSlideActive) {
if (stopManualSlideAfterTimeDelay) {
if (Time.time > timeDelayToStopManualSlide + lastTimeSlideActive) {
setCheckIfDetectSlideActiveState (false, false);
manualSlideActive = false;
}
}
}
} else {
if (checkIfDetectSlideActive) {
if (slideEnabled && sliderCanBeUsed && !mainPlayerController.useFirstPersonPhysicsInThirdPersonActive) {
if (!slideActive && !mainPlayerController.pauseAllPlayerDownForces && !mainPlayerController.ignoreExternalActionsActiveState) {
if (Time.time > lastTimeSlideActive + 1) {
playerTransformUp = playerTransform.up;
Vector3 currentRaycastPosition = playerTransform.position + playerTransformUp;
Vector3 currentRaycastDirection = -playerTransformUp;
if (Physics.Raycast (currentRaycastPosition, currentRaycastDirection, out hit, raycastDistance, raycastLayermask)) {
setSlideActiveState (true);
} else {
if (lastTimeGroundDetected == 0) {
lastTimeGroundDetected = Time.time;
}
}
if (lastTimeGroundDetected > 0) {
if (Time.time > lastTimeGroundDetected + minWaitTimeToSlideCheckSlideActive) {
if (showDebugPrint) {
print ("Stop check if detect slide due to being on air enough time");
}
setCheckIfDetectSlideActiveState (false, false);
return;
}
}
}
}
}
}
}
}
void updateGravityValues ()
{
Vector3 currentNormal = mainGravitySystem.getCurrentNormal ();
//recalculate the rotation of the player and the camera according to the normal of the surface under the player
currentNormal = Vector3.Lerp (currentNormal, currentSurfaceNormal, adhereToSurfacesRotationSpeed * Time.deltaTime);
Vector3 myForward = Vector3.Cross (playerTransform.right, currentNormal);
Quaternion dstRot = Quaternion.LookRotation (myForward, currentNormal);
playerTransform.rotation = Quaternion.Lerp (playerTransform.rotation, dstRot, adhereToSurfacesRotationSpeed * Time.deltaTime);
Vector3 myForwardCamera = Vector3.Cross (playerCameraTransform.right, currentNormal);
Quaternion dstRotCamera = Quaternion.LookRotation (myForwardCamera, currentNormal);
playerCameraTransform.rotation = Quaternion.Lerp (playerCameraTransform.rotation, dstRotCamera, adhereToSurfacesRotationSpeed * Time.deltaTime);
mainGravitySystem.setCurrentNormal (currentNormal);
mainGravitySystem.updateCurrentRotatingNormal (currentNormal);
//set the normal in the playerController component
mainPlayerController.setCurrentNormalCharacter (currentNormal);
}
public override void setExtraImpulseForce (Vector3 forceAmount, bool useCameraDirection)
{
setSlideImpulseForce (forceAmount, useCameraDirection);
}
public void setSlideImpulseForce (Vector3 forceAmount, bool useCameraDirection)
{
Vector3 impulseForce = forceAmount;
if (maxVelocityChangeSlide > 0) {
velocityChange = impulseForce - mainRigidbody.linearVelocity;
velocityChange = Vector3.ClampMagnitude (velocityChange, maxVelocityChangeSlide);
} else {
velocityChange = impulseForce;
}
mainPlayerController.setVelocityChangeValue (velocityChange);
mainRigidbody.AddForce (velocityChange, ForceMode.VelocityChange);
}
public override void setJumpActiveForExternalForce ()
{
setJumpActive (impulseOnJump);
}
public void setJumpActive (Vector3 newImpulseOnJumpAmount)
{
if (slideActive) {
jumpInputUsed = true;
setSlideActiveState (false);
Vector3 totalForce = newImpulseOnJumpAmount.y * playerTransform.up + newImpulseOnJumpAmount.z * playerTransform.forward;
mainPlayerController.useJumpPlatform (totalForce, ForceMode.Impulse);
if (!slideActivatedBySlideZone) {
setCheckIfDetectSlideActiveState (false, false);
}
}
}
public override void setExternalForceActiveState (bool state)
{
setSlideActiveState (state);
}
public void setCheckIfDetectSlideActiveState (bool state, bool slideActivatedBySlideZoneValue)
{
if (mainPlayerController.isUseExternalControllerBehaviorPaused ()) {
return;
}
if (state) {
currentSlideZonesAmountDetected++;
} else {
currentSlideZonesAmountDetected--;
if (currentSlideZonesAmountDetected < 0) {
currentSlideZonesAmountDetected = 0;
}
if (currentSlideZonesAmountDetected > 0) {
if (showDebugPrint) {
print ("more slide zones detected, cancelling the change to regular state");
}
return;
}
}
if (checkIfDetectSlideActive == state) {
return;
}
if (state) {
externalControllerBehavior currentExternalControllerBehavior = mainPlayerController.getCurrentExternalControllerBehavior ();
if (currentExternalControllerBehavior != null && currentExternalControllerBehavior != this) {
if (canBeActivatedIfOthersBehaviorsActive && checkIfCanEnableBehavior (currentExternalControllerBehavior.behaviorName)) {
currentExternalControllerBehavior.disableExternalControllerState ();
} else {
currentSlideZonesAmountDetected = 0;
return;
}
}
}
slideActivatedBySlideZone = slideActivatedBySlideZoneValue;
bool checkIfDetectSlideActivePrevioulsy = checkIfDetectSlideActive;
checkIfDetectSlideActive = state;
if (checkIfDetectSlideActive) {
mainPlayerController.setExternalControllerBehavior (this);
} else {
if (checkIfDetectSlideActivePrevioulsy) {
externalControllerBehavior currentExternalControllerBehavior = mainPlayerController.getCurrentExternalControllerBehavior ();
if (currentExternalControllerBehavior == null || currentExternalControllerBehavior == this) {
mainPlayerController.setExternalControllerBehavior (null);
}
}
}
mainPlayerController.setFallDamageCheckPausedState (state);
if (!checkIfDetectSlideActive) {
setSlideActiveState (false);
}
}
public void setSlideActiveState (bool state)
{
if (!slideEnabled) {
return;
}
if (slideActive == state) {
return;
}
slideActive = state;
setBehaviorCurrentlyActiveState (state);
setCurrentPlayerActionSystemCustomActionCategoryID ();
mainPlayerController.setAddExtraRotationPausedState (state);
mainPlayerController.setExternalControlBehaviorForAirTypeActiveState (state);
isPlayerMovingOn3dWorld = mainPlayerController.isPlayerMovingOn3dWorld ();
if (state) {
mainPlayerController.setCheckOnGroungPausedState (true);
mainPlayerController.setPlayerOnGroundState (false);
mainPlayerController.setPlayerOnGroundAnimatorStateOnOverrideOnGroundWithTime (false);
mainPlayerController.overrideOnGroundAnimatorValue (0);
mainPlayerController.setPlayerOnGroundAnimatorStateOnOverrideOnGround (false);
mainPlayerController.setOnGroundAnimatorIDValue (false);
} else {
mainPlayerController.setCheckOnGroungPausedState (false);
mainPlayerController.setPlayerOnGroundState (false);
mainPlayerController.setPlayerOnGroundAnimatorStateOnOverrideOnGroundWithTime (true);
mainPlayerController.disableOverrideOnGroundAnimatorValue ();
mainPlayerController.setPauseResetAnimatorStateFOrGroundAnimatorState (true);
if (jumpInputUsed) {
mainPlayerController.setOnGroundAnimatorIDValue (false);
} else {
if (mainPlayerController.getCurrentSurfaceBelowPlayer () != null) {
mainPlayerController.setPlayerOnGroundState (true);
mainPlayerController.setOnGroundAnimatorIDValue (true);
}
}
}
mainPlayerController.setFootStepManagerState (state);
if (showDebugPrint) {
print ("Slide active state " + state);
}
isFirstPersonActive = mainPlayerController.isPlayerOnFirstPerson ();
if (slideActive) {
checkEventsOnStateChange (true);
if (!isFirstPersonActive) {
animationStandingResult = true;
if (manualSlideActive) {
animationStandingResult = useSlideStandingActionIDOnManualSlide;
} else {
animationStandingResult = useSlideStandingActionIDOnTriggerSlide;
}
if (animationStandingResult) {
mainAnimator.SetInteger (actionIDAnimatorID, slideStandingActionID);
} else {
mainAnimator.SetInteger (actionIDAnimatorID, actionID);
}
mainAnimator.SetBool (externalControlleBehaviorActiveAnimatorID, state);
}
mainPlayerController.setJumpsAmountValue (0);
mainPlayerCamera.enableOrDisableChangeCameraView (false);
if (!isFirstPersonActive) {
if (keepWeapons) {
carryingWeaponsPreviously = mainPlayerWeaponsManager.isPlayerCarringWeapon ();
if (carryingWeaponsPreviously) {
mainPlayerWeaponsManager.checkIfDisableCurrentWeapon ();
}
mainPlayerWeaponsManager.setGeneralWeaponsInputActiveState (false);
}
if (setNewAimWeaponCameraState && !mainPlayerCamera.isFullBodyAwarenessActive ()) {
if (defaultThirdPersonStateName == "") {
defaultThirdPersonStateName = mainPlayerCamera.getDefaultThirdPersonStateName ();
mainPlayerCamera.setDefaultThirdPersonStateName (newCameraState);
}
if (!animationStandingResult) {
mainPlayerCamera.setUseCustomThirdPersonAimActivePausedState (true);
mainPlayerCamera.setUseCustomThirdPersonAimActiveState (true,
customDefaultThirdPersonAimRightStateName, customDefaultThirdPersonAimLeftStateName);
}
}
}
resetAnimatorIDValue = true;
} else {
checkEventsOnStateChange (false);
if (!isFirstPersonActive) {
mainAnimator.SetBool (externalControlleBehaviorActiveAnimatorID, state);
mainAnimator.SetInteger (actionIDAnimatorID, 0);
}
mainPlayerCamera.setOriginalchangeCameraViewEnabledValue ();
if (keepWeapons) {
mainPlayerWeaponsManager.setGeneralWeaponsInputActiveState (true);
}
if (setNewAimWeaponCameraState) {
if (defaultThirdPersonStateName != "") {
mainPlayerCamera.setDefaultThirdPersonStateName (defaultThirdPersonStateName);
defaultThirdPersonStateName = "";
}
if (!animationStandingResult) {
mainPlayerCamera.setUseCustomThirdPersonAimActivePausedState (false);
mainPlayerCamera.setUseCustomThirdPersonAimActiveState (false, "", "");
}
}
if (carryingWeaponsPreviously) {
if (!drawWeaponsIfCarriedPreviously) {
carryingWeaponsPreviously = false;
}
}
resetAnimatorIDValue = false;
}
mainPlayerCamera.setPausePlayerCameraViewChangeState (slideActive);
mainPlayerController.setLastTimeFalling ();
if (!animationStandingResult) {
if (mainHeadTrack != null) {
mainHeadTrack.setHeadTrackSmoothPauseState (slideActive);
}
}
if (mainPlayerCamera.isFullBodyAwarenessActive ()) {
if (setNewCameraStateOnFBA) {
if (state) {
previousCameraState = mainPlayerCamera.getCurrentStateName ();
mainPlayerCamera.setCameraState (newCameraStateOnFBA);
} else {
if (previousCameraState != "") {
if (previousCameraState != newCameraStateOnFBA) {
mainPlayerCamera.setCameraStateOnlyOnThirdPerson (previousCameraState);
}
previousCameraState = "";
}
}
}
} else {
if (setNewCameraStateOnThirdPerson && !isFirstPersonActive) {
if (state) {
previousCameraState = mainPlayerCamera.getCurrentStateName ();
mainPlayerCamera.setCameraStateOnlyOnThirdPerson (newCameraStateOnThirdPerson);
} else {
if (previousCameraState != "") {
if (previousCameraState != newCameraStateOnThirdPerson) {
mainPlayerCamera.setCameraStateOnlyOnThirdPerson (previousCameraState);
}
previousCameraState = "";
}
}
}
}
if (state) {
originalNormal = mainGravitySystem.getCurrentNormal ();
} else {
checkResetGravityState ();
}
mainPlayerCamera.stopShakeCamera ();
lastTimeSlideActive = Time.time;
targetRotation = 0;
if (runStartEventActive) {
checkEventsOnRunOnSlideStateChange (false);
}
runStartEventActive = false;
runStopEventActive = false;
canUseRunPaused = false;
if (!slideActive) {
if (manualSlideActive) {
if (mainPlayerController.isPlayerRunning () && jumpInputUsed) {
mainPlayerController.forceStopRun ();
}
}
}
jumpInputUsed = false;
lastTimeGroundDetected = 0;
lastTimeObstacleDetected = 0;
}
public override void setExternalForceEnabledState (bool state)
{
setSlideEnabledState (state);
}
public void setSlideEnabledState (bool state)
{
if (!state) {
setSlideActiveState (false);
}
slideEnabled = state;
}
public void setSlideCanBeUsedState (bool state)
{
sliderCanBeUsed = state;
}
public void setSliderEnabledState ()
{
setSlideEnabledState (originalSlideEnabled);
}
public void setOriginalSliderEnabledState ()
{
if (slideActive) {
setCheckIfDetectSlideActiveState (false, false);
}
setSlideEnabledState (originalSlideEnabled);
}
public void setCurrentSlideTransform (Transform newTransform)
{
if (newTransform == null) {
if (currentSlideZonesAmountDetected > 0) {
return;
}
}
currentSlideTransform = newTransform;
}
public void setSlideSpeedMultiplier (float newValue)
{
slideSpeedMultiplier = newValue;
}
public void setManualSlideCanBeEnabledState (bool state)
{
manualSlideCanBeEnabled = state;
}
public void enableCheckIfDetectSlideActiveStateExternally ()
{
if (!manualSlideCanBeEnabled) {
return;
}
if (checkIfDetectSlideActive || slideActivatedBySlideZone) {
return;
}
setCheckIfDetectSlideActiveState (true, false);
manualSlideActive = true;
}
public void disableCheckIfDetectSlideActiveStateExternally ()
{
if (!checkIfDetectSlideActive || slideActivatedBySlideZone) {
return;
}
setCheckIfDetectSlideActiveState (false, false);
manualSlideActive = false;
}
public override void disableExternalControllerState ()
{
setCheckIfDetectSlideActiveState (false, false);
}
public void checkEventsOnStateChange (bool state)
{
if (isFirstPersonActive) {
if (useEventsOnFirstPerson) {
if (state) {
eventOnStartFirstPerson.Invoke ();
} else {
eventOnEndFirstPerson.Invoke ();
}
}
} else {
if (useEventsOnThirdPerson) {
if (state) {
eventOnStartThirdPerson.Invoke ();
} else {
eventOnEndThirdPerson.Invoke ();
}
}
}
}
public void checkEventsOnRunOnSlideStateChange (bool state)
{
if (useEventtsOnRunSlideStateChange) {
if (state) {
eventOnStartRunOnSlide.Invoke ();
} else {
eventOnStopRunOnSlide.Invoke ();
}
}
}
public void setAdhereToSurfacesActiveState (bool state)
{
if (!adhereToSurfacesEnabled) {
return;
}
if (!state) {
if (disableSlideWhenDisablingAdhereState) {
stopSlide ();
}
} else {
if (!adhereToSurfacesActive) {
originalNormal = mainGravitySystem.getCurrentNormal ();
}
}
adhereToSurfacesActive = state;
}
public void setResetGravityDirectionOnSlideExitEnabledState (bool state)
{
resetGravityDirectionOnSlideExitEnabled = state;
}
public void setOriginalResetGravityDirectionOnSlideExitEnabled ()
{
setResetGravityDirectionOnSlideExitEnabledState (originalResetGravityDirectionOnSlideExitEnabled);
}
void checkResetGravityState ()
{
if (adhereToSurfacesActive) {
if (resetGravityDirectionOnSlideExitEnabled) {
if (mainGravitySystem.getCurrentRotatingNormal () != originalNormal && originalNormal != Vector3.zero) {
mainGravitySystem.checkRotateToSurface (originalNormal, 2);
}
}
originalNormal = Vector3.zero;
}
}
void stopSlide ()
{
Vector3 totalForce = Vector3.zero;
if (mainSlideTransform != null) {
totalForce = mainSlideTransform.forward * endOfSurfaceImpulse.z + mainSlideTransform.up * endOfSurfaceImpulse.y;
} else {
totalForce = playerTransform.forward * endOfSurfaceImpulse.z + playerTransform.up * endOfSurfaceImpulse.y;
}
setSlideActiveState (false);
setSlideImpulseForce (totalForce, false);
currentSurfaceNormal = Vector3.zero;
}
public void setCanUseRunPausedState (bool state)
{
canUseRunPaused = state;
}
public override void setCurrentPlayerActionSystemCustomActionCategoryID ()
{
if (behaviorCurrentlyActive) {
if (customActionCategoryID > -1) {
mainPlayerController.setCurrentCustomActionCategoryID (customActionCategoryID);
}
} else {
if (regularActionCategoryID > -1) {
mainPlayerController.setCurrentCustomActionCategoryID (regularActionCategoryID);
}
}
}
public void setSlideEnabledStateFromEditor (bool state)
{
setSlideEnabledState (state);
updateComponent ();
}
public void setManualSlideCanBeEnabledStateFromEditor (bool state)
{
setManualSlideCanBeEnabledState (state);
updateComponent ();
}
void updateComponent ()
{
GKC_Utils.updateComponent (this);
GKC_Utils.updateDirtyScene ("Update Slide System", gameObject);
}
}