| 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.
|