#pragma once #include #include #include #include #include #include #include struct PSOGCObjectGraph { PSOGCObjectGraph(const std::string& memory_data, uint32_t root_address); void print(FILE* stream) const; struct VTable { uint32_t address; uint32_t destroy_addr; uint32_t update_addr; uint32_t render_addr; uint32_t render_shadow_addr; }; struct Object { uint32_t address; uint16_t flags; std::string type_name; std::shared_ptr vtable; std::shared_ptr parent; std::vector> children; void print(FILE* stream, size_t indent_level = 0) const; }; std::shared_ptr root; std::unordered_map> all_objects; std::unordered_map> all_vtables; std::shared_ptr parse_object_memo(StringReader& r, uint32_t addr); std::shared_ptr parse_vtable_memo(StringReader& r, uint32_t addr); };