Answer to Exercise 39

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

Back to the exercise in section 18

Mechanically translated to HTML from third edition as revised 16 May 1997. Copyright © Graham Nelson 1993, 1994, 1995, 1996, 1997: all rights reserved.