Merge pull request #64841 from fabriceci/shorten-variable-names-moving-platforms
This commit is contained in:
commit
8916949b50
6 changed files with 102 additions and 102 deletions
|
@ -164,13 +164,13 @@
|
|||
<member name="motion_mode" type="int" setter="set_motion_mode" getter="get_motion_mode" enum="CharacterBody2D.MotionMode" default="0">
|
||||
Sets the motion mode which defines the behavior of [method move_and_slide]. See [enum MotionMode] constants for available modes.
|
||||
</member>
|
||||
<member name="moving_platform_apply_velocity_on_leave" type="int" setter="set_moving_platform_apply_velocity_on_leave" getter="get_moving_platform_apply_velocity_on_leave" enum="CharacterBody2D.MovingPlatformApplyVelocityOnLeave" default="0">
|
||||
Sets the behavior to apply when you leave a moving platform. By default, to be physically accurate, when you leave the last platform velocity is applied. See [enum MovingPlatformApplyVelocityOnLeave] constants for available behavior.
|
||||
</member>
|
||||
<member name="moving_platform_floor_layers" type="int" setter="set_moving_platform_floor_layers" getter="get_moving_platform_floor_layers" default="4294967295">
|
||||
<member name="platform_floor_layers" type="int" setter="set_platform_floor_layers" getter="get_platform_floor_layers" default="4294967295">
|
||||
Collision layers that will be included for detecting floor bodies that will act as moving platforms to be followed by the [CharacterBody2D]. By default, all floor bodies are detected and propagate their velocity.
|
||||
</member>
|
||||
<member name="moving_platform_wall_layers" type="int" setter="set_moving_platform_wall_layers" getter="get_moving_platform_wall_layers" default="0">
|
||||
<member name="platform_on_leave" type="int" setter="set_platform_on_leave" getter="get_platform_on_leave" enum="CharacterBody2D.PlatformOnLeave" default="0">
|
||||
Sets the behavior to apply when you leave a moving platform. By default, to be physically accurate, when you leave the last platform velocity is applied. See [enum PlatformOnLeave] constants for available behavior.
|
||||
</member>
|
||||
<member name="platform_wall_layers" type="int" setter="set_platform_wall_layers" getter="get_platform_wall_layers" default="0">
|
||||
Collision layers that will be included for detecting wall bodies that will act as moving platforms to be followed by the [CharacterBody2D]. By default, all wall bodies are ignored.
|
||||
</member>
|
||||
<member name="safe_margin" type="float" setter="set_safe_margin" getter="get_safe_margin" default="0.08">
|
||||
|
@ -199,13 +199,13 @@
|
|||
<constant name="MOTION_MODE_FLOATING" value="1" enum="MotionMode">
|
||||
Apply when there is no notion of floor or ceiling. All collisions will be reported as [code]on_wall[/code]. In this mode, when you slide, the speed will always be constant. This mode is suitable for top-down games.
|
||||
</constant>
|
||||
<constant name="PLATFORM_VEL_ON_LEAVE_ALWAYS" value="0" enum="MovingPlatformApplyVelocityOnLeave">
|
||||
<constant name="PLATFORM_ON_LEAVE_ADD_VELOCITY" value="0" enum="PlatformOnLeave">
|
||||
Add the last platform velocity to the [member velocity] when you leave a moving platform.
|
||||
</constant>
|
||||
<constant name="PLATFORM_VEL_ON_LEAVE_UPWARD_ONLY" value="1" enum="MovingPlatformApplyVelocityOnLeave">
|
||||
<constant name="PLATFORM_ON_LEAVE_ADD_UPWARD_VELOCITY" value="1" enum="PlatformOnLeave">
|
||||
Add the last platform velocity to the [member velocity] when you leave a moving platform, but any downward motion is ignored. It's useful to keep full jump height even when the platform is moving down.
|
||||
</constant>
|
||||
<constant name="PLATFORM_VEL_ON_LEAVE_NEVER" value="2" enum="MovingPlatformApplyVelocityOnLeave">
|
||||
<constant name="PLATFORM_ON_LEAVE_DO_NOTHING" value="2" enum="PlatformOnLeave">
|
||||
Do nothing when leaving a platform.
|
||||
</constant>
|
||||
</constants>
|
||||
|
|
|
@ -149,13 +149,13 @@
|
|||
<member name="motion_mode" type="int" setter="set_motion_mode" getter="get_motion_mode" enum="CharacterBody3D.MotionMode" default="0">
|
||||
Sets the motion mode which defines the behavior of [method move_and_slide]. See [enum MotionMode] constants for available modes.
|
||||
</member>
|
||||
<member name="moving_platform_apply_velocity_on_leave" type="int" setter="set_moving_platform_apply_velocity_on_leave" getter="get_moving_platform_apply_velocity_on_leave" enum="CharacterBody3D.MovingPlatformApplyVelocityOnLeave" default="0">
|
||||
Sets the behavior to apply when you leave a moving platform. By default, to be physically accurate, when you leave the last platform velocity is applied. See [enum MovingPlatformApplyVelocityOnLeave] constants for available behavior.
|
||||
</member>
|
||||
<member name="moving_platform_floor_layers" type="int" setter="set_moving_platform_floor_layers" getter="get_moving_platform_floor_layers" default="4294967295">
|
||||
<member name="platform_floor_layers" type="int" setter="set_platform_floor_layers" getter="get_platform_floor_layers" default="4294967295">
|
||||
Collision layers that will be included for detecting floor bodies that will act as moving platforms to be followed by the [CharacterBody3D]. By default, all floor bodies are detected and propagate their velocity.
|
||||
</member>
|
||||
<member name="moving_platform_wall_layers" type="int" setter="set_moving_platform_wall_layers" getter="get_moving_platform_wall_layers" default="0">
|
||||
<member name="platform_on_leave" type="int" setter="set_platform_on_leave" getter="get_platform_on_leave" enum="CharacterBody3D.PlatformOnLeave" default="0">
|
||||
Sets the behavior to apply when you leave a moving platform. By default, to be physically accurate, when you leave the last platform velocity is applied. See [enum PlatformOnLeave] constants for available behavior.
|
||||
</member>
|
||||
<member name="platform_wall_layers" type="int" setter="set_platform_wall_layers" getter="get_platform_wall_layers" default="0">
|
||||
Collision layers that will be included for detecting wall bodies that will act as moving platforms to be followed by the [CharacterBody3D]. By default, all wall bodies are ignored.
|
||||
</member>
|
||||
<member name="safe_margin" type="float" setter="set_safe_margin" getter="get_safe_margin" default="0.001">
|
||||
|
@ -184,13 +184,13 @@
|
|||
<constant name="MOTION_MODE_FLOATING" value="1" enum="MotionMode">
|
||||
Apply when there is no notion of floor or ceiling. All collisions will be reported as [code]on_wall[/code]. In this mode, when you slide, the speed will always be constant. This mode is suitable for games without ground like space games.
|
||||
</constant>
|
||||
<constant name="PLATFORM_VEL_ON_LEAVE_ALWAYS" value="0" enum="MovingPlatformApplyVelocityOnLeave">
|
||||
<constant name="PLATFORM_ON_LEAVE_ADD_VELOCITY" value="0" enum="PlatformOnLeave">
|
||||
Add the last platform velocity to the [member velocity] when you leave a moving platform.
|
||||
</constant>
|
||||
<constant name="PLATFORM_VEL_ON_LEAVE_UPWARD_ONLY" value="1" enum="MovingPlatformApplyVelocityOnLeave">
|
||||
<constant name="PLATFORM_ON_LEAVE_ADD_UPWARD_VELOCITY" value="1" enum="PlatformOnLeave">
|
||||
Add the last platform velocity to the [member velocity] when you leave a moving platform, but any downward motion is ignored. It's useful to keep full jump height even when the platform is moving down.
|
||||
</constant>
|
||||
<constant name="PLATFORM_VEL_ON_LEAVE_NEVER" value="2" enum="MovingPlatformApplyVelocityOnLeave">
|
||||
<constant name="PLATFORM_ON_LEAVE_DO_NOTHING" value="2" enum="PlatformOnLeave">
|
||||
Do nothing when leaving a platform.
|
||||
</constant>
|
||||
</constants>
|
||||
|
|
|
@ -1114,9 +1114,9 @@ bool CharacterBody2D::move_and_slide() {
|
|||
if ((on_floor || on_wall) && platform_rid.is_valid()) {
|
||||
bool excluded = false;
|
||||
if (on_floor) {
|
||||
excluded = (moving_platform_floor_layers & platform_layer) == 0;
|
||||
excluded = (platform_floor_layers & platform_layer) == 0;
|
||||
} else if (on_wall) {
|
||||
excluded = (moving_platform_wall_layers & platform_layer) == 0;
|
||||
excluded = (platform_wall_layers & platform_layer) == 0;
|
||||
}
|
||||
if (!excluded) {
|
||||
//this approach makes sure there is less delay between the actual body velocity and the one we saved
|
||||
|
@ -1166,10 +1166,10 @@ bool CharacterBody2D::move_and_slide() {
|
|||
// Compute real velocity.
|
||||
real_velocity = get_position_delta() / delta;
|
||||
|
||||
if (moving_platform_apply_velocity_on_leave != PLATFORM_VEL_ON_LEAVE_NEVER) {
|
||||
if (platform_on_leave != PLATFORM_ON_LEAVE_DO_NOTHING) {
|
||||
// Add last platform velocity when just left a moving platform.
|
||||
if (!on_floor && !on_wall) {
|
||||
if (moving_platform_apply_velocity_on_leave == PLATFORM_VEL_ON_LEAVE_UPWARD_ONLY && current_platform_velocity.dot(up_direction) < 0) {
|
||||
if (platform_on_leave == PLATFORM_ON_LEAVE_ADD_UPWARD_VELOCITY && current_platform_velocity.dot(up_direction) < 0) {
|
||||
current_platform_velocity = current_platform_velocity.slide(up_direction);
|
||||
}
|
||||
velocity += current_platform_velocity;
|
||||
|
@ -1613,20 +1613,20 @@ void CharacterBody2D::set_slide_on_ceiling_enabled(bool p_enabled) {
|
|||
slide_on_ceiling = p_enabled;
|
||||
}
|
||||
|
||||
uint32_t CharacterBody2D::get_moving_platform_floor_layers() const {
|
||||
return moving_platform_floor_layers;
|
||||
uint32_t CharacterBody2D::get_platform_floor_layers() const {
|
||||
return platform_floor_layers;
|
||||
}
|
||||
|
||||
void CharacterBody2D::set_moving_platform_floor_layers(uint32_t p_exclude_layers) {
|
||||
moving_platform_floor_layers = p_exclude_layers;
|
||||
void CharacterBody2D::set_platform_floor_layers(uint32_t p_exclude_layers) {
|
||||
platform_floor_layers = p_exclude_layers;
|
||||
}
|
||||
|
||||
uint32_t CharacterBody2D::get_moving_platform_wall_layers() const {
|
||||
return moving_platform_wall_layers;
|
||||
uint32_t CharacterBody2D::get_platform_wall_layers() const {
|
||||
return platform_wall_layers;
|
||||
}
|
||||
|
||||
void CharacterBody2D::set_moving_platform_wall_layers(uint32_t p_exclude_layers) {
|
||||
moving_platform_wall_layers = p_exclude_layers;
|
||||
void CharacterBody2D::set_platform_wall_layers(uint32_t p_exclude_layers) {
|
||||
platform_wall_layers = p_exclude_layers;
|
||||
}
|
||||
|
||||
void CharacterBody2D::set_motion_mode(MotionMode p_mode) {
|
||||
|
@ -1637,12 +1637,12 @@ CharacterBody2D::MotionMode CharacterBody2D::get_motion_mode() const {
|
|||
return motion_mode;
|
||||
}
|
||||
|
||||
void CharacterBody2D::set_moving_platform_apply_velocity_on_leave(MovingPlatformApplyVelocityOnLeave p_on_leave_apply_velocity) {
|
||||
moving_platform_apply_velocity_on_leave = p_on_leave_apply_velocity;
|
||||
void CharacterBody2D::set_platform_on_leave(PlatformOnLeave p_on_leave_apply_velocity) {
|
||||
platform_on_leave = p_on_leave_apply_velocity;
|
||||
}
|
||||
|
||||
CharacterBody2D::MovingPlatformApplyVelocityOnLeave CharacterBody2D::get_moving_platform_apply_velocity_on_leave() const {
|
||||
return moving_platform_apply_velocity_on_leave;
|
||||
CharacterBody2D::PlatformOnLeave CharacterBody2D::get_platform_on_leave() const {
|
||||
return platform_on_leave;
|
||||
}
|
||||
|
||||
int CharacterBody2D::get_max_slides() const {
|
||||
|
@ -1720,10 +1720,10 @@ void CharacterBody2D::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("set_slide_on_ceiling_enabled", "enabled"), &CharacterBody2D::set_slide_on_ceiling_enabled);
|
||||
ClassDB::bind_method(D_METHOD("is_slide_on_ceiling_enabled"), &CharacterBody2D::is_slide_on_ceiling_enabled);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_moving_platform_floor_layers", "exclude_layer"), &CharacterBody2D::set_moving_platform_floor_layers);
|
||||
ClassDB::bind_method(D_METHOD("get_moving_platform_floor_layers"), &CharacterBody2D::get_moving_platform_floor_layers);
|
||||
ClassDB::bind_method(D_METHOD("set_moving_platform_wall_layers", "exclude_layer"), &CharacterBody2D::set_moving_platform_wall_layers);
|
||||
ClassDB::bind_method(D_METHOD("get_moving_platform_wall_layers"), &CharacterBody2D::get_moving_platform_wall_layers);
|
||||
ClassDB::bind_method(D_METHOD("set_platform_floor_layers", "exclude_layer"), &CharacterBody2D::set_platform_floor_layers);
|
||||
ClassDB::bind_method(D_METHOD("get_platform_floor_layers"), &CharacterBody2D::get_platform_floor_layers);
|
||||
ClassDB::bind_method(D_METHOD("set_platform_wall_layers", "exclude_layer"), &CharacterBody2D::set_platform_wall_layers);
|
||||
ClassDB::bind_method(D_METHOD("get_platform_wall_layers"), &CharacterBody2D::get_platform_wall_layers);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_max_slides"), &CharacterBody2D::get_max_slides);
|
||||
ClassDB::bind_method(D_METHOD("set_max_slides", "max_slides"), &CharacterBody2D::set_max_slides);
|
||||
|
@ -1737,8 +1737,8 @@ void CharacterBody2D::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("set_up_direction", "up_direction"), &CharacterBody2D::set_up_direction);
|
||||
ClassDB::bind_method(D_METHOD("set_motion_mode", "mode"), &CharacterBody2D::set_motion_mode);
|
||||
ClassDB::bind_method(D_METHOD("get_motion_mode"), &CharacterBody2D::get_motion_mode);
|
||||
ClassDB::bind_method(D_METHOD("set_moving_platform_apply_velocity_on_leave", "on_leave_apply_velocity"), &CharacterBody2D::set_moving_platform_apply_velocity_on_leave);
|
||||
ClassDB::bind_method(D_METHOD("get_moving_platform_apply_velocity_on_leave"), &CharacterBody2D::get_moving_platform_apply_velocity_on_leave);
|
||||
ClassDB::bind_method(D_METHOD("set_platform_on_leave", "on_leave_apply_velocity"), &CharacterBody2D::set_platform_on_leave);
|
||||
ClassDB::bind_method(D_METHOD("get_platform_on_leave"), &CharacterBody2D::get_platform_on_leave);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("is_on_floor"), &CharacterBody2D::is_on_floor);
|
||||
ClassDB::bind_method(D_METHOD("is_on_floor_only"), &CharacterBody2D::is_on_floor_only);
|
||||
|
@ -1771,10 +1771,10 @@ void CharacterBody2D::_bind_methods() {
|
|||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "floor_max_angle", PROPERTY_HINT_RANGE, "0,180,0.1,radians"), "set_floor_max_angle", "get_floor_max_angle");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "floor_snap_length", PROPERTY_HINT_RANGE, "0,32,0.1,or_greater,suffix:px"), "set_floor_snap_length", "get_floor_snap_length");
|
||||
|
||||
ADD_GROUP("Moving Platform", "moving_platform");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "moving_platform_apply_velocity_on_leave", PROPERTY_HINT_ENUM, "Always,Upward Only,Never", PROPERTY_USAGE_DEFAULT), "set_moving_platform_apply_velocity_on_leave", "get_moving_platform_apply_velocity_on_leave");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "moving_platform_floor_layers", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_moving_platform_floor_layers", "get_moving_platform_floor_layers");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "moving_platform_wall_layers", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_moving_platform_wall_layers", "get_moving_platform_wall_layers");
|
||||
ADD_GROUP("Moving Platform", "platform");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "platform_on_leave", PROPERTY_HINT_ENUM, "Add Velocity,Add Upward Velocity,Do Nothing", PROPERTY_USAGE_DEFAULT), "set_platform_on_leave", "get_platform_on_leave");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "platform_floor_layers", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_platform_floor_layers", "get_platform_floor_layers");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "platform_wall_layers", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_platform_wall_layers", "get_platform_wall_layers");
|
||||
|
||||
ADD_GROUP("Collision", "");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "safe_margin", PROPERTY_HINT_RANGE, "0.001,256,0.001,suffix:px"), "set_safe_margin", "get_safe_margin");
|
||||
|
@ -1782,9 +1782,9 @@ void CharacterBody2D::_bind_methods() {
|
|||
BIND_ENUM_CONSTANT(MOTION_MODE_GROUNDED);
|
||||
BIND_ENUM_CONSTANT(MOTION_MODE_FLOATING);
|
||||
|
||||
BIND_ENUM_CONSTANT(PLATFORM_VEL_ON_LEAVE_ALWAYS);
|
||||
BIND_ENUM_CONSTANT(PLATFORM_VEL_ON_LEAVE_UPWARD_ONLY);
|
||||
BIND_ENUM_CONSTANT(PLATFORM_VEL_ON_LEAVE_NEVER);
|
||||
BIND_ENUM_CONSTANT(PLATFORM_ON_LEAVE_ADD_VELOCITY);
|
||||
BIND_ENUM_CONSTANT(PLATFORM_ON_LEAVE_ADD_UPWARD_VELOCITY);
|
||||
BIND_ENUM_CONSTANT(PLATFORM_ON_LEAVE_DO_NOTHING);
|
||||
}
|
||||
|
||||
void CharacterBody2D::_validate_property(PropertyInfo &p_property) const {
|
||||
|
|
|
@ -331,10 +331,10 @@ public:
|
|||
MOTION_MODE_GROUNDED,
|
||||
MOTION_MODE_FLOATING,
|
||||
};
|
||||
enum MovingPlatformApplyVelocityOnLeave {
|
||||
PLATFORM_VEL_ON_LEAVE_ALWAYS,
|
||||
PLATFORM_VEL_ON_LEAVE_UPWARD_ONLY,
|
||||
PLATFORM_VEL_ON_LEAVE_NEVER,
|
||||
enum PlatformOnLeave {
|
||||
PLATFORM_ON_LEAVE_ADD_VELOCITY,
|
||||
PLATFORM_ON_LEAVE_ADD_UPWARD_VELOCITY,
|
||||
PLATFORM_ON_LEAVE_DO_NOTHING,
|
||||
};
|
||||
bool move_and_slide();
|
||||
|
||||
|
@ -365,7 +365,7 @@ public:
|
|||
private:
|
||||
real_t margin = 0.08;
|
||||
MotionMode motion_mode = MOTION_MODE_GROUNDED;
|
||||
MovingPlatformApplyVelocityOnLeave moving_platform_apply_velocity_on_leave = PLATFORM_VEL_ON_LEAVE_ALWAYS;
|
||||
PlatformOnLeave platform_on_leave = PLATFORM_ON_LEAVE_ADD_VELOCITY;
|
||||
|
||||
bool floor_constant_speed = false;
|
||||
bool floor_stop_on_slope = true;
|
||||
|
@ -377,8 +377,8 @@ private:
|
|||
real_t floor_snap_length = 1;
|
||||
real_t wall_min_slide_angle = Math::deg2rad((real_t)15.0);
|
||||
Vector2 up_direction = Vector2(0.0, -1.0);
|
||||
uint32_t moving_platform_floor_layers = UINT32_MAX;
|
||||
uint32_t moving_platform_wall_layers = 0;
|
||||
uint32_t platform_floor_layers = UINT32_MAX;
|
||||
uint32_t platform_wall_layers = 0;
|
||||
Vector2 velocity;
|
||||
|
||||
Vector2 floor_normal;
|
||||
|
@ -424,17 +424,17 @@ private:
|
|||
real_t get_wall_min_slide_angle() const;
|
||||
void set_wall_min_slide_angle(real_t p_radians);
|
||||
|
||||
uint32_t get_moving_platform_floor_layers() const;
|
||||
void set_moving_platform_floor_layers(const uint32_t p_exclude_layer);
|
||||
uint32_t get_platform_floor_layers() const;
|
||||
void set_platform_floor_layers(const uint32_t p_exclude_layer);
|
||||
|
||||
uint32_t get_moving_platform_wall_layers() const;
|
||||
void set_moving_platform_wall_layers(const uint32_t p_exclude_layer);
|
||||
uint32_t get_platform_wall_layers() const;
|
||||
void set_platform_wall_layers(const uint32_t p_exclude_layer);
|
||||
|
||||
void set_motion_mode(MotionMode p_mode);
|
||||
MotionMode get_motion_mode() const;
|
||||
|
||||
void set_moving_platform_apply_velocity_on_leave(MovingPlatformApplyVelocityOnLeave p_on_leave_velocity);
|
||||
MovingPlatformApplyVelocityOnLeave get_moving_platform_apply_velocity_on_leave() const;
|
||||
void set_platform_on_leave(PlatformOnLeave p_on_leave_velocity);
|
||||
PlatformOnLeave get_platform_on_leave() const;
|
||||
|
||||
void _move_and_slide_floating(double p_delta);
|
||||
void _move_and_slide_grounded(double p_delta, bool p_was_on_floor);
|
||||
|
@ -455,7 +455,7 @@ protected:
|
|||
};
|
||||
|
||||
VARIANT_ENUM_CAST(CharacterBody2D::MotionMode);
|
||||
VARIANT_ENUM_CAST(CharacterBody2D::MovingPlatformApplyVelocityOnLeave);
|
||||
VARIANT_ENUM_CAST(CharacterBody2D::PlatformOnLeave);
|
||||
|
||||
class KinematicCollision2D : public RefCounted {
|
||||
GDCLASS(KinematicCollision2D, RefCounted);
|
||||
|
|
|
@ -1183,9 +1183,9 @@ bool CharacterBody3D::move_and_slide() {
|
|||
if ((collision_state.floor || collision_state.wall) && platform_rid.is_valid()) {
|
||||
bool excluded = false;
|
||||
if (collision_state.floor) {
|
||||
excluded = (moving_platform_floor_layers & platform_layer) == 0;
|
||||
excluded = (platform_floor_layers & platform_layer) == 0;
|
||||
} else if (collision_state.wall) {
|
||||
excluded = (moving_platform_wall_layers & platform_layer) == 0;
|
||||
excluded = (platform_wall_layers & platform_layer) == 0;
|
||||
}
|
||||
if (!excluded) {
|
||||
//this approach makes sure there is less delay between the actual body velocity and the one we saved
|
||||
|
@ -1237,10 +1237,10 @@ bool CharacterBody3D::move_and_slide() {
|
|||
// Compute real velocity.
|
||||
real_velocity = get_position_delta() / delta;
|
||||
|
||||
if (moving_platform_apply_velocity_on_leave != PLATFORM_VEL_ON_LEAVE_NEVER) {
|
||||
if (platform_on_leave != PLATFORM_ON_LEAVE_DO_NOTHING) {
|
||||
// Add last platform velocity when just left a moving platform.
|
||||
if (!collision_state.floor && !collision_state.wall) {
|
||||
if (moving_platform_apply_velocity_on_leave == PLATFORM_VEL_ON_LEAVE_UPWARD_ONLY && current_platform_velocity.dot(up_direction) < 0) {
|
||||
if (platform_on_leave == PLATFORM_ON_LEAVE_ADD_UPWARD_VELOCITY && current_platform_velocity.dot(up_direction) < 0) {
|
||||
current_platform_velocity = current_platform_velocity.slide(up_direction);
|
||||
}
|
||||
velocity += current_platform_velocity;
|
||||
|
@ -1860,20 +1860,20 @@ void CharacterBody3D::set_slide_on_ceiling_enabled(bool p_enabled) {
|
|||
slide_on_ceiling = p_enabled;
|
||||
}
|
||||
|
||||
uint32_t CharacterBody3D::get_moving_platform_floor_layers() const {
|
||||
return moving_platform_floor_layers;
|
||||
uint32_t CharacterBody3D::get_platform_floor_layers() const {
|
||||
return platform_floor_layers;
|
||||
}
|
||||
|
||||
void CharacterBody3D::set_moving_platform_floor_layers(uint32_t p_exclude_layers) {
|
||||
moving_platform_floor_layers = p_exclude_layers;
|
||||
void CharacterBody3D::set_platform_floor_layers(uint32_t p_exclude_layers) {
|
||||
platform_floor_layers = p_exclude_layers;
|
||||
}
|
||||
|
||||
uint32_t CharacterBody3D::get_moving_platform_wall_layers() const {
|
||||
return moving_platform_wall_layers;
|
||||
uint32_t CharacterBody3D::get_platform_wall_layers() const {
|
||||
return platform_wall_layers;
|
||||
}
|
||||
|
||||
void CharacterBody3D::set_moving_platform_wall_layers(uint32_t p_exclude_layers) {
|
||||
moving_platform_wall_layers = p_exclude_layers;
|
||||
void CharacterBody3D::set_platform_wall_layers(uint32_t p_exclude_layers) {
|
||||
platform_wall_layers = p_exclude_layers;
|
||||
}
|
||||
|
||||
void CharacterBody3D::set_motion_mode(MotionMode p_mode) {
|
||||
|
@ -1884,12 +1884,12 @@ CharacterBody3D::MotionMode CharacterBody3D::get_motion_mode() const {
|
|||
return motion_mode;
|
||||
}
|
||||
|
||||
void CharacterBody3D::set_moving_platform_apply_velocity_on_leave(MovingPlatformApplyVelocityOnLeave p_on_leave_apply_velocity) {
|
||||
moving_platform_apply_velocity_on_leave = p_on_leave_apply_velocity;
|
||||
void CharacterBody3D::set_platform_on_leave(PlatformOnLeave p_on_leave_apply_velocity) {
|
||||
platform_on_leave = p_on_leave_apply_velocity;
|
||||
}
|
||||
|
||||
CharacterBody3D::MovingPlatformApplyVelocityOnLeave CharacterBody3D::get_moving_platform_apply_velocity_on_leave() const {
|
||||
return moving_platform_apply_velocity_on_leave;
|
||||
CharacterBody3D::PlatformOnLeave CharacterBody3D::get_platform_on_leave() const {
|
||||
return platform_on_leave;
|
||||
}
|
||||
|
||||
int CharacterBody3D::get_max_slides() const {
|
||||
|
@ -1965,10 +1965,10 @@ void CharacterBody3D::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("set_slide_on_ceiling_enabled", "enabled"), &CharacterBody3D::set_slide_on_ceiling_enabled);
|
||||
ClassDB::bind_method(D_METHOD("is_slide_on_ceiling_enabled"), &CharacterBody3D::is_slide_on_ceiling_enabled);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_moving_platform_floor_layers", "exclude_layer"), &CharacterBody3D::set_moving_platform_floor_layers);
|
||||
ClassDB::bind_method(D_METHOD("get_moving_platform_floor_layers"), &CharacterBody3D::get_moving_platform_floor_layers);
|
||||
ClassDB::bind_method(D_METHOD("set_moving_platform_wall_layers", "exclude_layer"), &CharacterBody3D::set_moving_platform_wall_layers);
|
||||
ClassDB::bind_method(D_METHOD("get_moving_platform_wall_layers"), &CharacterBody3D::get_moving_platform_wall_layers);
|
||||
ClassDB::bind_method(D_METHOD("set_platform_floor_layers", "exclude_layer"), &CharacterBody3D::set_platform_floor_layers);
|
||||
ClassDB::bind_method(D_METHOD("get_platform_floor_layers"), &CharacterBody3D::get_platform_floor_layers);
|
||||
ClassDB::bind_method(D_METHOD("set_platform_wall_layers", "exclude_layer"), &CharacterBody3D::set_platform_wall_layers);
|
||||
ClassDB::bind_method(D_METHOD("get_platform_wall_layers"), &CharacterBody3D::get_platform_wall_layers);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_max_slides"), &CharacterBody3D::get_max_slides);
|
||||
ClassDB::bind_method(D_METHOD("set_max_slides", "max_slides"), &CharacterBody3D::set_max_slides);
|
||||
|
@ -1982,8 +1982,8 @@ void CharacterBody3D::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("set_up_direction", "up_direction"), &CharacterBody3D::set_up_direction);
|
||||
ClassDB::bind_method(D_METHOD("set_motion_mode", "mode"), &CharacterBody3D::set_motion_mode);
|
||||
ClassDB::bind_method(D_METHOD("get_motion_mode"), &CharacterBody3D::get_motion_mode);
|
||||
ClassDB::bind_method(D_METHOD("set_moving_platform_apply_velocity_on_leave", "on_leave_apply_velocity"), &CharacterBody3D::set_moving_platform_apply_velocity_on_leave);
|
||||
ClassDB::bind_method(D_METHOD("get_moving_platform_apply_velocity_on_leave"), &CharacterBody3D::get_moving_platform_apply_velocity_on_leave);
|
||||
ClassDB::bind_method(D_METHOD("set_platform_on_leave", "on_leave_apply_velocity"), &CharacterBody3D::set_platform_on_leave);
|
||||
ClassDB::bind_method(D_METHOD("get_platform_on_leave"), &CharacterBody3D::get_platform_on_leave);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("is_on_floor"), &CharacterBody3D::is_on_floor);
|
||||
ClassDB::bind_method(D_METHOD("is_on_floor_only"), &CharacterBody3D::is_on_floor_only);
|
||||
|
@ -2016,10 +2016,10 @@ void CharacterBody3D::_bind_methods() {
|
|||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "floor_max_angle", PROPERTY_HINT_RANGE, "0,180,0.1,radians"), "set_floor_max_angle", "get_floor_max_angle");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "floor_snap_length", PROPERTY_HINT_RANGE, "0,1,0.01,or_greater,suffix:m"), "set_floor_snap_length", "get_floor_snap_length");
|
||||
|
||||
ADD_GROUP("Moving Platform", "moving_platform");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "moving_platform_apply_velocity_on_leave", PROPERTY_HINT_ENUM, "Always,Upward Only,Never", PROPERTY_USAGE_DEFAULT), "set_moving_platform_apply_velocity_on_leave", "get_moving_platform_apply_velocity_on_leave");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "moving_platform_floor_layers", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_moving_platform_floor_layers", "get_moving_platform_floor_layers");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "moving_platform_wall_layers", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_moving_platform_wall_layers", "get_moving_platform_wall_layers");
|
||||
ADD_GROUP("Moving Platform", "platform_");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "platform_on_leave", PROPERTY_HINT_ENUM, "Add Velocity,Add Upward Velocity,Do Nothing", PROPERTY_USAGE_DEFAULT), "set_platform_on_leave", "get_platform_on_leave");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "platform_floor_layers", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_platform_floor_layers", "get_platform_floor_layers");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "platform_wall_layers", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_platform_wall_layers", "get_platform_wall_layers");
|
||||
|
||||
ADD_GROUP("Collision", "");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "safe_margin", PROPERTY_HINT_RANGE, "0.001,256,0.001,suffix:m"), "set_safe_margin", "get_safe_margin");
|
||||
|
@ -2027,9 +2027,9 @@ void CharacterBody3D::_bind_methods() {
|
|||
BIND_ENUM_CONSTANT(MOTION_MODE_GROUNDED);
|
||||
BIND_ENUM_CONSTANT(MOTION_MODE_FLOATING);
|
||||
|
||||
BIND_ENUM_CONSTANT(PLATFORM_VEL_ON_LEAVE_ALWAYS);
|
||||
BIND_ENUM_CONSTANT(PLATFORM_VEL_ON_LEAVE_UPWARD_ONLY);
|
||||
BIND_ENUM_CONSTANT(PLATFORM_VEL_ON_LEAVE_NEVER);
|
||||
BIND_ENUM_CONSTANT(PLATFORM_ON_LEAVE_ADD_VELOCITY);
|
||||
BIND_ENUM_CONSTANT(PLATFORM_ON_LEAVE_ADD_UPWARD_VELOCITY);
|
||||
BIND_ENUM_CONSTANT(PLATFORM_ON_LEAVE_DO_NOTHING);
|
||||
}
|
||||
|
||||
void CharacterBody3D::_validate_property(PropertyInfo &p_property) const {
|
||||
|
|
|
@ -348,10 +348,10 @@ public:
|
|||
MOTION_MODE_GROUNDED,
|
||||
MOTION_MODE_FLOATING,
|
||||
};
|
||||
enum MovingPlatformApplyVelocityOnLeave {
|
||||
PLATFORM_VEL_ON_LEAVE_ALWAYS,
|
||||
PLATFORM_VEL_ON_LEAVE_UPWARD_ONLY,
|
||||
PLATFORM_VEL_ON_LEAVE_NEVER,
|
||||
enum PlatformOnLeave {
|
||||
PLATFORM_ON_LEAVE_ADD_VELOCITY,
|
||||
PLATFORM_ON_LEAVE_ADD_UPWARD_VELOCITY,
|
||||
PLATFORM_ON_LEAVE_DO_NOTHING,
|
||||
};
|
||||
bool move_and_slide();
|
||||
|
||||
|
@ -383,7 +383,7 @@ public:
|
|||
private:
|
||||
real_t margin = 0.001;
|
||||
MotionMode motion_mode = MOTION_MODE_GROUNDED;
|
||||
MovingPlatformApplyVelocityOnLeave moving_platform_apply_velocity_on_leave = PLATFORM_VEL_ON_LEAVE_ALWAYS;
|
||||
PlatformOnLeave platform_on_leave = PLATFORM_ON_LEAVE_ADD_VELOCITY;
|
||||
union CollisionState {
|
||||
uint32_t state = 0;
|
||||
struct {
|
||||
|
@ -411,8 +411,8 @@ private:
|
|||
int platform_layer = 0;
|
||||
RID platform_rid;
|
||||
ObjectID platform_object_id;
|
||||
uint32_t moving_platform_floor_layers = UINT32_MAX;
|
||||
uint32_t moving_platform_wall_layers = 0;
|
||||
uint32_t platform_floor_layers = UINT32_MAX;
|
||||
uint32_t platform_wall_layers = 0;
|
||||
real_t floor_snap_length = 0.1;
|
||||
real_t floor_max_angle = Math::deg2rad((real_t)45.0);
|
||||
real_t wall_min_slide_angle = Math::deg2rad((real_t)15.0);
|
||||
|
@ -457,17 +457,17 @@ private:
|
|||
real_t get_wall_min_slide_angle() const;
|
||||
void set_wall_min_slide_angle(real_t p_radians);
|
||||
|
||||
uint32_t get_moving_platform_floor_layers() const;
|
||||
void set_moving_platform_floor_layers(const uint32_t p_exclude_layer);
|
||||
uint32_t get_platform_floor_layers() const;
|
||||
void set_platform_floor_layers(const uint32_t p_exclude_layer);
|
||||
|
||||
uint32_t get_moving_platform_wall_layers() const;
|
||||
void set_moving_platform_wall_layers(const uint32_t p_exclude_layer);
|
||||
uint32_t get_platform_wall_layers() const;
|
||||
void set_platform_wall_layers(const uint32_t p_exclude_layer);
|
||||
|
||||
void set_motion_mode(MotionMode p_mode);
|
||||
MotionMode get_motion_mode() const;
|
||||
|
||||
void set_moving_platform_apply_velocity_on_leave(MovingPlatformApplyVelocityOnLeave p_on_leave_velocity);
|
||||
MovingPlatformApplyVelocityOnLeave get_moving_platform_apply_velocity_on_leave() const;
|
||||
void set_platform_on_leave(PlatformOnLeave p_on_leave_velocity);
|
||||
PlatformOnLeave get_platform_on_leave() const;
|
||||
|
||||
void _move_and_slide_floating(double p_delta);
|
||||
void _move_and_slide_grounded(double p_delta, bool p_was_on_floor);
|
||||
|
@ -488,7 +488,7 @@ protected:
|
|||
};
|
||||
|
||||
VARIANT_ENUM_CAST(CharacterBody3D::MotionMode);
|
||||
VARIANT_ENUM_CAST(CharacterBody3D::MovingPlatformApplyVelocityOnLeave);
|
||||
VARIANT_ENUM_CAST(CharacterBody3D::PlatformOnLeave);
|
||||
|
||||
class KinematicCollision3D : public RefCounted {
|
||||
GDCLASS(KinematicCollision3D, RefCounted);
|
||||
|
|
Loading…
Reference in a new issue