Files
FueraDeEscala/Assets/Game Kit Controller/Scripts/Player/characterStateIconSystem.cs
Robii Aragon fd87a6ffd5 add ckg
plantilla base para movimiento básico
2026-02-05 05:07:55 -08:00

305 lines
19 KiB
C#
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.Collections;
using System.Collections.Generic;
using GameKitController.Audio;
using UnityEngine;
public class characterStateIconSystem : MonoBehaviour
{
[Header ("Main Settings")]
[Space]
public bool statesEnabled = true;
public bool useIconsOnlyOnScreen;
[Space]
[Header ("Character States List Settings")]
[Space]
public List<characterStateInfo> characterStateInfoList = new List<characterStateInfo> ();
[Space]
[Header ("Debug")]
[Space]
public string currentCharacterStateName;
public characterStateInfo currentCharacterState;
public bool hideAfterTime;
[Space]
[Header ("Components")]
[Space]
public AudioSource mainAudioSource;
public playerController playerControllerManager;
public Transform mainCameraTransform;
Vector3 directionToCamera;
Transform currentIconGameObjectThirdPerson;
bool currentIconGameObjectThirdPersonAssigned;
bool mainCameraTransformLocated;
bool playerControllerManagerLocated;
private void Start ()
{
foreach (var stateInfo in characterStateInfoList) {
stateInfo.InitializeAudioElements ();
if (mainAudioSource != null) {
stateInfo.stateClipAudioElement.audioSource = mainAudioSource;
}
}
}
void Update ()
{
if (hideAfterTime) {
if (Time.time > currentCharacterState.lastTimeHidden + currentCharacterState.hideAfterTimeAmount) {
enableOrDisableCharacterIcon (currentCharacterState, false);
hideAfterTime = false;
currentCharacterState = null;
currentIconGameObjectThirdPerson = null;
currentIconGameObjectThirdPersonAssigned = false;
currentCharacterStateName = "";
}
}
if (currentIconGameObjectThirdPersonAssigned && mainCameraTransformLocated) {
if (playerControllerManagerLocated) {
if (!playerControllerManager.isPlayerOnFirstPerson () && !useIconsOnlyOnScreen) {
directionToCamera = currentIconGameObjectThirdPerson.position - mainCameraTransform.position;
currentIconGameObjectThirdPerson.rotation = Quaternion.LookRotation (directionToCamera);
}
} else {
directionToCamera = currentIconGameObjectThirdPerson.position - mainCameraTransform.position;
currentIconGameObjectThirdPerson.rotation = Quaternion.LookRotation (directionToCamera);
}
}
}
void checkMainCameraTransform ()
{
if (mainCameraTransformLocated) {
return;
}
if (mainCameraTransform == null) {
mainCameraTransform = GKC_Utils.findMainPlayerCameraTransformOnScene ();
if (mainCameraTransform != null) {
mainCameraTransformLocated = true;
}
} else {
mainCameraTransformLocated = true;
}
}
public void enableOrDisableCharacterIcon (characterStateInfo characterState, bool state)
{
if (!statesEnabled) {
return;
}
checkMainCameraTransform ();
if (playerControllerManagerLocated) {
if (playerControllerManager.isPlayerOnFirstPerson () || playerControllerManager.isUsingDevice () || useIconsOnlyOnScreen) {
if (characterState.iconThirdPersonActiveState) {
characterState.iconGameObjectThirdPerson.SetActive (false);
characterState.iconThirdPersonActiveState = false;
}
if (characterState.iconFirstPersonActiveState != state) {
if (characterState.iconGameObjectFirstPerson != null) {
characterState.iconGameObjectFirstPerson.SetActive (state);
characterState.iconFirstPersonActiveState = state;
}
}
} else {
if (characterState.iconThirdPersonActiveState != state) {
characterState.iconGameObjectThirdPerson.SetActive (state);
characterState.iconThirdPersonActiveState = state;
}
if (characterState.iconFirstPersonActiveState) {
if (characterState.iconGameObjectFirstPerson != null) {
characterState.iconGameObjectFirstPerson.SetActive (false);
characterState.iconFirstPersonActiveState = false;
}
}
}
} else {
if (characterState.iconFirstPersonActiveState != state) {
if (characterState.iconGameObjectFirstPerson != null) {
characterState.iconGameObjectFirstPerson.SetActive (state);
characterState.iconFirstPersonActiveState = state;
}
}
if (characterState.iconThirdPersonActiveState != state) {
characterState.iconGameObjectThirdPerson.SetActive (state);
characterState.iconThirdPersonActiveState = state;
}
}
}
public void checkCharacterStateIconForViewChange ()
{
if (currentIconGameObjectThirdPerson != null) {
enableOrDisableCharacterIcon (currentCharacterState, true);
}
}
public void setCharacterStateIcon (string stateName)
{
if (!statesEnabled) {
return;
}
if (currentCharacterStateName.Equals (stateName)) {
return;
}
if (!playerControllerManagerLocated) {
playerControllerManagerLocated = playerControllerManager != null;
}
currentCharacterState = null;
for (int i = 0; i < characterStateInfoList.Count; i++) {
characterStateInfo temporalCharacterStateInfo = characterStateInfoList [i];
if (temporalCharacterStateInfo.Name.Equals (stateName)) {
currentCharacterState = temporalCharacterStateInfo;
currentCharacterStateName = currentCharacterState.Name;
currentIconGameObjectThirdPerson = currentCharacterState.iconGameObjectThirdPerson.transform;
currentIconGameObjectThirdPersonAssigned = true;
enableOrDisableCharacterIcon (currentCharacterState, true);
if (currentCharacterState.hideAfterTime) {
currentCharacterState.lastTimeHidden = Time.time;
hideAfterTime = true;
} else {
hideAfterTime = false;
}
if (currentCharacterState.useSound) {
playSound (currentCharacterState.stateClipAudioElement);
}
} else {
enableOrDisableCharacterIcon (temporalCharacterStateInfo, false);
}
}
}
public void disableCharacterStateIcon ()
{
//print ("disable states icon");
for (int i = 0; i < characterStateInfoList.Count; i++) {
enableOrDisableCharacterIcon (characterStateInfoList [i], false);
}
currentCharacterStateName = "";
}
public void playSound (AudioElement sound)
{
if (sound != null) {
//if (mainAudioSource.gameObject.activeSelf && mainAudioSource.enabled) {
// mainAudioSource.PlayOneShot (sound);
//}
AudioPlayer.PlayOneShot (sound, gameObject);
}
}
public void enableOrDisableCharacterStateSound (bool state, string characterStateName)
{
int currentIndex = characterStateInfoList.FindIndex (s => s.Name.Equals (characterStateName));
if (currentIndex > -1) {
characterStateInfo currentCharacterStateInfo = characterStateInfoList [currentIndex];
currentCharacterStateInfo.useSound = state;
}
}
public void enableCharacterStateSound (string characterStateName)
{
enableOrDisableCharacterStateSound (true, characterStateName);
}
public void disableCharacterStateSound (string characterStateName)
{
enableOrDisableCharacterStateSound (false, characterStateName);
}
public void enableCharacterStateSoundFromEditor (string characterStateName)
{
enableOrDisableCharacterStateSound (true, characterStateName);
updateComponent ();
}
public void disableCharacterStateSoundFromEditor (string characterStateName)
{
enableOrDisableCharacterStateSound (false, characterStateName);
updateComponent ();
}
void updateComponent ()
{
GKC_Utils.updateComponent (this);
GKC_Utils.updateDirtyScene ("Update Character State Icon System " + gameObject.name, gameObject);
}
[System.Serializable]
public class characterStateInfo
{
public string Name;
public GameObject iconGameObjectThirdPerson;
public GameObject iconGameObjectFirstPerson;
public bool hideAfterTime;
public float hideAfterTimeAmount;
public float lastTimeHidden;
public bool useSound;
public AudioClip stateClip;
public AudioElement stateClipAudioElement;
public bool iconThirdPersonActiveState;
public bool iconFirstPersonActiveState;
public void InitializeAudioElements ()
{
if (stateClip != null) {
stateClipAudioElement.clip = stateClip;
}
}
}
}