Set and save control options.
This commit is contained in:
parent
f5bf3ddcaa
commit
59e8b08fdc
|
@ -73,27 +73,27 @@ static void setGeneralOptions(void)
|
||||||
{
|
{
|
||||||
soundVolumeWidget = getWidget("soundVolume", "options");
|
soundVolumeWidget = getWidget("soundVolume", "options");
|
||||||
soundVolumeWidget->action = soundVolume;
|
soundVolumeWidget->action = soundVolume;
|
||||||
soundVolumeWidget->value = app.config.soundVolume;
|
soundVolumeWidget->value[0] = app.config.soundVolume;
|
||||||
|
|
||||||
musicVolumeWidget = getWidget("musicVolume", "options");
|
musicVolumeWidget = getWidget("musicVolume", "options");
|
||||||
musicVolumeWidget->action = musicVolume;
|
musicVolumeWidget->action = musicVolume;
|
||||||
musicVolumeWidget->value = app.config.musicVolume;
|
musicVolumeWidget->value[0] = app.config.musicVolume;
|
||||||
|
|
||||||
bloodGoreWidget = getWidget("bloodGore", "options");
|
bloodGoreWidget = getWidget("bloodGore", "options");
|
||||||
bloodGoreWidget->action = bloodGore;
|
bloodGoreWidget->action = bloodGore;
|
||||||
bloodGoreWidget->value = app.config.blood;
|
bloodGoreWidget->value[0] = app.config.blood;
|
||||||
|
|
||||||
trophyScreenshotWidget = getWidget("trophyScreenshot", "options");
|
trophyScreenshotWidget = getWidget("trophyScreenshot", "options");
|
||||||
trophyScreenshotWidget->action = trophyScreenshot;
|
trophyScreenshotWidget->action = trophyScreenshot;
|
||||||
trophyScreenshotWidget->value = app.config.trophyScreenshot;
|
trophyScreenshotWidget->value[0] = app.config.trophyScreenshot;
|
||||||
|
|
||||||
trophyAlertWidget = getWidget("trophyAlert", "options");
|
trophyAlertWidget = getWidget("trophyAlert", "options");
|
||||||
trophyAlertWidget->action = trophyAlert;
|
trophyAlertWidget->action = trophyAlert;
|
||||||
trophyAlertWidget->value = app.config.trophyAlert;
|
trophyAlertWidget->value[0] = app.config.trophyAlert;
|
||||||
|
|
||||||
inventoryWidget = getWidget("inventory", "options");
|
inventoryWidget = getWidget("inventory", "options");
|
||||||
inventoryWidget->action = inventory;
|
inventoryWidget->action = inventory;
|
||||||
inventoryWidget->value = app.config.inventory;
|
inventoryWidget->value[0] = app.config.inventory;
|
||||||
|
|
||||||
controlsWidget = getWidget("controls", "options");
|
controlsWidget = getWidget("controls", "options");
|
||||||
controlsWidget->action = controls;
|
controlsWidget->action = controls;
|
||||||
|
@ -104,15 +104,25 @@ static void setGeneralOptions(void)
|
||||||
|
|
||||||
static void setControlOptions(void)
|
static void setControlOptions(void)
|
||||||
{
|
{
|
||||||
getWidget("left", "controls")->value = app.config.keyControls[CONTROL_LEFT];
|
getWidget("left", "controls")->value[0] = app.config.keyControls[CONTROL_LEFT];
|
||||||
getWidget("right", "controls")->value = app.config.keyControls[CONTROL_RIGHT];
|
getWidget("right", "controls")->value[0] = app.config.keyControls[CONTROL_RIGHT];
|
||||||
getWidget("up", "controls")->value = app.config.keyControls[CONTROL_UP];
|
getWidget("up", "controls")->value[0] = app.config.keyControls[CONTROL_UP];
|
||||||
getWidget("down", "controls")->value = app.config.keyControls[CONTROL_DOWN];
|
getWidget("down", "controls")->value[0] = app.config.keyControls[CONTROL_DOWN];
|
||||||
getWidget("jump", "controls")->value = app.config.keyControls[CONTROL_JUMP];
|
getWidget("jump", "controls")->value[0] = app.config.keyControls[CONTROL_JUMP];
|
||||||
getWidget("fire", "controls")->value = app.config.keyControls[CONTROL_FIRE];
|
getWidget("fire", "controls")->value[0] = app.config.keyControls[CONTROL_FIRE];
|
||||||
getWidget("jetpack", "controls")->value = app.config.keyControls[CONTROL_JETPACK];
|
getWidget("jetpack", "controls")->value[0] = app.config.keyControls[CONTROL_JETPACK];
|
||||||
getWidget("pause", "controls")->value = app.config.keyControls[CONTROL_PAUSE];
|
getWidget("pause", "controls")->value[0] = app.config.keyControls[CONTROL_PAUSE];
|
||||||
getWidget("map", "controls")->value = app.config.keyControls[CONTROL_MAP];
|
getWidget("map", "controls")->value[0] = app.config.keyControls[CONTROL_MAP];
|
||||||
|
|
||||||
|
getWidget("left", "controls")->value[1] = app.config.joypadControls[CONTROL_LEFT];
|
||||||
|
getWidget("right", "controls")->value[1] = app.config.joypadControls[CONTROL_RIGHT];
|
||||||
|
getWidget("up", "controls")->value[1] = app.config.joypadControls[CONTROL_UP];
|
||||||
|
getWidget("down", "controls")->value[1] = app.config.joypadControls[CONTROL_DOWN];
|
||||||
|
getWidget("jump", "controls")->value[1] = app.config.joypadControls[CONTROL_JUMP];
|
||||||
|
getWidget("fire", "controls")->value[1] = app.config.joypadControls[CONTROL_FIRE];
|
||||||
|
getWidget("jetpack", "controls")->value[1] = app.config.joypadControls[CONTROL_JETPACK];
|
||||||
|
getWidget("pause", "controls")->value[1] = app.config.joypadControls[CONTROL_PAUSE];
|
||||||
|
getWidget("map", "controls")->value[1] = app.config.joypadControls[CONTROL_MAP];
|
||||||
}
|
}
|
||||||
|
|
||||||
static void logic(void)
|
static void logic(void)
|
||||||
|
@ -135,36 +145,36 @@ static void draw(void)
|
||||||
|
|
||||||
static void soundVolume(void)
|
static void soundVolume(void)
|
||||||
{
|
{
|
||||||
app.config.soundVolume = soundVolumeWidget->value;
|
app.config.soundVolume = soundVolumeWidget->value[0];
|
||||||
|
|
||||||
Mix_Volume(-1, app.config.soundVolume);
|
Mix_Volume(-1, app.config.soundVolume);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void musicVolume(void)
|
static void musicVolume(void)
|
||||||
{
|
{
|
||||||
app.config.musicVolume = musicVolumeWidget->value;
|
app.config.musicVolume = musicVolumeWidget->value[0];
|
||||||
|
|
||||||
Mix_VolumeMusic(app.config.musicVolume);
|
Mix_VolumeMusic(app.config.musicVolume);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bloodGore(void)
|
static void bloodGore(void)
|
||||||
{
|
{
|
||||||
app.config.blood = bloodGoreWidget->value;
|
app.config.blood = bloodGoreWidget->value[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
static void trophyScreenshot(void)
|
static void trophyScreenshot(void)
|
||||||
{
|
{
|
||||||
app.config.trophyScreenshot = trophyScreenshotWidget->value;
|
app.config.trophyScreenshot = trophyScreenshotWidget->value[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
static void trophyAlert(void)
|
static void trophyAlert(void)
|
||||||
{
|
{
|
||||||
app.config.trophyAlert = trophyAlertWidget->value;
|
app.config.trophyAlert = trophyAlertWidget->value[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
static void inventory(void)
|
static void inventory(void)
|
||||||
{
|
{
|
||||||
app.config.inventory = inventoryWidget->value;
|
app.config.inventory = inventoryWidget->value[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
static void controls(void)
|
static void controls(void)
|
||||||
|
@ -176,6 +186,27 @@ static void controls(void)
|
||||||
showWidgetGroup("controls");
|
showWidgetGroup("controls");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void updateControlConfig(void)
|
||||||
|
{
|
||||||
|
app.config.keyControls[CONTROL_LEFT] = getWidget("left", "controls")->value[0];
|
||||||
|
app.config.keyControls[CONTROL_RIGHT] = getWidget("right", "controls")->value[0];
|
||||||
|
app.config.keyControls[CONTROL_UP] = getWidget("up", "controls")->value[0];
|
||||||
|
app.config.keyControls[CONTROL_DOWN] = getWidget("down", "controls")->value[0];
|
||||||
|
app.config.keyControls[CONTROL_JUMP] = getWidget("jump", "controls")->value[0];
|
||||||
|
app.config.keyControls[CONTROL_FIRE] = getWidget("fire", "controls")->value[0];
|
||||||
|
app.config.keyControls[CONTROL_MAP] = getWidget("map", "controls")->value[0];
|
||||||
|
app.config.keyControls[CONTROL_PAUSE] = getWidget("pause", "controls")->value[0];
|
||||||
|
|
||||||
|
app.config.joypadControls[CONTROL_LEFT] = getWidget("left", "controls")->value[1];
|
||||||
|
app.config.joypadControls[CONTROL_RIGHT] = getWidget("right", "controls")->value[1];
|
||||||
|
app.config.joypadControls[CONTROL_UP] = getWidget("up", "controls")->value[1];
|
||||||
|
app.config.joypadControls[CONTROL_DOWN] = getWidget("down", "controls")->value[1];
|
||||||
|
app.config.joypadControls[CONTROL_JUMP] = getWidget("jump", "controls")->value[1];
|
||||||
|
app.config.joypadControls[CONTROL_FIRE] = getWidget("fire", "controls")->value[1];
|
||||||
|
app.config.joypadControls[CONTROL_MAP] = getWidget("map", "controls")->value[1];
|
||||||
|
app.config.joypadControls[CONTROL_PAUSE] = getWidget("pause", "controls")->value[1];
|
||||||
|
}
|
||||||
|
|
||||||
static void back(void)
|
static void back(void)
|
||||||
{
|
{
|
||||||
switch (section)
|
switch (section)
|
||||||
|
@ -189,6 +220,7 @@ static void back(void)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SECTION_CONTROLS:
|
case SECTION_CONTROLS:
|
||||||
|
updateControlConfig();
|
||||||
playSound(SND_MENU_BACK, 0);
|
playSound(SND_MENU_BACK, 0);
|
||||||
section = SECTION_MAIN;
|
section = SECTION_MAIN;
|
||||||
showWidgetGroup("options");
|
showWidgetGroup("options");
|
||||||
|
|
|
@ -487,7 +487,7 @@ struct Widget {
|
||||||
int y;
|
int y;
|
||||||
int w;
|
int w;
|
||||||
int h;
|
int h;
|
||||||
int value;
|
int value[2];
|
||||||
int minValue;
|
int minValue;
|
||||||
int maxValue;
|
int maxValue;
|
||||||
int visible;
|
int visible;
|
||||||
|
|
|
@ -25,6 +25,7 @@ static void loadWidgets(void);
|
||||||
static void createWidgetOptions(Widget *w, char *options);
|
static void createWidgetOptions(Widget *w, char *options);
|
||||||
static void selectWidget(int dir);
|
static void selectWidget(int dir);
|
||||||
static void updateWidgetValue(int dir);
|
static void updateWidgetValue(int dir);
|
||||||
|
static void handleInputWidget(void);
|
||||||
|
|
||||||
static Widget widgets[MAX_WIDGETS];
|
static Widget widgets[MAX_WIDGETS];
|
||||||
static Widget *selectedWidget;
|
static Widget *selectedWidget;
|
||||||
|
@ -51,41 +52,54 @@ void initWidgets(void)
|
||||||
|
|
||||||
void doWidgets(void)
|
void doWidgets(void)
|
||||||
{
|
{
|
||||||
if (isControl(CONTROL_UP) || app.keyboard[SDL_SCANCODE_UP])
|
if (!app.awaitingWidgetInput)
|
||||||
{
|
{
|
||||||
selectWidget(-1);
|
if (isControl(CONTROL_UP) || app.keyboard[SDL_SCANCODE_UP])
|
||||||
|
|
||||||
app.keyboard[SDL_SCANCODE_UP] = 0;
|
|
||||||
clearControl(CONTROL_UP);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isControl(CONTROL_DOWN) || app.keyboard[SDL_SCANCODE_DOWN])
|
|
||||||
{
|
|
||||||
selectWidget(1);
|
|
||||||
|
|
||||||
app.keyboard[SDL_SCANCODE_DOWN] = 0;
|
|
||||||
clearControl(CONTROL_DOWN);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isControl(CONTROL_LEFT) || app.keyboard[SDL_SCANCODE_LEFT])
|
|
||||||
{
|
|
||||||
updateWidgetValue(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isControl(CONTROL_RIGHT) || app.keyboard[SDL_SCANCODE_RIGHT])
|
|
||||||
{
|
|
||||||
updateWidgetValue(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isControl(CONTROL_FIRE) || app.keyboard[SDL_SCANCODE_RETURN] || app.keyboard[SDL_SCANCODE_SPACE])
|
|
||||||
{
|
|
||||||
if (selectedWidget->type != WT_INPUT)
|
|
||||||
{
|
{
|
||||||
selectedWidget->action();
|
selectWidget(-1);
|
||||||
|
|
||||||
|
app.keyboard[SDL_SCANCODE_UP] = 0;
|
||||||
|
clearControl(CONTROL_UP);
|
||||||
}
|
}
|
||||||
|
|
||||||
app.keyboard[SDL_SCANCODE_SPACE] = app.keyboard[SDL_SCANCODE_RETURN] = 0;
|
if (isControl(CONTROL_DOWN) || app.keyboard[SDL_SCANCODE_DOWN])
|
||||||
clearControl(CONTROL_FIRE);
|
{
|
||||||
|
selectWidget(1);
|
||||||
|
|
||||||
|
app.keyboard[SDL_SCANCODE_DOWN] = 0;
|
||||||
|
clearControl(CONTROL_DOWN);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isControl(CONTROL_LEFT) || app.keyboard[SDL_SCANCODE_LEFT])
|
||||||
|
{
|
||||||
|
updateWidgetValue(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isControl(CONTROL_RIGHT) || app.keyboard[SDL_SCANCODE_RIGHT])
|
||||||
|
{
|
||||||
|
updateWidgetValue(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isControl(CONTROL_FIRE) || app.keyboard[SDL_SCANCODE_RETURN] || app.keyboard[SDL_SCANCODE_SPACE])
|
||||||
|
{
|
||||||
|
if (selectedWidget->type != WT_INPUT)
|
||||||
|
{
|
||||||
|
selectedWidget->action();
|
||||||
|
}
|
||||||
|
else if (!isControl(CONTROL_FIRE))
|
||||||
|
{
|
||||||
|
app.awaitingWidgetInput = 1;
|
||||||
|
app.lastKeyPressed = 0;
|
||||||
|
app.lastButtonPressed = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
app.keyboard[SDL_SCANCODE_SPACE] = app.keyboard[SDL_SCANCODE_RETURN] = 0;
|
||||||
|
clearControl(CONTROL_FIRE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
handleInputWidget();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,12 +107,12 @@ static void updateWidgetValue(int dir)
|
||||||
{
|
{
|
||||||
if (selectedWidget->type == WT_SLIDER)
|
if (selectedWidget->type == WT_SLIDER)
|
||||||
{
|
{
|
||||||
selectedWidget->value = limit(selectedWidget->value + dir, selectedWidget->minValue, selectedWidget->maxValue);
|
selectedWidget->value[0] = limit(selectedWidget->value[0] + dir, selectedWidget->minValue, selectedWidget->maxValue);
|
||||||
selectedWidget->action();
|
selectedWidget->action();
|
||||||
}
|
}
|
||||||
else if (selectedWidget->type == WT_SPINNER)
|
else if (selectedWidget->type == WT_SPINNER)
|
||||||
{
|
{
|
||||||
selectedWidget->value = limit(selectedWidget->value + dir, 0, selectedWidget->numOptions - 1);
|
selectedWidget->value[0] = limit(selectedWidget->value[0] + dir, 0, selectedWidget->numOptions - 1);
|
||||||
selectedWidget->action();
|
selectedWidget->action();
|
||||||
app.keyboard[SDL_SCANCODE_LEFT] = app.keyboard[SDL_SCANCODE_RIGHT] = 0;
|
app.keyboard[SDL_SCANCODE_LEFT] = app.keyboard[SDL_SCANCODE_RIGHT] = 0;
|
||||||
clearControl(CONTROL_LEFT);
|
clearControl(CONTROL_LEFT);
|
||||||
|
@ -107,6 +121,35 @@ static void updateWidgetValue(int dir)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void handleInputWidget(void)
|
||||||
|
{
|
||||||
|
if (app.keyboard[SDL_SCANCODE_ESCAPE])
|
||||||
|
{
|
||||||
|
app.awaitingWidgetInput = 0;
|
||||||
|
}
|
||||||
|
else if (app.keyboard[SDL_SCANCODE_BACKSPACE])
|
||||||
|
{
|
||||||
|
selectedWidget->value[0] = 0;
|
||||||
|
selectedWidget->value[1] = -1;
|
||||||
|
|
||||||
|
app.awaitingWidgetInput = 0;
|
||||||
|
}
|
||||||
|
else if (app.lastKeyPressed != 0 || app.lastButtonPressed != -1)
|
||||||
|
{
|
||||||
|
if (app.lastKeyPressed != 0)
|
||||||
|
{
|
||||||
|
selectedWidget->value[0] = app.lastKeyPressed;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (app.lastButtonPressed != -1)
|
||||||
|
{
|
||||||
|
selectedWidget->value[1] = app.lastButtonPressed;
|
||||||
|
}
|
||||||
|
|
||||||
|
app.awaitingWidgetInput = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void drawWidgets(void)
|
void drawWidgets(void)
|
||||||
{
|
{
|
||||||
int i, j, x, tw, th, outline;
|
int i, j, x, tw, th, outline;
|
||||||
|
@ -136,7 +179,7 @@ void drawWidgets(void)
|
||||||
switch (w->type)
|
switch (w->type)
|
||||||
{
|
{
|
||||||
case WT_SLIDER:
|
case WT_SLIDER:
|
||||||
drawRect(w->x + w->w + 25, w->y, 500 * (w->value * 1.0 / w->maxValue), 40, 0, 128, 0, 255);
|
drawRect(w->x + w->w + 25, w->y, 500 * (w->value[0] * 1.0 / w->maxValue), 40, 0, 128, 0, 255);
|
||||||
drawOutlineRect(w->x + w->w + 25, w->y, 500, 40, 0, outline, 0, 255);
|
drawOutlineRect(w->x + w->w + 25, w->y, 500, 40, 0, outline, 0, 255);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -148,7 +191,7 @@ void drawWidgets(void)
|
||||||
|
|
||||||
tw += 25;
|
tw += 25;
|
||||||
|
|
||||||
if (j == w->value)
|
if (j == w->value[0])
|
||||||
{
|
{
|
||||||
drawRect(x, w->y, tw, w->h, 0, 128, 0, 255);
|
drawRect(x, w->y, tw, w->h, 0, 128, 0, 255);
|
||||||
drawOutlineRect(x, w->y, tw, w->h, 0, outline, 0, 255);
|
drawOutlineRect(x, w->y, tw, w->h, 0, outline, 0, 255);
|
||||||
|
@ -164,7 +207,22 @@ void drawWidgets(void)
|
||||||
x = w->x + w->w + 25;
|
x = w->x + w->w + 25;
|
||||||
drawRect(x, w->y, 200, w->h, 0, 0, 0, 255);
|
drawRect(x, w->y, 200, w->h, 0, 0, 0, 255);
|
||||||
drawOutlineRect(x, w->y, 200, w->h, 0, outline, 0, 255);
|
drawOutlineRect(x, w->y, 200, w->h, 0, outline, 0, 255);
|
||||||
drawText(x + 100, w->y + 2, 24, TA_CENTER, colors.white, "%s", SDL_GetScancodeName(w->value));
|
if (app.awaitingWidgetInput && w == selectedWidget)
|
||||||
|
{
|
||||||
|
drawText(x + 100, w->y + 2, 24, TA_CENTER, colors.white, "...");
|
||||||
|
}
|
||||||
|
else if (w->value[0] != -1 && w->value[1] != -1)
|
||||||
|
{
|
||||||
|
drawText(x + 100, w->y + 2, 24, TA_CENTER, colors.white, "%s or Btn %d", SDL_GetScancodeName(w->value[0]), w->value[1]);
|
||||||
|
}
|
||||||
|
else if (w->value[0] != -1)
|
||||||
|
{
|
||||||
|
drawText(x + 100, w->y + 2, 24, TA_CENTER, colors.white, "%s", SDL_GetScancodeName(w->value[0]));
|
||||||
|
}
|
||||||
|
else if (w->value[1] != -1)
|
||||||
|
{
|
||||||
|
drawText(x + 100, w->y + 2, 24, TA_CENTER, colors.white, "Btn %d", w->value[1]);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -348,6 +406,9 @@ static void loadWidgetGroup(char *filename)
|
||||||
w->minValue = cJSON_GetObjectItem(node, "minValue")->valueint;
|
w->minValue = cJSON_GetObjectItem(node, "minValue")->valueint;
|
||||||
w->maxValue = cJSON_GetObjectItem(node, "maxValue")->valueint;
|
w->maxValue = cJSON_GetObjectItem(node, "maxValue")->valueint;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WT_INPUT:
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue