Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 30 additions & 14 deletions src/building/menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,28 +12,31 @@ static const building_type MENU_BUILDING_TYPE[BUILD_MENU_MAX][BUILD_MENU_ITEM_MA
{BUILDING_HOUSE_VACANT_LOT, 0},
{BUILDING_CLEAR_LAND, 0},
{BUILDING_ROAD, 0},
{BUILDING_WELL, BUILDING_FOUNTAIN, BUILDING_DRAGGABLE_RESERVOIR, BUILDING_AQUEDUCT, 0},

{BUILDING_WELL, 0, BUILDING_DRAGGABLE_RESERVOIR, BUILDING_AQUEDUCT, BUILDING_FOUNTAIN, 0},
{BUILDING_BATHHOUSE, BUILDING_BARBER, BUILDING_DOCTOR, BUILDING_HOSPITAL, 0},
{BUILDING_MENU_SMALL_TEMPLES, BUILDING_MENU_LARGE_TEMPLES, BUILDING_ORACLE, 0},
{BUILDING_SCHOOL, BUILDING_ACADEMY, BUILDING_LIBRARY, BUILDING_MISSION_POST, 0},
{BUILDING_THEATER, BUILDING_AMPHITHEATER, BUILDING_COLOSSEUM, BUILDING_HIPPODROME,
BUILDING_ACTOR_COLONY, BUILDING_GLADIATOR_SCHOOL, BUILDING_LION_HOUSE, BUILDING_CHARIOT_MAKER, 0},
{BUILDING_FORUM, BUILDING_SENATE,
BUILDING_GOVERNORS_HOUSE, BUILDING_GOVERNORS_VILLA, BUILDING_GOVERNORS_PALACE,
BUILDING_SMALL_STATUE, BUILDING_MEDIUM_STATUE, BUILDING_LARGE_STATUE, BUILDING_TRIUMPHAL_ARCH, 0},
{BUILDING_ENGINEERS_POST, BUILDING_GARDENS, BUILDING_PLAZA, BUILDING_LOW_BRIDGE, BUILDING_SHIP_BRIDGE, 0},
{BUILDING_PREFECTURE, BUILDING_WALL, BUILDING_TOWER, BUILDING_GATEHOUSE,
{BUILDING_MENU_SMALL_TEMPLES, BUILDING_MENU_LARGE_TEMPLES, 0, BUILDING_ORACLE, 0},
{BUILDING_SCHOOL, BUILDING_ACADEMY, BUILDING_LIBRARY, 0, BUILDING_MISSION_POST, 0},
{BUILDING_THEATER, BUILDING_AMPHITHEATER, BUILDING_COLOSSEUM, 0,
BUILDING_ACTOR_COLONY, BUILDING_GLADIATOR_SCHOOL, BUILDING_LION_HOUSE, 0,
BUILDING_HIPPODROME, BUILDING_CHARIOT_MAKER, 0},
{BUILDING_FORUM, BUILDING_SENATE, 0,
BUILDING_GOVERNORS_HOUSE, BUILDING_GOVERNORS_VILLA, BUILDING_GOVERNORS_PALACE, 0,
BUILDING_SMALL_STATUE, BUILDING_MEDIUM_STATUE, BUILDING_LARGE_STATUE, 0,
BUILDING_TRIUMPHAL_ARCH, 0},
{BUILDING_ENGINEERS_POST, 0, BUILDING_GARDENS, BUILDING_PLAZA, 0, BUILDING_LOW_BRIDGE, BUILDING_SHIP_BRIDGE, 0},
{BUILDING_PREFECTURE, 0, BUILDING_WALL, BUILDING_TOWER, BUILDING_GATEHOUSE, 0,
BUILDING_FORT, BUILDING_MILITARY_ACADEMY, BUILDING_BARRACKS, 0},
{BUILDING_WHARF, BUILDING_MENU_FARMS, BUILDING_MENU_RAW_MATERIALS, BUILDING_MENU_WORKSHOPS,
{BUILDING_WHARF, BUILDING_MENU_FARMS, BUILDING_MENU_RAW_MATERIALS, BUILDING_MENU_WORKSHOPS, 0,
BUILDING_MARKET, BUILDING_GRANARY, BUILDING_WAREHOUSE, BUILDING_DOCK, 0},
{BUILDING_WHEAT_FARM, BUILDING_VEGETABLE_FARM, BUILDING_FRUIT_FARM,
BUILDING_PIG_FARM, BUILDING_OLIVE_FARM, BUILDING_VINES_FARM, 0},
{BUILDING_CLAY_PIT, BUILDING_TIMBER_YARD, BUILDING_MARBLE_QUARRY, BUILDING_IRON_MINE, 0},
{BUILDING_POTTERY_WORKSHOP, BUILDING_FURNITURE_WORKSHOP, BUILDING_OIL_WORKSHOP,
BUILDING_WINE_WORKSHOP, BUILDING_WEAPONS_WORKSHOP, 0},
{BUILDING_MENU_SMALL_TEMPLES, BUILDING_SMALL_TEMPLE_CERES, BUILDING_SMALL_TEMPLE_NEPTUNE,
{BUILDING_MENU_SMALL_TEMPLES, 0, BUILDING_SMALL_TEMPLE_CERES, BUILDING_SMALL_TEMPLE_NEPTUNE,
BUILDING_SMALL_TEMPLE_MERCURY, BUILDING_SMALL_TEMPLE_MARS, BUILDING_SMALL_TEMPLE_VENUS, 0},
{BUILDING_MENU_LARGE_TEMPLES, BUILDING_LARGE_TEMPLE_CERES, BUILDING_LARGE_TEMPLE_NEPTUNE,
{BUILDING_MENU_LARGE_TEMPLES, 0, BUILDING_LARGE_TEMPLE_CERES, BUILDING_LARGE_TEMPLE_NEPTUNE,
BUILDING_LARGE_TEMPLE_MERCURY, BUILDING_LARGE_TEMPLE_MARS, BUILDING_LARGE_TEMPLE_VENUS, 0},
{BUILDING_FORT_LEGIONARIES, BUILDING_FORT_JAVELIN, BUILDING_FORT_MOUNTED, 0},
{BUILDING_WHARF, BUILDING_SHIPYARD, 0},
Expand Down Expand Up @@ -272,7 +275,7 @@ int building_menu_next_index(int submenu, int current_index)
{
for (int i = current_index + 1; i < BUILD_MENU_ITEM_MAX; i++) {
if (MENU_BUILDING_TYPE[submenu][i] <= 0) {
return 0;
continue;
}
if (menu_enabled[submenu][i]) {
return i;
Expand All @@ -281,6 +284,19 @@ int building_menu_next_index(int submenu, int current_index)
return 0;
}

int building_menu_is_new_category(int submenu, int current_index)
{
for (int i = current_index - 1; i >= 0; i--) {
if (MENU_BUILDING_TYPE[submenu][i] <= 0) {
return 1;
}
if (menu_enabled[submenu][i]) {
return 0;
}
}
return 0;
}

building_type building_menu_type(int submenu, int item)
{
return MENU_BUILDING_TYPE[submenu][item];
Expand Down
2 changes: 2 additions & 0 deletions src/building/menu.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ int building_menu_count_items(int submenu);

int building_menu_next_index(int submenu, int current_index);

int building_menu_is_new_category(int submenu, int current_index);

building_type building_menu_type(int submenu, int item);

build_menu_group building_menu_for_type(building_type type);
Expand Down
3 changes: 3 additions & 0 deletions src/graphics/color.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ typedef uint32_t color_t;
#define COLOR_TOOLTIP 0x424242
#define COLOR_SIDEBAR 0xbdb592

#define COLOR_MENU_SEPARATOR 0xdfdfdf
#define COLOR_MENU_SEPARATOR_DESERT 0xffffff

#define COLOR_FONT_RED COLOR_RED
#define COLOR_FONT_BLUE 0x0055ff
#define COLOR_FONT_YELLOW 0xe7e75a
Expand Down
33 changes: 22 additions & 11 deletions src/window/build_menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include "building/model.h"
#include "city/view.h"
#include "graphics/generic_button.h"
#include "graphics/graphics.h"
#include "graphics/image.h"
#include "graphics/lang_text.h"
#include "graphics/panel.h"
Expand All @@ -22,6 +23,7 @@
#define MENU_ITEM_HEIGHT 24
#define MENU_ITEM_WIDTH 176
#define MENU_CLICK_MARGIN 20
#define MENU_SEPARATOR_HEIGHT 10

#define SUBMENU_NONE -1

Expand Down Expand Up @@ -175,24 +177,33 @@ static int is_fishing_button(building_type type)
static void draw_menu_buttons(void)
{
int x_offset = get_sidebar_x_offset();
int y_offset = 0;
int item_index = -1;
int item_x_align = x_offset - MENU_X_OFFSET;
int category = 0;
for (int i = 0; i < data.num_items; i++) {
item_index = building_menu_next_index(data.selected_submenu, item_index);
label_draw(item_x_align, data.y_offset + MENU_Y_OFFSET + MENU_ITEM_HEIGHT * i, 16,
data.focus_button_id == i + 1 ? 1 : 2);
y_offset = data.y_offset + MENU_Y_OFFSET + MENU_ITEM_HEIGHT * i + MENU_SEPARATOR_HEIGHT * category;
if (i > 0 && building_menu_is_new_category(data.selected_submenu, item_index)) {
color_t separator_color = (scenario_property_climate() == CLIMATE_DESERT)
? COLOR_MENU_SEPARATOR_DESERT
: COLOR_MENU_SEPARATOR;
graphics_draw_horizontal_line(item_x_align + 16, item_x_align + build_menu_buttons[i].width - 16,
y_offset + 2, separator_color);
category++;
y_offset += MENU_SEPARATOR_HEIGHT;
}
build_menu_buttons[i].y = MENU_ITEM_HEIGHT * i + MENU_SEPARATOR_HEIGHT * category;
label_draw(item_x_align, y_offset, 16, data.focus_button_id == i + 1 ? 1 : 2);
int type = building_menu_type(data.selected_submenu, item_index);
if (is_all_button(type)) {
text_draw_centered(translation_for(TR_BUILD_ALL_TEMPLES),
item_x_align, data.y_offset + MENU_Y_OFFSET + 4 + MENU_ITEM_HEIGHT * i,
text_draw_centered(translation_for(TR_BUILD_ALL_TEMPLES), item_x_align, y_offset + 4,
MENU_ITEM_WIDTH, FONT_NORMAL_GREEN, 0);
} else if (is_fishing_button(type)) {
text_draw_centered(translation_for(TR_BUILD_MENU_FISHING),
item_x_align, data.y_offset + MENU_Y_OFFSET + 4 + MENU_ITEM_HEIGHT * i,
text_draw_centered(translation_for(TR_BUILD_MENU_FISHING), item_x_align, y_offset + 4,
MENU_ITEM_WIDTH, FONT_NORMAL_GREEN, 0);
} else {
lang_text_draw_centered(28, type, item_x_align, data.y_offset + MENU_Y_OFFSET + 4 + MENU_ITEM_HEIGHT * i,
MENU_ITEM_WIDTH, FONT_NORMAL_GREEN);
lang_text_draw_centered(28, type, item_x_align, y_offset + 4, MENU_ITEM_WIDTH, FONT_NORMAL_GREEN);
}
if (type == BUILDING_DRAGGABLE_RESERVOIR) {
type = BUILDING_RESERVOIR;
Expand All @@ -211,8 +222,7 @@ static void draw_menu_buttons(void)
cost = model_get_building(BUILDING_LARGE_TEMPLE_CERES)->cost;
}
if (cost) {
text_draw_money(cost, x_offset - 82, data.y_offset + MENU_Y_OFFSET + 4 + MENU_ITEM_HEIGHT * i,
FONT_NORMAL_GREEN);
text_draw_money(cost, x_offset - 82, y_offset + 4, FONT_NORMAL_GREEN);
}
}
}
Expand All @@ -229,7 +239,8 @@ static int click_outside_menu(const mouse *m, int x_offset)
(m->x < x_offset - MENU_X_OFFSET - MENU_CLICK_MARGIN ||
m->x > x_offset + MENU_CLICK_MARGIN ||
m->y < data.y_offset + MENU_Y_OFFSET - MENU_CLICK_MARGIN ||
m->y > data.y_offset + MENU_Y_OFFSET + MENU_CLICK_MARGIN + MENU_ITEM_HEIGHT * data.num_items);
m->y > data.y_offset + MENU_Y_OFFSET + MENU_CLICK_MARGIN +
build_menu_buttons[data.num_items - 1].y + MENU_ITEM_HEIGHT);
}

static int handle_build_submenu(const mouse *m)
Expand Down
Loading