Files
FueraDeEscala/Assets/Game Kit Controller/Scripts/Ladder System/ladderSystem.cs

181 lines
3.9 KiB
C#
Raw Normal View History

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class ladderSystem : MonoBehaviour
{
[Header ("Main Settings")]
[Space]
public string tagToCheck;
public bool ladderActive = true;
public bool useLadderHorizontalMovement = true;
public bool moveInLadderCenter;
public bool useLocalMovementDirection;
public bool jumpOnThirdPersonEnabled = true;
public bool jumpOnFirstPersonEnabled = true;
[Space]
[Header ("FBA Settings")]
[Space]
public bool canUseSimpleLaddersOnFBA;
public bool useExtraFollowTransformPositionOffsetActiveFBA;
public Vector3 extraFollowTransformPositionOffsetFBA;
public bool changeViewToFBADuringLadderUsage;
[Space]
[Header ("Events Settings")]
[Space]
public bool useEventsEnterExitLadder;
public eventParameters.eventToCallWithGameObject eventToSendCurrentPlayerOnEnter;
public eventParameters.eventToCallWithGameObject eventToSendCurrentPlayerOnExit;
[Space]
public bool useEventsOnJump;
public UnityEvent eventOnJump;
[Space]
[Header ("Gizmo Settings")]
[Space]
public bool showGizmo = true;
public Color gizmoColor = Color.red;
public float gizmoLength = 4;
[Space]
[Header ("Components")]
[Space]
public Transform ladderDirectionTransform;
public Transform ladderRaycastDirectionTransform;
GameObject currentPlayer;
playerComponentsManager mainPlayerComponentsManager;
playerLadderSystem mainPlayerLadderSystem;
void OnTriggerEnter (Collider col)
{
checkTriggerInfo (col, true);
}
void OnTriggerExit (Collider col)
{
checkTriggerInfo (col, false);
}
public void checkTriggerInfo (Collider col, bool isEnter)
{
if (!ladderActive) {
return;
}
if (!col.gameObject.CompareTag (tagToCheck)) {
return;
}
if (isEnter) {
currentPlayer = col.gameObject;
mainPlayerComponentsManager = currentPlayer.GetComponent<playerComponentsManager> ();
mainPlayerLadderSystem = mainPlayerComponentsManager.getPlayerLadderSystem ();
mainPlayerLadderSystem.setLadderFoundState (true, this);
if (ladderDirectionTransform == null) {
ladderDirectionTransform = transform;
}
if (ladderRaycastDirectionTransform == null) {
ladderRaycastDirectionTransform = transform;
}
mainPlayerLadderSystem.setLadderDirectionTransform (ladderDirectionTransform, ladderRaycastDirectionTransform);
mainPlayerLadderSystem.setLadderHorizontalMovementState (useLadderHorizontalMovement);
mainPlayerLadderSystem.setMoveInLadderCenterState (moveInLadderCenter);
mainPlayerLadderSystem.setUseLocalMovementDirectionState (useLocalMovementDirection);
if (useEventsEnterExitLadder) {
eventToSendCurrentPlayerOnEnter.Invoke (currentPlayer);
}
} else {
currentPlayer = col.gameObject;
mainPlayerComponentsManager = currentPlayer.GetComponent<playerComponentsManager> ();
mainPlayerLadderSystem = mainPlayerComponentsManager.getPlayerLadderSystem ();
mainPlayerLadderSystem.setLadderFoundState (false, this);
if (useEventsEnterExitLadder) {
eventToSendCurrentPlayerOnExit.Invoke (currentPlayer);
}
}
}
public void checkEventOnJump ()
{
if (useEventsOnJump) {
eventOnJump.Invoke ();
}
}
public bool isJumpOnThirdPersonEnabled ()
{
return jumpOnThirdPersonEnabled;
}
public bool isJumpOnFirstPersonEnabled ()
{
return jumpOnFirstPersonEnabled;
}
//EDITOR FUNCTIONS
#if UNITY_EDITOR
void OnDrawGizmos ()
{
if (!showGizmo) {
return;
}
if (GKC_Utils.isCurrentSelectionActiveGameObject (gameObject)) {
DrawGizmos ();
}
}
void OnDrawGizmosSelected ()
{
DrawGizmos ();
}
void DrawGizmos ()
{
if (showGizmo) {
if (ladderDirectionTransform != null) {
GKC_Utils.drawGizmoArrow (transform.position - ladderDirectionTransform.forward * gizmoLength, ladderDirectionTransform.forward * gizmoLength, gizmoColor, 1, 20);
GKC_Utils.drawGizmoArrow (transform.position, transform.up * gizmoLength, gizmoColor, 1, 20);
}
}
}
#endif
}