Further custom control integration.

This commit is contained in:
Steve 2016-03-05 08:42:35 +00:00
parent 7979b175a2
commit acd53f6b97
9 changed files with 263 additions and 89 deletions

111
data/widgets/controls.json Normal file
View File

@ -0,0 +1,111 @@
[
{
"name" : "fire",
"group" : "controls",
"type" : "WT_CONTROL_CONFIG",
"x" : 0,
"y" : 0,
"w" : 175,
"h": 34
},
{
"name" : "accelerate",
"group" : "controls",
"type" : "WT_CONTROL_CONFIG",
"x" : 0,
"y" : 0,
"w" : 175,
"h": 34
},
{
"name" : "missile",
"group" : "controls",
"type" : "WT_CONTROL_CONFIG",
"x" : 0,
"y" : 0,
"w" : 175,
"h": 34
},
{
"name" : "boost",
"group" : "controls",
"type" : "WT_CONTROL_CONFIG",
"x" : 0,
"y" : 0,
"w" : 175,
"h": 34
},
{
"name" : "brake",
"group" : "controls",
"type" : "WT_CONTROL_CONFIG",
"x" : 0,
"y" : 0,
"w" : 175,
"h": 34
},
{
"name" : "ecm",
"group" : "controls",
"type" : "WT_CONTROL_CONFIG",
"x" : 0,
"y" : 0,
"w" : 175,
"h": 34
},
{
"name" : "target",
"group" : "controls",
"type" : "WT_CONTROL_CONFIG",
"x" : 0,
"y" : 0,
"w" : 175,
"h": 34
},
{
"name" : "radar",
"group" : "controls",
"type" : "WT_CONTROL_CONFIG",
"x" : 0,
"y" : 0,
"w" : 175,
"h": 34
},
{
"name" : "guns",
"group" : "controls",
"type" : "WT_CONTROL_CONFIG",
"x" : 0,
"y" : 0,
"w" : 175,
"h": 34
},
{
"name" : "prevFighter",
"group" : "controls",
"type" : "WT_CONTROL_CONFIG",
"x" : 0,
"y" : 0,
"w" : 175,
"h": 34
},
{
"name" : "nextFighter",
"group" : "controls",
"type" : "WT_CONTROL_CONFIG",
"x" : 0,
"y" : 0,
"w" : 175,
"h": 34
},
{
"name" : "ok",
"group" : "controls",
"type" : "WT_BUTTON",
"text" : "OK",
"x" : -1,
"y" : 650,
"w" : 100,
"h": 34
}
]

View File

@ -128,8 +128,8 @@ enum
CONTROL_MISSILE,
CONTROL_GUNS,
CONTROL_RADAR,
CONTROL_NEXT_FIGHTER,
CONTROL_PREV_FIGHTER,
CONTROL_NEXT_FIGHTER,
CONTROL_MAX
};
@ -271,8 +271,7 @@ enum
WT_IMG_BUTTON,
WT_SELECT,
WT_SELECT_BUTTON,
WT_KEY_CONFIG,
WT_MOUSE_CONFIG
WT_CONTROL_CONFIG
};
enum

View File

