Skip to content

Commit da06479

Browse files
WIP: Config generator
1 parent ff85dcc commit da06479

File tree

2 files changed

+242
-0
lines changed

2 files changed

+242
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,217 @@
1+
package indigoplugin.generators
2+
3+
import indigoplugin.IndigoOptions
4+
5+
object ConfigGen {
6+
7+
def generate(
8+
outDir: os.Path,
9+
moduleName: String,
10+
fullyQualifiedPackage: String,
11+
indigoOptions: IndigoOptions
12+
): Seq[os.Path] = {
13+
14+
val wd = outDir / Generators.OutputDirName
15+
16+
os.makeDir.all(wd)
17+
18+
val file = wd / s"$moduleName.scala"
19+
20+
val contents =
21+
s"""package $fullyQualifiedPackage
22+
|
23+
|// DO NOT EDIT: Generated by Indigo.
24+
|object $moduleName:
25+
|
26+
| val config: GameConfig =
27+
| GameConfig(
28+
| viewport = GameViewport(${indigoOptions.metadata.width}, ${indigoOptions.metadata.height}),
29+
| frameRateLimit = Option(FPS.`60`),
30+
| clearColor = ${extractBgColor(indigoOptions.metadata.backgroundColor)},
31+
| magnification = 1,
32+
| transparentBackground = false,
33+
| resizePolicy = ResizePolicy.Resize,
34+
| advanced = AdvancedGameConfig(
35+
| renderingTechnology = WebGL2WithFallback,
36+
| antiAliasing = false,
37+
| premultipliedAlpha = true,
38+
| batchSize = 256,
39+
| autoLoadStandardShaders = true,
40+
| disableContextMenu = true
41+
| )
42+
| )
43+
|""".stripMargin
44+
45+
os.write.over(file, contents)
46+
47+
Seq(file)
48+
}
49+
50+
def extractBgColor(backgroundColor: String): String =
51+
backgroundColor.replace(" ", "") match {
52+
case c if c.matches(extractRGBA) =>
53+
"RGBA.White"
54+
55+
case c if c.matches(extractRGB) =>
56+
"RGBA.White"
57+
58+
case c if c.matches(hexColorMatch) =>
59+
"RGBA.White"
60+
61+
case c if colorLookUp.keySet.contains(c.toLowerCase) =>
62+
"RGBA.White"
63+
64+
case _ =>
65+
"RGBA.White"
66+
}
67+
68+
private val hexColorMatch: String = "#[A-Z0-9]*" // Remember to remove whitespace first.
69+
private val extractRGB: String = """^rgb\(([0-9]*),([0-9]*),([0-9]*)\)""" // Remember to remove whitespace first.
70+
private val extractRGBA: String =
71+
"""^rgba\(([0-9]*),([0-9]*),([0-9]*),([0-9]*)\)""" // Remember to remove whitespace first.
72+
73+
private val colorLookUp: Map[String, String] =
74+
Map(
75+
"AliceBlue" -> "#F0F8FF",
76+
"AntiqueWhite" -> "#FAEBD7",
77+
"Aqua" -> "#00FFFF",
78+
"Aquamarine" -> "#7FFFD4",
79+
"Azure" -> "#F0FFFF",
80+
"Beige" -> "#F5F5DC",
81+
"Bisque" -> "#FFE4C4",
82+
"Black" -> "#000000",
83+
"BlanchedAlmond" -> "#FFEBCD",
84+
"Blue" -> "#0000FF",
85+
"BlueViolet" -> "#8A2BE2",
86+
"Brown" -> "#A52A2A",
87+
"BurlyWood" -> "#DEB887",
88+
"CadetBlue" -> "#5F9EA0",
89+
"Chartreuse" -> "#7FFF00",
90+
"Chocolate" -> "#D2691E",
91+
"Coral" -> "#FF7F50",
92+
"CornflowerBlue" -> "#6495ED",
93+
"Cornsilk" -> "#FFF8DC",
94+
"Crimson" -> "#DC143C",
95+
"Cyan" -> "#00FFFF",
96+
"DarkBlue" -> "#00008B",
97+
"DarkCyan" -> "#008B8B",
98+
"DarkGoldenRod" -> "#B8860B",
99+
"DarkGrey" -> "#A9A9A9",
100+
"DarkGreen" -> "#006400",
101+
"DarkKhaki" -> "#BDB76B",
102+
"DarkMagenta" -> "#8B008B",
103+
"DarkOliveGreen" -> "#556B2F",
104+
"Darkorange" -> "#FF8C00",
105+
"DarkOrchid" -> "#9932CC",
106+
"DarkRed" -> "#8B0000",
107+
"DarkSalmon" -> "#E9967A",
108+
"DarkSeaGreen" -> "#8FBC8F",
109+
"DarkSlateBlue" -> "#483D8B",
110+
"DarkSlateGrey" -> "#2F4F4F",
111+
"DarkTurquoise" -> "#00CED1",
112+
"DarkViolet" -> "#9400D3",
113+
"DeepPink" -> "#FF1493",
114+
"DeepSkyBlue" -> "#00BFFF",
115+
"DimGray" -> "#696969",
116+
"DodgerBlue" -> "#1E90FF",
117+
"FireBrick" -> "#B22222",
118+
"FloralWhite" -> "#FFFAF0",
119+
"ForestGreen" -> "#228B22",
120+
"Fuchsia" -> "#FF00FF",
121+
"Gainsboro" -> "#DCDCDC",
122+
"GhostWhite" -> "#F8F8FF",
123+
"Gold" -> "#FFD700",
124+
"GoldenRod" -> "#DAA520",
125+
"Grey" -> "#808080",
126+
"Green" -> "#008000",
127+
"GreenYellow" -> "#ADFF2F",
128+
"HoneyDew" -> "#F0FFF0",
129+
"HotPink" -> "#FF69B4",
130+
"IndianRed" -> "#CD5C5C",
131+
"Indigo" -> "#4B0082",
132+
"Ivory" -> "#FFFFF0",
133+
"Khaki" -> "#F0E68C",
134+
"Lavender" -> "#E6E6FA",
135+
"LavenderBlush" -> "#FFF0F5",
136+
"LawnGreen" -> "#7CFC00",
137+
"LemonChiffon" -> "#FFFACD",
138+
"LightBlue" -> "#ADD8E6",
139+
"LightCoral" -> "#F08080",
140+
"LightCyan" -> "#E0FFFF",
141+
"LightGoldenRodYellow" -> "#FAFAD2",
142+
"LightGrey" -> "#D3D3D3",
143+
"LightGreen" -> "#90EE90",
144+
"LightPink" -> "#FFB6C1",
145+
"LightSalmon" -> "#FFA07A",
146+
"LightSeaGreen" -> "#20B2AA",
147+
"LightSkyBlue" -> "#87CEFA",
148+
"LightSlateGrey" -> "#778899",
149+
"LightSteelBlue" -> "#B0C4DE",
150+
"LightYellow" -> "#FFFFE0",
151+
"Lime" -> "#00FF00",
152+
"LimeGreen" -> "#32CD32",
153+
"Linen" -> "#FAF0E6",
154+
"Magenta" -> "#FF00FF",
155+
"Maroon" -> "#800000",
156+
"MediumAquaMarine" -> "#66CDAA",
157+
"MediumBlue" -> "#0000CD",
158+
"MediumOrchid" -> "#BA55D3",
159+
"MediumPurple" -> "#9370D8",
160+
"MediumSeaGreen" -> "#3CB371",
161+
"MediumSlateBlue" -> "#7B68EE",
162+
"MediumSpringGreen" -> "#00FA9A",
163+
"MediumTurquoise" -> "#48D1CC",
164+
"MediumVioletRed" -> "#C71585",
165+
"MidnightBlue" -> "#191970",
166+
"MintCream" -> "#F5FFFA",
167+
"MistyRose" -> "#FFE4E1",
168+
"Moccasin" -> "#FFE4B5",
169+
"NavajoWhite" -> "#FFDEAD",
170+
"Navy" -> "#000080",
171+
"OldLace" -> "#FDF5E6",
172+
"Olive" -> "#808000",
173+
"OliveDrab" -> "#6B8E23",
174+
"Orange" -> "#FFA500",
175+
"OrangeRed" -> "#FF4500",
176+
"Orchid" -> "#DA70D6",
177+
"PaleGoldenRod" -> "#EEE8AA",
178+
"PaleGreen" -> "#98FB98",
179+
"PaleTurquoise" -> "#AFEEEE",
180+
"PaleVioletRed" -> "#D87093",
181+
"PapayaWhip" -> "#FFEFD5",
182+
"PeachPuff" -> "#FFDAB9",
183+
"Peru" -> "#CD853F",
184+
"Pink" -> "#FFC0CB",
185+
"Plum" -> "#DDA0DD",
186+
"PowderBlue" -> "#B0E0E6",
187+
"Purple" -> "#800080",
188+
"Red" -> "#FF0000",
189+
"RosyBrown" -> "#BC8F8F",
190+
"RoyalBlue" -> "#4169E1",
191+
"SaddleBrown" -> "#8B4513",
192+
"Salmon" -> "#FA8072",
193+
"SandyBrown" -> "#F4A460",
194+
"SeaGreen" -> "#2E8B57",
195+
"SeaShell" -> "#FFF5EE",
196+
"Sienna" -> "#A0522D",
197+
"Silver" -> "#C0C0C0",
198+
"SkyBlue" -> "#87CEEB",
199+
"SlateBlue" -> "#6A5ACD",
200+
"SlateGrey" -> "#708090",
201+
"Snow" -> "#FFFAFA",
202+
"SpringGreen" -> "#00FF7F",
203+
"SteelBlue" -> "#4682B4",
204+
"Tan" -> "#D2B48C",
205+
"Teal" -> "#008080",
206+
"Thistle" -> "#D8BFD8",
207+
"Tomato" -> "#FF6347",
208+
"Turquoise" -> "#40E0D0",
209+
"Violet" -> "#EE82EE",
210+
"Wheat" -> "#F5DEB3",
211+
"White" -> "#FFFFFF",
212+
"WhiteSmoke" -> "#F5F5F5",
213+
"Yellow" -> "#FFFF00",
214+
"YellowGreen" -> "#9ACD32"
215+
).map { case (k, v) => k.toLowerCase -> v }
216+
217+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package indigoplugin.generators
2+
3+
class ConfigGenTests extends munit.FunSuite {
4+
5+
test("Can detect/extract rgba") {
6+
assert(1 == 2)
7+
}
8+
9+
test("Can detect/extract rgb") {
10+
assert(1 == 2)
11+
}
12+
13+
test("Can detect/extract hex") {
14+
assert(1 == 2)
15+
}
16+
17+
test("Can detect/extract named colour") {
18+
assert(1 == 2)
19+
}
20+
21+
test("Will fall back to black") {
22+
assert(1 == 2)
23+
}
24+
25+
}

0 commit comments

Comments
 (0)