Files
2025-09-18 17:55:52 -04:00

335 lines
7.0 KiB
C++

/* Copyright 2003-2006 ROBLOX Corporation, All Rights Reserved */
#pragma once
#include "G3D/Color3.h"
#include "G3D/Color4.h"
#include "G3D/Color3uint8.h"
#include "G3D/Color4uint8.h"
#include <vector>
namespace RBX {
// A collection of official ROBLOX colors
class BrickColor
{
class BrickMap;
public:
enum Number {
brick_1 = 1,
brick_2 = 2,
brick_3 = 3,
brick_5 = 5,
brick_6 = 6,
brick_9 = 9,
brick_11 = 11,
brick_12 = 12,
brick_18 = 18,
brick_21 = 21,
brick_22 = 22,
brick_23 = 23,
brick_24 = 24,
brick_25 = 25,
brick_26 = 26,
brick_27 = 27,
brick_28 = 28,
brick_29 = 29,
brick_36 = 36,
brick_37 = 37,
brick_38 = 38,
brick_39 = 39,
brick_40 = 40,
brick_41 = 41,
brick_42 = 42,
brick_43 = 43,
brick_44 = 44,
brick_45 = 45,
brick_47 = 47,
brick_48 = 48,
brick_49 = 49,
brick_50 = 50,
brick_100 = 100,
brick_101 = 101,
brick_102 = 102,
brick_103 = 103,
brick_104 = 104,
brick_105 = 105,
brick_106 = 106,
brick_107 = 107,
brick_108 = 108,
brick_110 = 110,
brick_111 = 111,
brick_112 = 112,
brick_113 = 113,
brick_115 = 115,
brick_116 = 116,
brick_118 = 118,
brick_119 = 119,
brick_120 = 120,
brick_121 = 121,
brick_123 = 123,
brick_124 = 124,
brick_125 = 125,
brick_126 = 126,
brick_127 = 127,
brick_128 = 128,
brick_131 = 131,
brick_133 = 133,
brick_134 = 134,
brick_135 = 135,
brick_136 = 136,
brick_137 = 137,
brick_138 = 138,
brick_140 = 140,
brick_141 = 141,
brick_143 = 143,
brick_145 = 145,
brick_146 = 146,
brick_147 = 147,
brick_148 = 148,
brick_149 = 149,
brick_150 = 150,
brick_151 = 151,
brick_153 = 153,
brick_154 = 154,
brick_157 = 157,
brick_158 = 158,
brick_168 = 168,
brick_176 = 176,
brick_178 = 178,
brick_179 = 179,
brick_180 = 180,
brick_190 = 190,
brick_191 = 191,
brick_192 = 192,
brick_193 = 193,
brick_194 = 194,
brick_195 = 195,
brick_196 = 196,
brick_198 = 198,
brick_199 = 199,
brick_200 = 200,
brick_208 = 208,
brick_209 = 209,
brick_210 = 210,
brick_211 = 211,
brick_212 = 212,
brick_213 = 213,
brick_216 = 216,
brick_217 = 217,
brick_218 = 218,
brick_219 = 219,
brick_220 = 220,
brick_221 = 221,
brick_222 = 222,
brick_223 = 223,
brick_224 = 224,
brick_225 = 225,
brick_226 = 226,
brick_232 = 232,
brick_268 = 268,
brick_301 = 301,
brick_302 = 302,
brick_303 = 303,
brick_304 = 304,
brick_305 = 305,
brick_306 = 306,
brick_307 = 307,
brick_308 = 308,
brick_309 = 309,
brick_310 = 310,
brick_311 = 311,
brick_312 = 312,
brick_313 = 313,
brick_314 = 314,
brick_315 = 315,
brick_316 = 316,
brick_317 = 317,
brick_318 = 318,
brick_319 = 319,
brick_320 = 320,
brick_321 = 321,
brick_322 = 322,
brick_323 = 323,
brick_324 = 324,
brick_325 = 325,
//brick_326 = 326,
brick_327 = 327,
brick_328 = 328,
brick_329 = 329,
brick_330 = 330,
brick_331 = 331,
brick_332 = 332,
brick_333 = 333,
brick_334 = 334,
brick_335 = 335,
brick_336 = 336,
brick_337 = 337,
brick_338 = 338,
brick_339 = 339,
brick_340 = 340,
brick_341 = 341,
brick_342 = 342,
brick_343 = 343,
brick_344 = 344,
brick_345 = 345,
brick_346 = 346,
brick_347 = 347,
brick_348 = 348,
brick_349 = 349,
brick_350 = 350,
brick_351 = 351,
brick_352 = 352,
brick_353 = 353,
brick_354 = 354,
brick_355 = 355,
brick_356 = 356,
brick_357 = 357,
brick_358 = 358,
brick_359 = 359,
brick_360 = 360,
brick_361 = 361,
brick_362 = 362,
brick_363 = 363,
brick_364 = 364,
brick_365 = 365,
roblox_1001 = 1001,
roblox_1002 = 1002,
roblox_1003 = 1003,
roblox_1004 = 1004,
roblox_1005 = 1005,
roblox_1006 = 1006,
roblox_1007 = 1007,
roblox_1008 = 1008,
roblox_1009 = 1009,
roblox_1010 = 1010,
roblox_1011 = 1011,
roblox_1012 = 1012,
roblox_1013 = 1013,
roblox_1014 = 1014,
roblox_1015 = 1015,
roblox_1016 = 1016,
roblox_1017 = 1017,
roblox_1018 = 1018,
roblox_1019 = 1019,
roblox_1020 = 1020,
roblox_1021 = 1021,
roblox_1022 = 1022,
roblox_1023 = 1023,
roblox_1024 = 1024,
roblox_1025 = 1025,
roblox_1026 = 1026,
roblox_1027 = 1027,
roblox_1028 = 1028,
roblox_1029 = 1029,
roblox_1030 = 1030,
roblox_1031 = 1031,
roblox_1032 = 1032
};
Number number;
typedef std::vector< BrickColor > Colors;
static const Colors& colorPalette(); // colors shown in UI
static const Colors& renderingPalette(); // colors supported by renderer
static const Colors& allColors(); // all known colors
// returns the 0-based index of the color
size_t getClosestRenderingPaletteIndex() const; // closest "supported" palette index by the GFX engine.
size_t getClosestPaletteIndex() const; // closest palette index from the _whole_ palette list.
static const size_t paletteSize = 128; // supported by UI and data model.
static const size_t paletteSizeMSB = 7; // == log2(paletteSize)
static void setRenderingSupportedPaletteSize(size_t maxSupportedColors);
// Constructor/Factory
BrickColor(Number number):number(number) {
}
BrickColor():number(brick_194) {
}
explicit BrickColor(int number);
static BrickColor closest(G3D::Color3uint8 color);
static BrickColor closest(G3D::Color4uint8 color);
static BrickColor closest(G3D::Color3 color);
static BrickColor closest(G3D::Color4 color);
static BrickColor parse(const char* name);
static BrickColor random();
inline static BrickColor brickWhite()
{
return brick_1;
}
inline static BrickColor brickGray()
{
return brick_194;
}
inline static BrickColor brickDarkGray()
{
return brick_199;
}
inline static BrickColor brickBlack()
{
return brick_26;
}
inline static BrickColor brickRed()
{
return brick_21;
}
inline static BrickColor brickYellow()
{
return brick_24;
}
inline static BrickColor brickGreen()
{
return brick_28;
}
inline static BrickColor baseplateGreen()
{
return brick_37;
}
inline static BrickColor brickBlue()
{
return brick_23;
}
inline static BrickColor defaultColor()
{
return BrickColor();
}
// Assignment
BrickColor& operator=(const BrickColor& other)
{
number = other.number;
return *this;
}
//Query
G3D::Color4uint8 color4uint8() const;
G3D::Color3uint8 color3uint8() const;
G3D::Color4 color4() const;
G3D::Color3 color3() const;
const std::string& name() const;
// returns the number as an int, not an ARGB
int asInt() const { return number; }
// Comparison
bool operator==(const BrickColor& other) const {
return number==other.number;
}
bool operator!=(const BrickColor& other) const {
return number!=other.number;
}
bool operator>(const BrickColor& other) const {
return number>other.number;
}
bool operator<(const BrickColor& other) const {
return number<other.number;
}
};
std::size_t hash_value(const BrickColor& c);
} // namespace