mirror of
https://github.com/NotAKidoS/NAK_CVR_Mods.git
synced 2025-09-01 22:09:23 +00:00
further cleanup of repo
This commit is contained in:
parent
4f8dcb0cd0
commit
323eb92f2e
140 changed files with 1 additions and 2430 deletions
|
@ -0,0 +1,101 @@
|
|||
using MoonSharp.Interpreter;
|
||||
|
||||
namespace NAK.LuaNetVars;
|
||||
|
||||
public partial class LuaNetVarController
|
||||
{
|
||||
internal void RegisterNetworkVar(string varName)
|
||||
{
|
||||
if (_registeredNetworkVars.ContainsKey(varName))
|
||||
{
|
||||
LuaNetVarsMod.Logger.Warning($"Network variable {varName} already registered!");
|
||||
return;
|
||||
}
|
||||
|
||||
_registeredNetworkVars[varName] = DynValue.Nil;
|
||||
_luaClientBehaviour.script.Globals[varName] = DynValue.Nil;
|
||||
|
||||
RegisterGetterFunction(varName);
|
||||
RegisterSetterFunction(varName);
|
||||
|
||||
LuaNetVarsMod.Logger.Msg($"Registered network variable {varName}");
|
||||
}
|
||||
|
||||
private void RegisterGetterFunction(string varName)
|
||||
{
|
||||
_luaClientBehaviour.script.Globals["Get" + varName] = DynValue.NewCallback((context, args) =>
|
||||
{
|
||||
return _registeredNetworkVars.TryGetValue(varName, out var value) ? value : DynValue.Nil;
|
||||
});
|
||||
}
|
||||
|
||||
private void RegisterSetterFunction(string varName)
|
||||
{
|
||||
_luaClientBehaviour.script.Globals["Set" + varName] = DynValue.NewCallback((context, args) =>
|
||||
{
|
||||
if (args.Count < 1) return DynValue.Nil;
|
||||
|
||||
var newValue = args[0];
|
||||
if (!IsSupportedDynValue(newValue))
|
||||
{
|
||||
LuaNetVarsMod.Logger.Error($"Unsupported DynValue type: {newValue.Type} for variable {varName}");
|
||||
return DynValue.Nil;
|
||||
}
|
||||
|
||||
if (_registeredNetworkVars.TryGetValue(varName, out var oldValue))
|
||||
{
|
||||
UpdateNetworkVariable(varName, oldValue, newValue);
|
||||
}
|
||||
|
||||
return DynValue.Nil;
|
||||
});
|
||||
}
|
||||
|
||||
private void UpdateNetworkVariable(string varName, DynValue oldValue, DynValue newValue)
|
||||
{
|
||||
_registeredNetworkVars[varName] = newValue;
|
||||
_luaClientBehaviour.script.Globals[varName] = newValue;
|
||||
_dirtyVariables.Add(varName);
|
||||
|
||||
if (_registeredNotifyCallbacks.TryGetValue(varName, out var callback))
|
||||
{
|
||||
_luaClientBehaviour.script.Call(callback, DynValue.NewString(varName), oldValue, newValue);
|
||||
}
|
||||
}
|
||||
|
||||
internal void RegisterNotifyCallback(string varName, DynValue callback)
|
||||
{
|
||||
if (!ValidateCallback(callback) || !ValidateNetworkVar(varName)) return;
|
||||
|
||||
if (_registeredNotifyCallbacks.ContainsKey(varName))
|
||||
LuaNetVarsMod.Logger.Warning($"Overwriting notify callback for {varName}");
|
||||
|
||||
_registeredNotifyCallbacks[varName] = callback;
|
||||
LuaNetVarsMod.Logger.Msg($"Registered notify callback for {varName}");
|
||||
}
|
||||
|
||||
internal void RegisterEventCallback(string eventName, DynValue callback)
|
||||
{
|
||||
if (!ValidateCallback(callback)) return;
|
||||
|
||||
if (_registeredEventCallbacks.ContainsKey(eventName))
|
||||
LuaNetVarsMod.Logger.Warning($"Overwriting event callback for {eventName}");
|
||||
|
||||
_registeredEventCallbacks[eventName] = callback;
|
||||
LuaNetVarsMod.Logger.Msg($"Registered event callback for {eventName}");
|
||||
}
|
||||
|
||||
private bool ValidateCallback(DynValue callback)
|
||||
{
|
||||
if (callback?.Function != null) return true;
|
||||
LuaNetVarsMod.Logger.Error("Passed DynValue must be a function");
|
||||
return false;
|
||||
}
|
||||
|
||||
private bool ValidateNetworkVar(string varName)
|
||||
{
|
||||
if (_registeredNetworkVars.ContainsKey(varName)) return true;
|
||||
LuaNetVarsMod.Logger.Error($"Attempted to register notify callback for non-registered variable {varName}.");
|
||||
return false;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue