@@ -43,19 +43,6 @@ int get_screen_width()
43
43
#endif
44
44
}
45
45
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
-
59
46
king::Grid grid (40 , 60 );
60
47
61
48
/* Scroll */
@@ -118,9 +105,9 @@ int main(int argc, char* argv[])
118
105
float scale = 1 ;
119
106
120
107
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 )
124
111
};
125
112
126
113
for (auto & resource_building : resource_buildings)
@@ -135,8 +122,6 @@ int main(int argc, char* argv[])
135
122
int wheat = 0 ;
136
123
int wood = 0 ;
137
124
138
- next_time = SDL_GetTicks () + TICK_INTERVAL;
139
-
140
125
Uint32 mouse_press_time = 0 ;
141
126
142
127
int stop_drag = 0 ;
@@ -150,11 +135,11 @@ int main(int argc, char* argv[])
150
135
bool display_shop = false ;
151
136
152
137
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 )
155
140
};
156
141
157
- bool shop_new_farmhouse = false ;
142
+ bool new_building = false ;
158
143
159
144
bool game_loop = true ;
160
145
SDL_Event event;
@@ -267,6 +252,7 @@ int main(int argc, char* argv[])
267
252
}
268
253
269
254
// Resource buildings cannot overlap
255
+ break ;
270
256
}
271
257
}
272
258
@@ -283,14 +269,15 @@ int main(int argc, char* argv[])
283
269
{
284
270
if (display_shop)
285
271
{
286
- for (auto const & shop_resource_building : shop_resource_buildings)
272
+ for (auto & shop_resource_building : shop_resource_buildings)
287
273
{
288
274
if (shop_resource_building.mouse_press (mouse_x, mouse_y))
289
275
{
290
276
// 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);
294
281
295
282
// Add it to resource buildings
296
283
resource_buildings.push_front (new_resource_building);
@@ -301,7 +288,7 @@ int main(int argc, char* argv[])
301
288
display_shop = false ;
302
289
mouse_state &= ~MouseState::DRAG_GRID;
303
290
mouse_state |= MouseState::DRAG_BUILDING;
304
- shop_new_farmhouse = true ;
291
+ new_building = true ;
305
292
306
293
break ;
307
294
}
@@ -348,8 +335,12 @@ int main(int argc, char* argv[])
348
335
{
349
336
if (ResourceBuilding::drag_ptr)
350
337
{
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
+
352
342
ResourceBuilding::drag_ptr = nullptr ;
343
+ new_building = false ;
353
344
}
354
345
355
346
mouse_state &= ~MouseState::RELEASE;
@@ -422,7 +413,7 @@ int main(int argc, char* argv[])
422
413
423
414
// Render frame
424
415
425
- SDL_SetRenderDrawColor (renderer, 255 , 255 , 255 , 255 );
416
+ SDL_SetRenderDrawColor (renderer, 82 , 166 , 84 , 255 );
426
417
SDL_RenderClear (renderer);
427
418
428
419
// Draw grid
@@ -456,10 +447,6 @@ int main(int argc, char* argv[])
456
447
}
457
448
458
449
SDL_RenderPresent (renderer);
459
-
460
- // Delay to limit frame rate
461
- SDL_Delay (time_left ());
462
- next_time += TICK_INTERVAL;
463
450
}
464
451
465
452
for (auto & resource_building : resource_buildings)
0 commit comments