|
34 | 34 |
|
35 | 35 | #include "core/config/project_settings.h"
|
36 | 36 |
|
37 |
| -namespace { |
38 |
| - |
39 |
| -enum JoltJointWorldNode : int { |
40 |
| - JOLT_JOINT_WORLD_NODE_A, |
41 |
| - JOLT_JOINT_WORLD_NODE_B, |
42 |
| -}; |
43 |
| - |
44 |
| -} // namespace |
45 |
| - |
46 | 37 | void JoltProjectSettings::register_settings() {
|
47 | 38 | GLOBAL_DEF(PropertyInfo(Variant::INT, "physics/jolt_physics_3d/simulation/velocity_steps", PROPERTY_HINT_RANGE, U"2,16,or_greater"), 10);
|
48 | 39 | GLOBAL_DEF(PropertyInfo(Variant::INT, "physics/jolt_physics_3d/simulation/position_steps", PROPERTY_HINT_RANGE, U"1,16,or_greater"), 2);
|
@@ -82,149 +73,53 @@ void JoltProjectSettings::register_settings() {
|
82 | 73 | GLOBAL_DEF_RST(PropertyInfo(Variant::INT, "physics/jolt_physics_3d/limits/max_bodies", PROPERTY_HINT_RANGE, U"1,10240,or_greater"), 10240);
|
83 | 74 | GLOBAL_DEF(PropertyInfo(Variant::INT, "physics/jolt_physics_3d/limits/max_body_pairs", PROPERTY_HINT_RANGE, U"8,65536,or_greater"), 65536);
|
84 | 75 | GLOBAL_DEF(PropertyInfo(Variant::INT, "physics/jolt_physics_3d/limits/max_contact_constraints", PROPERTY_HINT_RANGE, U"8,20480,or_greater"), 20480);
|
85 |
| -} |
86 |
| - |
87 |
| -int JoltProjectSettings::get_simulation_velocity_steps() { |
88 |
| - return GLOBAL_GET("physics/jolt_physics_3d/simulation/velocity_steps"); |
89 |
| -} |
90 |
| - |
91 |
| -int JoltProjectSettings::get_simulation_position_steps() { |
92 |
| - return GLOBAL_GET("physics/jolt_physics_3d/simulation/position_steps"); |
93 |
| -} |
94 |
| - |
95 |
| -bool JoltProjectSettings::use_enhanced_internal_edge_removal_for_bodies() { |
96 |
| - return GLOBAL_GET("physics/jolt_physics_3d/simulation/use_enhanced_internal_edge_removal"); |
97 |
| -} |
98 |
| - |
99 |
| -bool JoltProjectSettings::areas_detect_static_bodies() { |
100 |
| - return GLOBAL_GET("physics/jolt_physics_3d/simulation/areas_detect_static_bodies"); |
101 |
| -} |
102 |
| - |
103 |
| -bool JoltProjectSettings::should_generate_all_kinematic_contacts() { |
104 |
| - return GLOBAL_GET("physics/jolt_physics_3d/simulation/generate_all_kinematic_contacts"); |
105 |
| -} |
106 |
| - |
107 |
| -float JoltProjectSettings::get_penetration_slop() { |
108 |
| - return GLOBAL_GET("physics/jolt_physics_3d/simulation/penetration_slop"); |
109 |
| -} |
110 |
| - |
111 |
| -float JoltProjectSettings::get_speculative_contact_distance() { |
112 |
| - return GLOBAL_GET("physics/jolt_physics_3d/simulation/speculative_contact_distance"); |
113 |
| -} |
114 |
| - |
115 |
| -float JoltProjectSettings::get_baumgarte_stabilization_factor() { |
116 |
| - return GLOBAL_GET("physics/jolt_physics_3d/simulation/baumgarte_stabilization_factor"); |
117 |
| -} |
118 |
| - |
119 |
| -float JoltProjectSettings::get_soft_body_point_radius() { |
120 |
| - return GLOBAL_GET("physics/jolt_physics_3d/simulation/soft_body_point_radius"); |
121 |
| -} |
122 |
| - |
123 |
| -float JoltProjectSettings::get_bounce_velocity_threshold() { |
124 |
| - static const float value = GLOBAL_GET("physics/jolt_physics_3d/simulation/bounce_velocity_threshold"); |
125 |
| - return value; |
126 |
| -} |
127 |
| - |
128 |
| -bool JoltProjectSettings::is_sleep_allowed() { |
129 |
| - return GLOBAL_GET("physics/jolt_physics_3d/simulation/allow_sleep"); |
130 |
| -} |
131 |
| - |
132 |
| -float JoltProjectSettings::get_sleep_velocity_threshold() { |
133 |
| - return GLOBAL_GET("physics/jolt_physics_3d/simulation/sleep_velocity_threshold"); |
134 |
| -} |
135 |
| - |
136 |
| -float JoltProjectSettings::get_sleep_time_threshold() { |
137 |
| - return GLOBAL_GET("physics/jolt_physics_3d/simulation/sleep_time_threshold"); |
138 |
| -} |
139 |
| - |
140 |
| -float JoltProjectSettings::get_ccd_movement_threshold() { |
141 |
| - return GLOBAL_GET("physics/jolt_physics_3d/simulation/continuous_cd_movement_threshold"); |
142 |
| -} |
143 |
| - |
144 |
| -float JoltProjectSettings::get_ccd_max_penetration() { |
145 |
| - return GLOBAL_GET("physics/jolt_physics_3d/simulation/continuous_cd_max_penetration"); |
146 |
| -} |
147 |
| - |
148 |
| -bool JoltProjectSettings::is_body_pair_contact_cache_enabled() { |
149 |
| - return GLOBAL_GET("physics/jolt_physics_3d/simulation/body_pair_contact_cache_enabled"); |
150 |
| -} |
151 |
| - |
152 |
| -float JoltProjectSettings::get_body_pair_cache_distance_sq() { |
153 |
| - const float value = GLOBAL_GET("physics/jolt_physics_3d/simulation/body_pair_contact_cache_distance_threshold"); |
154 |
| - return value * value; |
155 |
| -} |
156 |
| - |
157 |
| -float JoltProjectSettings::get_body_pair_cache_angle_cos_div2() { |
158 |
| - return Math::cos((float)GLOBAL_GET("physics/jolt_physics_3d/simulation/body_pair_contact_cache_angle_threshold") / 2.0f); |
159 |
| -} |
160 |
| - |
161 |
| -bool JoltProjectSettings::use_enhanced_internal_edge_removal_for_queries() { |
162 |
| - static const bool value = GLOBAL_GET("physics/jolt_physics_3d/queries/use_enhanced_internal_edge_removal"); |
163 |
| - return value; |
164 |
| -} |
165 |
| - |
166 |
| -bool JoltProjectSettings::enable_ray_cast_face_index() { |
167 |
| - static const bool value = GLOBAL_GET("physics/jolt_physics_3d/queries/enable_ray_cast_face_index"); |
168 |
| - return value; |
169 |
| -} |
170 |
| - |
171 |
| -bool JoltProjectSettings::use_enhanced_internal_edge_removal_for_motion_queries() { |
172 |
| - static const bool value = GLOBAL_GET("physics/jolt_physics_3d/motion_queries/use_enhanced_internal_edge_removal"); |
173 |
| - return value; |
174 |
| -} |
175 |
| - |
176 |
| -int JoltProjectSettings::get_motion_query_recovery_iterations() { |
177 |
| - static const int value = GLOBAL_GET("physics/jolt_physics_3d/motion_queries/recovery_iterations"); |
178 |
| - return value; |
179 |
| -} |
180 |
| - |
181 |
| -float JoltProjectSettings::get_motion_query_recovery_amount() { |
182 |
| - static const float value = GLOBAL_GET("physics/jolt_physics_3d/motion_queries/recovery_amount"); |
183 |
| - return value; |
184 |
| -} |
185 |
| - |
186 |
| -float JoltProjectSettings::get_collision_margin_fraction() { |
187 |
| - static const float value = GLOBAL_GET("physics/jolt_physics_3d/collisions/collision_margin_fraction"); |
188 |
| - return value; |
189 |
| -} |
190 |
| - |
191 |
| -float JoltProjectSettings::get_active_edge_threshold() { |
192 |
| - static const float value = Math::cos((float)GLOBAL_GET("physics/jolt_physics_3d/collisions/active_edge_threshold")); |
193 |
| - return value; |
194 |
| -} |
195 |
| - |
196 |
| -bool JoltProjectSettings::use_joint_world_node_a() { |
197 |
| - return (int)GLOBAL_GET("physics/jolt_physics_3d/joints/world_node") == JOLT_JOINT_WORLD_NODE_A; |
198 |
| -} |
199 |
| - |
200 |
| -int JoltProjectSettings::get_temp_memory_mib() { |
201 |
| - return GLOBAL_GET("physics/jolt_physics_3d/limits/temporary_memory_buffer_size"); |
202 |
| -} |
203 |
| - |
204 |
| -int64_t JoltProjectSettings::get_temp_memory_b() { |
205 |
| - return get_temp_memory_mib() * 1024 * 1024; |
206 |
| -} |
207 |
| - |
208 |
| -float JoltProjectSettings::get_world_boundary_shape_size() { |
209 |
| - return GLOBAL_GET("physics/jolt_physics_3d/limits/world_boundary_shape_size"); |
210 |
| -} |
211 |
| - |
212 |
| -float JoltProjectSettings::get_max_linear_velocity() { |
213 |
| - return GLOBAL_GET("physics/jolt_physics_3d/limits/max_linear_velocity"); |
214 |
| -} |
215 |
| - |
216 |
| -float JoltProjectSettings::get_max_angular_velocity() { |
217 |
| - return GLOBAL_GET("physics/jolt_physics_3d/limits/max_angular_velocity"); |
218 |
| -} |
219 |
| - |
220 |
| -int JoltProjectSettings::get_max_bodies() { |
221 |
| - return GLOBAL_GET("physics/jolt_physics_3d/limits/max_bodies"); |
222 |
| -} |
223 |
| - |
224 |
| -int JoltProjectSettings::get_max_pairs() { |
225 |
| - return GLOBAL_GET("physics/jolt_physics_3d/limits/max_body_pairs"); |
226 |
| -} |
227 | 76 |
|
228 |
| -int JoltProjectSettings::get_max_contact_constraints() { |
229 |
| - return GLOBAL_GET("physics/jolt_physics_3d/limits/max_contact_constraints"); |
| 77 | + read_settings(); |
| 78 | + |
| 79 | + ProjectSettings::get_singleton()->connect("settings_changed", callable_mp_static(JoltProjectSettings::read_settings)); |
| 80 | +} |
| 81 | + |
| 82 | +void JoltProjectSettings::read_settings() { |
| 83 | + simulation_velocity_steps = GLOBAL_GET("physics/jolt_physics_3d/simulation/velocity_steps"); |
| 84 | + simulation_position_steps = GLOBAL_GET("physics/jolt_physics_3d/simulation/position_steps"); |
| 85 | + use_enhanced_internal_edge_removal_for_bodies = GLOBAL_GET("physics/jolt_physics_3d/simulation/use_enhanced_internal_edge_removal"); |
| 86 | + areas_detect_static_bodies = GLOBAL_GET("physics/jolt_physics_3d/simulation/areas_detect_static_bodies"); |
| 87 | + generate_all_kinematic_contacts = GLOBAL_GET("physics/jolt_physics_3d/simulation/generate_all_kinematic_contacts"); |
| 88 | + penetration_slop = GLOBAL_GET("physics/jolt_physics_3d/simulation/penetration_slop"); |
| 89 | + speculative_contact_distance = GLOBAL_GET("physics/jolt_physics_3d/simulation/speculative_contact_distance"); |
| 90 | + baumgarte_stabilization_factor = GLOBAL_GET("physics/jolt_physics_3d/simulation/baumgarte_stabilization_factor"); |
| 91 | + soft_body_point_radius = GLOBAL_GET("physics/jolt_physics_3d/simulation/soft_body_point_radius"); |
| 92 | + bounce_velocity_threshold = GLOBAL_GET("physics/jolt_physics_3d/simulation/bounce_velocity_threshold"); |
| 93 | + sleep_allowed = GLOBAL_GET("physics/jolt_physics_3d/simulation/allow_sleep"); |
| 94 | + sleep_velocity_threshold = GLOBAL_GET("physics/jolt_physics_3d/simulation/sleep_velocity_threshold"); |
| 95 | + sleep_time_threshold = GLOBAL_GET("physics/jolt_physics_3d/simulation/sleep_time_threshold"); |
| 96 | + ccd_movement_threshold = GLOBAL_GET("physics/jolt_physics_3d/simulation/continuous_cd_movement_threshold"); |
| 97 | + ccd_max_penetration = GLOBAL_GET("physics/jolt_physics_3d/simulation/continuous_cd_max_penetration"); |
| 98 | + body_pair_contact_cache_enabled = GLOBAL_GET("physics/jolt_physics_3d/simulation/body_pair_contact_cache_enabled"); |
| 99 | + float body_pair_cache_distance = GLOBAL_GET("physics/jolt_physics_3d/simulation/body_pair_contact_cache_distance_threshold"); |
| 100 | + body_pair_cache_distance_sq = body_pair_cache_distance * body_pair_cache_distance; |
| 101 | + float body_pair_cache_angle = GLOBAL_GET("physics/jolt_physics_3d/simulation/body_pair_contact_cache_angle_threshold"); |
| 102 | + body_pair_cache_angle_cos_div2 = Math::cos(body_pair_cache_angle / 2.0f); |
| 103 | + |
| 104 | + use_enhanced_internal_edge_removal_for_queries = GLOBAL_GET("physics/jolt_physics_3d/queries/use_enhanced_internal_edge_removal"); |
| 105 | + enable_ray_cast_face_index = GLOBAL_GET("physics/jolt_physics_3d/queries/enable_ray_cast_face_index"); |
| 106 | + |
| 107 | + use_enhanced_internal_edge_removal_for_motion_queries = GLOBAL_GET("physics/jolt_physics_3d/motion_queries/use_enhanced_internal_edge_removal"); |
| 108 | + motion_query_recovery_iterations = GLOBAL_GET("physics/jolt_physics_3d/motion_queries/recovery_iterations"); |
| 109 | + motion_query_recovery_amount = GLOBAL_GET("physics/jolt_physics_3d/motion_queries/recovery_amount"); |
| 110 | + |
| 111 | + collision_margin_fraction = GLOBAL_GET("physics/jolt_physics_3d/collisions/collision_margin_fraction"); |
| 112 | + float active_edge_threshold = GLOBAL_GET("physics/jolt_physics_3d/collisions/active_edge_threshold"); |
| 113 | + active_edge_threshold_cos = Math::cos(active_edge_threshold); |
| 114 | + |
| 115 | + joint_world_node = (JoltJointWorldNode)(int)GLOBAL_GET("physics/jolt_physics_3d/joints/world_node"); |
| 116 | + |
| 117 | + temp_memory_mib = GLOBAL_GET("physics/jolt_physics_3d/limits/temporary_memory_buffer_size"); |
| 118 | + temp_memory_b = temp_memory_mib * 1024 * 1024; |
| 119 | + world_boundary_shape_size = GLOBAL_GET("physics/jolt_physics_3d/limits/world_boundary_shape_size"); |
| 120 | + max_linear_velocity = GLOBAL_GET("physics/jolt_physics_3d/limits/max_linear_velocity"); |
| 121 | + max_angular_velocity = GLOBAL_GET("physics/jolt_physics_3d/limits/max_angular_velocity"); |
| 122 | + max_bodies = GLOBAL_GET("physics/jolt_physics_3d/limits/max_bodies"); |
| 123 | + max_body_pairs = GLOBAL_GET("physics/jolt_physics_3d/limits/max_body_pairs"); |
| 124 | + max_contact_constraints = GLOBAL_GET("physics/jolt_physics_3d/limits/max_contact_constraints"); |
230 | 125 | }
|
0 commit comments