Initial import of Scalos. To decrease size I have
[AROS-Contrib.git] / fish / 362_rubik / makecube.c
blob9308405d4d143ce49e55dd91ec010328367c613f
1 /* makecube.c ...for rubik.c */
3 /* started 23-Dec-89 */
5 #include "header.c"
7 extern struct points point;
8 extern struct points start;
9 extern unsigned short size;
11 extern struct one_square square[56]; /* 54 on cube + 2 inter-planes */
13 void init_squares() /* this defines the cubes geometry called ONCE */
15 int face,i;
17 for (face=0; face<2; face++) /* small squares in xy plane */
19 (square[9*face+0]).corner[0] = &(point.xyz [0] [0] [face*5]);
20 (square[9*face+0]).corner[1] = &(point.xyz [1] [0] [face*5]);
21 (square[9*face+0]).corner[2] = &(point.xyz [1] [1] [face*5]);
22 (square[9*face+0]).corner[3] = &(point.xyz [0] [1] [face*5]);
24 (square[9*face+1]).corner[0] = &(point.xyz [2] [0] [face*5]);
25 (square[9*face+1]).corner[1] = &(point.xyz [3] [0] [face*5]);
26 (square[9*face+1]).corner[2] = &(point.xyz [3] [1] [face*5]);
27 (square[9*face+1]).corner[3] = &(point.xyz [2] [1] [face*5]);
29 (square[9*face+2]).corner[0] = &(point.xyz [4] [0] [face*5]);
30 (square[9*face+2]).corner[1] = &(point.xyz [5] [0] [face*5]);
31 (square[9*face+2]).corner[2] = &(point.xyz [5] [1] [face*5]);
32 (square[9*face+2]).corner[3] = &(point.xyz [4] [1] [face*5]);
34 (square[9*face+3]).corner[0] = &(point.xyz [0] [2] [face*5]);
35 (square[9*face+3]).corner[1] = &(point.xyz [1] [2] [face*5]);
36 (square[9*face+3]).corner[2] = &(point.xyz [1] [3] [face*5]);
37 (square[9*face+3]).corner[3] = &(point.xyz [0] [3] [face*5]);
39 (square[9*face+4]).corner[0] = &(point.xyz [2] [2] [face*5]);
40 (square[9*face+4]).corner[1] = &(point.xyz [3] [2] [face*5]);
41 (square[9*face+4]).corner[2] = &(point.xyz [3] [3] [face*5]);
42 (square[9*face+4]).corner[3] = &(point.xyz [2] [3] [face*5]);
44 (square[9*face+5]).corner[0] = &(point.xyz [4] [2] [face*5]);
45 (square[9*face+5]).corner[1] = &(point.xyz [5] [2] [face*5]);
46 (square[9*face+5]).corner[2] = &(point.xyz [5] [3] [face*5]);
47 (square[9*face+5]).corner[3] = &(point.xyz [4] [3] [face*5]);
49 (square[9*face+6]).corner[0] = &(point.xyz [0] [4] [face*5]);
50 (square[9*face+6]).corner[1] = &(point.xyz [1] [4] [face*5]);
51 (square[9*face+6]).corner[2] = &(point.xyz [1] [5] [face*5]);
52 (square[9*face+6]).corner[3] = &(point.xyz [0] [5] [face*5]);
54 (square[9*face+7]).corner[0] = &(point.xyz [2] [4] [face*5]);
55 (square[9*face+7]).corner[1] = &(point.xyz [3] [4] [face*5]);
56 (square[9*face+7]).corner[2] = &(point.xyz [3] [5] [face*5]);
57 (square[9*face+7]).corner[3] = &(point.xyz [2] [5] [face*5]);
59 (square[9*face+8]).corner[0] = &(point.xyz [4] [4] [face*5]);
60 (square[9*face+8]).corner[1] = &(point.xyz [5] [4] [face*5]);
61 (square[9*face+8]).corner[2] = &(point.xyz [5] [5] [face*5]);
62 (square[9*face+8]).corner[3] = &(point.xyz [4] [5] [face*5]);
65 for (face=2; face<4; face++) /* small squares in xz plane */
67 (square[9*face+0]).corner[0] = &(point.xyz [0] [(face-2)*5] [0]);
68 (square[9*face+0]).corner[1] = &(point.xyz [1] [(face-2)*5] [0]);
69 (square[9*face+0]).corner[2] = &(point.xyz [1] [(face-2)*5] [1]);
70 (square[9*face+0]).corner[3] = &(point.xyz [0] [(face-2)*5] [1]);
72 (square[9*face+1]).corner[0] = &(point.xyz [2] [(face-2)*5] [0]);
73 (square[9*face+1]).corner[1] = &(point.xyz [3] [(face-2)*5] [0]);
74 (square[9*face+1]).corner[2] = &(point.xyz [3] [(face-2)*5] [1]);
75 (square[9*face+1]).corner[3] = &(point.xyz [2] [(face-2)*5] [1]);
77 (square[9*face+2]).corner[0] = &(point.xyz [4] [(face-2)*5] [0]);
78 (square[9*face+2]).corner[1] = &(point.xyz [5] [(face-2)*5] [0]);
79 (square[9*face+2]).corner[2] = &(point.xyz [5] [(face-2)*5] [1]);
80 (square[9*face+2]).corner[3] = &(point.xyz [4] [(face-2)*5] [1]);
82 (square[9*face+3]).corner[0] = &(point.xyz [0] [(face-2)*5] [2]);
83 (square[9*face+3]).corner[1] = &(point.xyz [1] [(face-2)*5] [2]);
84 (square[9*face+3]).corner[2] = &(point.xyz [1] [(face-2)*5] [3]);
85 (square[9*face+3]).corner[3] = &(point.xyz [0] [(face-2)*5] [3]);
87 (square[9*face+4]).corner[0] = &(point.xyz [2] [(face-2)*5] [2]);
88 (square[9*face+4]).corner[1] = &(point.xyz [3] [(face-2)*5] [2]);
89 (square[9*face+4]).corner[2] = &(point.xyz [3] [(face-2)*5] [3]);
90 (square[9*face+4]).corner[3] = &(point.xyz [2] [(face-2)*5] [3]);
92 (square[9*face+5]).corner[0] = &(point.xyz [4] [(face-2)*5] [2]);
93 (square[9*face+5]).corner[1] = &(point.xyz [5] [(face-2)*5] [2]);
94 (square[9*face+5]).corner[2] = &(point.xyz [5] [(face-2)*5] [3]);
95 (square[9*face+5]).corner[3] = &(point.xyz [4] [(face-2)*5] [3]);
97 (square[9*face+6]).corner[0] = &(point.xyz [0] [(face-2)*5] [4]);
98 (square[9*face+6]).corner[1] = &(point.xyz [1] [(face-2)*5] [4]);
99 (square[9*face+6]).corner[2] = &(point.xyz [1] [(face-2)*5] [5]);
100 (square[9*face+6]).corner[3] = &(point.xyz [0] [(face-2)*5] [5]);
102 (square[9*face+7]).corner[0] = &(point.xyz [2] [(face-2)*5] [4]);
103 (square[9*face+7]).corner[1] = &(point.xyz [3] [(face-2)*5] [4]);
104 (square[9*face+7]).corner[2] = &(point.xyz [3] [(face-2)*5] [5]);
105 (square[9*face+7]).corner[3] = &(point.xyz [2] [(face-2)*5] [5]);
107 (square[9*face+8]).corner[0] = &(point.xyz [4] [(face-2)*5] [4]);
108 (square[9*face+8]).corner[1] = &(point.xyz [5] [(face-2)*5] [4]);
109 (square[9*face+8]).corner[2] = &(point.xyz [5] [(face-2)*5] [5]);
110 (square[9*face+8]).corner[3] = &(point.xyz [4] [(face-2)*5] [5]);
113 for (face=4; face<6; face++) /* small squares in yz plane */
115 (square[9*face+0]).corner[0] = &(point.xyz [(face-4)*5] [0] [0]);
116 (square[9*face+0]).corner[1] = &(point.xyz [(face-4)*5] [0] [1]);
117 (square[9*face+0]).corner[2] = &(point.xyz [(face-4)*5] [1] [1]);
118 (square[9*face+0]).corner[3] = &(point.xyz [(face-4)*5] [1] [0]);
120 (square[9*face+1]).corner[0] = &(point.xyz [(face-4)*5] [0] [2]);
121 (square[9*face+1]).corner[1] = &(point.xyz [(face-4)*5] [0] [3]);
122 (square[9*face+1]).corner[2] = &(point.xyz [(face-4)*5] [1] [3]);
123 (square[9*face+1]).corner[3] = &(point.xyz [(face-4)*5] [1] [2]);
125 (square[9*face+2]).corner[0] = &(point.xyz [(face-4)*5] [0] [4]);
126 (square[9*face+2]).corner[1] = &(point.xyz [(face-4)*5] [0] [5]);
127 (square[9*face+2]).corner[2] = &(point.xyz [(face-4)*5] [1] [5]);
128 (square[9*face+2]).corner[3] = &(point.xyz [(face-4)*5] [1] [4]);
130 (square[9*face+3]).corner[0] = &(point.xyz [(face-4)*5] [2] [0]);
131 (square[9*face+3]).corner[1] = &(point.xyz [(face-4)*5] [2] [1]);
132 (square[9*face+3]).corner[2] = &(point.xyz [(face-4)*5] [3] [1]);
133 (square[9*face+3]).corner[3] = &(point.xyz [(face-4)*5] [3] [0]);
135 (square[9*face+4]).corner[0] = &(point.xyz [(face-4)*5] [2] [2]);
136 (square[9*face+4]).corner[1] = &(point.xyz [(face-4)*5] [2] [3]);
137 (square[9*face+4]).corner[2] = &(point.xyz [(face-4)*5] [3] [3]);
138 (square[9*face+4]).corner[3] = &(point.xyz [(face-4)*5] [3] [2]);
140 (square[9*face+5]).corner[0] = &(point.xyz [(face-4)*5] [2] [4]);
141 (square[9*face+5]).corner[1] = &(point.xyz [(face-4)*5] [2] [5]);
142 (square[9*face+5]).corner[2] = &(point.xyz [(face-4)*5] [3] [5]);
143 (square[9*face+5]).corner[3] = &(point.xyz [(face-4)*5] [3] [4]);
145 (square[9*face+6]).corner[0] = &(point.xyz [(face-4)*5] [4] [0]);
146 (square[9*face+6]).corner[1] = &(point.xyz [(face-4)*5] [4] [1]);
147 (square[9*face+6]).corner[2] = &(point.xyz [(face-4)*5] [5] [1]);
148 (square[9*face+6]).corner[3] = &(point.xyz [(face-4)*5] [5] [0]);
150 (square[9*face+7]).corner[0] = &(point.xyz [(face-4)*5] [4] [2]);
151 (square[9*face+7]).corner[1] = &(point.xyz [(face-4)*5] [4] [3]);
152 (square[9*face+7]).corner[2] = &(point.xyz [(face-4)*5] [5] [3]);
153 (square[9*face+7]).corner[3] = &(point.xyz [(face-4)*5] [5] [2]);
155 (square[9*face+8]).corner[0] = &(point.xyz [(face-4)*5] [4] [4]);
156 (square[9*face+8]).corner[1] = &(point.xyz [(face-4)*5] [4] [5]);
157 (square[9*face+8]).corner[2] = &(point.xyz [(face-4)*5] [5] [5]);
158 (square[9*face+8]).corner[3] = &(point.xyz [(face-4)*5] [5] [4]);
161 for (i=0; i<54; i++)
162 (square[i]).colour = 1+ i / 9;
164 for (i=54; i<56; i++)
165 (square[i]).colour = 0;
168 void init_points() /* generate cube centered on (0,0,0) */
170 int i,j,k;
172 for (i=0; i<6; i++)
173 for (j=0; j<6; j++)
174 for (k=0; k<6; k++)
175 if (i==0 || i==5 || j==0 || j==5 || k==0 || k==5)
177 switch (i)
179 case 0:
180 (start.xyz [i] [j] [k]).x = size * -3;
181 break;
182 case 1:
183 case 2:
184 (start.xyz [i] [j] [k]).x = -size;
185 break;
186 case 3:
187 case 4:
188 (start.xyz [i] [j] [k]).x = size;
189 break;
190 case 5:
191 (start.xyz [i] [j] [k]).x = size * 3;
192 break;
194 switch (j)
196 case 0:
197 (start.xyz [i] [j] [k]).y = size * -3;
198 break;
199 case 1:
200 case 2:
201 (start.xyz [i] [j] [k]).y = -size;
202 break;
203 case 3:
204 case 4:
205 (start.xyz [i] [j] [k]).y = size;
206 break;
207 case 5:
208 (start.xyz [i] [j] [k]).y = size * 3;
209 break;
211 switch (k)
213 case 0:
214 (start.xyz [i] [j] [k]).z = size * -3;
215 break;
216 case 1:
217 case 2:
218 (start.xyz [i] [j] [k]).z = -size;
219 break;
220 case 3:
221 case 4:
222 (start.xyz [i] [j] [k]).z = size;
223 break;
224 case 5:
225 (start.xyz [i] [j] [k]).z = size * 3;
226 break;