summaryrefslogtreecommitdiff
path: root/src/scenes
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrikboy@gmail.com>2024-12-01 19:31:10 +0100
committerAldrik Ramaekers <aldrikboy@gmail.com>2024-12-01 19:31:10 +0100
commit496fb467ef596b73fc3eab4593881567aad832da (patch)
tree8504226cd16f123735cf4cce09a67a71ed9091d9 /src/scenes
parent0d9dbbfcef52bd821e84055b4d6a9f875d4edd3d (diff)
working on save file
Diffstat (limited to 'src/scenes')
-rw-r--r--src/scenes/save_state_select.c179
1 files changed, 171 insertions, 8 deletions
diff --git a/src/scenes/save_state_select.c b/src/scenes/save_state_select.c
index 1bd7bc1..9972b7f 100644
--- a/src/scenes/save_state_select.c
+++ b/src/scenes/save_state_select.c
@@ -7,14 +7,15 @@ void save_state_select_scene_init()
static bool push_save_state_button(float scale, bool enabled, s32 x, s32 y, s32 size)
{
if (enabled) {
- button_render(scale, true, 0, x, y, size, size);
+ return button_render(scale, true, 0, x, y, size, size);
}
else {
- button_render(scale, true, 0, x, y, size, size);
+ bool success = button_render(scale, true, 0, x, y, size, size);
float close_size = size/3;
float close_x = x + (size/2)-(close_size/2);
float close_y = y + (size/2)-(close_size/2);
renderer->render_image(img_close, close_x, close_y, close_size, close_size);
+ return success;
}
return false;
@@ -46,6 +47,160 @@ static bool push_back_button(float scale, s32 back_x, s32 back_y, s32 back_w, s3
return result;
}
+extern world* _active_world;
+
+static void load_save_file(s32 index)
+{
+ log_info("Loading save file.");
+}
+
+static void write_save_file(s32 index)
+{
+ log_info("Writing save file.");
+
+ cJSON *world = cJSON_CreateObject();
+ cJSON_AddItemToObject(world, "simulation_time", cJSON_CreateNumber(_active_world->simulation_time));
+ cJSON_AddItemToObject(world, "start_year", cJSON_CreateNumber(_active_world->start_year));
+ cJSON_AddItemToObject(world, "money", cJSON_CreateNumber(_active_world->money));
+ cJSON_AddItemToObject(world, "next_id", cJSON_CreateNumber(_active_world->next_id));
+ cJSON_AddItemToObject(world, "simulation_speed", cJSON_CreateNumber(_active_world->simulation_speed));
+ cJSON_AddItemToObject(world, "days_since_last_random_event", cJSON_CreateNumber(_active_world->days_since_last_random_event));
+
+ cJSON *bank = cJSON_CreateObject();
+ {
+ cJSON *loan1 = cJSON_CreateObject();
+ cJSON_AddItemToObject(loan1, "amount", cJSON_CreateNumber(_active_world->bank_info.loan1.amount));
+ cJSON_AddItemToObject(loan1, "interest", cJSON_CreateNumber(_active_world->bank_info.loan1.interest));
+ cJSON_AddItemToObject(loan1, "days_left", cJSON_CreateNumber(_active_world->bank_info.loan1.days_left));
+ cJSON_AddItemToObject(loan1, "monthly_payment", cJSON_CreateNumber(_active_world->bank_info.loan1.monthly_payment));
+ cJSON_AddItemToObject(loan1, "is_active", cJSON_CreateNumber(_active_world->bank_info.loan1.is_active));
+ cJSON_AddItemToObject(bank, "loan1", loan1);
+
+ cJSON *loan2 = cJSON_CreateObject();
+ cJSON_AddItemToObject(loan2, "amount", cJSON_CreateNumber(_active_world->bank_info.loan2.amount));
+ cJSON_AddItemToObject(loan2, "interest", cJSON_CreateNumber(_active_world->bank_info.loan2.interest));
+ cJSON_AddItemToObject(loan2, "days_left", cJSON_CreateNumber(_active_world->bank_info.loan2.days_left));
+ cJSON_AddItemToObject(loan2, "monthly_payment", cJSON_CreateNumber(_active_world->bank_info.loan2.monthly_payment));
+ cJSON_AddItemToObject(loan2, "is_active", cJSON_CreateNumber(_active_world->bank_info.loan2.is_active));
+ cJSON_AddItemToObject(bank, "loan2", loan2);
+
+ cJSON *loan3 = cJSON_CreateObject();
+ cJSON_AddItemToObject(loan3, "amount", cJSON_CreateNumber(_active_world->bank_info.loan3.amount));
+ cJSON_AddItemToObject(loan3, "interest", cJSON_CreateNumber(_active_world->bank_info.loan3.interest));
+ cJSON_AddItemToObject(loan3, "days_left", cJSON_CreateNumber(_active_world->bank_info.loan3.days_left));
+ cJSON_AddItemToObject(loan3, "monthly_payment", cJSON_CreateNumber(_active_world->bank_info.loan3.monthly_payment));
+ cJSON_AddItemToObject(loan3, "is_active", cJSON_CreateNumber(_active_world->bank_info.loan3.is_active));
+ cJSON_AddItemToObject(bank, "loan3", loan3);
+
+ cJSON_AddItemToObject(world, "bank_info", bank);
+ }
+
+ cJSON *investments = cJSON_CreateObject();
+ {
+ cJSON_AddItemToObject(investments, "marketing", cJSON_CreateNumber(_active_world->investments.marketing));
+ cJSON_AddItemToObject(investments, "human_resources", cJSON_CreateNumber(_active_world->investments.human_resources));
+ cJSON_AddItemToObject(investments, "training", cJSON_CreateNumber(_active_world->investments.training));
+ cJSON_AddItemToObject(investments, "legal", cJSON_CreateNumber(_active_world->investments.legal));
+
+ cJSON_AddItemToObject(world, "investments", investments);
+ }
+
+ cJSON *log = cJSON_CreateObject();
+ {
+ cJSON_AddItemToObject(log, "write_cursor", cJSON_CreateNumber(_active_world->log.write_cursor));
+ cJSON_AddItemToObject(log, "has_unread_messages", cJSON_CreateNumber(_active_world->log.has_unread_messages));
+
+ cJSON* entries = cJSON_CreateArray();
+ for (int i = 0; i < _active_world->log.events.length; i++)
+ {
+ event* e = array_at(&_active_world->log.events, i);
+ cJSON *event = cJSON_CreateObject();
+ cJSON_AddItemToObject(event, "type", cJSON_CreateNumber(e->type));
+ cJSON_AddItemToObject(event, "message", cJSON_CreateString (e->message));
+
+ cJSON_AddItemToArray(entries, event);
+ }
+
+ cJSON_AddItemToObject(log, "events", entries);
+ cJSON_AddItemToObject(world, "log", log);
+ }
+
+ cJSON *locations = cJSON_CreateArray();
+ {
+ for (s32 i = 0; i < _active_world->locations.length; i++)
+ {
+ world_location* location = array_at(&_active_world->locations, i);
+ if (!location->is_owned) continue;
+
+ cJSON *loc = cJSON_CreateObject();
+ cJSON_AddItemToObject(loc, "is_owned", cJSON_CreateNumber(location->is_owned));
+ cJSON_AddItemToObject(loc, "purchase_year", cJSON_CreateNumber(location->purchase_year));
+ cJSON_AddItemToObject(loc, "score", cJSON_CreateNumber(location->score));
+
+ cJSON *employees = cJSON_CreateArray();
+ {
+ for (s32 r = 0; r < location->employees.length; r++)
+ {
+ employee* emp = *(employee**)array_at(&location->employees, r);
+
+ cJSON *employee = cJSON_CreateObject();
+ cJSON_AddItemToObject(employee, "id", cJSON_CreateNumber(emp->id));
+ cJSON_AddItemToObject(employee, "name", cJSON_CreateString(emp->name));
+ cJSON_AddItemToObject(employee, "age", cJSON_CreateNumber(emp->age));
+ cJSON_AddItemToObject(employee, "experience", cJSON_CreateNumber(emp->experience));
+ cJSON_AddItemToObject(employee, "salary", cJSON_CreateNumber(emp->salary));
+ cJSON_AddItemToObject(employee, "happiness", cJSON_CreateNumber(emp->happiness));
+ cJSON_AddItemToObject(employee, "days_below_happiness_treshold", cJSON_CreateNumber(emp->days_below_happiness_treshold));
+ cJSON_AddItemToObject(employee, "current_location_id", cJSON_CreateNumber(emp->current_location_id));
+ cJSON_AddItemToObject(employee, "original_location_id", cJSON_CreateNumber(emp->original_location_id));
+ cJSON_AddItemToObject(employee, "active_job_id", cJSON_CreateNumber(emp->active_job_id));
+ cJSON_AddItemToObject(employee, "truck_id", cJSON_CreateNumber(emp->assigned_truck ? emp->assigned_truck->id :-1));
+ cJSON_AddItemToObject(employee, "portrait_hair_type", cJSON_CreateNumber(emp->portrait_hair_type));
+
+ cJSON *c1 = cJSON_CreateObject();
+ cJSON_AddItemToObject(c1, "r", cJSON_CreateNumber(emp->hair_color.r));
+ cJSON_AddItemToObject(c1, "g", cJSON_CreateNumber(emp->hair_color.g));
+ cJSON_AddItemToObject(c1, "b", cJSON_CreateNumber(emp->hair_color.b));
+ cJSON_AddItemToObject(c1, "a", cJSON_CreateNumber(emp->hair_color.a));
+ cJSON_AddItemToObject(employee, "hair_color", c1);
+
+ cJSON *c2 = cJSON_CreateObject();
+ cJSON_AddItemToObject(c2, "r", cJSON_CreateNumber(emp->face_color.r));
+ cJSON_AddItemToObject(c2, "g", cJSON_CreateNumber(emp->face_color.g));
+ cJSON_AddItemToObject(c2, "b", cJSON_CreateNumber(emp->face_color.b));
+ cJSON_AddItemToObject(c2, "a", cJSON_CreateNumber(emp->face_color.a));
+ cJSON_AddItemToObject(employee, "face_color", c2);
+
+ cJSON *c3 = cJSON_CreateObject();
+ cJSON_AddItemToObject(c3, "r", cJSON_CreateNumber(emp->body_color.r));
+ cJSON_AddItemToObject(c3, "g", cJSON_CreateNumber(emp->body_color.g));
+ cJSON_AddItemToObject(c3, "b", cJSON_CreateNumber(emp->body_color.b));
+ cJSON_AddItemToObject(c3, "a", cJSON_CreateNumber(emp->body_color.a));
+ cJSON_AddItemToObject(employee, "body_color", c3);
+
+ cJSON_AddItemToArray(employees, employee);
+ }
+
+ cJSON_AddItemToObject(loc, "employees", employees);
+ }
+
+ // TODO: job_offers
+ // TODO: resumes
+ // TODO: trucks
+ // TODO: insights
+ // TODO: schedule
+
+ cJSON_AddItemToArray(locations, loc);
+ }
+
+ cJSON_AddItemToObject(world, "locations", locations);
+ }
+
+ char* str = cJSON_Print(world);
+ printf(str);
+ cJSON_Delete(world);
+}
+
static void save_state_draw_options(platform_window* window)
{
s32 screen_center_x = area.x + (area.w/2);
@@ -64,14 +219,22 @@ static void save_state_draw_options(platform_window* window)
panel_render(scale, panel_x, panel_y, panel_w, panel_h);
// top row
- for (s32 i = 0; i < 3; i++)
- push_save_state_button(scale, 0, panel_x + horizontal_pad + (panel_item_size*i) +
- (spacing*i), panel_y + horizontal_pad, panel_item_size);
+ for (s32 i = 0; i < 3; i++) {
+ if (push_save_state_button(scale, 0, panel_x + horizontal_pad + (panel_item_size*i) +
+ (spacing*i), panel_y + horizontal_pad, panel_item_size)) {
+ if (is_selecting_save_location) write_save_file(i);
+ else load_save_file(i);
+ }
+ }
// bottom row
- for (s32 i = 0; i < 3; i++)
- push_save_state_button(scale, 0, panel_x + horizontal_pad + (panel_item_size*i) + (spacing*i),
- panel_y + horizontal_pad + panel_item_size+spacing, panel_item_size);
+ for (s32 i = 0; i < 3; i++) {
+ if (push_save_state_button(scale, 0, panel_x + horizontal_pad + (panel_item_size*i) + (spacing*i),
+ panel_y + horizontal_pad + panel_item_size+spacing, panel_item_size)) {
+ if (is_selecting_save_location) write_save_file(3 + i);
+ else load_save_file(3 + i);
+ }
+ }
// back button
{