-
Notifications
You must be signed in to change notification settings - Fork 1
/
CorridorsPCG.gd
130 lines (110 loc) · 2.48 KB
/
CorridorsPCG.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
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
extends Node2D
# Declare member variables here. Examples:
# var a = 2
# var b = "text"
# Called when the node enters the scene tree for the first time.
func _ready():
rand_seed(2)
pass # Replace with function body.
const Norte = 1
const Sur = 2
const Este = 3
const Oeste = 4
var dir = Este
var giro_dir = Este
var tipo = 0
var llave_codigo = 0
var angulos = {
Norte: 270,
Sur: 90,
Este: 0,
Oeste: 180,
}
var tiles = {
0: "pasillo.png",
1: "pasillo-1hab.png",
2: "pasillo-2hab.png",
3: "pasillo-trampa.png",
4: "esquina.png",
}
var tile_res = preload("res://Tile.tscn")
var pos = Vector2(1,10)
const escala = 2
var total = 400
func generar():
var tile = tile_res.instance()
cambiar_tipo()
tile.texture = load("res://Map/"+tiles[tipo])
tile.scale = Vector2(escala, escala)
if tipo == 4:
tile.rotate( deg2rad(angulos[giro_dir]) )
elif tipo == 1:
tile.rotate( deg2rad(angulos[dir] + (180 if (randpcg() < 0.5) else 0)) )
else:
tile.rotate( deg2rad(angulos[dir]) )
tile.position = pos * 7 * escala;
var scene_root = get_tree().root.get_children()[0]
scene_root.add_child(tile)
avanzar()
var recto = 3
func cambiar_tipo():
if recto > 0:
if (llave_codigo != 0) and (randpcg() < 0.25):
tipo = 3
llave_codigo = 0
else:
tipo = int (randpcg()*2.5)
if (llave_codigo == 0) and ((tipo == 1) or (tipo == 2)) and (randpcg() < 0.25):
llave_codigo = int( rand_range(1111, 9999) )
recto -= 1
else:
girar()
tipo = 4
recto = int ( 0 + randpcg()*5 )
func girar():
match dir:
Norte:
dir = Este
giro_dir = Norte
Sur:
dir = Este
giro_dir = Oeste
Este:
dir = Sur if (randpcg() < 0.50) else Norte
if dir == Sur:
giro_dir = Este
else:
giro_dir = Sur
func avanzar():
match dir:
Norte:
pos.y -= 1
Sur:
pos.y += 1
Este:
pos.x += 1
Oeste:
pos.x -= 1
# Called every frame. 'delta' is the elapsed time since the previous frame.
var time = 0
func _process(delta):
time -= delta
if time <= 0:
time = 0.1
if total > 0:
total -= 1
generar()
# Implementamos una función de random propia
# Esto es así para poder generar el mismo nivel
# con el mismo valor de inicialización (rand_w)
var rand_x = 123456789
var rand_y = 362436069
var rand_z = 521288629
var rand_w = 88675123 # Se inicializa con este valor
func randpcg():
var t = rand_x ^ ((rand_x << 11) & 0xFFFFFFFF) # 32bit
rand_x = rand_y
rand_y = rand_z
rand_z = rand_w
rand_w = (rand_w ^ (rand_w >> 19)) ^ (t ^ (t >> 8))
return float(rand_w) / float(4294967295)