Wall slide
This commit is contained in:
parent
ef19463d6e
commit
11b0e77b48
|
@ -11,9 +11,17 @@ export (int) var max_speed = 64
|
||||||
export (float) var friction = 0.25
|
export (float) var friction = 0.25
|
||||||
export (int) var gravity = 200
|
export (int) var gravity = 200
|
||||||
export (int) var jump_force = 128
|
export (int) var jump_force = 128
|
||||||
|
export (int) var wall_slide_speed = 48
|
||||||
|
export (int) var max_wall_slide_speed = 128
|
||||||
export (int) var max_slope = 46
|
export (int) var max_slope = 46
|
||||||
export (int) var bullet_speed = 250
|
export (int) var bullet_speed = 250
|
||||||
|
|
||||||
|
enum {
|
||||||
|
MOVE,
|
||||||
|
WALL_SLIDE
|
||||||
|
}
|
||||||
|
|
||||||
|
var state = MOVE
|
||||||
var invincible = false setget set_invincible
|
var invincible = false setget set_invincible
|
||||||
var motion = Vector2.ZERO
|
var motion = Vector2.ZERO
|
||||||
var snap_vector = Vector2.ZERO
|
var snap_vector = Vector2.ZERO
|
||||||
|
@ -37,15 +45,33 @@ func _ready():
|
||||||
|
|
||||||
func _physics_process(delta):
|
func _physics_process(delta):
|
||||||
just_jumped = false
|
just_jumped = false
|
||||||
var input_vector = get_input_vector()
|
|
||||||
apply_horizontal_force(input_vector, delta)
|
match state:
|
||||||
apply_friction(input_vector)
|
MOVE:
|
||||||
update_snap_vector()
|
var input_vector = get_input_vector()
|
||||||
jump_check()
|
apply_horizontal_force(input_vector, delta)
|
||||||
apply_gravity(delta)
|
apply_friction(input_vector)
|
||||||
update_animations(input_vector)
|
update_snap_vector()
|
||||||
move()
|
jump_check()
|
||||||
|
apply_gravity(delta)
|
||||||
|
update_animations(input_vector)
|
||||||
|
move()
|
||||||
|
|
||||||
|
wall_slide_check()
|
||||||
|
|
||||||
|
WALL_SLIDE:
|
||||||
|
animation.play("WallSlide")
|
||||||
|
|
||||||
|
var wall_axis = get_wall_axis()
|
||||||
|
if wall_axis != 0:
|
||||||
|
sprite.scale.x = wall_axis
|
||||||
|
|
||||||
|
wall_slide_jump_check(wall_axis)
|
||||||
|
wall_slide_drop_check(delta)
|
||||||
|
wall_slide_fast_slide_check(delta)
|
||||||
|
move()
|
||||||
|
wall_detach_check(wall_axis)
|
||||||
|
|
||||||
if Input.is_action_pressed("fire") and fireBulletTimer.time_left == 0:
|
if Input.is_action_pressed("fire") and fireBulletTimer.time_left == 0:
|
||||||
fire_bullet()
|
fire_bullet()
|
||||||
|
|
||||||
|
@ -144,11 +170,45 @@ func move():
|
||||||
if is_on_floor() and get_floor_velocity().length() == 0 and abs(motion.x) < 1:
|
if is_on_floor() and get_floor_velocity().length() == 0 and abs(motion.x) < 1:
|
||||||
position.x = last_position.x
|
position.x = last_position.x
|
||||||
|
|
||||||
|
func wall_slide_check():
|
||||||
|
if !is_on_floor() and is_on_wall():
|
||||||
|
state = WALL_SLIDE
|
||||||
|
double_jump = true
|
||||||
|
|
||||||
|
func get_wall_axis():
|
||||||
|
var is_right_wall = test_move(transform, Vector2.RIGHT)
|
||||||
|
var is_left_wall = test_move(transform, Vector2.LEFT)
|
||||||
|
return int(is_left_wall) - int(is_right_wall)
|
||||||
|
|
||||||
|
func wall_slide_jump_check(wall_axis):
|
||||||
|
if Input.is_action_just_pressed("ui_select"):
|
||||||
|
motion.x = wall_axis * max_speed
|
||||||
|
motion.y = -jump_force/1.25
|
||||||
|
state = MOVE
|
||||||
|
|
||||||
|
func wall_slide_drop_check(delta):
|
||||||
|
if Input.is_action_just_pressed("ui_right"):
|
||||||
|
motion.x = acceleration * delta
|
||||||
|
state = MOVE
|
||||||
|
|
||||||
|
if Input.is_action_just_pressed("ui_left"):
|
||||||
|
motion.x = -acceleration * delta
|
||||||
|
state = MOVE
|
||||||
|
|
||||||
|
func wall_slide_fast_slide_check(delta):
|
||||||
|
var max_slide_speed = wall_slide_speed
|
||||||
|
if Input.is_action_just_pressed("ui_down"):
|
||||||
|
max_slide_speed = max_wall_slide_speed
|
||||||
|
motion.y = min(motion.y + gravity * delta, max_wall_slide_speed)
|
||||||
|
|
||||||
|
func wall_detach_check(wall_axis):
|
||||||
|
if wall_axis == 0 or is_on_floor():
|
||||||
|
state = MOVE
|
||||||
|
|
||||||
func _on_Hurtbox_hit(damage):
|
func _on_Hurtbox_hit(damage):
|
||||||
if not invincible:
|
if not invincible:
|
||||||
PlayerStats.health -= damage
|
PlayerStats.health -= damage
|
||||||
blinkAnimator.play("Blink")
|
blinkAnimator.play("Blink")
|
||||||
|
|
||||||
|
|
||||||
func _on_died():
|
func _on_died():
|
||||||
queue_free()
|
queue_free()
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[gd_scene load_steps=11 format=2]
|
[gd_scene load_steps=12 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://Assets/Player/Player.png" type="Texture" id=1]
|
[ext_resource path="res://Assets/Player/Player.png" type="Texture" id=1]
|
||||||
[ext_resource path="res://Scenes/Player/Player.gd" type="Script" id=2]
|
[ext_resource path="res://Scenes/Player/Player.gd" type="Script" id=2]
|
||||||
|
@ -74,6 +74,22 @@ tracks/1/keys = {
|
||||||
} ]
|
} ]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id=5]
|
||||||
|
resource_name = "WallSlide"
|
||||||
|
length = 0.1
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/path = NodePath("Sprite:frame")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PoolRealArray( 0 ),
|
||||||
|
"transitions": PoolRealArray( 1 ),
|
||||||
|
"update": 1,
|
||||||
|
"values": [ 10 ]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id=4]
|
[sub_resource type="Animation" id=4]
|
||||||
resource_name = "Blink"
|
resource_name = "Blink"
|
||||||
length = 0.9
|
length = 0.9
|
||||||
|
@ -115,7 +131,7 @@ script = ExtResource( 2 )
|
||||||
position = Vector2( 0, -12 )
|
position = Vector2( 0, -12 )
|
||||||
texture = ExtResource( 1 )
|
texture = ExtResource( 1 )
|
||||||
hframes = 12
|
hframes = 12
|
||||||
frame = 4
|
frame = 11
|
||||||
|
|
||||||
[node name="PlayerGun" parent="Sprite" instance=ExtResource( 4 )]
|
[node name="PlayerGun" parent="Sprite" instance=ExtResource( 4 )]
|
||||||
show_behind_parent = true
|
show_behind_parent = true
|
||||||
|
@ -129,6 +145,7 @@ shape = ExtResource( 6 )
|
||||||
anims/Idle = SubResource( 1 )
|
anims/Idle = SubResource( 1 )
|
||||||
anims/Jump = SubResource( 2 )
|
anims/Jump = SubResource( 2 )
|
||||||
anims/Run = SubResource( 3 )
|
anims/Run = SubResource( 3 )
|
||||||
|
anims/WallSlide = SubResource( 5 )
|
||||||
|
|
||||||
[node name="BlinkAnimator" type="AnimationPlayer" parent="."]
|
[node name="BlinkAnimator" type="AnimationPlayer" parent="."]
|
||||||
anims/Blink = SubResource( 4 )
|
anims/Blink = SubResource( 4 )
|
||||||
|
|
Loading…
Reference in New Issue