-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathplayer.gd
More file actions
89 lines (73 loc) · 1.96 KB
/
Copy pathplayer.gd
File metadata and controls
89 lines (73 loc) · 1.96 KB
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
extends CharacterBody2D
const SPEED = 600.0
const JUMP_VELOCITY = -130.0
const MAX_SPEED = 400.0
const JUMP_FRAMES = 6
var direction = 0
var air_time = 0
@export var delay:int
var jumps:Array[Array]
var jump :bool
var move:Array[Array]
var last:float
signal levelCleared
signal die
func disable() -> void:
move.clear()
direction=0
jumps.clear()
last=0
jump=false
velocity=Vector2.ZERO
visible=false
set_physics_process(false)
func enable() -> void:
visible=true
set_physics_process(true)
if Input.is_action_pressed("jump"):
jumps.append([Time.get_ticks_msec()+delay*1000,true])
var val = Input.get_axis("move_left", "move_right")
if val!=0:
move.append([Time.get_ticks_msec()+delay*1000,val])
func _ready() -> void:
disable()
func _physics_process(delta: float) -> void:
if not is_on_floor():
velocity += get_gravity() * delta
air_time+=1
else:
air_time=0
if delay==0:
jump = Input.is_action_pressed("jump")
else:
if len(jumps) and jumps[0][0]<=Time.get_ticks_msec():
jump=jumps[0][1]
jumps.remove_at(0)
if Input.is_action_just_pressed("jump"):
jumps.append([Time.get_ticks_msec()+delay*1000,true])
elif Input.is_action_just_released("jump"):
jumps.append([Time.get_ticks_msec()+delay*1000,false])
if jump and air_time<JUMP_FRAMES:
velocity.y += JUMP_VELOCITY
$UpArrow.visible = jump
var val = Input.get_axis("move_left", "move_right")
if delay==0:
direction = val
else:
if len(move) and move[0][0]<=Time.get_ticks_msec():
direction=move[0][1]
move.remove_at(0)
if val!=last:
move.append([Time.get_ticks_msec()+delay*1000,val])
if direction:
velocity.x = move_toward(velocity.x, MAX_SPEED * direction, SPEED * delta)
else:
velocity.x = move_toward(velocity.x, 0, 1000*delta)
$RightArrow.visible = direction==1
$LeftArrow.visible = direction==-1
last=val
move_and_slide()
func _on_spike_body_entered(body: Node2D) -> void:
die.emit()
func _on_win_body_entered(body: Node2D) -> void:
levelCleared.emit()