blob: f8c3a59f0d19d84e817d54fbbadfdb1074d53917 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
extends CharacterBody2D
const SPEED = 450
const JUMPFORCE = -500
const GRAVITY = 20
const RUNSPEED = SPEED * 2
const WALLJUMPFORCE = JUMPFORCE * 0.75
var WALLJUMPSPEED = SPEED * 8
var direction = Enum.DIRECTION.RIGHT
var canDoubleJump = false
var hasPlayedFallStop = false
var jumpHeightModifier = 0
var wasOnWall = false
var lastWallDirection = Enum.DIRECTION.LEFT
func _ready():
set_up_direction(Vector2.UP)
func _physics_process(delta):
if Input.is_action_pressed("DIRECTION_LEFT"):
velocity.x = -SPEED
direction = Enum.DIRECTION.LEFT
$Sprite2D.flip_h = true
if self.is_running():
velocity.x = -RUNSPEED
elif Input.is_action_pressed("DIRECTION_RIGHT"):
velocity.x = SPEED
direction = Enum.DIRECTION.RIGHT
$Sprite2D.flip_h = false
if self.is_running():
velocity.x = RUNSPEED
if is_on_floor():
if Input.is_action_pressed("DIRECTION_LEFT") or Input.is_action_pressed("DIRECTION_RIGHT"):
if self.is_running():
$Sprite2D.play("run")
else:
$Sprite2D.play("walk")
else:
$Sprite2D.play("idle")
# jump and fall animation
if not is_on_floor():
$Sprite2D.play("jump")
if has_node("CheckFallStop"):
if velocity.y > -JUMPFORCE:
$CheckFallLanding.set_enabled(true)
$CheckFallStop.set_enabled(true)
if $CheckFallLanding.is_colliding():
$Sprite2D.play("fall_stop_landing")
elif $CheckFallStop.is_colliding():
$Sprite2D.play("fall_stop")
else:
$Sprite2D.play("fall")
else:
$CheckFallLanding.set_enabled(false)
$CheckFallStop.set_enabled(true)
# fall down
velocity.y += GRAVITY
# jump
if Input.is_action_just_pressed("JUMP"):
if is_on_floor():
canDoubleJump = true
velocity.y = JUMPFORCE
jumpHeightModifier = JUMPFORCE
elif not is_on_floor() and not is_on_wall() and not wasOnWall and canDoubleJump:
canDoubleJump = false
velocity.y = JUMPFORCE
if Input.is_action_pressed("JUMP"):
jumpHeightModifier += 10
if jumpHeightModifier > 0:
jumpHeightModifier = 0
if Input.is_action_just_released("JUMP"):
velocity.y -= jumpHeightModifier
if is_on_wall() and not is_on_floor():
velocity.y *= 0.8
$Sprite2D.play("wall")
wasOnWall = true
lastWallDirection = direction
if not is_on_wall() and wasOnWall:
wasOnWall = false
$WalljumpTimer.start()
if canWallJump() and Input.is_action_just_pressed("JUMP"):
$WalljumpTimer.stop()
velocity.y = WALLJUMPFORCE
if lastWallDirection == Enum.DIRECTION.LEFT:
velocity.x = WALLJUMPSPEED
$Sprite2D.flip_h = false
elif lastWallDirection == Enum.DIRECTION.RIGHT:
velocity.x = -WALLJUMPSPEED
$Sprite2D.flip_h = true
# stop
velocity = velocity.lerp(Vector2(0, velocity.y), 0.7)
move_and_slide()
self.updatePuppet()
func is_running():
return Input.is_action_pressed("RUN") and is_on_floor()
func canWallJump():
return (is_on_wall() and not is_on_floor()) or not $WalljumpTimer.is_stopped()
func updatePuppet():
if Network.player.position != self.position:
Network.player.position = self.position
Network.update_player()
if Network.player.animation != $Sprite2D.animation:
Network.player.animation = $Sprite2D.animation
Network.update_player()
if Network.player.animation_flip_h != $Sprite2D.flip_h:
Network.player.animation_flip_h = $Sprite2D.flip_h
Network.update_player()
func check_flag():
# $Sprite.play("dance anim")
print("FLAG CHECKED")
|