ANSWER TO EXERCISE 39 | |
A minimal solution is as follows: Constant SUNRISE 360; ! i.e., 6 am Constant SUNSET 1140; ! i.e., 7 pm Attribute outdoors; ! Give this to external locations Attribute lit; ! And this to artificially lit ones Global day_state = 2; [ TimePasses f obj; if (the_time >= SUNRISE && the_time < SUNSET) f=1; if (day_state == f) rfalse; objectloop (obj) { if (obj has lit) give obj light; if (obj has outdoors && obj hasnt lit) { if (f==0) give obj ~light; else give obj light; } } if (day_state==2) { day_state = f; return; } day_state = f; if (location hasnt outdoors) return; if (f==1) "^The sun rises, illuminating the landscape!"; "^As the sun sets, the landscape is plunged into darkness."; ];In the Initialise routine, set the time (using SetTime) and then call TimePasses to set all the light attributes accordingly. Note that with this system, there's no need to set light at all: that's automatic. |