add ckg
plantilla base para movimiento básico
This commit is contained in:
@@ -0,0 +1,532 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
|
||||
public class hideCharacterFixedPlaceSystem : MonoBehaviour
|
||||
{
|
||||
[Header ("Main Settings")]
|
||||
[Space]
|
||||
|
||||
public bool cameraCanRotate = true;
|
||||
public float rotationSpeed = 10;
|
||||
public Vector2 rangeAngleX = new Vector2 (-90, 90);
|
||||
public Vector2 rangeAngleY = new Vector2 (-90, 90);
|
||||
public bool useSpringRotation;
|
||||
public float springRotationDelay = 1;
|
||||
public float smoothCameraRotationSpeed = 5;
|
||||
|
||||
public bool cameraCanMove = true;
|
||||
public float moveCameraSpeed = 10;
|
||||
public float smoothMoveCameraSpeed = 5;
|
||||
public Vector2 moveCameraLimitsX = new Vector2 (-2, 2);
|
||||
public Vector2 moveCameraLimitsY = new Vector2 (-2, 2);
|
||||
|
||||
public bool useSpringMovement;
|
||||
public float springMovementDelay = 1;
|
||||
|
||||
public bool checkIfDetectedWhileHidden;
|
||||
|
||||
public bool setHiddenFov;
|
||||
public float hiddenFov = 20;
|
||||
public bool zoomEnabled;
|
||||
public float zoomSpeed = 10;
|
||||
public float maxZoom = 10;
|
||||
public float minZoom = 90;
|
||||
|
||||
public Transform cameraTransform;
|
||||
public Transform pivotTransform;
|
||||
public Transform cameraPositionTransform;
|
||||
|
||||
public float hideEventDelay;
|
||||
public float visibleEventDelay;
|
||||
|
||||
public bool canResetCameraRotation = true;
|
||||
public bool canResetCameraPosition = true;
|
||||
|
||||
[Space]
|
||||
[Header ("Other Settings")]
|
||||
[Space]
|
||||
|
||||
public bool useCharacterStateIcon = true;
|
||||
public string visibleCharacterStateName = "Visible";
|
||||
public string notVisibleCharacterStateName = "Not Visible";
|
||||
|
||||
public bool activateActionScreen = true;
|
||||
public string actionScreenName = "Use Hide System";
|
||||
|
||||
public bool useMessageWhenUnableToHide;
|
||||
[TextArea (1, 10)] public string unableToHideMessage;
|
||||
public float showMessageTime;
|
||||
|
||||
[Space]
|
||||
[Header ("Events Settings")]
|
||||
[Space]
|
||||
|
||||
public UnityEvent hidenEvent = new UnityEvent ();
|
||||
public UnityEvent visbleEvent = new UnityEvent ();
|
||||
|
||||
[Space]
|
||||
[Header ("Debug")]
|
||||
[Space]
|
||||
|
||||
public bool hidingCharacter;
|
||||
|
||||
[Space]
|
||||
[Header ("Components")]
|
||||
[Space]
|
||||
|
||||
public moveCameraToDevice moveCameraManager;
|
||||
public electronicDevice electronicDeviceManager;
|
||||
|
||||
[Space]
|
||||
[Header ("Gizmo Settings")]
|
||||
[Space]
|
||||
|
||||
public bool showGizmo;
|
||||
public Color gizmoColor;
|
||||
public float arcGizmoRadius;
|
||||
public float gizmoArrowLength = 1;
|
||||
public float gizmoArrowAngle = 20;
|
||||
public Color gizmoArrowColor = Color.white;
|
||||
|
||||
float originalCameraRotationX;
|
||||
float originalPivotRotationY;
|
||||
Quaternion currentCameraRotation;
|
||||
Quaternion currentPivotRotation;
|
||||
GameObject currentPlayer;
|
||||
|
||||
Vector2 currentLookAngle;
|
||||
float lastTimeSpringRotation;
|
||||
|
||||
playerController playerControllerManager;
|
||||
playerCamera playerCameraManager;
|
||||
|
||||
playerInputManager playerInput;
|
||||
playerComponentsManager mainPlayerComponentsManager;
|
||||
playerStatesManager statesManager;
|
||||
|
||||
characterFactionManager currentfactionManager;
|
||||
usingDevicesSystem devicesManager;
|
||||
|
||||
Collider currentPlayerCollider;
|
||||
|
||||
hideCharacterFixedPlaceSystemPlayerManagement hideCharacterFixedPlaceSystemPlayerManager;
|
||||
|
||||
Vector3 currentMoveCameraPosition;
|
||||
Vector3 originalCameraLocalPosition;
|
||||
Vector3 currentCameraMovementPosition;
|
||||
float lastTimeSpringMovement;
|
||||
bool characterIsDetected;
|
||||
|
||||
float horizontalMouse;
|
||||
float verticalMouse;
|
||||
float horizontalInput;
|
||||
float verticalInput;
|
||||
Coroutine eventCoroutine;
|
||||
|
||||
bool increaseZoom;
|
||||
bool decreaseZoom;
|
||||
float currentFovValue;
|
||||
Camera mainCamera;
|
||||
|
||||
float lastTimeMouseWheelUsed;
|
||||
bool mouseWheelUsedPreviously;
|
||||
Vector2 axisValues;
|
||||
|
||||
bool currentPlayerCameraIsFree;
|
||||
|
||||
bool characterFoundInsideHidePlace;
|
||||
|
||||
void Start ()
|
||||
{
|
||||
originalCameraRotationX = cameraTransform.localRotation.eulerAngles.x;
|
||||
originalPivotRotationY = pivotTransform.localRotation.eulerAngles.y;
|
||||
|
||||
if (electronicDeviceManager == null) {
|
||||
electronicDeviceManager = GetComponent<electronicDevice> ();
|
||||
}
|
||||
|
||||
if (moveCameraManager == null) {
|
||||
moveCameraManager = GetComponent<moveCameraToDevice> ();
|
||||
}
|
||||
|
||||
originalCameraLocalPosition = pivotTransform.localPosition;
|
||||
}
|
||||
|
||||
void FixedUpdate ()
|
||||
{
|
||||
if (hidingCharacter) {
|
||||
if (checkIfDetectedWhileHidden && !characterFoundInsideHidePlace) {
|
||||
characterFoundInsideHidePlace = currentfactionManager.isCharacterDetectedAsEnemyByOtherFaction (currentPlayer);
|
||||
|
||||
if (characterFoundInsideHidePlace) {
|
||||
devicesManager.inputActivateDevice ();
|
||||
|
||||
characterFoundInsideHidePlace = false;
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (currentPlayerCameraIsFree && !moveCameraManager.isCameraMoving ()) {
|
||||
axisValues = playerInput.getPlayerMouseAxis ();
|
||||
horizontalMouse = axisValues.x;
|
||||
verticalMouse = axisValues.y;
|
||||
|
||||
if (cameraCanRotate) {
|
||||
currentLookAngle.x += horizontalMouse * rotationSpeed;
|
||||
currentLookAngle.y -= verticalMouse * rotationSpeed;
|
||||
|
||||
currentLookAngle.x = Mathf.Clamp (currentLookAngle.x, rangeAngleY.x, rangeAngleY.y);
|
||||
|
||||
currentLookAngle.y = Mathf.Clamp (currentLookAngle.y, rangeAngleX.x, rangeAngleX.y);
|
||||
|
||||
currentCameraRotation = Quaternion.Euler (originalCameraRotationX + currentLookAngle.y, 0, 0);
|
||||
|
||||
currentPivotRotation = Quaternion.Euler (0, originalPivotRotationY + currentLookAngle.x, 0);
|
||||
}
|
||||
|
||||
if (useSpringRotation && canResetCameraRotation) {
|
||||
if (horizontalMouse != 0 || verticalMouse != 0) {
|
||||
lastTimeSpringRotation = Time.time;
|
||||
}
|
||||
|
||||
if (Time.time > lastTimeSpringRotation + springRotationDelay) {
|
||||
currentCameraRotation = Quaternion.Euler (originalCameraRotationX, 0, 0);
|
||||
currentPivotRotation = Quaternion.Euler (0, originalPivotRotationY, 0);
|
||||
currentLookAngle = Vector2.zero;
|
||||
}
|
||||
}
|
||||
|
||||
cameraTransform.localRotation = Quaternion.Lerp (cameraTransform.localRotation, currentCameraRotation, Time.deltaTime * smoothCameraRotationSpeed);
|
||||
|
||||
pivotTransform.localRotation = Quaternion.Lerp (pivotTransform.localRotation, currentPivotRotation, Time.deltaTime * smoothCameraRotationSpeed);
|
||||
|
||||
axisValues = playerInput.getPlayerMovementAxis ();
|
||||
horizontalInput = axisValues.x;
|
||||
verticalInput = axisValues.y;
|
||||
|
||||
if (cameraCanMove) {
|
||||
currentMoveCameraPosition.x += horizontalInput * moveCameraSpeed;
|
||||
currentMoveCameraPosition.y += verticalInput * moveCameraSpeed;
|
||||
|
||||
currentMoveCameraPosition.x = Mathf.Clamp (currentMoveCameraPosition.x, moveCameraLimitsX.x, moveCameraLimitsX.y);
|
||||
|
||||
currentMoveCameraPosition.y = Mathf.Clamp (currentMoveCameraPosition.y, moveCameraLimitsY.x, moveCameraLimitsY.y);
|
||||
|
||||
Vector3 moveInput = currentMoveCameraPosition.x * Vector3.right + currentMoveCameraPosition.y * Vector3.up;
|
||||
|
||||
currentCameraMovementPosition = originalCameraLocalPosition + moveInput;
|
||||
}
|
||||
|
||||
if (useSpringMovement && canResetCameraPosition) {
|
||||
if (horizontalInput != 0 || verticalInput != 0) {
|
||||
lastTimeSpringMovement = Time.time;
|
||||
}
|
||||
|
||||
if (Time.time > lastTimeSpringMovement + springMovementDelay) {
|
||||
currentCameraMovementPosition = originalCameraLocalPosition;
|
||||
currentMoveCameraPosition = Vector3.zero;
|
||||
}
|
||||
}
|
||||
|
||||
pivotTransform.localPosition = Vector3.MoveTowards (pivotTransform.localPosition, currentCameraMovementPosition, Time.deltaTime * smoothMoveCameraSpeed);
|
||||
|
||||
if (zoomEnabled) {
|
||||
|
||||
if (mouseWheelUsedPreviously && Time.time > lastTimeMouseWheelUsed + 0.1f) {
|
||||
increaseZoom = false;
|
||||
decreaseZoom = false;
|
||||
mouseWheelUsedPreviously = false;
|
||||
}
|
||||
|
||||
if (increaseZoom) {
|
||||
currentFovValue -= Time.deltaTime * zoomSpeed;
|
||||
}
|
||||
|
||||
if (decreaseZoom) {
|
||||
currentFovValue += Time.deltaTime * zoomSpeed;
|
||||
}
|
||||
|
||||
currentFovValue = Mathf.Clamp (currentFovValue, maxZoom, minZoom);
|
||||
|
||||
if (playerCameraManager.isFOVChanging ()) {
|
||||
currentFovValue = mainCamera.fieldOfView;
|
||||
} else {
|
||||
mainCamera.fieldOfView = currentFovValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void enableOrDisableHideState ()
|
||||
{
|
||||
if (characterIsDetected) {
|
||||
return;
|
||||
}
|
||||
|
||||
hidingCharacter = !hidingCharacter;
|
||||
|
||||
if (hidingCharacter) {
|
||||
setCurrentPlayer (electronicDeviceManager.getCurrentPlayer ());
|
||||
}
|
||||
|
||||
if (playerCameraManager.isCameraTypeFree ()) {
|
||||
if (hidingCharacter) {
|
||||
if (setHiddenFov) {
|
||||
playerCameraManager.setMainCameraFov (hiddenFov, zoomSpeed);
|
||||
}
|
||||
} else {
|
||||
playerCameraManager.setOriginalCameraFov ();
|
||||
}
|
||||
|
||||
currentPlayerCameraIsFree = true;
|
||||
} else {
|
||||
currentPlayerCameraIsFree = false;
|
||||
}
|
||||
|
||||
playerControllerManager.setVisibleToAIState (!hidingCharacter);
|
||||
|
||||
if (hidingCharacter) {
|
||||
statesManager.checkPlayerStates ();
|
||||
}
|
||||
|
||||
if (!checkIfDetectedWhileHidden) {
|
||||
currentPlayerCollider.enabled = !hidingCharacter;
|
||||
}
|
||||
|
||||
setCharacterState ();
|
||||
|
||||
callUnityEvents ();
|
||||
|
||||
resetCameraInputValues ();
|
||||
|
||||
if (hideCharacterFixedPlaceSystemPlayerManager) {
|
||||
hideCharacterFixedPlaceSystemPlayerManager.setPlayerHidingState (hidingCharacter);
|
||||
}
|
||||
|
||||
if (activateActionScreen) {
|
||||
playerInput.enableOrDisableActionScreen (actionScreenName, hidingCharacter);
|
||||
}
|
||||
}
|
||||
|
||||
public void setCharacterState ()
|
||||
{
|
||||
if (useCharacterStateIcon) {
|
||||
if (hidingCharacter) {
|
||||
playerControllerManager.setCharacterStateIcon (notVisibleCharacterStateName);
|
||||
} else {
|
||||
playerControllerManager.setCharacterStateIcon (visibleCharacterStateName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void callUnityEvents ()
|
||||
{
|
||||
if (eventCoroutine != null) {
|
||||
StopCoroutine (eventCoroutine);
|
||||
}
|
||||
|
||||
eventCoroutine = StartCoroutine (callUnityEventsCoroutine ());
|
||||
}
|
||||
|
||||
IEnumerator callUnityEventsCoroutine ()
|
||||
{
|
||||
if (hidingCharacter) {
|
||||
yield return new WaitForSeconds (hideEventDelay);
|
||||
|
||||
if (hidenEvent.GetPersistentEventCount () > 0) {
|
||||
hidenEvent.Invoke ();
|
||||
}
|
||||
} else {
|
||||
yield return new WaitForSeconds (visibleEventDelay);
|
||||
|
||||
if (visbleEvent.GetPersistentEventCount () > 0) {
|
||||
visbleEvent.Invoke ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void resetCameraInputValues ()
|
||||
{
|
||||
//reset input values and camera and pivot position and rotation
|
||||
horizontalMouse = 0;
|
||||
verticalMouse = 0;
|
||||
currentLookAngle = Vector2.zero;
|
||||
currentCameraRotation = Quaternion.identity;
|
||||
currentPivotRotation = Quaternion.identity;
|
||||
cameraTransform.localRotation = Quaternion.identity;
|
||||
pivotTransform.localRotation = Quaternion.identity;
|
||||
|
||||
horizontalInput = 0;
|
||||
verticalInput = 0;
|
||||
currentMoveCameraPosition = Vector3.zero;
|
||||
currentCameraMovementPosition = Vector3.zero;
|
||||
pivotTransform.localPosition = Vector3.zero;
|
||||
}
|
||||
|
||||
public void changeResetCameraTransfrom ()
|
||||
{
|
||||
canResetCameraRotation = !canResetCameraRotation;
|
||||
canResetCameraPosition = !canResetCameraPosition;
|
||||
lastTimeSpringRotation = 0;
|
||||
lastTimeSpringMovement = 0;
|
||||
}
|
||||
|
||||
public void setCurrentPlayer (GameObject player)
|
||||
{
|
||||
currentPlayer = player;
|
||||
|
||||
if (currentPlayer != null) {
|
||||
mainPlayerComponentsManager = currentPlayer.GetComponent<playerComponentsManager> ();
|
||||
|
||||
playerControllerManager = mainPlayerComponentsManager.getPlayerController ();
|
||||
|
||||
currentPlayerCollider = playerControllerManager.getMainCollider ();
|
||||
|
||||
statesManager = mainPlayerComponentsManager.getPlayerStatesManager ();
|
||||
|
||||
currentfactionManager = mainPlayerComponentsManager.getCharacterFactionManager ();
|
||||
|
||||
devicesManager = mainPlayerComponentsManager.getUsingDevicesSystem ();
|
||||
|
||||
playerCameraManager = mainPlayerComponentsManager.getPlayerCamera ();
|
||||
|
||||
mainCamera = playerCameraManager.getMainCamera ();
|
||||
currentFovValue = mainCamera.fieldOfView;
|
||||
|
||||
playerInput = mainPlayerComponentsManager.getPlayerInputManager ();
|
||||
|
||||
hideCharacterFixedPlaceSystemPlayerManager = mainPlayerComponentsManager.getHideCharacterFixedPlaceSystemPlayerManagement ();
|
||||
|
||||
hideCharacterFixedPlaceSystemPlayerManager.setCurrentFixedHideSystem (this);
|
||||
}
|
||||
}
|
||||
|
||||
public void checkIfDetected ()
|
||||
{
|
||||
if (currentPlayer == null) {
|
||||
setCurrentPlayer (electronicDeviceManager.getCurrentPlayer ());
|
||||
}
|
||||
|
||||
//check if the current character is being searching by an enemy when the character is trying to hide
|
||||
if (currentPlayer != null && !hidingCharacter) {
|
||||
characterIsDetected = currentfactionManager.isCharacterDetectedAsEnemyByOtherFaction (currentPlayer);
|
||||
|
||||
//print ("characterIsDetected " + characterIsDetected);
|
||||
if (characterIsDetected) {
|
||||
electronicDeviceManager.setDeviceCanBeUsedState (false);
|
||||
} else {
|
||||
electronicDeviceManager.setDeviceCanBeUsedState (true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void showUnableToHideMessage ()
|
||||
{
|
||||
//show a message that he can't be hidden until none enemy is searching him
|
||||
if (useMessageWhenUnableToHide && currentPlayer != null) {
|
||||
devicesManager.checkShowObjectMessage (unableToHideMessage, showMessageTime);
|
||||
}
|
||||
}
|
||||
|
||||
//GET INPUT FUNCTIONS
|
||||
public void inputResetCameraTransform ()
|
||||
{
|
||||
if (hidingCharacter && !moveCameraManager.isCameraMoving ()) {
|
||||
changeResetCameraTransfrom ();
|
||||
}
|
||||
}
|
||||
|
||||
public void inputSetIncreaseZoomStateByButton (bool state)
|
||||
{
|
||||
if (hidingCharacter && !moveCameraManager.isCameraMoving () && zoomEnabled) {
|
||||
if (state) {
|
||||
increaseZoom = true;
|
||||
} else {
|
||||
increaseZoom = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void inputSetDecreaseZoomStateByButton (bool state)
|
||||
{
|
||||
if (hidingCharacter && !moveCameraManager.isCameraMoving () && zoomEnabled) {
|
||||
if (state) {
|
||||
decreaseZoom = true;
|
||||
} else {
|
||||
decreaseZoom = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void inputSetZoomValueByMouseWheel (bool state)
|
||||
{
|
||||
if (hidingCharacter && !moveCameraManager.isCameraMoving () && zoomEnabled) {
|
||||
if (state) {
|
||||
lastTimeMouseWheelUsed = Time.time;
|
||||
increaseZoom = true;
|
||||
mouseWheelUsedPreviously = true;
|
||||
} else {
|
||||
lastTimeMouseWheelUsed = Time.time;
|
||||
decreaseZoom = true;
|
||||
mouseWheelUsedPreviously = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void OnDrawGizmos ()
|
||||
{
|
||||
if (!showGizmo) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (GKC_Utils.isCurrentSelectionActiveGameObject (gameObject)) {
|
||||
DrawGizmos ();
|
||||
}
|
||||
}
|
||||
|
||||
void OnDrawGizmosSelected ()
|
||||
{
|
||||
DrawGizmos ();
|
||||
}
|
||||
|
||||
void DrawGizmos ()
|
||||
{
|
||||
if (showGizmo) {
|
||||
Gizmos.color = gizmoColor;
|
||||
|
||||
GKC_Utils.drawGizmoArrow (cameraTransform.position, cameraTransform.right * Mathf.Abs (moveCameraLimitsX.x), gizmoArrowColor, gizmoArrowLength, gizmoArrowAngle);
|
||||
|
||||
GKC_Utils.drawGizmoArrow (cameraTransform.position, -cameraTransform.right * moveCameraLimitsX.y, gizmoArrowColor, gizmoArrowLength, gizmoArrowAngle);
|
||||
|
||||
GKC_Utils.drawGizmoArrow (cameraTransform.position, cameraTransform.up * moveCameraLimitsY.y, gizmoArrowColor, gizmoArrowLength, gizmoArrowAngle);
|
||||
|
||||
GKC_Utils.drawGizmoArrow (cameraTransform.position, -cameraTransform.up * Mathf.Abs (moveCameraLimitsY.x), gizmoArrowColor, gizmoArrowLength, gizmoArrowAngle);
|
||||
|
||||
Gizmos.color = Color.white;
|
||||
|
||||
Gizmos.DrawLine (cameraTransform.position + cameraTransform.right * Mathf.Abs (moveCameraLimitsX.x),
|
||||
cameraTransform.position + cameraTransform.right * Mathf.Abs (moveCameraLimitsX.x) + cameraTransform.up * moveCameraLimitsY.y);
|
||||
Gizmos.DrawLine (cameraTransform.position + cameraTransform.right * Mathf.Abs (moveCameraLimitsX.x) + cameraTransform.up * moveCameraLimitsY.y,
|
||||
cameraTransform.position + cameraTransform.up * moveCameraLimitsY.y);
|
||||
|
||||
Gizmos.DrawLine (cameraTransform.position - cameraTransform.right * moveCameraLimitsX.y,
|
||||
cameraTransform.position - cameraTransform.right * moveCameraLimitsX.y + cameraTransform.up * moveCameraLimitsY.y);
|
||||
Gizmos.DrawLine (cameraTransform.position - cameraTransform.right * moveCameraLimitsX.y + cameraTransform.up * moveCameraLimitsY.y,
|
||||
cameraTransform.position + cameraTransform.up * moveCameraLimitsY.y);
|
||||
|
||||
Gizmos.DrawLine (cameraTransform.position - cameraTransform.right * moveCameraLimitsX.y,
|
||||
cameraTransform.position - cameraTransform.right * moveCameraLimitsX.y + cameraTransform.up * moveCameraLimitsY.x);
|
||||
Gizmos.DrawLine (cameraTransform.position - cameraTransform.right * moveCameraLimitsX.y + cameraTransform.up * moveCameraLimitsY.x,
|
||||
cameraTransform.position + cameraTransform.up * moveCameraLimitsY.x);
|
||||
|
||||
Gizmos.DrawLine (cameraTransform.position + cameraTransform.right * Mathf.Abs (moveCameraLimitsX.x),
|
||||
cameraTransform.position + cameraTransform.right * Mathf.Abs (moveCameraLimitsX.x) + cameraTransform.up * moveCameraLimitsY.x);
|
||||
Gizmos.DrawLine (cameraTransform.position + cameraTransform.right * Mathf.Abs (moveCameraLimitsX.x) + cameraTransform.up * moveCameraLimitsY.x,
|
||||
cameraTransform.position + cameraTransform.up * moveCameraLimitsY.x);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5d78f5550fa1d7142861324a2a2acfb1
|
||||
timeCreated: 1525461559
|
||||
licenseType: Store
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 40995
|
||||
packageName: Game Kit Controller - Shooter Melee Adventure Creator 3D + 2.5D
|
||||
packageVersion: 3.77g
|
||||
assetPath: Assets/Game Kit Controller/Scripts/Hide System/hideCharacterFixedPlaceSystem.cs
|
||||
uploadId: 814740
|
||||
@@ -0,0 +1,122 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
|
||||
public class hideCharacterFixedPlaceSystemPlayerManagement : MonoBehaviour
|
||||
{
|
||||
[Header ("Debug")]
|
||||
[Space]
|
||||
|
||||
public bool playerHiding;
|
||||
|
||||
public bool playerHidingOnFreeZone;
|
||||
|
||||
[Space]
|
||||
|
||||
public hideCharacterFixedPlaceSystem currentFixedHideSystem;
|
||||
|
||||
public hideFromEnemiesSystem currentHideFromEnemiesSystem;
|
||||
|
||||
[Space]
|
||||
[Header ("Events Settings")]
|
||||
[Space]
|
||||
|
||||
public bool useEventsOnStateChange;
|
||||
public UnityEvent evenOnStateEnabled;
|
||||
public UnityEvent eventOnStateDisabled;
|
||||
|
||||
[Space]
|
||||
[Header ("Components")]
|
||||
[Space]
|
||||
|
||||
public GameObject characterGameObject;
|
||||
|
||||
|
||||
public void setPlayerHidingState (bool state)
|
||||
{
|
||||
playerHiding = state;
|
||||
|
||||
checkEventsOnStateChange (playerHiding);
|
||||
}
|
||||
|
||||
public void setCurrentFixedHideSystem (hideCharacterFixedPlaceSystem newFixedHideSystem)
|
||||
{
|
||||
currentFixedHideSystem = newFixedHideSystem;
|
||||
}
|
||||
|
||||
|
||||
//FREE HIDE ZONE FUNCTIONS
|
||||
public void setPlayerHidingOnFreeZoneState (bool state)
|
||||
{
|
||||
playerHidingOnFreeZone = state;
|
||||
}
|
||||
|
||||
public void setCurrentHideFromEnemiesSystem (hideFromEnemiesSystem newHideFromEnemiesSystem)
|
||||
{
|
||||
currentHideFromEnemiesSystem = newHideFromEnemiesSystem;
|
||||
}
|
||||
|
||||
public void removeCurrentHideFromEnemiesSystem ()
|
||||
{
|
||||
if (playerHidingOnFreeZone) {
|
||||
currentHideFromEnemiesSystem.removeCharacterFromHiddenZone (characterGameObject);
|
||||
}
|
||||
}
|
||||
|
||||
//CALL INPUT FUNCTIONS TO CURRENT HIDE SYSTEM
|
||||
public void hideInputResetCameraTransform ()
|
||||
{
|
||||
if (!playerHiding) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (currentFixedHideSystem != null) {
|
||||
currentFixedHideSystem.inputResetCameraTransform ();
|
||||
}
|
||||
}
|
||||
|
||||
public void hideInputSetIncreaseZoomStateByButton (bool state)
|
||||
{
|
||||
if (!playerHiding) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (currentFixedHideSystem != null) {
|
||||
currentFixedHideSystem.inputSetIncreaseZoomStateByButton (state);
|
||||
}
|
||||
}
|
||||
|
||||
public void hideInputSetDecreaseZoomStateByButton (bool state)
|
||||
{
|
||||
if (!playerHiding) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (currentFixedHideSystem != null) {
|
||||
currentFixedHideSystem.inputSetDecreaseZoomStateByButton (state);
|
||||
}
|
||||
}
|
||||
|
||||
public void hideInputSetZoomValueByMouseWheel (bool state)
|
||||
{
|
||||
if (!playerHiding) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (currentFixedHideSystem != null) {
|
||||
currentFixedHideSystem.inputSetZoomValueByMouseWheel (state);
|
||||
}
|
||||
}
|
||||
|
||||
public void checkEventsOnStateChange (bool state)
|
||||
{
|
||||
if (useEventsOnStateChange) {
|
||||
if (state) {
|
||||
evenOnStateEnabled.Invoke ();
|
||||
} else {
|
||||
eventOnStateDisabled.Invoke ();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4ce88fb34f1ac884db1a0b725cac5c89
|
||||
timeCreated: 1548656497
|
||||
licenseType: Store
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 40995
|
||||
packageName: Game Kit Controller - Shooter Melee Adventure Creator 3D + 2.5D
|
||||
packageVersion: 3.77g
|
||||
assetPath: Assets/Game Kit Controller/Scripts/Hide System/hideCharacterFixedPlaceSystemPlayerManagement.cs
|
||||
uploadId: 814740
|
||||
@@ -0,0 +1,312 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class hideFromEnemiesSystem : MonoBehaviour
|
||||
{
|
||||
[Header ("Main Settings")]
|
||||
[Space]
|
||||
|
||||
public LayerMask layerToCharacters;
|
||||
|
||||
public float timeDelayToHidenAgainIfDiscovered;
|
||||
|
||||
public float checkIfCharacterCanBeHiddenAgainRate = 0.5f;
|
||||
|
||||
public bool loseTrackOfPlayerByAIOnTriggerEnterEnabled;
|
||||
public bool reactivatePlayerColliderOnExitTrigger;
|
||||
|
||||
[Space]
|
||||
[Header ("Hide Conditions Settings")]
|
||||
[Space]
|
||||
|
||||
public bool characterNeedToCrouch;
|
||||
|
||||
public float maxMoveAmount;
|
||||
|
||||
public bool characterCantMove;
|
||||
public bool hiddenForATime;
|
||||
public float hiddenForATimeAmount;
|
||||
|
||||
[Space]
|
||||
[Header ("Character State Icon Settings")]
|
||||
[Space]
|
||||
|
||||
public bool useCharacterStateIcon;
|
||||
public string visibleCharacterStateName;
|
||||
public string notVisibleCharacterStateName;
|
||||
|
||||
[Space]
|
||||
[Header ("Debug")]
|
||||
[Space]
|
||||
|
||||
public List<hiddenCharacterInfo> hiddenCharacterInfoList = new List<hiddenCharacterInfo> ();
|
||||
|
||||
public bool charactersOnHiddenList;
|
||||
|
||||
hiddenCharacterInfo currentCharacter;
|
||||
|
||||
|
||||
void Update ()
|
||||
{
|
||||
if (!charactersOnHiddenList) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < hiddenCharacterInfoList.Count; i++) {
|
||||
currentCharacter = hiddenCharacterInfoList [i];
|
||||
|
||||
//if an external action changes the visibility of the character to AI, change its state here too
|
||||
if (currentCharacter.playerControllerManager.isCharacterVisibleToAI ()) {
|
||||
if (currentCharacter.hidden) {
|
||||
currentCharacter.hidden = false;
|
||||
|
||||
if (currentCharacter.factionManager.isCharacterDetectedAsEnemyByOtherFaction (currentCharacter.characterGameObject)) {
|
||||
currentCharacter.lastTimeDiscovered = Time.time;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!currentCharacter.hidden) {
|
||||
if (Time.time > currentCharacter.lastTimeCheckIfCharacterCanBeHiddenAgain + checkIfCharacterCanBeHiddenAgainRate) {
|
||||
if (currentCharacter.factionManager.isCharacterDetectedAsEnemyByOtherFaction (currentCharacter.characterGameObject)) {
|
||||
if (currentCharacter.canBeHidden) {
|
||||
setCharacterState (visibleCharacterStateName, i);
|
||||
|
||||
currentCharacter.playerControllerManager.setVisibleToAIState (true);
|
||||
|
||||
currentCharacter.canBeHidden = false;
|
||||
}
|
||||
} else if (Time.time > currentCharacter.lastTimeDiscovered + timeDelayToHidenAgainIfDiscovered && currentCharacter.canBeHidden) {
|
||||
currentCharacter.playerControllerManager.setVisibleToAIState (false);
|
||||
|
||||
currentCharacter.hidden = true;
|
||||
|
||||
currentCharacter.lastTimeHidden = Time.time;
|
||||
|
||||
setCharacterState (notVisibleCharacterStateName, i);
|
||||
|
||||
if (loseTrackOfPlayerByAIOnTriggerEnterEnabled) {
|
||||
GKC_Utils.removeTargetFromAIEnemyList (currentCharacter.characterGameObject);
|
||||
}
|
||||
}
|
||||
|
||||
currentCharacter.lastTimeCheckIfCharacterCanBeHiddenAgain = Time.time;
|
||||
}
|
||||
}
|
||||
|
||||
if (characterNeedToCrouch) {
|
||||
if (currentCharacter.playerControllerManager.isCrouching ()) {
|
||||
if (!currentCharacter.hidden) {
|
||||
if (!currentCharacter.factionManager.isCharacterDetectedAsEnemyByOtherFaction (currentCharacter.characterGameObject)) {
|
||||
currentCharacter.playerControllerManager.setVisibleToAIState (false);
|
||||
|
||||
currentCharacter.hidden = true;
|
||||
|
||||
currentCharacter.canBeHidden = true;
|
||||
|
||||
currentCharacter.lastTimeHidden = Time.time;
|
||||
|
||||
setCharacterState (notVisibleCharacterStateName, i);
|
||||
|
||||
if (loseTrackOfPlayerByAIOnTriggerEnterEnabled) {
|
||||
GKC_Utils.removeTargetFromAIEnemyList (currentCharacter.characterGameObject);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (currentCharacter.hidden) {
|
||||
currentCharacter.playerControllerManager.setVisibleToAIState (true);
|
||||
currentCharacter.hidden = false;
|
||||
|
||||
currentCharacter.lastTimeDiscovered = Time.time;
|
||||
|
||||
setCharacterState (visibleCharacterStateName, i);
|
||||
|
||||
currentCharacter.canBeHidden = false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
currentCharacter.playerControllerManager.setVisibleToAIState (false);
|
||||
|
||||
if (!currentCharacter.hidden) {
|
||||
currentCharacter.hidden = true;
|
||||
|
||||
currentCharacter.canBeHidden = true;
|
||||
|
||||
currentCharacter.lastTimeHidden = Time.time;
|
||||
|
||||
setCharacterState (notVisibleCharacterStateName, i);
|
||||
|
||||
if (loseTrackOfPlayerByAIOnTriggerEnterEnabled) {
|
||||
GKC_Utils.removeTargetFromAIEnemyList (currentCharacter.characterGameObject);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// if (hiddenForATime) {
|
||||
// if (Time.time > currentCharacter.lastTimeHidden + hiddenForATimeAmount) {
|
||||
// currentCharacter.playerControllerManager.setVisibleToAIState (true);
|
||||
// setCharacterState (visibleCharacterStateName, i);
|
||||
// currentCharacter.hidden = false;
|
||||
// currentCharacter.lastTimeDiscovered = Time.time;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if (characterCantMove) {
|
||||
// if (currentCharacter.playerControllerManager.isPlayerMoving (maxMoveAmount)) {
|
||||
// currentCharacter.playerControllerManager.setVisibleToAIState (true);
|
||||
// setCharacterState (visibleCharacterStateName, i);
|
||||
// currentCharacter.hidden = false;
|
||||
// currentCharacter.lastTimeDiscovered = Time.time;
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
public void setCharacterState (string stateName, int characterIndex)
|
||||
{
|
||||
if (useCharacterStateIcon) {
|
||||
hiddenCharacterInfoList [characterIndex].playerControllerManager.setCharacterStateIcon (stateName);
|
||||
}
|
||||
}
|
||||
|
||||
public void OnTriggerEnter (Collider col)
|
||||
{
|
||||
checkTriggerInfo (col, true);
|
||||
}
|
||||
|
||||
public void OnTriggerExit (Collider col)
|
||||
{
|
||||
checkTriggerInfo (col, false);
|
||||
}
|
||||
|
||||
public void addCharacterFromHiddenZone (GameObject newCharacter)
|
||||
{
|
||||
if (newCharacter != null) {
|
||||
addOrRemoveCharacterFromHiddenZone (newCharacter, true);
|
||||
}
|
||||
}
|
||||
|
||||
public void removeCharacterFromHiddenZone (GameObject newCharacter)
|
||||
{
|
||||
if (newCharacter != null) {
|
||||
addOrRemoveCharacterFromHiddenZone (newCharacter, false);
|
||||
}
|
||||
}
|
||||
|
||||
public void checkTriggerInfo (Collider col, bool isEnter)
|
||||
{
|
||||
if (col != null) {
|
||||
addOrRemoveCharacterFromHiddenZone (col.gameObject, isEnter);
|
||||
}
|
||||
}
|
||||
|
||||
void addOrRemoveCharacterFromHiddenZone (GameObject newCharacter, bool state)
|
||||
{
|
||||
if ((1 << newCharacter.layer & layerToCharacters.value) == 1 << newCharacter.layer) {
|
||||
GameObject characterFound = newCharacter;
|
||||
|
||||
bool alreadyIncluded = false;
|
||||
int characterIndex = -1;
|
||||
|
||||
for (int i = 0; i < hiddenCharacterInfoList.Count; i++) {
|
||||
if (hiddenCharacterInfoList [i].characterGameObject == characterFound && !alreadyIncluded) {
|
||||
alreadyIncluded = true;
|
||||
characterIndex = i;
|
||||
}
|
||||
}
|
||||
|
||||
if (state) {
|
||||
if (!alreadyIncluded) {
|
||||
hiddenCharacterInfo newHiddenCharacterInfo = new hiddenCharacterInfo ();
|
||||
|
||||
newHiddenCharacterInfo.name = characterFound.name;
|
||||
newHiddenCharacterInfo.characterGameObject = characterFound;
|
||||
|
||||
playerComponentsManager mainPlayerComponentsManager = characterFound.GetComponent<playerComponentsManager> ();
|
||||
|
||||
newHiddenCharacterInfo.playerControllerManager = mainPlayerComponentsManager.getPlayerController ();
|
||||
newHiddenCharacterInfo.playerControllerManager.setVisibleToAIState (false);
|
||||
|
||||
newHiddenCharacterInfo.factionManager = mainPlayerComponentsManager.getCharacterFactionManager ();
|
||||
|
||||
newHiddenCharacterInfo.mainHideCharacterFixedPlaceSystemPlayerManagement = mainPlayerComponentsManager.getHideCharacterFixedPlaceSystemPlayerManagement ();
|
||||
|
||||
if (newHiddenCharacterInfo.mainHideCharacterFixedPlaceSystemPlayerManagement != null) {
|
||||
newHiddenCharacterInfo.mainHideCharacterFixedPlaceSystemPlayerManagement.setPlayerHidingOnFreeZoneState (true);
|
||||
|
||||
newHiddenCharacterInfo.mainHideCharacterFixedPlaceSystemPlayerManagement.setCurrentHideFromEnemiesSystem (this);
|
||||
}
|
||||
|
||||
newHiddenCharacterInfo.hidden = true;
|
||||
newHiddenCharacterInfo.lastTimeHidden = Time.time;
|
||||
newHiddenCharacterInfo.canBeHidden = true;
|
||||
|
||||
hiddenCharacterInfoList.Add (newHiddenCharacterInfo);
|
||||
|
||||
setCharacterState (notVisibleCharacterStateName, hiddenCharacterInfoList.Count - 1);
|
||||
|
||||
if (loseTrackOfPlayerByAIOnTriggerEnterEnabled) {
|
||||
GKC_Utils.removeTargetFromAIEnemyList (characterFound);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (alreadyIncluded) {
|
||||
hiddenCharacterInfo characterToRemove = hiddenCharacterInfoList [characterIndex];
|
||||
|
||||
characterToRemove.playerControllerManager.setVisibleToAIState (true);
|
||||
|
||||
if (characterToRemove.mainHideCharacterFixedPlaceSystemPlayerManagement) {
|
||||
characterToRemove.mainHideCharacterFixedPlaceSystemPlayerManagement.setPlayerHidingOnFreeZoneState (false);
|
||||
|
||||
characterToRemove.mainHideCharacterFixedPlaceSystemPlayerManagement.setCurrentHideFromEnemiesSystem (null);
|
||||
}
|
||||
|
||||
setCharacterState (visibleCharacterStateName, characterIndex);
|
||||
|
||||
hiddenCharacterInfoList.RemoveAt (characterIndex);
|
||||
|
||||
if (reactivatePlayerColliderOnExitTrigger) {
|
||||
characterToRemove.playerControllerManager.reactivateColliderIfPossible ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (hiddenCharacterInfoList.Count > 0) {
|
||||
charactersOnHiddenList = true;
|
||||
} else {
|
||||
charactersOnHiddenList = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool isCharacterHiddenOnZone (GameObject characterToCheck)
|
||||
{
|
||||
for (int i = 0; i < hiddenCharacterInfoList.Count; i++) {
|
||||
if (hiddenCharacterInfoList [i].characterGameObject == characterToCheck) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
public class hiddenCharacterInfo
|
||||
{
|
||||
public string name;
|
||||
public GameObject characterGameObject;
|
||||
public playerController playerControllerManager;
|
||||
public characterFactionManager factionManager;
|
||||
|
||||
public hideCharacterFixedPlaceSystemPlayerManagement mainHideCharacterFixedPlaceSystemPlayerManagement;
|
||||
|
||||
public bool hidden;
|
||||
public float hiddenTime;
|
||||
public float lastTimeHidden;
|
||||
public float lastTimeDiscovered;
|
||||
public bool canBeHidden;
|
||||
public float lastTimeCheckIfCharacterCanBeHiddenAgain;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 11d4eeef2e0d97248b3ff145d0146487
|
||||
timeCreated: 1525071954
|
||||
licenseType: Store
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 40995
|
||||
packageName: Game Kit Controller - Shooter Melee Adventure Creator 3D + 2.5D
|
||||
packageVersion: 3.77g
|
||||
assetPath: Assets/Game Kit Controller/Scripts/Hide System/hideFromEnemiesSystem.cs
|
||||
uploadId: 814740
|
||||
Reference in New Issue
Block a user