Organization of an idea.
BlitzMax Forums/BlitzMax Beginners Area/Organization of an idea.
| ||
Hi, I would like to impliment a system into my game that shifts the color based on the user's current time of day. currently I use a function that finds the average between two colors and sets the color based on the multiplier variable. How would I make more than two colors used per day? Say I had X number of color points. How would I find the proper color based on the time of day? Basically I draw a transparent rectangle over the screen to give the impression of a global lightsource. This tints the whole screen and can give cool effects. Sorry if this is unclear, most of my games are more abstract art based..... |
| ||
24 hours or 1440 minutes in a day. That means the RGB value changes 0.18 per minute. Take the start RGB from 00:00, determine current time, work out the difference in minutes and the start RGB values by the RGB change factor. When RGB reaches 255 loop to 0. If I have understood correctly... |
| ||
My code currently only allows for 2 colors where the first is 00:00 and the last is 23:00. How would I make a similar code that used say a list of color objects to find the color of the time based on the color objects?Strict Graphics 640,480 Function setdaycolor(r#,g#,b#,r2#,g2#,b2#,percent#) Local r_dif#=r2-r Local g_dif#=g2-g Local b_dif#=b2-b SetColor r+(r_dif*percent),g+(g_dif*percent),b+(b_dif*percent) End Function Local time=0 While Not KeyDown(Key_escape) Cls setdaycolor(255,255,0,0,0,128,Float(CurrentTime())/23) DrawRect(MouseX(),MouseY(),320,240) Flip WEnd |
| ||
You do exactly what you are already doing, then when it reaches the second colour, do it again. |
| ||
I was actualy just thinking about this for a hitpoint bar in a game I'm working on. I haven't implimented it yet but here's the concept I've got so far. Do just what you have to get the color between 2 points. but set each point at a certain value. That's not very clear so I'll try with more detail using hitpoints as an example. You have 100 to 0 hp from 100-80 is one segment changing from say green to yellow. That's a 20point range so each point is 5% (5% * 20 = 100%) . If your current Hp is say 95 out of 100. it's above 80 so we use this HP color segment (instead of the 80-60 segment, or whatever other segment) 95-80 = 15. 15 is 75% of 20 so find 75% of the color (using your current method) between the color for 100 and the color for 80. This requires you to assing a point along your line, and a color to each point. To make it more specific for your time system, 00:00 is point 0, color at point 0 is green. 01:00 is point 1 (if you're going hourly) and color is blue. time is 00:45. that is between points 0 and 1 so we used the colors for 0 and 1. it is 75% of the way to the second color so use your color finding function to find 75% of the color of point 0 (green) and point 1 (blue) and there you go. Something tells me there is a more elegent way to find that than an array which is what I would use, but that will work. Of note, the points do not have to be evenly spaced, as you are finding the % difference between 2 points. you simply have to know where those points are and what colors you want to use if something is perfectly on the point. If you have already come up with a cleaner solution I would be interested if you would like to share it. |
| ||
I would use a palette object and store the entire day by calling the setrange method multiple times:Type TPalette Field r[256] Field g[256] Field b[256] Method UseColor(n) SetColor r[n],g[n],b[n] End Method Method SetRange(lo,r0,g0,b0,hi,r1,g1,b1) Local i,d d=hi-lo For i=0 To d r[lo+i]=r0+(r1-r0)*i/d g[lo+i]=g0+(g1-g0)*i/d b[lo+i]=b0+(b1-b0)*i/d Next End Method End Type |