/// <summary> /// Unregistered an existing control variable, This unregisters from both control variables that are both registered natively and via managed /// </summary> /// <param name="consoleVariable">Will be set to null if unregistered successfully</param> /// <returns>true if control variable is unregistered successfully</returns> public static bool UnRegister(ref ICVar consoleVariable) { if (consoleVariable == null) { return(false); } bool unregistered = false; //check if registered via C# var consoleVariableName = consoleVariable.GetName(); if (s_variablesDelegates.ContainsKey(consoleVariableName)) { ConsoleVariableItem consoleVariableItem = null; s_variablesDelegates.TryGetValue(consoleVariableName, out consoleVariableItem); unregistered = s_variablesDelegates.Remove(consoleVariableName); if (unregistered) { consoleVariableItem.m_icVar = null; consoleVariableItem.m_managedConsoleVariableDelegate = null; } } // likelihood that console variable is preregistered via C++ and not C# Global.gEnv.pConsole.UnregisterVariable(consoleVariableName); unregistered |= (Global.gEnv.pConsole.GetCVar(consoleVariableName) == null); if (unregistered) { consoleVariable = null; } return(unregistered); }
/// <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); }