13 entt::meta_factory<character_controller_component>{}
14 .type(
"character_controller_component"_hs)
33 .data<&character_controller_component::set_height, &character_controller_component::get_height>(
"height"_hs)
37 entt::attribute{
"tooltip",
"The total height of the character capsule."},
41 .data<&character_controller_component::set_center, &character_controller_component::get_center>(
"center"_hs)
45 entt::attribute{
"tooltip",
"The center offset of the capsule relative to the entity transform."},
47 .data<&character_controller_component::set_step_height, &character_controller_component::get_step_height>(
"step_height"_hs)
51 entt::attribute{
"tooltip",
"Maximum height of obstacles the character can step over."},
55 .data<&character_controller_component::set_slope_limit, &character_controller_component::get_slope_limit>(
"slope_limit"_hs)
59 entt::attribute{
"tooltip",
"Maximum slope angle in degrees the character can walk up."},
64 .data<&character_controller_component::set_skin_width, &character_controller_component::get_skin_width>(
"skin_width"_hs)
68 entt::attribute{
"tooltip",
"Collision skin width around the character capsule."},
72 .data<&character_controller_component::set_gravity_scale, &character_controller_component::get_gravity_scale>(
"gravity_scale"_hs)
76 entt::attribute{
"tooltip",
"Multiplier for world gravity applied to this controller."},
79 .data<&character_controller_component::set_collision_include_mask, &character_controller_component::get_collision_include_mask>(
"include_layers"_hs)
83 entt::attribute{
"tooltip",
"Layers to include when producing collisions."},
85 .data<&character_controller_component::set_collision_exclude_mask, &character_controller_component::get_collision_exclude_mask>(
"exclude_layers"_hs)
89 entt::attribute{
"tooltip",
"Layers to exclude when producing collisions."},
91 .data<nullptr, &character_controller_component::get_collision_mask>(
"collision_layers"_hs)
95 entt::attribute{
"tooltip",
"Layers (Include - Exclude) used when producing collisions."},
97 .data<&character_controller_component::set_terminal_velocity, &character_controller_component::get_terminal_velocity>(
"terminal_velocity"_hs)
101 entt::attribute{
"tooltip",
"Maximum downward fall speed in m/s. Default 55 (skydiver terminal velocity)."},
105 .data<&character_controller_component::set_linear_damping, &character_controller_component::get_linear_damping>(
"linear_damping"_hs)
109 entt::attribute{
"tooltip",
"Damping applied to linear velocity each step. 0 = no damping, 1 = full damping."},
114 .data<nullptr, &character_controller_component::is_grounded>(
"is_grounded"_hs)
119 .data<nullptr, &character_controller_component::can_jump>(
"can_jump"_hs)
124 .data<nullptr, &character_controller_component::get_velocity>(
"velocity"_hs)
133 try_save(ar, ser20::make_nvp(
"radius", obj.get_radius()));
134 try_save(ar, ser20::make_nvp(
"height", obj.get_height()));
135 try_save(ar, ser20::make_nvp(
"center", obj.get_center()));
136 try_save(ar, ser20::make_nvp(
"step_height", obj.get_step_height()));
137 try_save(ar, ser20::make_nvp(
"slope_limit", obj.get_slope_limit()));
138 try_save(ar, ser20::make_nvp(
"skin_width", obj.get_skin_width()));
139 try_save(ar, ser20::make_nvp(
"gravity_scale", obj.get_gravity_scale()));
140 try_save(ar, ser20::make_nvp(
"include_layers", obj.get_collision_include_mask()));
141 try_save(ar, ser20::make_nvp(
"exclude_layers", obj.get_collision_exclude_mask()));
142 try_save(ar, ser20::make_nvp(
"terminal_velocity", obj.get_terminal_velocity()));
143 try_save(ar, ser20::make_nvp(
"linear_damping", obj.get_linear_damping()));