Skip to content

Commit c516847

Browse files
committed
building: moved create_figure_generic/create_figure_with_destination to building.cpp
1 parent b02e99d commit c516847

File tree

2 files changed

+68
-5
lines changed

2 files changed

+68
-5
lines changed

src/building/building.cpp

+60
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@
3232
#include "overlays/city_overlay.h"
3333
#include "sound/sound_building.h"
3434
#include "city/city.h"
35+
#include "figure/figure.h"
36+
#include "figuretype/figure_cartpusher.h"
37+
#include "config/config.h"
3538

3639
#include <string.h>
3740
#include <map>
@@ -523,6 +526,63 @@ bool building::is_military() {
523526
return building_is_military(type);
524527
}
525528

529+
figure *building::create_figure_generic(e_figure_type _type, e_figure_action created_action, e_building_slot slot, int created_dir) {
530+
figure *f = figure_create(_type, road_access, created_dir);
531+
f->action_state = created_action;
532+
f->set_home(id);
533+
set_figure(slot, f);
534+
535+
return f;
536+
}
537+
538+
figure *building::create_cartpusher(e_resource resource_id, int quantity, e_figure_action created_action, e_building_slot slot) {
539+
figure *f = create_figure_generic(FIGURE_CART_PUSHER, created_action, slot, DIR_4_BOTTOM_LEFT);
540+
auto cart = f->dcast_cartpusher();
541+
if (!cart) {
542+
return f;
543+
}
544+
545+
cart->load_resource(resource_id, quantity);
546+
cart->set_destination(0);
547+
cart->base.immigrant_home_building_id = 0;
548+
549+
set_figure(slot, cart->id()); // warning: this overwrites any existing figure!
550+
if (config_get(CONFIG_GP_CH_CART_SPEED_QUANTITY)) {
551+
f->progress_inside_speed = std::clamp(quantity / 400, 0, 2);
552+
}
553+
cart->wait_ticks = 30;
554+
555+
return f;
556+
}
557+
558+
figure *building::create_figure_with_destination(e_figure_type _type, building *destination, e_figure_action created_action, e_building_slot slot) {
559+
figure *f = create_figure_generic(_type, created_action, slot, DIR_4_BOTTOM_LEFT);
560+
f->set_destination(destination->id);
561+
f->immigrant_home_building_id = 0;
562+
563+
set_figure(slot, f->id); // warning: this overwrites any existing figure!
564+
return f;
565+
}
566+
567+
figure *building::create_roaming_figure(e_figure_type _type, e_figure_action created_action, e_building_slot slot) {
568+
figure *f = create_figure_generic(_type, created_action, slot, figure_roam_direction);
569+
570+
f->set_destination(0);
571+
f->immigrant_home_building_id = 0;
572+
573+
set_figure(slot, f->id); // warning: this overwrites any existing figure!
574+
f->init_roaming_from_building(figure_roam_direction);
575+
f->set_home(id);
576+
577+
// update building to have a different roamer direction for next time
578+
figure_roam_direction += 2;
579+
if (figure_roam_direction > 6) {
580+
figure_roam_direction = 0;
581+
}
582+
583+
return f;
584+
}
585+
526586
///////////////
527587

528588
bool building_is_fort(int type) {

src/building/building.h

+8-5
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
#include <stdint.h>
2424
#include <algorithm>
2525

26-
class figure;
26+
struct figure;
2727
class io_buffer;
2828
class building;
2929
class building_juggler_school;
@@ -127,7 +127,7 @@ class building {
127127
enum { max_figures = 4 };
128128
class building_impl *_ptr = nullptr; // dcast
129129

130-
std::array<uint16_t, max_figures> figure_ids;
130+
std::array<figure_id, max_figures> figure_ids;
131131

132132
public:
133133
struct metainfo {
@@ -247,12 +247,15 @@ class building {
247247
e_labor_state labor_state;
248248
uint8_t labor_days_left;
249249
int unk_12[10];
250-
unsigned short work_camp_id;
251-
unsigned char worker_id;
250+
building_id work_camp_id;
251+
figure_id worker_id;
252+
e_figure_type processed_figure;
252253
} industry;
253254

254-
struct {
255+
struct {
255256
uint8_t orientation;
257+
e_figure_type process_type;
258+
bool reparing;
256259
} wharf;
257260

258261
struct entertainment_t {

0 commit comments

Comments
 (0)