Snippet ColorIt

SerraAvenger

Cuz I can
Reaction score
234
I guess you never saw my Adv Strings system :p

http://www.thehelper.net/forums/showthread.php?t=102161

JASS:
call BJDebugMsg(red + "Error: "+ end + green + "Invalid target chosen for " + end + blue + "Sacrifice!" + end)


It just seems to be more readable to me when you have the colors spaced out like a sentence.

I don't think you're going to have tons of colors being used in a map, so it seems to make sense to have it as an add-as-you-need basis as I did in mine. The only real problem I see with mine is the ugly "end" you have to add to *end* a color (though one might consider that an easy way to distinguish the ending of one color to the beginning of another).

no need for end. Just start a new color and it will be fine : )
Did the same in my utilities library, just that for me colors are constants and thus in capital letters ; )
 

Tom Jones

N/A
Reaction score
437
Well the name of the color has really nothing to do with its hex-color equivalent, and thus a string to hex-color converter is impossible as far as I know. However we can convert from RBG to hex:
JASS:
library Color initializer Init
globals
    private string array HEX
endglobals

function RBG2Hex takes integer red, integer blue, integer green returns string
    return HEX[red/16]+HEX[red-(red/16)*16]+HEX[green/16]+HEX[green-(green/16)*16]+HEX[blue/16]+HEX[blue-(blue/16)*16]
endfunction

private function Init takes nothing returns nothing
    local integer i = 0
    local string map = "ABCDEF"
    
    loop
        exitwhen i == 16
        if i < 10 then
            set HEX<i> = I2S(i)
        else
            set HEX<i> = SubString(map,i-10,i-9)
        endif
        set i = i+1
    endloop    
endfunction
</i></i>


With that in mind, you could predefine colors like this:
JASS:
private function S2Id takes string s returns integer
    return s //Returns the index of the string in the string table.
    return 0
endfunction

struct COLOR 
    private string name
    private string hexcolor
        
    static method operator [] takes string s returns string
        return COLOR(S2Id(StringCase(s,false))).hexcolor
    endmethod
    static method operator []= takes string s, string value returns nothing 
        set COLOR(S2Id(StringCase(s,false))).hexcolor = &quot;|cff&quot;+value
    endmethod
endstruct

function DefineColor takes string name, integer red, integer blue, integer green returns nothing
    set COLOR[name] = RBG2Hex(red,blue,green)
endfunction

function ...
    set COLOR[&quot;Red&quot;] = RBG2Hex(255,0,0)
    set COLOR[&quot;Green&quot;] = RBG2Hex(0,0,255)
    set COLOR[&quot;Blue&quot;] = RBG2Hex(0,255,0)
    call DefineColor(&quot;white&quot;,255,255,255)
endfunction

And the entire code:
JASS:
library Color initializer Init
globals
    private string array HEX
endglobals

private function S2Id takes string s returns integer
    return s //Returns the index of the string in the string table.
    return 0
endfunction

function RBG2Hex takes integer red, integer blue, integer green returns string
    return HEX[red/16]+HEX[red-(red/16)*16]+HEX[green/16]+HEX[green-(green/16)*16]+HEX[blue/16]+HEX[blue-(blue/16)*16]
endfunction

struct COLOR 
    private string name
    private string hexcolor
        
    static method operator [] takes string s returns string
        return COLOR(S2Id(StringCase(s,false))).hexcolor
    endmethod
    static method operator []= takes string s, string value returns nothing 
        set COLOR(S2Id(StringCase(s,false))).hexcolor = &quot;|cff&quot;+value
    endmethod
endstruct

function DefineColor takes string name, integer red, integer blue, integer green returns nothing
    set COLOR[name] = RBG2Hex(red,blue,green)
endfunction

private function Init takes nothing returns nothing
    local integer i = 0
    local string map = &quot;ABCDEF&quot;
    
    loop
        exitwhen i == 16
        if i &lt; 10 then
            set HEX<i> = I2S(i)
        else
            set HEX<i> = SubString(map,i-10,i-9)
        endif
        set i = i+1
    endloop    
    set COLOR[&quot;Red&quot;] = RBG2Hex(255,0,0)
    set COLOR[&quot;Blue&quot;] = RBG2Hex(0,255,0)
    set COLOR[&quot;Green&quot;] = RBG2Hex(0,0,255)
    //etc.
endfunction
endlibrary
</i></i>
Note that you may be better off using a cache/table instead of the string table.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top