naev 0.10.4
colours_c_gen.py
1#!/usr/bin/env python3
2
3def gammaToLinear(x):
4 if x <= 0.04045:
5 return x / 12.92
6 return pow((x + 0.055) / 1.055, 2.4)
7
8class Colour:
9 def __init__(self, name, r, g, b, a=1.0):
10 self.name = name
11 self.r = gammaToLinear( r )
12 self.g = gammaToLinear( g )
13 self.b = gammaToLinear( b )
14 self.a = a
15
16 def write_header(self, f):
17 f.write(f"extern const glColour c{self.name};\n")
18
19 def write_source(self, f):
20 f.write(f"const glColour c{self.name} = {{ .r={self.r}, .g={self.g}, .b={self.b}, .a={self.a} }};\n")
21
22
23COLOURS = [
24 Colour( "White", 1.00, 1.00, 1.00 ),
25 Colour( "Grey90", 0.90, 0.90, 0.90 ),
26 Colour( "Grey80", 0.80, 0.80, 0.80 ),
27 Colour( "Grey70", 0.70, 0.70, 0.70 ),
28 Colour( "Grey60", 0.60, 0.60, 0.60 ),
29 Colour( "Grey50", 0.50, 0.50, 0.50 ),
30 Colour( "Grey45", 0.45, 0.45, 0.45 ),
31 Colour( "Grey40", 0.40, 0.40, 0.40 ),
32 Colour( "Grey35", 0.35, 0.35, 0.35 ),
33 Colour( "Grey30", 0.30, 0.30, 0.30 ),
34 Colour( "Grey25", 0.25, 0.25, 0.25 ),
35 Colour( "Grey20", 0.20, 0.20, 0.20 ),
36 Colour( "Grey15", 0.15, 0.15, 0.15 ),
37 Colour( "Grey10", 0.10, 0.10, 0.10 ),
38 Colour( "Grey5", 0.05, 0.05, 0.05 ),
39 Colour( "Black", 0.00, 0.00, 0.00 ),
40
41 # Greens
42 Colour( "DarkGreen", 0.10, 0.50, 0.10 ),
43 Colour( "Green", 0.20, 0.80, 0.20 ),
44 Colour( "PrimeGreen", 0.00, 1.00, 0.00 ),
45 # Reds
46 Colour( "DarkRed", 0.60, 0.10, 0.10 ),
47 Colour( "Red", 0.80, 0.20, 0.20 ),
48 Colour( "PrimeRed", 1.00, 0.00, 0.00 ),
49 Colour( "BrightRed", 1.00, 0.60, 0.60 ),
50 # Oranges
51 Colour( "Orange", 0.90, 0.70, 0.10 ),
52 # Yellows
53 Colour( "Gold", 1.00, 0.84, 0.00 ),
54 Colour( "Yellow", 0.80, 0.80, 0.00 ),
55 # Blues
56 Colour( "MidnightBlue", 0.10, 0.10, 0.4 ),
57 Colour( "DarkBlue", 0.10, 0.10, 0.60 ),
58 Colour( "Blue", 0.20, 0.20, 0.80 ),
59 Colour( "AquaBlue", 0.30, 0.30, 0.90 ),
60 Colour( "LightBlue", 0.40, 0.40, 1.00 ),
61 Colour( "PrimeBlue", 0.00, 0.00, 1.00 ),
62 Colour( "Cyan", 0.00, 1.00, 1.00 ),
63 # Purples.
64 Colour( "Purple", 0.90, 0.10, 0.90 ),
65 Colour( "DarkPurple", 0.68, 0.18, 0.64 ),
66 # Browns.
67 Colour( "Brown", 0.59, 0.28, 0.00 ),
68 # Misc.
69 Colour( "Silver", 0.75, 0.75, 0.75 ),
70 Colour( "Aqua", 0.00, 0.75, 1.00 ),
71
72 Colour( "BlackHilight", 0.0, 0.0, 0.0, 0.4 ), # Hilight colour over black background
73
74 # Outfit slot colours
75 # Taken from https://cran.r-project.org/web/packages/khroma/vignettes/tol.html#muted
76 Colour( "OutfitHeavy", 0.8, 0.4, 0.46 ),
77 Colour( "OutfitMedium", 0.16, 0.63, 0.81 ),
78 #Colour( "OutfitMedium", 0.55, 0.8, 0.93 ),
79 Colour( "OutfitLight", 0.75, 0.7, 0.40 ),
80 # Objects
81 Colour( "Inert", 221./255., 221./255., 221./255. ),
82 Colour( "Neutral", 221./255., 204./255., 119./255. ),
83 Colour( "Friend", 68./255., 170./255., 153./255. ),
84 Colour( "Hostile", 204./255., 68./255., 153./255. ),
85 Colour( "Restricted", 221./255., 153./255., 51./255. ),
86 # Mission Markers
87 # https://packages.tesselle.org/khroma/articles/tol.html#vibrant
88 Colour( "MarkerNew", 0x33/255., 0xBB/255., 0xEE/255. ),
89 Colour( "MarkerComputer", 0x33/255., 0xBB/255., 0xEE/255. ),
90 Colour( "MarkerLow", 0x00/255., 0x99/255., 0x88/255. ),
91 Colour( "MarkerHigh", 0xEE/255., 0x77/255., 0x33/255. ),
92 Colour( "MarkerPlot", 0xEE/255., 0x33/255., 0x77/255. ),
93 # Radar
94 Colour( "Radar_player", 0.9, 0.1, 0.9 ),
95 Colour( "Radar_tPilot", 1.0, 1.0, 1.0 ),
96 Colour( "Radar_tSpob", 1.0, 1.0, 1.0 ),
97 Colour( "Radar_weap", 0.8, 0.2, 0.2 ),
98 Colour( "Radar_hilight", 0.6, 1.0, 1.0 ),
99 # Health
100 Colour( "Shield", 0.2, 0.2, 0.8 ),
101 Colour( "Armour", 0.5, 0.5, 0.5 ),
102 Colour( "Energy", 0.2, 0.8, 0.2 ),
103 Colour( "Fuel", 0.9, 0.1, 0.4 ),
104
105 # Deiz's Super Font Palette
106 Colour( "FontRed", 1.0, 0.4, 0.4 ),
107 Colour( "FontGreen", 0.6, 1.0, 0.4 ),
108 Colour( "FontBlue", 0.4, 0.6, 1.0 ),
109 Colour( "FontYellow", 1.0, 1.0, 0.5 ),
110 Colour( "FontGrey", 0.7, 0.7, 0.7 ),
111 Colour( "FontPurple", 1.0, 0.3, 1.0 ),
112 Colour( "FontOrange", 1.0, 0.7, 0.3 ),
113 Colour( "FontWhite", 0.95, 0.95, 0.95 ),
114]
115
116def write_header(f):
117 f.write(f"/* FILE GENERATED BY {__file__} */")
118
119def generate_h_file(f):
120 write_header(f)
121
122 f.write("""
123#pragma once
124
125""")
126 for col in COLOURS:
127 col.write_header( f )
128 f.write("""
129const glColour* col_fromName( const char* name );
130""")
131
132def generate_c_file(f):
133 write_header(f)
134
135 f.write("""
136#include <string.h>
137#include "colour.h"
138#include "log.h"
139
140""")
141 for col in COLOURS:
142 col.write_source( f )
143
144 # TODO optimize this part. Should be possible to speed it up immensely,
145 # although it probably won't impact Naev performance at all
146 f.write("""
147const glColour* col_fromName( const char* name )
148{
149""")
150 for col in COLOURS:
151 f.write(f" if (strcasecmp(name,\"{col.name}\")==0) return &c{col.name};\n")
152 f.write("""
153 WARN(_("Unknown colour '%s'!"),name);
154 return NULL;
155}""")
156
157with open("colours.gen.h", "w") as colours_ggen_h:
158 generate_h_file(colours_ggen_h)
159
160with open("colours.gen.c", "w") as colours_ggen_c:
161 generate_c_file(colours_ggen_c)