--- /dev/null
+:Player
+entity.id = 1
+entity.flags = 2
+entity.pos.x = 891.5230
+entity.pos.y = 279.3731
+entity.size.x = 32.0000
+entity.size.y = 32.0000
+holding = 4
+controls.up = 87
+controls.down = 83
+controls.left = 65
+controls.right = 68
+controls.interact = 70
+controls.pick_up = 71
+color.r = 0.0000
+color.g = 0.0000
+color.b = 1.0000
+color.a = 1.0000
+facing = 3
+
+:Player
+entity.id = 2
+entity.flags = 2
+entity.pos.x = 328.9612
+entity.pos.y = 309.7936
+entity.size.x = 32.0000
+entity.size.y = 32.0000
+holding = 0
+controls.up = 265
+controls.down = 264
+controls.left = 263
+controls.right = 262
+controls.interact = 44
+controls.pick_up = 46
+color.r = 1.0000
+color.g = 0.0000
+color.b = 0.0000
+color.a = 1.0000
+facing = 4
+
+:Door
+entity.id = 3
+entity.flags = 7
+entity.pos.x = 290.0374
+entity.pos.y = 211.0090
+entity.size.x = 370.0000
+entity.size.y = 24.0000
+target_openness = 0.8000
+
+:Item
+entity.id = 4
+entity.flags = 0
+entity.pos.x = 891.5230
+entity.pos.y = 259.3731
+entity.size.x = 10.0000
+entity.size.y = 8.0000
+color.r = 1.0000
+color.g = 0.0000
+color.b = 1.0000
+color.a = 1.0000
+
+:Item
+entity.id = 5
+entity.flags = 4
+entity.pos.x = 167.6909
+entity.pos.y = 283.5205
+entity.size.x = 13.0000
+entity.size.y = 10.0000
+color.r = 1.0000
+color.g = 0.0000
+color.b = 1.0000
+color.a = 1.0000
+
+:Wall
+entity.id = 6
+entity.flags = 2
+entity.pos.x = 501.0000
+entity.pos.y = 291.0000
+entity.size.x = 62.0000
+entity.size.y = 180.0000
+
+:Wall
+entity.id = 7
+entity.flags = 2
+entity.pos.x = 275.0000
+entity.pos.y = 391.0000
+entity.size.x = 461.0000
+entity.size.y = 34.0000
+
+:Wall
+entity.id = 8
+entity.flags = 2
+entity.pos.x = 74.0000
+entity.pos.y = 313.0000
+entity.size.x = 65.0000
+entity.size.y = 222.0000
+
+:Wall
+entity.id = 9
+entity.flags = 2
+entity.pos.x = 686.0000
+entity.pos.y = 302.0000
+entity.size.x = 50.0000
+entity.size.y = 363.0000
+
query :: entity_manager_query;
query_by_type :: entity_manager_query_by_type;
query_by_flags :: entity_manager_query_by_flags;
+
+ load_from_file :: entity_manager_load_from_file;
+ save_to_file :: entity_manager_save_to_file;
}
entity_manager_create :: () -> Entity_Manager {
entity_manager_load_from_file :: (use this: ^Entity_Manager, filename: str) {
err, input_file := os.open(filename, .Read);
+ if err != .None {
+ printf("Failed to open file: {}\n", filename);
+ return;
+ }
defer os.close(^input_file);
reader := io.reader_make(^input_file);
+ for entities do raw_free(entity_allocator, it);
+ map.clear(^entity_map);
+ array.clear(^entities);
+ next_entity_id = 0;
+
use type_info;
current_entity: ^Entity;
}
}
+ if entity_info == null {
+ printf("Unknown entity kind '{}' on line {}.\n", entity_kind, line_number);
+ current_entity = null;
+ continue;
+ }
+
current_entity = entity_info.create_default(this);
continue;
}
+ if current_entity == null do continue;
+
var_name := string.read_until(^line, #char "=")
|> string.strip_whitespace();
string.advance(^line, 1);
string.strip_whitespace(^line);
member := get_any_for_member(any.{current_entity, current_entity.type}, var_name);
+ if member.data == null {
+ entity_info := cast(^Type_Info_Struct) get_type_info(current_entity.type);
+ printf("'{}' is not a valid member of '{}' on line {}.\n", var_name, entity_info.name, line_number);
+ continue;
+ }
+
if !conv.parse_any(member.data, member.type, line) {
printf("Unable to parse '{}' for type '{}' on line {}.\n", line, member.type, line_number);
+ continue;
}
}
}
}
}
+
+ return .{null, void};
}
}
scene->register(Wall);
scene->register(Door);
scene->register(Item);
- entity_manager_load_from_file(^scene, "./Asdf");
+ scene->load_from_file("scenes/quick_save.scene");
- // scene->make(Player, .{ pos = .{300, 300}, controls=player_1_controls });
- // scene->make(Player, .{ pos = .{400, 300}, controls=player_2_controls, color=.{1,0,0} });
-
#if DEBUG {
println("Registered Entity types:");
for scene.entity_types.entries {
}
if is_key_just_up(GLFW_KEY_F8) {
- entity_manager_save_to_file(^scene, "Asdf");
+ scene->save_to_file("scenes/quick_save.scene");
+ }
+
+ if is_key_just_up(GLFW_KEY_F9) {
+ scene->load_from_file("scenes/quick_save.scene");
}
if editor_shown() {