VG3_keys_menu_insert()
[added in version 1.2]
Insert an entry into keyboard-menu and gamecontroller-/joystick-menu
of the system-menu for all found devices and respect individual saved values.
SYNTAX
void
VG3_keys_menu_insert(struct vg3_keys *skeys,
const char *svdata,
struct vg3_multilang *mlang,
int keyref,
const char *keyname,
const char *keyinfo,
struct vg3_sysmenu_submenu *subm_keyb,
int keyidx,
struct vg3_sysmenu_submenu *subm_gc,
int gcidx,
const char *jsname)
FUNCTION PARAMETERS
| skeys | Keys-struct |
| svdata | Savestring (created by VG3_sysmenu_savestring_insert()), or NULL |
| mlang | Multilanguage structure, or NULL |
| keyref | Arbitrary reference number for this entry, e.g. specifying its action |
| keyname | Description for the key |
| keyinfo | Short description text for menu-window for this entry |
| subm_keyb | Sub-menu for keyboard-entries or NULL = don't insert entry for keyboard |
| keyidx | Default key for keyboard: one of the values of VGAG3_KEYS |
| subm_gc | Sub-menu for gamecontroller-/joystick-entries or NULL = don't insert entry for gamecontroller/joysticks |
| gcidx | Default key for gamecontroller: one of the values of VGAG3_GCS |
| jsname | Default key for joysticks: "Button-<number>" or "Axis-<number>:<pos|neg>" |
DESCRIPTION
Insert an entry into the keyboard-menu and the gamecontroller-/joystick-menu
of the system-menu for all found devices.
This will call VG3_sysmenu_simple_keyboardentry()
for the keyboard if subm_keyb is not NULL,
and VG3_sysmenu_simple_gcentry()
for all found gamecontrollers/joysticks if subm_gc is not NULL.
As default value will be used
- keyidx for the keyboard-entry
- gcidx for the entry for gamecontrollers resp. jsname for joysticks
jsname must be a string (but may be NULL if not to be set)
- for buttons: "Button-<number>" (e.g. "Button-1")
- for axes: "Axis-<number>:<pos|neg>" (e.g. "Axis-1:neg" or "Axis-2:pos")
If svdata is not NULL, the actual value will be taken from it
instead using the default value.
EXAMPLE
Single-player:
struct vg3_sysmenu *sysm;
struct vg3_window *wstruct;
struct vg3_sysmenu_submenu *subm_keyb, *subm_gc;
struct vg3_keys *skeys;
struct vg3_multilang *mlang;
char *svdata;
enum { GO_RIGHT, GO_LEFT };
mlang = NULL;
/* open window */
wstruct = VG3_window_new(argv[0], VGAG3_VGAVERSION_LOW, VGAG3_WINSCALE_NOSCALE);
if (wstruct == NULL) { fprintf(stderr, "%s\n", VG3_error()); exit(1); }
/* create system-menu */
sysm = VG3_sysmenu_new(wstruct, NULL, VG3_color_brightness(VGAG3_COLOR_GREEN, 50), VGAG3_COLOR_GREEN);
/* create keyboard-submenu */
subm_keyb = VG3_sysmenu_simple_keyboardmenu(sysm, NULL);
/* create gamecontroller-/joystic-submenu, but only if devices are installed */
subm_gc = NULL;
if (VG3_gamecontroller_getall(wstruct, NULL) > 0) { subm_gc = VG3_sysmenu_simple_gcmenu(sysm, NULL); }
/* read saved key-values from file */
{ char buf[128];
FILE *ffp = fopen("save.data", "r");
if (ffp != NULL) { fgets(buf, sizeof(buf), ffp); fclose(ffp); } else { *buf = '\0'; }
svdata = strdup(buf);
}
/* create keys-struct and insert for all found devices two keys */
skeys = VG3_keys_new(wstruct, sysm);
/* insert "going to the right" */
VG3_keys_menu_insert(skeys, svdata, mlang,
GO_RIGHT, "Right", "Go to the right",
subm_keyb, VGAG3_KEY_RCURS,
subm_gc, VGAG3_GC_AXIS_LEFTX_RIGHT, "Axis-1:pos");
/* insert "going to the left" */
VG3_keys_menu_insert(skeys, svdata, mlang,
GO_LEFT, "Left", "Go to the left",
subm_keyb, VGAG3_KEY_LCURS,
subm_gc, VGAG3_GC_AXIS_LEFTX_LEFT, "Axis-1:neg");
/* game-loop */
VG3_discard_input(wstruct);
for (;;) {
if (VG3_inputevent_update(wstruct)) { break; }
/* quit */
if (VG3_key_ispressed(wstruct, VGAG3_KEY_Q, VGAG3_IS_NEW_PRESSED)) { break; }
/* call system-menu */
if (VG3_key_ispressed(wstruct, VGAG3_KEY_ESC, VGAG3_IS_NEW_PRESSED)) {
if (VG3_sysmenu_exec(sysm)) { break; }
}
/* check for "going right" */
if (VG3_keys_key_ispressed(skeys, NULL, 0, -1, GO_RIGHT, VGAG3_IS_PRESSED)) {
[... go to the right ...]
}
/* check for "going left" */
if (VG3_keys_key_ispressed(skeys, NULL, 0, -1, GO_LEFT, VGAG3_IS_PRESSED)) {
[... go to the left ...]
}
[... remaining code of loop ...]
}
VG3_discard_input(wstruct);
/* free keys-struct */
VG3_keys_free(skeys);
/* save key-values to file and free system-menu */
{ FILE *ffp = fopen("save.data", "w");
if (ffp != NULL) {
char *svdata_new = VG3_sysmenu_savestring_insert(sysm, svdata);
fprintf(ffp, "%s", svdata_new);
fclose(ffp);
free(svdata_new);
}
free(svdata);
}
VG3_sysmenu_free(sysm);
SEE ALSO