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

115 lines
2.8 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ledgeZoneSystem : MonoBehaviour
{
[Header ("Main Settings")]
[Space]
public string tagToCheck;
public bool ledgeZoneActive = true;
public Vector3 checkDownRaycastOffset;
public float climbLedgeForwardRayDistance;
public float climbLedgeDownRayDistance;
[Space]
[Header ("Other Settings")]
[Space]
public bool ledgeZoneCanBeClimbed = true;
public bool avoidPlayerGrabLedge;
public bool canCheckForHangFromLedgeOnGround = true;
public bool onlyHangFromLedgeIfPlayerIsNotMoving = true;
public bool canGrabAnySurfaceOnAirActive = true;
GameObject currentPlayer;
climbLedgeSystem climbLedgeManager;
void OnTriggerEnter (Collider col)
{
checkTriggerInfo (col, true);
}
void OnTriggerExit (Collider col)
{
checkTriggerInfo (col, false);
}
public void checkTriggerInfo (Collider col, bool isEnter)
{
if (!ledgeZoneActive) {
return;
}
if (!col.gameObject.CompareTag (tagToCheck)) {
return;
}
if (isEnter) {
currentPlayer = col.gameObject;
playerComponentsManager mainPlayerComponentsManager = currentPlayer.GetComponent<playerComponentsManager> ();
if (mainPlayerComponentsManager != null) {
climbLedgeManager = mainPlayerComponentsManager.getClimbLedgeSystem ();
}
if (climbLedgeManager == null) {
return;
}
if (avoidPlayerGrabLedge) {
climbLedgeManager.setAvoidPlayerGrabLedgeValue (true);
return;
}
climbLedgeManager.setLedgeZoneFoundState (true);
climbLedgeManager.setNewRaycastDistance (climbLedgeForwardRayDistance, climbLedgeDownRayDistance, checkDownRaycastOffset);
climbLedgeManager.setCanClimbCurrentLedgeZoneState (ledgeZoneCanBeClimbed);
climbLedgeManager.setCanCheckForHangFromLedgeOnGroundState (canCheckForHangFromLedgeOnGround);
climbLedgeManager.setOnlyHangFromLedgeIfPlayerIsNotMovingValue (onlyHangFromLedgeIfPlayerIsNotMoving);
climbLedgeManager.setCanGrabAnySurfaceOnAirActiveState (canGrabAnySurfaceOnAirActive);
} else {
currentPlayer = col.gameObject;
playerComponentsManager mainPlayerComponentsManager = currentPlayer.GetComponent<playerComponentsManager> ();
if (mainPlayerComponentsManager != null) {
climbLedgeManager = mainPlayerComponentsManager.getClimbLedgeSystem ();
}
if (climbLedgeManager == null) {
return;
}
if (avoidPlayerGrabLedge) {
climbLedgeManager.setAvoidPlayerGrabLedgeValue (false);
return;
}
climbLedgeManager.setLedgeZoneFoundState (false);
climbLedgeManager.setOriginalRaycastDistance ();
climbLedgeManager.setCanClimbCurrentLedgeZoneState (true);
climbLedgeManager.setCanCheckForHangFromLedgeOnGroundState (true);
climbLedgeManager.setOnlyHangFromLedgeIfPlayerIsNotMovingOriginalValue ();
climbLedgeManager.setCanGrabAnySurfaceOnAirActiveState (true);
}
}
}