|
|
@@ -175,16 +175,17 @@ UnitCompiler::UnitCompiler(CompileOptions& opts)
|
|
|
: _opts(opts)
|
|
|
, _num_units(0)
|
|
|
, _component_data(default_allocator())
|
|
|
+ , _component_info(default_allocator())
|
|
|
{
|
|
|
- register_component_compiler("transform", &compile_transform, 0.0f);
|
|
|
- register_component_compiler("camera", &compile_camera, 1.0f);
|
|
|
- register_component_compiler("mesh_renderer", &compile_mesh_renderer, 1.0f);
|
|
|
- register_component_compiler("sprite_renderer", &compile_sprite_renderer, 1.0f);
|
|
|
- register_component_compiler("light", &compile_light, 1.0f);
|
|
|
+ register_component_compiler("transform", &compile_transform, 0.0f);
|
|
|
+ register_component_compiler("camera", &compile_camera, 1.0f);
|
|
|
+ register_component_compiler("mesh_renderer", &compile_mesh_renderer, 1.0f);
|
|
|
+ register_component_compiler("sprite_renderer", &compile_sprite_renderer, 1.0f);
|
|
|
+ register_component_compiler("light", &compile_light, 1.0f);
|
|
|
register_component_compiler("controller", &physics_resource::compile_controller, 1.0f);
|
|
|
- register_component_compiler("collider", &physics_resource::compile_collider, 1.0f);
|
|
|
- register_component_compiler("actor", &physics_resource::compile_actor, 1.0f);
|
|
|
- register_component_compiler("joint", &physics_resource::compile_joint, 1.0f);
|
|
|
+ register_component_compiler("collider", &physics_resource::compile_collider, 1.0f);
|
|
|
+ register_component_compiler("actor", &physics_resource::compile_actor, 2.0f);
|
|
|
+ register_component_compiler("joint", &physics_resource::compile_joint, 3.0f);
|
|
|
}
|
|
|
|
|
|
Buffer UnitCompiler::read_unit(const char* path)
|
|
|
@@ -318,15 +319,14 @@ Buffer UnitCompiler::blob()
|
|
|
Buffer buf(default_allocator());
|
|
|
array::push(buf, (char*)&ur, sizeof(ur));
|
|
|
|
|
|
- begin = sort_map::begin(_component_data);
|
|
|
- end = sort_map::end(_component_data);
|
|
|
-
|
|
|
- for (; begin != end; --end)
|
|
|
+ for (u32 i = 0; i < array::size(_component_info); ++i)
|
|
|
{
|
|
|
- const StringId32 type = (end-1)->pair.first;
|
|
|
- const Buffer& data = (end-1)->pair.second._data;
|
|
|
- const Array<u32>& unit_index = (end-1)->pair.second._unit_index;
|
|
|
- const u32 num = (end-1)->pair.second._num;
|
|
|
+ const StringId32 type = _component_info[i]._type;
|
|
|
+ const ComponentTypeData& ctd = sort_map::get(_component_data, type, ComponentTypeData(default_allocator()));
|
|
|
+
|
|
|
+ const Buffer& data = ctd._data;
|
|
|
+ const Array<u32>& unit_index = ctd._unit_index;
|
|
|
+ const u32 num = ctd._num;
|
|
|
|
|
|
if (num > 0)
|
|
|
{
|
|
|
@@ -354,12 +354,24 @@ void UnitCompiler::add_component_data(StringId32 type, const Buffer& data, u32 u
|
|
|
}
|
|
|
|
|
|
void UnitCompiler::register_component_compiler(const char* type, CompileFunction fn, f32 spawn_order)
|
|
|
+{
|
|
|
+ register_component_compiler(StringId32(type), fn, spawn_order);
|
|
|
+}
|
|
|
+
|
|
|
+void UnitCompiler::register_component_compiler(StringId32 type, CompileFunction fn, f32 spawn_order)
|
|
|
{
|
|
|
ComponentTypeData ctd(default_allocator());
|
|
|
ctd._compiler = fn;
|
|
|
|
|
|
- sort_map::set(_component_data, StringId32(type), ctd);
|
|
|
+ ComponentTypeInfo cti;
|
|
|
+ cti._type = type;
|
|
|
+ cti._spawn_order = spawn_order;
|
|
|
+
|
|
|
+ sort_map::set(_component_data, type, ctd);
|
|
|
sort_map::sort(_component_data);
|
|
|
+
|
|
|
+ array::push_back(_component_info, cti);
|
|
|
+ std::sort(array::begin(_component_info), array::end(_component_info));
|
|
|
}
|
|
|
|
|
|
Buffer UnitCompiler::compile_component(StringId32 type, const char* json)
|