1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-24 22:14:36 +02:00

Merge pull request #1626 from IvanSavenko/setting_ux_improvements

New settings window ux improvements
This commit is contained in:
Ivan Savenko 2023-03-07 00:06:31 +02:00 committed by GitHub
commit ddb7bcaf42
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
78 changed files with 1087 additions and 635 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 529 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 602 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 628 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 713 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 459 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

View File

@ -1,10 +0,0 @@
{
"basepath" : "buttons/",
"images" :
[
{ "frame" : 0, "file" : "quadwide-normal.png"},
{ "frame" : 1, "file" : "quadwide-pressed-selected.png"},
{ "frame" : 2, "file" : "quadwide-pressed.png"},
{ "frame" : 3, "file" : "quadwide-normal-selected.png"},
]
}

View File

@ -1,8 +0,0 @@
{
"basepath" : "buttons/",
"images" :
[
{ "frame" : 0, "file" : "resolutionNormal.png"},
{ "frame" : 1, "file" : "resolutionPressed.png"}
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -1,10 +0,0 @@
{
"basepath" : "buttons/",
"images" :
[
{ "frame" : 0, "file" : "square-normal.png"},
{ "frame" : 1, "file" : "square-pressed-selected.png"},
{ "frame" : 2, "file" : "square-pressed.png"},
{ "frame" : 3, "file" : "square-normal-selected.png"}
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

View File

@ -1,10 +0,0 @@
{
"basepath" : "buttons/",
"images" :
[
{ "frame" : 0, "file" : "triplewide-normal.png"},
{ "frame" : 1, "file" : "triplewide-pressed-selected.png"},
{ "frame" : 2, "file" : "triplewide-pressed.png"},
{ "frame" : 3, "file" : "triplewide-normal-selected.png"}
]
}

View File

@ -0,0 +1,10 @@
{
"basepath" : "settingsWindow/",
"images" :
[
{ "frame" : 0, "file" : "button190Normal.png"},
{ "frame" : 1, "file" : "button190PressedSelected.png"},
{ "frame" : 2, "file" : "button190Pressed.png"},
{ "frame" : 3, "file" : "button190NormalSelected.png"}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -0,0 +1,10 @@
{
"basepath" : "settingsWindow/",
"images" :
[
{ "frame" : 0, "file" : "button32Normal.png"},
{ "frame" : 1, "file" : "button32PressedSelected.png"},
{ "frame" : 2, "file" : "button32Pressed.png"},
{ "frame" : 3, "file" : "button32NormalSelected.png"}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

View File

@ -0,0 +1,10 @@
{
"basepath" : "settingsWindow/",
"images" :
[
{ "frame" : 0, "file" : "button46Normal.png"},
{ "frame" : 1, "file" : "button46PressedSelected.png"},
{ "frame" : 2, "file" : "button46Pressed.png"},
{ "frame" : 3, "file" : "button46NormalSelected.png"}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,10 @@
{
"basepath" : "settingsWindow/",
"images" :
[
{ "frame" : 0, "file" : "button80Normal.png"},
{ "frame" : 1, "file" : "button80PressedSelected.png"},
{ "frame" : 2, "file" : "button80Pressed.png"},
{ "frame" : 3, "file" : "button80NormalSelected.png"}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -26,57 +26,66 @@
"vcmi.server.confirmReconnect" : "Connect to the last session?",
"vcmi.settingsMainWindow.generalTab.hover" : "General",
"vcmi.settingsMainWindow.generalTab.help" : "Switches to System Options tab - these settings are related to general game client behavior",
"vcmi.settingsMainWindow.generalTab.help" : "Switches to General Options tab, which contains settings related to general game client behavior",
"vcmi.settingsMainWindow.battleTab.hover" : "Battle",
"vcmi.settingsMainWindow.battleTab.help" : "Switches to Battle Options tab - these settings allow configuring battle interface and related things",
"vcmi.settingsMainWindow.battleTab.help" : "Switches to Battle Options tab, which allows configuring game behavior during battles",
"vcmi.settingsMainWindow.adventureTab.hover" : "Adventure Map",
"vcmi.settingsMainWindow.adventureTab.help" : "Switches to Adventure Map Options tab - adventure map is part of the game where you can move your heroes",
"vcmi.settingsMainWindow.otherTab.hover" : "Other Settings",
"vcmi.settingsMainWindow.otherTab.help" : "Switches to Other Settings tab - these options do not fit into other categories for various reasons",
"vcmi.systemOptions.videoGroup" : "Video Settings",
"vcmi.systemOptions.audioGroup" : "Audio Settings",
"vcmi.systemOptions.otherGroup" : "Other Settings", // unused right now
"vcmi.systemOptions.townsGroup" : "Town Screen",
"vcmi.systemOptions.fullscreenButton.hover" : "Fullscreen",
"vcmi.systemOptions.fullscreenButton.help" : "{Fullscreen}\n\n If selected, VCMI will run in fullscreen mode, otherwise VCMI will run in window",
"vcmi.systemOptions.resolutionButton.hover" : "Resolution",
"vcmi.systemOptions.resolutionButton.help" : "{Select resolution}\n\n Change in-game screen resolution. Game restart required to apply new resolution.",
"vcmi.systemOptions.resolutionMenu.hover" : "Select resolution",
"vcmi.systemOptions.resolutionButton.hover" : "Resolution: %wx%h",
"vcmi.systemOptions.resolutionButton.help" : "{Select Resolution}\n\n Change in-game screen resolution. Game restart required to apply new resolution.",
"vcmi.systemOptions.resolutionMenu.hover" : "Select Resolution",
"vcmi.systemOptions.resolutionMenu.help" : "Change in-game screen resolution.",
"vcmi.systemOptions.fullscreenFailed" : "{Fullscreen}\n\n Failed to switch to fullscreen mode! Current resolution is not supported by display!",
"vcmi.systemOptions.framerateButton.hover" : "Show FPS",
"vcmi.systemOptions.framerateButton.help" : "{Show FPS}\n\n Toggle on/off showing Frames Per Second counter in corner of game window.",
"vcmi.systemOptions.framerateButton.help" : "{Show FPS}\n\n Toggles visibility of Frames Per Second counter in corner of game window.",
"vcmi.adventureOptions.numericQuantities.hover" : "Numeric creatures quantities",
"vcmi.adventureOptions.numericQuantities.help" : "{Numeric creatures quantities}\n\n Shows inaccurate enemy creatures quantities in numeric A-B format.",
"vcmi.adventureOptions.forceMovementInfo.hover" : "Always show move info in status bar",
"vcmi.adventureOptions.forceMovementInfo.help" : "{Always show move info in status bar}\n\n Replaces default status bar info with movement points data without need to hold ALT button.",
"vcmi.adventureOptions.showGrid.hover" : "Show grid",
"vcmi.adventureOptions.showGrid.help" : "{Show grid}\n\n Shows grid overlay, showing borders between adventure map tiles.",
"vcmi.adventureOptions.mapScrollSpeed4.hover": "4",
"vcmi.adventureOptions.mapScrollSpeed4.help": "Set map scrolling speed to very fast",
"vcmi.adventureOptions.mapScrollSpeed5.hover": "5",
"vcmi.adventureOptions.mapScrollSpeed5.help": "Set map scrolling speed to extremely fast",
"vcmi.adventureOptions.numericQuantities.hover" : "Numeric Creature Quantities",
"vcmi.adventureOptions.numericQuantities.help" : "{Numeric Creature Quantities}\n\n Shows approximate enemy creatures quantities in numeric A-B format.",
"vcmi.adventureOptions.forceMovementInfo.hover" : "Always Show Movement Cost",
"vcmi.adventureOptions.forceMovementInfo.help" : "{Always Show Movement Cost}\n\n Replaces default status bar info with movement points data without need to hold ALT button.",
"vcmi.adventureOptions.showGrid.hover" : "Show Grid",
"vcmi.adventureOptions.showGrid.help" : "{Show Grid}\n\n Shows grid overlay, showing borders between adventure map tiles.",
"vcmi.adventureOptions.mapSwipe.hover" : "Map Swipe",
"vcmi.adventureOptions.mapSwipe.help" : "{Map Swipe}\n\n Allows map movement via finger swipe gesture on systems with touchscreen. As of right now, can also be accessed via left mouse button.",
"vcmi.adventureOptions.mapScrollSpeed1.hover": "",
"vcmi.adventureOptions.mapScrollSpeed5.hover": "",
"vcmi.adventureOptions.mapScrollSpeed6.hover": "",
"vcmi.adventureOptions.mapScrollSpeed1.help": "Set map scrolling speed to very slow",
"vcmi.adventureOptions.mapScrollSpeed5.help": "Set map scrolling speed to very fast",
"vcmi.adventureOptions.mapScrollSpeed6.help": "Set map scrolling speed to instantaneous.",
"vcmi.battleOptions.showQueue.hover": "Show queue",
"vcmi.battleOptions.showQueue.help": "{Show queue}\n\n Show queue that displays movement order of creature stacks.",
"vcmi.battleOptions.queueSizeLabel.hover": "Queue size (takes effect on next battle)",
"vcmi.battleOptions.queueSizeLabel.hover": "Show Creature Turn Order",
"vcmi.battleOptions.queueSizeNoneButton.hover": "OFF",
"vcmi.battleOptions.queueSizeAutoButton.hover": "AUTO",
"vcmi.battleOptions.queueSizeAutoButton.help": "Sets queue size depending on game resolution (small if width < 700 pixels, big otherwise)",
"vcmi.battleOptions.queueSizeSmallButton.hover": "SMALL",
"vcmi.battleOptions.queueSizeSmallButton.help": "Sets queue size to small",
"vcmi.battleOptions.queueSizeBigButton.hover": "BIG",
"vcmi.battleOptions.queueSizeBigButton.help": "Sets queue size to big (not supported if game resolution width < 700 pixels)",
"vcmi.battleOptions.animationsSpeed4.hover": "4",
"vcmi.battleOptions.animationsSpeed4.help": "Sets animation speed to very fast",
"vcmi.battleOptions.animationsSpeed5.hover": "5",
"vcmi.battleOptions.animationsSpeed5.help": "Sets animation speed to super fast",
"vcmi.battleOptions.animationsSpeed6.hover": "6",
"vcmi.battleOptions.animationsSpeed6.help": "Sets animation speed to extremely fast",
"vcmi.battleOptions.skipBattleIntroMusic.hover": "Skip intro music",
"vcmi.battleOptions.skipBattleIntroMusic.help": "{Skip intro music}\n\n Skip short music that plays at beginning of each battle before action starts. Can also be skipped by pressing ESC key.",
"vcmi.battleOptions.queueSizeNoneButton.help": "Completely disables visibility of creature turn order in battle",
"vcmi.battleOptions.queueSizeAutoButton.help": "Sets turn order size depending on game resolution (small when playing with screen resolution below 700 pixels high, big otherwise)",
"vcmi.battleOptions.queueSizeSmallButton.help": "Sets turn order size to small",
"vcmi.battleOptions.queueSizeBigButton.help": "Sets turn order size to big (not supported if game resolution is less than 700 pixels high)",
"vcmi.battleOptions.animationsSpeed1.hover": "",
"vcmi.battleOptions.animationsSpeed5.hover": "",
"vcmi.battleOptions.animationsSpeed6.hover": "",
"vcmi.battleOptions.animationsSpeed1.help": "Sets animation speed to very slow",
"vcmi.battleOptions.animationsSpeed5.help": "Sets animation speed to very fast",
"vcmi.battleOptions.animationsSpeed6.help": "Sets animation speed to instantaneous",
"vcmi.battleOptions.skipBattleIntroMusic.hover": "Skip Intro Music",
"vcmi.battleOptions.skipBattleIntroMusic.help": "{Skip Intro Music}\n\n Skip short music that plays at beginning of each battle before action starts. Can also be skipped by pressing ESC key.",
"vcmi.otherOptions.availableCreaturesAsDwellingLabel.hover" : "Show available creatures in town summary",
"vcmi.otherOptions.availableCreaturesAsDwellingLabel.help" : "{Show available creatures in town summary}\n\n Shows creatures available to purchase instead of their growth in town summary (bottom-left corner).",
"vcmi.otherOptions.compactTownCreatureInfo.hover": "Compact creature info in town summary",
"vcmi.otherOptions.compactTownCreatureInfo.help": "{Compact creature info in town summary}\n\n Smaller town creatures information in town summary.",
"vcmi.otherOptions.availableCreaturesAsDwellingLabel.hover" : "Show Available Creatures",
"vcmi.otherOptions.availableCreaturesAsDwellingLabel.help" : "{Show Available Creatures}\n\n Shows creatures available to purchase instead of their growth in town summary (bottom-left corner).",
"vcmi.otherOptions.creatureGrowthAsDwellingLabel.hover" : "Show Weekly Growth of Creatures",
"vcmi.otherOptions.creatureGrowthAsDwellingLabel.help" : "{Show Weekly Growth of Creatures}\n\n Shows creatures' weekly growth instead of avaialable amount in town summary (bottom-left corner).",
"vcmi.otherOptions.compactTownCreatureInfo.hover": "Compact Creature Info",
"vcmi.otherOptions.compactTownCreatureInfo.help": "{Compact Creature Info}\n\n Smaller town creatures information in town summary.",
"vcmi.townHall.missingBase" : "Base building %s must be built first",
"vcmi.townHall.noCreaturesToRecruit" : "There are no creatures to recruit!",

View File

@ -26,13 +26,69 @@
"vcmi.server.errors.modsIncompatibility" : "Потрібні модифікації для завантаження гри:",
"vcmi.server.confirmReconnect" : "Підключитися до минулої сесії?",
"vcmi.systemOptions.fullscreenButton.hover" : "Режим на весь екран",
"vcmi.systemOptions.fullscreenButton.help" : "{Режим на весь екран}\n\n Якщо обрано, VCMI буде запускатися в режимі на весь екран, інакше — віконний режим",
"vcmi.systemOptions.resolutionButton.hover" : "Розширення екрану",
"vcmi.systemOptions.resolutionButton.help" : "{Розширення екрану}\n\n Зміна розширення екрану в грі. Аби зміни набули чинності необхідно перезавантажити гру.",
"vcmi.systemOptions.resolutionMenu.hover" : "Обрати розширення екрану",
"vcmi.systemOptions.resolutionMenu.help" : "Змінити розширення екрану в грі.",
"vcmi.settingsMainWindow.generalTab.hover" : "Загальні",
"vcmi.settingsMainWindow.generalTab.help" : "Перемикає на вкладку загальних параметрів, яка містить налаштування, пов'язані із загальною поведінкою ігрового клієнта",
"vcmi.settingsMainWindow.battleTab.hover" : "Бої",
"vcmi.settingsMainWindow.battleTab.help" : "Перемикає на вкладку параметрів бою, яка дозволяє налаштувати поведінку гри під час бою",
"vcmi.settingsMainWindow.adventureTab.hover" : "Мапа Пригод",
"vcmi.settingsMainWindow.adventureTab.help" : "Перемикає на вкладку параметрів мапи пригод - мапа пригод є частиною гри, де ви можете переміщати своїх героїв",
"vcmi.systemOptions.videoGroup" : "Налаштування відео",
"vcmi.systemOptions.audioGroup" : "Налаштування аудіо",
"vcmi.systemOptions.otherGroup" : "Інші налаштування",
"vcmi.systemOptions.townsGroup" : "Екран міста",
"vcmi.systemOptions.fullscreenButton.hover" : "Повноекранний режим",
"vcmi.systemOptions.fullscreenButton.help" : "{Повноекранний режим}\n\n Якщо обрано, VCMI буде запускатися в режимі на весь екран, інакше — віконний режим",
"vcmi.systemOptions.resolutionButton.hover" : "Роздільна здатність: %wx%h",
"vcmi.systemOptions.resolutionButton.help" : "{Роздільна здатність}\n\n Зміна розширення екрану в грі. Аби зміни набули чинності необхідно перезавантажити гру.",
"vcmi.systemOptions.resolutionMenu.hover" : "Обрати роздільну здатність екрану",
"vcmi.systemOptions.resolutionMenu.help" : "Змінити роздільну здатність екрану в грі.",
"vcmi.systemOptions.fullscreenFailed" : "{Повноекранний режим}\n\n Не вдалося перейти в повноекранний режим! Поточна роздільна здатність не підтримується дисплеєм!",
"vcmi.systemOptions.framerateButton.hover" : "Лічильник кадрів",
"vcmi.systemOptions.framerateButton.help" : "{Лічильник кадрів}\n\n Перемикає видимість лічильника кадрів на секунду у кутку ігрового вікна",
"vcmi.adventureOptions.numericQuantities.hover" : "Числовий показник кількості",
"vcmi.adventureOptions.numericQuantities.help" : "{Числовий показник кількості}\n\n Показує приблизну кількість ворожих істот у числовому форматі А-Б.",
"vcmi.adventureOptions.forceMovementInfo.hover" : "Завжди показувати вартість руху",
"vcmi.adventureOptions.forceMovementInfo.help" : "{Завжди показувати вартість руху}\n\n Замінює стандартну інформацію в рядку стану на вартість переміщення без необхідності утримувати клавішу ALT.",
"vcmi.adventureOptions.showGrid.hover" : "Показувати сітку",
"vcmi.adventureOptions.showGrid.help" : "{Показувати сітку}\n\n Відображає сітку, що показує межі між клітинками на мапі пригод.",
"vcmi.adventureOptions.mapSwipe.hover" : "Прокрутка мапи жестом",
"vcmi.adventureOptions.mapSwipe.help" : "{Прокрутка мапи жестом}\n\n Дозволяє переміщати мапу пальцем на системах з сенсорним екраном. Станом на зараз, також доступний за допомогою лівої кнопки миші.",
"vcmi.adventureOptions.mapScrollSpeed1.hover": "",
"vcmi.adventureOptions.mapScrollSpeed5.hover": "",
"vcmi.adventureOptions.mapScrollSpeed6.hover": "",
"vcmi.adventureOptions.mapScrollSpeed1.help": "Встановити швидкість розгортання мапи - дуже повільно",
"vcmi.adventureOptions.mapScrollSpeed5.help": "Встановити швидкість розгортання мапи - дуже швидко",
"vcmi.adventureOptions.mapScrollSpeed6.help": "Встановити швидкість розгортання мапи - миттєво",
"vcmi.battleOptions.queueSizeLabel.hover": "Вигляд черги ходу істот",
"vcmi.battleOptions.queueSizeNoneButton.hover": "ВИМК",
"vcmi.battleOptions.queueSizeAutoButton.hover": "АВТО",
"vcmi.battleOptions.queueSizeSmallButton.hover": "МАЛА",
"vcmi.battleOptions.queueSizeBigButton.hover": "ВЕЛИКА",
"vcmi.battleOptions.queueSizeNoneButton.help": "Повністю вимикає видимість черги ходу істот у бою",
"vcmi.battleOptions.queueSizeAutoButton.help": "Встановлює розмір черги ходу істот залежно від роздільної здатності гри (малий, якщо грає з вертикальною роздільною здатністю екрана нижче 700 пікселів, великий інакше)",
"vcmi.battleOptions.queueSizeSmallButton.help": "Встановлює розмір черги ходу істот на малий",
"vcmi.battleOptions.queueSizeBigButton.help": "Встановлює розмір черги на великий (не підтримується, якщо вертикальна роздільна здатність гри менше 700 пікселів)",
"vcmi.battleOptions.animationsSpeed1.hover": "",
"vcmi.battleOptions.animationsSpeed5.hover": "",
"vcmi.battleOptions.animationsSpeed6.hover": "",
"vcmi.battleOptions.animationsSpeed1.help": "Встановити дуже низьку швидкість анімації",
"vcmi.battleOptions.animationsSpeed5.help": "Встановити дуже високу швидкість анімації",
"vcmi.battleOptions.animationsSpeed6.help": "Встановити миттєву швидкість анімації",
"vcmi.battleOptions.skipBattleIntroMusic.hover": "Пропускати вступну музику",
"vcmi.battleOptions.skipBattleIntroMusic.help": "{Пропускати вступну музику}\n\n Пропускати коротку музику, яка грає на початку кожної битви перед початком дії. Також можна пропустити, натиснувши клавішу ESC.",
"vcmi.otherOptions.availableCreaturesAsDwellingLabel.hover" : "Показувати доступних істот",
"vcmi.otherOptions.availableCreaturesAsDwellingLabel.help" : "{Показувати доступних істот}\n\n Показує істот, яких можна придбати, замість їхнього приросту у зведенні по місту (нижній лівий кут).",
"vcmi.otherOptions.creatureGrowthAsDwellingLabel.hover" : "Показувати приріст істот",
"vcmi.otherOptions.creatureGrowthAsDwellingLabel.help" : "{Показувати приріст істот}\n\n Показує щотижневий приріст істот, замість кількості яку можна придбати у зведенні по місту (нижній лівий кут).",
"vcmi.otherOptions.compactTownCreatureInfo.hover": "Компактне відображення істот у місті",
"vcmi.otherOptions.compactTownCreatureInfo.help": "{Компактне відображення істот у місті}\n\n Показує інформацію про істот у місті у зведенні по місту у більш компактному вигляді.",
"vcmi.townHall.missingBase" : "Спочатку необхідно звести початкову будівлю: %s",
"vcmi.townHall.noCreaturesToRecruit" : "Немає істот, яких можна завербувати!",
"vcmi.townHall.greetingManaVortex" : "Неподалік %s ваше тіло наповнюється новою силою. Ваша звична магічна енергія сьогодні подвоєна.",

View File

@ -1046,7 +1046,8 @@ static void mainLoop()
resChanged([](const JsonNode &newState){ CGuiHandler::pushUserEvent(EUserEvent::FULLSCREEN_TOGGLED); });
inGuiThread.reset(new bool(true));
GH.mainFPSmng->init();
assert(GH.mainFPSmng);
GH.mainFPSmng->init(settings["video"]["targetfps"].Integer());
while(1) //main SDL events loop
{

View File

@ -37,7 +37,6 @@ struct CPathsInfo;
VCMI_LIB_NAMESPACE_END
class CButton;
class CToggleGroup;
class CAdvMapInt;
class CCastleInterface;
class BattleInterface;

View File

@ -745,8 +745,7 @@ void BattleInterface::executeOnAnimationCondition( EAnimationEvents event, bool
void BattleInterface::setBattleQueueVisibility(bool visible)
{
windowObject->hideQueue();
if(visible)
windowObject->showQueue();
else
windowObject->hideQueue();
}

View File

@ -35,7 +35,6 @@ class CPicture;
class CFilledTexture;
class CButton;
class CToggleButton;
class CToggleGroup;
class CLabel;
class CTextBox;
class CAnimImage;

View File

@ -72,6 +72,20 @@ BattleWindow::BattleWindow(BattleInterface & owner):
owner.fieldController.reset( new BattleFieldController(owner));
owner.fieldController->createHeroes();
createQueue();
if ( owner.tacticsMode )
tacticPhaseStarted();
else
tacticPhaseEnded();
addUsedEvents(RCLICK | KEYBOARD);
}
void BattleWindow::createQueue()
{
OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;
//create stack queue and adjust our own position
bool embedQueue;
std::string queueSize = settings["battle"]["queueSize"].String();
@ -89,13 +103,6 @@ BattleWindow::BattleWindow(BattleInterface & owner):
pos.h += queue->pos.h;
pos = center();
}
if ( owner.tacticsMode )
tacticPhaseStarted();
else
tacticPhaseEnded();
addUsedEvents(RCLICK | KEYBOARD);
}
BattleWindow::~BattleWindow()
@ -147,16 +154,9 @@ void BattleWindow::showQueue()
Settings showQueue = settings.write["battle"]["showQueue"];
showQueue->Bool() = true;
queue->enable();
if (!queue->embedded)
{
//re-center, taking into account stack queue position
pos.y -= queue->pos.h;
pos.h += queue->pos.h;
pos = center();
GH.totalRedraw();
}
createQueue();
updateQueue();
GH.totalRedraw();
}
void BattleWindow::updateQueue()

View File

@ -57,7 +57,7 @@ class BattleWindow : public InterfaceObjectConfigurable
/// flip battle queue visibility to opposite
void toggleQueueVisibility();
void createQueue();
std::shared_ptr<BattleConsole> buildBattleConsole(const JsonNode &) const;

View File

@ -93,7 +93,8 @@ void CGuiHandler::processLists(const ui16 activityFlag, std::function<void (std:
void CGuiHandler::init()
{
mainFPSmng->init();
mainFPSmng = new CFramerateManager();
mainFPSmng->init(settings["video"]["targetfps"].Integer());
isPointerRelativeMode = settings["general"]["userRelativePointer"].Bool();
pointerSpeedMultiplier = settings["general"]["relativePointerSpeedMultiplier"].Float();
}
@ -593,7 +594,9 @@ void CGuiHandler::handleMouseMotion(const SDL_Event & current)
{
//sending active, hovered hoverable objects hover() call
std::vector<CIntObject*> hlp;
for(auto & elem : hoverable)
auto hoverableCopy = hoverable;
for(auto & elem : hoverableCopy)
{
if(elem->pos.isInside(getCursorPosition()))
{
@ -606,6 +609,7 @@ void CGuiHandler::handleMouseMotion(const SDL_Event & current)
(elem)->hovered = false;
}
}
for(auto & elem : hlp)
{
elem->hover(true);
@ -660,7 +664,7 @@ void CGuiHandler::renderFrame()
if(nullptr != curInt)
curInt->update();
if(settings["general"]["showfps"].Bool())
if(settings["video"]["showfps"].Bool())
drawFPSCounter();
SDL_UpdateTexture(screenTexture, nullptr, screen->pixels, screen->pitch);
@ -688,12 +692,9 @@ CGuiHandler::CGuiHandler()
, mouseButtonsMask(0)
, continueEventHandling(true)
, curInt(nullptr)
, mainFPSmng(nullptr)
, statusbar(nullptr)
{
// Creates the FPS manager and sets the framerate to 48 which is doubled the value of the original Heroes 3 FPS rate
mainFPSmng = new CFramerateManager(60);
//do not init CFramerateManager here --AVS
terminate_cond = new CondSh<bool>(false);
}
@ -761,7 +762,7 @@ void CGuiHandler::drawFPSCounter()
static SDL_Rect overlay = { 0, 0, 64, 32};
uint32_t black = SDL_MapRGB(screen->format, 10, 10, 10);
SDL_FillRect(screen, &overlay, black);
std::string fps = boost::lexical_cast<std::string>(mainFPSmng->fps);
std::string fps = boost::lexical_cast<std::string>(mainFPSmng->getFramerate());
graphics->fonts[FONT_BIG]->renderTextLeft(screen, fps, Colors::YELLOW, Point(10, 10));
}
@ -847,19 +848,20 @@ void CGuiHandler::pushUserEvent(EUserEvent usercode, void * userdata)
SDL_PushEvent(&event);
}
CFramerateManager::CFramerateManager(int rate)
{
this->rate = rate;
this->rateticks = (1000.0 / rate);
this->fps = 0;
this->accumulatedFrames = 0;
this->accumulatedTime = 0;
this->lastticks = 0;
this->timeElapsed = 0;
}
CFramerateManager::CFramerateManager()
: rate(0)
, rateticks(0)
, fps(0)
, accumulatedFrames(0)
, accumulatedTime(0)
, lastticks(0)
, timeElapsed(0)
{}
void CFramerateManager::init()
void CFramerateManager::init(int newRate)
{
rate = newRate;
rateticks = 1000.0 / rate;
this->lastticks = SDL_GetTicks();
}

View File

@ -49,17 +49,20 @@ class CFramerateManager
{
private:
double rateticks;
ui32 lastticks, timeElapsed;
ui32 lastticks;
ui32 timeElapsed;
int rate;
ui32 accumulatedTime,accumulatedFrames;
public:
int fps; // the actual fps value
ui32 accumulatedTime;
ui32 accumulatedFrames;
CFramerateManager(int rate); // initializes the manager with a given fps rate
void init(); // needs to be called directly before the main game loop to reset the internal timer
public:
CFramerateManager(); // initializes the manager with a given fps rate
void init(int newRate); // needs to be called directly before the main game loop to reset the internal timer
void framerateDelay(); // needs to be called every game update cycle
ui32 getElapsedMilliseconds() const {return this->timeElapsed;}
ui32 getFrameNumber() const { return accumulatedFrames; }
ui32 getFramerate() const { return fps; };
};
// Handles GUI logic and drawing

View File

@ -26,11 +26,6 @@ MapViewActions::MapViewActions(MapView & owner, const std::shared_ptr<MapViewMod
, owner(owner)
, curHoveredTile(-1, -1, -1)
, isSwiping(false)
#if defined(VCMI_ANDROID) || defined(VCMI_IOS)
, swipeEnabled(settings["general"]["swipe"].Bool())
#else
, swipeEnabled(settings["general"]["swipeDesktop"].Bool())
#endif
{
pos.w = model->getPixelsVisibleDimensions().x;
pos.h = model->getPixelsVisibleDimensions().y;
@ -38,6 +33,15 @@ MapViewActions::MapViewActions(MapView & owner, const std::shared_ptr<MapViewMod
addUsedEvents(LCLICK | RCLICK | MCLICK | HOVER | MOVE);
}
bool MapViewActions::swipeEnabled() const
{
#if defined(VCMI_ANDROID) || defined(VCMI_IOS)
return settings["general"]["swipe"].Bool();
#else
return settings["general"]["swipeDesktop"].Bool();
#endif
}
void MapViewActions::setContext(const std::shared_ptr<IMapRendererContext> & context)
{
this->context = context;
@ -59,7 +63,7 @@ void MapViewActions::clickLeft(tribool down, bool previousState)
if(indeterminate(down))
return;
if(swipeEnabled)
if(swipeEnabled())
{
if(handleSwipeStateChange(static_cast<bool>(down)))
{
@ -103,11 +107,11 @@ void MapViewActions::mouseMoved(const Point & cursorPosition)
void MapViewActions::handleSwipeMove(const Point & cursorPosition)
{
// unless swipe is enabled, swipe move only works with middle mouse button
if(!swipeEnabled && !GH.isMouseButtonPressed(MouseButton::MIDDLE))
if(!swipeEnabled() && !GH.isMouseButtonPressed(MouseButton::MIDDLE))
return;
// on mobile platforms with enabled swipe any button is enough
if(swipeEnabled && (!GH.isMouseButtonPressed() || GH.multifinger))
if(swipeEnabled() && (!GH.isMouseButtonPressed() || GH.multifinger))
return;
if(!isSwiping)

View File

@ -18,7 +18,6 @@ class MapView;
class MapViewActions : public CIntObject
{
bool swipeEnabled;
bool isSwiping;
Point swipeInitialViewPos;
@ -33,6 +32,7 @@ class MapViewActions : public CIntObject
void handleHover(const Point & cursorPosition);
void handleSwipeMove(const Point & cursorPosition);
bool handleSwipeStateChange(bool btnPressed);
bool swipeEnabled() const;
public:
MapViewActions(MapView & owner, const std::shared_ptr<MapViewModel> & model);

View File

@ -457,8 +457,7 @@ void CToggleGroup::selectionChanged(int to)
buttons[to]->setSelected(true);
onChange(to);
if (parent)
parent->redraw();
redraw();
}
int CToggleGroup::getSelected() const

View File

@ -48,12 +48,12 @@
static bool useCompactCreatureBox()
{
return settings["gameTweaks"]["compactTownCreatureInfo"].isNumber() ? settings["gameTweaks"]["compactTownCreatureInfo"].Bool() : false;
return settings["gameTweaks"]["compactTownCreatureInfo"].Bool();
}
static bool useAvailableAmountAsCreatureLabel()
{
return settings["gameTweaks"]["availableCreaturesAsDwellingLabel"].isNumber() ? settings["gameTweaks"]["availableCreaturesAsDwellingLabel"].Bool() : false;
return settings["gameTweaks"]["availableCreaturesAsDwellingLabel"].Bool();
}
CBuildingRect::CBuildingRect(CCastleBuildings * Par, const CGTownInstance * Town, const CStructure * Str)

View File

@ -36,7 +36,6 @@ class CTextInput;
class CListBox;
class CLabelGroup;
class CToggleButton;
class CToggleGroup;
class CVolumeSlider;
class CGStatusBar;
class CTextBox;

View File

@ -34,17 +34,51 @@ AdventureOptionsTab::AdventureOptionsTab()
: InterfaceObjectConfigurable()
{
OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;
type |= REDRAW_PARENT;
const JsonNode config(ResourceID("config/widgets/settings/adventureOptionsTab.json"));
addCallback("playerHeroSpeedChanged", [](int value)
addCallback("playerHeroSpeedChanged", [this](int value)
{
return setIntSetting("adventure", "heroMoveTime", value);
auto targetLabel = widget<CLabel>("heroSpeedValueLabel");
if (targetLabel)
{
if (value <= 0)
{
targetLabel->setText("-");
}
else
{
int valuePercentage = 100 * 100 / value;
targetLabel->setText(std::to_string(valuePercentage) + "%");
}
}
setIntSetting("adventure", "heroMoveTime", value);
});
addCallback("enemyHeroSpeedChanged", [](int value)
addCallback("enemyHeroSpeedChanged", [this](int value)
{
return setIntSetting("adventure", "enemyMoveTime", value);
auto targetLabel = widget<CLabel>("enemySpeedValueLabel");
if (targetLabel)
{
if (value <= 0)
{
targetLabel->setText("-");
}
else
{
int valuePercentage = 100 * 100 / value;
targetLabel->setText(std::to_string(valuePercentage) + "%");
}
}
setIntSetting("adventure", "enemyMoveTime", value);
});
addCallback("mapScrollSpeedChanged", [](int value)
addCallback("mapScrollSpeedChanged", [this](int value)
{
auto targetLabel = widget<CLabel>("mapScrollingValueLabel");
int valuePercentage = 100 * value / 1200; // H3 max value is "1200", displaying it to be 100%
if (targetLabel)
targetLabel->setText(std::to_string(valuePercentage) + "%");
return setIntSetting("adventure", "scrollSpeedPixels", value);
});
addCallback("heroReminderChanged", [](bool value)
@ -68,6 +102,14 @@ AdventureOptionsTab::AdventureOptionsTab()
{
return setBoolSetting("gameTweaks", "showGrid", value);
});
addCallback("mapSwipeChanged", [](bool value)
{
#if defined(VCMI_MOBILE)
setBoolSetting("general", "swipe", value);
#else
setBoolSetting("general", "swipeDesktop", value);
#endif
});
build(config);
std::shared_ptr<CToggleGroup> playerHeroSpeedToggle = widget<CToggleGroup>("heroMovementSpeedPicker");
@ -93,4 +135,11 @@ AdventureOptionsTab::AdventureOptionsTab()
std::shared_ptr<CToggleButton> showGridCheckbox = widget<CToggleButton>("showGridCheckbox");
showGridCheckbox->setSelected(settings["gameTweaks"]["showGrid"].Bool());
std::shared_ptr<CToggleButton> mapSwipeCheckbox = widget<CToggleButton>("mapSwipeCheckbox");
#if defined(VCMI_MOBILE)
mapSwipeCheckbox->setSelected(settings["general"]["swipe"].Bool());
#else
mapSwipeCheckbox->setSelected(settings["general"]["swipeDesktop"].Bool());
#endif
}

View File

@ -19,10 +19,10 @@
#include "../../widgets/Buttons.h"
#include "../../widgets/TextControls.h"
BattleOptionsTab::BattleOptionsTab(BattleInterface * owner):
InterfaceObjectConfigurable()
BattleOptionsTab::BattleOptionsTab(BattleInterface * owner)
{
OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;
type |= REDRAW_PARENT;
const JsonNode config(ResourceID("config/widgets/settings/battleOptionsTab.json"));
addCallback("viewGridChanged", [this, owner](bool value)
@ -45,9 +45,9 @@ BattleOptionsTab::BattleOptionsTab(BattleInterface * owner):
{
showQueueChangedCallback(value, owner);
});
addCallback("queueSizeChanged", [this](int value)
addCallback("queueSizeChanged", [this, owner](int value)
{
queueSizeChangedCallback(value);
queueSizeChangedCallback(value, owner);
});
addCallback("skipBattleIntroMusicChanged", [this](bool value)
{
@ -70,9 +70,6 @@ BattleOptionsTab::BattleOptionsTab(BattleInterface * owner):
std::shared_ptr<CToggleButton> mouseShadowCheckbox = widget<CToggleButton>("mouseShadowCheckbox");
mouseShadowCheckbox->setSelected(settings["battle"]["mouseShadow"].Bool());
std::shared_ptr<CToggleButton> showQueueCheckbox = widget<CToggleButton>("showQueueCheckbox");
showQueueCheckbox->setSelected(settings["battle"]["showQueue"].Bool());
std::shared_ptr<CToggleButton> skipBattleIntroMusicCheckbox = widget<CToggleButton>("skipBattleIntroMusicCheckbox");
skipBattleIntroMusicCheckbox->setSelected(settings["gameTweaks"]["skipBattleIntroMusic"].Bool());
}
@ -88,11 +85,13 @@ int BattleOptionsTab::getAnimSpeed() const
int BattleOptionsTab::getQueueSizeId() const
{
std::string text = settings["battle"]["queueSize"].String();
if(text == "none")
return -1;
if(text == "auto")
return 0;
else if(text == "small")
if(text == "small")
return 1;
else if(text == "big")
if(text == "big")
return 2;
return 0;
@ -102,6 +101,8 @@ std::string BattleOptionsTab::getQueueSizeStringFromId(int value) const
{
switch(value)
{
case -1:
return "none";
case 0:
return "auto";
case 1:
@ -139,6 +140,11 @@ void BattleOptionsTab::animationSpeedChangedCallback(int value)
{
Settings speed = settings.write["battle"]["speedFactor"];
speed->Float() = static_cast<float>(value);
auto targetLabel = widget<CLabel>("animationSpeedValueLabel");
int valuePercentage = value * 100 / 3; // H3 max value is "3", displaying it to be 100%
if (targetLabel)
targetLabel->setText(std::to_string(valuePercentage) + "%");
}
void BattleOptionsTab::showQueueChangedCallback(bool value, BattleInterface * parentBattleInterface)
@ -154,11 +160,19 @@ void BattleOptionsTab::showQueueChangedCallback(bool value, BattleInterface * pa
}
}
void BattleOptionsTab::queueSizeChangedCallback(int value)
void BattleOptionsTab::queueSizeChangedCallback(int value, BattleInterface * parentBattleInterface)
{
if (value == -1)
{
showQueueChangedCallback(false, parentBattleInterface);
return;
}
std::string stringifiedValue = getQueueSizeStringFromId(value);
Settings size = settings.write["battle"]["queueSize"];
size->String() = stringifiedValue;
showQueueChangedCallback(true, parentBattleInterface);
}
void BattleOptionsTab::skipBattleIntroMusicChangedCallback(bool value)

View File

@ -22,12 +22,12 @@ private:
int getAnimSpeed() const;
int getQueueSizeId() const;
std::string getQueueSizeStringFromId(int value) const;
void viewGridChangedCallback(bool value, BattleInterface * parentBattleInterface = nullptr);
void movementShadowChangedCallback(bool value, BattleInterface * parentBattleInterface = nullptr);
void viewGridChangedCallback(bool value, BattleInterface * parentBattleInterface);
void movementShadowChangedCallback(bool value, BattleInterface * parentBattleInterface);
void mouseShadowChangedCallback(bool value);
void animationSpeedChangedCallback(int value);
void showQueueChangedCallback(bool value, BattleInterface * parentBattleInterface = nullptr);
void queueSizeChangedCallback(int value);
void showQueueChangedCallback(bool value, BattleInterface * parentBattleInterface);
void queueSizeChangedCallback(int value, BattleInterface * parentBattleInterface);
void skipBattleIntroMusicChangedCallback(bool value);
public:
BattleOptionsTab(BattleInterface * owner = nullptr);

View File

@ -33,13 +33,18 @@ static void setIntSetting(std::string group, std::string field, int value)
static void setBoolSetting(std::string group, std::string field, bool value)
{
Settings fullscreen = settings.write[group][field];
fullscreen->Bool() = value;
Settings entry = settings.write[group][field];
entry->Bool() = value;
}
static std::string resolutionToString(int w, int h)
{
return std::to_string(w) + 'x' + std::to_string(h);
auto string = CGI->generaltexth->translate("vcmi.systemOptions.resolutionButton.hover");
boost::replace_all(string, "%w", std::to_string(w));
boost::replace_all(string, "%h", std::to_string(h));
return string;
}
GeneralOptionsTab::GeneralOptionsTab()
@ -47,21 +52,30 @@ GeneralOptionsTab::GeneralOptionsTab()
onFullscreenChanged(settings.listen["video"]["fullscreen"])
{
OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;
type |= REDRAW_PARENT;
const JsonNode config(ResourceID("config/widgets/settings/generalOptionsTab.json"));
addCallback("spellbookAnimationChanged", [](bool value)
{
return setBoolSetting("video", "spellbookAnimation", value);
setBoolSetting("video", "spellbookAnimation", value);
});
addCallback("setMusic", [this](int value)
{
setIntSetting("general", "music", value);
widget<CSlider>("musicSlider")->redraw();
auto targetLabel = widget<CLabel>("musicValueLabel");
if (targetLabel)
targetLabel->setText(std::to_string(value) + "%");
});
addCallback("setVolume", [this](int value)
{
setIntSetting("general", "sound", value);
widget<CSlider>("soundVolumeSlider")->redraw();
auto targetLabel = widget<CLabel>("soundValueLabel");
if (targetLabel)
targetLabel->setText(std::to_string(value) + "%");
});
//settings that do not belong to base game:
addCallback("fullscreenChanged", [this](bool value)
@ -74,24 +88,26 @@ GeneralOptionsTab::GeneralOptionsTab()
});
addCallback("framerateChanged", [](bool value)
{
setBoolSetting("general", "showfps", value);
setBoolSetting("video", "showfps", value);
});
//moved from "other" tab that is disabled for now to avoid excessible tabs with barely any content
addCallback("availableCreaturesAsDwellingLabelChanged", [](bool value)
addCallback("availableCreaturesAsDwellingChanged", [=](int value)
{
setBoolSetting("gameTweaks", "availableCreaturesAsDwellingLabel", value);
setBoolSetting("gameTweaks", "availableCreaturesAsDwellingLabel", value > 0);
});
addCallback("compactTownCreatureInfoChanged", [](bool value)
{
return setBoolSetting("gameTweaks", "compactTownCreatureInfo", value);
setBoolSetting("gameTweaks", "compactTownCreatureInfo", value);
});
build(config);
std::shared_ptr<CLabel> resolutionLabel = widget<CLabel>("resolutionLabel");
const auto & currentResolution = settings["video"]["screenRes"];
resolutionLabel->setText(resolutionToString(currentResolution["width"].Integer(), currentResolution["height"].Integer()));
std::shared_ptr<CToggleButton> spellbookAnimationCheckbox = widget<CToggleButton>("spellbookAnimationCheckbox");
spellbookAnimationCheckbox->setSelected(settings["video"]["spellbookAnimation"].Bool());
@ -103,7 +119,7 @@ GeneralOptionsTab::GeneralOptionsTab()
});
std::shared_ptr<CToggleButton> framerateCheckbox = widget<CToggleButton>("framerateCheckbox");
framerateCheckbox->setSelected(settings["general"]["showfps"].Bool());
framerateCheckbox->setSelected(settings["video"]["showfps"].Bool());
std::shared_ptr<CSlider> musicSlider = widget<CSlider>("musicSlider");
musicSlider->moveTo(CCS->musich->getVolume());
@ -111,8 +127,8 @@ GeneralOptionsTab::GeneralOptionsTab()
std::shared_ptr<CSlider> volumeSlider = widget<CSlider>("soundVolumeSlider");
volumeSlider->moveTo(CCS->soundh->getVolume());
std::shared_ptr<CToggleButton> availableCreaturesAsDwellingLabelCheckbox = widget<CToggleButton>("availableCreaturesAsDwellingLabelCheckbox");
availableCreaturesAsDwellingLabelCheckbox->setSelected(settings["gameTweaks"]["availableCreaturesAsDwellingLabel"].Bool());
std::shared_ptr<CToggleGroup> creatureGrowthAsDwellingPicker = widget<CToggleGroup>("availableCreaturesAsDwellingPicker");
creatureGrowthAsDwellingPicker->setSelected(settings["gameTweaks"]["availableCreaturesAsDwellingLabel"].Bool());
std::shared_ptr<CToggleButton> compactTownCreatureInfo = widget<CToggleButton>("compactTownCreatureInfoCheckbox");
compactTownCreatureInfo->setSelected(settings["gameTweaks"]["compactTownCreatureInfo"].Bool());
@ -173,11 +189,7 @@ void GeneralOptionsTab::setGameResolution(int index)
gameRes["width"].Float() = resolution.x;
gameRes["height"].Float() = resolution.y;
std::string resText;
resText += std::to_string(resolution.x);
resText += "x";
resText += std::to_string(resolution.y);
widget<CLabel>("resolutionLabel")->setText(resText);
widget<CLabel>("resolutionLabel")->setText(resolutionToString(resolution.x, resolution.y));
}
void GeneralOptionsTab::setFullscreenMode(bool on)
@ -226,4 +238,4 @@ void GeneralOptionsTab::fillSelectableResolutions()
{
return left.x * left.y < right.x * right.y;
});
}
}

View File

@ -9,25 +9,24 @@
*/
#include "StdInc.h"
#include "SettingsMainWindow.h"
#include "GeneralOptionsTab.h"
#include "AdventureOptionsTab.h"
#include "BattleOptionsTab.h"
#include "GeneralOptionsTab.h"
#include "OtherOptionsTab.h"
#include "filesystem/ResourceID.h"
#include "CGameInfo.h"
#include "CGeneralTextHandler.h"
#include "CPlayerInterface.h"
#include "CServerHandler.h"
#include "filesystem/ResourceID.h"
#include "gui/CGuiHandler.h"
#include "lobby/CSavingScreen.h"
#include "widgets/Buttons.h"
#include "widgets/Images.h"
#include "widgets/ObjectLists.h"
#include "CGameInfo.h"
#include "CPlayerInterface.h"
#include "CServerHandler.h"
#include "windows/CMessage.h"
SettingsMainWindow::SettingsMainWindow(BattleInterface * parentBattleUi) : InterfaceObjectConfigurable()
{
@ -43,7 +42,7 @@ SettingsMainWindow::SettingsMainWindow(BattleInterface * parentBattleUi) : Inter
addCallback("closeWindow", [this](int) { backButtonCallback(); });
build(config);
std::shared_ptr<CPicture> background = widget<CPicture>("background");
std::shared_ptr<CIntObject> background = widget<CIntObject>("background");
pos.w = background->pos.w;
pos.h = background->pos.h;
pos = center();
@ -57,12 +56,9 @@ SettingsMainWindow::SettingsMainWindow(BattleInterface * parentBattleUi) : Inter
std::shared_ptr<CButton> restartButton = widget<CButton>("restartButton");
assert(restartButton);
if(CSH->isGuest())
{
loadButton->block(true);
saveButton->block(true);
restartButton->block(true);
}
loadButton->block(CSH->isGuest());
saveButton->block(CSH->isGuest() || parentBattleUi);
restartButton->block(CSH->isGuest() || parentBattleUi);
int defaultTabIndex = 0;
if(parentBattleUi != nullptr)
@ -72,6 +68,7 @@ SettingsMainWindow::SettingsMainWindow(BattleInterface * parentBattleUi) : Inter
parentBattleInterface = parentBattleUi;
tabContentArea = std::make_shared<CTabbedInt>(std::bind(&SettingsMainWindow::createTab, this, _1), Point(0, 0), defaultTabIndex);
tabContentArea->type |= REDRAW_PARENT;
std::shared_ptr<CToggleGroup> mainTabs = widget<CToggleGroup>("settingsTabs");
mainTabs->setSelected(defaultTabIndex);
@ -147,4 +144,14 @@ void SettingsMainWindow::closeAndPushEvent(EUserEvent code)
{
close();
GH.pushUserEvent(code);
}
}
void SettingsMainWindow::showAll(SDL_Surface *to)
{
auto color = LOCPLINT ? LOCPLINT->playerID : PlayerColor(1);
if(settings["session"]["spectate"].Bool())
color = PlayerColor(1); // TODO: Spectator shouldn't need special code for UI colors
CIntObject::showAll(to);
CMessage::drawBorder(color, to, pos.w+28, pos.h+29, pos.x-14, pos.y-15);
}

View File

@ -40,5 +40,7 @@ private:
void mainMenuButtonCallback();
public:
SettingsMainWindow(BattleInterface * parentBattleInterface = nullptr);
void showAll(SDL_Surface * to);
};

View File

@ -19,7 +19,6 @@
"additionalProperties" : false,
"required" : [
"playerName",
"showfps",
"music",
"sound",
"encoding",
@ -39,10 +38,6 @@
"type":"string",
"default" : "Player"
},
"showfps" : {
"type" : "boolean",
"default" : false
},
"music" : {
"type" : "number",
"default" : 88
@ -114,7 +109,19 @@
"type" : "object",
"additionalProperties" : false,
"default": {},
"required" : [ "screenRes", "bitsPerPixel", "fullscreen", "realFullscreen", "cursor", "spellbookAnimation", "driver", "showIntro", "displayIndex" ],
"required" : [
"screenRes",
"bitsPerPixel",
"fullscreen",
"realFullscreen",
"cursor",
"spellbookAnimation",
"driver",
"showIntro",
"displayIndex",
"showfps",
"targetfps"
],
"properties" : {
"screenRes" : {
"type" : "object",
@ -159,6 +166,14 @@
"displayIndex" : {
"type" : "number",
"default" : 0
},
"showfps" : {
"type" : "boolean",
"default" : false
},
"targetfps" : {
"type" : "number",
"default" : 60
}
}
},

View File

@ -1,6 +1,32 @@
{
"items":
[
{
"name": "lineLabelsEnd",
"type": "texture",
"image": "settingsWindow/lineHorizontal",
"rect": { "x" : 5, "y" : 289, "w": 365, "h": 3}
},
/////////////////////////////////////// Left section - Hero Speed and Map Scrolling
{
"name": "frameHeroMovement",
"type": "picture",
"image": "settingsWindow/frameMovement",
"position": {"x": 6, "y": 50 }
},
{
"name": "frameEnemyMovement",
"type": "picture",
"image": "settingsWindow/frameMovement",
"position": {"x": 6, "y": 110 }
},
{
"name": "frameMapMovement",
"type": "picture",
"image": "settingsWindow/frameMovement",
"position": {"x": 6, "y": 170 }
},
{
"name": "topSettingsLabels",
"type": "labelGroup",
@ -10,24 +36,33 @@
"items":
[
{
"position": {"x": 122, "y": 52},
"text": "core.genrltxt.569"
"position": {"x": 150, "y": 62},
"text": "core.genrltxt.569" // Hero Speed
},
{
"position": {"x": 122, "y": 118},
"text": "core.genrltxt.570"
"position": {"x": 150, "y": 122},
"text": "core.genrltxt.570" // Enemy Speed
},
{
"position": {"x": 122, "y": 184},
"text": "core.genrltxt.571"
"position": {"x": 150, "y": 182},
"text": "core.genrltxt.571" // Scrolling Speed
}
]
},
{
"name": "heroSpeedValueLabel",
"type": "label",
"font": "medium",
"alignment": "center",
"color": "yellow",
"position": {"x": 324, "y": 90}
},
{
"name": "heroMovementSpeedPicker",
"type": "toggleGroup",
"position": {"x": 28, "y": 65},
"position": {"x": 10, "y": 73},
"items":
[
{
@ -37,7 +72,6 @@
"help": "core.help.349",
"position": {"x": 0, "y": 0}
},
{
"index": 150,
"type": "toggleButton",
@ -45,44 +79,57 @@
"help": "core.help.350",
"position": {"x": 48, "y": 0}
},
{
"index": 100,
"type": "toggleButton",
"image": "sysopb3",
"help": "core.help.351",
"image": "sysopb5",
"help": "core.help.350",
"position": {"x": 96, "y": 0}
},
{
"index": 50,
"type": "toggleButton",
"image": "sysopb6",
"help": "core.help.351",
"position": {"x": 144, "y": 0}
},
{
"index": 25,
"type": "toggleButton",
"image": "sysopb3",
"help": "core.help.351",
"position": {"x": 192, "y": 0}
},
{
"index": 0,
"type": "toggleButton",
"image": "sysopb4",
"help": "core.help.352",
"position": {"x": 144, "y": 0}
"position": {"x": 240, "y": 0}
}
//barely any difference compared to index 16 for now
// {
// "index": 9999,
// "type": "toggleButton",
// "image": "sysopb8",
// "help": "core.help.356",
// "position": {"x": 192, "y": 0}
// }
],
"callback": "playerHeroSpeedChanged"
},
{
"name": "enemySpeedValueLabel",
"type": "label",
"font": "medium",
"alignment": "center",
"color": "yellow",
"position": {"x": 324, "y": 150}
},
{
"name": "enemyMovementSpeedPicker",
"type": "toggleGroup",
"position": {"x": 28, "y": 132},
"position": {"x": 10, "y": 133},
"items":
[
{
"index": 150,
"type": "toggleButton",
"image": "sysopb5",
"image": "sysopb1",
"help": "core.help.353",
"position": {"x": 0, "y": 0}
},
@ -90,9 +137,25 @@
{
"index": 100,
"type": "toggleButton",
"image": "sysopb5",
"help": "core.help.353",
"position": {"x": 48, "y": 0}
},
{
"index": 50,
"type": "toggleButton",
"image": "sysopb6",
"help": "core.help.354",
"position": {"x": 48, "y": 0}
"position": {"x": 96, "y": 0}
},
{
"index": 25,
"type": "toggleButton",
"image": "sysopb3",
"help": "core.help.354",
"position": {"x": 144, "y": 0}
},
{
@ -100,7 +163,7 @@
"type": "toggleButton",
"image": "sysopb7",
"help": "core.help.355",
"position": {"x": 96, "y": 0}
"position": {"x": 192, "y": 0}
},
{
@ -108,83 +171,176 @@
"type": "toggleButton",
"image": "sysopb8",
"help": "core.help.356",
"position": {"x": 144, "y": 0}
"position": {"x": 240, "y": 0}
}
],
"callback": "enemyHeroSpeedChanged"
},
{
"name": "mapScrollingValueLabel",
"type": "label",
"font": "medium",
"alignment": "center",
"color": "yellow",
"position": {"x": 324, "y": 210}
},
{
"name": "mapScrollSpeedPicker",
"type": "toggleGroup",
"position": {"x": 28, "y": 198},
"position": {"x": 10, "y": 193},
"items":
[
{
"index": 200,
"type": "toggleButton",
"image": "settingsWindow/button46",
"help": "vcmi.adventureOptions.mapScrollSpeed1",
"position": {"x": 0, "y": 0},
"items":
[
{
"name": "mapScrollSpeed1",
"type": "picture",
"image": "settingsWindow/scrollSpeed1",
"position": {"x": 0, "y": 0 }
}
]
},
{
"index": 400,
"type": "toggleButton",
"image": "sysopb9",
"image": "settingsWindow/button46",
"help": "core.help.357",
"position": {"x": 0, "y": 0}
"position": {"x": 48, "y": 0},
"items":
[
{
"name": "mapScrollSpeed2",
"type": "picture",
"image": "settingsWindow/scrollSpeed2",
"position": {"x": 0, "y": 0 }
}
]
},
{
"index": 800,
"type": "toggleButton",
"image": "sysob10",
"image": "settingsWindow/button46",
"help": "core.help.358",
"position": {"x": 64, "y": 0}
"position": {"x": 96, "y": 0},
"items":
[
{
"name": "mapScrollSpeed3",
"type": "picture",
"image": "settingsWindow/scrollSpeed3",
"position": {"x": 0, "y": 0 }
}
]
},
{
"index": 1200,
"type": "toggleButton",
"image": "sysob11",
"image": "settingsWindow/button46",
"help": "core.help.359",
"position": {"x": 128, "y": 0}
"position": {"x": 144, "y": 0},
"items":
[
{
"name": "mapScrollSpeed4",
"type": "picture",
"image": "settingsWindow/scrollSpeed4",
"position": {"x": 0, "y": 0 }
}
]
},
{
"index": 2400, // TODO
"type": "toggleButton",
"image": "settingsWindow/button46",
"help": "vcmi.adventureOptions.mapScrollSpeed5",
"position": {"x": 192, "y": 0},
"items":
[
{
"name": "mapScrollSpeed5",
"type": "picture",
"image": "settingsWindow/scrollSpeed5",
"position": {"x": 0, "y": 0 }
}
]
},
{
"index": 4800, // TODO
"type": "toggleButton",
"image": "settingsWindow/button46",
"help": "vcmi.adventureOptions.mapScrollSpeed6",
"position": {"x": 240, "y": 0},
"items":
[
{
"name": "mapScrollSpeed6",
"type": "picture",
"image": "settingsWindow/scrollSpeed6",
"position": {"x": 0, "y": 0 }
}
]
}
//not really functional yet...
// {
// "index": 6,
// "type": "toggleButton",
// "image": "buttons/square",
// "help": "vcmi.adventureOptions.mapScrollSpeed4",
// "position": {"x": 192, "y": 0},
// "items":
// [
// {
// "name": "mapScrollSpeed4",
// "type": "label",
// "font": "big",
// "alignment": "center",
// "color": "yellow",
// "text": "vcmi.adventureOptions.mapScrollSpeed4.hover"
// }
// ]
// },
// {
// "index": 8,
// "type": "toggleButton",
// "image": "buttons/square",
// "help": "vcmi.adventureOptions.mapScrollSpeed5",
// "position": {"x": 224, "y": 0},
// "items":
// [
// {
// "name": "mapScrollSpeed5",
// "type": "label",
// "font": "big",
// "alignment": "center",
// "color": "yellow",
// "text": "vcmi.adventureOptions.mapScrollSpeed5.hover"
// }
// ]
// }
],
"callback": "mapScrollSpeedChanged"
},
/////////////////////////////////////// Right section - Original H3 options
{
"name": "rightCheckboxesLabels",
"type": "labelGroup",
"font": "medium",
"alignment": "left",
"color": "white",
"items":
[
{
"position": {"x": 415, "y": 55},
"text": "core.genrltxt.572" // TODO: show move path
},
{
"position": {"x": 415, "y": 85},
"text": "core.genrltxt.573" // show hero reminder
},
{
"position": {"x": 415, "y": 115},
"text": "core.genrltxt.574" // quick combat
}
]
},
{
"name": "showMovePathPlaceholder",
"type": "picture",
"image": "settingsWindow/checkBoxEmpty",
"position": {"x": 380, "y": 53},
},
{
"name": "heroReminderCheckbox",
"type": "toggleButton",
"image": "sysopchk.def",
"help": "core.help.361",
"position": {"x": 380, "y": 83},
"callback": "heroReminderChanged"
},
{
"name": "quickCombatCheckbox",
"type": "toggleButton",
"image": "sysopchk.def",
"help": "core.help.362",
"position": {"x": 380, "y": 113},
"callback": "quickCombatChanged"
},
/////////////////////////////////////// Bottom section - VCMI Options
{
"name": "bottomCheckboxesLabels",
"type": "labelGroup",
@ -194,65 +350,37 @@
"items":
[
{
"position": {"x": 64, "y": 278},
"text": "core.genrltxt.572"
},
{
"position": {"x": 64, "y": 314},
"text": "core.genrltxt.573"
},
{
"position": {"x": 64, "y": 350},
"text": "core.genrltxt.574"
},
{
"position": {"x": 64, "y": 386},
"position": {"x": 45, "y": 295},
"text": "vcmi.adventureOptions.numericQuantities.hover"
},
{
"position": {"x": 64, "y": 422},
"position": {"x": 45, "y": 325},
"text": "vcmi.adventureOptions.forceMovementInfo.hover"
},
{
"position": {"x": 64, "y": 458},
"position": {"x": 45, "y": 355},
"text": "vcmi.adventureOptions.showGrid.hover"
},
{
"position": {"x": 45, "y": 385},
"text": "vcmi.adventureOptions.mapSwipe.hover"
}
]
},
{
"name": "heroReminderCheckbox",
"type": "toggleButton",
"image": "sysopchk.def",
"help": "core.help.361",
"position": {"x": 28, "y": 312},
"callback": "heroReminderChanged"
},
{
"name": "quickCombatCheckbox",
"type": "toggleButton",
"image": "sysopchk.def",
"help": "core.help.362",
"position": {"x": 28, "y": 348},
"callback": "quickCombatChanged"
},
{
"name": "numericQuantitiesCheckbox",
"type": "toggleButton",
"image": "sysopchk.def",
"help": "vcmi.adventureOptions.numericQuantities",
"position": {"x": 28, "y": 384},
"position": {"x": 10, "y": 293},
"callback": "numericQuantitiesChanged"
},
{
"name": "forceMovementInfoCheckbox",
"type": "toggleButton",
"image": "sysopchk.def",
"help": "vcmi.adventureOptions.forceMovementInfo",
"position": {"x": 28, "y": 420},
"position": {"x": 10, "y": 323},
"callback": "forceMovementInfoChanged"
},
{
@ -260,8 +388,17 @@
"type": "toggleButton",
"image": "sysopchk.def",
"help": "vcmi.adventureOptions.showGrid",
"position": {"x": 28, "y": 456},
"position": {"x": 10, "y": 353},
"callback": "showGridChanged"
}
},
{
"name": "mapSwipeCheckbox",
"type": "toggleButton",
"image": "sysopchk.def",
"help": "vcmi.adventureOptions.mapSwipe",
"position": {"x": 10, "y": 383},
"callback": "mapSwipeChanged"
},
]
}

View File

@ -2,133 +2,158 @@
"items":
[
{
"name": "animationSpeedLabel",
"type": "label",
"font": "medium",
"alignment": "center",
"color": "yellow",
"text": "core.genrltxt.393",
"position": {"x": 122, "y": 224}
"name": "lineCreatureInfo",
"type": "texture",
"image": "settingsWindow/lineHorizontal",
"rect": { "x" : 5, "y" : 199, "w": 365, "h": 3}
},
{
"name": "autoCombatOptionsLabel",
"type": "label",
"font": "medium",
"alignment": "center",
"color": "yellow",
"text": "core.genrltxt.396",
"position": {"x": 353, "y": 56}
},
{
"name": "creatureInfoLabel",
"type": "label",
"font": "medium",
"alignment": "center",
"color": "yellow",
"text": "core.genrltxt.397",
"position": {"x": 98, "y": 295}
"name": "lineAnimationSpeed",
"type": "texture",
"image": "settingsWindow/lineHorizontal",
"rect": { "x" : 5, "y" : 289, "w": 365, "h": 3}
},
{
"name": "creaturesAutoCombatLabel",
"type": "label",
"name": "titlesLabels",
"type": "labelGroup",
"font": "medium",
"alignment": "left",
"color": "yellow",
"items":
[
{
"text": "core.genrltxt.396", // Auto-combat options
"position": {"x": 380, "y": 55}
},
{
"text": "core.genrltxt.397", // Creature info
"position": {"x": 10, "y": 205}
}
]
},
/////////////////////////////////////// Right section - Auto-combat settings (NOT IMPLEMENTED)
{
"name": "autoCombatLabels",
"type": "labelGroup",
"font": "medium",
"alignment": "left",
"color": "white",
"text": "core.genrltxt.398",
"position": {"x": 283, "y": 76}
"items":
[
{
"text": "core.genrltxt.398", // Creatures
"position": {"x": 415, "y": 85}
},
{
"text": "core.genrltxt.399", // Spells
"position": {"x": 415, "y": 115}
},
{
"text": "core.genrltxt.400", // Catapult
"position": {"x": 415, "y": 145}
},
{
"text": "core.genrltxt.151", // Ballista
"position": {"x": 415, "y": 175}
},
{
"text": "core.genrltxt.401", // First Aid Tent
"position": {"x": 415, "y": 205}
}
]
},
{
"name": "spellsAutoCombatLabel",
"type": "label",
"font": "medium",
"alignment": "left",
"color": "white",
"text": "core.genrltxt.399",
"position": {"x": 283, "y": 106}
"name": "autoCombatCreaturesPlaceholder",
"type": "picture",
"image": "settingsWindow/checkBoxEmpty",
"position": {"x": 380, "y": 83},
},
{
"name": "catapultAutoCombatLabel",
"type": "label",
"font": "medium",
"alignment": "left",
"color": "white",
"text": "core.genrltxt.400",
"position": {"x": 283, "y": 136}
"name": "autoCombatSpellsPlaceholder",
"type": "picture",
"image": "settingsWindow/checkBoxEmpty",
"position": {"x": 380, "y": 113},
},
{
"name": "ballistaAutoCombatLabel",
"type": "label",
"font": "medium",
"alignment": "left",
"color": "white",
"text": "core.genrltxt.151",
"position": {"x": 283, "y": 166}
"name": "autoCombatCatapultPlaceholder",
"type": "picture",
"image": "settingsWindow/checkBoxEmpty",
"position": {"x": 380, "y": 143},
},
{
"name": "aidTentAutoCombatLabel",
"type": "label",
"name": "autoCombatBallistaPlaceholder",
"type": "picture",
"image": "settingsWindow/checkBoxEmpty",
"position": {"x": 380, "y": 173},
},
{
"name": "autoCombatFirstAidTentPlaceholder",
"type": "picture",
"image": "settingsWindow/checkBoxEmpty",
"position": {"x": 380, "y": 203},
},
/////////////////////////////////////// Left section - checkboxes
{
"name": "creatureInfoLabels",
"type": "labelGroup",
"font": "medium",
"alignment": "left",
"color": "white",
"text": "core.genrltxt.401",
"position": {"x": 283, "y": 196}
"items":
[
{
"text": "core.genrltxt.402", // All Stats
"position": {"x": 45, "y": 235}
},
{
"text": "core.genrltxt.403", // Spells only
"position": {"x": 45, "y": 265}
}
]
},
{
"name": "creatureInfoAllPlaceholder",
"type": "picture",
"image": "settingsWindow/checkBoxEmpty",
"position": {"x": 10, "y": 233},
},
{
"name": "creatureInfoSpellsPlaceholder",
"type": "picture",
"image": "settingsWindow/checkBoxEmpty",
"position": {"x": 10, "y": 263},
},
{
"name": "creatureInfoAllStatsLabel",
"type": "label",
"name": "generalOptionsLabels",
"type": "labelGroup",
"font": "medium",
"alignment": "left",
"color": "white",
"text": "core.genrltxt.402",
"position": {"x": 61, "y": 315}
},
{
"name": "creatureInfoOnlySpellsLabel",
"type": "label",
"font": "medium",
"alignment": "left",
"color": "white",
"text": "core.genrltxt.403",
"position": {"x": 61, "y": 345}
},
{
"name": "viewGridLabel",
"type": "label",
"font": "medium",
"alignment": "left",
"color": "white",
"text": "core.genrltxt.404",
"position": {"x": 61, "y": 57}
},
{
"name": "showMovementRangeLabel",
"type": "label",
"font": "medium",
"alignment": "left",
"color": "white",
"text": "core.genrltxt.405",
"position": {"x": 61, "y": 90}
},
{
"name": "mouseShadowLabel",
"type": "label",
"font": "medium",
"alignment": "left",
"color": "white",
"text": "core.genrltxt.406",
"position": {"x": 61, "y": 123}
},
{
"name": "battleCasualtiesLabel",
"type": "label",
"font": "medium",
"alignment": "left",
"color": "white",
"text": "core.genrltxt.407",
"position": {"x": 61, "y": 156}
"items":
[
{
"text": "core.genrltxt.404",
"position": {"x": 45, "y": 55}
},
{
"text": "core.genrltxt.405",
"position": {"x": 45, "y": 85}
},
{
"text": "core.genrltxt.406",
"position": {"x": 45, "y": 115}
},
{
"text": "core.genrltxt.407",
"position": {"x": 45, "y": 145}
},
{
"text": "vcmi.battleOptions.skipBattleIntroMusic.hover",
"position": {"x": 45, "y": 175}
}
]
},
{
@ -136,7 +161,7 @@
"type": "toggleButton",
"image": "sysopchk.def",
"help": "core.help.427",
"position": {"x": 25, "y": 56},
"position": {"x": 10, "y": 53},
"callback": "viewGridChanged"
},
{
@ -144,7 +169,7 @@
"type": "toggleButton",
"image": "sysopchk.def",
"help": "core.help.428",
"position": {"x": 25, "y": 89},
"position": {"x": 10, "y": 83},
"callback": "movementShadowChanged"
},
{
@ -152,90 +177,146 @@
"type": "toggleButton",
"image": "sysopchk.def",
"help": "core.help.429",
"position": {"x": 25, "y": 122},
"position": {"x": 10, "y": 113},
"callback": "mouseShadowChanged"
},
{
"name": "battleFieldCasualtiesPlaceholder",
"type": "picture",
"image": "settingsWindow/checkBoxEmpty",
"position": {"x": 10, "y": 143},
},
{
"name": "skipBattleIntroMusicCheckbox",
"type": "toggleButton",
"image": "sysopchk.def",
"help": "vcmi.battleOptions.skipBattleIntroMusic",
"position": {"x": 10, "y": 173},
"callback": "skipBattleIntroMusicChanged"
},
/////////////////////////////////////// Bottom section - Animation Speed and Turn Order
{
"name": "frameAnimationSpeed",
"type": "picture",
"image": "settingsWindow/frameMovement",
"position": {"x": 6, "y": 350 }
},
{
"name": "animationSpeedLabel",
"type": "label",
"font": "medium",
"alignment": "center",
"color": "yellow",
"text": "core.genrltxt.393",
"position": {"x": 150, "y": 362}
},
{
"name": "animationSpeedValueLabel",
"type": "label",
"font": "medium",
"alignment": "center",
"color": "yellow",
"position": {"x": 324, "y": 390}
},
{
"name": "animationSpeedPicker",
"type": "toggleGroup",
"position": {"x": 28, "y": 233},
"position": {"x": 10, "y": 373},
"items":
[
{
"index": 1,
"type": "toggleButton",
"image": "sysopb9",
"help": "core.help.422",
"position": {"x": 0, "y": 0}
"image": "settingsWindow/button46",
"help": "vcmi.battleOptions.animationsSpeed1",
"position": {"x": 0, "y": 0},
"items":
[
{
"name": "battleScrollSpeed1",
"type": "picture",
"image": "settingsWindow/scrollSpeed1",
"position": {"x": 0, "y": 0 }
}
]
},
{
"index": 2,
"type": "toggleButton",
"image": "sysob10",
"help": "core.help.423",
"position": {"x": 64, "y": 0}
"image": "settingsWindow/button46",
"help": "core.help.422",
"position": {"x": 48, "y": 0},
"items":
[
{
"name": "battleScrollSpeed2",
"type": "picture",
"image": "settingsWindow/scrollSpeed2",
"position": {"x": 0, "y": 0 }
}
]
},
{
"index": 3,
"type": "toggleButton",
"image": "sysob11",
"help": "core.help.424",
"position": {"x": 128, "y": 0}
"image": "settingsWindow/button46",
"help": "core.help.423",
"position": {"x":96, "y": 0},
"items":
[
{
"name": "battleScrollSpeed3",
"type": "picture",
"image": "settingsWindow/scrollSpeed3",
"position": {"x": 0, "y": 0 }
}
]
},
{
"index": 6,
"type": "toggleButton",
"image": "buttons/square",
"help": "vcmi.battleOptions.animationsSpeed4",
"position": {"x": 192, "y": 0},
"image": "settingsWindow/button46",
"help": "core.help.424",
"position": {"x": 144, "y": 0},
"items":
[
{
"name": "battleAnimationsSpeed4",
"type": "label",
"font": "big",
"alignment": "center",
"color": "yellow",
"text": "vcmi.battleOptions.animationsSpeed4.hover"
"name": "battleScrollSpeed4",
"type": "picture",
"image": "settingsWindow/scrollSpeed4",
"position": {"x": 0, "y": 0 }
}
]
},
{
"index": 12,
"type": "toggleButton",
"image": "buttons/square",
"image": "settingsWindow/button46",
"help": "vcmi.battleOptions.animationsSpeed5",
"position": {"x": 229, "y": 0},
"position": {"x": 192, "y": 0},
"items":
[
{
"name": "battleAnimationsSpeed5",
"type": "label",
"font": "big",
"alignment": "center",
"color": "yellow",
"text": "vcmi.battleOptions.animationsSpeed5.hover"
"name": "battleScrollSpeed5",
"type": "picture",
"image": "settingsWindow/scrollSpeed5",
"position": {"x": 0, "y": 0 }
}
]
},
{
"index": 24,
"type": "toggleButton",
"image": "buttons/square",
"image": "settingsWindow/button46",
"help": "vcmi.battleOptions.animationsSpeed6",
"position": {"x": 266, "y": 0},
"position": {"x": 240, "y": 0},
"items":
[
{
"name": "battleAnimationsSpeed6",
"type": "label",
"font": "big",
"alignment": "center",
"color": "yellow",
"text": "vcmi.battleOptions.animationsSpeed6.hover"
"name": "battleScrollSpeed6",
"type": "picture",
"image": "settingsWindow/scrollSpeed6",
"position": {"x": 0, "y": 0 }
}
]
}
@ -244,52 +325,58 @@
},
{
"name": "showQueueLabel",
"type": "label",
"font": "medium",
"alignment": "left",
"color": "white",
"text": "vcmi.battleOptions.showQueue.hover",
"position": {"x": 61, "y": 393}
},
{
"name": "showQueueCheckbox",
"type": "toggleButton",
"image": "sysopchk.def",
"help": "vcmi.battleOptions.showQueue",
"position": {"x": 25, "y": 391},
"callback": "showQueueChanged"
"name": "frameQueueSize",
"type": "picture",
"image": "settingsWindow/frameStackQueue",
"position": {"x": 6, "y": 410 }
},
{
"name": "queueSizeLabel",
"type": "label",
"font": "medium",
"alignment": "left",
"alignment": "center",
"color": "yellow",
"text": "vcmi.battleOptions.queueSizeLabel.hover",
"position": {"x": 60, "y": 429}
"position": {"x": 170, "y": 422}
},
{
"name": "queueSizePicker",
"type": "toggleGroup",
"position": {"x": 28, "y": 450},
"position": {"x": 10, "y": 434},
"items":
[
{
"index": 0, //auto
"index": -1, //off
"type": "toggleButton",
"image": "buttons/triplewide",
"image": "settingsWindow/button80",
"help": "vcmi.battleOptions.queueSizeAutoButton",
"position": {"x": 0, "y": 0},
"items":
[
{
"name": "queueSizeNoneText",
"type": "label",
"font": "medium",
"alignment": "center",
"color": "yellow",
"text": "vcmi.battleOptions.queueSizeNoneButton.hover"
}
]
},
{
"index": 0, //auto
"type": "toggleButton",
"image": "settingsWindow/button80",
"help": "vcmi.battleOptions.queueSizeAutoButton",
"position": {"x": 85, "y": 0},
"items":
[
{
"name": "queueSizeAutoText",
"type": "label",
"font": "big",
"font": "medium",
"alignment": "center",
"color": "yellow",
"text": "vcmi.battleOptions.queueSizeAutoButton.hover"
@ -299,15 +386,15 @@
{
"index": 1, //small
"type": "toggleButton",
"image": "buttons/triplewide",
"image": "settingsWindow/button80",
"help": "vcmi.battleOptions.queueSizeSmallButton",
"position": {"x": 113, "y": 0},
"position": {"x": 170, "y": 0},
"items":
[
{
"name": "queueSizeSmallText",
"type": "label",
"font": "big",
"font": "medium",
"alignment": "center",
"color": "yellow",
"text": "vcmi.battleOptions.queueSizeSmallButton.hover"
@ -317,15 +404,15 @@
{
"index": 2, //large
"type": "toggleButton",
"image": "buttons/triplewide",
"image": "settingsWindow/button80",
"help": "vcmi.battleOptions.queueSizeBigButton",
"position": {"x": 226, "y": 0},
"position": {"x": 255, "y": 0},
"items":
[
{
"name": "queueSizeBigText",
"type": "label",
"font": "big",
"font": "medium",
"alignment": "center",
"color": "yellow",
"text": "vcmi.battleOptions.queueSizeBigButton.hover"
@ -334,25 +421,6 @@
}
],
"callback": "queueSizeChanged"
},
{
"name": "skipBattleIntroMusicLabel",
"type": "label",
"font": "medium",
"alignment": "left",
"color": "white",
"text": "vcmi.battleOptions.skipBattleIntroMusic.hover",
"position": {"x": 61, "y": 502}
},
{
"name": "skipBattleIntroMusicCheckbox",
"type": "toggleButton",
"image": "sysopchk.def",
"help": "vcmi.battleOptions.skipBattleIntroMusic",
"position": {"x": 25, "y": 500},
"callback": "skipBattleIntroMusicChanged"
}
]
}
}

View File

@ -2,7 +2,115 @@
"items":
[
{
"name": "topSettingsLabels",
"name": "lineLabelsEnd",
"type": "texture",
"image": "settingsWindow/lineHorizontal",
"rect": { "x" : 5, "y" : 289, "w": 365, "h": 3}
},
{
"name": "settingGroupTitles",
"type": "labelGroup",
"font": "medium",
"alignment": "left",
"color": "yellow",
"items":
[
{
"position": {"x": 10, "y": 55},
"text": "vcmi.systemOptions.videoGroup"
},
{
"position": {"x": 380, "y": 55},
"text": "vcmi.systemOptions.audioGroup"
},
{
"position": {"x": 10, "y": 295},
"text": "vcmi.systemOptions.townsGroup"
}
]
},
/////////////////////////////////////// Left section - Video Settings
{
"name": "resolutionLabel",
"type": "label",
"font": "medium",
"alignment": "left",
"color": "white",
"position": {"x": 45, "y": 85},
"text": "vcmi.systemOptions.resolutionButton.hover"
},
{
"name": "resolutionButton",
"type": "button",
"position": {"x": 10, "y": 83},
"image": "settingsWindow/button32",
"help": "vcmi.systemOptions.resolutionButton",
"callback": "setGameResolution",
"hotkey": "g",
"items":
[
{
"name": "gearIcon",
"type": "picture",
"image": "settingsWindow/gear",
"position": {"x": 0, "y": 0 }
}
]
},
{
"name": "topCheckboxesLabels",
"type": "labelGroup",
"font": "medium",
"alignment": "left",
"color": "white",
"items":
[
{
"position": {"x": 45, "y": 115},
"text": "vcmi.systemOptions.fullscreenButton.hover"
},
{
"position": {"x": 45, "y": 145},
"text": "vcmi.systemOptions.framerateButton.hover"
},
{
"position": {"x": 45, "y": 175},
"text": "core.genrltxt.577"
},
]
},
{
"name": "fullscreenCheckbox",
"type": "toggleButton",
"image": "sysopchk.def",
"help": "vcmi.systemOptions.fullscreenButton",
"position": {"x": 10, "y": 113},
"callback": "fullscreenChanged"
},
{
"name": "framerateCheckbox",
"type": "toggleButton",
"image": "sysopchk.def",
"help": "vcmi.systemOptions.framerateButton",
"position": {"x": 10, "y": 143},
"callback": "framerateChanged"
},
{
"name": "spellbookAnimationCheckbox",
"type": "toggleButton",
"image": "sysopchk.def",
"help": "core.help.364",
"position": {"x": 10, "y": 173},
"callback": "spellbookAnimationChanged"
},
/////////////////////////////////////// Right section - Audio Settings
{
"name": "settingAudioTitles",
"type": "labelGroup",
"font": "medium",
"alignment": "center",
@ -10,65 +118,71 @@
"items":
[
{
"position": {"x": 122, "y": 50},
"text": "vcmi.systemOptions.resolutionButton.hover"
"position": {"x": 460, "y": 98},
"text": "core.genrltxt.394" // Music Volume
},
{
"position": {"x": 122, "y": 135},
"text": "core.genrltxt.394"
},
{
"position": {"x": 122, "y": 200},
"text": "core.genrltxt.395"
"position": {"x": 460, "y": 158},
"text": "core.genrltxt.395" // Effects volume
}
]
},
{
"name": "resolutionButton",
"type": "button",
"position": {"x": 28, "y": 63},
"image": "buttons/resolution",
"help": "vcmi.systemOptions.resolutionButton",
"callback": "setGameResolution",
"hotkey": "g"
"name": "frameMusic",
"type": "picture",
"image": "settingsWindow/frameAudio",
"position": {"x": 380, "y": 80 }
},
{
"name": "resolutionLabel",
"type": "label",
"font": "medium",
"alignment": "center",
"color": "yellow",
"position": {"x": 170, "y": 80}
},
{
"name": "musicSlider",
"type": "slider",
"position": {"x": 29, "y": 147},
"size": 190,
"position": {"x": 385, "y": 115},
"size": 200,
"style": "brown",
"orientation": "horizontal",
"itemsVisible": 0,
"itemsTotal": 100,
"callback": "setMusic"
},
{
"name": "musicValueLabel",
"type": "label",
"font": "medium",
"alignment": "center",
"color": "yellow",
"position": {"x": 565, "y": 98}
},
{
"name": "frameSound",
"type": "picture",
"image": "settingsWindow/frameAudio",
"position": {"x": 380, "y": 140 }
},
{
"name": "soundVolumeSlider",
"type": "slider",
"position": {"x": 29, "y": 213},
"size": 190,
"position": {"x": 385, "y": 175},
"size": 200,
"style": "brown",
"orientation": "horizontal",
"itemsVisible": 0,
"itemsTotal": 100,
"callback": "setVolume"
},
{
"name": "bottomCheckboxesLabels",
"name": "soundValueLabel",
"type": "label",
"font": "medium",
"alignment": "center",
"color": "yellow",
"position": {"x": 565, "y": 158}
},
/////////////////////////////////////// Bottom section - Towns Settings
{
"name": "townCheckboxesLabels",
"type": "labelGroup",
"font": "medium",
"alignment": "left",
@ -76,74 +190,42 @@
"items":
[
{
"position": {"x": 64, "y": 278},
"text": "core.genrltxt.577"
"text": "vcmi.otherOptions.creatureGrowthAsDwellingLabel.hover",
"position": {"x": 45, "y": 325}
},
{
"position": {"x": 64, "y": 314},
"text": "vcmi.systemOptions.fullscreenButton.hover"
"text": "vcmi.otherOptions.availableCreaturesAsDwellingLabel.hover",
"position": {"x": 45, "y": 355}
},
{
"position": {"x": 64, "y": 350},
"text": "vcmi.systemOptions.framerateButton.hover"
"text": "vcmi.otherOptions.compactTownCreatureInfo.hover",
"position": {"x": 45, "y": 385}
}
]
},
{
"name": "spellbookAnimationCheckbox",
"type": "toggleButton",
"image": "sysopchk.def",
"help": "core.help.364",
"position": {"x": 28, "y": 276},
"callback": "spellbookAnimationChanged"
},
{
"name": "fullscreenCheckbox",
"type": "toggleButton",
"image": "sysopchk.def",
"help": "vcmi.systemOptions.fullscreenButton",
"position": {"x": 28, "y": 312},
"callback": "fullscreenChanged"
},
{
"name": "framerateCheckbox",
"type": "toggleButton",
"image": "sysopchk.def",
"help": "vcmi.systemOptions.framerateButton",
"position": {"x": 28, "y": 348},
"callback": "framerateChanged"
},
{
"name": "availableCreaturesAsDwellingLabelText",
"type": "label",
"font": "medium",
"alignment": "left",
"color": "white",
"text": "vcmi.otherOptions.availableCreaturesAsDwellingLabel.hover",
"position": {"x": 64, "y": 386}
},
{
"name": "availableCreaturesAsDwellingLabelCheckbox",
"type": "toggleButton",
"image": "sysopchk.def",
"help": "vcmi.otherOptions.availableCreaturesAsDwellingLabel",
"position": {"x": 28, "y": 384},
"callback": "availableCreaturesAsDwellingLabelChanged"
},
{
"name": "compactTownCreatureInfoLabel",
"type": "label",
"font": "medium",
"alignment": "left",
"color": "white",
"text": "vcmi.otherOptions.compactTownCreatureInfo.hover",
"position": {"x": 64, "y": 422}
"name": "availableCreaturesAsDwellingPicker",
"type": "toggleGroup",
"position": {"x": 10, "y": 323},
"items":
[
{
"index": 0,
"type": "toggleButton",
"image": "sysopchk.def",
"help": "vcmi.otherOptions.creatureGrowthAsDwellingLabel",
"position": {"x": 0, "y": 0}
},
{
"index": 1,
"type": "toggleButton",
"image": "sysopchk.def",
"help": "vcmi.otherOptions.availableCreaturesAsDwellingLabel",
"position": {"x": 0, "y": 30}
},
],
"callback": "availableCreaturesAsDwellingChanged"
},
{
@ -151,7 +233,7 @@
"type": "toggleButton",
"image": "sysopchk.def",
"help": "vcmi.otherOptions.compactTownCreatureInfo",
"position": {"x": 28, "y": 420},
"position": {"x": 10, "y": 383},
"callback": "compactTownCreatureInfoChanged"
}
]

View File

@ -3,9 +3,21 @@
[
{
"name": "background",
"type": "picture",
"image": "vcmiSettingsWindow",
"position": {"x": 0, "y": 0}
"type": "texture",
"image": "DiBoxBck",
"rect": {"w": 600, "h": 480}
},
{
"name": "lineTabs",
"type": "texture",
"image": "settingsWindow/lineHorizontal",
"rect": { "x" : 10, "y" : 45, "w": 580, "h": 3}
},
{
"name": "lineColumns",
"type": "texture",
"image": "settingsWindow/lineVertical",
"rect": { "x" : 370, "y" : 50, "w": 3, "h": 420}
},
{
@ -20,8 +32,8 @@
{
"index": 0,
"type": "toggleButton",
"position": {"x": 0, "y": 0},
"image": "buttons/quadwide",
"position": {"x": 10, "y": 5},
"image": "settingsWindow/button190",
"help": "vcmi.settingsMainWindow.generalTab",
"items":
[
@ -39,8 +51,8 @@
{
"index": 1,
"type": "toggleButton",
"position": {"x": 150, "y": 0},
"image": "buttons/quadwide",
"position": {"x": 205, "y": 5},
"image": "settingsWindow/button190",
"help": "vcmi.settingsMainWindow.adventureTab",
"items":
[
@ -58,8 +70,8 @@
{
"index": 2,
"type": "toggleButton",
"position": {"x": 300, "y": 0},
"image": "buttons/quadwide",
"position": {"x": 400, "y": 5},
"image": "settingsWindow/button190",
"help": "vcmi.settingsMainWindow.battleTab",
"items":
[
@ -73,88 +85,70 @@
}
]
}
//disabled, due to being redundant for now
// {
// "index": 3,
// "type": "toggleButton",
// "position": {"x": 450, "y": 0},
// "image": "buttons/quadwide",
// "help": "vcmi.settingsMainWindow.otherTab",
// "items":
// [
// {
// "name": "otherTabButtonTitle",
// "type": "label",
// "font": "big",
// "alignment": "center",
// "color": "yellow",
// "text": "vcmi.settingsMainWindow.otherTab.hover"
// }
// ]
// }
],
"callback": "activateSettingsTab"
},
{
"name": "lineButtons",
"type": "texture",
"image": "settingsWindow/lineHorizontal",
"rect": { "x" : 375, "y" : 289, "w": 220, "h": 3}
},
{
"name": "loadButton",
"type": "button",
"position": {"x": 386, "y": 383},
"position": {"x": 380, "y": 306},
"image": "SOLOAD.DEF",
"imageOrder": [1, 0, 2, 3],
"help": "core.help.321",
"callback": "loadGame",
"hotkey": "l"
},
{
"name": "saveButton",
"type": "button",
"position": {"x": 497, "y": 383},
"position": {"x": 490, "y": 306},
"image": "SOSAVE.DEF",
"imageOrder": [1, 0, 2, 3],
"help": "core.help.322",
"callback": "saveGame",
"hotkey": "s"
},
{
"name": "restartButton",
"type": "button",
"position": {"x": 386, "y": 442},
"position": {"x": 380, "y": 364},
"image": "SORSTRT.DEF",
"imageOrder": [1, 0, 2, 3],
"help": "core.help.323",
"callback": "restartGame",
"hotkey": "r"
},
{
"name": "mainMenuButton",
"type": "button",
"position": {"x": 497, "y": 442},
"position": {"x": 490, "y": 364},
"image": "SOMAIN.DEF",
"imageOrder": [1, 0, 2, 3],
"help": "core.help.320",
"callback": "returnToMainMenu",
"hotkey": "m"
},
{
"name": "quitButton",
"type": "button",
"position": {"x": 386, "y": 500},
"position": {"x": 380, "y": 422},
"image": "soquit.def",
"imageOrder": [1, 0, 2, 3],
"help": "core.help.324",
"callback": "quitGame",
"hotkey": "q"
},
{
"name": "closeSettingsButton",
"type": "button",
"position": {"x": 497, "y": 500},
"position": {"x": 490, "y": 422},
"image": "soretrn.def",
"imageOrder": [1, 0, 2, 3],
"help": "core.help.325",
@ -162,4 +156,4 @@
"hotkey": ["esc", "backspace"]
}
]
}
}