@ -1,71 +0,0 @@
/*
Copyright (C) 2015-2016 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "controls.h"
int isKeyControl(int type)
{
return app.keyboard[app.keyControls[type]];
}
void clearControl(int type)
{
app.keyboard[app.keyControls[type]] = 0;
}
void initControlsDisplay(void)
{
getWidget("keyMissile", "controls")->value = app.keyControls[CONTROL_MISSILE];
getWidget("keyBoost", "controls")->value = app.keyControls[CONTROL_BOOST];
getWidget("keyECM", "controls")->value = app.keyControls[CONTROL_ECM];
getWidget("keyBrake", "controls")->value = app.keyControls[CONTROL_BRAKE];
getWidget("keyRadar", "controls")->value = app.keyControls[CONTROL_RADAR];
getWidget("keyTarget", "controls")->value = app.keyControls[CONTROL_TARGET];
getWidget("keyGuns", "controls")->value = app.keyControls[CONTROL_GUNS];
getWidget("keyPrevFighter", "controls")->value = app.keyControls[CONTROL_PREV_FIGHTER];
getWidget("keyNextFighter", "controls")->value = app.keyControls[CONTROL_NEXT_FIGHTER];
}
void drawControls(void)
{
SDL_Rect r;
SDL_SetRenderDrawBlendMode(app.renderer, SDL_BLENDMODE_BLEND);
SDL_SetRenderDrawColor(app.renderer, 0, 0, 0, 128);
SDL_RenderFillRect(app.renderer, NULL);
SDL_SetRenderDrawBlendMode(app.renderer, SDL_BLENDMODE_NONE);
r.w = 800;
r.h = 650;
r.x = (SCREEN_WIDTH / 2) - r.w / 2;
r.y = (SCREEN_HEIGHT / 2) - r.h / 2;
SDL_SetRenderDrawColor(app.renderer, 0, 0, 0, 0);
SDL_RenderFillRect(app.renderer, &r);
SDL_SetRenderDrawColor(app.renderer, 200, 200, 200, 255);
SDL_RenderDrawRect(app.renderer, &r);
drawText(SCREEN_WIDTH / 2, 50, 28, TA_CENTER, colors.white, _("Controls"));
SDL_SetRenderDrawColor(app.renderer, 128, 128, 128, 255);
SDL_RenderDrawLine(app.renderer, r.x, r.y + 65, r.x + r.w, r.y + 65);
drawWidgets("controls");
}

128
src/system/controls.c Normal file
View File

@ -0,0 +1,128 @@
/*
Copyright (C) 2015-2016 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "controls.h"
static const char *controlName[CONTROL_MAX];
static Widget *controlWidget[CONTROL_MAX];
static const char *widgetNames[] = {"fire", "accelerate", "boost", "ecm", "brake", "target", "missile", "guns", "radar", "nextFighter", "prevFighter"};
void initControls(void)
{
int i;
controlName[CONTROL_FIRE] = _("Fire");
controlName[CONTROL_ACCELERATE] = _("Accelerate");
controlName[CONTROL_BOOST] = _("Boost");
controlName[CONTROL_ECM] = _("ECM");
controlName[CONTROL_BRAKE] = _("Brake");
controlName[CONTROL_TARGET] = _("Select Target");
controlName[CONTROL_MISSILE] = _("Fire Missile");
controlName[CONTROL_GUNS] = _("Cycle Guns");
controlName[CONTROL_RADAR] = _("Cycle Radar");
controlName[CONTROL_NEXT_FIGHTER] = _("Next Fighter");
controlName[CONTROL_PREV_FIGHTER] = _("Previous Fighter");
for (i = 0 ; i < CONTROL_MAX ; i++)
{
controlWidget[i] = getWidget(widgetNames[i], "controls");
controlWidget[i]->numOptions = 2;
controlWidget[i]->options = malloc(2 * sizeof(char*));
controlWidget[i]->options[0] = malloc(sizeof(char) * MAX_NAME_LENGTH);
controlWidget[i]->options[1] = malloc(sizeof(char) * MAX_NAME_LENGTH);
strcpy(controlWidget[i]->options[0], "");
strcpy(controlWidget[i]->options[1], "");
}
}
int isKeyControl(int type)
{
return app.keyboard[app.keyControls[type]];
}
void clearControl(int type)
{
app.keyboard[app.keyControls[type]] = 0;
}
void initControlsDisplay(void)
{
int i;
for (i = 0 ; i < CONTROL_MAX ; i++)
{
if (app.mouseControls[i] != 0)
{
sprintf(controlWidget[i]->options[0], "%s", SDL_GetScancodeName(app.keyControls[i]));
}
if (app.mouseControls[i] != -1)
{
sprintf(controlWidget[i]->options[1], "Btn %d", app.mouseControls[i]);
}
}
}
void drawControls(void)
{
int i;
SDL_Rect r;
SDL_SetRenderDrawBlendMode(app.renderer, SDL_BLENDMODE_BLEND);
SDL_SetRenderDrawColor(app.renderer, 0, 0, 0, 128);
SDL_RenderFillRect(app.renderer, NULL);
SDL_SetRenderDrawBlendMode(app.renderer, SDL_BLENDMODE_NONE);
r.w = 800;
r.h = 650;
r.x = (SCREEN_WIDTH / 2) - r.w / 2;
r.y = (SCREEN_HEIGHT / 2) - r.h / 2;
SDL_SetRenderDrawColor(app.renderer, 0, 0, 0, 0);
SDL_RenderFillRect(app.renderer, &r);
SDL_SetRenderDrawColor(app.renderer, 200, 200, 200, 255);
SDL_RenderDrawRect(app.renderer, &r);
drawText(SCREEN_WIDTH / 2, 50, 28, TA_CENTER, colors.white, _("Controls"));
SDL_SetRenderDrawColor(app.renderer, 128, 128, 128, 255);
SDL_RenderDrawLine(app.renderer, r.x, r.y + 65, r.x + r.w, r.y + 65);
r.x += 25;
r.y = 125;
for (i = 0 ; i < CONTROL_MAX ; i++)
{
drawText(r.x, r.y, 20, TA_LEFT, colors.white, controlName[i]);
controlWidget[i]->rect.x = r.x + 175;
controlWidget[i]->rect.y = r.y;
r.y += 50;
if (r.y > 400)
{
r.y = 125;
r.x += 400;
}
}
drawWidgets("controls");
}

View File

@ -133,7 +133,8 @@ void initGameSystem(void)
initStats,
initBattle,
initModalDialog,
initBackground
initBackground,
initControls
};
numInitFuns = sizeof(initFuncs) / sizeof(void*);

View File

@ -48,6 +48,7 @@ extern void initChallenges(void);
extern void initWidgets(void);
extern void initBackground(void);
extern void initResources(void);
extern void initControls(void);
extern void destroyLookups(void);
extern void destroyFonts(void);
extern void destroySounds(void);

View File

@ -91,8 +91,7 @@ void initLookups(void)
addLookup("WT_BUTTON", WT_BUTTON);
addLookup("WT_SELECT", WT_SELECT);
addLookup("WT_IMG_BUTTON", WT_IMG_BUTTON);
addLookup("WT_KEY_CONFIG", WT_KEY_CONFIG);
addLookup("WT_MOUSE_CONFIG", WT_MOUSE_CONFIG);
addLookup("WT_CONTROL_CONFIG", WT_CONTROL_CONFIG);
addLookup("SIDE_ALLIES", SIDE_ALLIES);
addLookup("SIDE_PIRATE", SIDE_PIRATE);

View File

@ -147,16 +147,24 @@ void drawWidgets(const char *group)
drawText(w->rect.x + w->rect.w - 10, w->rect.y + 2, 20, TA_RIGHT, colors.white, w->options[w->currentOption]);
break;
case WT_KEY_CONFIG:
case WT_CONTROL_CONFIG:
SDL_RenderDrawRect(app.renderer, &w->rect);
drawText(w->rect.x + 25, w->rect.y + 2, 20, TA_LEFT, colors.white, w->text);
drawText(w->rect.x + w->rect.w - 25, w->rect.y + 2, 20, TA_RIGHT, colors.white, "%d", w->value);
break;
case WT_MOUSE_CONFIG:
SDL_RenderDrawRect(app.renderer, &w->rect);
drawText(w->rect.x + 25, w->rect.y + 2, 20, TA_LEFT, colors.white, w->text);
drawText(w->rect.x + w->rect.w - 25, w->rect.y + 2, 20, TA_RIGHT, colors.white, "%d", w->value);
if (strlen(w->options[0]) && strlen(w->options[1]))
{
drawText(w->rect.x + (w->rect.w / 2), w->rect.y + 2, 20, TA_CENTER, colors.white, "%s or %s", w->options[0], w->options[1]);
}
else if (strlen(w->options[0]))
{
drawText(w->rect.x + (w->rect.w / 2), w->rect.y + 2, 20, TA_CENTER, colors.white, "%s", w->options[0]);
}
else if (strlen(w->options[1]))
{
drawText(w->rect.x + (w->rect.w / 2), w->rect.y + 2, 20, TA_CENTER, colors.white, "%s", w->options[1]);
}
else
{
drawText(w->rect.x + (w->rect.w / 2), w->rect.y + 2, 20, TA_CENTER, colors.white, "");
}
break;
}
@ -335,9 +343,7 @@ static void loadWidgetSet(char *filename)
createOptions(w, cJSON_GetObjectItem(node, "options")->valuestring);
break;
case WT_KEY_CONFIG:
case WT_MOUSE_CONFIG:
STRNCPY(w->text, _(cJSON_GetObjectItem(node, "text")->valuestring), MAX_NAME_LENGTH);
case WT_CONTROL_CONFIG:
w->rect.w = cJSON_GetObjectItem(node, "w")->valueint;
w->rect.h = cJSON_GetObjectItem(node, "h")->valueint;
break;