-
Notifications
You must be signed in to change notification settings - Fork 1
/
globalConfig.gd
248 lines (210 loc) · 7.38 KB
/
globalConfig.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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
extends Node
var level = [] # Dados de configuração, ordenado por fase, em formato dicionario
var error = [false,0] # Some error happened, so we need stop program. Second coordinate represents the erro number
var PlayerName = ""
var packName = "" #Valor do pacote escolhido
var sequR = ["","","","","","",""] #sequência que define se a jogada corrente é ou não aleatória
var seqKick = ["","","","","","",""] #sequência de chutes
# Cada nome de jogo está associado a uma cena inicial.
# Talvez criar um id_game seja melhor do que o "nome"
var menu_idToScene = {
1:"",
2:"res://scenes/jogo_goleiro/nivel1.tscn",
3:"",
4:"",
5:""
}
func get_scene(idGame):
if menu_idToScene.has(idGame) : return menu_idToScene[idGame]
else: null
func get_menu():
var menuFile = level[0]
var order = []
var menu = []
if !menuFile.has("menus") : return null
for i in range(0,menuFile["menus"].size()):
for j in range(0,menuFile["menus"].size()):
if i == int(menuFile["menus"][j]["sequMenu"]) && i != 0:
menu.insert(i-1,{"gameID":int(menuFile["menus"][j]["game"]), "title":menuFile["menus"][j]["title"]})
break
return menu
func get_numLvls():
return level.size()
func checkConfigFile():
pass
func set_playerName(name):
PlayerName = name
func get_level():
return level
func get_sequR(fase):
return sequR[fase]
func has_scoreboard(fase):
if level[fase]["scoreboard"].to_upper() == "TRUE" : return true
else: return false
func get_animationTypeJG(fase):
return level[fase]["animationTypeJG"]
func get_sequ(fase):
var seqPack = level[fase]["sequ"]
var seqRPack = level[fase]["sequR"]
if seqKick[fase] == "" || sequR[fase] == "":
# É necessário gerar a sequência de chutes e
# a sequência que informa a aleatoriedade ou
# não do chute
if level[fase]["readSequ"] == "true" :
# Gerando sequência a partir da sequência
# dada no arquivo de configuração
for i in range(0,get_qntChutes(fase)):
seqKick[fase] += seqPack[i % seqPack.length()]
sequR[fase] += seqRPack[i % seqRPack.length()]
else:
seqKick[fase] = get_node("/root/globalScript").genSeq(get_qntChutes(fase), get_tree(fase))
sequR[fase] = gen_sequR(fase,seqKick[fase])
return seqKick[fase]
func gen_sequR(fase,sequence):
var tree = get_tree(fase)
var sequR = ""
var key = ""
for i in range(0,sequence.length()):
key = sequence.left(i)
for j in range(0,key.length()):
if tree.has(key.right(j)):
if tree[key.right(j)].has(1.0):sequR += "n"
else: sequR += "y"
break
# O sufixo inicial é sorteado dentro os possÃveis,
# então colocaremos como aleatório, mas talvez fosse
# razoável marcar diferente
var sufix = ""
for i in range(0,sequence.length()-sequR.length()):
sufix += "-"
sequR = sufix + sequR
return sequR.to_upper()
func get_playsToRelax(fase):
return int(level[fase]["playsToRelax"])
func get_scoreboard(fase):
return level[fase]["scoreboard"]
func get_finalScoreboard(fase):
return level[fase]["finalScoreboard"]
func has_phaseZero():
if level[0]["zeroPhaseJG"].to_upper() == "TRUE" : return true
else: return false
func get_animationTypeOthers(fase):
return level[fase]["animationTypeOthers"]
func get_seqMode(fase):
if level[fase]["readSequ"] == "true" : return "readSequence"
else: return "readTree"
func setPackName(name):
packName = name
func get_packName():
return packName
func get_tree(fase):
var treeFile = level[fase]
var tree ={}
if !treeFile.has("tree") :
return null
for i in range(0,treeFile["tree"].size()):
for j in treeFile["tree"][i].keys():
tree[j] = treeFile["tree"][i][j]
return tree
func get_qntChutes(fase):
return int(level[fase]["limitPlays"])
func get_id(fase):
return level[fase]["id"]
func get_playerName():
return PlayerName
func copyDirectory(from, to):
var dir = Directory.new()
dir.make_dir_recursive(to)
dir.open(from)
dir.list_dir_begin()
var fileName = dir.get_next()
while (fileName != ""):
if (fileName == "." || fileName == ".."):
fileName = dir.get_next()
continue
if dir.current_is_dir(): copyDirectory(from+fileName+"/",to+fileName+"/")
else: dir.copy(from+fileName,to+fileName)
fileName = dir.get_next()
func loadPacketNames():
var dir = Directory.new()
var dicPackets = {}
# Checar se existe algum pacote. Caso contrário, copia o "padrão"
if !dir.dir_exists ("user://packets/"): pass
copyDirectory("res://defaultPacket/", "user://packets/")
# abrir o diretorio user:// onde estao os pacotes
if dir.open( "user://packets/" ) == OK:
# e encontrar todos os pacotes disponiveis no diretorio
dir.list_dir_begin()
var fileName = dir.get_next()
while (fileName != ""):
if (fileName == "." || fileName == ".."):
fileName = dir.get_next()
continue
if dir.current_is_dir():
# encontrado um diretorio de pacotes
dicPackets[fileName] = dir.get_current_dir() + "/" + fileName
fileName = dir.get_next()
else:
# se nao existe o diretorio, gravar no log
print("Erro: não existe o diretório packets em ", OS.get_data_dir())
if dicPackets.size() == 0:
print("Erro: não existem pacotes no diretü…µ³ ório ", OS.get_data_dir())
return dicPackets
func loadPacketConfFiles(packetPath):
var dir = Directory.new()
var file = File.new()
var fileName
var path # caminho completo, nao apenas fileName, para o open
var text # conteudo do arquivo jason
var dict = {} # apenas um nivel, nao encontrei sintaxe para var dict = [ {} ]
var fases = [] # ordem dos levels, dado que a leitura no diretorio nao garante ordem
var tmpLevel = [] # recebe as fases na ordem de leitura, em formato dicionario
level = [] # Clean level array
# abrir o diretorio de pacotes selecionado
if dir.open(packetPath) == OK:
# e percorrer a lista de arquivos (nao diretorios)
dir.list_dir_begin()
fileName = dir.get_next()
while (fileName != ""):
# Guarda o path completo próximo arquivo/diretório. Será usado no file.open
path = packetPath + "/" + fileName
# ignorar diretorios
if !dir.current_is_dir():
file.open(path, file.READ)
text = file.get_as_text()
# when you do something like content.append(info), you aren't making a copy of the data,
# you are simply appending a reference to the data.
var dict = {}
# pode haver outros arquivos no diretorio, mas soh interessam os de formato json
if dict.parse_json(text) == OK:
fases.append(int(dict["level"]));
tmpLevel.append(dict)
else: print(text)
file.close()
fileName = dir.get_next()
# os levels indicados nos arquivos de configuracao devem ser sequenciais
# nao obrigatoriamente iniciando em zero
var tmpFases = [] + fases
tmpFases.sort();
# deve haver pelo menor 1 arquivo de configuracao para fazer uma fase
if tmpFases.size() < 1:
print("Erro: número de arquivos de configuração inválido (", tmpFases.size(),") em ", OS.get_data_dir())
return !OK
var foraDeOrdem = false
for i in range(0,tmpFases.size()-1):
if tmpFases[i] != tmpFases[i]:
foraDeOrdem = true
if foraDeOrdem:
# ha falha na sequencia
print("Erro: o parâmetro level nos arquivos não segue a sequência esperada de 0 a N: ", tmpFases)
return !OK
else:
# ordenar levels pela sequencia de fases: level[0] fase 1, level[1] fase 2, ...
# tmpfases está ordenado, fases está na ordem de leitura
var j
for i in range(tmpFases[0], tmpFases[tmpFases.size()-1]+1):
j = 0
while fases[j] != i:
j = j + 1
level.append(tmpLevel[j])
return OK