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

142 lines
3.6 KiB
C#

#if GAME_KIT_CONTROLLER_USE_ORK
using System.Collections;
using System.Collections.Generic;
using GamingIsLove.ORKFramework;
using UnityEngine;
namespace GameKitController.Integrations.ORKFramework
{
public class GKC_ORKStatsBridge : MonoBehaviour
{
public playerStatsSystem mainPlayerStatsSystem;
public externalStatsManager externalStatsManager;
public GameObject combatantGameObject;
[Space]
public List<GKC_ORKStat> GKC_ORKStats;
private Combatant _combatant;
private void OnEnable ()
{
StartCoroutine (OnEnableCoroutine ());
}
private IEnumerator OnEnableCoroutine ()
{
while (_combatant == null) {
_combatant = ORKComponentHelper.GetCombatant(combatantGameObject);
yield return null;
}
RegisterOrkStatusValuesEventHandlers ();
RegisterGkcStatusValuesEventHandlers ();
}
private void OnDisable ()
{
GetCombatantIfNull ();
if (_combatant == null) {
return;
}
UnregisterOrkStatusValuesEventHandlers ();
UnregisterGkcStatusValuesEventHandlers ();
}
private void GetCombatantIfNull ()
{
if (_combatant == null) {
_combatant = ORKComponentHelper.GetCombatant(combatantGameObject);
}
}
public void RegisterOrkStatusValuesEventHandlers ()
{
foreach (var statInfo in mainPlayerStatsSystem.statInfoList) {
if (!statInfo.useEventToSendValueOnUpdateStatExternally) {
statInfo.useEventToSendValueOnUpdateStatExternally = true;
}
}
for (var i = 0; i < ORK.StatusValues.Count; i++) {
_combatant.Status[i].ValueChanged += OnOrkStatusValueChanged;
}
}
public void UnregisterOrkStatusValuesEventHandlers ()
{
for (var i = 0; i < ORK.StatusValues.Count; i++) {
_combatant.Status[i].ValueChanged -= OnOrkStatusValueChanged;
}
}
public void RegisterGkcStatusValuesEventHandlers ()
{
foreach (var statInfo in mainPlayerStatsSystem.statInfoList) {
if (!statInfo.useEventToSendValueOnUpdateStat) {
statInfo.useEventToSendValueOnUpdateStat = true;
}
statInfo.eventToSendValueOnUpdateStat.AddListener(OnGkcStatusValueChanged);
}
}
public void UnregisterGkcStatusValuesEventHandlers ()
{
foreach (var statInfo in mainPlayerStatsSystem.statInfoList) {
statInfo.eventToSendValueOnUpdateStat.RemoveListener(OnGkcStatusValueChanged);
}
}
public void OnOrkStatusValueChanged (Combatant combatant, StatusValue statusValue, int change)
{
foreach (var gkcOrkStat in GKC_ORKStats) {
if (gkcOrkStat.transferMode != GKC_ORKTransferMode.OrkToGkc && gkcOrkStat.transferMode != GKC_ORKTransferMode.Both) {
return;
}
if (gkcOrkStat.orkStat == statusValue.ID) {
if (AreGkcOrkStatValuesEqual (gkcOrkStat)) {
return;
}
var newValue = _combatant.Status[gkcOrkStat.orkStat].GetValue ();
externalStatsManager.updateStatValueExternally (gkcOrkStat.gkcStat, newValue);
return;
}
}
}
public void OnGkcStatusValueChanged (int statId, float newValue)
{
foreach (var gkcOrkStat in GKC_ORKStats) {
if (gkcOrkStat.transferMode != GKC_ORKTransferMode.GkcToOrk && gkcOrkStat.transferMode != GKC_ORKTransferMode.Both) {
return;
}
if (gkcOrkStat.gkcStat == statId) {
if (AreGkcOrkStatValuesEqual (gkcOrkStat)) {
return;
}
_combatant.Status[gkcOrkStat.orkStat].SetValue ((int) newValue, false, true, true, false, false, null);
return;
}
}
}
public bool AreGkcOrkStatValuesEqual (GKC_ORKStat gkcOrkStat)
{
if (_combatant.Status[gkcOrkStat.orkStat].GetValue () ==
(int) mainPlayerStatsSystem.getStatValueByIndex (gkcOrkStat.gkcStat)) {
return true;
}
return false;
}
}
}
#endif