Berusky3d_castice.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. /* Casticovy system pro Berusky II
  2. */
  3. #ifndef __BERUSKY3D_CASTICE_H_
  4. #define __BERUSKY3D_CASTICE_H_
  5. /* Castice popisujici strepinu z krabice
  6. ma tvar obecneho 4-uhelnika
  7. a muze mit libovolne mapovani v
  8. jednolivych rozich castice
  9. */
  10. typedef struct _PAR_STREPINA
  11. {
  12. BOD p; // akt umisteni castice ve 3D
  13. BOD dir; // smer letu castice
  14. float rychlost; // aktualni rychlost letu castice
  15. float vaha; // vaha castice, jak moc klesa k zemi
  16. float utlum; // utlum rychlosti letu castice
  17. float g; // gravitacni konstanta
  18. float u1, u2, u3, u4; // mapping ve vsech 4 rozich castice
  19. float v1, v2, v3, v4;
  20. float vel1; // 1 velikost castice
  21. float vel2; // 2 velikost castice
  22. float vel3; // 3 velikost castice
  23. float vel4; // 4 velikost castice
  24. float barva; // barva castice (0..1)
  25. int aktivni; // nastavuju ja -> je castice viditelna?
  26. float frame; // pokud je material animovany, tak aktivni frame
  27. float framedelta;
  28. //dword time_vznik; // cas vzniku castice
  29. struct _PAR_STREPINA *p_next; // navazani castice na dalsi
  30. struct _PAR_STREPINA *p_prev; // navazani castice na predchozi
  31. } PAR_STREPINA;
  32. /* Flekova castice - je definovana plochou,
  33. nepohybuje se, pouze scale
  34. */
  35. typedef struct _PAR_FLEK
  36. {
  37. BOD p; // akt umisteni castice ve 3D
  38. BOD nx; // smer pohledu castice
  39. BOD ny; // smer pohledu castice
  40. BOD tmp[4]; // 4 tmp vertexy pouzite k renderingu
  41. float rychlost_x; // x rychlost scale castice
  42. float rychlost_y; // y rychlost scale castice
  43. float utlum_x; // x utlum scale
  44. float utlum_y; // y utlum scale
  45. float r, g, b, a; // barva castice
  46. float dr, dg, db, da; // zmena barvy castice (za sec)
  47. float ka; // konecna alfa (test na konec)
  48. int aktivni; // nastavuju ja -> je castice viditelna?
  49. float frame; // pokud je material animovany, tak aktivni frame
  50. float framedelta;
  51. //dword time_vznik; // cas vzniku castice
  52. struct _PAR_FLEK *p_next; // navazani castice na dalsi
  53. struct _PAR_FLEK *p_prev; // navazani castice na predchozi
  54. } PAR_FLEK;
  55. /* Kourova castice - ma scale faktor
  56. a meni svoji barvu, mapping je defaultni
  57. rozmery ve 2 smerech
  58. a je staticka (stoji na miste)
  59. Nepouzivaji se zadny testy na rendering
  60. */
  61. typedef struct _PAR_KOUR_STOPA
  62. {
  63. BOD p; // umisteni castice ve 3D
  64. BOD nx, ny; // smerove-flekove vektory
  65. BOD dir; // smer letu
  66. // float dx,dy;
  67. // BOD tmp[4]; // tmp body pro rendering
  68. BOD rp; // renderovaci pozice
  69. float rychlost_x; // x rychlost scale castice a zaroven jeji rozmery
  70. float rychlost_y; // y rychlost scale castice
  71. float utlum_x; // x utlum scale
  72. float utlum_y; // y utlum scale
  73. float r, g, b, a; // barva castice
  74. float dr, dg, db, da; // zmena barvy castice
  75. float ka;
  76. float frame; // pokud je material animovany, tak aktivni frame
  77. float framedelta;
  78. float y_plane; // y-plane castice
  79. dword time_vznik; // cas vzniku castice
  80. char rotace; // rotace vypoustenych castic
  81. float x_max; // klipovaci roviny -> pouzite pro kresleni castic
  82. float x_min;
  83. float z_max;
  84. float z_min;
  85. struct _PAR_KOUR_STOPA *p_next; // navazani castice na dalsi
  86. struct _PAR_KOUR_STOPA *p_prev; // navazani castice na predchozi
  87. } PAR_KOUR_STOPA;
  88. /* Moje interni flagy na castice
  89. */
  90. #define TPAR_STREP 0x0001
  91. #define TPAR_KOUR_STOPA 0x0002
  92. #define TPAR_FLEK 0x0004
  93. #define TPAR_ANIMATE 0x0008 // animovat tento system
  94. typedef struct _PARMETAC_HNIZDO
  95. {
  96. void *p_first; // Linearni seznam aktivnich castic
  97. BOD *p_nx; // Normalovy vektor nx pro fleky
  98. BOD *p_ny; // Normalovy vektor ny pro fleky
  99. BOD *p_pivot; // pointer na bod, na kterem se castice uvolnuji
  100. BOD *p_dir; // pointer na smerovy vektor
  101. BOD *p_vitr; // pivot-pointer na vitr co se meni
  102. float rychlost_x; // x rychlost scale castice a zaroven jeji rozmery
  103. float rychlost_y; // y rychlost scale castice
  104. float utlum_x; // x utlum scale
  105. float utlum_y; // y utlum scale
  106. float r, g, b, a; // barva castice
  107. float dr, dg, db, da; // zmena barvy castice
  108. float ka; // mezni hodnota
  109. float frame;
  110. float framedelta;
  111. float y_plane; // hranicni y-plocha
  112. float x_max; // klipovaci roviny -> pouzite pro kresleni castic
  113. float x_min;
  114. float z_max;
  115. float z_min;
  116. BOD min, max; // min,max
  117. int pnum; // pocet aktivnich castic
  118. char rotace; // rotace vypoustenych castic
  119. dword time_last; // cas posledniho uvolneni
  120. dword time_interval; // interval uvolnovani novych castic
  121. int time_first; // cas uvolneni prvni castice
  122. struct _PARMETAC_HNIZDO *p_next;
  123. struct _PARMETAC_HNIZDO *p_prev;
  124. } PARMETAC_HNIZDO;
  125. /* Bomba - struktura kterou me kofola predava?
  126. */
  127. typedef struct _PARMETAC
  128. {
  129. void *p_first; // seznam aktivnich/zasobnich castic
  130. PARMETAC_HNIZDO *p_hnizdo; // seznam aktivnich hnizd
  131. int *p_flag;
  132. int flag;
  133. int material;
  134. int start;
  135. int stop;
  136. float time; // cas animace - 0..1
  137. BOD min; // kostka generatoru min
  138. BOD max; // kostka generatoru max
  139. int hnum; // pocet aktivnich hnizd
  140. int pnum; // pocet aktivnich castic
  141. BOD *p_pivot;
  142. float y_plane;
  143. GLMATRIX world; // transfromacni matice
  144. void *p_param;
  145. int param;
  146. int param2;
  147. END_FUNKCE p_endfce; // kofolova end funkce
  148. struct _PARMETAC *p_next;
  149. struct _PARMETAC *p_prev;
  150. } PARMETAC;
  151. // Flagy vkladane do promenne flag
  152. // castice se meni rozmerove
  153. #define TPAR_SCALE 0x00100
  154. // castice se pouze pricita
  155. #define TPAR_SCALE_ADD 0x04000
  156. // castice se meni barevne
  157. #define TPAR_DIFF 0x00200
  158. // castice je aktualni alfa vetsi nez referencni,je castice aktivni
  159. #define TPAR_VETSI 0x00400
  160. // parametr dir - pouzivar vektor posunu u castic
  161. #define TPAR_DIR 0x00800
  162. // parametr vitr - pouzivar vektor vetru
  163. #define TPAR_VITR 0x01000
  164. // kourova stopa se bere jako soubor 3D fleku
  165. #define TPAR_3D 0x02000
  166. // kourova stopa se bere jako soubor half-life fleku
  167. #define TPAR_HALF_LIFE 0x08000
  168. // pouziva frame-animace materialu
  169. #define TPAR_FRAME 0x10000
  170. // nevypusti prvni castici v poradi
  171. #define TPAR_FIRST_LOST 0x20000
  172. // Casticovy system se posouva s timto pivot-pointem
  173. #define TPAR_POS_PIVOT 0x40000
  174. // Casticovy system se renderuje bez mlhy
  175. #define TPAR_NO_FOG 0x80000
  176. // Bude se pouzivat 2D klipovani (x/z)
  177. #define TPAR_2DCLIP 0x100000
  178. // Testuje se viditelnost castic kolizi s obalkama
  179. #define TPAR_HTEST 0x0200000
  180. // Testuje horni y-plochu u hnizd (cas viditelna kdyz yc < y_plane)
  181. #define TPAR_YPLANE_TOP 0x0400000
  182. // Testuje dolni y-plochy u hnizd (cas viditelna kdyz yc > y_plane)
  183. #define TPAR_YPLANE_LOW 0x0800000
  184. // Casticovy system se sam odmaze po dobehnuti
  185. #define TPAR_AUTOREMOVE 0x1000000
  186. /* Vyrobi generator castic
  187. vraci handle casticoveho systemu
  188. */
  189. ParHandle par_vyrob(void);
  190. /* Nastavy vlastnosti casticoveho systemu
  191. material - material pouzity pro castice
  192. flag - TPAR flag pro castice
  193. p_pos - pozice casticoveho systemu v absolutnich souradnicich
  194. p_pivot - pivot poin casticoveho systemu (bod s kterym se posouva casticovy system)
  195. */
  196. ParHandle par_set_param(ParHandle ph, int material, int flag, BOD * p_pos,
  197. BOD * p_pivot);
  198. /* Nastavi Y rovinu pro strepinove systemy
  199. */
  200. ParHandle par_set_y_plane(ParHandle ph, float y_plane);
  201. /* Zrusi generator castic, podle zadaneho handle
  202. */
  203. void par_zrus(ParHandle ph);
  204. /* Cte pocet aktivnich (zivych) castic casticoveho systemu
  205. */
  206. int par_get(ParHandle ph);
  207. /* Spusti animaci casticoveho systemu, parametry jsou:
  208. *p_flag - flag, -1 = konec animace
  209. flag - animacni flag, zatim davat FALSE
  210. start - cas za ktery to ma vybuchnout (v milisec), 0 = okamzite
  211. stop - cas konce vybuchu, 0 = neomezeny konec
  212. */
  213. ParHandle par_go(ParHandle ph, int *p_flag, int start, int stop);
  214. /* Pripoji tu dabelskou end funkci
  215. */
  216. ParHandle par_pripoj_funkci(ParHandle ph, END_FUNKCE p_fce, int param,
  217. int param2, void *p_param);
  218. /* Cte pointer na prvni castici v linearnim seznamu castic
  219. */
  220. void *par_cti_prvni(int ph);
  221. /* Vlozi do casticoveho systemu castice typu strepina:
  222. - po celou dobu animace maji stejne rozmery
  223. - pohybuji se po zadane balisticke krivce
  224. - pusobi na ne gravitace
  225. */
  226. void par_vloz_strepy(int ph, PAR_STREPINA * p_part, int pocet);
  227. /* Vlozi castice fleku - staticle fleky urcene pozici a vektorama
  228. */
  229. void par_vloz_fleky(int ph, PAR_FLEK * p_part, int pocet);
  230. /***********************************************************************
  231. Hnizdove casticove systemy
  232. **********************************************************************
  233. */
  234. /* Vlozi zasobu kourovych castic
  235. */
  236. int par_vloz_kour_stopu(ParHandle ph, PAR_KOUR_STOPA * p_part, int pocet);
  237. /* Vyrobi generacni hnizdo
  238. */
  239. HnizdoHandle par_vloz_hnizdo(ParHandle ph);
  240. /* Zruseni hnizda
  241. */
  242. void par_zrus_hnizdo(ParHandle ph, HnizdoHandle hh);
  243. /* Nastavuje parametry hnizda
  244. */
  245. HnizdoHandle par_vloz_hnizdo_komplet(HnizdoHandle hh, int time_interval,
  246. BOD * p_pivot, PAR_KOUR_STOPA * p_part);
  247. HnizdoHandle par_vloz_hnizdo_timer(HnizdoHandle hh, int time_interval,
  248. int time_first);
  249. HnizdoHandle par_vloz_hnizdo_pivot(HnizdoHandle hh, BOD * p_pivot);
  250. HnizdoHandle par_vloz_hnizdo_pivot_normal(HnizdoHandle hh, BOD * p_nx,
  251. BOD * p_ny);
  252. HnizdoHandle par_vloz_hnizdo_dir(HnizdoHandle hh, BOD * p_dir);
  253. HnizdoHandle par_vloz_hnizdo_vitr(HnizdoHandle hh, BOD * p_vitr);
  254. HnizdoHandle par_vloz_hnizdo_scale(HnizdoHandle hh, float rx, float ry,
  255. float utlum_x, float utlum_y);
  256. HnizdoHandle par_vloz_hnizdo_diff(HnizdoHandle hh, float r, float g, float b,
  257. float a, float dr, float dg, float db, float da, float ka);
  258. HnizdoHandle par_vloz_hnizdo_y_plane(HnizdoHandle hh, float y_plane);
  259. HnizdoHandle par_vloz_hnizdo_frame(HnizdoHandle hh, float frame,
  260. float framedelta);
  261. HnizdoHandle par_vloz_hnizdo_clip(HnizdoHandle hh, float min_x, float min_z,
  262. float max_x, float max_z);
  263. HnizdoHandle par_vloz_hnizdo_rotaci(HnizdoHandle hh, char rotace);
  264. /* Generuje castici z hnizda (okamzite, neceka na cas)
  265. */
  266. HnizdoHandle par_vloz_hnizdo_pust_castici(HnizdoHandle hh);
  267. /* Prida okamzite zadany pocet castic do hnizda
  268. Vraci pointer na prvni pridavanou castici (lin seznam
  269. vsech dalsich pridavanych)
  270. */
  271. PAR_KOUR_STOPA *par_vloz_hnizdo_pust_castice(ParHandle ph, HnizdoHandle hh,
  272. int pocet);
  273. /* Vrati pointer na hnizdo - muzes si ho nastavit sam primo
  274. */
  275. PARMETAC_HNIZDO *par_cti_hnizdo(HnizdoHandle hh);
  276. /* Vrati pointer na prvni aktivni castici hnizda,
  277. NULL pokud neni zadna aktivni
  278. */
  279. PAR_KOUR_STOPA *par_cti_hnizdo_castice(HnizdoHandle hh);
  280. /* Cte pocet hnizd casticoveho systemu
  281. */
  282. int par_get_hnizda(ParHandle ph);
  283. /* Zrusi se casticovy system - end
  284. */
  285. void par_zrus_end(PARMETAC * p_par);
  286. /* ***************************************************************
  287. Vodni dilo 2
  288. ***************************************************************
  289. */
  290. #define VOD_AKTIVNI 0x0001
  291. #define VOD_BOD 0x0002
  292. #define VOD_X_PLANE 0x0004
  293. #define VOD_Y_PLANE 0x0008
  294. #define VOD_Z_PLANE 0x0010
  295. #define VOD_DIFF_MOD 0x0020
  296. #define VOD_DIFF_ADD 0x0040
  297. #define VOD_DIFF_SUB 0x0080
  298. #define VOD_SPEC_MOD 0x0100
  299. #define VOD_SPEC_ADD 0x0200
  300. #define VOD_SPEC_SUB 0x0400
  301. VodaHandle vod_vyrob(int meshu);
  302. VodaHandle vod_pridej_mesh(VodaHandle vh, MeshHandle mh);
  303. VodaHandle vod_uzavri_meshe(VodaHandle vh);
  304. VodnikHandle vod_vloz_vodnika(VodaHandle vh, BOD * p_pos, int flag,
  305. float amplituda, float perioda, float fi, float damplituda, float dperioda,
  306. float dfi);
  307. VodnikHandle vod_uprav_vodnika_par(VodnikHandle vh, float amplituda,
  308. float perioda, float fi, float damplituda, float dperioda, float dfi);
  309. VodnikHandle vod_cti_vodnika_par(VodnikHandle vh, float *p_amplituda,
  310. float *p_perioda, float *p_fi, float *p_damplituda, float *p_dperioda,
  311. float *p_dfi);
  312. VodnikHandle vod_uprav_vodnika_flag(VodnikHandle vh, int flag);
  313. VodnikHandle vod_cti_vodnika_flag(VodnikHandle vh, int *p_flag);
  314. VodnikHandle vod_vloz_vodnika_diff(VodnikHandle vh, float dr, float dg,
  315. float db, float da);
  316. VodnikHandle vod_vloz_vodnika_add_diff(VodnikHandle vh, float dr, float dg,
  317. float db, float da);
  318. VodnikHandle vod_vloz_vodnika_spec(VodnikHandle vh, float sr, float sg,
  319. float sb);
  320. VodnikHandle vod_vloz_vodnika_add_spec(VodnikHandle vh, float sr, float sg,
  321. float sb);
  322. #endif