Defining user interaction
During the simulation, GAML provides you the possibility to define some function the user can execute during the execution. In this chapter, we will see how to define buttons to execute action during the simulation, how to catch click event, and how to use the user control architecture.
Index​
Catch Mouse Event​
You can catch mouse event during the simulation using the statement event. This statement has 2 required facets:
name(identifier) : Specify which event do you want to trigger (among the following values :mouse_down,mouse_up,mouse_move,mouse_enter,mouse_exitor any alphanumeric symbol/key of the keyboard, such as,'a','b'...).action(identifier) : Specify the name of the global action to call.
event mouse_down action: my_action;
The event statement has to be defined in the experiment/output/display scope. Once the event is triggered, the global action linked will be called. The action linked cannot have arguments. To get the location of the mouse click, the #user_location can be used; to get the agents on which the mouse has clicked, you can use spatial query (e.g. my_species overlapping #user_location).
global
{
action my_action
{
write "do action";
}
}
species my_species
{
}
experiment my_experiment type: gui
{
output
{
display my_display
{
species my_species;
event mouse_down action: my_action;
}
}
}
Define User command​
Anywhere in the global block, in a species or in an (GUI) experiment, user_command statements can be implemented. They can either call directly an existing action (with or without arguments) or be followed by a block that describes what to do when this command is run.
Their syntax can be (depending of the modeler needs) either:
user_command cmd_name action: action_without_arg_name;
//or
user_command cmd_name action: action_name with: [arg1::val1, arg2::val2];
//or
user_command cmd_name {
// statements
}
For instance:
user_command kill_myself action: die;
//or
user_command kill_myself action: some_action with: [arg1::5, arg2::3];
//or
user_command kill_myself {
do die;
}
Defining User command in GUI Experiment scope​
The user command can be defined directly inside the GUI experiment scope. In that case, the implemented action appears as a button in the top of the parameter view.
Here is a very short code example :
model quick_user_command_model
global {
action createAgent
{
create my_species;
}
}
species my_species {
aspect base {
draw circle(1) color:#blue;
}
}
experiment expe type:gui {
user_command cmd_inside_experiment action:createAgent;
output {
display my_display {
species my_species aspect:base;
}
}
}
And here is screenshots of the execution :
