|
| 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 | +} |
0 commit comments