mirror of
https://github.com/godotengine/godot.git
synced 2024-11-21 03:18:37 +08:00
Implement missing orbit velocity for CPUParticles and CPUParticles2D
The relevant code was copied from (GPU) ParticlesMaterial but commented out initially, and never ported. Closes #29580.
This commit is contained in:
parent
41a62f3ac3
commit
52dd0f8751
@ -116,6 +116,12 @@
|
||||
</member>
|
||||
<member name="one_shot" type="bool" setter="set_one_shot" getter="get_one_shot">
|
||||
</member>
|
||||
<member name="orbit_velocity" type="float" setter="set_param" getter="get_param">
|
||||
</member>
|
||||
<member name="orbit_velocity_curve" type="Curve" setter="set_param_curve" getter="get_param_curve">
|
||||
</member>
|
||||
<member name="orbit_velocity_random" type="float" setter="set_param_randomness" getter="get_param_randomness">
|
||||
</member>
|
||||
<member name="preprocess" type="float" setter="set_pre_process_time" getter="get_pre_process_time">
|
||||
</member>
|
||||
<member name="radial_accel" type="float" setter="set_param" getter="get_param">
|
||||
@ -154,30 +160,34 @@
|
||||
</constant>
|
||||
<constant name="PARAM_ANGULAR_VELOCITY" value="1" enum="Parameter">
|
||||
</constant>
|
||||
<constant name="PARAM_LINEAR_ACCEL" value="2" enum="Parameter">
|
||||
<constant name="PARAM_ORBIT_VELOCITY" value="2" enum="Parameter">
|
||||
</constant>
|
||||
<constant name="PARAM_RADIAL_ACCEL" value="3" enum="Parameter">
|
||||
<constant name="PARAM_LINEAR_ACCEL" value="3" enum="Parameter">
|
||||
</constant>
|
||||
<constant name="PARAM_TANGENTIAL_ACCEL" value="4" enum="Parameter">
|
||||
<constant name="PARAM_RADIAL_ACCEL" value="4" enum="Parameter">
|
||||
</constant>
|
||||
<constant name="PARAM_DAMPING" value="5" enum="Parameter">
|
||||
<constant name="PARAM_TANGENTIAL_ACCEL" value="5" enum="Parameter">
|
||||
</constant>
|
||||
<constant name="PARAM_ANGLE" value="6" enum="Parameter">
|
||||
<constant name="PARAM_DAMPING" value="6" enum="Parameter">
|
||||
</constant>
|
||||
<constant name="PARAM_SCALE" value="7" enum="Parameter">
|
||||
<constant name="PARAM_ANGLE" value="7" enum="Parameter">
|
||||
</constant>
|
||||
<constant name="PARAM_HUE_VARIATION" value="8" enum="Parameter">
|
||||
<constant name="PARAM_SCALE" value="8" enum="Parameter">
|
||||
</constant>
|
||||
<constant name="PARAM_ANIM_SPEED" value="9" enum="Parameter">
|
||||
<constant name="PARAM_HUE_VARIATION" value="9" enum="Parameter">
|
||||
</constant>
|
||||
<constant name="PARAM_ANIM_OFFSET" value="10" enum="Parameter">
|
||||
<constant name="PARAM_ANIM_SPEED" value="10" enum="Parameter">
|
||||
</constant>
|
||||
<constant name="PARAM_MAX" value="11" enum="Parameter">
|
||||
<constant name="PARAM_ANIM_OFFSET" value="11" enum="Parameter">
|
||||
</constant>
|
||||
<constant name="PARAM_MAX" value="12" enum="Parameter">
|
||||
</constant>
|
||||
<constant name="FLAG_ALIGN_Y_TO_VELOCITY" value="0" enum="Flags">
|
||||
</constant>
|
||||
<constant name="FLAG_ROTATE_Y" value="1" enum="Flags">
|
||||
</constant>
|
||||
<constant name="FLAG_DISABLE_Z" value="2" enum="Flags">
|
||||
</constant>
|
||||
<constant name="FLAG_MAX" value="3" enum="Flags">
|
||||
</constant>
|
||||
<constant name="EMISSION_SHAPE_POINT" value="0" enum="EmissionShape">
|
||||
|
@ -111,6 +111,12 @@
|
||||
</member>
|
||||
<member name="one_shot" type="bool" setter="set_one_shot" getter="get_one_shot">
|
||||
</member>
|
||||
<member name="orbit_velocity" type="float" setter="set_param" getter="get_param">
|
||||
</member>
|
||||
<member name="orbit_velocity_curve" type="Curve" setter="set_param_curve" getter="get_param_curve">
|
||||
</member>
|
||||
<member name="orbit_velocity_random" type="float" setter="set_param_randomness" getter="get_param_randomness">
|
||||
</member>
|
||||
<member name="preprocess" type="float" setter="set_pre_process_time" getter="get_pre_process_time">
|
||||
</member>
|
||||
<member name="radial_accel" type="float" setter="set_param" getter="get_param">
|
||||
@ -173,7 +179,11 @@
|
||||
</constant>
|
||||
<constant name="FLAG_ALIGN_Y_TO_VELOCITY" value="0" enum="Flags">
|
||||
</constant>
|
||||
<constant name="FLAG_MAX" value="1" enum="Flags">
|
||||
<constant name="FLAG_ROTATE_Y" value="1" enum="Flags">
|
||||
</constant>
|
||||
<constant name="FLAG_DISABLE_Z" value="2" enum="Flags">
|
||||
</constant>
|
||||
<constant name="FLAG_MAX" value="3" enum="Flags">
|
||||
</constant>
|
||||
<constant name="EMISSION_SHAPE_POINT" value="0" enum="EmissionShape">
|
||||
</constant>
|
||||
|
@ -29,8 +29,9 @@
|
||||
/*************************************************************************/
|
||||
|
||||
#include "cpu_particles_2d.h"
|
||||
#include "particles_2d.h"
|
||||
|
||||
#include "scene/2d/canvas_item.h"
|
||||
#include "scene/2d/particles_2d.h"
|
||||
#include "scene/resources/particles_material.h"
|
||||
#include "servers/visual_server.h"
|
||||
|
||||
@ -324,9 +325,9 @@ void CPUParticles2D::set_param_curve(Parameter p_param, const Ref<Curve> &p_curv
|
||||
case PARAM_ANGULAR_VELOCITY: {
|
||||
_adjust_curve_range(p_curve, -360, 360);
|
||||
} break;
|
||||
/*case PARAM_ORBIT_VELOCITY: {
|
||||
case PARAM_ORBIT_VELOCITY: {
|
||||
_adjust_curve_range(p_curve, -500, 500);
|
||||
} break;*/
|
||||
} break;
|
||||
case PARAM_LINEAR_ACCEL: {
|
||||
_adjust_curve_range(p_curve, -200, 200);
|
||||
} break;
|
||||
@ -489,12 +490,6 @@ void CPUParticles2D::_validate_property(PropertyInfo &property) const {
|
||||
if (property.name == "emission_colors" && emission_shape != EMISSION_SHAPE_POINTS && emission_shape != EMISSION_SHAPE_DIRECTED_POINTS) {
|
||||
property.usage = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
if (property.name.begins_with("orbit_") && !flags[FLAG_DISABLE_Z]) {
|
||||
property.usage = 0;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
static uint32_t idhash(uint32_t x) {
|
||||
@ -695,16 +690,12 @@ void CPUParticles2D::_particles_process(float p_delta) {
|
||||
if (curve_parameters[PARAM_INITIAL_LINEAR_VELOCITY].is_valid()) {
|
||||
tex_linear_velocity = curve_parameters[PARAM_INITIAL_LINEAR_VELOCITY]->interpolate(p.custom[1]);
|
||||
}
|
||||
/*
|
||||
|
||||
float tex_orbit_velocity = 0.0;
|
||||
|
||||
if (flags[FLAG_DISABLE_Z]) {
|
||||
|
||||
if (curve_parameters[PARAM_INITIAL_ORBIT_VELOCITY].is_valid()) {
|
||||
tex_orbit_velocity = curve_parameters[PARAM_INITIAL_ORBIT_VELOCITY]->interpolate(p.custom[1]);
|
||||
}
|
||||
if (curve_parameters[PARAM_ORBIT_VELOCITY].is_valid()) {
|
||||
tex_orbit_velocity = curve_parameters[PARAM_ORBIT_VELOCITY]->interpolate(p.custom[1]);
|
||||
}
|
||||
*/
|
||||
|
||||
float tex_angular_velocity = 0.0;
|
||||
if (curve_parameters[PARAM_ANGULAR_VELOCITY].is_valid()) {
|
||||
tex_angular_velocity = curve_parameters[PARAM_ANGULAR_VELOCITY]->interpolate(p.custom[1]);
|
||||
@ -759,18 +750,15 @@ void CPUParticles2D::_particles_process(float p_delta) {
|
||||
//apply attractor forces
|
||||
p.velocity += force * local_delta;
|
||||
//orbit velocity
|
||||
#if 0
|
||||
if (flags[FLAG_DISABLE_Z]) {
|
||||
|
||||
float orbit_amount = (orbit_velocity + tex_orbit_velocity) * mix(1.0, rand_from_seed(alt_seed), orbit_velocity_random);
|
||||
if (orbit_amount != 0.0) {
|
||||
float ang = orbit_amount * DELTA * pi * 2.0;
|
||||
mat2 rot = mat2(vec2(cos(ang), -sin(ang)), vec2(sin(ang), cos(ang)));
|
||||
TRANSFORM[3].xy -= diff.xy;
|
||||
TRANSFORM[3].xy += rot * diff.xy;
|
||||
}
|
||||
float orbit_amount = (parameters[PARAM_ORBIT_VELOCITY] + tex_orbit_velocity) * Math::lerp(1.0f, rand_from_seed(alt_seed), randomness[PARAM_ORBIT_VELOCITY]);
|
||||
if (orbit_amount != 0.0) {
|
||||
float ang = orbit_amount * local_delta * Math_PI * 2.0;
|
||||
// Not sure why the ParticlesMaterial code uses a clockwise rotation matrix,
|
||||
// but we use -ang here to reproduce its behavior.
|
||||
Transform2D rot = Transform2D(-ang, Vector2());
|
||||
p.transform[2] -= diff;
|
||||
p.transform[2] += rot.basis_xform(diff);
|
||||
}
|
||||
#endif
|
||||
if (curve_parameters[PARAM_INITIAL_LINEAR_VELOCITY].is_valid()) {
|
||||
p.velocity = p.velocity.normalized() * tex_linear_velocity;
|
||||
}
|
||||
@ -1271,12 +1259,10 @@ void CPUParticles2D::_bind_methods() {
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::REAL, "angular_velocity", PROPERTY_HINT_RANGE, "-720,720,0.01,or_lesser,or_greater"), "set_param", "get_param", PARAM_ANGULAR_VELOCITY);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::REAL, "angular_velocity_random", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param_randomness", "get_param_randomness", PARAM_ANGULAR_VELOCITY);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "angular_velocity_curve", PROPERTY_HINT_RESOURCE_TYPE, "Curve"), "set_param_curve", "get_param_curve", PARAM_ANGULAR_VELOCITY);
|
||||
/*
|
||||
ADD_GROUP("Orbit Velocity", "orbit_");
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::REAL, "orbit_velocity", PROPERTY_HINT_RANGE, "-1000,1000,0.01,or_lesser,or_greater"), "set_param", "get_param", PARAM_ORBIT_VELOCITY);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::REAL, "orbit_velocity_random", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param_randomness", "get_param_randomness", PARAM_ORBIT_VELOCITY);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "orbit_velocity_curve", PROPERTY_HINT_RESOURCE_TYPE, "Curve"), "set_param_curve", "get_param_curve", PARAM_ORBIT_VELOCITY);
|
||||
*/
|
||||
ADD_GROUP("Linear Accel", "linear_");
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::REAL, "linear_accel", PROPERTY_HINT_RANGE, "-100,100,0.01,or_lesser,or_greater"), "set_param", "get_param", PARAM_LINEAR_ACCEL);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::REAL, "linear_accel_random", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param_randomness", "get_param_randomness", PARAM_LINEAR_ACCEL);
|
||||
@ -1332,6 +1318,8 @@ void CPUParticles2D::_bind_methods() {
|
||||
BIND_ENUM_CONSTANT(PARAM_MAX);
|
||||
|
||||
BIND_ENUM_CONSTANT(FLAG_ALIGN_Y_TO_VELOCITY);
|
||||
BIND_ENUM_CONSTANT(FLAG_ROTATE_Y); // Unused, but exposed for consistency with 3D.
|
||||
BIND_ENUM_CONSTANT(FLAG_DISABLE_Z); // Unused, but exposed for consistency with 3D.
|
||||
BIND_ENUM_CONSTANT(FLAG_MAX);
|
||||
|
||||
BIND_ENUM_CONSTANT(EMISSION_SHAPE_POINT);
|
||||
@ -1370,7 +1358,7 @@ CPUParticles2D::CPUParticles2D() {
|
||||
set_spread(45);
|
||||
set_flatness(0);
|
||||
set_param(PARAM_INITIAL_LINEAR_VELOCITY, 1);
|
||||
//set_param(PARAM_ORBIT_VELOCITY, 0);
|
||||
set_param(PARAM_ORBIT_VELOCITY, 0);
|
||||
set_param(PARAM_LINEAR_ACCEL, 0);
|
||||
set_param(PARAM_ANGULAR_VELOCITY, 0);
|
||||
set_param(PARAM_RADIAL_ACCEL, 0);
|
||||
|
@ -68,6 +68,8 @@ public:
|
||||
|
||||
enum Flags {
|
||||
FLAG_ALIGN_Y_TO_VELOCITY,
|
||||
FLAG_ROTATE_Y, // Unused, but exposed for consistency with 3D.
|
||||
FLAG_DISABLE_Z, // Unused, but exposed for consistency with 3D.
|
||||
FLAG_MAX
|
||||
};
|
||||
|
||||
|
@ -302,9 +302,9 @@ void CPUParticles::set_param_curve(Parameter p_param, const Ref<Curve> &p_curve)
|
||||
case PARAM_ANGULAR_VELOCITY: {
|
||||
_adjust_curve_range(p_curve, -360, 360);
|
||||
} break;
|
||||
/*case PARAM_ORBIT_VELOCITY: {
|
||||
case PARAM_ORBIT_VELOCITY: {
|
||||
_adjust_curve_range(p_curve, -500, 500);
|
||||
} break;*/
|
||||
} break;
|
||||
case PARAM_LINEAR_ACCEL: {
|
||||
_adjust_curve_range(p_curve, -200, 200);
|
||||
} break;
|
||||
@ -461,11 +461,10 @@ void CPUParticles::_validate_property(PropertyInfo &property) const {
|
||||
if (property.name == "emission_normals" && emission_shape != EMISSION_SHAPE_DIRECTED_POINTS) {
|
||||
property.usage = 0;
|
||||
}
|
||||
/*
|
||||
|
||||
if (property.name.begins_with("orbit_") && !flags[FLAG_DISABLE_Z]) {
|
||||
property.usage = 0;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
static uint32_t idhash(uint32_t x) {
|
||||
@ -698,16 +697,14 @@ void CPUParticles::_particles_process(float p_delta) {
|
||||
if (curve_parameters[PARAM_INITIAL_LINEAR_VELOCITY].is_valid()) {
|
||||
tex_linear_velocity = curve_parameters[PARAM_INITIAL_LINEAR_VELOCITY]->interpolate(p.custom[1]);
|
||||
}
|
||||
/*
|
||||
|
||||
float tex_orbit_velocity = 0.0;
|
||||
|
||||
if (flags[FLAG_DISABLE_Z]) {
|
||||
|
||||
if (curve_parameters[PARAM_INITIAL_ORBIT_VELOCITY].is_valid()) {
|
||||
tex_orbit_velocity = curve_parameters[PARAM_INITIAL_ORBIT_VELOCITY]->interpolate(p.custom[1]);
|
||||
if (curve_parameters[PARAM_ORBIT_VELOCITY].is_valid()) {
|
||||
tex_orbit_velocity = curve_parameters[PARAM_ORBIT_VELOCITY]->interpolate(p.custom[1]);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
float tex_angular_velocity = 0.0;
|
||||
if (curve_parameters[PARAM_ANGULAR_VELOCITY].is_valid()) {
|
||||
tex_angular_velocity = curve_parameters[PARAM_ANGULAR_VELOCITY]->interpolate(p.custom[1]);
|
||||
@ -772,18 +769,18 @@ void CPUParticles::_particles_process(float p_delta) {
|
||||
//apply attractor forces
|
||||
p.velocity += force * local_delta;
|
||||
//orbit velocity
|
||||
#if 0
|
||||
if (flags[FLAG_DISABLE_Z]) {
|
||||
|
||||
float orbit_amount = (orbit_velocity + tex_orbit_velocity) * mix(1.0, rand_from_seed(alt_seed), orbit_velocity_random);
|
||||
float orbit_amount = (parameters[PARAM_ORBIT_VELOCITY] + tex_orbit_velocity) * Math::lerp(1.0f, rand_from_seed(alt_seed), randomness[PARAM_ORBIT_VELOCITY]);
|
||||
if (orbit_amount != 0.0) {
|
||||
float ang = orbit_amount * DELTA * pi * 2.0;
|
||||
mat2 rot = mat2(vec2(cos(ang), -sin(ang)), vec2(sin(ang), cos(ang)));
|
||||
TRANSFORM[3].xy -= diff.xy;
|
||||
TRANSFORM[3].xy += rot * diff.xy;
|
||||
float ang = orbit_amount * local_delta * Math_PI * 2.0;
|
||||
// Not sure why the ParticlesMaterial code uses a clockwise rotation matrix,
|
||||
// but we use -ang here to reproduce its behavior.
|
||||
Transform2D rot = Transform2D(-ang, Vector2());
|
||||
Vector2 rotv = rot.basis_xform(Vector2(diff.x, diff.y));
|
||||
p.transform.origin -= Vector3(diff.x, diff.y, 0);
|
||||
p.transform.origin += Vector3(rotv.x, rotv.y, 0);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (curve_parameters[PARAM_INITIAL_LINEAR_VELOCITY].is_valid()) {
|
||||
p.velocity = p.velocity.normalized() * tex_linear_velocity;
|
||||
}
|
||||
@ -1179,7 +1176,7 @@ void CPUParticles::convert_from_particles(Node *p_particles) {
|
||||
|
||||
CONVERT_PARAM(PARAM_INITIAL_LINEAR_VELOCITY);
|
||||
CONVERT_PARAM(PARAM_ANGULAR_VELOCITY);
|
||||
// CONVERT_PARAM(PARAM_ORBIT_VELOCITY);
|
||||
CONVERT_PARAM(PARAM_ORBIT_VELOCITY);
|
||||
CONVERT_PARAM(PARAM_LINEAR_ACCEL);
|
||||
CONVERT_PARAM(PARAM_RADIAL_ACCEL);
|
||||
CONVERT_PARAM(PARAM_TANGENTIAL_ACCEL);
|
||||
@ -1322,12 +1319,10 @@ void CPUParticles::_bind_methods() {
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::REAL, "angular_velocity", PROPERTY_HINT_RANGE, "-720,720,0.01,or_lesser,or_greater"), "set_param", "get_param", PARAM_ANGULAR_VELOCITY);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::REAL, "angular_velocity_random", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param_randomness", "get_param_randomness", PARAM_ANGULAR_VELOCITY);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "angular_velocity_curve", PROPERTY_HINT_RESOURCE_TYPE, "Curve"), "set_param_curve", "get_param_curve", PARAM_ANGULAR_VELOCITY);
|
||||
/*
|
||||
ADD_GROUP("Orbit Velocity", "orbit_");
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::REAL, "orbit_velocity", PROPERTY_HINT_RANGE, "-1000,1000,0.01,or_lesser,or_greater"), "set_param", "get_param", PARAM_ORBIT_VELOCITY);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::REAL, "orbit_velocity_random", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param_randomness", "get_param_randomness", PARAM_ORBIT_VELOCITY);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "orbit_velocity_curve", PROPERTY_HINT_RESOURCE_TYPE, "Curve"), "set_param_curve", "get_param_curve", PARAM_ORBIT_VELOCITY);
|
||||
*/
|
||||
ADD_GROUP("Linear Accel", "linear_");
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::REAL, "linear_accel", PROPERTY_HINT_RANGE, "-100,100,0.01,or_lesser,or_greater"), "set_param", "get_param", PARAM_LINEAR_ACCEL);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::REAL, "linear_accel_random", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param_randomness", "get_param_randomness", PARAM_LINEAR_ACCEL);
|
||||
@ -1370,7 +1365,7 @@ void CPUParticles::_bind_methods() {
|
||||
|
||||
BIND_ENUM_CONSTANT(PARAM_INITIAL_LINEAR_VELOCITY);
|
||||
BIND_ENUM_CONSTANT(PARAM_ANGULAR_VELOCITY);
|
||||
//BIND_ENUM_CONSTANT(PARAM_ORBIT_VELOCITY);
|
||||
BIND_ENUM_CONSTANT(PARAM_ORBIT_VELOCITY);
|
||||
BIND_ENUM_CONSTANT(PARAM_LINEAR_ACCEL);
|
||||
BIND_ENUM_CONSTANT(PARAM_RADIAL_ACCEL);
|
||||
BIND_ENUM_CONSTANT(PARAM_TANGENTIAL_ACCEL);
|
||||
@ -1384,6 +1379,7 @@ void CPUParticles::_bind_methods() {
|
||||
|
||||
BIND_ENUM_CONSTANT(FLAG_ALIGN_Y_TO_VELOCITY);
|
||||
BIND_ENUM_CONSTANT(FLAG_ROTATE_Y);
|
||||
BIND_ENUM_CONSTANT(FLAG_DISABLE_Z);
|
||||
BIND_ENUM_CONSTANT(FLAG_MAX);
|
||||
|
||||
BIND_ENUM_CONSTANT(EMISSION_SHAPE_POINT);
|
||||
@ -1422,7 +1418,7 @@ CPUParticles::CPUParticles() {
|
||||
set_spread(45);
|
||||
set_flatness(0);
|
||||
set_param(PARAM_INITIAL_LINEAR_VELOCITY, 1);
|
||||
//set_param(PARAM_ORBIT_VELOCITY, 0);
|
||||
set_param(PARAM_ORBIT_VELOCITY, 0);
|
||||
set_param(PARAM_LINEAR_ACCEL, 0);
|
||||
set_param(PARAM_RADIAL_ACCEL, 0);
|
||||
set_param(PARAM_TANGENTIAL_ACCEL, 0);
|
||||
|
@ -53,7 +53,7 @@ public:
|
||||
|
||||
PARAM_INITIAL_LINEAR_VELOCITY,
|
||||
PARAM_ANGULAR_VELOCITY,
|
||||
//PARAM_ORBIT_VELOCITY,
|
||||
PARAM_ORBIT_VELOCITY,
|
||||
PARAM_LINEAR_ACCEL,
|
||||
PARAM_RADIAL_ACCEL,
|
||||
PARAM_TANGENTIAL_ACCEL,
|
||||
|
Loading…
Reference in New Issue
Block a user