garrysmod
garrysmod copied to clipboard
Added additional color constructors
Finale to the critically acclaimed color-hex PR series (https://github.com/garrynewman/garrysmod/pull/1089); I ended up going with the implementation recommended by @SimonSchick. Although @sannysc made some very good points on the side of having a single polymorphic constructor, with Lua being weakly-typed, it would be very messy, unclear, and inefficient. Color is now a global metatable that acts as a contructor and a calltable. Supports constructing by integer, hex string (0x112233, #112233, #123), X11/web color name, string ("123456", "123 213 231"), vector of floats between 0 and 1, color (copy-constructor), and table with numerical or string (rgba) keys.
Testing:
local testcol = Color(255, 255, 255)
assert(testcol == Color.FromInt(0xFFFFFFFF))
assert(testcol == Color.FromInt(0xFFFFFF))
assert(testcol == Color.FromHexString("0xFFFFFFFF"))
assert(testcol == Color.FromHexString("#FFFFFF"))
assert(testcol == Color.FromHexString("#FFF"))
assert(testcol == Color.FromName("white"))
assert(testcol == Color.FromString("255 255 255"))
assert(testcol == Color.FromString("255 255 255 255"))
assert(testcol == Color.FromString(tostring(0xFFFFFFFF)))
assert(testcol == Color.FromString("foo bar"))
assert(testcol == Color.FromVector(Vector(1, 1, 1)))
assert(testcol == Color.FromColor(testcol))
assert(testcol == Color.FromTable({r = 255, g = 255, b = 255}))
assert(testcol == Color.FromTable({255, 255, 255, 255}))
local testcol = Color(199, 21, 133)
assert(testcol == Color.FromInt(0xc71585))
assert(testcol == Color.FromHexString("0xc71585"))
assert(testcol == Color.FromHexString("#c71585"))
assert(testcol == Color.FromName("mediumvioletred"))
assert(testcol == Color.FromString("199 21 133"))
assert(testcol == Color.FromString(tostring(0xFFc71585)))
assert(testcol == Color.FromVector(testcol:ToVector()))
assert(testcol == Color.FromColor(testcol))
assert(testcol == Color.FromTable({r = 199, g = 21, b = 133, a = 255}))
assert(testcol == Color.FromTable({199, 21, 133}))
If I got a penny every time you made a PR related to HEX colors, I'd be rich. Anyway, nice work.
@MrUnknownGamer You would have four pennies.
Would this be merged if I changed Color back to a function with an __index?
Would this be merged at all?
:pensive: