Skip to content

Commit 4baa517

Browse files
committed
added side page when building is clicked
1 parent 5e8f339 commit 4baa517

13 files changed

+172
-42
lines changed

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# CMkae Build dir
2+
build/
3+
14
# Visual Studio directories
25
.vs/
36
out/

assets/checkmark.png

58.3 KB
Loading

assets/farmer.png

1.09 MB
Loading

assets/gems.png

54.2 KB
Loading

assets/gold.png

63.2 KB
Loading

assets/grass.png

552 KB
Loading

assets/iron.png

52.7 KB
Loading

assets/road.png

1.36 MB
Loading

assets/stone.png

52.3 KB
Loading

assets/x.png

62.6 KB
Loading

include/resource_building.hpp

+29-4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include "grid.hpp"
55

66
#include "SDL.h"
7+
#include "SDL_FontCache.h"
78

89
#include <forward_list>
910
#include <array>
@@ -28,7 +29,8 @@ class ResourceBuilding : private king::Object
2829
SDL_Renderer* renderer,
2930
SDL_FPoint const& pos,
3031
king::Grid const& grid,
31-
float _scale
32+
float _scale,
33+
FC_Font* font
3234
);
3335

3436
void init_resource_timer();
@@ -37,17 +39,23 @@ class ResourceBuilding : private king::Object
3739
void pan(float dx, float dy);
3840

3941
/*
40-
* @returns True if mouse is pressed over the object
42+
* If mouse is pressed over object, returns True. Otherwise, handles mouse
43+
* not pressed over object and returns False.
44+
*/
45+
bool mouse_press(float mx, float my);
46+
47+
/*
48+
* Handles updates for when mouse is pressed over object and returns
49+
* the amount of resources collected from the mouse press.
4150
*/
42-
bool mouse_press(float mx, float my) const;
4351
int mouse_press_update();
4452

4553
/*
4654
* @param farmhouses For collision detection
4755
*/
4856
void mouse_drag(float mx, float my, std::forward_list<ResourceBuilding> const& farmhouses, float scale);
4957

50-
void mouse_release();
58+
bool mouse_release();
5159

5260
/*
5361
* Zoom based on mouse position and scale
@@ -56,6 +64,8 @@ class ResourceBuilding : private king::Object
5664

5765
void render(SDL_Renderer* renderer, float scale);
5866

67+
void render_information(SDL_Renderer* renderer, float scale);
68+
5969
void update();
6070

6171
static Uint32 resource_callback(Uint32 interval, void* obj);
@@ -92,4 +102,19 @@ class ResourceBuilding : private king::Object
92102
bool display_resource;
93103
float resource_amount;
94104
float resource_per_sec;
105+
float resource_capacity;
106+
107+
bool show_information;
108+
SDL_FRect info_rect;
109+
110+
private:
111+
float information_width;
112+
FC_Font* font;
113+
114+
enum {
115+
ANIMATE_Closed,
116+
ANIMATE_Opening,
117+
ANIMATE_Opened,
118+
ANIMATE_Closing
119+
} animate;
95120
};

src/main.cpp

+19-32
Original file line numberDiff line numberDiff line change
@@ -43,19 +43,6 @@ int get_screen_width()
4343
#endif
4444
}
4545

46-
#define TICK_INTERVAL 30
47-
48-
Uint32 next_time;
49-
50-
Uint32 time_left(void)
51-
{
52-
Uint32 now = SDL_GetTicks();
53-
if (next_time <= now)
54-
return 0;
55-
else
56-
return next_time - now;
57-
}
58-
5946
king::Grid grid(40, 60);
6047

6148
/* Scroll */
@@ -118,9 +105,9 @@ int main(int argc, char* argv[])
118105
float scale = 1;
119106

120107
std::forward_list<ResourceBuilding> resource_buildings{
121-
ResourceBuilding(ResourceBuildingType::FARMHOUSE, renderer, { 300, 200 }, grid, scale),
122-
ResourceBuilding(ResourceBuildingType::FARMHOUSE, renderer, { 600, 300 }, grid, scale),
123-
ResourceBuilding(ResourceBuildingType::LUMBERMILL, renderer, { 900, 300 }, grid, scale)
108+
ResourceBuilding(ResourceBuildingType::FARMHOUSE, renderer, { 300, 200 }, grid, scale, font),
109+
ResourceBuilding(ResourceBuildingType::FARMHOUSE, renderer, { 600, 300 }, grid, scale, font),
110+
ResourceBuilding(ResourceBuildingType::LUMBERMILL, renderer, { 900, 300 }, grid, scale, font)
124111
};
125112

126113
for (auto& resource_building : resource_buildings)
@@ -135,8 +122,6 @@ int main(int argc, char* argv[])
135122
int wheat = 0;
136123
int wood = 0;
137124

138-
next_time = SDL_GetTicks() + TICK_INTERVAL;
139-
140125
Uint32 mouse_press_time = 0;
141126

142127
int stop_drag = 0;
@@ -150,11 +135,11 @@ int main(int argc, char* argv[])
150135
bool display_shop = false;
151136

152137
std::forward_list<ResourceBuilding> shop_resource_buildings{
153-
ResourceBuilding(ResourceBuildingType::FARMHOUSE, renderer, SDL_FPoint{ 120, (float)shop_bar.y + 100 }, grid, scale),
154-
ResourceBuilding(ResourceBuildingType::LUMBERMILL, renderer, SDL_FPoint{ 400, (float)shop_bar.y + 100 }, grid, scale)
138+
ResourceBuilding(ResourceBuildingType::FARMHOUSE, renderer, SDL_FPoint{ 120, (float)shop_bar.y + 100 }, grid, scale, font),
139+
ResourceBuilding(ResourceBuildingType::LUMBERMILL, renderer, SDL_FPoint{ 400, (float)shop_bar.y + 100 }, grid, scale, font)
155140
};
156141

157-
bool shop_new_farmhouse = false;
142+
bool new_building = false;
158143

159144
bool game_loop = true;
160145
SDL_Event event;
@@ -267,6 +252,7 @@ int main(int argc, char* argv[])
267252
}
268253

269254
// Resource buildings cannot overlap
255+
break;
270256
}
271257
}
272258

@@ -283,14 +269,15 @@ int main(int argc, char* argv[])
283269
{
284270
if (display_shop)
285271
{
286-
for (auto const& shop_resource_building : shop_resource_buildings)
272+
for (auto& shop_resource_building : shop_resource_buildings)
287273
{
288274
if (shop_resource_building.mouse_press(mouse_x, mouse_y))
289275
{
290276
// Create new resource building
291-
ResourceBuilding new_resource_building(shop_resource_building.type,
292-
renderer, SDL_FPoint{ (float)mouse_x, (float)mouse_y }, grid, scale);
293-
new_resource_building.init_resource_timer();
277+
ResourceBuilding new_resource_building(
278+
shop_resource_building.type,
279+
renderer, SDL_FPoint{ (float)mouse_x, (float)mouse_y }, grid, scale,
280+
font);
294281

295282
// Add it to resource buildings
296283
resource_buildings.push_front(new_resource_building);
@@ -301,7 +288,7 @@ int main(int argc, char* argv[])
301288
display_shop = false;
302289
mouse_state &= ~MouseState::DRAG_GRID;
303290
mouse_state |= MouseState::DRAG_BUILDING;
304-
shop_new_farmhouse = true;
291+
new_building = true;
305292

306293
break;
307294
}
@@ -348,8 +335,12 @@ int main(int argc, char* argv[])
348335
{
349336
if (ResourceBuilding::drag_ptr)
350337
{
351-
ResourceBuilding::drag_ptr->mouse_release();
338+
bool is_blocked = ResourceBuilding::drag_ptr->mouse_release();
339+
if (is_blocked && new_building)
340+
resource_buildings.pop_front();
341+
352342
ResourceBuilding::drag_ptr = nullptr;
343+
new_building = false;
353344
}
354345

355346
mouse_state &= ~MouseState::RELEASE;
@@ -422,7 +413,7 @@ int main(int argc, char* argv[])
422413

423414
// Render frame
424415

425-
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
416+
SDL_SetRenderDrawColor(renderer, 82, 166, 84, 255);
426417
SDL_RenderClear(renderer);
427418

428419
// Draw grid
@@ -456,10 +447,6 @@ int main(int argc, char* argv[])
456447
}
457448

458449
SDL_RenderPresent(renderer);
459-
460-
// Delay to limit frame rate
461-
SDL_Delay(time_left());
462-
next_time += TICK_INTERVAL;
463450
}
464451

465452
for (auto& resource_building : resource_buildings)

0 commit comments

Comments
 (0)