diff --git a/hGameTest/src/engine/ConVar.hx b/hGameTest/src/engine/ConVar.hx index 5ff916f5..c5987b62 100644 --- a/hGameTest/src/engine/ConVar.hx +++ b/hGameTest/src/engine/ConVar.hx @@ -1,29 +1,59 @@ package engine; -import haxe.Constraints.Function; import engine.typedefs.console.CVar; import engine.typedefs.console.CCmd; import engine.enums.console.CVarType; import engine.enums.console.CVarFlag; import game.ui.console.Console; +import engine.ConVars_Engine; class ConVar{ + // Hush the compiler about unused import + // static var ConVars_Engine:Class = ConVars_Engine; + static var CVarMap:Map = []; - public static inline function registerCVar(_name:String, _type:CVarType, _value, _callback:Void->Void,_callOnSet:Bool=false) + static var CCmdMap:Map = []; + /** + * Registers a new CVar + * @param _name The name of the CVar. This is the way it is called in the console or referred to in code. + * @param _type CVar type as defined in the CVarType enum. + * @param _value The default value for this CVar. This needs to be in line with its CVarType. + * @param _flags CVar flags as defined in the CVarFlags enum. + * @param _helpString Help string that gets printed out in console when no value is specified. + * @param _callback The function that gets called when the CVar is set. Calls empty Void when left undefined. + * @param _callOnCreate Whether the callback function gets called or not after registering. + * @param _bMin Specifies if the CVar has a minimum numeric value. + * @param _fMin Specifies the minimum numeric value. + * @param _fMax Specifies the maximum numeric value. + * @param _bMax Specifies if the CVar has a maximum numeric value. + */ + public static inline function registerCVar(_name:String, _type:CVarType, _value:Dynamic, ?_flags:CVarFlag, ?_helpString:String = "", ?_callback:Void->Void, ?_callOnCreate:Bool=false, _bMin:Bool=false, _fMin:Float=0, _fMax:Float=0, _bMax:Bool = false):CVar { - if(CVarMap[_name]!=null){ - - return; + if(CVarMap[_name]!=null || CCmdMap[_name]!= null){ + Console.devMsg("Tried setting already defined convar: " + _name + ", returning null instead"); + return null; } - CVarMap[_name] = { + if(_bMin && _value < _fMin) _value = _fMin; + if(_bMax && _value > _fMax) _value = _fMax; + var cvar:CVar = CVarMap[_name] = { name : _name, type : _type, value : _value, + flags: _flags, + helpString: _helpString, + bMin : _bMin, + fMin : _fMin, + fMax : _fMax, + bMax : _bMax, callback : _callback == null ? ()->{} : _callback } + if(_callback != null && _callOnCreate){ + _callback(); + } + return cvar; } - public static inline function setCVar(_name:String, _value:Dynamic) + public static inline function registerCCmd(_name:String, ?_callback:Array->Void):CCmd { if(CVarMap[_name]!=null || CCmdMap[_name]!=null){ Console.devMsg("Tried setting already defined command: " + _name + ", returning null instead"); @@ -77,7 +107,7 @@ class ConVar{ } else{ - Console.consoleIndex.devMsg("trying to set null convar '"+_name+"'"); + Console.devMsg("trying to set null convar '"+_name+"'"); } } @@ -116,20 +146,13 @@ class ConVar{ }); return keys; } - public static var cmdList:CCmd = ConVar.registerCCmd("list", (cArgs:Array)->{ - var keys:Array = getCVarNames(); - for(key in keys){ - if(CVarMap[key] != null){ - Console.devMsg(key+" "+CVarMap[key].value); - } - else{ - Console.devMsg(key); - } - } - }); + public static inline function getCVar(_name:String):CVar { return CVarMap[_name]; } - + public static inline function getCVarMap():Map + { + return CVarMap; + } } \ No newline at end of file