From 75e66d546a7849be4db914532de553aad033131b Mon Sep 17 00:00:00 2001 From: RKF45 Date: Sat, 18 Jan 2014 21:09:02 +0100 Subject: [PATCH 1/3] Rework of colour mixing --- code/modules/reagents/Chemistry-Colours.dm | 78 +++++++++++++--------- 1 file changed, 45 insertions(+), 33 deletions(-) diff --git a/code/modules/reagents/Chemistry-Colours.dm b/code/modules/reagents/Chemistry-Colours.dm index e81561d733..e0b0ca27c5 100644 --- a/code/modules/reagents/Chemistry-Colours.dm +++ b/code/modules/reagents/Chemistry-Colours.dm @@ -1,39 +1,51 @@ -/proc/GetColors(hex) //Actually converts hex to rgb - hex = uppertext(hex) - var/hi1 = text2ascii(hex, 2) - var/lo1 = text2ascii(hex, 3) - var/hi2 = text2ascii(hex, 4) - var/lo2 = text2ascii(hex, 5) - var/hi3 = text2ascii(hex, 6) - var/lo3 = text2ascii(hex, 7) - return list(((hi1>= 65 ? hi1-55 : hi1-48)<<4) | (lo1 >= 65 ? lo1-55 : lo1-48), - ((hi2 >= 65 ? hi2-55 : hi2-48)<<4) | (lo2 >= 65 ? lo2-55 : lo2-48), - ((hi3 >= 65 ? hi3-55 : hi3-48)<<4) | (lo3 >= 65 ? lo3-55 : lo3-48)) - /proc/mix_color_from_reagents(var/list/reagent_list) - if(!reagent_list || !reagent_list.len) return 0 + if(!reagent_list || !length(reagent_list)) + return 0 - var/list/rgbcolor = list(0,0,0) - var/finalcolor = 0 - for(var/datum/reagent/re in reagent_list) //TODO: weigh final colour by amount of reagents; make this algorithm use hex - if(!finalcolor) - rgbcolor = GetColors(re.color) - finalcolor = re.color - else - var/newcolor[3] - var/prergbcolor[3] - prergbcolor = rgbcolor - newcolor = GetColors(re.color) + var/contents = length(reagent_list) + var/list/weight = list(contents) + var/list/color = list(contents) + var/i - rgbcolor[1] = (prergbcolor[1]+newcolor[1])/2 - rgbcolor[2] = (prergbcolor[2]+newcolor[2])/2 - rgbcolor[3] = (prergbcolor[3]+newcolor[3])/2 + //fill the list of weights + var/listsum = 0 + for(i=1; i0xFFFF) + return + + //assemble back into #RRGGBB format + var/finalcolor = num2hex(mixedcolor) + var/colorlength = length(finalcolor) + finalcolor = copytext(finalcolor,-colorlength+1) //We don't want every colour to start with "0" + while(length(finalcolor)<6) + finalcolor = text("0[]",finalcolor) //Takes care of leading zeroes + finalcolor = text("#[]",finalcolor) return finalcolor - -// This isn't a perfect color mixing system, the more reagents that are inside, -// the darker it gets until it becomes absolutely pitch black! I dunno, maybe -// that's pretty realistic? I don't do a whole lot of color-mixing anyway. -// If you add brighter colors to it it'll eventually get lighter, though. \ No newline at end of file From ca4bb831d4eb52ee504d9497e81e4b4945feff3c Mon Sep 17 00:00:00 2001 From: RKF45 Date: Sun, 19 Jan 2014 12:03:32 +0100 Subject: [PATCH 2/3] Debug --- code/modules/reagents/Chemistry-Colours.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/reagents/Chemistry-Colours.dm b/code/modules/reagents/Chemistry-Colours.dm index e0b0ca27c5..3c115c253c 100644 --- a/code/modules/reagents/Chemistry-Colours.dm +++ b/code/modules/reagents/Chemistry-Colours.dm @@ -48,4 +48,6 @@ finalcolor = text("0[]",finalcolor) //Takes care of leading zeroes finalcolor = text("#[]",finalcolor) + world << finalcolor + return finalcolor From d35c9954b6b8fa4252597eb675fdd4e5b36d03ce Mon Sep 17 00:00:00 2001 From: RKF45 Date: Sun, 19 Jan 2014 21:47:42 +0100 Subject: [PATCH 3/3] Rework of colour mixing --- code/modules/reagents/Chemistry-Colours.dm | 66 +++++++++++++--------- 1 file changed, 40 insertions(+), 26 deletions(-) diff --git a/code/modules/reagents/Chemistry-Colours.dm b/code/modules/reagents/Chemistry-Colours.dm index 3c115c253c..55e76a07b8 100644 --- a/code/modules/reagents/Chemistry-Colours.dm +++ b/code/modules/reagents/Chemistry-Colours.dm @@ -3,51 +3,65 @@ return 0 var/contents = length(reagent_list) - var/list/weight = list(contents) - var/list/color = list(contents) + var/list/weight = new /list(contents) + var/list/redcolor = new /list(contents) + var/list/greencolor = new /list(contents) + var/list/bluecolor = new /list(contents) var/i //fill the list of weights - var/listsum = 0 - for(i=1; i0xFFFF) - return + if(mixedcolor<0x00 || mixedcolor>0xFF) + return 0 - //assemble back into #RRGGBB format var/finalcolor = num2hex(mixedcolor) - var/colorlength = length(finalcolor) - finalcolor = copytext(finalcolor,-colorlength+1) //We don't want every colour to start with "0" - while(length(finalcolor)<6) + while(length(finalcolor)<2) finalcolor = text("0[]",finalcolor) //Takes care of leading zeroes - finalcolor = text("#[]",finalcolor) - - world << finalcolor - return finalcolor