mirror of
https://github.com/XProger/OpenLara.git
synced 2025-08-16 01:54:38 +02:00
#11 add player selector in controls settings
This commit is contained in:
@@ -341,6 +341,8 @@ namespace Core {
|
|||||||
uint8 multiaim;
|
uint8 multiaim;
|
||||||
KeySet keys[cMAX];
|
KeySet keys[cMAX];
|
||||||
} controls[2];
|
} controls[2];
|
||||||
|
|
||||||
|
uint8 playerIndex; // temporary, used only for setting controls
|
||||||
} settings;
|
} settings;
|
||||||
|
|
||||||
bool resetState;
|
bool resetState;
|
||||||
|
@@ -14,11 +14,8 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define INVENTORY_HEIGHT 2048.0f
|
#define INVENTORY_HEIGHT 2048.0f
|
||||||
|
|
||||||
#define TITLE_LOADING 64.0f
|
#define TITLE_LOADING 64.0f
|
||||||
|
#define LINE_HEIGHT 20.0f
|
||||||
|
|
||||||
#define LINE_HEIGHT 20.0f
|
|
||||||
|
|
||||||
struct OptionItem {
|
struct OptionItem {
|
||||||
enum Type {
|
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) {}
|
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 drawParam(float x, float y, float w, StringID oStr, bool active, uint8 value) const {
|
||||||
float d = x + w * 0.5f;
|
if (oStr != STR_NOT_IMPLEMENTED) {
|
||||||
UI::textOut(vec2(x + 32.0f, y), oStr);
|
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
|
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) {
|
if (active) {
|
||||||
float maxWidth = UI::getTextSize(STR[color + value]).x;
|
float maxWidth = UI::getTextSize(STR[color + value]).x;
|
||||||
maxWidth = maxWidth * 0.5f + 8.0f;
|
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 > 0) UI::specOut(vec2(x - maxWidth - 16.0f, y), 108);
|
||||||
if (value < maxValue) UI::specOut(vec2(d + maxWidth, y), 109);
|
if (value < maxValue) UI::specOut(vec2(x + maxWidth, y), 109);
|
||||||
}
|
}
|
||||||
return y + LINE_HEIGHT;
|
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 ),
|
OptionItem( OptionItem::TYPE_PARAM, STR_REVERBERATION, SETTINGS( audio.reverb ), STR_OFF, 0, 1 ),
|
||||||
};
|
};
|
||||||
|
|
||||||
static OptionItem optControls[] = {
|
static const OptionItem optControls[] = {
|
||||||
OptionItem( OptionItem::TYPE_TITLE, STR_SELECT_LEVEL ),
|
OptionItem( OptionItem::TYPE_TITLE, STR_SET_CONTROLS ),
|
||||||
OptionItem( ),
|
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_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_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_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 ),
|
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_CONTROLS_MULTIAIM, SETTINGS( controls[0].multiaim ), STR_OFF, 0, 1 ),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static OptionItem optControlsPlayer[COUNT(optControls)];
|
||||||
|
|
||||||
static OptionItem optPassport[] = {
|
static OptionItem optPassport[] = {
|
||||||
OptionItem( OptionItem::TYPE_TITLE, STR_SELECT_LEVEL ),
|
OptionItem( OptionItem::TYPE_TITLE, STR_SELECT_LEVEL ),
|
||||||
OptionItem( ),
|
OptionItem( ),
|
||||||
@@ -263,8 +267,14 @@ struct Inventory {
|
|||||||
optCount = COUNT(optSound);
|
optCount = COUNT(optSound);
|
||||||
return optSound;
|
return optSound;
|
||||||
case TR::Entity::INV_CONTROLS :
|
case TR::Entity::INV_CONTROLS :
|
||||||
optCount = COUNT(optControls);
|
ASSERT(optControls[2].offset == SETTINGS( playerIndex) );
|
||||||
return optControls;
|
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 :
|
default :
|
||||||
optCount = 0;
|
optCount = 0;
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -702,10 +712,12 @@ struct Inventory {
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TR::Entity::INV_DETAIL : {
|
case TR::Entity::INV_CONTROLS :
|
||||||
|
Core::settings.playerIndex = 0;
|
||||||
|
break;
|
||||||
|
case TR::Entity::INV_DETAIL :
|
||||||
settings = Core::settings;
|
settings = Core::settings;
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
default : ;
|
default : ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
6
src/ui.h
6
src/ui.h
@@ -22,6 +22,8 @@ enum StringID {
|
|||||||
, STR_GAMEPAD_3
|
, STR_GAMEPAD_3
|
||||||
, STR_GAMEPAD_4
|
, STR_GAMEPAD_4
|
||||||
, STR_NOT_READY
|
, STR_NOT_READY
|
||||||
|
, STR_PLAYER_1
|
||||||
|
, STR_PLAYER_2
|
||||||
// inventory pages
|
// inventory pages
|
||||||
, STR_OPTION
|
, STR_OPTION
|
||||||
, STR_INVENTORY
|
, STR_INVENTORY
|
||||||
@@ -56,6 +58,7 @@ enum StringID {
|
|||||||
, STR_SET_VOLUMES
|
, STR_SET_VOLUMES
|
||||||
, STR_REVERBERATION
|
, STR_REVERBERATION
|
||||||
// controls options
|
// controls options
|
||||||
|
, STR_SET_CONTROLS
|
||||||
, STR_OPT_CONTROLS_GAMEPAD
|
, STR_OPT_CONTROLS_GAMEPAD
|
||||||
, STR_OPT_CONTROLS_VIBRATION
|
, STR_OPT_CONTROLS_VIBRATION
|
||||||
, STR_OPT_CONTROLS_RETARGET
|
, STR_OPT_CONTROLS_RETARGET
|
||||||
@@ -126,6 +129,8 @@ const char *STR[STR_MAX] = {
|
|||||||
, "Gamepad 3"
|
, "Gamepad 3"
|
||||||
, "Gamepad 4"
|
, "Gamepad 4"
|
||||||
, "Not Ready"
|
, "Not Ready"
|
||||||
|
, "Player 1"
|
||||||
|
, "Player 2"
|
||||||
// inventory pages
|
// inventory pages
|
||||||
, "OPTION"
|
, "OPTION"
|
||||||
, "INVENTORY"
|
, "INVENTORY"
|
||||||
@@ -160,6 +165,7 @@ const char *STR[STR_MAX] = {
|
|||||||
, "Set Volumes"
|
, "Set Volumes"
|
||||||
, "Reverberation"
|
, "Reverberation"
|
||||||
// controls options
|
// controls options
|
||||||
|
, "Set Controls"
|
||||||
, "Gamepad"
|
, "Gamepad"
|
||||||
, "Vibration"
|
, "Vibration"
|
||||||
, "Retargeting"
|
, "Retargeting"
|
||||||
|
Reference in New Issue
Block a user