import sys if len(sys.argv) <= 1: exit(0) fielddef = [ ("Amb", "RGB"), ("Amb_Obj", "RGB"), ("Dir", "RGB"), ("Sky top", "RGB"), ("Sky bot", "RGB"), ("SunCore", "RGB"), ("SunCorona", "RGB"), ("SunSz", "float"), ("SprSz", "float"), ("SprBght", "float"), ("Shdw", "int"), ("LightShd", "int"), ("PoleShd", "int"), ("FarClp", "float"), ("FogSt", "float"), ("LightOnGround", "float"), ("LowCloudsRGB", "RGB"), ("BottomCloudRGB", "RGB"), ("WaterRGBA", "RGBA"), # actually read as %f ("Alpha1", "int"), # actually read as %f ("RGB1", "RGB"), # actually read as %f ("Alpha2", "int"), # actually read as %f ("RGB2", "RGB"), # actually read as %f ("CloudAlpha", "int"), # actually read as %f ("IntensityLimit", "int"), ("WaterFogAlpha", "int"), ("DirMult", "float") ] fieldnames = [d[0] for d in fielddef] weathernames = ["EXTRASUNNY_LA", "SUNNY_LA", "EXTRASUNNY_SMOG_LA", "SUNNY_SMOG_LA", "CLOUDY_LA", "SUNNY_SF", "EXTRASUNNY_SF", "CLOUDY_SF", "RAINY_SF", "FOGGY_SF", "SUNNY_VEGAS", "EXTRASUNNY_VEGAS", "CLOUDY_VEGAS", "EXTRASUNNY_COUNTRYSIDE", "SUNNY_COUNTRYSIDE", "CLOUDY_COUNTRYSIDE", "RAINY_COUNTRYSIDE", "EXTRASUNNY_DESERT", "SUNNY_DESERT", "SANDSTORM_DESERT", "UNDERWATER", "EXTRACOLOURS_1", "EXTRACOLOURS_2"] NWEATHER = len(weathernames) timenames = ["Midnight", "5AM", "6AM", "7AM", "Midday", "7PM", "8PM", "10PM"] NHOUR = len(timenames) def toNumbers(f): def getval(i, t): if t == 'int': try: return (int(f[i]), i+1) except: return (-1000, i+i) elif t == 'float': try: return (float(f[i]), i+1) except: return (1.0, i+i) elif t == 'RGB': try: return ([int(f[i]), int(f[i+1]), int(f[i+2])], i+3) except: return ([-100, -100, -100], i+3) elif t == 'RGBA': try: return ([int(f[i]), int(f[i+1]), int(f[i+2]), int(f[i+3])], i+4) except: return ([-100, -100, -100, -100], i) i = 0 dict = {} for d in fielddef: (dict[d[0]], i) = getval(i, d[1]) return dict def interpolate(l1, l2, f): out = {} for d in fielddef: if d[1] == 'int': out[d[0]] = int((1.0-f)*l1[d[0]] + f*l2[d[0]]) elif d[1] == 'float': out[d[0]] = round((1.0-f)*l1[d[0]] + f*l2[d[0]],2) elif d[1] == 'RGB': out[d[0]] = [int((1.0-f)*l1[d[0]][0] + f*l2[d[0]][0]), int((1.0-f)*l1[d[0]][1] + f*l2[d[0]][1]), int((1.0-f)*l1[d[0]][2] + f*l2[d[0]][2])] elif d[1] == 'RGBA': out[d[0]] = [int((1.0-f)*l1[d[0]][0] + f*l2[d[0]][0]), int((1.0-f)*l1[d[0]][1] + f*l2[d[0]][1]), int((1.0-f)*l1[d[0]][2] + f*l2[d[0]][2]), int((1.0-f)*l1[d[0]][3] + f*l2[d[0]][3])] return out def make24h(lines): w = [] w.append(lines[0]) # midnight w.append(interpolate(lines[0], lines[1], 1.0/5.0)) # 1am w.append(interpolate(lines[0], lines[1], 2.0/5.0)) # 2am w.append(interpolate(lines[0], lines[1], 3.0/5.0)) # 3am w.append(interpolate(lines[0], lines[1], 4.0/5.0)) # 4am w.append(lines[1]) # 5am w.append(lines[2]) # 6am w.append(lines[3]) # 7am w.append(interpolate(lines[3], lines[4], 1.0/5.0)) # 8am w.append(interpolate(lines[3], lines[4], 2.0/5.0)) # 9am w.append(interpolate(lines[3], lines[4], 3.0/5.0)) # 10am w.append(interpolate(lines[3], lines[4], 4.0/5.0)) # 11am w.append(lines[4]) # midday w.append(interpolate(lines[4], lines[5], 1.0/7.0)) # 1pm w.append(interpolate(lines[4], lines[5], 2.0/7.0)) # 2pm w.append(interpolate(lines[4], lines[5], 3.0/7.0)) # 3pm w.append(interpolate(lines[4], lines[5], 4.0/7.0)) # 4pm w.append(interpolate(lines[4], lines[5], 5.0/7.0)) # 5pm w.append(interpolate(lines[4], lines[5], 6.0/7.0)) # 6pm w.append(lines[5]) # 7pm w.append(lines[6]) # 8pm w.append(interpolate(lines[6], lines[7], 1.0/2.0)) # 9pm w.append(lines[7]) # 8pm w.append(interpolate(lines[7], lines[0], 2.0/3.0)) # 11pm return w def toStrings(weather): s = [] for d in fielddef: if d[1] == 'RGB' or d[1] == 'RGBA': s += [str(x) for x in weather[d[0]]] else: s += [str(weather[d[0]])] return s def getFieldWidths(lines): widths = [] for i in range(len(lines[0])): width = 0 for l in lines: if len(l[i]) > width: width = len(l[i]) widths.append(width) return widths def alignLine(fields, widths): return " ".join([f.rjust(w) for f, w in zip(fields, widths)]) def alignLineR(fields, widths): return " ".join([f.ljust(w) for f, w in zip(fields, widths)]) def combineTuples(lines, widths): newlines = [] for line in lines: l = [f.rjust(w) for f, w in zip(line, widths)] x = [] i = 0 for d in fielddef: if d[1] == 'RGB': x.append(" ".join(l[i:i+3])) i += 3 elif d[1] == 'RGBA': x.append(" ".join(l[i:i+4])) i += 4 else: x.append(l[i]) i += 1 newlines.append(x) return newlines path = sys.argv[1]; f = open(path, 'r') lines = [toNumbers(l.strip('\n').split()) for l in f.readlines() if l[0:2] != '//'] f.close() newlines = [] for i in range(0, 21): newlines += make24h(lines[i*8:(i+1)*8]) newlines += lines[21*8:23*8] for i in range(0, 32): newlines.append(lines[23*8-1]) lines = newlines timenames = ["Midnight", "1AM", "2AM", "3AM", "4AM", "5AM", "6AM", "7AM", "8AM", "9AM", "10AM", "11AM", "Midday", "1PM", "2PM", "3PM", "4PM", "5PM", "6PM", "7PM", "8PM", "9PM", "10PM", "11PM"] NHOUR = len(timenames) ## print compact = False lines = [toStrings(l) for l in lines] widths = getFieldWidths(lines) lines = combineTuples(lines, widths) widths = getFieldWidths([fieldnames] + lines) i = 0 for l in lines: if i % NHOUR == 0: print("//") print("/////////////////////////////////////////// " + weathernames[i//NHOUR]) print("//") if NHOUR == 24 and i % 12 == 0 or \ i % NHOUR == 0: if not compact or i % NHOUR == 0: print("// " + alignLineR(fieldnames, widths)) # if not compact or i % 24 == 0 or i % 24 == 12: if not compact: print("// "+timenames[i%NHOUR]) print(" " + alignLineR(l, widths)) i += 1