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

339 lines
8.3 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class sharedActionButtonActivator : MonoBehaviour
{
[Header ("Main Settings")]
[Space]
public bool buttonActivatorEnabled = true;
public bool buttonActive;
public bool setActiveStateOnStart;
public string sharedActionNameOnStart;
public bool useRandomSharedActionName;
[Space]
[Header ("Debug")]
[Space]
public bool showDebugPrint;
public string sharedActionName;
public float currentTimeToDisableActivator;
public GameObject currentExternalCharacter;
public bool checkToDisableActivatorInProcess;
[Space]
[Header ("Event Info List Settings")]
[Space]
public List<sharedActionEventInfo> sharedActionEventInfoList = new List<sharedActionEventInfo> ();
[Space]
[Header ("Event Settings")]
[Space]
public bool useEventsItTargetDetected;
public UnityEvent eventsItTargetDetected;
public bool useEventsItTargetNotDetected;
public UnityEvent eventsItTargetNotDetected;
[Space]
public UnityEvent eventOnAssigningNewInfo;
[Space]
public eventParameters.eventToCallWithString eventToSendNewActionName;
[Space]
public UnityEvent eventOnEnableActivator;
public UnityEvent eventOnDisableActivator;
[Space]
[Header ("Components")]
[Space]
public sharedActionSystem mainSharedActionSystem;
Coroutine updateCoroutine;
void Start ()
{
if (setActiveStateOnStart) {
enableOrDisableaActivator (true);
setSharedActionName (sharedActionNameOnStart);
}
}
public void setuseRandomSharedActionNameState (bool state)
{
useRandomSharedActionName = state;
}
public void enableActivatorAndSetSharedActioName (string newName)
{
enableOrDisableaActivator (true);
setSharedActionName (newName);
}
public void setSharedActionName (string newName)
{
if (!buttonActivatorEnabled) {
return;
}
sharedActionName = newName;
if (sharedActionName != "") {
eventOnAssigningNewInfo.Invoke ();
eventToSendNewActionName.Invoke (sharedActionName);
int currentActionIndex = sharedActionEventInfoList.FindIndex (s => s.sharedActionName.Equals (sharedActionName));
if (currentActionIndex > -1) {
sharedActionEventInfo currentSharedActionEventInfo = sharedActionEventInfoList [currentActionIndex];
currentSharedActionEventInfo.eventOnSetSharedActionName.Invoke ();
}
}
}
public void setSharedActionNameAndEnableWithDuration (string newName)
{
if (!buttonActivatorEnabled) {
return;
}
bool splitSymbolLocated = newName.Contains (";");
if (splitSymbolLocated) {
string [] nameAndDuration = newName.Split (';');
if (nameAndDuration.Length > 0) {
newName = nameAndDuration [0];
setSharedActionName (newName);
}
if (nameAndDuration.Length > 1) {
float durationAmount = float.Parse (nameAndDuration [1]);
if (showDebugPrint) {
print (nameAndDuration [0] + " " + nameAndDuration [1]);
}
if (durationAmount > 0) {
enableActivatorWithDuration (durationAmount);
}
}
}
}
public void setExternalCharacter (GameObject newCharacter)
{
currentExternalCharacter = newCharacter;
}
public void activateRandomSharedActionByName ()
{
bool previousUseRandomSharedActionNameValue = useRandomSharedActionName;
useRandomSharedActionName = true;
activateSharedActionByName ();
useRandomSharedActionName = previousUseRandomSharedActionNameValue;
}
public void activateSharedActionByName ()
{
bool activateActionResult = true;
if (!buttonActivatorEnabled) {
activateActionResult = false;
}
if (!mainSharedActionSystem.isSharedActionEnabled ()) {
activateActionResult = false;
}
if (currentExternalCharacter == null) {
activateActionResult = false;
}
if (showDebugPrint) {
print ("activate action result " + activateActionResult + " " + sharedActionName);
}
if (activateActionResult) {
mainSharedActionSystem.setExternalCharacter (currentExternalCharacter);
if (useRandomSharedActionName) {
mainSharedActionSystem.activateRandomSharedActionByName (sharedActionName);
} else {
mainSharedActionSystem.activateSharedActionByName (sharedActionName);
}
}
checkEventOnTargetDetectedResult (activateActionResult);
}
void checkEventOnTargetDetectedResult (bool state)
{
if (state) {
if (useEventsItTargetDetected) {
eventsItTargetDetected.Invoke ();
}
} else {
if (useEventsItTargetNotDetected) {
eventsItTargetNotDetected.Invoke ();
}
}
}
public void enableActivator ()
{
enableOrDisableaActivator (true);
}
public void disableActivator ()
{
enableOrDisableaActivator (false);
}
public void enableOrDisableaActivator (bool state)
{
if (!buttonActivatorEnabled) {
return;
}
buttonActive = state;
checkEventOnChangeActivatorState (state);
}
public void enableActivatorWithDuration (float newDuration)
{
enableOrDisableActivatorWithDuration (true, newDuration);
}
public void disableActivatorWithDuration ()
{
if (checkToDisableActivatorInProcess || buttonActive) {
enableOrDisableActivatorWithDuration (false, 0);
}
}
public void enableOrDisableActivatorWithDuration (bool state, float newDuration)
{
if (!buttonActivatorEnabled) {
return;
}
currentTimeToDisableActivator = newDuration;
stopUpdateCoroutine ();
bool buttonPreviouslyActive = buttonActive || checkToDisableActivatorInProcess;
buttonActive = state;
if (showDebugPrint) {
print ("enableOrDisableActivatorWithDuration " + state + " " + buttonPreviouslyActive);
}
if (state) {
if (gameObject.activeInHierarchy) {
updateCoroutine = StartCoroutine (updateSystemCoroutine ());
}
} else {
if (buttonPreviouslyActive) {
checkEventOnChangeActivatorState (false);
}
checkToDisableActivatorInProcess = false;
}
}
void checkEventOnChangeActivatorState (bool state)
{
if (state) {
eventOnEnableActivator.Invoke ();
} else {
eventOnDisableActivator.Invoke ();
}
if (showDebugPrint) {
print ("checkEventOnChangeActivatorState " + state);
}
}
public void stopUpdateCoroutine ()
{
if (updateCoroutine != null) {
StopCoroutine (updateCoroutine);
}
}
IEnumerator updateSystemCoroutine ()
{
checkToDisableActivatorInProcess = true;
checkEventOnChangeActivatorState (true);
WaitForSeconds delay = new WaitForSeconds (currentTimeToDisableActivator);
yield return delay;
checkEventOnChangeActivatorState (false);
checkToDisableActivatorInProcess = false;
buttonActive = false;
}
public void setButtonActivatorEnabledState (bool state)
{
buttonActivatorEnabled = state;
}
public void setButtonActivatorEnabledStateFromEditor (bool state)
{
setButtonActivatorEnabledState (state);
updateComponent ();
}
void updateComponent ()
{
GKC_Utils.updateComponent (this);
GKC_Utils.updateDirtyScene ("Update Shared Action Button " + gameObject.name, gameObject);
}
[System.Serializable]
public class sharedActionEventInfo
{
public string sharedActionName;
[Space]
public UnityEvent eventOnSetSharedActionName;
}
}