File: building.hc

package info (click to toggle)
craft 3.5-10
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 18,000 kB
  • ctags: 1,602
  • sloc: cpp: 3,794; makefile: 2,319; ansic: 857; sh: 385
file content (143 lines) | stat: -rw-r--r-- 4,943 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143

#include "craft_def.h"
#include "craft.h"
#include "building.h"

int docks_dir (int x0, int y0)
  {int  dir;
   bool ok;
   int  xs;
   int  ys;
   int  dx;
   int  dy;
   int  dd;

   xs = x0    ; ys = y0 - 1; dx = 1; dy = 0; dd = -1; check; if (ok) return 0;
   xs = x0    ; ys = y0 + 3; dx = 1; dy = 0; dd =  1; check; if (ok) return 4;
   xs = x0 - 1; ys = y0    ; dx = 0; dy = 1; dd = -1; check; if (ok) return 2;
   xs = x0 + 3; ys = y0    ; dx = 0; dy = 1; dd =  1; check; if (ok) return 6;
   return 0;     

.  check
     {ok = true;
      if   (dx != 0)
           check_dx
      else check_dy;
     }.

.  check_dx
     {for (int xw = xs; xw < xs + 3 && dx != 0; xw += dx)
        for (int i = 0; i < 3; i++)
            if (! land_properties [landscape [xw][ys + i * dd]].is_water)
               ok = false;
     }.

.  check_dy
     {for (int yw = ys; yw < ys + 3 && dy != 0; yw += dy)
        for (int i = 0; i < 3; i++)
            if (! land_properties [landscape [xs + i * dd][yw]].is_water)
               ok = false;
     }.

  }

int docks_pic (int dir, int dx, int dy, int state)
  {switch (dir)
     {case 0: return pic_docks + dy * 3 + dx;      break;
      case 2: return pic_docks + dy * 3 + dx + 30; break;
      case 4: return pic_docks + dy * 3 + dx + 10; break;
      case 6: return pic_docks + dy * 3 + dx + 20; break;
     };
  }

int docks_ship_pic (int dir, int dx, int dy, int state)
  {switch (dir)
     {case 0: return xpic_ship_on_dock + dy * 3 + dx;      break;
      case 2: return xpic_ship_on_dock + dy * 3 + dx + 30; break;
      case 4: return xpic_ship_on_dock + dy * 3 + dx + 10; break;
      case 6: return xpic_ship_on_dock + dy * 3 + dx + 20; break;
     };
  }

int docks_site_pic (int dir, int dx, int dy, int state)
  {switch (dir)
     {case 0: return pic_docks_built + dy * 3 + dx;      break;
      case 2: return pic_docks_built + dy * 3 + dx + 30; break;
      case 4: return pic_docks_built + dy * 3 + dx + 10; break;
      case 6: return pic_docks_built + dy * 3 + dx + 20; break;
     };
  }

int building_pic (int type, int dx, int dy, int state)
  {int base_pic;

   get_base_pic;
   if   (type == object_docks || type == object_site_docks)
        return base_pic + dy * 3 + dx;
   else return base_pic + dy * 2 + dx;
 
.  get_base_pic
     {switch (type)
       {case object_home          : base_pic = pic_town_hall;     break;
        case object_mine          : base_pic = pic_mine;          break;
        case object_building_site : base_pic = pic_building_site; break;
        case object_camp          : base_pic = pic_camp;          break;
        case object_farm          : base_pic = pic_farm;          break;
        case object_market        : base_pic = pic_market;        break;
        case object_tents         : base_pic = pic_tents;         break;
        case object_mill          : base_pic = pic_mill;          break;
        case object_smith         : base_pic = pic_smith;         break;
        case object_docks         : base_pic = pic_docks;         break;
        case object_site_docks    : base_pic = pic_docks_built;   break;
        case object_uni           : base_pic = pic_uni;           break;
       };
     }.
 
  }

char *building_name (int type)
  {static char r [128];

   get_name;
   return r;

.  get_name
     {switch (type)
       {case object_home          : strcpy (r, "townhall");       break;
        case object_mine          : strcpy (r, "mine");           break;
        case object_building_site : strcpy (r, "building site");  break;
        case object_site_docks    : strcpy (r, "building docks"); break;
        case object_camp          : strcpy (r, "camp");           break;
        case object_farm          : strcpy (r, "farm");           break;
        case object_market        : strcpy (r, "market");         break;
        case object_tents         : strcpy (r, "fort");           break;
        case object_mill          : strcpy (r, "lumber mill");    break;
        case object_smith         : strcpy (r, "smith");          break;
        case object_uni           : strcpy (r, "university");     break;
        case object_docks         : strcpy (r, "docks");          break;
        default                   : strcpy (r, "unknown");        break;
       };
     }.

  }

bool is_building (int type)
  {return (type == object_home       ||
           type == object_mine       ||
           type == object_camp       ||
           type == object_farm       ||
           type == object_market     ||
           type == object_tents      ||
           type == object_mill       ||
           type == object_smith      ||
           type == object_uni        ||
           type == object_site_docks ||
           type == object_docks      ||
           type == object_building_site);
  }

bool is_building (int x, int y)
  {int u = unit [x][y];

   return (u != none && is_building (objects->type [u]));
  }