/// <summary> /// Retrieves the managed control variable callback delegate. Only for control variables that are registered via managed /// </summary> /// <param name="icVar">Any control variable that is registered via managed</param> /// <param name="managedConsoleVariableDelegate">the managed control variable delegate if function returns true</param> /// <returns>true if the control variable exists</returns> public static bool GetManagedConsoleVariableFunctionDelegate(ICVar icVar, out ManagedConsoleVariableFunctionDelegate managedConsoleVariableDelegate) { var consoleVariableName = icVar.GetName(); managedConsoleVariableDelegate = null; if (!s_variablesDelegates.ContainsKey(consoleVariableName)) { return(false); } managedConsoleVariableDelegate = s_variablesDelegates[consoleVariableName].m_managedConsoleVariableDelegate; return(true); }
/// <summary> /// Changes the control variable callback to the specified delegate. /// Note: Only control variables that are registered via managed class CryEngine.ConsoleVariable can be changed. Control Variables that are predefined in system cannot be changed. /// </summary> /// <param name="icVar"></param> /// <param name="managedConsoleVariableDelegate"></param> /// <returns></returns> public static bool SetManagedConsoleVariableFunctionDelegate(ICVar icVar, ManagedConsoleVariableFunctionDelegate managedConsoleVariableDelegate) { var consoleVariableName = icVar.GetName(); if (!s_variablesDelegates.ContainsKey(consoleVariableName)) { return(false); } //change the console variable item to map to new delegate, the c++ callback "OnConsoleVariableChanged(IntPtr consoleVariableArg)" remains unchanged ConsoleVariableItem consoleVariableItem = null; s_variablesDelegates.TryGetValue(consoleVariableName, out consoleVariableItem); consoleVariableItem.m_managedConsoleVariableDelegate = managedConsoleVariableDelegate; return(true); }
public static bool Register(string consoleVariableName, float consoleVariableValue, uint nFlags, string commandHelp, ManagedConsoleVariableFunctionDelegate managedConsoleVariableDelegate, out ICVar newICVar) { //check if console variable with same name exists var existingICVar = Global.gEnv.pConsole.GetCVar(consoleVariableName); if (existingICVar != null) { newICVar = null; return(false); } var pointer = Marshal.GetFunctionPointerForDelegate(s_myDelegate); NativeInternals.IConsole.AddConsoleVariableFloat(pointer, consoleVariableName, consoleVariableValue, nFlags, commandHelp); newICVar = Global.gEnv.pConsole.GetCVar(consoleVariableName); if (newICVar == null) { return(false); } var newItem = new ConsoleVariableItem { m_icVar = newICVar, m_managedConsoleVariableDelegate = managedConsoleVariableDelegate }; s_variablesDelegates.Add(consoleVariableName, newItem); return(true); }