mirror of
https://github.com/ganelson/inform.git
synced 2024-07-05 08:34:22 +03:00
1671 lines
206 KiB
HTML
1671 lines
206 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<title>3/sm2</title>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<meta http-equiv="Content-Language" content="en-gb">
|
|
<link href="inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
</head>
|
|
<body>
|
|
|
|
<!--Weave of '3/hm' generated by 7-->
|
|
<ul class="crumbs"><li><a href="../webs.html">★</a></li><li><a href="index.html">if</a></li><li><a href="index.html#3">Chapter 3: Space and Time</a></li><li><b>HTML Map</b></li></ul><p class="purpose">To render the spatial map of rooms as HTML.</p>
|
|
|
|
<ul class="toc"><li><a href="#SP1">§1. Building the grids</a></li><li><a href="#SP4">§4. Nested HTML Tables</a></li><li><a href="#SP5">§5. Icon images</a></li><li><a href="#SP6">§6. The major map</a></li><li><a href="#SP7">§7. Level rubrics</a></li><li><a href="#SP8">§8. Single-room submaps</a></li><li><a href="#SP9">§9. Plotting a rectangle of the map</a></li><li><a href="#SP9_3_1_1">§9.3.1.1. Substantive cells</a></li><li><a href="#SP9_3_1_2">§9.3.1.2. Numbering cells</a></li><li><a href="#SP10">§10. Plotting the eight exterior icons</a></li><li><a href="#SP11">§11. Plotting the single central square</a></li><li><a href="#SP12">§12. The colour chip</a></li><li><a href="#SP13">§13. The regions key</a></li></ul><hr class="tocbar">
|
|
|
|
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Building the grids. </b>Three three-dimensional arrays called "grids" are used to store a rasterised
|
|
version of the map before we render this on screen.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">The <code class="display"><span class="extract">room_grid</span></code> tells us which room can be found at (x, y, z), while the
|
|
<code class="display"><span class="extract">icon_grid</span></code> is 25 times larger since it splits each room cell into a 5 by 5
|
|
subgrid of icons. Bitmaps stored in the 16 icon cells around the perimeter
|
|
of the 5 by 5 subgrid tell us which exits to mark (and since we map only 12
|
|
kinds of exit, this means that four of them are unused). The central 3 by 3
|
|
part of the subgrid is not used: nothing can be plotted there since that's
|
|
where the room icon goes, which is made not with an image tag but using the
|
|
HTML table routine below. We will often use the wasteful coordinate system
|
|
(x, y, z, i_1, i_2) to mean the icon at (i_1, i_2) (with 0<= i_1,
|
|
i_2<= 4) associated with the room cell at (x, y, z).
|
|
</p>
|
|
|
|
<p class="inwebparagraph">The <code class="display"><span class="extract">exit_grid</span></code> stores which direction number is the exit being marked at
|
|
this icon position, and has the same indexing as the icon grid.
|
|
</p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">define</span> <span class="identifier">ROOM_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">) </span><span class="functiontext">Geometry::cuboid_index</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">Universe</span><span class="plain">)</span>
|
|
<span class="definitionkeyword">define</span> <span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">i1</span><span class="plain">, </span><span class="identifier">i2</span><span class="plain">) (25*</span><span class="identifier">ROOM_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">) + 5*(</span><span class="identifier">i1</span><span class="plain">) + (</span><span class="identifier">i2</span><span class="plain">))</span>
|
|
</pre>
|
|
|
|
<pre class="display">
|
|
<span class="identifier">instance</span><span class="plain"> **</span><span class="identifier">room_grid</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> *</span><span class="identifier">icon_grid</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">, *</span><span class="identifier">exit_grid</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::calculate_map_grid</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<<span class="cwebmacro">Allocate the three mapping grids</span> <span class="cwebmacronumber">1.1</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Populate the room grid</span> <span class="cwebmacronumber">1.2</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Populate the icon and exit grids</span> <span class="cwebmacronumber">1.3</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Apply the remaining nuance bits to the icon grid</span> <span class="cwebmacronumber">1.4</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::HTMLMap::calculate_map_grid is used in <a href="#SP6">§6</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_1"></a><b>§1.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Allocate the three mapping grids</span> <span class="cwebmacronumber">1.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">size_needed</span><span class="plain"> = </span><span class="functiontext">Geometry::cuboid_volume</span><span class="plain">(</span><span class="identifier">Universe</span><span class="plain">), </span><span class="identifier">x</span><span class="plain">;</span>
|
|
|
|
<span class="identifier">room_grid</span><span class="plain"> = (</span><span class="identifier">instance</span><span class="plain"> **)</span>
|
|
<span class="plain">(</span><span class="identifier">Memory::I7_calloc</span><span class="plain">(</span><span class="identifier">size_needed</span><span class="plain">, </span><span class="reserved">sizeof</span><span class="plain">(</span><span class="identifier">instance</span><span class="plain"> *), </span><span class="identifier">MAP_INDEX_MREASON</span><span class="plain">));</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">x</span><span class="plain">=0; </span><span class="identifier">x</span><span class="plain"><</span><span class="identifier">size_needed</span><span class="plain">; </span><span class="identifier">x</span><span class="plain">++) </span><span class="identifier">room_grid</span><span class="plain">[</span><span class="identifier">x</span><span class="plain">] = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
|
|
<span class="identifier">icon_grid</span><span class="plain"> = (</span><span class="reserved">int</span><span class="plain"> *)</span>
|
|
<span class="plain">(</span><span class="identifier">Memory::I7_calloc</span><span class="plain">(25*</span><span class="identifier">size_needed</span><span class="plain">, </span><span class="reserved">sizeof</span><span class="plain">(</span><span class="reserved">int</span><span class="plain">), </span><span class="identifier">MAP_INDEX_MREASON</span><span class="plain">));</span>
|
|
<span class="identifier">exit_grid</span><span class="plain"> = (</span><span class="reserved">int</span><span class="plain"> *)</span>
|
|
<span class="plain">(</span><span class="identifier">Memory::I7_calloc</span><span class="plain">(25*</span><span class="identifier">size_needed</span><span class="plain">, </span><span class="reserved">sizeof</span><span class="plain">(</span><span class="reserved">int</span><span class="plain">), </span><span class="identifier">MAP_INDEX_MREASON</span><span class="plain">));</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">x</span><span class="plain">=0; </span><span class="identifier">x</span><span class="plain"><25*</span><span class="identifier">size_needed</span><span class="plain">; </span><span class="identifier">x</span><span class="plain">++) {</span>
|
|
<span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">x</span><span class="plain">] = 0;</span>
|
|
<span class="identifier">exit_grid</span><span class="plain">[</span><span class="identifier">x</span><span class="plain">] = -1;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1">§1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_2"></a><b>§1.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Populate the room grid</span> <span class="cwebmacronumber">1.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER_ROOMS</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">)</span>
|
|
<span class="identifier">room_grid</span><span class="plain">[</span><span class="identifier">ROOM_GRID_POS</span><span class="plain">(</span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">))] = </span><span class="identifier">R</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1">§1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_3"></a><b>§1.3. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Populate the icon and exit grids</span> <span class="cwebmacronumber">1.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER_ROOMS</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">exit</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER_STORY_DIRECTIONS</span><span class="plain">(</span><span class="identifier">exit</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">PL::SpatialMap::direction_is_mappable</span><span class="plain">(</span><span class="identifier">exit</span><span class="plain">)) {</span>
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">D</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span> <span class="comment">door which the exit passes through, if it does</span>
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain"> = </span><span class="functiontext">PL::SpatialMap::room_exit</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">exit</span><span class="plain">, &</span><span class="identifier">D</span><span class="plain">); </span> <span class="comment">target at the other end</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">T</span><span class="plain">) || (</span><span class="identifier">D</span><span class="plain">))</span>
|
|
<<span class="cwebmacro">Fill in the grid-square for this exit of room R</span> <span class="cwebmacronumber">1.3.4</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1">§1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_3_1"></a><b>§1.3.1. </b>We next define constants needed for the icon bitmap. The information
|
|
we extract from the map exits is recorded in the low four bits as
|
|
follows:
|
|
</p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">define</span> <span class="constant">EXIT_MAPBIT</span><span class="plain"> 0</span><span class="identifier">x00000001</span><span class="plain"> </span> <span class="comment">An exit leads this way</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">DOOR1_MAPBIT</span><span class="plain"> 0</span><span class="identifier">x00000002</span><span class="plain"> </span> <span class="comment">Into a 1-sided door</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">DOOR2_MAPBIT</span><span class="plain"> 0</span><span class="identifier">x00000004</span><span class="plain"> </span> <span class="comment">Into a 2-sided door</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">CONNECTIVE_BITMAP</span><span class="plain"> (</span><span class="constant">EXIT_MAPBIT</span><span class="plain">+</span><span class="constant">DOOR1_MAPBIT</span><span class="plain">+</span><span class="constant">DOOR2_MAPBIT</span><span class="plain">)</span>
|
|
</pre>
|
|
<p class="inwebparagraph"><a id="SP1_3_2"></a><b>§1.3.2. </b>The higher bits are used for the nuances which improve the map when
|
|
several rooms are plotted together.
|
|
</p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">define</span> <span class="constant">ADJACENT_MAPBIT</span><span class="plain"> 0</span><span class="identifier">x00000008</span><span class="plain"> </span> <span class="comment">Into the room adjacent in space</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">ALIGNED_MAPBIT</span><span class="plain"> 0</span><span class="identifier">x00000010</span><span class="plain"> </span> <span class="comment">Into a room in correct direction</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">FADING_MAPBIT</span><span class="plain"> 0</span><span class="identifier">x00000020</span><span class="plain"> </span> <span class="comment">There's a broken exit on ...</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">MEET_MAPBIT</span><span class="plain"> 0</span><span class="identifier">x00000040</span><span class="plain"> </span> <span class="comment">This door should meet the adjacent one</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">CROSSDOOR_MAPBIT</span><span class="plain"> 0</span><span class="identifier">x00000080</span><span class="plain"> </span> <span class="comment">There's a door on the diagonal athwart</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">CROSSDOT_MAPBIT</span><span class="plain"> 0</span><span class="identifier">x00000100</span><span class="plain"> </span> <span class="comment">There's a plain exit on ...</span>
|
|
</pre>
|
|
<p class="inwebparagraph"><a id="SP1_3_3"></a><b>§1.3.3. </b>Five bits are used for the possible contents of a central square: it may
|
|
be occupied by an actual room, or it may have a pile of long straight-line
|
|
connections running through it, in any combination.
|
|
</p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">define</span> <span class="constant">LONGEW_MAPBIT</span><span class="plain"> 0</span><span class="identifier">x00000200</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">LONGNS_MAPBIT</span><span class="plain"> 0</span><span class="identifier">x00000400</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">LONGSWNE_MAPBIT</span><span class="plain"> 0</span><span class="identifier">x00000800</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">LONGNWSE_MAPBIT</span><span class="plain"> 0</span><span class="identifier">x00001000</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">OCCUPIED_MAPBIT</span><span class="plain"> 0</span><span class="identifier">x10000000</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">LONGS_BITMAP</span><span class="plain"> (</span><span class="constant">LONGEW_MAPBIT</span><span class="plain">+</span><span class="constant">LONGNS_MAPBIT</span><span class="plain">+</span><span class="constant">LONGSWNE_MAPBIT</span><span class="plain">+</span><span class="constant">LONGNWSE_MAPBIT</span><span class="plain">)</span>
|
|
</pre>
|
|
<p class="inwebparagraph"><a id="SP1_3_4"></a><b>§1.3.4. </b>The following code calculates the low four bits of the icon bitmap
|
|
grid. Note that the main map grid must already be finished before this
|
|
stage can even begin.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Fill in the grid-square for this exit of room R</span> <span class="cwebmacronumber">1.3.4</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i1</span><span class="plain">, </span><span class="identifier">i2</span><span class="plain">;</span>
|
|
<span class="functiontext">PL::SpatialMap::cell_position_for_direction</span><span class="plain">(</span><span class="identifier">exit</span><span class="plain">, &</span><span class="identifier">i1</span><span class="plain">, &</span><span class="identifier">i2</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bitmap</span><span class="plain"> = 0;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">D</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">T</span><span class="plain">) </span><span class="identifier">bitmap</span><span class="plain"> |= </span><span class="constant">DOOR2_MAPBIT</span><span class="plain">;</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">bitmap</span><span class="plain"> |= </span><span class="constant">DOOR1_MAPBIT</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">T</span><span class="plain">) {</span>
|
|
<span class="identifier">bitmap</span><span class="plain"> |= </span><span class="constant">EXIT_MAPBIT</span><span class="plain">;</span>
|
|
<span class="reserved">vector</span><span class="plain"> </span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">PL::SpatialMap::direction_as_vector</span><span class="plain">(</span><span class="identifier">exit</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">Geometry::vec_eq</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">, </span><span class="identifier">Zero_vector</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) &&</span>
|
|
<span class="plain">(</span><span class="functiontext">PL::SpatialMap::direction_is_lateral</span><span class="plain">(</span><span class="identifier">exit</span><span class="plain">))) {</span>
|
|
<<span class="cwebmacro">Set the adjacent or aligned bit if the target lies in the correct direction</span> <span class="cwebmacronumber">1.3.4.1</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Set the fading bit if another room lies where the target ought to be</span> <span class="cwebmacronumber">1.3.4.2</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">), </span><span class="identifier">i1</span><span class="plain">, </span><span class="identifier">i2</span><span class="plain">)] = </span><span class="identifier">bitmap</span><span class="plain">;</span>
|
|
<span class="identifier">exit_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">), </span><span class="identifier">i1</span><span class="plain">, </span><span class="identifier">i2</span><span class="plain">)] = </span><span class="identifier">exit</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1_3">§1.3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_3_4_1"></a><b>§1.3.4.1. </b>Suppose we are looking east from the Ballroom to the Kitchens. If the Kitchens
|
|
will indeed be plotted at the position directly east of the Ballroom, we award
|
|
the "adjacent" bit; if they will be plotted due east, but further away than
|
|
a single square distant, then we get the "aligned" bit as a consolation prize.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Set the adjacent or aligned bit if the target lies in the correct direction</span> <span class="cwebmacronumber">1.3.4.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">vector</span><span class="plain"> </span><span class="identifier">V</span><span class="plain"> = </span><span class="functiontext">Geometry::vec_minus</span><span class="plain">(</span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">), </span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">));</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">lambda</span><span class="plain">;</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">lambda</span><span class="plain">=1; </span><span class="identifier">lambda</span><span class="plain"><10; </span><span class="identifier">lambda</span><span class="plain">++)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Geometry::vec_eq</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">, </span><span class="functiontext">Geometry::vec_scale</span><span class="plain">(</span><span class="identifier">lambda</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">))) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">lambda</span><span class="plain"> == 1) </span><span class="identifier">bitmap</span><span class="plain"> |= </span><span class="constant">ADJACENT_MAPBIT</span><span class="plain">;</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">bitmap</span><span class="plain"> |= </span><span class="constant">ALIGNED_MAPBIT</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1_3_4">§1.3.4</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_3_4_2"></a><b>§1.3.4.2. </b>If a different room altogether — say, the Tack Room — is being plotted one
|
|
square east of the Ballroom, even though the map connection leads to the
|
|
Kitchens, then we get the "fading" bit. (At one time connections like this
|
|
were going to be plotted in a sort of fading-away grey gradient, hence the
|
|
name, but in the end a more cartoonish break looked better.) This is not
|
|
exclusive with the aligned bit: we might have a situation where the map
|
|
be will be plotted left-to-right as B, TR, K, even though the connection
|
|
is east from B to K. If so, we get both the fading and aligned bits.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Set the fading bit if another room lies where the target ought to be</span> <span class="cwebmacronumber">1.3.4.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">vector</span><span class="plain"> </span><span class="identifier">Farend</span><span class="plain"> = </span><span class="functiontext">Geometry::vec_plus</span><span class="plain">(</span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">), </span><span class="identifier">E</span><span class="plain">);</span>
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER_ROOMS</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">R</span><span class="plain"> != </span><span class="identifier">T</span><span class="plain">) && (</span><span class="functiontext">Geometry::vec_eq</span><span class="plain">(</span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">), </span><span class="identifier">Farend</span><span class="plain">)))</span>
|
|
<span class="identifier">bitmap</span><span class="plain"> |= </span><span class="constant">FADING_MAPBIT</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1_3_4">§1.3.4</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_4"></a><b>§1.4. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Apply the remaining nuance bits to the icon grid</span> <span class="cwebmacronumber">1.4</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER_ROOMS</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">)</span>
|
|
<span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">), 2, 2)] = </span><span class="constant">OCCUPIED_MAPBIT</span><span class="plain">;</span>
|
|
|
|
<span class="identifier">LOOP_OVER_ROOMS</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">) {</span>
|
|
<span class="reserved">vector</span><span class="plain"> </span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::correct_pair</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">SW_vector</span><span class="plain">, 0, 4, 4, 0);</span>
|
|
<span class="functiontext">PL::HTMLMap::correct_pair</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">W_vector</span><span class="plain">, 0, 2, 4, 2);</span>
|
|
<span class="functiontext">PL::HTMLMap::correct_pair</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">NW_vector</span><span class="plain">, 0, 0, 4, 4);</span>
|
|
<span class="functiontext">PL::HTMLMap::correct_pair</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">S_vector</span><span class="plain">, 2, 4, 2, 0);</span>
|
|
<span class="functiontext">PL::HTMLMap::correct_pair</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">N_vector</span><span class="plain">, 2, 0, 2, 4);</span>
|
|
<span class="functiontext">PL::HTMLMap::correct_pair</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">SE_vector</span><span class="plain">, 4, 4, 0, 0);</span>
|
|
<span class="functiontext">PL::HTMLMap::correct_pair</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">E_vector</span><span class="plain">, 4, 2, 0, 2);</span>
|
|
<span class="functiontext">PL::HTMLMap::correct_pair</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">NE_vector</span><span class="plain">, 4, 0, 0, 4);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1">§1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>A process called "pair correction" fills in the nuance bits for all
|
|
adjacent icons representing the same exit. Thus the east side icon of
|
|
one room may need to be married up with the west side icon of the
|
|
adjacent room, and so on. The four by four cornices diagonally in
|
|
between rooms require special care. To plot a northeast exit blocked by
|
|
a 2-sided door, for instance, requires all four icons to be plotted, but
|
|
we need to be careful in case the two icons not occupied by the exit are
|
|
needed for something else (if a northwest exit crossed over it, for
|
|
instance).
|
|
</p>
|
|
|
|
<p class="inwebparagraph">Here P is the position of the room we're looking at, and D an offset
|
|
vector to one of its eight neighbouring cell positions on the map. If
|
|
P+D lies outside the map altogether, we do nothing.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::correct_pair</span><span class="plain">(</span><span class="reserved">vector</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">vector</span><span class="plain"> </span><span class="identifier">D</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">from_i1</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">from_i2</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">to_i1</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">to_i2</span><span class="plain">) {</span>
|
|
<span class="reserved">vector</span><span class="plain"> </span><span class="identifier">Q</span><span class="plain"> = </span><span class="functiontext">Geometry::vec_plus</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">D</span><span class="plain">);</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Geometry::within_cuboid</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">Universe</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">; </span> <span class="comment">should never happen</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Geometry::within_cuboid</span><span class="plain">(</span><span class="identifier">Q</span><span class="plain">, </span><span class="identifier">Universe</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">; </span> <span class="comment">neighbouring cell outside map</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">from</span><span class="plain"> = </span><span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">from_i1</span><span class="plain">, </span><span class="identifier">from_i2</span><span class="plain">)];</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">to</span><span class="plain"> = </span><span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">Q</span><span class="plain">, </span><span class="identifier">to_i1</span><span class="plain">, </span><span class="identifier">to_i2</span><span class="plain">)];</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">D</span><span class="element">.x</span><span class="plain"> == 0) || (</span><span class="identifier">D</span><span class="plain">.</span><span class="identifier">y</span><span class="plain"> == 0)) </span><<span class="cwebmacro">Apply nuance bits for a rank or file direction</span> <span class="cwebmacronumber">2.2</span>>
|
|
<span class="reserved">else</span><span class="plain"> </span><<span class="cwebmacro">Apply nuance bits for a diagonal direction</span> <span class="cwebmacronumber">2.3</span>><span class="plain">;</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">from</span><span class="plain"> & </span><span class="constant">ALIGNED_MAPBIT</span><span class="plain">) </span><<span class="cwebmacro">Lay out a long roadway towards our destination cell</span> <span class="cwebmacronumber">2.1</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::HTMLMap::correct_pair is used in <a href="#SP1_4">§1.4</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2_1"></a><b>§2.1. </b>Let's see how the "long" bits are added first, since that's easier. The
|
|
following looks disturbingly like an infinite loop: it lays out the roadway,
|
|
one cell at a time (adding the direction vector D to our position P each
|
|
turn) but stops when it hits an occupied cell — one with a room plotted in
|
|
it. This must eventually happen because the exit is "aligned", which means
|
|
that it leads to a room whose position is some multiple of D offset from
|
|
the original. So the loop always terminates.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Lay out a long roadway towards our destination cell</span> <span class="cwebmacronumber">2.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">TRUE</span><span class="plain">) {</span>
|
|
<span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Geometry::vec_plus</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">D</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, 2, 2)] & </span><span class="constant">OCCUPIED_MAPBIT</span><span class="plain">) </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">Geometry::vec_eq</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">, </span><span class="identifier">E_vector</span><span class="plain">)) || (</span><span class="functiontext">Geometry::vec_eq</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">, </span><span class="identifier">W_vector</span><span class="plain">))) {</span>
|
|
<span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, 0, 2)] = </span><span class="constant">EXIT_MAPBIT</span><span class="plain">;</span>
|
|
<span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, 2, 2)] |= </span><span class="constant">LONGEW_MAPBIT</span><span class="plain">;</span>
|
|
<span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, 4, 2)] = </span><span class="constant">EXIT_MAPBIT</span><span class="plain">;</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">Geometry::vec_eq</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">, </span><span class="identifier">N_vector</span><span class="plain">)) || (</span><span class="functiontext">Geometry::vec_eq</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">, </span><span class="identifier">S_vector</span><span class="plain">))) {</span>
|
|
<span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, 2, 0)] = </span><span class="constant">EXIT_MAPBIT</span><span class="plain">;</span>
|
|
<span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, 2, 2)] |= </span><span class="constant">LONGNS_MAPBIT</span><span class="plain">;</span>
|
|
<span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, 2, 4)] = </span><span class="constant">EXIT_MAPBIT</span><span class="plain">;</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">Geometry::vec_eq</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">, </span><span class="identifier">SW_vector</span><span class="plain">)) || (</span><span class="functiontext">Geometry::vec_eq</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">, </span><span class="identifier">NE_vector</span><span class="plain">))) {</span>
|
|
<span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, 0, 4)] = </span><span class="constant">EXIT_MAPBIT</span><span class="plain">;</span>
|
|
<span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, 2, 2)] |= </span><span class="constant">LONGSWNE_MAPBIT</span><span class="plain">;</span>
|
|
<span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, 4, 0)] = </span><span class="constant">EXIT_MAPBIT</span><span class="plain">;</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">Geometry::vec_eq</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">, </span><span class="identifier">NW_vector</span><span class="plain">)) || (</span><span class="functiontext">Geometry::vec_eq</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">, </span><span class="identifier">SE_vector</span><span class="plain">))) {</span>
|
|
<span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, 0, 0)] = </span><span class="constant">EXIT_MAPBIT</span><span class="plain">;</span>
|
|
<span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, 2, 2)] |= </span><span class="constant">LONGNWSE_MAPBIT</span><span class="plain">;</span>
|
|
<span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, 4, 4)] = </span><span class="constant">EXIT_MAPBIT</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2_2"></a><b>§2.2. </b>That leaves just three bits left to set: meet, crossdoor and crossdot.
|
|
The meet bit is used to show that the door on a connection should be plotted
|
|
symmetrically between the two rooms it connects. This is easy for the
|
|
directions N, S, E and W:
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Apply nuance bits for a rank or file direction</span> <span class="cwebmacronumber">2.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">from</span><span class="plain"> == </span><span class="identifier">to</span><span class="plain">) && (</span><span class="identifier">from</span><span class="plain"> & </span><span class="constant">ADJACENT_MAPBIT</span><span class="plain">) && (</span><span class="identifier">from</span><span class="plain"> & </span><span class="constant">DOOR2_MAPBIT</span><span class="plain">)) {</span>
|
|
<span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">from_i1</span><span class="plain">, </span><span class="identifier">from_i2</span><span class="plain">)] |= </span><span class="constant">MEET_MAPBIT</span><span class="plain">;</span>
|
|
<span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">Q</span><span class="plain">, </span><span class="identifier">to_i1</span><span class="plain">, </span><span class="identifier">to_i2</span><span class="plain">)] |= </span><span class="constant">MEET_MAPBIT</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2_3"></a><b>§2.3. </b>But the case of a diagonal direction is much harder, because we may need
|
|
to add cornice-pieces. There are four possible diagonal directions (NE, NW,
|
|
SE and SW), and in each case the origin P and the neighbour cell P+D
|
|
must live in opposite corners of a 2* 2 box of cells. We set N
|
|
to the bottom left cell of this box (which might be one of the two cells
|
|
we were originally looking at, or might be one of the other two).
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Apply nuance bits for a diagonal direction</span> <span class="cwebmacronumber">2.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">vector</span><span class="plain"> </span><span class="identifier">N</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">D</span><span class="element">.x</span><span class="plain"> < 0) </span><span class="identifier">N</span><span class="element">.x</span><span class="plain">--;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">D</span><span class="plain">.</span><span class="identifier">y</span><span class="plain"> < 0) </span><span class="identifier">N</span><span class="plain">.</span><span class="identifier">y</span><span class="plain">--;</span>
|
|
<span class="functiontext">PL::HTMLMap::correct_diagonal</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::correct_diagonal</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>So now the vector BL represents the bottom left cell (i.e., the southwestern
|
|
corner of the box). We can obtain the other three cells of the 2* 2 box
|
|
by offsetting to N, E and NE. Two of these cells form the diagonal of the
|
|
map connection (are "used"), and two are off-diagonal (are "unused").
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::correct_diagonal</span><span class="plain">(</span><span class="reserved">vector</span><span class="plain"> </span><span class="identifier">BL</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">SW_to_NE</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">pos_00</span><span class="plain">, </span> <span class="comment">corner icon position of lower cell used by the map connection</span>
|
|
<span class="identifier">pos_01</span><span class="plain">, </span> <span class="comment">corner icon position of lower cell not used by the map connection</span>
|
|
<span class="identifier">pos_10</span><span class="plain">, </span> <span class="comment">corner icon position of upper cell not used by the map connection</span>
|
|
<span class="identifier">pos_11</span><span class="plain">; </span> <span class="comment">corner icon position of upper cell used by the map connection</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">SW_to_NE</span><span class="plain">) {</span>
|
|
<span class="identifier">pos_00</span><span class="plain"> = </span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">BL</span><span class="plain">, 4, 0);</span>
|
|
<span class="identifier">pos_01</span><span class="plain"> = </span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="functiontext">Geometry::vec_plus</span><span class="plain">(</span><span class="identifier">BL</span><span class="plain">, </span><span class="identifier">N_vector</span><span class="plain">), 4, 4);</span>
|
|
<span class="identifier">pos_10</span><span class="plain"> = </span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="functiontext">Geometry::vec_plus</span><span class="plain">(</span><span class="identifier">BL</span><span class="plain">, </span><span class="identifier">E_vector</span><span class="plain">), 0, 0);</span>
|
|
<span class="identifier">pos_11</span><span class="plain"> = </span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="functiontext">Geometry::vec_plus</span><span class="plain">(</span><span class="identifier">BL</span><span class="plain">, </span><span class="identifier">NE_vector</span><span class="plain">), 0, 4);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">pos_00</span><span class="plain"> = </span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="functiontext">Geometry::vec_plus</span><span class="plain">(</span><span class="identifier">BL</span><span class="plain">, </span><span class="identifier">E_vector</span><span class="plain">), 0, 0);</span>
|
|
<span class="identifier">pos_01</span><span class="plain"> = </span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="functiontext">Geometry::vec_plus</span><span class="plain">(</span><span class="identifier">BL</span><span class="plain">, </span><span class="identifier">NE_vector</span><span class="plain">), 0, 4);</span>
|
|
<span class="identifier">pos_10</span><span class="plain"> = </span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">BL</span><span class="plain">, 4, 0);</span>
|
|
<span class="identifier">pos_11</span><span class="plain"> = </span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="functiontext">Geometry::vec_plus</span><span class="plain">(</span><span class="identifier">BL</span><span class="plain">, </span><span class="identifier">N_vector</span><span class="plain">), 4, 4);</span>
|
|
<span class="plain">}</span>
|
|
<<span class="cwebmacro">Set the relevant bits to support a door, if there is one</span> <span class="cwebmacronumber">3.1</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Set the relevant bits to put mortice into the notches in a long diagonal</span> <span class="cwebmacronumber">3.2</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::HTMLMap::correct_diagonal is used in <a href="#SP2_3">§2.3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3_1"></a><b>§3.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Set the relevant bits to support a door, if there is one</span> <span class="cwebmacronumber">3.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">from</span><span class="plain"> = </span><span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">pos_00</span><span class="plain">], </span><span class="identifier">to</span><span class="plain"> = </span><span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">pos_11</span><span class="plain">];</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">from</span><span class="plain"> == </span><span class="identifier">to</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">from</span><span class="plain"> & </span><span class="constant">ADJACENT_MAPBIT</span><span class="plain">) && (</span><span class="identifier">from</span><span class="plain"> & </span><span class="constant">DOOR2_MAPBIT</span><span class="plain">) && ((</span><span class="identifier">from</span><span class="plain"> & </span><span class="constant">MEET_MAPBIT</span><span class="plain">) == 0)) {</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">pos_01</span><span class="plain">] == 0) && (</span><span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">pos_10</span><span class="plain">] == 0))</span>
|
|
<<span class="cwebmacro">Make a large, athwart door from icons in all four cells</span> <span class="cwebmacronumber">3.1.1</span>>
|
|
<span class="reserved">else</span>
|
|
<<span class="cwebmacro">Make a small door from icons in just the two used cells</span> <span class="cwebmacronumber">3.1.2</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP3">§3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3_1_1"></a><b>§3.1.1. </b>If the off-diagonal cells happen to be free, we can use them to draw a nice
|
|
large door which is exactly halfway between the two rooms it connects, and
|
|
is perpendicular to the direction of the map connection.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Make a large, athwart door from icons in all four cells</span> <span class="cwebmacronumber">3.1.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">pos_00</span><span class="plain">] |= </span><span class="constant">MEET_MAPBIT</span><span class="plain">;</span>
|
|
<span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">pos_11</span><span class="plain">] |= </span><span class="constant">MEET_MAPBIT</span><span class="plain">;</span>
|
|
<span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">pos_01</span><span class="plain">] = </span><span class="constant">CROSSDOOR_MAPBIT</span><span class="plain">;</span>
|
|
<span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">pos_10</span><span class="plain">] = </span><span class="constant">CROSSDOOR_MAPBIT</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP3_1">§3.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3_1_2"></a><b>§3.1.2. </b>But if the off-diagonal cells aren't free, we have no room for that, and
|
|
must draw a much smaller door on one end or the other (not both) of the
|
|
connection.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Make a small door from icons in just the two used cells</span> <span class="cwebmacronumber">3.1.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">pos_00</span><span class="plain">] = </span><span class="constant">DOOR2_MAPBIT</span><span class="plain">; </span> <span class="comment">mark the door on the BL half of the exit</span>
|
|
<span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">pos_11</span><span class="plain">] = </span><span class="constant">EXIT_MAPBIT</span><span class="plain">; </span> <span class="comment">with no door on the other half of the exit</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP3_1">§3.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3_2"></a><b>§3.2. </b>If the off-diagonal cells happen to be free, we can put little single-pixel
|
|
icons into them to repair the notches which would otherwise show when the
|
|
map connection stripe (3 pixels wide) passes through a cell corner.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Set the relevant bits to put mortice into the notches in a long diagonal</span> <span class="cwebmacronumber">3.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">from</span><span class="plain"> = </span><span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">pos_00</span><span class="plain">], </span><span class="identifier">to</span><span class="plain"> = </span><span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">pos_11</span><span class="plain">];</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">from</span><span class="plain"> == </span><span class="identifier">to</span><span class="plain">) && (</span><span class="identifier">from</span><span class="plain"> & </span><span class="constant">CONNECTIVE_BITMAP</span><span class="plain">) &&</span>
|
|
<span class="plain">(</span><span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">pos_01</span><span class="plain">] == 0) && (</span><span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">pos_10</span><span class="plain">] == 0)) {</span>
|
|
<span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">pos_01</span><span class="plain">] = </span><span class="constant">CROSSDOT_MAPBIT</span><span class="plain">;</span>
|
|
<span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">pos_10</span><span class="plain">] = </span><span class="constant">CROSSDOT_MAPBIT</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP3">§3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP4"></a><b>§4. Nested HTML Tables. </b>In 2010 it is considered something of a heresy to be still doing web page
|
|
layout using nested tables - supposedly, CSS is now strong enough for all
|
|
our needs - but the map is unusually well suited to a table approach since
|
|
it consists, in the end, of tessalations of rectangles.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">Here's the code we will use to create each HTML table.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">map_tables_begun</span><span class="plain"> = 2;</span>
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::begin_variable_width_table</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">) {</span>
|
|
<<span class="cwebmacro">Include some indentation for a new map table</span> <span class="cwebmacronumber">4.2</span>><span class="plain">;</span>
|
|
<span class="identifier">map_tables_begun</span><span class="plain">++;</span>
|
|
<span class="identifier">HTML::begin_html_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, 0, 0, 0, 0, 0);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::begin_map_table</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">width</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">height</span><span class="plain">) {</span>
|
|
<<span class="cwebmacro">Include some indentation for a new map table</span> <span class="cwebmacronumber">4.2</span>><span class="plain">;</span>
|
|
<span class="identifier">map_tables_begun</span><span class="plain">++;</span>
|
|
<span class="identifier">HTML::begin_html_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, 0, 0, 0, </span><span class="identifier">height</span><span class="plain">, </span><span class="identifier">width</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::begin_variable_width_table_with_background</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">bg_image</span><span class="plain">) {</span>
|
|
<<span class="cwebmacro">Include some indentation for a new map table</span> <span class="cwebmacronumber">4.2</span>><span class="plain">;</span>
|
|
<span class="identifier">map_tables_begun</span><span class="plain">++;</span>
|
|
<span class="identifier">HTML::begin_html_table_bg</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, 0, 0, 0, 0, 0, </span><span class="identifier">bg_image</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::HTMLMap::begin_variable_width_table is used in <a href="#SP6_3">§6.3</a>, <a href="#SP9_3_2_1">§9.3.2.1</a>.</p>
|
|
|
|
<p class="endnote">The function PL::HTMLMap::begin_map_table is used in <a href="#SP9_2">§9.2</a>, <a href="#SP9_3_1_1">§9.3.1.1</a>, <a href="#SP9_3_2_1">§9.3.2.1</a>, <a href="#SP9_3_3_1">§9.3.3.1</a>, <a href="#SP9_3_1_2">§9.3.1.2</a>, <a href="#SP9_3_2_2">§9.3.2.2</a>.</p>
|
|
|
|
<p class="endnote">The function PL::HTMLMap::begin_variable_width_table_with_background is used in <a href="#SP9">§9</a>, <a href="#SP9_2">§9.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP4_1"></a><b>§4.1. </b>Each table, however begun, concludes with:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::end_map_table</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">) {</span>
|
|
<span class="identifier">map_tables_begun</span><span class="plain">--;</span>
|
|
<<span class="cwebmacro">Include some indentation for a new map table</span> <span class="cwebmacronumber">4.2</span>><span class="plain">;</span>
|
|
<span class="identifier">HTML::end_html_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::HTMLMap::end_map_table is used in <a href="#SP6_3">§6.3</a>, <a href="#SP9">§9</a>, <a href="#SP9_2">§9.2</a>, <a href="#SP9_3_1_1">§9.3.1.1</a>, <a href="#SP9_3_2_1">§9.3.2.1</a>, <a href="#SP9_3_3_1">§9.3.3.1</a>, <a href="#SP9_3_1_2">§9.3.1.2</a>, <a href="#SP9_3_2_2">§9.3.2.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP4_2"></a><b>§4.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Include some indentation for a new map table</span> <span class="cwebmacronumber">4.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"><</span><span class="identifier">map_tables_begun</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP4">§4</a> (three times), <a href="#SP4_1">§4.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP5"></a><b>§5. Icon images. </b>The icons we use will all be PNGs, and all stored in the <code class="display"><span class="extract">map_icons</span></code>
|
|
directory. A "tool tip" is the text which appears over the mouse arrow
|
|
when it hovers for long enough over the icon.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::plot_map_icon</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">icon_name</span><span class="plain">) {</span>
|
|
<span class="identifier">HTML_TAG_WITH</span><span class="plain">(</span><span class="string">"img"</span><span class="plain">, </span><span class="string">"border=0 src=inform:/map_icons/%S.png"</span><span class="plain">, </span><span class="identifier">icon_name</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::plot_map_icon_with_tip</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">icon_name</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">tool_tip</span><span class="plain">) {</span>
|
|
<span class="identifier">HTML_TAG_WITH</span><span class="plain">(</span><span class="string">"img"</span><span class="plain">, </span><span class="string">"border=0 src=inform:/map_icons/%S.png %S"</span><span class="plain">, </span><span class="identifier">icon_name</span><span class="plain">, </span><span class="identifier">tool_tip</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::HTMLMap::plot_map_icon is used in <a href="#SP9_3_1_1">§9.3.1.1</a>, <a href="#SP9_3_2_1">§9.3.2.1</a>, <a href="#SP9_3_2_1_1">§9.3.2.1.1</a>, <a href="#SP9_3_3_1">§9.3.3.1</a>, <a href="#SP10_1">§10.1</a>, <a href="#SP10_2">§10.2</a>.</p>
|
|
|
|
<p class="endnote">The function PL::HTMLMap::plot_map_icon_with_tip is used in <a href="#SP10_2">§10.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6"></a><b>§6. The major map. </b>Note that we check to see if there is more than one room in the world: if
|
|
there isn't, we don't bother with a full map, but we still calculate as far
|
|
as the icon grid in order to be sure that the little 1 by 1 map for it (in
|
|
the details part of the World Index page) will be all right.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::render_map_as_HTML</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">) {</span>
|
|
<span class="functiontext">PL::HTMLMap::calculate_map_grid</span><span class="plain">();</span>
|
|
|
|
<<span class="cwebmacro">Choose a map colour for each region</span> <span class="cwebmacronumber">6.1</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Choose a map colour for each room, based on its region membership</span> <span class="cwebmacronumber">6.2</span>><span class="plain">;</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Instances::count</span><span class="plain">(</span><span class="identifier">K_room</span><span class="plain">) >= 2) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML::comment</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"WORLD WRITE MAP BEGINS"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<<span class="cwebmacro">Draw an HTML map for the whole Universe of rooms</span> <span class="cwebmacronumber">6.3</span>><span class="plain">;</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML::comment</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"WORLD WRITE MAP ENDS"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::HTMLMap::render_map_as_HTML appears nowhere else.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_1"></a><b>§6.1. </b>We give different colours to the first 20 regions defined, then repeat
|
|
the cycle for the next 20, and so on. (It's unlikely that there are that
|
|
many regions, but even if there are, regions 20 apart are unlikely to come
|
|
into contact, since they would be created in source text a long way distant
|
|
from each other.)
|
|
</p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">define</span> <span class="constant">NO_REGION_COLOURS</span><span class="plain"> 20</span>
|
|
</pre>
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Choose a map colour for each region</span> <span class="cwebmacronumber">6.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">some_map_colours</span><span class="plain">[</span><span class="constant">NO_REGION_COLOURS</span><span class="plain">] = {</span>
|
|
<span class="identifier">L</span><span class="string">"Pale Green"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Light Blue"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Plum"</span><span class="plain">,</span>
|
|
<span class="identifier">L</span><span class="string">"Light Sea Green"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Light Slate Blue"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Navajo White"</span><span class="plain">,</span>
|
|
<span class="identifier">L</span><span class="string">"Violet Red"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Light Cyan"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Light Coral"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Light Pink"</span><span class="plain">,</span>
|
|
<span class="identifier">L</span><span class="string">"Medium Aquamarine"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Medium Blue"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Medium Orchid"</span><span class="plain">,</span>
|
|
<span class="identifier">L</span><span class="string">"Medium Purple"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Medium Sea Green"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Medium Slate Blue"</span><span class="plain">,</span>
|
|
<span class="identifier">L</span><span class="string">"Medium Spring Green"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Medium Turquoise"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Medium Violet Red"</span><span class="plain">,</span>
|
|
<span class="identifier">L</span><span class="string">"Light Golden Rod Yellow"</span><span class="plain"> };</span>
|
|
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">RG</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">regc</span><span class="plain"> = 0;</span>
|
|
<span class="identifier">LOOP_OVER_INSTANCES</span><span class="plain">(</span><span class="identifier">RG</span><span class="plain">, </span><span class="identifier">K_region</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">RG</span><span class="plain">)-</span><span class="element">>world_index_colour</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
|
|
<span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">RG</span><span class="plain">)-</span><span class="element">>world_index_colour</span><span class="plain"> =</span>
|
|
<span class="identifier">HTML::translate_colour_name</span><span class="plain">(</span>
|
|
<span class="identifier">some_map_colours</span><span class="plain">[(</span><span class="identifier">regc</span><span class="plain">++) % </span><span class="constant">NO_REGION_COLOURS</span><span class="plain">]);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6">§6</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_2"></a><b>§6.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Choose a map colour for each room, based on its region membership</span> <span class="cwebmacronumber">6.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">default_room_col</span><span class="plain"> = </span><span class="identifier">HTML::translate_colour_name</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"Light Grey"</span><span class="plain">);</span>
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER_ROOMS</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">)-</span><span class="element">>world_index_colour</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">reg</span><span class="plain"> = </span><span class="functiontext">PL::Regions::enclosing</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">reg</span><span class="plain">)</span>
|
|
<span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">)-</span><span class="element">>world_index_colour</span><span class="plain"> = </span><span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">reg</span><span class="plain">)-</span><span class="element">>world_index_colour</span><span class="plain">;</span>
|
|
<span class="reserved">else</span>
|
|
<span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">)-</span><span class="element">>world_index_colour</span><span class="plain"> = </span><span class="identifier">default_room_col</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6">§6</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_3"></a><b>§6.3. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Draw an HTML map for the whole Universe of rooms</span> <span class="cwebmacronumber">6.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="functiontext">PL::HTMLMap::begin_variable_width_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">z</span><span class="plain">;</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">z</span><span class="plain">=</span><span class="identifier">Universe</span><span class="element">.corner1</span><span class="plain">.</span><span class="identifier">z</span><span class="plain">; </span><span class="identifier">z</span><span class="plain">>=</span><span class="identifier">Universe</span><span class="element">.corner0</span><span class="plain">.</span><span class="identifier">z</span><span class="plain">; </span><span class="identifier">z</span><span class="plain">--) {</span>
|
|
<<span class="cwebmacro">Draw the rubric row which labels this level of the map</span> <span class="cwebmacronumber">6.3.1</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Draw this level of the map</span> <span class="cwebmacronumber">6.3.2</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<<span class="cwebmacro">Draw the baseline rubric row which concludes the map</span> <span class="cwebmacronumber">6.3.3</span>><span class="plain">;</span>
|
|
<span class="functiontext">PL::HTMLMap::end_map_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<<span class="cwebmacro">Add a paragraph describing how non-standard directions are mapped</span> <span class="cwebmacronumber">6.3.4</span>><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6">§6</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_3_1"></a><b>§6.3.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Draw the rubric row which labels this level of the map</span> <span class="cwebmacronumber">6.3.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">level_rubric</span><span class="plain"> = </span><span class="string">"Map"</span><span class="plain">; </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">par</span><span class="plain"> = 0;</span>
|
|
<span class="functiontext">PL::HTMLMap::devise_level_rubric</span><span class="plain">(</span><span class="identifier">z</span><span class="plain">, &</span><span class="identifier">level_rubric</span><span class="plain">, &</span><span class="identifier">par</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">); </span><span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rounding</span><span class="plain"> = 0;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">z</span><span class="plain"> == </span><span class="identifier">Universe</span><span class="element">.corner1</span><span class="plain">.</span><span class="identifier">z</span><span class="plain">) </span><span class="identifier">rounding</span><span class="plain"> = </span><span class="identifier">ROUND_BOX_TOP</span><span class="plain">;</span>
|
|
<span class="identifier">HTML::open_coloured_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"e0e0e0"</span><span class="plain">, </span><span class="identifier">rounding</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<i>"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="identifier">level_rubric</span><span class="plain">, </span><span class="identifier">par</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</i>"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML::close_coloured_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"e0e0e0"</span><span class="plain">, </span><span class="identifier">rounding</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6_3">§6.3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_3_2"></a><b>§6.3.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Draw this level of the map</span> <span class="cwebmacronumber">6.3.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">y_max</span><span class="plain"> = -1000000000, </span><span class="identifier">y_min</span><span class="plain"> = 1000000000; </span> <span class="comment">assuming there are fewer than 1 billion rooms</span>
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER_ROOMS</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">).</span><span class="identifier">z</span><span class="plain"> == </span><span class="identifier">z</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">).</span><span class="identifier">y</span><span class="plain"> < </span><span class="identifier">y_min</span><span class="plain">) </span><span class="identifier">y_min</span><span class="plain"> = </span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">).</span><span class="identifier">y</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">).</span><span class="identifier">y</span><span class="plain"> > </span><span class="identifier">y_max</span><span class="plain">) </span><span class="identifier">y_max</span><span class="plain"> = </span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">).</span><span class="identifier">y</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">y_max</span><span class="plain"> < </span><span class="identifier">y_min</span><span class="plain">) </span><span class="reserved">continue</span><span class="plain">;</span>
|
|
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">SPATIAL_MAP</span><span class="plain">, </span><span class="string">"Level %d has rooms with %d <= y <= %d\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">z</span><span class="plain">, </span><span class="identifier">y_min</span><span class="plain">, </span><span class="identifier">y_max</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">); </span><span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_level</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">Universe</span><span class="element">.corner0.x</span><span class="plain">, </span><span class="identifier">Universe</span><span class="element">.corner1.x</span><span class="plain">, </span><span class="identifier">y_min</span><span class="plain">, </span><span class="identifier">y_max</span><span class="plain">, </span><span class="identifier">z</span><span class="plain">, 1);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6_3">§6.3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_3_3"></a><b>§6.3.3. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Draw the baseline rubric row which concludes the map</span> <span class="cwebmacronumber">6.3.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">); </span><span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML::open_coloured_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"e0e0e0"</span><span class="plain">, </span><span class="identifier">ROUND_BOX_BOTTOM</span><span class="plain">);</span>
|
|
<span class="identifier">HTML::close_coloured_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"e0e0e0"</span><span class="plain">, </span><span class="identifier">ROUND_BOX_BOTTOM</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6_3">§6.3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_3_4"></a><b>§6.3.4. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Add a paragraph describing how non-standard directions are mapped</span> <span class="cwebmacronumber">6.3.4</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">D</span><span class="plain">; </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">k</span><span class="plain"> = 0;</span>
|
|
<span class="identifier">LOOP_OVER_INSTANCES</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">, </span><span class="identifier">K_direction</span><span class="plain">) {</span>
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain"> = </span><span class="functiontext">PL::SpatialMap::mapped_as_if</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">A</span><span class="plain">) {</span>
|
|
<span class="identifier">k</span><span class="plain">++;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">k</span><span class="plain"> == 1) {</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<i>Mapping "</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"; "</span><span class="plain">);</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">DW</span><span class="plain"> = </span><span class="identifier">Instances::get_name</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">); </span> <span class="comment">name of the direction</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">AW</span><span class="plain"> = </span><span class="identifier">Instances::get_name</span><span class="plain">(</span><span class="identifier">A</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">); </span> <span class="comment">name of the as-direction</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%+W as %+W"</span><span class="plain">, </span><span class="identifier">DW</span><span class="plain">, </span><span class="identifier">AW</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">k</span><span class="plain"> > 0) { </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</i>"</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); }</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6_3">§6.3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP7"></a><b>§7. Level rubrics. </b></p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::devise_level_rubric</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">z</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> **</span><span class="identifier">level_rubric</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">) {</span>
|
|
<span class="plain">*</span><span class="identifier">level_rubric</span><span class="plain"> = </span><span class="string">"Map"</span><span class="plain">; *</span><span class="identifier">par</span><span class="plain"> = 0;</span>
|
|
<span class="reserved">switch</span><span class="plain">(</span><span class="identifier">Universe</span><span class="element">.corner1</span><span class="plain">.</span><span class="identifier">z</span><span class="plain"> - </span><span class="identifier">Universe</span><span class="element">.corner0</span><span class="plain">.</span><span class="identifier">z</span><span class="plain">) {</span>
|
|
<span class="reserved">case</span><span class="plain"> 0:</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> 1: </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">z</span><span class="plain"> == </span><span class="identifier">Universe</span><span class="element">.corner0</span><span class="plain">.</span><span class="identifier">z</span><span class="plain">) *</span><span class="identifier">level_rubric</span><span class="plain"> = </span><span class="string">"Lower"</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">z</span><span class="plain"> == </span><span class="identifier">Universe</span><span class="element">.corner1</span><span class="plain">.</span><span class="identifier">z</span><span class="plain">) *</span><span class="identifier">level_rubric</span><span class="plain"> = </span><span class="string">"Upper"</span><span class="plain">;</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">default</span><span class="plain">: {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">z_offset</span><span class="plain"> = </span><span class="identifier">z</span><span class="plain">-</span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">benchmark_room</span><span class="plain">).</span><span class="identifier">z</span><span class="plain">;</span>
|
|
<span class="reserved">switch</span><span class="plain">(</span><span class="identifier">z_offset</span><span class="plain">) {</span>
|
|
<span class="reserved">case</span><span class="plain"> 0: *</span><span class="identifier">level_rubric</span><span class="plain"> = </span><span class="string">"Starting level"</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> 1: *</span><span class="identifier">level_rubric</span><span class="plain"> = </span><span class="string">"First level up"</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> -1: *</span><span class="identifier">level_rubric</span><span class="plain"> = </span><span class="string">"First level down"</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> 2: *</span><span class="identifier">level_rubric</span><span class="plain"> = </span><span class="string">"Second level up"</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> -2: *</span><span class="identifier">level_rubric</span><span class="plain"> = </span><span class="string">"Second level down"</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> 3: *</span><span class="identifier">level_rubric</span><span class="plain"> = </span><span class="string">"Third level up"</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> -3: *</span><span class="identifier">level_rubric</span><span class="plain"> = </span><span class="string">"Third level down"</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">default</span><span class="plain">:</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">z_offset</span><span class="plain"> > 0) {</span>
|
|
<span class="plain">*</span><span class="identifier">par</span><span class="plain"> = </span><span class="identifier">z_offset</span><span class="plain">; *</span><span class="identifier">level_rubric</span><span class="plain"> = </span><span class="string">"Level %d up"</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">z_offset</span><span class="plain"> < 0) {</span>
|
|
<span class="plain">*</span><span class="identifier">par</span><span class="plain"> = -</span><span class="identifier">z_offset</span><span class="plain">; *</span><span class="identifier">level_rubric</span><span class="plain"> = </span><span class="string">"Level %d down"</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::HTMLMap::devise_level_rubric is used in <a href="#SP6_3_1">§6.3.1</a>, 3/em (<a href="3-em.html#SP24_2">§24.2</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP8"></a><b>§8. Single-room submaps. </b>The following provides the "details" portion of the World index: there
|
|
are two columns, the first containing a 1* 1 submap of just the
|
|
room in question, the second containing its indexing details.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">This will only work if the main routine above has already been called, so
|
|
that the grids are calculated, the region colours decided, and so on.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::render_single_room_as_HTML</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="identifier">noun</span><span class="plain"> *</span><span class="identifier">nt</span><span class="plain"> = </span><span class="identifier">Instances::get_noun</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">);</span>
|
|
<span class="identifier">Index::anchor</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">UseNouns::identifier</span><span class="plain">(</span><span class="identifier">nt</span><span class="plain">));</span>
|
|
<span class="identifier">HTML_TAG_WITH</span><span class="plain">(</span><span class="string">"a"</span><span class="plain">, </span><span class="string">"name=wo_%d"</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">-></span><span class="identifier">allocation_id</span><span class="plain">);</span>
|
|
<span class="identifier">HTML::begin_plain_html_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="identifier">HTML::first_html_column</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 0);</span>
|
|
<span class="reserved">vector</span><span class="plain"> </span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_level</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">P</span><span class="element">.x</span><span class="plain">, </span><span class="identifier">P</span><span class="element">.x</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">y</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">y</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">z</span><span class="plain">, 2);</span>
|
|
<span class="identifier">HTML::next_html_column</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 0);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&nbsp;"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML::next_html_column</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 0);</span>
|
|
<span class="identifier">Data::Objects::index</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 1, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
<span class="identifier">HTML::end_html_row</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="identifier">HTML::end_html_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::HTMLMap::render_single_room_as_HTML appears nowhere else.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP9"></a><b>§9. Plotting a rectangle of the map. </b>Either way, then, we end up calling the following routine, which plots a
|
|
map of a rectangular X-Y area at a given fixed Z coordinate. The pass is 1
|
|
for the main mapping, 2 for single-room-only mapping lower down on the
|
|
index page.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::plot_map_level</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">x0</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">x1</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">y0</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">y1</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">z</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">pass</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pass</span><span class="plain"> == 1)</span>
|
|
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">SPATIAL_MAP</span><span class="plain">, </span><span class="string">"Plot: [%d, %d] x [%d, %d] x {%d}\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">x0</span><span class="plain">, </span><span class="identifier">x1</span><span class="plain">, </span><span class="identifier">y0</span><span class="plain">, </span><span class="identifier">y1</span><span class="plain">, </span><span class="identifier">z</span><span class="plain">);</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">with_numbering</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">pass</span><span class="plain"> == 1) && (</span><span class="identifier">Universe</span><span class="element">.corner1</span><span class="plain">.</span><span class="identifier">z</span><span class="plain"> != </span><span class="identifier">Universe</span><span class="element">.corner0</span><span class="plain">.</span><span class="identifier">z</span><span class="plain">)) </span><span class="identifier">with_numbering</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::begin_variable_width_table_with_background</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"grid.png"</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">y</span><span class="plain">, </span><span class="identifier">just_dislocated</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">y</span><span class="plain">=</span><span class="identifier">y1</span><span class="plain">; </span><span class="identifier">y</span><span class="plain">>=</span><span class="identifier">y0</span><span class="plain">; </span><span class="identifier">y</span><span class="plain">--) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">x</span><span class="plain">, </span><span class="identifier">c</span><span class="plain"> = 0;</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">x</span><span class="plain">=</span><span class="identifier">x0</span><span class="plain">; </span><span class="identifier">x</span><span class="plain"><=</span><span class="identifier">x1</span><span class="plain">; </span><span class="identifier">x</span><span class="plain">++)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">room_grid</span><span class="plain">[</span><span class="identifier">ROOM_GRID_POS</span><span class="plain">(</span><span class="functiontext">Geometry::vec</span><span class="plain">(</span><span class="identifier">x</span><span class="plain">, </span><span class="identifier">y</span><span class="plain">, </span><span class="identifier">z</span><span class="plain">))])</span>
|
|
<span class="identifier">c</span><span class="plain">++;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == 0) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">just_dislocated</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">just_dislocated</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<<span class="cwebmacro">Render a row of grid dislocation icons</span> <span class="cwebmacronumber">9.2</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">continue</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">just_dislocated</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<<span class="cwebmacro">Render a row of map cells</span> <span class="cwebmacronumber">9.3</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="functiontext">PL::HTMLMap::end_map_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::HTMLMap::plot_map_level is used in <a href="#SP6_3_2">§6.3.2</a>, <a href="#SP8">§8</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP9_1"></a><b>§9.1. </b>Cells in the map as drawn are divided into three stripes. The top stripe
|
|
contains the icons for the NW, N, NE exits, the middle stripe the icon for W,
|
|
then the central square, then the icon for E, and the bottom stripe the three
|
|
icons for SW, S, SE exits. We can therefore divide the pixel width of a cell
|
|
as x_o + x_i + x_o, where x_i is the width of the central square.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">It follows that any icon to be plotted in the four corner positions must
|
|
be square and have pixel dimensions x_o* x_o; icons for the E and W
|
|
exit positions are x_o* x_i; icons for the N and S positions are
|
|
x_i* x_o; and the central square is, of course, x_i* x_i,
|
|
though in fact we don't plot an image there.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">The grid background must have pixel dimensions (2x_o+x_i)* (2x_o+x_i).
|
|
</p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">define</span> <span class="constant">MAP_CELL_OUTER_SIZE</span><span class="plain"> 13 </span> <span class="comment">i.e., x_o</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">MAP_CELL_INNER_SIZE</span><span class="plain"> 27 </span> <span class="comment">i.e., x_i</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">MAP_CELL_SIZE</span><span class="plain"> (</span><span class="constant">MAP_CELL_OUTER_SIZE</span><span class="plain"> + </span><span class="constant">MAP_CELL_INNER_SIZE</span><span class="plain"> + </span><span class="constant">MAP_CELL_OUTER_SIZE</span><span class="plain">)</span>
|
|
</pre>
|
|
<p class="inwebparagraph"><a id="SP9_2"></a><b>§9.2. </b>This is going to be a height-19 blank row of a table with a different
|
|
background image to the regular grid background — it's an icon of the grid
|
|
with breaks in it. So we need to end the existing table, start a new one,
|
|
end it again, and start another table like the original.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">The cells in a dislocation row have the usual width, but a foreshortened
|
|
height, and they're drawn with a single stripe.
|
|
</p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">define</span> <span class="constant">MAP_DISLOCATION_HEIGHT</span><span class="plain"> 19 </span> <span class="comment">the reduced height</span>
|
|
</pre>
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Render a row of grid dislocation icons</span> <span class="cwebmacronumber">9.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="functiontext">PL::HTMLMap::end_map_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::begin_variable_width_table_with_background</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"dislocation.png"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">cells</span><span class="plain"> = </span><span class="identifier">x1</span><span class="plain">-</span><span class="identifier">x0</span><span class="plain">+1;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">with_numbering</span><span class="plain">) </span><span class="identifier">cells</span><span class="plain"> += 2;</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"><</span><span class="identifier">cells</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::begin_map_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">MAP_CELL_SIZE</span><span class="plain">, </span><span class="constant">MAP_DISLOCATION_HEIGHT</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::end_map_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::end_map_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::begin_variable_width_table_with_background</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"grid.png"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP9">§9</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP9_3"></a><b>§9.3. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Render a row of map cells</span> <span class="cwebmacronumber">9.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<<span class="cwebmacro">Render the top stripe of the map row</span> <span class="cwebmacronumber">9.3.1</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Render the middle stripe of the map row</span> <span class="cwebmacronumber">9.3.2</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Render the bottom stripe of the map row</span> <span class="cwebmacronumber">9.3.3</span>><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP9">§9</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP9_3_1"></a><b>§9.3.1. </b>The top stripe has height x_o.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Render the top stripe of the map row</span> <span class="cwebmacronumber">9.3.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">with_numbering</span><span class="plain">) </span><<span class="cwebmacro">Render a top or bottom stripe for a blank cell</span> <span class="cwebmacronumber">9.3.1.2</span>><span class="plain">;</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">x</span><span class="plain">=</span><span class="identifier">x0</span><span class="plain">; </span><span class="identifier">x</span><span class="plain"><=</span><span class="identifier">x1</span><span class="plain">; </span><span class="identifier">x</span><span class="plain">++) </span><<span class="cwebmacro">Render a top stripe for a substantive cell</span> <span class="cwebmacronumber">9.3.1.1</span>><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">with_numbering</span><span class="plain">) </span><<span class="cwebmacro">Render a top or bottom stripe for a blank cell</span> <span class="cwebmacronumber">9.3.1.2</span>>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP9_3">§9.3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP9_3_2"></a><b>§9.3.2. </b>The middle stripe has height x_i.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Render the middle stripe of the map row</span> <span class="cwebmacronumber">9.3.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">with_numbering</span><span class="plain">) </span><<span class="cwebmacro">Render a middle stripe for a numbering cell</span> <span class="cwebmacronumber">9.3.2.2</span>><span class="plain">;</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">x</span><span class="plain">=</span><span class="identifier">x0</span><span class="plain">; </span><span class="identifier">x</span><span class="plain"><=</span><span class="identifier">x1</span><span class="plain">; </span><span class="identifier">x</span><span class="plain">++) </span><<span class="cwebmacro">Render a middle stripe for a substantive cell</span> <span class="cwebmacronumber">9.3.2.1</span>><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">with_numbering</span><span class="plain">) </span><<span class="cwebmacro">Render a middle stripe for a numbering cell</span> <span class="cwebmacronumber">9.3.2.2</span>><span class="plain">;</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP9_3">§9.3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP9_3_3"></a><b>§9.3.3. </b>The bottom stripe has height x_o.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Render the bottom stripe of the map row</span> <span class="cwebmacronumber">9.3.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">with_numbering</span><span class="plain">) </span><<span class="cwebmacro">Render a top or bottom stripe for a blank cell</span> <span class="cwebmacronumber">9.3.1.2</span>>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">x</span><span class="plain">=</span><span class="identifier">x0</span><span class="plain">; </span><span class="identifier">x</span><span class="plain"><=</span><span class="identifier">x1</span><span class="plain">; </span><span class="identifier">x</span><span class="plain">++) </span><<span class="cwebmacro">Render a bottom stripe for a substantive cell</span> <span class="cwebmacronumber">9.3.3.1</span>><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">with_numbering</span><span class="plain">) </span><<span class="cwebmacro">Render a top or bottom stripe for a blank cell</span> <span class="cwebmacronumber">9.3.1.2</span>>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP9_3">§9.3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP9_3_1_1"></a><b>§9.3.1.1. Substantive cells. </b></p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Render a top stripe for a substantive cell</span> <span class="cwebmacronumber">9.3.1.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">vector</span><span class="plain"> </span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Geometry::vec</span><span class="plain">(</span><span class="identifier">x</span><span class="plain">, </span><span class="identifier">y</span><span class="plain">, </span><span class="identifier">z</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::begin_map_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">MAP_CELL_SIZE</span><span class="plain">, </span><span class="constant">MAP_CELL_OUTER_SIZE</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_cell</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pass</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, 0, 0, 2);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, 0, 0)] & </span><span class="constant">CONNECTIVE_BITMAP</span><span class="plain">)</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_icon</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"s_dot"</span><span class="plain">); </span><span class="reserved">else</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::plot_map_icon</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"ns_spacer"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_cell</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pass</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, 1, 0, 8);</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_cell</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pass</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, 2, 0, 0);</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_cell</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pass</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, 3, 0, -1);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, 4, 0)] & </span><span class="constant">CONNECTIVE_BITMAP</span><span class="plain">)</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_icon</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"s_dot"</span><span class="plain">); </span><span class="reserved">else</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::plot_map_icon</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"ns_spacer"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_cell</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pass</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, 4, 0, 1);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::end_map_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP9_3_1">§9.3.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP9_3_2_1"></a><b>§9.3.2.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Render a middle stripe for a substantive cell</span> <span class="cwebmacronumber">9.3.2.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">vector</span><span class="plain"> </span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Geometry::vec</span><span class="plain">(</span><span class="identifier">x</span><span class="plain">, </span><span class="identifier">y</span><span class="plain">, </span><span class="identifier">z</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::begin_map_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">MAP_CELL_SIZE</span><span class="plain">, </span><span class="constant">MAP_CELL_INNER_SIZE</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::begin_variable_width_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, 0, 0)] & </span><span class="constant">CONNECTIVE_BITMAP</span><span class="plain">)</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_icon</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"e_dot"</span><span class="plain">); </span><span class="reserved">else</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::plot_map_icon</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"ew_spacer"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"br"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_cell</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pass</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, 0, 1, 11);</span>
|
|
<span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"br"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_cell</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pass</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, 0, 2, 7);</span>
|
|
<span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"br"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_cell</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pass</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, 0, 3, -1);</span>
|
|
<span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"br"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, 0, 4)] & </span><span class="constant">CONNECTIVE_BITMAP</span><span class="plain">)</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_icon</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"e_dot"</span><span class="plain">); </span><span class="reserved">else</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::plot_map_icon</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"ew_spacer"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::end_map_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
|
|
<<span class="cwebmacro">Render the central square for a substantive cell</span> <span class="cwebmacronumber">9.3.2.1.1</span>><span class="plain">;</span>
|
|
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::begin_map_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">MAP_CELL_OUTER_SIZE</span><span class="plain">, </span><span class="constant">MAP_CELL_INNER_SIZE</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, 4, 0)] & </span><span class="constant">CONNECTIVE_BITMAP</span><span class="plain">)</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_icon</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"w_dot"</span><span class="plain">); </span><span class="reserved">else</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::plot_map_icon</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"ew_spacer"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"br"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_cell</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pass</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, 4, 1, -1);</span>
|
|
<span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"br"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_cell</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pass</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, 4, 2, 6);</span>
|
|
<span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"br"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_cell</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pass</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, 4, 3, 10);</span>
|
|
<span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"br"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, 4, 4)] & </span><span class="constant">CONNECTIVE_BITMAP</span><span class="plain">)</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_icon</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"w_dot"</span><span class="plain">); </span><span class="reserved">else</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::plot_map_icon</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"ew_spacer"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::end_map_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::end_map_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP9_3_2">§9.3.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP9_3_2_1_1"></a><b>§9.3.2.1.1. </b>The centre of a cell might be a room, or it might be an icon showing the
|
|
continuation of one or more long connections running through this cell.
|
|
There are 15 possibilities, and their icons are named as the following shows:
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Render the central square for a substantive cell</span> <span class="cwebmacronumber">9.3.2.1.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bits</span><span class="plain"> = (</span><span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, 2, 2)]) & </span><span class="constant">LONGS_BITMAP</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bits</span><span class="plain"> == 0)</span>
|
|
<span class="functiontext">PL::HTMLMap::index_room_square</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">room_grid</span><span class="plain">[</span><span class="identifier">ROOM_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">)], </span><span class="identifier">pass</span><span class="plain">);</span>
|
|
<span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">icon_name</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">icon_name</span><span class="plain">, </span><span class="string">"long"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bits</span><span class="plain"> & </span><span class="constant">LONGEW_MAPBIT</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">icon_name</span><span class="plain">, </span><span class="string">"_ew"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bits</span><span class="plain"> & </span><span class="constant">LONGNS_MAPBIT</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">icon_name</span><span class="plain">, </span><span class="string">"_ns"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bits</span><span class="plain"> & </span><span class="constant">LONGSWNE_MAPBIT</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">icon_name</span><span class="plain">, </span><span class="string">"_swne"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bits</span><span class="plain"> & </span><span class="constant">LONGNWSE_MAPBIT</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">icon_name</span><span class="plain">, </span><span class="string">"_nwse"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_icon</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">icon_name</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">icon_name</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP9_3_2_1">§9.3.2.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP9_3_3_1"></a><b>§9.3.3.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Render a bottom stripe for a substantive cell</span> <span class="cwebmacronumber">9.3.3.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">vector</span><span class="plain"> </span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Geometry::vec</span><span class="plain">(</span><span class="identifier">x</span><span class="plain">, </span><span class="identifier">y</span><span class="plain">, </span><span class="identifier">z</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::begin_map_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">MAP_CELL_SIZE</span><span class="plain">, </span><span class="constant">MAP_CELL_OUTER_SIZE</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_cell</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pass</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, 0, 4, 5);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, 0, 4)] & </span><span class="constant">CONNECTIVE_BITMAP</span><span class="plain">)</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_icon</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"n_dot"</span><span class="plain">); </span><span class="reserved">else</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::plot_map_icon</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"ns_spacer"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_cell</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pass</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, 1, 4, -1);</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_cell</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pass</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, 2, 4, 3);</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_cell</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pass</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, 3, 4, 9);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, 4, 4)] & </span><span class="constant">CONNECTIVE_BITMAP</span><span class="plain">)</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_icon</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"n_dot"</span><span class="plain">); </span><span class="reserved">else</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::plot_map_icon</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"ns_spacer"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::plot_map_cell</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pass</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, 4, 4, 4);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::end_map_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP9_3_3">§9.3.3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP9_3_1_2"></a><b>§9.3.1.2. Numbering cells. </b>If we're displaying a numbering in the map, that means there are two
|
|
columns — the first and last — which don't contain rooms or exits, but
|
|
are simply blank except for an italic row number.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Render a top or bottom stripe for a blank cell</span> <span class="cwebmacronumber">9.3.1.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::begin_map_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">MAP_CELL_SIZE</span><span class="plain">, </span><span class="constant">MAP_CELL_OUTER_SIZE</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::end_map_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP9_3_1">§9.3.1</a> (twice), <a href="#SP9_3_3">§9.3.3</a> (twice).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP9_3_2_2"></a><b>§9.3.2.2. </b>Note that the row number is with respect to the entire Universe, not to
|
|
the current rectangle being rendered. The two aren't the same, because the
|
|
rectangle may be for a level in which we've omitted blank rows at the north
|
|
and south ends.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Render a middle stripe for a numbering cell</span> <span class="cwebmacronumber">9.3.2.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::begin_map_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">MAP_CELL_SIZE</span><span class="plain">, </span><span class="constant">MAP_CELL_INNER_SIZE</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML::begin_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"c0c0c0"</span><span class="plain">);</span>
|
|
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">HTML_MAP_FONT_SIZE</span>
|
|
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"span"</span><span class="plain">, </span><span class="string">"style=\</span><span class="plain">"</span><span class="string">font-size:%dpx;\</span><span class="plain">"</span><span class="string">"</span><span class="plain">, </span><span class="identifier">HTML_MAP_FONT_SIZE</span><span class="plain">);</span>
|
|
<span class="plain">#</span><span class="identifier">endif</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"center"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"i"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%d"</span><span class="plain">, </span><span class="identifier">y</span><span class="plain">-</span><span class="identifier">Universe</span><span class="element">.corner0</span><span class="plain">.</span><span class="identifier">y</span><span class="plain">+1);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"i"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"center"</span><span class="plain">);</span>
|
|
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">HTML_MAP_FONT_SIZE</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"span"</span><span class="plain">);</span>
|
|
<span class="plain">#</span><span class="identifier">endif</span>
|
|
<span class="identifier">HTML::end_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::end_map_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP9_3_2">§9.3.2</a> (twice).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10"></a><b>§10. Plotting the eight exterior icons. </b>That leaves just the low-level routines to handle the nine individual pieces
|
|
of the cell. First, the eight cells around the outside:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::plot_map_cell</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">pass</span><span class="plain">, </span><span class="reserved">vector</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i1</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i2</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">faux_exit</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bitmap</span><span class="plain"> = </span><span class="identifier">icon_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">i1</span><span class="plain">, </span><span class="identifier">i2</span><span class="plain">)];</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pass</span><span class="plain"> == 2) </span><span class="identifier">bitmap</span><span class="plain"> &= </span><span class="constant">CONNECTIVE_BITMAP</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bitmap</span><span class="plain"> == 0) </span><<span class="cwebmacro">This map cell is empty</span> <span class="cwebmacronumber">10.1</span>>
|
|
<span class="reserved">else</span><span class="plain"> </span><<span class="cwebmacro">There's something in this map cell</span> <span class="cwebmacronumber">10.2</span>><span class="character">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::HTMLMap::plot_map_cell is used in <a href="#SP9_3_1_1">§9.3.1.1</a>, <a href="#SP9_3_2_1">§9.3.2.1</a>, <a href="#SP9_3_3_1">§9.3.3.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10_1"></a><b>§10.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">This map cell is empty</span> <span class="cwebmacronumber">10.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">i1</span><span class="plain"> == 1) || (</span><span class="identifier">i1</span><span class="plain"> == 3)) </span><span class="functiontext">PL::HTMLMap::plot_map_icon</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"blank_ns"</span><span class="plain">);</span>
|
|
<span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">i2</span><span class="plain"> == 1) || (</span><span class="identifier">i2</span><span class="plain"> == 3)) </span><span class="functiontext">PL::HTMLMap::plot_map_icon</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"blank_ew"</span><span class="plain">);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::plot_map_icon</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"blank_square"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP10">§10</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10_2"></a><b>§10.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">There's something in this map cell</span> <span class="cwebmacronumber">10.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">exit</span><span class="plain"> = </span><span class="identifier">exit_grid</span><span class="plain">[</span><span class="identifier">ICON_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">i1</span><span class="plain">, </span><span class="identifier">i2</span><span class="plain">)];</span>
|
|
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">icon_name</span><span class="plain">);</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">tool_tip</span><span class="plain">);</span>
|
|
|
|
<<span class="cwebmacro">Compose the icon name for this exit</span> <span class="cwebmacronumber">10.2.1</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Compose a tool tip for this exit icon</span> <span class="cwebmacronumber">10.2.2</span>><span class="plain">;</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">tool_tip</span><span class="plain">) > 0) </span><span class="functiontext">PL::HTMLMap::plot_map_icon_with_tip</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">icon_name</span><span class="plain">, </span><span class="identifier">tool_tip</span><span class="plain">);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::plot_map_icon</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">icon_name</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">icon_name</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">tool_tip</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP10">§10</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10_2_1"></a><b>§10.2.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Compose the icon name for this exit</span> <span class="cwebmacronumber">10.2.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">clue</span><span class="plain"> = </span><span class="functiontext">PL::SpatialMap::find_icon_label</span><span class="plain">(</span><span class="identifier">exit</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">clue</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">clue</span><span class="plain"> = </span><span class="functiontext">PL::SpatialMap::find_icon_label</span><span class="plain">(</span><span class="identifier">faux_exit</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">clue</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">clue</span><span class="plain"> = </span><span class="string">""</span><span class="plain">; </span> <span class="comment">should never happen</span>
|
|
|
|
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">addendum</span><span class="plain"> = </span><span class="string">""</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bitmap</span><span class="plain"> & </span><span class="constant">DOOR2_MAPBIT</span><span class="plain">) {</span>
|
|
<span class="identifier">addendum</span><span class="plain"> = </span><span class="string">"_door"</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bitmap</span><span class="plain"> & </span><span class="constant">MEET_MAPBIT</span><span class="plain">) </span><span class="identifier">addendum</span><span class="plain"> = </span><span class="string">"_door_meet"</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bitmap</span><span class="plain"> & </span><span class="constant">DOOR1_MAPBIT</span><span class="plain">) </span><span class="identifier">addendum</span><span class="plain"> = </span><span class="string">"_door_blocked"</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bitmap</span><span class="plain"> & </span><span class="constant">CROSSDOOR_MAPBIT</span><span class="plain">) </span><span class="identifier">addendum</span><span class="plain"> = </span><span class="string">"_corner_door"</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bitmap</span><span class="plain"> & </span><span class="constant">CROSSDOT_MAPBIT</span><span class="plain">) </span><span class="identifier">addendum</span><span class="plain"> = </span><span class="string">"_dot"</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">addendum</span><span class="plain">[0] == 0) && (</span><span class="identifier">bitmap</span><span class="plain"> & </span><span class="constant">FADING_MAPBIT</span><span class="plain">)) </span><span class="identifier">addendum</span><span class="plain"> = </span><span class="string">"_fading"</span><span class="plain">;</span>
|
|
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">icon_name</span><span class="plain">, </span><span class="string">"%s_arrow%s"</span><span class="plain">, </span><span class="identifier">clue</span><span class="plain">, </span><span class="identifier">addendum</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP10_2">§10.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10_2_2"></a><b>§10.2.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Compose a tool tip for this exit icon</span> <span class="cwebmacronumber">10.2.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">D</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">I3</span><span class="plain"> = </span><span class="functiontext">PL::SpatialMap::room_exit</span><span class="plain">(</span><span class="identifier">room_grid</span><span class="plain">[</span><span class="identifier">ROOM_GRID_POS</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">)], </span><span class="identifier">exit</span><span class="plain">, &</span><span class="identifier">D</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">I3</span><span class="plain">) || (</span><span class="identifier">D</span><span class="plain">)) {</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tool_tip</span><span class="plain">, </span><span class="string">"title=\</span><span class="plain">"</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER_OBJECT_INSTANCES</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">PL::Counting::instance_count</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">K_direction</span><span class="plain">) == </span><span class="identifier">exit</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tool_tip</span><span class="plain">, </span><span class="string">"%+I"</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">);</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">D</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">I3</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tool_tip</span><span class="plain">, </span><span class="string">" exit blocked by "</span><span class="plain">);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tool_tip</span><span class="plain">, </span><span class="string">" through "</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tool_tip</span><span class="plain">, </span><span class="string">"%+I"</span><span class="plain">, </span><span class="identifier">D</span><span class="plain">);</span>
|
|
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">I3</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tool_tip</span><span class="plain">, </span><span class="string">" to "</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tool_tip</span><span class="plain">, </span><span class="string">"%+I"</span><span class="plain">, </span><span class="identifier">I3</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tool_tip</span><span class="plain">, </span><span class="string">"\</span><span class="plain">"</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP10_2">§10.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP11"></a><b>§11. Plotting the single central square. </b>The following routine renders the square icons for the rooms themselves,
|
|
which are bordered and coloured single-cell tables.
|
|
</p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">define</span> <span class="constant">ROOM_BORDER_SIZE</span><span class="plain"> 1</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">B_ROOM_BORDER_SIZE</span><span class="plain"> 2</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">ROOM_BORDER_COLOUR</span><span class="plain"> </span><span class="string">"000000"</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">ROOM_TEXT_COLOUR</span><span class="plain"> </span><span class="string">"000000"</span>
|
|
</pre>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::index_room_square</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">pass</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">I</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">b</span><span class="plain"> = </span><span class="constant">ROOM_BORDER_SIZE</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">I</span><span class="plain"> == </span><span class="identifier">benchmark_room</span><span class="plain">) && (</span><span class="identifier">pass</span><span class="plain"> == 1)) </span><span class="identifier">b</span><span class="plain"> = </span><span class="constant">B_ROOM_BORDER_SIZE</span><span class="plain">;</span>
|
|
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"table"</span><span class="plain">,</span>
|
|
<span class="string">"border=\</span><span class="plain">"</span><span class="string">%d\</span><span class="plain">"</span><span class="string"> cellpadding=\</span><span class="plain">"</span><span class="string">0\</span><span class="plain">"</span><span class="string"> cellspacing=\</span><span class="plain">"</span><span class="string">0\</span><span class="plain">"</span><span class="string"> "</span>
|
|
<span class="string">"bordercolor=\</span><span class="plain">"</span><span class="string">#%s\</span><span class="plain">"</span><span class="string"> width=\</span><span class="plain">"</span><span class="string">%d\</span><span class="plain">"</span><span class="string"> height=\</span><span class="plain">"</span><span class="string">%d\</span><span class="plain">"</span><span class="string"> "</span>
|
|
<span class="string">"title=\</span><span class="plain">"</span><span class="string">%+I\</span><span class="plain">"</span><span class="string">"</span><span class="plain">,</span>
|
|
<span class="identifier">b</span><span class="plain">, </span><span class="constant">ROOM_BORDER_COLOUR</span><span class="plain">, </span><span class="constant">MAP_CELL_INNER_SIZE</span><span class="plain">, </span><span class="constant">MAP_CELL_INNER_SIZE</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"valign=\</span><span class="plain">"</span><span class="string">middle\</span><span class="plain">"</span><span class="string"> align=\</span><span class="plain">"</span><span class="string">center\</span><span class="plain">"</span><span class="string"> bgcolor=\</span><span class="plain">"</span><span class="string">#%w\</span><span class="plain">"</span><span class="string">"</span><span class="plain">,</span>
|
|
<span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">)-</span><span class="element">>world_index_colour</span><span class="plain">);</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">col</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">)-</span><span class="element">>world_index_text_colour</span><span class="plain">)</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">col</span><span class="plain">, </span><span class="string">"%w"</span><span class="plain">, </span><span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">)-</span><span class="element">>world_index_text_colour</span><span class="plain">);</span>
|
|
<span class="reserved">else</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">col</span><span class="plain">, </span><span class="string">"%s"</span><span class="plain">, </span><span class="constant">ROOM_TEXT_COLOUR</span><span class="plain">);</span>
|
|
<span class="identifier">HTML::begin_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">col</span><span class="plain">);</span>
|
|
<<span class="cwebmacro">Write the text of the abbreviated name of the room</span> <span class="cwebmacronumber">11.1</span>><span class="plain">;</span>
|
|
<span class="identifier">HTML::end_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"table"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">col</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::HTMLMap::index_room_square is used in <a href="#SP9_3_2_1_1">§9.3.2.1.1</a>, <a href="#SP13_1">§13.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP11_1"></a><b>§11.1. </b></p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">define</span> <span class="constant">ABBREV_ROOMS_TO</span><span class="plain"> 2</span>
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Write the text of the abbreviated name of the room</span> <span class="cwebmacronumber">11.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pass</span><span class="plain"> == 1) {</span>
|
|
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"a"</span><span class="plain">, </span><span class="string">"href=#wo_%d style=\</span><span class="plain">"</span><span class="string">text-decoration: none\</span><span class="plain">"</span><span class="string">"</span><span class="plain">,</span>
|
|
<span class="identifier">I</span><span class="plain">-></span><span class="identifier">allocation_id</span><span class="plain">);</span>
|
|
<span class="identifier">HTML::begin_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">col</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">pass</span><span class="plain"> == 1) && (</span><span class="identifier">I</span><span class="plain"> == </span><span class="identifier">benchmark_room</span><span class="plain">)) </span><span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"b"</span><span class="plain">);</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">abbrev</span><span class="plain">);</span>
|
|
<<span class="cwebmacro">Work out the abbreviation for this room's name</span> <span class="cwebmacronumber">11.1.2</span>><span class="character">;</span>
|
|
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">HTML_MAP_FONT_SIZE</span>
|
|
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"span"</span><span class="plain">, </span><span class="string">"style=\</span><span class="plain">"</span><span class="string">font-size:%dpx;\</span><span class="plain">"</span><span class="string">"</span><span class="plain">, </span><span class="identifier">HTML_MAP_FONT_SIZE</span><span class="plain">);</span>
|
|
<span class="plain">#</span><span class="identifier">endif</span>
|
|
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="identifier">abbrev</span><span class="plain">)</span>
|
|
<span class="identifier">HTMLFiles::char_out</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">));</span>
|
|
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">HTML_MAP_FONT_SIZE</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"span"</span><span class="plain">);</span>
|
|
<span class="plain">#</span><span class="identifier">endif</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">pass</span><span class="plain"> == 1) && (</span><span class="identifier">I</span><span class="plain"> == </span><span class="identifier">benchmark_room</span><span class="plain">)) </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"b"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pass</span><span class="plain"> == 1) { </span><span class="identifier">HTML::end_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"a"</span><span class="plain">); }</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">abbrev</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP11">§11</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP11_1_1"></a><b>§11.1.1. </b>When names are abbreviated for use on the World Index map (for instance,
|
|
"Marble Hallway" becomes "MH") each word is tested against the following
|
|
nonterminal; those which match are omitted. So, for instance, "Queen Of The
|
|
South" comes out as "QS".
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="plain"><</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">-</span><span class="identifier">abbreviation</span><span class="plain">-</span><span class="identifier">omission</span><span class="plain">-</span><span class="identifier">words</span><span class="plain">> ::=</span>
|
|
<span class="identifier">in</span><span class="plain"> |</span>
|
|
<span class="identifier">of</span><span class="plain"> |</span>
|
|
<span class="plain"><</span><span class="identifier">article</span><span class="plain">></span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP11_1_2"></a><b>§11.1.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Work out the abbreviation for this room's name</span> <span class="cwebmacronumber">11.1.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain"> = </span><span class="identifier">Instances::get_name</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::nonempty</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = 0;</span>
|
|
<span class="identifier">LOOP_THROUGH_WORDING</span><span class="plain">(</span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">i</span><span class="plain"> > </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)) && (</span><span class="identifier">i</span><span class="plain"> < </span><span class="identifier">Wordings::last_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)) &&</span>
|
|
<span class="plain">(<</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">-</span><span class="identifier">abbreviation</span><span class="plain">-</span><span class="identifier">omission</span><span class="plain">-</span><span class="identifier">words</span><span class="plain">>(</span><span class="identifier">Wordings::one_word</span><span class="plain">(</span><span class="identifier">i</span><span class="plain">)))) </span><span class="reserved">continue</span><span class="plain">;</span>
|
|
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain"> = </span><span class="identifier">Lexer::word_raw_text</span><span class="plain">(</span><span class="identifier">i</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain">++ < </span><span class="constant">ABBREV_ROOMS_TO</span><span class="plain">) </span><span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">abbrev</span><span class="plain">, </span><span class="identifier">Characters::toupper</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">[0]));</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">LOOP_THROUGH_WORDING</span><span class="plain">(</span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">i</span><span class="plain"> > </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)) && (</span><span class="identifier">i</span><span class="plain"> < </span><span class="identifier">Wordings::last_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)) &&</span>
|
|
<span class="plain">(<</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">-</span><span class="identifier">abbreviation</span><span class="plain">-</span><span class="identifier">omission</span><span class="plain">-</span><span class="identifier">words</span><span class="plain">>(</span><span class="identifier">Wordings::one_word</span><span class="plain">(</span><span class="identifier">i</span><span class="plain">)))) </span><span class="reserved">continue</span><span class="plain">;</span>
|
|
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain"> = </span><span class="identifier">Lexer::word_raw_text</span><span class="plain">(</span><span class="identifier">i</span><span class="plain">);</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">j</span><span class="plain">=1; </span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">j</span><span class="plain">]; </span><span class="identifier">j</span><span class="plain">++)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Characters::vowel</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">j</span><span class="plain">]) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain">++ < </span><span class="constant">ABBREV_ROOMS_TO</span><span class="plain">) </span><span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">abbrev</span><span class="plain">, </span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">j</span><span class="plain">]);</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain">++ < </span><span class="constant">ABBREV_ROOMS_TO</span><span class="plain">) && (</span><span class="identifier">p</span><span class="plain">[1])) </span><span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">abbrev</span><span class="plain">, </span><span class="identifier">p</span><span class="plain">[1]);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP11_1">§11.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP12"></a><b>§12. The colour chip. </b>The first of two extras, which aren't strictly speaking part of the HTML map.
|
|
This is the chip shown on the "details" box for a room in the World Index.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::colour_chip</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">Reg</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">at</span><span class="plain">) {</span>
|
|
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"table"</span><span class="plain">,</span>
|
|
<span class="string">"border=\</span><span class="plain">"</span><span class="string">%d\</span><span class="plain">"</span><span class="string"> cellpadding=\</span><span class="plain">"</span><span class="string">0\</span><span class="plain">"</span><span class="string"> cellspacing=\</span><span class="plain">"</span><span class="string">0\</span><span class="plain">"</span><span class="string"> "</span>
|
|
<span class="string">"bordercolor=\</span><span class="plain">"</span><span class="string">#%s\</span><span class="plain">"</span><span class="string"> height=\</span><span class="plain">"</span><span class="string">%d\</span><span class="plain">"</span><span class="string">"</span><span class="plain">,</span>
|
|
<span class="constant">ROOM_BORDER_SIZE</span><span class="plain">, </span><span class="constant">ROOM_BORDER_COLOUR</span><span class="plain">, </span><span class="constant">MAP_CELL_INNER_SIZE</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"valign=\</span><span class="plain">"</span><span class="string">middle\</span><span class="plain">"</span><span class="string"> align=\</span><span class="plain">"</span><span class="string">center\</span><span class="plain">"</span><span class="string"> bgcolor=\</span><span class="plain">"</span><span class="string">#%w\</span><span class="plain">"</span><span class="string">"</span><span class="plain">,</span>
|
|
<span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">Reg</span><span class="plain">)-</span><span class="element">>world_index_colour</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&nbsp;"</span><span class="plain">);</span>
|
|
<span class="identifier">Instances::index_name</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">Reg</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" region"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">at</span><span class="plain">) </span><span class="identifier">Index::link</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">at</span><span class="plain">)));</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&nbsp;"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"table"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::HTMLMap::colour_chip is used in 3/rgn (<a href="3-rgn.html#SP21">§21</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP13"></a><b>§13. The regions key. </b>The part of the World Index showing which rooms belong to which regions. Note
|
|
that nothing is shown if all of the rooms are outside of regions.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::add_region_key</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">) {</span>
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">reg</span><span class="plain">; </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">count</span><span class="plain"> = 0;</span>
|
|
<span class="identifier">LOOP_OVER_INSTANCES</span><span class="plain">(</span><span class="identifier">reg</span><span class="plain">, </span><span class="identifier">K_region</span><span class="plain">)</span>
|
|
<span class="identifier">count</span><span class="plain"> += </span><span class="functiontext">PL::HTMLMap::add_key_for</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">reg</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">count</span><span class="plain"> > 0) </span><span class="identifier">count</span><span class="plain"> += </span><span class="functiontext">PL::HTMLMap::add_key_for</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">count</span><span class="plain"> > 0) </span><span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"hr"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">PL::HTMLMap::add_key_for</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">reg</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">count</span><span class="plain"> = 0;</span>
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER_ROOMS</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">PL::Regions::enclosing</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">) == </span><span class="identifier">reg</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">count</span><span class="plain">++ == 0) {</span>
|
|
<<span class="cwebmacro">Start the region key table for this region</span> <span class="cwebmacronumber">13.1</span>><span class="plain">;</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">", "</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%+W"</span><span class="plain">, </span><span class="identifier">Instances::get_name</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">));</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">count</span><span class="plain"> > 0) </span><<span class="cwebmacro">End the region key table for this region</span> <span class="cwebmacronumber">13.2</span>><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">count</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::HTMLMap::add_region_key appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function PL::HTMLMap::add_key_for appears nowhere else.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP13_1"></a><b>§13.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Start the region key table for this region</span> <span class="cwebmacronumber">13.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML::begin_plain_html_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"width=\</span><span class="plain">"</span><span class="string">40\</span><span class="plain">"</span><span class="string"> valign=\</span><span class="plain">"</span><span class="string">middle\</span><span class="plain">"</span><span class="string"> align=\</span><span class="plain">"</span><span class="string">left\</span><span class="plain">"</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::HTMLMap::index_room_square</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">, 1);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"valign=\</span><span class="plain">"</span><span class="string">middle\</span><span class="plain">"</span><span class="string"> align=\</span><span class="plain">"</span><span class="string">left\</span><span class="plain">"</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<b>"</span><span class="plain">);</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain"> = </span><span class="identifier">Instances::get_name</span><span class="plain">(</span><span class="identifier">reg</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">reg</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%+W"</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<i>Not in any region</i>"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</b>: "</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP13">§13</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP13_2"></a><b>§13.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">End the region key table for this region</span> <span class="cwebmacronumber">13.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML::end_html_row</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="identifier">HTML::end_html_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP13">§13</a>.</p>
|
|
|
|
<hr class="tocbar">
|
|
<ul class="toc"><li><a href="3-sm2.html">Back to 'Spatial Map'</a></li><li><a href="3-em.html">Continue with 'EPS Map'</a></li></ul><hr class="tocbar">
|
|
<!--End of weave-->
|
|
</body>
|
|
</html>
|
|
|