GUI Scripting: Parsing of Set 'Cmd': Difference between revisions

From The DarkMod Wiki
Jump to navigationJump to search
Tels (talk | contribs)
tweak
No edit summary
Line 1: Line 1:
== GUI commands ==
== GUI commands ==


Commands in the main menu like:
Commands in the main menu GUI with "cmd" as first parameter


  set "mycommand argument1 argument2;"
  set "cmd" "mycommand argument1 argument2;"


are handled in <tt>idGameLocal::HandleMainMenuCommands()</tt> in ''game/game_local.cpp''.
are handled in <tt>idGameLocal::HandleMainMenuCommands()</tt> in ''game/game_local.cpp''.
Line 9: Line 9:
For each of the parts "mycommand", "argument1", "argument2" and sometimes the final ";", the routine is called again.  
For each of the parts "mycommand", "argument1", "argument2" and sometimes the final ";", the routine is called again.  


One special case is just using "set" "mycommand", this will call <tt>HandleMainMenuCommands()</tt> twice, once with "mycommand" and once with ";" as the ''menuCommand'' parameter.
One special case is just using "set" "cmd" "mycommand", this will call <tt>HandleMainMenuCommands()</tt> twice, once with "mycommand" and once with ";" as the ''menuCommand'' parameter.  
 
In addition, things like:
 
set "noTime" "1"
 
will call the routine three times, with "set", "noTime" "1" as menuCommand, respectively.


=== Solution ===
=== Solution ===
Line 30: Line 24:
  set "cmd" "log 'Some text here'";
  set "cmd" "log 'Some text here'";
  set "cmd" "mainmenu_heartbeat";
  set "cmd" "mainmenu_heartbeat";
set "noTime" "1"


== See also ==
== See also ==

Revision as of 20:27, 8 September 2011

GUI commands

Commands in the main menu GUI with "cmd" as first parameter

set "cmd" "mycommand argument1 argument2;"

are handled in idGameLocal::HandleMainMenuCommands() in game/game_local.cpp.

For each of the parts "mycommand", "argument1", "argument2" and sometimes the final ";", the routine is called again.

One special case is just using "set" "cmd" "mycommand", this will call HandleMainMenuCommands() twice, once with "mycommand" and once with ";" as the menuCommand parameter.

Solution

The routine there fore predicts how much arguments the current command takes, accumulates them on a stack. And when it has seen enough arguments, handles the command and clears the stack before returning.

Any stray ";" as command is silently skipped.

The routine will also complain if you give not enough arguments to a command.

Examples

set "cmd" "play sound/meta/menu/mnu_hover";
set "cmd" "log 'Some text here'";
set "cmd" "mainmenu_heartbeat";

See also