-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathlevel.gd
101 lines (85 loc) · 2.71 KB
/
level.gd
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
extends Node2D
onready var grandma = $grandma
onready var field = $field
var is_need_to_jump = false
const DEBUG = true
const CELL = Vector2(150, 150)
func _input(e):
if e is InputEventScreenTouch:
if e.pressed:
is_need_to_jump = true
elif e is InputEventKey:
if e.is_action_pressed("pause"):
get_tree().paused = true
yield(Time.wait(2), "completed")
get_tree().paused = false
elif e.is_action_pressed("jump"):
is_need_to_jump = true
func _ready():
Time.connect("tick", self, "on_tick")
if DEBUG:
$debug_tick.show()
func on_tick(tick):
$debug_tick.text = "%003.2f sec\n(%0004d tick)" % [tick*Time.TICK, tick]
if grandma.moving != 0:
var p = grandma.get_pos_after_x_tick(1)
if grandma.moving != 0:
if p.x < 3.5 and p.x > -3.5:
grandma.move()
elif p.y > 0:
grandma.down()
var squares = get_active_squares()
for sq in squares:
sq.get_pos()
if is_need_to_jump:
is_need_to_jump = false
var jump_slide = null
for sq in squares:
if sq.y_pos != 0:
continue
print(GrandMa.ANIM_TIME.jump+GrandMa.ANIM_TIME.slide)
if jump_slide == null and sq.get_pos_after_x_tick(GrandMa.ANIM_TIME.jump_slide) == grandma.grid_pos:
jump_slide = {"dir": sq.direction, "force": false}
if jump_slide:
grandma.jump_and_slide(jump_slide.dir.x, jump_slide.force)
else:
grandma.jump()
push_block()
func push_block():
var baba_pos = grandma.grid_pos
var active = get_active_squares()
for sq in active:
if !sq.active or sq.get_pos().y <= baba_pos.y:
continue
var pos_1 = sq.get_pos_after_x_tick(0)
var pos_2 = sq.get_pos_after_x_tick(1)
if baba_pos.x == pos_1.x:
field.push(sq, true)
elif baba_pos.x == pos_2.x:
field.push(sq, false)
# if int(baba.y) != int(block.y): # and int(baba.x) == int(block.x):
# yield(prepare_jump(sq), "completed")
# field.push(sq)
func prepare_jump(sq):
var bab = grandma.position.x
var bl = sq.position.x + sq.get_parent().position.x
var s = abs(bab - bl)
var t = s / sq.speed.x
tw.ip(grandma, "scale", Vector2(1,1), Vector2(0.1, 0.1), t/2)
yield(Time.wait(t/2),"completed")
tw.ip(grandma, "scale", Vector2(0.1,0.1), Vector2(1, 1), t/2)
yield(Time.wait(t/2),"completed")
func get_active_squares():
var arr = get_tree().get_nodes_in_group("square")
return arr
func _draw():
if DEBUG:
draw_line(Vector2(0, 120), Vector2(0, -1800), Color("808080ff"), 1, true)
for k in 1920/75:
for i in 1080/150:
for j in 2:
var x = 75+i*75
x *= 1 if j else -1
draw_line(Vector2(x,120), Vector2(x, -1800), Color("808080ff") if i % 2 else Color("a0ff8080"), (1 if i % 2 else 3), true)
var y = -75*k
draw_line(Vector2(-620,y), Vector2(620, y), Color("808080ff") if k % 2 else Color("a0ff8080"), (1 if k % 2 else 3), true)