extends ImmediateGeometry var signature var u0 var xoffset var yoffset var minheight var maxheight var xverticesnumber var yverticesnumber var stretch var u1 var u2 var u3 var u4 var version var u6 var u7 var u8 var tex var edges var file = File.new() var vertices = [] var triangles = [] func _ready(): return clear() readgti("res://default.gti") # triangles = [[-1, 0, -1, 0, 1, 255, 251], [-1,0,1, 0, 224, 255, 0], [1,0,-1, 0, 1, 0, 0]] print("vertices: "+str(len(vertices))) print("draw "+str(len(triangles))) assert(len(triangles) % 3 == 0) begin(Mesh.PRIMITIVE_TRIANGLES) for i in range(len(triangles)): var vertex = triangles[i] if not vertex: print(i) else: print("color: ("+str(vertex[6] / 255.0)+")") set_color(Color(vertex[4] / 255.0, vertex[5] / 255.0, vertex[6] / 255.0)) add_vertex(Vector3(vertex[0], vertex[2], vertex[1])) end() func fill(): print("version="+str(version)) # fill read values print("fill") var p = 0 while p < xverticesnumber * yverticesnumber: var b = file.get_8() if b >= 0x80: while b != 0x00: if p >= xverticesnumber * yverticesnumber: return b = (b + 1) & 0xFF p+=1 else: while b != 0xff: if p >= xverticesnumber * yverticesnumber: return if version != 7: vertices[p][2] = file.get_float() # height vertices[p][3] = file.get_8() # triangulation vertices[p][4] = file.get_8() # R vertices[p][5] = file.get_8() # G vertices[p][6] = file.get_8() # B else: vertices[p][2] = file.get_float() # height vertices[p][3] = file.get_8() # triangulation vertices[p][4] = file.get_8() # R vertices[p][5] = file.get_8() # G vertices[p][6] = file.get_8() # B var unk = file.get_8() # unk # print("["+ str(vertices[p][0]) + ", "+ str(vertices[p][1])+", "+ str(vertices[p][2])+", "+ str(vertices[p][3])+", "+ str(vertices[p][4])+", "+ str(vertices[p][5])+", "+ str(vertices[p][6])+", "+str(b)+"]") p+=1 b = (b - 1) & 0xFF func readgti(filename): file.open(filename, File.READ) if not file.is_open(): get_tree().quit() return signature = file.get_32() u0 = file.get_32() xoffset = file.get_float() yoffset = file.get_float() minheight = file.get_float() maxheight = file.get_float() xverticesnumber = file.get_32() yverticesnumber = file.get_32() stretch = file.get_float() u1 = file.get_float() u2 = file.get_float() u3 = file.get_float() u4 = file.get_float() version = file.get_16() u6 = file.get_16() u7 = file.get_float() u8 = file.get_float() tex = file.get_buffer(32).get_string_from_ascii() vertices.resize(xverticesnumber * yverticesnumber) # initialize empty terrain print("init") for y in range(yverticesnumber): for x in range(xverticesnumber): vertices[y * xverticesnumber + x] = [] vertices[y * xverticesnumber + x].append(xoffset + x * stretch) # 0: x vertices[y * xverticesnumber + x].append(yoffset + y * stretch) # 1: y vertices[y * xverticesnumber + x].append(minheight) # 2: height vertices[y * xverticesnumber + x].append(0) # 3: triangulation value vertices[y * xverticesnumber + x].append(0) # 4: R vertices[y * xverticesnumber + x].append(0) # 5: G vertices[y * xverticesnumber + x].append(0) # 6: B fill() file.close() # sort triangles print("sort") var i = 0 # triangles.resize(2*len(vertices)) for y in range(yverticesnumber-1): for x in range(xverticesnumber-1): var b = (vertices[y * xverticesnumber + x][3] & 7) % 128 if b == 4 or b == 5 or b == 7: triangles.append(vertices[(y+1) * xverticesnumber + x]) triangles.append(vertices[y * xverticesnumber + x]) triangles.append(vertices[(y+1) * xverticesnumber + (x+1)]) if b == 5 or b == 3: triangles.append(vertices[y * xverticesnumber + (x + 1)]) triangles.append(vertices[y * xverticesnumber + x]) triangles.append(vertices[(y + 1) * xverticesnumber + (x + 1)]) for y in range (yverticesnumber-1): for x in range(xverticesnumber-1): var b = (vertices[y * xverticesnumber + x][3] & 7) % 128 if b == 1 or b == 6: triangles.append(vertices[(y + 1) * xverticesnumber + x]) triangles.append(vertices[y * xverticesnumber + x]) triangles.append(vertices[y * xverticesnumber + (x + 1)]) if b == 2 or b == 6: triangles.append(vertices[y * xverticesnumber + (x + 1)]) triangles.append(vertices[(y + 1) * xverticesnumber + x]) triangles.append(vertices[(y + 1) * xverticesnumber + (x + 1)])