SoundSim
soundwavefunction.c
Go to the documentation of this file.
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <stdbool.h>
4 #include "main.h"
5 #include "soundwavefunction.h"
6 
7 int j, k, l;
8 // Anzahl der Teilchenverschiebunngen
14  if (getItemID(node) == 0) {
15  node->data.Sound.movement++;
16  }else{}
17 }
23 int getMovement(item_node *node) {
24  if (getItemID(node) == 0) {
25  return node->data.Sound.movement;
26  } else {
27  return -1;
28  }
29 }
35 void setMovement(item_node *node, int m) {
36  if (getItemID(node) == 0) {
37  node->data.Sound.movement = m;
38  }
39 }
45 void copyMovement(item_node *node, item_node *newnode) {
46  // Fällt sicherlich mit addItem Weg
47  if (getItemID(node) == 0) {
48  setMovement(newnode, getMovement(node));
49  }
50 }
51 void setWaveRoot(item_node *node, item_node *rootnode) {
52  if (getItemID(node) == 0) {
53  node->data.Sound.waveroot = rootnode;
54  }
55 }
56 
58  if (getItemID(node) == 0) {
59  return node->data.Sound.waveroot;
60  }
61  else
62  {
63  return NULL;
64  }
65 }
70 void setTouche(item_node *node) {
71  if (getItemID(node) == 0) {
72  node->data.Sound.touched = true;
73  }
74 }
79 void unTouche(item_node *node) {
80  if (getItemID(node) == 0) {
81  node->data.Sound.touched = false;
82  }else{}
83 }
87 void unToucheAll() {
88 
89  for (int i = 0; i < x_format; i++) {
90  for (int j = 0; j < y_format; j++) {
91  for (int k = 0; k < z_format; k++) {
92  item_node *temp;
93  temp = getItem_Root(i, j, k);
94  while (temp != NULL) {
95  if (getItemID(temp) == 0) {
96  unTouche(temp);
97  }
98  temp = temp->next;
99  }
100  }
101  }
102  }
103 }
109 bool getTouch(item_node *node) {
110  if (getItemID(node) == 0) {
111  return node->data.Sound.touched;
112  } else {
113  return -1;
114  }
115 }
121  float faktor = 0.12;
122 
123  if (getItemID(node) == 0) {
124  if (getFreq20b40 > 0) {
125  setFreq20b40(node, getFreq20b40(node) * 0.88 - (getMovement(node)*faktor));
126  } else setFreq20b40(node, 0);
127  if (getFreq40b100 > 0) {
128  setFreq40b100(node, getFreq40b100(node) * 0.89 - (getMovement(node)*faktor));
129  } else setFreq40b100(node, 0);
130  if (getFreq100b150 > 0) {
131  setFreq100b150(node, getFreq100b150(node) * 0.90 - (getMovement(node)*faktor));
132  } else setFreq100b150(node, 0);
133  if (getFreq150b400 > 0) {
134  setFreq150b400(node, getFreq150b400(node) * 0.91 - (getMovement(node)*faktor));
135  } else setFreq150b400(node, 0);
136  if (getFreq400b1000 > 0) {
137  setFreq400b1000(node, getFreq400b1000(node) * 0.92 - (getMovement(node)*faktor));
138  } else setFreq400b1000(node, 0);
139  if (getFreq1000b2000 > 0) {
140  setFreq1000b2000(node, getFreq1000b2000(node) * 0.93 - (getMovement(node)*faktor));
141  } else setFreq1000b2000(node, 0);
142  if (getFreq2000b3500 > 0) {
143  setFreq2000b3500(node, getFreq2000b3500(node) * 0.94 - (getMovement(node)*faktor));
144  } else setFreq2000b3500(node, 0);
145  if (getFreq3500b6000 > 0) {
146  setFreq3500b6000(node, getFreq3500b6000(node) * 0.95 - (getMovement(node)*faktor));
147  } else setFreq3500b6000(node, 0);
148  if (getFreq6000b10000 > 0) {
149  setFreq6000b10000(node, getFreq6000b10000(node) * 0.96 - (getMovement(node)*faktor));
150  } else setFreq6000b10000(node, 0);
151  if (getFreq10000b20000 > 0) {
152  setFreq10000b20000(node, getFreq10000b20000(node) * 0.97 - (getMovement(node)*faktor));
153  } else setFreq10000b20000(node, 0);
154  }
155 }
161 void setSideOfWave(item_node * node, int side) {
162  if (getItemID(node) == 0) {
163  node->data.Sound.sideofwave = side;
164  }
165 }
172  if (getItemID(node) == 0) {
173  return node->data.Sound.sideofwave;
174  } else {
175  return -1;
176  }
177 }
183 {
184  if (getSideOfWave(node) == 1)
185  {
186  setSideOfWave(node, 2);
187  }
188  else if (getSideOfWave(node) == 2) {
189  setSideOfWave(node, 1);
190  }
191  else if (getSideOfWave(node) == 0) {
192  setSideOfWave(node, 0);
193  }
194  else if (getSideOfWave(node) == 3) {
195  setSideOfWave(node, 3);
196  }
197  else if (getSideOfWave(node) == 4) {
198  setSideOfWave(node, 4);
199  }
200  else {
201  setSideOfWave(node, 5);
202  }
203 }
209 void setFreqAll(item_node * node, item_node * newnode) {
210 
211  float reduction = 0.99; // Wert der die anderen Teilchen schwächt.
212 
213  setFreq20b40(newnode, getFreq20b40(node) * reduction);
214  setFreq40b100(newnode, getFreq40b100(node) * reduction);
215  setFreq100b150(newnode, getFreq100b150(node) * reduction);
216  setFreq150b400(newnode, getFreq150b400(node) * reduction);
217  setFreq400b1000(newnode, getFreq400b1000(node) * reduction);
218  setFreq1000b2000(newnode, getFreq1000b2000(node) * reduction);
219  setFreq2000b3500(newnode, getFreq2000b3500(node) * reduction);
220  setFreq3500b6000(newnode, getFreq3500b6000(node) * reduction);
221  setFreq6000b10000(newnode, getFreq6000b10000(node) * reduction);
222  setFreq10000b20000(newnode, getFreq10000b20000(node) * reduction);
223 }
232 void procedureH(item_node *temp, int x , int y, int z, int side) {
233 
234  item_node *tempAdd; // ein temporäres Teilchen was hinzugefügt wird.
235 
236  tempAdd = createItem(x, y, z, 0); // Neues Teilchen der rechten Seite
237  setTouche(tempAdd);
238  setSideOfWave(tempAdd, side);
239  setDirectionID(tempAdd, getDirectionID(temp));
240  setWaveRoot(tempAdd, temp);
241  copyMovement(temp, tempAdd);
242  setFreqAll(temp, tempAdd);
243  addItemNewRoom(tempAdd, x, y, z);
244 }
253 void procedure(item_node *temp, int x , int y, int z, int side) {
254 
255  item_node *tempAdd; // ein temporäres Teilchen was hinzugefügt wird.
256 
257  tempAdd = createItem(x, y, z, 0);
258  setTouche(tempAdd);
259  setSideOfWave(tempAdd, side);
260  setDirectionID(tempAdd, getDirectionID(temp));
261  copyMovement(temp, tempAdd);
262  setFreqAll(temp, tempAdd);
263  addItemNewRoom(tempAdd, x, y, z);
264 }
265 
274 void addWave(item_node * temp, int x, int y, int z)
275 {
276  if (getItemID(temp) == 0 && x + 1 < x_format)
277  {
278  // Wenn das Hauptteilchen noch nicht weit genug gewandert ist, bleibt die Welle ungekrümmt.
279  if (getMovement(temp) < 10)
280  {
281  // 0°
282  if (getDirectionID(temp) == 1)
283  {
284 
285  if ((getSideOfWave(temp) == 0) && getItemID(temp) == 0)
286  {
287  setTouche(temp);
288  if (isSoundField(x + 1, y, z) == 1)
289  {
290  procedureH(temp, x + 1, y, z, 2);
291  } if (isSoundField(x + 1, y, z) != 1) {}
292  if (isSoundField(x - 1, y, z) == 1)
293  {
294  procedureH(temp, x - 1, y, z, 1);
295  } if (isSoundField(x - 1, y, z) != 1) {}
296  if (isSoundField(x, y, z + 1) == 1)
297  {
298  procedureH(temp, x, y, z + 1, 3);
299  } if (isSoundField(x, y, z + 1) != 1) {}
300  if (isSoundField(x, y, z - 1) == 1)
301  {
302  procedureH(temp, x, y, z - 1, 4);
303  } if (isSoundField(x, y, z - 1) != 1) {}
304  }
305  // linke Seite
306  else if (getSideOfWave(temp) == 1 && getItemID(temp) == 0)
307  {
308  setTouche(temp);
309  if (isSoundField(x - 1, y, z) == 1)
310  {
311  procedure(temp, x - 1, y, z, 1);
312  } if (isSoundField(x - 1, y, z) != 1) {}
313  }
314  //Rechte Seitenzugehörigkeit
315  else if (getSideOfWave(temp) == 2 && getItemID(temp) == 0)
316  {
317  setTouche(temp);
318  if (isSoundField(x + 1, y, z) == 1)
319  {
320  procedure(temp, x + 1, y, z, 2);
321  } if (isSoundField(x + 1, y, z) != 1) {}
322  }
323  else if (getSideOfWave(temp) == 3 && getItemID(temp) == 0)
324  {
325  setTouche(temp);
326  if (isSoundField(x, y, z + 1) == 1)
327  {
328  procedure(temp, x, y, z + 1, 3);
329  } if (isSoundField(x, y, z + 1) != 1) {}
330  }
331  else if (getSideOfWave(temp) == 4 && getItemID(temp) == 0)
332  {
333  setTouche(temp);
334  if (isSoundField(x, y, z - 1) == 1)
335  {
336  procedure(temp, x, y, z - 1, 4);
337  } if (isSoundField(x, y, z - 1) != 1) {}
338  }
339  }
340  else if ( getDirectionID(temp) == 2)
341  {
342  // Nach oben rechts
343  if ((getSideOfWave(temp) == 0) && getItemID(temp) == 0)
344  {
345  if (isSoundField(x + 1, y - 1, z) == 1)
346  {
347  procedureH(temp, x + 1, y - 1, z, 2);
348  } if (isSoundField(x + 1, y - 1, z) != 1) {}
349  if (isSoundField(x - 1, y + 1, z) == 1)
350  {
351  procedureH(temp, x - 1, y + 1, z, 1);
352  } if (isSoundField(x - 1, y + 1, z) != 1) {}
353  if (isSoundField(x, y, z + 1) == 1)
354  {
355  procedureH(temp, x, y, z + 1, 3);
356  } if (isSoundField(x , y , z + 1) != 1) {}
357  if (isSoundField(x, y, z - 1) == 1)
358  {
359  procedureH(temp, x, y, z - 1, 4);
360  } if (isSoundField(x, y, z - 1) != 1) {}
361 
362  }
363  // linke Seite
364  else if (getSideOfWave(temp) == 1 && getItemID(temp) == 0)
365  {
366  if (isSoundField(x - 1, y + 1, z) == 1)
367  {
368  procedure(temp, x - 1, y + 1, z, 1);
369  } if (isSoundField(x - 1, y + 1, z) != 1) {}
370  }
371  //Rechte Seitenzugehörigkeit
372  else if (getSideOfWave(temp) == 2 && getItemID(temp) == 0)
373  {
374  if (isSoundField(x + 1, y - 1, z) == 1)
375  {
376  procedure(temp, x + 1, y - 1, z, 2);
377  } if (isSoundField(x + 1, y - 1, z) != 1) {}
378  }
379  else if (getSideOfWave(temp) == 3 && getItemID(temp) == 0)
380  {
381  if (isSoundField(x, y, z + 1) == 1)
382  {
383  procedure(temp, x, y, z + 1, 3);
384  } if (isSoundField(x, y, z + 1) != 1) {}
385  }
386  else if (getSideOfWave(temp) == 4 && getItemID(temp) == 0)
387  {
388  if (isSoundField(x , y , z - 1) == 1)
389  {
390  procedure(temp, x, y, z - 1, 4);
391  } if (isSoundField(x , y , z - 1) != 1) {}
392  }
393  }
394  else if ( getDirectionID(temp) == 3) {
395  // Nach Rechts
396  if ((getSideOfWave(temp) == 0) && getItemID(temp) == 0)
397  {
398  if (isSoundField(x, y + 1, z) == 1)
399  {
400  procedureH(temp, x, y + 1, z, 2);
401  } if (isSoundField(x, y + 1, z) != 1) {}
402  if (isSoundField(x, y - 1, z) == 1)
403  {
404  procedureH(temp, x, y - 1, z, 1);
405  } if (isSoundField(x, y - 1, z) != 1) {}
406  if (isSoundField(x, y, z + 1) == 1)
407  {
408  procedureH(temp, x, y, z + 1, 3);
409  } if (isSoundField(x , y , z + 1) != 1) {}
410  if (isSoundField(x, y, z - 1) == 1)
411  {
412  procedureH(temp, x, y, z - 1, 4);
413  } if (isSoundField(x, y, z - 1) != 1) {}
414 
415  }
416  // linke Seite
417  else if (getSideOfWave(temp) == 1 && getItemID(temp) == 0)
418  {
419  if (isSoundField(x, y - 1, z) == 1)
420  {
421  procedure(temp, x, y - 1, z, 1);
422  } else if (isSoundField(x , y - 1, z) != 1) {}
423  }
424  //Rechte Seitenzugehörigkeit
425  else if (getSideOfWave(temp) == 2 && getItemID(temp) == 0)
426  {
427  if (isSoundField(x, y + 1, z) == 1)
428  {
429  procedure(temp, x, y + 1, z, 2);
430  } else if (isSoundField(x, y + 1, z) != 1) {}
431  }
432  else if (getSideOfWave(temp) == 3 && getItemID(temp) == 0)
433  {
434  if (isSoundField(x, y, z + 1) == 1)
435  {
436  procedure(temp, x, y, z + 1, 3);
437  } else if (isSoundField(x, y, z + 1) != 1) {}
438  }
439  else if (getSideOfWave(temp) == 4 && getItemID(temp) == 0)
440  {
441  if (isSoundField(x, y, z - 1) == 1)
442  {
443  procedure(temp, x, y, z - 1, 4);
444  } else if (isSoundField(x, y, z - 1) != 1) {}
445  }
446 
447  }
448  else if ( getDirectionID(temp) == 4)
449  {
450  // unten rechts
451  if ((getSideOfWave(temp) == 0) && getItemID(temp) == 0)
452  {
453  if (isSoundField(x - 1, y - 1, z) == 1)
454  {
455  procedureH(temp, x - 1, y - 1, z, 2);
456  } if (isSoundField(x - 1, y - 1, z) != 1) {}
457  if (isSoundField(x + 1, y + 1, z) == 1)
458  {
459  procedureH(temp, x + 1, y + 1, z, 1);
460  } if (isSoundField(x + 1, y + 1, z) != 1) {}
461  if (isSoundField(x, y, z + 1) == 1)
462  {
463  procedureH(temp, x, y, z + 1, 3);
464  } if (isSoundField(x , y , z + 1) != 1) {}
465  if (isSoundField(x, y, z - 1) == 1)
466  {
467  procedureH(temp, x, y, z - 1, 4);
468  } if (isSoundField(x, y, z - 1) != 1) {}
469  }
470  // linke Seite
471  else if (getSideOfWave(temp) == 1 && getItemID(temp) == 0)
472  {
473  if (isSoundField(x + 1, y + 1, z) == 1)
474  {
475  procedure(temp, x + 1, y + 1, z, 1);
476  } if (isSoundField(x + 1, y + 1, z) != 1) {}
477  }
478  //Rechte Seitenzugehörigkeit
479  else if (getSideOfWave(temp) == 2 && getItemID(temp) == 0)
480  {
481  if (isSoundField(x + 1, y + 1, z) == 1)
482  {
483  procedure(temp, x + 1, y + 1, z, 2);
484  } if (isSoundField(x + 1, y + 1, z) != 1) {}
485  }
486  else if (getSideOfWave(temp) == 3)
487  {
488  if (isSoundField(x, y, z + 1) == 1)
489  {
490  procedure(temp, x, y, z + 1, 3);
491  } if (isSoundField(x, y, z + 1) != 1) {}
492  }
493  else if (getSideOfWave(temp) == 4 && getItemID(temp) == 0)
494  {
495  if (isSoundField(x, y, z - 1) == 1)
496  {
497  procedure(temp, x, y, z - 1, 3);
498  } if (isSoundField(x, y, z - 1) != 1) {}
499  }
500  }
501  else if ( getDirectionID(temp) == 5) {
502  //unten
503  if ((getSideOfWave(temp) == 0) && getItemID(temp) == 0)
504  {
505  if (isSoundField(x - 1, y, z) == 1)
506  {
507  procedureH(temp, x - 1, y, z, 2);
508  } if (isSoundField(x - 1, y, z) != 1) {}
509  if (isSoundField(x + 1, y, z) == 1)
510  {
511  procedureH(temp, x + 1, y, z, 1);
512  } if (isSoundField(x + 1, y, z) != 1) {}
513  if (isSoundField(x, y, z + 1) == 1)
514  {
515  procedureH(temp, x, y, z + 1, 3);
516  } if (isSoundField(x , y , z + 1) != 1) {}
517  if (isSoundField(x, y, z - 1) == 1)
518  {
519  procedureH(temp, x, y, z - 1, 4);
520  } if (isSoundField(x, y, z - 1) != 1) {}
521 
522  }
523  // linke Seite
524  else if (getSideOfWave(temp) == 1 && getItemID(temp) == 0)
525  {
526  if (isSoundField(x + 1, y, z) == 1)
527  {
528  procedure(temp, x + 1, y, z, 1);
529  } if (isSoundField(x + 1, y, z) != 1) {}
530  }
531  //Rechte Seitenzugehörigkeit
532  else if (getSideOfWave(temp) == 2 && getItemID(temp) == 0)
533  {
534  if (isSoundField(x - 1, y, z) == 1)
535  {
536  procedure(temp, x - 1, y, z, 2);
537  } if (isSoundField(x - 1, y, z) != 1) {}
538  }
539  else if (getSideOfWave(temp) == 3 && getItemID(temp) == 0)
540  {
541  if (isSoundField(x, y, z + 1) == 1)
542  {
543  procedure(temp, x, y, z + 1, 3);
544  } if (isSoundField(x, y, z + 1) != 1) {}
545  }
546  else if (getSideOfWave(temp) == 4 && getItemID(temp) == 0)
547  {
548  if (isSoundField(x, y, z - 1) == 1)
549  {
550  procedure(temp, x, y, z - 1, 4);
551  } if (isSoundField(x, y, z - 1) != 1) {}
552  }
553  }
554  else if ( getDirectionID(temp) == 6)
555  {
556  //unten links
557  // rechte Seite der Welle für neue ID
558  if ((getSideOfWave(temp) == 0) && getItemID(temp) == 0)
559  {
560  if (isSoundField(x - 1, y + 1, z) == 1)
561  {
562  procedureH(temp, x - 1, y + 1, z, 2);
563  } if (isSoundField(x - 1, y + 1, z) != 1) {}
564  if (isSoundField(x + 1, y - 1, z) == 1)
565  {
566  procedureH(temp, x + 1, y - 1, z, 1);
567  } if (isSoundField(x + 1, y - 1, z) != 1) {}
568  if (isSoundField(x, y, z + 1) == 1)
569  {
570  procedureH(temp, x, y, z + 1, 3);
571  } if (isSoundField(x , y , z + 1) != 1) {}
572  if (isSoundField(x, y, z - 1) == 1)
573  {
574  procedureH(temp, x, y, z - 1, 2);
575  } if (isSoundField(x, y, z - 1) != 1) {}
576 
577  }
578  // linke Seite
579  else if (getSideOfWave(temp) == 1 && getItemID(temp) == 0)
580  {
581  if (isSoundField(x + 1, y - 1, z) == 1)
582  {
583  procedure(temp, x + 1, y - 1, z, 1);
584  } if (isSoundField(x + 1, y - 1, z) != 1) {}
585  }
586  //Rechte Seitenzugehörigkeit
587  else if (getSideOfWave(temp) == 2 && getItemID(temp) == 0)
588  {
589  if (isSoundField(x - 1, y + 1, z) == 1)
590  {
591  procedure(temp, x - 1, y + 1, z, 2);
592  } if (isSoundField(x - 1, y + 1, z) != 1) {}
593  }
594  else if (getSideOfWave(temp) == 3 && getItemID(temp) == 0)
595  {
596  if (isSoundField(x, y, z + 1) == 1)
597  {
598  procedure(temp, x, y, z + 1, 3);
599  } if (isSoundField(x, y, z + 1) != 1) {}
600  }
601  else if (getSideOfWave(temp) == 4 && getItemID(temp) == 0)
602  {
603  if (isSoundField(x, y, z - 1) == 1)
604  {
605  procedure(temp, x, y, z - 1, 4);
606  } if (isSoundField(x, y, z - 1) != 1) {}
607  }
608 
609  }
610  else if ( getDirectionID(temp) == 7)
611  {
612  // links
613  // rechte Seite der Welle für neue ID
614  if ((getSideOfWave(temp) == 0) && getItemID(temp) == 0)
615  {
616  if (isSoundField(x, y + 1, z) == 1)
617  {
618  procedureH(temp, x, y + 1, z, 2);
619  } if (isSoundField(x, y + 1, z) != 1) {}
620  if (isSoundField(x, y - 1, z) == 1)
621  {
622  procedureH(temp, x, y - 1, z, 1);
623  } if (isSoundField(x, y - 1, z) != 1) {}
624  if (isSoundField(x, y, z + 1) == 1)
625  {
626  procedureH(temp, x, y, z + 1, 3);
627  } if (isSoundField(x , y , z + 1) != 1) {}
628  if (isSoundField(x, y, z - 1) == 1)
629  {
630  procedureH(temp, x, y, z - 1 , 4);
631  } if (isSoundField(x, y, z - 1) != 1) {}
632 
633  }
634  // linke Seite
635  else if (getSideOfWave(temp) == 1 && getItemID(temp) == 0)
636  {
637  if (isSoundField(x, y - 1, z) == 1)
638  {
639  procedure(temp, x, y - 1, z, 1);
640  } if (isSoundField(x, y - 1, z) != 1) {}
641  }
642  //Rechte Seitenzugehörigkeit
643  else if (getSideOfWave(temp) == 2 && getItemID(temp) == 0)
644  {
645  if (isSoundField(x, y + 1, z) == 1)
646  {
647  procedure(temp, x, y + 1, z, 2);
648  } if (isSoundField(x, y + 1, z) != 1) {}
649  }
650  else if (getSideOfWave(temp) == 3 && getItemID(temp) == 0)
651  {
652  if (isSoundField(x, y, z + 1) == 1)
653  {
654  procedure(temp, x, y, z + 1, 3);
655  } if (isSoundField(x, y, z + 1) != 1) {}
656  }
657  else if (getSideOfWave(temp) == 4 && getItemID(temp) == 0)
658  {
659  if (isSoundField(x, y, z - 1) == 1)
660  {
661  procedure(temp, x, y, z - 1, 4);
662  } if (isSoundField(x, y, z - 1) != 1) {}
663  }
664  }
665  else if ( getDirectionID(temp) == 8) {
666  //oben links
667  if ((getSideOfWave(temp) == 0) && getItemID(temp) == 0)
668  {
669  if (isSoundField(x + 1, y - 1, z) == 1)
670  {
671  procedureH(temp, x + 1, y - 1, z, 2);
672  } if (isSoundField(x + 1, y - 1, z) != 1) {}
673  if (isSoundField(x - 1, y + 1, z) == 1)
674  {
675  procedureH(temp, x - 1, y, z, 1);
676  } if (isSoundField(x - 1, y + 1, z) != 1) {}
677  if (isSoundField(x, y, z + 1) == 1)
678  {
679  procedureH(temp, x, y, z + 1, 3);
680  } if (isSoundField(x , y , z + 1) != 1) {}
681  if (isSoundField(x, y, z - 1) == 1)
682  {
683  procedureH(temp, x, y, z - 1, 4);
684  } if (isSoundField(x, y, z - 1) != 1) {}
685 
686  }
687  // linke Seite
688  else if (getSideOfWave(temp) == 1 && getItemID(temp) == 0)
689  {
690  if (isSoundField(x - 1, y + 1, z) == 1)
691  {
692  procedure(temp, x - 1, y + 1, z, 1);
693  } if (isSoundField(x - 1, y + 1, z) != 1) {}
694  }
695  //Rechte Seitenzugehörigkeit
696  else if (getSideOfWave(temp) == 2 && getItemID(temp) == 0)
697  {
698  if (isSoundField(x + 1, y - 1, z) == 1)
699  {
700  procedure(temp, x + 1, y - 1, z, 2);
701  } if (isSoundField(x + 1, y - 1, z) != 1) {}
702  }
703  else if (getSideOfWave(temp) == 3 && getItemID(temp) == 0)
704  {
705  if (isSoundField(x, y, z + 1) == 1)
706  {
707  procedure(temp, x, y, z + 1, 3);
708  } if (isSoundField(x, y, z + 1) != 1) {}
709  }
710  else if (getSideOfWave(temp) == 4 && getItemID(temp) == 0)
711  {
712  if (isSoundField(x, y, z - 1) == 1)
713  {
714  procedure(temp, x, y, z - 1, 4);
715  } if (isSoundField(x, y, z - 1) != 1) {}
716  }
717  }
718  }
719  else if (getMovement(temp) > 10)
720  {
721  if ( getDirectionID(temp) == 1) {
722  // Nach oben
723  if ((getSideOfWave(temp) == 0) && getItemID(temp) == 0)
724  {
725  setTouche(temp);
726  if (isSoundField(x + 1, y - 1, z) == 1)
727  {
728  procedureH(temp, x + 1, y - 1, z, 2);
729  } if (isSoundField(x + 1, y - 1, z) != 1) {}
730  if (isSoundField(x - 1, y - 1, z) == 1)
731  {
732  procedureH(temp, x - 1, y - 1, z, 1);
733  } if (isSoundField(x - 1, y - 1, z) != 1) {}
734  if (isSoundField(x, y - 1, z + 1) == 1)
735  {
736  procedureH(temp, x , y - 1, z + 1, 3);
737  } if (isSoundField(x, y - 1, z + 1) != 1) {}
738  if (isSoundField(x, y - 1, z - 1) == 1)
739  {
740  procedureH(temp, x , y - 1, z - 1, 4);
741  } if (isSoundField(x, y - 1, z - 1) != 1) {}
742 
743  }
744  // linke Seite
745  else if (getSideOfWave(temp) == 1 && getItemID(temp) == 0)
746  {
747  setTouche(temp);
748  if (isSoundField(x - 1, y - 1, z) == 1)
749  {
750  procedure(temp, x - 1, y - 1, z, 1);
751  } if (isSoundField(x - 1, y - 1, z) != 1) {}
752  }
753  //Rechte Seitenzugehörigkeit
754  else if (getSideOfWave(temp) == 2 && getItemID(temp) == 0)
755  {
756  setTouche(temp);
757  if (isSoundField(x + 1, y - 1, z) == 1)
758  {
759  procedure(temp, x + 1, y - 1, z, 2);
760  } if (isSoundField(x + 1, y - 1, z) != 1) {}
761  }
762  else if (getSideOfWave(temp) == 3 && getItemID(temp) == 0)
763  {
764  setTouche(temp);
765  if (isSoundField(x, y - 1, z + 1) == 1)
766  {
767  procedure(temp, x, y - 1, z + 1, 3);
768  } if (isSoundField(x, y - 1, z + 1) != 1) {}
769  }
770  else if (getSideOfWave(temp) == 4 && getItemID(temp) == 0)
771  {
772  setTouche(temp);
773  if (isSoundField(x, y - 1, z - 1) == 1)
774  {
775  procedure(temp, x, y - 1, z - 1, 4);
776  } if (isSoundField(x, y - 1, z - 1) != 1) {}
777  }
778  }
779  else if ( getDirectionID(temp) == 2) {
780  // Nach oben rechts
781  if ((getSideOfWave(temp) == 0) && getItemID(temp) == 0)
782  {
783  if (isSoundField(x, y - 1, z) == 1)
784  {
785  procedureH(temp, x , y - 1, z, 2);
786  } if (isSoundField(x, y - 1, z) != 1) {}
787  if (isSoundField(x - 1, y, z) == 1)
788  {
789  procedureH(temp, x - 1 , y, z + 1, 1);
790  } if (isSoundField(x - 1, y, z) != 1) {}
791  if (isSoundField(x - 1, y - 1, z + 1) == 1)
792  {
793  procedureH(temp, x - 1 , y - 1, z + 1, 3);
794  } if (isSoundField(x - 1, y - 1, z + 1) != 1) {}
795  if (isSoundField(x - 1, y - 1, z - 1) == 1)
796  {
797  procedureH(temp, x - 1 , y - 1, z - 1, 4);
798  } if (isSoundField(x - 1, y - 1, z - 1) != 1) {}
799 
800  }
801  // linke Seite
802  else if (getSideOfWave(temp) == 1 && getItemID(temp) == 0)
803  {
804  if (isSoundField(x - 1, y, z) == 1)
805  {
806  procedure(temp, x - 1, y, z, 1);
807  } if (isSoundField(x - 1, y, z) != 1) {}
808  }
809  //Rechte Seitenzugehörigkeit
810  else if (getSideOfWave(temp) == 2 && getItemID(temp) == 0)
811  {
812  if (isSoundField(x, y - 1, z) == 1)
813  {
814  procedure(temp, x, y - 1, z, 2);
815  } if (isSoundField(x, y - 1, z) != 1) {}
816  }
817  else if (getSideOfWave(temp) == 3 && getItemID(temp) == 0)
818  {
819  if (isSoundField(x - 1, y - 1, z + 1) == 1)
820  {
821  procedure(temp, x - 1, y - 1, z + 1, 3);
822  } if (isSoundField(x - 1, y - 1, z + 1) != 1) {}
823  }
824  else if (getSideOfWave(temp) == 4 && getItemID(temp) == 0)
825  {
826  if (isSoundField(x - 1, y - 1, z - 1) == 1)
827  {
828  procedure(temp, x - 1, y - 1, z - 1, 4);
829  } if (isSoundField(x - 1, y - 1, z - 1) != 1) {}
830  }
831  }
832  else if ( getDirectionID(temp) == 4) {
833  // unten rechts
834  if ((getSideOfWave(temp) == 0) && getItemID(temp) == 0)
835  {
836  if (isSoundField(x - 1, y, z) == 1)
837  {
838  procedureH(temp, x - 1 , y, z, 2);
839  } if (isSoundField(x - 1, y, z) != 1) {}
840  if (isSoundField(x, y + 1, z) == 1)
841  {
842  procedureH(temp, x , y + 1, z, 1);
843  } if (isSoundField(x, y + 1, z) != 1) {}
844  if (isSoundField(x - 1, y + 1, z + 1) == 1)
845  {
846  procedureH(temp, x - 1, y + 1, z + 1, 3);
847  } if (isSoundField(x - 1, y + 1, z + 1) != 1) {}
848  if (isSoundField(x - 1, y + 1, z - 1) == 1)
849  {
850  procedureH(temp, x - 1, y + 1, z - 1, 4);
851  } else if (isSoundField(x - 1, y + 1, z - 1) != 1) {}
852 
853  }
854  // linke Seite
855  else if (getSideOfWave(temp) == 1 && getItemID(temp) == 0)
856  {
857  if (isSoundField(x, y + 1, z) == 1)
858  {
859  procedure(temp, x, y + 1, z, 1);
860  } if (isSoundField(x, y + 1, z) != 1) {}
861  }
862  //Rechte Seitenzugehörigkeit
863  else if (getSideOfWave(temp) == 2 && getItemID(temp) == 0)
864  {
865  if (isSoundField(x - 1, y, z) == 1)
866  {
867  procedure(temp, x - 1, y, z, 2);
868  } if (isSoundField(x - 1, y, z) != 1) {}
869  }
870  else if (getSideOfWave(temp) == 3 && getItemID(temp) == 0)
871  {
872  if (isSoundField(x - 1, y + 1, z + 1) == 1)
873  {
874  procedure(temp, x - 1, y + 1, z + 1, 3);
875  } if (isSoundField(x, y, z + 1) != 1) {}
876  }
877  else if (getSideOfWave(temp) == 4 && getItemID(temp) == 0)
878  {
879  if (isSoundField(x - 1, y + 1, z - 1) == 1)
880  {
881  procedure(temp, x - 1, y + 1, z - 1, 4);
882  } if (isSoundField(x - 1, y + 1, z - 1) != 1) {}
883  }
884  }
885  else if ( getDirectionID(temp) == 3) {
886  // Nach Rechts
887  if ((getSideOfWave(temp) == 0) && getItemID(temp) == 0)
888  {
889  if (isSoundField(x - 1, y - 1, z) == 1)
890  {
891  procedureH(temp, x - 1 , y - 1, z, 2);
892  } if (isSoundField(x - 1, y - 1, z) != 1) {}
893  if (isSoundField(x - 1, y + 1, z) == 1)
894  {
895  procedureH(temp, x - 1 , y + 1, z, 1);
896  } if (isSoundField(x - 1, y + 1, z) != 1) {}
897  if (isSoundField(x - 1, y, z + 1) == 1)
898  {
899  procedureH(temp, x - 1 , y, z + 1, 3);
900  } if (isSoundField(x - 1, y, z + 1) != 1) {}
901  if (isSoundField(x - 1, y, z - 1) == 1)
902  {
903  procedureH(temp, x - 1 , y , z - 1, 4);
904  } if (isSoundField(x - 1, y, z - 1) != 1) {}
905 
906  }
907  // linke Seite
908  else if (getSideOfWave(temp) == 1 && getItemID(temp) == 0)
909  {
910  if (isSoundField(x - 1, y + 1, z) == 1)
911  {
912  procedure(temp, x - 1, y + 1, z, 1);
913  } if (isSoundField(x - 1, y + 1, z) != 1) {}
914  }
915  //Rechte Seitenzugehörigkeit
916  else if (getSideOfWave(temp) == 2 && getItemID(temp) == 0)
917  {
918  if (isSoundField(x - 1, y - 1, z) == 1)
919  {
920  procedure(temp, x - 1, y - 1, z, 2);
921  } if (isSoundField(x - 1, y - 1, z) != 1) {}
922  }
923  else if (getSideOfWave(temp) == 3 && getItemID(temp) == 0)
924  {
925  if (isSoundField(x - 1, y, z + 1) == 1)
926  {
927  procedure(temp, x - 1, y, z + 1, 3);
928  } if (isSoundField(x - 1, y, z + 1) != 1) {}
929  }
930  else if (getSideOfWave(temp) == 4 && getItemID(temp) == 0)
931  {
932  if (isSoundField(x - 1, y, z - 1) == 1)
933  {
934  procedure(temp, x - 1, y, z - 1, 4);
935  } if (isSoundField(x - 1, y, z - 1) != 1) {}
936  }
937  }
938  else if ( getDirectionID(temp) == 5) {
939  //unten
940  if ((getSideOfWave(temp) == 0) && getItemID(temp) == 0)
941  {
942  if (isSoundField(x - 1, y + 1, z) == 1)
943  {
944  procedureH(temp, x - 1, y + 1, z, 2);
945  } if (isSoundField(x - 1, y + 1, z) != 1) {}
946  if (isSoundField(x + 1, y + 1, z) == 1)
947  {
948  procedureH(temp, x + 1 , y + 1, z, 1);
949  } if (isSoundField(x + 1, y + 1, z) != 1) {}
950  if (isSoundField(x, y + 1, z + 1) == 1)
951  {
952  procedureH(temp, x , y + 1, z + 1, 3);
953  } if (isSoundField(x, y + 1, z + 1) != 1) {}
954  if (isSoundField(x, y + 1, z - 1) == 1)
955  {
956  procedureH(temp, x , y + 1, z - 1, 4);
957  } if (isSoundField(x, y + 1, z - 1) != 1) {}
958 
959  }
960  // linke Seite
961  else if (getSideOfWave(temp) == 1 && getItemID(temp) == 0)
962  {
963  if (isSoundField(x + 1, y + 1, z) == 1)
964  {
965  procedure(temp, x + 1, y + 1, z, 1);
966  } if (isSoundField(x + 1, y + 1, z) != 1) {}
967  }
968  //Rechte Seitenzugehörigkeit
969  else if (getSideOfWave(temp) == 2 && getItemID(temp) == 0)
970  {
971  if (isSoundField(x - 1, y + 1, z) == 1)
972  {
973  procedure(temp, x - 1, y + 1, z, 2);
974  } if (isSoundField(x - 1, y + 1, z) != 1) {}
975  }
976  else if (getSideOfWave(temp) == 3 && getItemID(temp) == 0)
977  {
978  if (isSoundField(x, y + 1, z + 1) == 1)
979  {
980  procedure(temp, x, y + 1, z + 1, 3);
981  } if (isSoundField(x, y + 1, z + 1) != 1) {}
982  }
983  else if (getSideOfWave(temp) == 4 && getItemID(temp) == 0)
984  {
985  if (isSoundField(x, y + 1, z - 1) == 1)
986  {
987  procedure(temp, x, y + 1, z - 1, 4);
988  } if (isSoundField(x, y + 1, z - 1) != 1) {}
989  }
990  }
991  if ( getDirectionID(temp) == 6) {
992  //unten links
993  if ((getSideOfWave(temp) == 0) && getItemID(temp) == 0)
994  {
995  if (isSoundField(x, y + 1, z) == 1)
996  {
997  procedureH(temp, x , y + 1, z, 2);
998  } if (isSoundField(x, y + 1, z) != 1) {}
999  if (isSoundField(x + 1, y, z) == 1)
1000  {
1001  procedureH(temp, x + 1 , y, z, 1);
1002  } if (isSoundField(x + 1, y, z) != 1) {}
1003  if (isSoundField(x - 1, y - 1, z + 1) == 1)
1004  {
1005  procedureH(temp, x , y - 1, z + 1, 3);
1006  } if (isSoundField(x - 1, y - 1, z + 1) != 1) {}
1007  if (isSoundField(x - 1, y - 1, z - 1) == 1)
1008  {
1009  procedureH(temp, x - 1 , y - 1, z - 1, 4);
1010  } if (isSoundField(x - 1, y - 1, z - 1) != 1) {}
1011 
1012  }
1013  // linke Seite
1014  else if (getSideOfWave(temp) == 1 && getItemID(temp) == 0)
1015  {
1016  if (isSoundField(x + 1, y, z) == 1)
1017  {
1018  procedure(temp, x + 1, y, z, 1);
1019  } if (isSoundField(x + 1, y, z) != 1) {}
1020  }
1021  //Rechte Seitenzugehörigkeit
1022  else if (getSideOfWave(temp) == 2 && getItemID(temp) == 0)
1023  {
1024  if (isSoundField(x, y + 1, z) == 1)
1025  {
1026  procedure(temp, x, y + 1, z, 2);
1027  } if (isSoundField(x, y + 1, z) != 1) {}
1028  }
1029  else if (getSideOfWave(temp) == 3 && getItemID(temp) == 0)
1030  {
1031  if (isSoundField(x + 1, y + 1, z + 1) == 1)
1032  {
1033  procedure(temp, x + 1, y + 1, z + 1, 3);
1034  } if (isSoundField(x + 1, y + 1, z + 1) != 1) {}
1035  }
1036  else if (getSideOfWave(temp) == 4 && getItemID(temp) == 0)
1037  {
1038  if (isSoundField(x + 1, y + 1, z - 1) == 1)
1039  {
1040  procedure(temp, x + 1, y + 1, z - 1, 4);
1041  } if (isSoundField(x + 1, y + 1, z - 1) != 1) {}
1042  }
1043  }
1044  else if ( getDirectionID(temp) == 7) {
1045  // links
1046  if ((getSideOfWave(temp) == 0) && getItemID(temp) == 0)
1047  {
1048  if (isSoundField(x - 1, y + 1, z) == 1)
1049  {
1050  procedureH(temp, x - 1 , y + 1, z, 2);
1051  } if (isSoundField(x - 1, y + 1, z) != 1) {}
1052  if (isSoundField(x + 1, y - 1, z) == 1)
1053  {
1054  procedureH(temp, x + 1 , y - 1, z, 1);
1055  } if (isSoundField(x + 1, y - 1, z) != 1) {}
1056  if (isSoundField(x, y, z + 1) == 1)
1057  {
1058  procedureH(temp, x , y, z + 1, 3);
1059  } if (isSoundField(x - 1, y, z + 1) != 1) {}
1060  if (isSoundField(x - 1, y, z - 1) == 1)
1061  {
1062  procedureH(temp, x - 1, y, z - 1, 4);
1063  } if (isSoundField(x - 1, y, z - 1) != 1) {}
1064 
1065  }
1066  // linke Seite
1067  // Wenn du kein Seitenteil bist oder zur Linken seite gehörst
1068  else if (getSideOfWave(temp) == 1 && getItemID(temp) == 0)
1069  {
1070  if (isSoundField(x + 1, y - 1, z) == 1)
1071  {
1072  procedure(temp, x + 1, y - 1, z, 1);
1073  } if (isSoundField(x + 1, y - 1, z) != 1) {}
1074  }
1075  //Rechte Seitenzugehörigkeit
1076  else if (getSideOfWave(temp) == 2 && getItemID(temp) == 0)
1077  {
1078  if (isSoundField(x - 1, y + 1, z) == 1)
1079  {
1080  procedure(temp, x - 1, y + 1, z, 2);
1081  } if (isSoundField(x - 1, y + 1, z) != 1) {}
1082  }
1083  else if (getSideOfWave(temp) == 3 && getItemID(temp) == 0)
1084  {
1085  if (isSoundField(x + 1, y, z + 1) == 1)
1086  {
1087  procedure(temp, x + 1, y, z + 1, 3);
1088  } if (isSoundField(x + 1, y, z + 1) != 1) {}
1089  }
1090  else if (getSideOfWave(temp) == 4 && getItemID(temp) == 0)
1091  {
1092  if (isSoundField(x + 1, y, z - 1) == 1)
1093  {
1094  procedure(temp, x + 1, y, z - 1, 4);
1095  } if (isSoundField(x + 1, y, z - 1) != 1) {}
1096  }
1097  }
1098  else if ( getDirectionID(temp) == 8) {
1099  //oben links
1100  if ((getSideOfWave(temp) == 0) && getItemID(temp) == 0)
1101  {
1102  if (isSoundField(x + 1, y, z) == 1)
1103  {
1104  procedureH(temp, x + 1 , y, z, 2);
1105  } if (isSoundField(x + 1, y, z) != 1) {}
1106  if (isSoundField(x, y - 1, z) == 1)
1107  {
1108  procedureH(temp, x , y - 1, z, 1);
1109  } if (isSoundField(x, y - 1, z) != 1) {}
1110  if (isSoundField(x - 1, y - 1, z + 1) == 1)
1111  {
1112  procedureH(temp, x - 1 , y - 1, z + 1, 3);
1113  } if (isSoundField(x - 1, y - 1, z + 1) != 1) {}
1114  if (isSoundField(x - 1, y - 1, z - 1) == 1)
1115  {
1116  procedureH(temp, x - 1 , y - 1, z - 1, 4);
1117  } if (isSoundField(x - 1, y - 1, z - 1) != 1) {}
1118 
1119  }
1120  // linke Seite
1121  else if (getSideOfWave(temp) == 1 && getItemID(temp) == 0)
1122  {
1123  if (isSoundField(x, y - 1, z) == 1)
1124  {
1125  procedure(temp, x, y - 1, z, 1);
1126  } if (isSoundField(x, y - 1, z) != 1) {}
1127 
1128  }
1129  //Rechte Seitenzugehörigkeit
1130  else if (getSideOfWave(temp) == 2 && getItemID(temp) == 0)
1131  {
1132  if (isSoundField(x + 1, y, z) == 1)
1133  {
1134  procedure(temp, x + 1, y, z, 2);
1135  } if (isSoundField(x + 1, y, z) != 1) {}
1136  }
1137  else if (getSideOfWave(temp) == 3 && getItemID(temp) == 0)
1138  {
1139  if (isSoundField(x - 1, y + 1, z + 1) == 1)
1140  {
1141  procedure(temp, x - 1, y + 1, z + 1, 3);
1142  } if (isSoundField(x - 1, y + 1, z + 1) != 1) {}
1143  }
1144  else if (getSideOfWave(temp) == 4 && getItemID(temp) == 0)
1145  {
1146  if (isSoundField(x - 1, y + 1, z - 1) == 1)
1147  {
1148  procedure(temp, x - 1, y + 1, z - 1, 4);
1149  } if (isSoundField(x - 1, y + 1, z - 1) != 1) {}
1150  }
1151  }
1152  }
1153  } else {}
1154 }
void copyMovement(item_node *node, item_node *newnode)
void setTouche(item_node *node)
void setWaveRoot(item_node *node, item_node *rootnode)
void setSideOfWave(item_node *node, int side)
int z_format
Definition: main.c:19
int y_format
Definition: main.c:18
void setFreq100b150(item_node *node, int value)
Definition: main.c:262
void setFreq1000b2000(item_node *node, int value)
Definition: main.c:280
int l
struct item_node * next
Definition: main.h:13
int getFreq400b1000(item_node *node)
Definition: main.c:344
void setDirectionID(item_node *node, int value)
Definition: main.c:399
void setFreq6000b10000(item_node *node, int value)
Definition: main.c:298
int i
Definition: main.c:20
item_node * createItem(int x, int y, int z, int id)
Definition: main.c:476
void procedure(item_node *temp, int x, int y, int z, int side)
void setFreq10000b20000(item_node *node, int value)
Definition: main.c:304
union item_node::@0 data
int x_format
Raum Formate.
Definition: main.c:17
int getFreq20b40(item_node *node)
Definition: main.c:312
void setFreq40b100(item_node *node, int value)
Definition: main.c:256
void setFreq3500b6000(item_node *node, int value)
Definition: main.c:292
void setMovement(item_node *node, int m)
bool getTouch(item_node *node)
void increaseMovement(item_node *node)
int getItemID(item_node *node)
Definition: main.c:185
void setFreq20b40(item_node *node, int value)
Definition: main.c:250
int getFreq150b400(item_node *node)
Definition: main.c:336
int getFreq100b150(item_node *node)
Definition: main.c:328
int getFreq10000b20000(item_node *node)
Definition: main.c:384
struct item_node::@0::@1 Sound
int j
int getFreq6000b10000(item_node *node)
Definition: main.c:376
Definition: main.h:10
int getSideOfWave(item_node *node)
void unTouche(item_node *node)
item_node * getWaveRoot(item_node *node)
void addWave(item_node *temp, int x, int y, int z)
int getFreq1000b2000(item_node *node)
Definition: main.c:352
void unToucheAll()
void addItemNewRoom(item_node *node, int x, int y, int z)
Definition: main.c:565
int k
int getFreq3500b6000(item_node *node)
Definition: main.c:368
int getDirectionID(item_node *node)
Definition: main.c:410
void setFreqAll(item_node *node, item_node *newnode)
int getFreq2000b3500(item_node *node)
Definition: main.c:360
void decSoundWithMovement(item_node *node)
void changeReboundSideOfWave(item_node *node)
int isSoundField(int x, int y, int z)
Definition: main.c:586
void setFreq2000b3500(item_node *node, int value)
Definition: main.c:286
void procedureH(item_node *temp, int x, int y, int z, int side)
int getFreq40b100(item_node *node)
Definition: main.c:320
void setFreq150b400(item_node *node, int value)
Definition: main.c:268
item_node * getItem_Root(int x, int y, int z)
Definition: main.c:454
void setFreq400b1000(item_node *node, int value)
Definition: main.c:274
int getMovement(item_node *node)