From 5f7b6837942a4ab2b7f29eed4da895dee75afb76 Mon Sep 17 00:00:00 2001 From: XProger Date: Fri, 23 Feb 2018 02:23:42 +0300 Subject: [PATCH] #11 add player selector in controls settings --- src/core.h | 2 ++ src/inventory.h | 44 ++++++++++++++++++++++++++++---------------- src/ui.h | 6 ++++++ 3 files changed, 36 insertions(+), 16 deletions(-) diff --git a/src/core.h b/src/core.h index 1682477..0b0818c 100644 --- a/src/core.h +++ b/src/core.h @@ -341,6 +341,8 @@ namespace Core { uint8 multiaim; KeySet keys[cMAX]; } controls[2]; + + uint8 playerIndex; // temporary, used only for setting controls } settings; bool resetState; diff --git a/src/inventory.h b/src/inventory.h index 811c811..2a9b303 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -14,11 +14,8 @@ #endif #define INVENTORY_HEIGHT 2048.0f - #define TITLE_LOADING 64.0f - - -#define LINE_HEIGHT 20.0f +#define LINE_HEIGHT 20.0f struct OptionItem { enum Type { @@ -37,16 +34,20 @@ struct OptionItem { OptionItem(Type type = TYPE_EMPTY, StringID title = STR_NOT_IMPLEMENTED, intptr_t offset = 0, uint32 color = 0xFFFFFFFF, int icon = 0, uint8 maxValue = 0, bool bar = false) : type(type), title(title), offset(offset), color(color), icon(icon), maxValue(maxValue), bar(bar) {} float drawParam(float x, float y, float w, StringID oStr, bool active, uint8 value) const { - float d = x + w * 0.5f; - UI::textOut(vec2(x + 32.0f, y), oStr); - UI::textOut(vec2(d, y), StringID(color + int(value)), UI::aCenter, w * 0.5f - 32.0f); // color as StringID + if (oStr != STR_NOT_IMPLEMENTED) { + UI::textOut(vec2(x + 32.0f, y), oStr); + x = x + w * 0.5f; + w = w * 0.5f - 32.0f; + } + + UI::textOut(vec2(x, y), StringID(color + int(value)), UI::aCenter, w); // color as StringID if (active) { float maxWidth = UI::getTextSize(STR[color + value]).x; maxWidth = maxWidth * 0.5f + 8.0f; - d = (d + d + w * 0.5f - 32.0f) * 0.5f; + x += w * 0.5f; - if (value > 0) UI::specOut(vec2(d - maxWidth - 16.0f, y), 108); - if (value < maxValue) UI::specOut(vec2(d + maxWidth, y), 109); + if (value > 0) UI::specOut(vec2(x - maxWidth - 16.0f, y), 108); + if (value < maxValue) UI::specOut(vec2(x + maxWidth, y), 109); } return y + LINE_HEIGHT; } @@ -112,15 +113,18 @@ static const OptionItem optSound[] = { OptionItem( OptionItem::TYPE_PARAM, STR_REVERBERATION, SETTINGS( audio.reverb ), STR_OFF, 0, 1 ), }; -static OptionItem optControls[] = { - OptionItem( OptionItem::TYPE_TITLE, STR_SELECT_LEVEL ), +static const OptionItem optControls[] = { + OptionItem( OptionItem::TYPE_TITLE, STR_SET_CONTROLS ), OptionItem( ), + OptionItem( OptionItem::TYPE_PARAM, STR_NOT_IMPLEMENTED, SETTINGS( playerIndex ), STR_PLAYER_1, 0, 1 ), OptionItem( OptionItem::TYPE_PARAM, STR_OPT_CONTROLS_GAMEPAD, SETTINGS( controls[0].joyIndex ), STR_GAMEPAD_1, 0, 3 ), OptionItem( OptionItem::TYPE_PARAM, STR_OPT_CONTROLS_VIBRATION, SETTINGS( controls[0].vibration ), STR_OFF, 0, 1 ), OptionItem( OptionItem::TYPE_PARAM, STR_OPT_CONTROLS_RETARGET, SETTINGS( controls[0].retarget ), STR_OFF, 0, 1 ), OptionItem( OptionItem::TYPE_PARAM, STR_OPT_CONTROLS_MULTIAIM, SETTINGS( controls[0].multiaim ), STR_OFF, 0, 1 ), }; +static OptionItem optControlsPlayer[COUNT(optControls)]; + static OptionItem optPassport[] = { OptionItem( OptionItem::TYPE_TITLE, STR_SELECT_LEVEL ), OptionItem( ), @@ -263,8 +267,14 @@ struct Inventory { optCount = COUNT(optSound); return optSound; case TR::Entity::INV_CONTROLS : - optCount = COUNT(optControls); - return optControls; + ASSERT(optControls[2].offset == SETTINGS( playerIndex) ); + for (int i = 0; i < COUNT(optControls); i++) { + optControlsPlayer[i] = optControls[i]; + if (i > 2) + optControlsPlayer[i].offset += sizeof(Core::Settings::Controls) * Core::settings.playerIndex; + } + optCount = COUNT(optControlsPlayer); + return optControlsPlayer; default : optCount = 0; return NULL; @@ -702,10 +712,12 @@ struct Inventory { break; } - case TR::Entity::INV_DETAIL : { + case TR::Entity::INV_CONTROLS : + Core::settings.playerIndex = 0; + break; + case TR::Entity::INV_DETAIL : settings = Core::settings; break; - } default : ; } diff --git a/src/ui.h b/src/ui.h index b95f332..44f7744 100644 --- a/src/ui.h +++ b/src/ui.h @@ -22,6 +22,8 @@ enum StringID { , STR_GAMEPAD_3 , STR_GAMEPAD_4 , STR_NOT_READY + , STR_PLAYER_1 + , STR_PLAYER_2 // inventory pages , STR_OPTION , STR_INVENTORY @@ -56,6 +58,7 @@ enum StringID { , STR_SET_VOLUMES , STR_REVERBERATION // controls options + , STR_SET_CONTROLS , STR_OPT_CONTROLS_GAMEPAD , STR_OPT_CONTROLS_VIBRATION , STR_OPT_CONTROLS_RETARGET @@ -126,6 +129,8 @@ const char *STR[STR_MAX] = { , "Gamepad 3" , "Gamepad 4" , "Not Ready" + , "Player 1" + , "Player 2" // inventory pages , "OPTION" , "INVENTORY" @@ -160,6 +165,7 @@ const char *STR[STR_MAX] = { , "Set Volumes" , "Reverberation" // controls options + , "Set Controls" , "Gamepad" , "Vibration" , "Retargeting"