Berusky3d_kofola_interface.h 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841
  1. /*
  2. Kofolovo rozhrani - H
  3. verze 0.8.0
  4. Poradne si prostuduj ty komentare tady, vsechno sem ti napsal
  5. jak se ovlada.
  6. */
  7. /*
  8. Header files
  9. */
  10. #ifndef __BERUSKY3D_KOFOLA_INTERFACE_H__
  11. #define __BERUSKY3D_KOFOLA_INTERFACE_H__
  12. #include <stdio.h>
  13. #include <math.h>
  14. #include <assert.h>
  15. #include "Ddx.h"
  16. #include "Di.h"
  17. #include "Matrix.h"
  18. #include "Object.h"
  19. #include "Mat3d.h"
  20. #include "Kdtree.h"
  21. #include "Berusky_universal.h"
  22. #include "Berusky3d_castice.h"
  23. #include "Berusky3d.h"
  24. #include "Berusky3d_ini.h"
  25. #include "Berusky3d_load.h"
  26. #include "Berusky3d_animace.h"
  27. extern G_KONFIG ber, *p_ber;
  28. /* Load indicie pro slider - 0-100%
  29. */
  30. extern float kom_load_progres;
  31. /**********************************************************************
  32. Inicializace - myslim celkem jasny funkce
  33. **********************************************************************
  34. */
  35. int kom_graf_init(void); // nahodi DirectX
  36. void kom_graf_konec(int menu); // zrusi DirectX
  37. /**********************************************************************
  38. Load a zruseni levelu - to je taky urcite jasny
  39. **********************************************************************
  40. */
  41. void kom_init_level(LEVEL_HEADER * p_head); // konfiguruje nahravany level, volat pred "void kom_load_level(char *p_file)"
  42. void kom_load_level(char *p_file, int zmen_dir, int restart,
  43. BUNKA_LEVELU_DISK * p_bunka, int bunek);
  44. void kom_post_init_level(void); // konfiguruje level, volat po "void kom_load_level(char *p_file)"
  45. void kom_zrus_level(int restart); // rusi level, pokud je to restart tak zrus spec zpusobem
  46. // Nacte fyzickou souradnici policka levelu
  47. BOD *kom_get_fyz_souradnice(int x, int y, int z, BOD * p_bod);
  48. /**********************************************************************
  49. Hledaci funkce
  50. **********************************************************************
  51. */
  52. // Hleda material podle jeho jmena, K_CHYBA pri neuspechu
  53. MatHandle kom_najdi_material(char *p_jmeno);
  54. // Vrati pointer na material - strkat do flaru
  55. EDIT_MATERIAL *kom_preloz_material(MatHandle mh);
  56. // Hleda meshe prvku
  57. MeshHandle kom_najdi_mesh_prvek(char *p_jmeno);
  58. /**********************************************************************
  59. Herni prvky a predmety
  60. **********************************************************************
  61. */
  62. /* load/ruseni
  63. */
  64. MeshHandle kom_pridej_prvek_levelu(BUNKA_LEVELU_DISK * p_bunka, int x, int y,
  65. int z);
  66. MeshHandle kom_pridej_prvek_levelu_disk(char *p_file,
  67. BUNKA_LEVELU_DISK * p_bunka, int x, int y, int z);
  68. /* Vlozis jmeno kontejneru co chces najit a on ti z nejvyrobi prvek levelu.
  69. vraci K_CHYBA pokud nenasel kontejner toho jmena
  70. */
  71. MeshHandle kom_pridej_mesh_do_levelu(char *p_jmeno);
  72. void kom_zrus_prvek(MeshHandle prvek_handle);
  73. ExMeshHandle kom_najdi_mesh(char *p_jmeno);
  74. /* Nastavi pivot point pro prvek, prepise nastaveni pivotu u sim animace
  75. pokud to nepojede, dej vedet...
  76. */
  77. int kom_mesh_set_pivot_bod(MeshHandle prvek_handle, BOD * p_bod);
  78. int kom_mesh_set_pivot(MeshHandle prvek_handle, float x, float y, float z);
  79. int kom_mesh_get_pivot(MeshHandle prvek_handle, BOD * p_pivot);
  80. /* Nastaveni aktivniho meshe u multi-mesh meshu
  81. */
  82. MeshHandle kom_mesh_set_mesh(MeshHandle mh, int ID, int rotace);
  83. /* Cte okamzite fyzicke!!! umisteni prvku ve scene + jeho rotaci
  84. Tato pozice zavisi take na umisteni levelu a velikosti hernich policek
  85. Tuto pozici pouzivam pro urcovani viditelnosti prvku a odpovida stredu policka
  86. kde je prvek umisten. Tato pozice se meni v realnem case pri behu animaci
  87. */
  88. int kom_mesh_get_float(MeshHandle prvek_handle, float *p_x, float *p_y,
  89. float *p_z, int *p_rotace);
  90. /* Cte logicke umisteni prvku v levelu + jeho rotaci
  91. Vsechny prvky vraci v 0 vrstve, takze y je 0,2,4,6,...
  92. */
  93. int kom_mesh_get_int(MeshHandle prvek_handle, int *p_x, int *p_y, int *p_z,
  94. int *p_rotace);
  95. /* Resetuje umisteni prvku ve scene
  96. Rika animacim, na ktere logicke souradnici je prvek umisten a ze jej ma na tuto
  97. pozici resetovat. Prvek bude mit stred (0,0,0) na zadanych logickych souradnicich
  98. jako by byl vlozen znova do levelu.
  99. Typicky tuto funkci zavolej, pokud se prvek nejak otoci a ty ho chces
  100. resetovat na defaultni smer rotace
  101. */
  102. int kom_mesh_reset_pr(MeshHandle prvek_handle, int x, int y, int z,
  103. int rotace);
  104. /* Nastavi no-test flag (u vody)
  105. */
  106. int kom_mesh_set_no_test(MeshHandle prvek_handle);
  107. /* Vrati savovaci cislo meshe (cislo ktere se strka do
  108. ukladacich struktur)
  109. */
  110. int kom_mesh_get_save_num(MeshHandle prvek_handle);
  111. /* Sladi logicke umisteni prvku s jeho fyzickym umistenim
  112. */
  113. inline int kom_mesh_reset(MeshHandle prvek_handle)
  114. {
  115. int x, y, z, rotace;
  116. kom_mesh_get_int(prvek_handle, &x, &y, &z, &rotace);
  117. kom_mesh_reset_pr(prvek_handle, x, y, z, rotace);
  118. return (TRUE);
  119. }
  120. /* Premisteni prvku - Presune prvek na zadanou pozici
  121. */
  122. #define kom_umisti_prvek(prvek_handle,x,y,z,rotace) ber_umisti_prvek(prvek_handle,x,y,z,rotace)
  123. /* Databaze -> vznikani prvku z databaze za behu
  124. Vlozi prvek do databaze, ze ktere muze byt behem hry zkopirovan do levelu
  125. */
  126. DataHandle kom_pridej_prvek_do_databaze(SECONDDATADESC * p_sec);
  127. /* Kopiruje a umisti prvek z databaze do levelu.
  128. Kazdy prvek muzes kopirovat kolikrat chces.
  129. */
  130. MeshHandle kom_vloz_prvek_z_databaze(DataHandle data_handle, int x, int y,
  131. int z, int rotace, int guid);
  132. /***********************************************************************
  133. Kresleni levelu
  134. ***********************************************************************
  135. */
  136. void kom_klavesy_hra(void);
  137. void ber_renderuj_scenu(void);
  138. #define kom_kresli_level() ber_renderuj_scenu()
  139. /***********************************************************************
  140. Animace materialu
  141. ***********************************************************************
  142. */
  143. /* Nacte handle materilove animace konkretniho meshe a jeho podobjektu
  144. */
  145. MatHandle kom_amat_mesh_get(MeshHandle mesh, int objekt);
  146. /* Cte pocet materialovych animaci
  147. */
  148. int kom_amat_mesh_get_num(void);
  149. typedef struct _MATERIAL_BUNKA
  150. {
  151. MatHandle handle_materialove_animace;
  152. MeshHandle handle_meshe;
  153. int cislo_objektu;
  154. } MATERIAL_BUNKA;
  155. /* Vrati vsechny materialove animace ve scene, uklada do bunek o dvojicich
  156. mesh_handle,objekt
  157. p_bunky musi byt predem naalokovany
  158. */
  159. int kom_amat_mesh_get_all(MATERIAL_BUNKA * p_bunky);
  160. /* Nastavi frame materialove animace
  161. */
  162. int kom_amat_set_frame(MatHandle handle, int frame);
  163. /* Vyvola udalost v materialove animaci
  164. */
  165. int kom_amat_event(MatHandle handle);
  166. /* Cte stav animace
  167. 0 = stoji
  168. 1 = bezi
  169. */
  170. int kom_amat_get(MatHandle handle);
  171. /* Vrati cislo kontejneru k meshi
  172. */
  173. int kom_amat_get_kontejner(MeshHandle mh);
  174. /* Vrati pocet materialu konkretniho meshe
  175. */
  176. int kom_mesh_get_matnum(MeshHandle mh);
  177. /* Naplni pole handlu materialu
  178. */
  179. int kom_mesh_get_mat(MeshHandle mh, MatHandle * p_mat);
  180. /* Vrati jmeno konkretniho materialu
  181. */
  182. char *kom_get_mat_jmeno(MatHandle mh, char *p_buffer, int max_znaku);
  183. /**********************************************************************
  184. Makra pro prevod framu na cas a zpet
  185. **********************************************************************/
  186. // prevod frame->cas(sec)
  187. #define FRAME2SEC(frame) ((frame)/FRAMU_PER_SEC)
  188. // prevod cas(sec)->frame
  189. #define SEC2FRAME(sec) ((sec)*FRAMU_PER_SEC)
  190. /***********************************************************************
  191. Vyroba animaci hernich prvku
  192. ***********************************************************************
  193. */
  194. AnimHandle sim_nahraj_animaci(APAK_HANDLE * pHandle, char *p_jmeno,
  195. int linearne);
  196. AnimHandle sim_vyrob_animaci(int pos_key, int rot_key, int scale_key);
  197. AnimHandle sim_vloz_klic_posun(AnimHandle handle, int klic, float x, float y,
  198. float z, int frame);
  199. AnimHandle sim_vloz_klic_posun_bod(AnimHandle handle, int klic, BOD * p_p,
  200. int frame);
  201. AnimHandle sim_vloz_klic_posun_parametry(AnimHandle handle, int klic,
  202. float tension, float continuity, float bias);
  203. AnimHandle sim_vloz_klic_rotace(AnimHandle handle, int klic, BOD * p_osa,
  204. float uhel, int frame);
  205. AnimHandle sim_vloz_klic_rotace_quat(AnimHandle handle, int klic, QUAT * p_q,
  206. int frame);
  207. AnimHandle sim_vloz_klic_rotace_parametry(AnimHandle handle, int klic,
  208. float tension, float continuity, float bias);
  209. AnimHandle sim_vloz_klic_scale(AnimHandle handle, int klic, float x, float y,
  210. float z, int frame);
  211. AnimHandle sim_vloz_klic_scale_bod(AnimHandle handle, int klic, BOD * p_scs,
  212. int frame);
  213. AnimHandle sim_vloz_klic_scale_parametry(AnimHandle handle, int klic,
  214. float tension, float continuity, float bias);
  215. AnimHandle sim_vloz_pivot(AnimHandle handle, float x, float y, float z);
  216. AnimHandle sim_vloz_pivot_bod(AnimHandle handle, BOD * p_bod);
  217. AnimHandle sim_interpoluj_animaci(AnimHandle handle, int framenum, int loop);
  218. AnimHandle sim_zrus_animaci(AnimHandle handle);
  219. /***********************************************************************
  220. Run Animace
  221. ***********************************************************************
  222. */
  223. #define MESH_PRVEK 0x1 // interni
  224. #define MESH_LOCAL_MATRIX 0x2 // interni
  225. #define MESH_MULT_MATRIX 0x4 // interni
  226. #define MESH_USE_MATRIX 0x8 // interni
  227. #define MESH_PIVOT 0x20 // interni
  228. #define MESH_TRANSFORMUJ_PIVOT 0x10 // interni
  229. #define MESH_KAMERA 0x40 // je to kamera
  230. RunHandle rani_aktivuj(AnimHandle shandle, int *p_flag, int flag, int start,
  231. int stop);
  232. /* Stejne jako rani_aktivuj, jenom se nespusti. Musis ji ructe spustit funkci
  233. RunHandle rani_go(RunHandle ah, int flag, int start, int stop),
  234. kde flag,start,stop jsou flagy co jinak strkas do te rani_aktivuj()
  235. a ah je handle run animace kterou ti vrati to rani_aktivuj
  236. */
  237. RunHandle rani_aktivuj_cekej(AnimHandle shandle, int *p_flag);
  238. /* Pripoji na run animaci funkci p_fce, funkce je ve tvaru:
  239. void moje_funkce(int param, void *p_param)
  240. pokud p_fce = NULL tak nastavenou funkci zase smazes
  241. privazat ji muzes kdykoliv v prubehu animace, ale samozrejme
  242. ze to musis stihnout do konce animace, jinak se ti nezavola
  243. ty promeny param, p_param ti do te funkce strcim.
  244. */
  245. RunHandle rani_pripoj_funkci(RunHandle a_handle, END_FUNKCE p_fce, int param,
  246. int param2, void *p_param);
  247. /* Pripoji na run animaci dalsi run animaci s handlem next_ah,
  248. po skonceni animace ah se zavola automaticky funkce rani_go takto:
  249. rani_go(next_ah, flag, start, stop);
  250. cimz se automaticky spusti animace next_ah.
  251. pokud next_ah = -1 (K_CHYBA) tak se fronta vymaze.
  252. Je jedno jestli animace ah bezi nebo stoji.
  253. */
  254. RunHandle rani_next_animace(RunHandle ah, RunHandle next_ah, int flag,
  255. int start, int stop);
  256. /* Jedina zmena - promena transformuj_pivot = 1 znamena ze pivot se ma transformovat
  257. do souradnic meshe. zere to trochu pri privazovani cas, takze to nepouzivej pokud
  258. ten mesh je resetovanej
  259. */
  260. MatrixHandle rani_privaz_mesh(RunHandle a_handle, MeshHandle m_handle,
  261. int transformuj_pivot);
  262. MatrixHandle rani_privaz_kameru(RunHandle a_handle);
  263. MatrixHandle rani_privaz_svetlo(RunHandle a_handle, LightHandle l_handle);
  264. RunHandle rani_rozvaz(RunHandle a_handle, MatrixHandle m_handle);
  265. // Znovu spousti uz dobehnutou nebo jeste nespustenou run animaci
  266. RunHandle rani_go(RunHandle ah, int flag, int start, int stop);
  267. // Zrusi run animaci
  268. int rani_zrus(RunHandle ahandle);
  269. /***********************************************************************
  270. Vazani meshu dohromady -> top mesh je pod low meshem
  271. ***********************************************************************
  272. */
  273. int kom_svaz_meshe(MeshHandle m_top, MeshHandle m_low);
  274. int kom_rozvaz_mesh(MeshHandle m_low);
  275. /***********************************************************************
  276. Lokalni animace meshu (lokani key-frame animace)
  277. ***********************************************************************
  278. */
  279. MeshHandle lani_set(MeshHandle mh, int poradi, int c_anim, int *p_flag,
  280. int flag, int start, int stop);
  281. MeshHandle lani_smaz_frontu(MeshHandle mh);
  282. MeshHandle lani_next(MeshHandle mh);
  283. int lani_get(MeshHandle mh);
  284. /*******************************************************************************
  285. Rezimy kamer:
  286. 1. Polarni rezim:
  287. Kamera je zadana pomozi 3 parametru
  288. bod - Stredovy bod kolem ktereho se kamera otaci
  289. r - uhel otoceni kamery kolem osy Y (pravo/levo)
  290. fi - uhel otoceni kamery kolem osy X (nahoru/dolu)
  291. vzdal - vzdalenost od bodu
  292. 2. 3DS Rezim
  293. Kamera je zadana pomoci 2 bodu a 1 nebo 2 uhlu
  294. Position - Bod kde lezi kamera
  295. Target - Bod kam se kamera diva
  296. Roll - Rotace kamery kolem osy kterou se diva (otaci se jakoby kolem stredu obrazovky)
  297. Fov - Field-Of-View (perspektiva/zoom kamery - je defaultne nastavene, vetsinou neni potreba)
  298. Rezimy (polar/3ds) se prepinaji automaticky podle toho kterou funkci pouzijes.
  299. Ovladani kamer:
  300. * Nacteni orientace kamery (vsechny rezimy)
  301. void kam_get_float(float *p_body);
  302. Smer pohledu kamery - (p_body[0],p_body[1],p_body[2])
  303. Smer nahoru kamery - (p_body[3],p_body[4],p_body[5])
  304. * Nastaveni / Cteni orientace kamery
  305. 1. Nastaveni souradnic kamery
  306. int kam_pol_set(BOD *p_p, float r, float fi, float vzdal);
  307. int kam_3ds_set(BOD *p_pos, BOD *p_target, float roll);
  308. 2. Pricteni k aktualnimu nastaveni kamery
  309. Pokud chces pricist vzdalenost nebo otocit kameru o 90 stupnu
  310. tak toto jsou idelani funkce. Ty hodnoty se prictou k aktualnimu
  311. nastaveni
  312. int kam_pol_add(BOD *p_p, float r, float fi, float vzdal);
  313. int kam_3ds_add(BOD *p_pos, BOD *p_target, float roll);
  314. 3. Nacteni aktualniho stavu kamery
  315. Vraci nastaveni kamery v 3ds nebo polarnich souradnicich
  316. int kam_pol_get(BOD *p_p, float *p_r, float *p_fi, float *p_vzdal);
  317. int kam_3ds_get(BOD *p_pos, BOD *p_target, float *p_roll);
  318. 4. Ovladani perspektivy/zoomu - pro vsechny mody
  319. void kam_set_fov(float fov); - Nastavi uhel kameru (def. je asi 55 stupnu)
  320. float kam_get_fov(void); - cte fov kamery
  321. * Jednoduche animace kamer
  322. Tohle jsou rychle a jednoduche animace, kdy zadas kam se ma kamera
  323. presunout, strcis ji promenou do ktere zapisuje stav animace
  324. (jestli uz kamera dobehla nebo ne) a vsechno bezi mimo tebe. Po dobehnuti
  325. se animace sama smaze, takze se nemusis o nic uz starat.
  326. Jako vychozi pozice animace se pouzije aktualni nastaveni kamery, jako
  327. cil se pouzije to co zadas. To RunHandle vubec nemusis nijak kontrolovat.
  328. 1. Nastavovaci funkce
  329. Tyhle funkce pracuji aktulani_pozice -> zadana_pozice.
  330. Parametry:
  331. *p_flag - promena (globalni! ne lokalni zasobnikova), kam kamera
  332. haze stav animace, 0..100 procenta ubehle animace (50 = 1/2 animace)
  333. -1 = konec animace, animace skoncila
  334. flag - flag animace, tady 0
  335. framenum - pocet framu animace, 20 framu = 1 sec.
  336. tension - tenze animace, je od -1.0f do 1.0f, 0 = default znamena to jak rychle
  337. bude animace zacinat/koncit. vetsinou pouzivam 1.0f
  338. coz vypada celkem pekne.
  339. Zbyle 4(3) parametry jsou cilove nastaveni kamery.
  340. RunHandle kam_pol_anim(BOD *p_p, float r, float fi, float vzdal, int *p_flag, int flag, int framenum, float tension);
  341. RunHandle kam_3ds_anim(BOD *p_p, BOD *p_t, float roll, int *p_flag, int flag, int framenum, float tension);
  342. 2. Pricitaci funkce
  343. Tyhle funkce jsou uplne stejne jako predchozi, ale zadane hodnoty se prictou
  344. k aktualnimu nastaveni kamery. (takze pokud chces otocit animovane kameru
  345. o 90 stupnu, priblizit/vzdalit a pod. tak timto)
  346. RunHandle kam_pol_anim_add(BOD *p_p, float r, float fi, float vzdal, int *p_flag, int flag, int framenum, float tension);
  347. RunHandle kam_3ds_anim_add(BOD *p_p, BOD *p_t, float roll, int *p_flag, int flag, int framenum, float tension);
  348. * Uplne animace kamer
  349. Funguji uplne stejne jako ty na mesh. Vyrobis si animaci, vlozis klice
  350. ktere nemusis interpolovat a rovnou to spustis. Animaci kamer muze byt vice
  351. ale beze muze jen jedna.
  352. 1. Vyrobeni animace
  353. Vraci klasicke hadle na animaci
  354. AnimHandle kam_pol_vyrob_animaci(int framenum, int pos_keys, int rot_keys, int vzdal_keys);
  355. (rot keys jsou klice rotace r a fi, tyto 2 uhly se zadavaji dohromady)
  356. AnimHandle kam_3ds_vyrob_animaci(int framenum, int pos_keys, int target_keys, int roll_keys, int fov_keys);
  357. 2. Nahrani animace
  358. Kdyz si animaci udelas v editoru, muzes si ju imto nahrat:
  359. AnimHandle kam_3ds_nahraj_animaci(char *p_jmeno);
  360. 3. Vlozeni klicu
  361. polarnich klicu
  362. AnimHandle kam_pol_vloz_klic_posun(AnimHandle handle, int klic, float x, float y, float z, int frame);
  363. AnimHandle kam_pol_vloz_klic_posun_bod(AnimHandle handle, int klic, BOD *p_p, int frame);
  364. AnimHandle kam_pol_vloz_klic_posun_parametry(AnimHandle handle, int klic, float tension, float continuity, float bias);
  365. AnimHandle kam_pol_vloz_klic_rotace(AnimHandle handle, int klic, float r, float fi, int frame);
  366. AnimHandle kam_pol_vloz_klic_rotace_parametry(AnimHandle handle, int klic, float tension, float continuity, float bias);
  367. AnimHandle kam_pol_vloz_klic_vzdal(AnimHandle handle, int klic, float vzdal, int frame, float tension, float continuity, float bias);
  368. AnimHandle kam_pol_vloz_klic_all(AnimHandle handle, int klic, BOD *p_p, float r, float fi, float vzdal, int frame, float tension);
  369. 3ds klicu
  370. AnimHandle kam_3ds_vloz_klic_posun(AnimHandle handle, int klic, float x, float y, float z, int frame);
  371. AnimHandle kam_3ds_vloz_klic_posun_bod(AnimHandle handle, int klic, BOD *p_p, int frame);
  372. AnimHandle kam_3ds_vloz_klic_posun_parametry(AnimHandle handle, int klic, float tension, float continuity, float bias);
  373. AnimHandle kam_3ds_vloz_klic_target(AnimHandle handle, int klic, float x, float y, float z, int frame);
  374. AnimHandle kam_3ds_vloz_klic_target_bod(AnimHandle handle, int klic, BOD *p_target, int frame);
  375. AnimHandle kam_3ds_vloz_klic_target_parametry(AnimHandle handle, int klic, float tension, float continuity, float bias);
  376. AnimHandle kam_3ds_vloz_klic_roll(AnimHandle handle, int klic, float roll, int frame, float tension, float continuity, float bias);
  377. AnimHandle kam_3ds_vloz_klic_fov(AnimHandle handle, int klic, float fov, int frame, float tension, float continuity, float bias);
  378. AnimHandle kam_3ds_vloz_klic_all(AnimHandle handle, int klic, BOD *p_p, BOD *p_t, float roll, int frame, float tension);
  379. Promene ve funkcich sou parametry jsou od -1.0f do 1.0f pro kazdy klic a znamenaji:
  380. tension - Jak silne bude animace v tomto bode zrychlovat/zpomalovat
  381. continuity - Spojitost v tomto bode (tj. velikost zrychlen)
  382. bias - Jak silne bude animace v tomto bode pokracovat
  383. ve svem puvodnim smeru
  384. 0 = defaultni nastaveni pro vsechny (kdyz je nezadas tak jsou nulove)
  385. vic info je ve poc. grafice (ta hneda knizka) na strane 361/Pocitacova animace
  386. 4. Zruseni animace (3ds i polarni)
  387. AnimHandle kam_zrus_animaci(AnimHandle handle);
  388. 5. Prehrani animace
  389. int kam_start(int a_handle, int *p_flag, int flag, int start, int stop);
  390. Spusti animaci s handle a_handle. Parametry jsou
  391. a_handle - AnimHandle animace
  392. *p_flag - promena (globalni! ne lokalni zasobnikova), kam kamera
  393. haze stav animace, 0..100 procenta ubehle animace (50 = 1/2 animace)
  394. -1 = konec animace, animace skoncila
  395. flag - flag animace, muze byt GK_LOOP|GK_REMOVE
  396. kde: GK_LOOP - animace se bude opakovat
  397. GK_REMOVE - animace se po skonceni automaticky smaze
  398. start - frame od ktereho se ma animovat
  399. stop - frame do ktereho ma animace bezet (0 = az do konce)
  400. 6. Stop animace
  401. void kam_stop(void);
  402. Pokud animace bezi, muzes ji zastavit touto funkci. Pokud animace skonci
  403. (*p_flag = -1) tak uz nebezi a tuto funkci nevolej, uz se volala :)
  404. Pokud do startu das flag GK_REMOVE, v teto funkci se animace taky smaze.
  405. Nepredava se handle, protoze nezet muze jen 1 animace kamery
  406. *******************************************************************************
  407. */
  408. // Interni flagy
  409. #define GAME_KAMERA_POLAR 0x1 // kamera je v polarnim modu
  410. #define GAME_KAMERA_3DS 0x2 // kamera je v 3ds modu
  411. #define GAME_KAMERA_ANIMACE 0x4 // kamera se prave animuje
  412. #define GAME_KAMERA_KOREKCE 0x8 // kamera se koriguje
  413. /* Konstanty predavane do promene flag
  414. */
  415. #ifndef GK_LOOP
  416. #define GK_LOOP 0x100 // Run-animace se prehrava furt dokola
  417. #endif
  418. #ifndef GK_REMOVE
  419. #define GK_REMOVE 0x200 // Animace se po dobehnuti automaticky smaze
  420. #endif
  421. // Nacte vektory kamery
  422. void kam_get_float(float *p_body);
  423. // Nacte vektory kamery + pozici
  424. void kam_get_float_ext(float *p_dir, float *p_pos);
  425. // ovladani perspektivy/zoomu kamery
  426. void kam_set_fov(float fov);
  427. float kam_get_fov(void);
  428. // nastaveni, pricteni a nacteni kamery v polarnich souradnicich
  429. int kam_pol_set(BOD * p_p, float r, float fi, float vzdal, int korekce);
  430. int kam_pol_add(BOD * p_p, float r, float fi, float vzdal, int korekce);
  431. int kam_pol_get(BOD * p_p, float *p_r, float *p_fi, float *p_vzdal);
  432. // nastaveni, pricteni a nacteni kamery v 3ds souradnicich
  433. int kam_3ds_set(BOD * p_pos, BOD * p_target, float roll);
  434. int kam_3ds_add(BOD * p_pos, BOD * p_target, float roll);
  435. int kam_3ds_get(BOD * p_pos, BOD * p_target, float *p_roll);
  436. // Jednoduche animace kamer (odkud-kam) - samorusici se
  437. // flag musi byt staticka/globalni promena (ne zasobnikova!!)
  438. RunHandle kam_pol_anim(BOD * p_p, float r, float fi, float vzdal, int *p_flag,
  439. int flag, int framenum, float tension);
  440. RunHandle kam_pol_anim_add(BOD * p_p, float r, float fi, float vzdal,
  441. int *p_flag, int flag, int framenum, float tension);
  442. RunHandle kam_3ds_anim(BOD * p_p, BOD * p_t, float roll, int *p_flag,
  443. int flag, int framenum, float tension);
  444. RunHandle kam_3ds_anim_add(BOD * p_p, BOD * p_t, float roll, int *p_flag,
  445. int flag, int framenum, float tension);
  446. // Slozite animace kamer
  447. AnimHandle kam_pol_vyrob_animaci(int framenum, int pos_keys, int rot_keys,
  448. int vzdal_keys, int korekce);
  449. AnimHandle kam_pol_vloz_klic_posun(AnimHandle handle, int klic, float x,
  450. float y, float z, int frame);
  451. AnimHandle kam_pol_vloz_klic_posun_bod(AnimHandle handle, int klic, BOD * p_p,
  452. int frame);
  453. AnimHandle kam_pol_vloz_klic_posun_parametry(AnimHandle handle, int klic,
  454. float tension, float continuity, float bias);
  455. AnimHandle kam_pol_vloz_klic_rotace(AnimHandle handle, int klic, float r,
  456. float fi, int frame);
  457. AnimHandle kam_pol_vloz_klic_rotace_parametry(AnimHandle handle, int klic,
  458. float tension, float continuity, float bias);
  459. AnimHandle kam_pol_vloz_klic_vzdal(AnimHandle handle, int klic, float vzdal,
  460. int frame, float tension, float continuity, float bias);
  461. AnimHandle kam_pol_vloz_klic_all(AnimHandle handle, int klic, BOD * p_p,
  462. float r, float fi, float vzdal, int frame, float tension);
  463. AnimHandle kam_zrus_animaci(AnimHandle handle);
  464. AnimHandle kam_3ds_vyrob_animaci(int framenum, int pos_keys, int target_keys,
  465. int roll_keys, int fov_keys);
  466. AnimHandle kam_3ds_nahraj_animaci(APAK_HANDLE * pHandle, char *p_jmeno);
  467. AnimHandle kam_3ds_vloz_klic_posun(AnimHandle handle, int klic, float x,
  468. float y, float z, int frame);
  469. AnimHandle kam_3ds_vloz_klic_posun_bod(AnimHandle handle, int klic, BOD * p_p,
  470. int frame);
  471. AnimHandle kam_3ds_vloz_klic_posun_parametry(AnimHandle handle, int klic,
  472. float tension, float continuity, float bias);
  473. AnimHandle kam_3ds_vloz_klic_target(AnimHandle handle, int klic, float x,
  474. float y, float z, int frame);
  475. AnimHandle kam_3ds_vloz_klic_target_bod(AnimHandle handle, int klic,
  476. BOD * p_target, int frame);
  477. AnimHandle kam_3ds_vloz_klic_target_parametry(AnimHandle handle, int klic,
  478. float tension, float continuity, float bias);
  479. AnimHandle kam_3ds_vloz_klic_roll(AnimHandle handle, int klic, float roll,
  480. int frame, float tension, float continuity, float bias);
  481. AnimHandle kam_3ds_vloz_klic_fov(AnimHandle handle, int klic, float fov,
  482. int frame, float tension, float continuity, float bias);
  483. AnimHandle kam_3ds_vloz_klic_all(AnimHandle handle, int klic, BOD * p_p,
  484. BOD * p_t, float roll, int frame, float tension);
  485. // Prehravani slozitych animaci kamer
  486. RunHandle kam_start(AnimHandle a_handle, int *p_flag, int flag, int start,
  487. int stop);
  488. void kam_stop(void);
  489. // Cteni klicu kamery
  490. int kam_3ds_cti_klic(AnimHandle handle, float time, BOD * p_p, BOD * p_t,
  491. float *p_roll);
  492. int kam_pol_cti_klic(AnimHandle handle, float time, BOD * p_t, float *p_r,
  493. float *p_fi, float *p_vzdal);
  494. // Servisni funkce
  495. void kam_set_mod_param(int mod); // nastavi mod kamery (3ds/polarni)
  496. void kam_set_mod_3ds(void); // nastavi 3ds mod kamerty
  497. void kam_set_mod_polar(void); // nastavi polarni mod kamery
  498. int kam_get_mod(void); // zjisti aktualni mod kamery
  499. /***********************************************************************
  500. Nastaveni mlznych kostek
  501. ***********************************************************************
  502. */
  503. /*
  504. Nacte pointer na mlhokostku, ktera se muze libovolne upravovat:
  505. typedef struct _MLZNA_KOSTKA {
  506. char jmeno[MAX_JMENO];// jmeno mlzne kostky
  507. BOD min,max; // rozmery kostky
  508. int flag; // flagy mlhy
  509. int mod; // mod mlhy (linear/exp/exp2)
  510. int priorita; // priorita mlzne kostky
  511. float start; // zacatek mlhy
  512. float stop; // konec mlhy (za tim je maximalni)
  513. float intenzita; // intenzita mlhy (pro exp a pod)
  514. float r,g,b,a; // barva
  515. struct _MLZNA_KOSTKA *p_next;
  516. } MLZNA_KOSTKA;
  517. */
  518. MLZNA_KOSTKA *kom_mlhokostka_najdi(char *p_jmeno);
  519. /***********************************************************************
  520. Fleky
  521. ***********************************************************************
  522. */
  523. /* Prida flek do sceny, vrati jeho handle
  524. Pokud je MeshHandle == K_CHYBA - je to globani flek
  525. jinak je flek privazanej ke konkretnimu meshu
  526. uroven je vrstva fleku (0,1,2,..pocet) (kdyz je vice fleku na 1 miste, tak
  527. nejspodnejsi ma uroven "0" a nejvyssi uroven "pocet")
  528. */
  529. FlekHandle kom_flek_pridej(MeshHandle mh, BOD * p_p, BOD * p_nx, BOD * p_nz,
  530. float dx, float dz, int rotace, int uroven, MatHandle material);
  531. void kom_flek_zmen(FlekHandle fh, BOD * p_p, BOD * p_nx, BOD * p_nz, float dx,
  532. float dz, int rotace, int uroven, MatHandle material);
  533. void kom_flek_zrus(FlekHandle fh);
  534. int kom_flek_getflag(FlekHandle fh, int flag);
  535. int kom_flek_setflag(FlekHandle fh, int flag);
  536. #define FLEK_NEKRESLIT 0x1
  537. /***********************************************************************
  538. Chapadelnici
  539. ***********************************************************************
  540. */
  541. // Cteni animaci sceny
  542. ExMeshHandle kom_najdi_mesh_joint(ExMeshHandle * p_next);
  543. ExMeshHandle mesh_to_ex_mesh(MeshHandle mh);
  544. int chani_mesh_cti_objekty(ExMeshHandle mh);
  545. int chani_mesh_cti_chapadelniky(ExMeshHandle mh, int objekt,
  546. ChapadloHandle ** p_chap, int *p_chapadel);
  547. char *chani_cti_jmeno(ChapadloHandle chh);
  548. // Vlozi/Vyhodi animace chapadelnika do aniamcniho seznamu
  549. ChapadloHandle chani_zarad(ChapadloHandle chh);
  550. ChapadloHandle chani_zrus(ChapadloHandle chh);
  551. // Start/Stop animace
  552. ChapadloHandle chani_go(ChapadloHandle chh, int *p_flag, int flag, int start,
  553. int stop);
  554. ChapadloHandle chani_stop(ChapadloHandle chh);
  555. /***********************************************************************
  556. Dynamicke svetla - jednoduche
  557. ***********************************************************************
  558. */
  559. /***********************************************************************
  560. Dynamicke svetla - slozite
  561. ***********************************************************************
  562. */
  563. /* Kresleni car v levelu
  564. */
  565. /*
  566. typedef struct _KOFOLOVA_CARA {
  567. BOD p1,p2;
  568. BODRGB b1,b2;
  569. } KOFOLOVA_CARA;
  570. */
  571. void kom_set_linelist(KOFOLOVA_CARA * p_list, int pocet);
  572. /* Nastaveni zpruhlednovani prvku
  573. */
  574. void kom_zpruhlednovat_prvky(int stav);
  575. void kom_zpruhlednovat_prvky_zmena_berusky(void);
  576. /* Cte stacicitu prvku
  577. */
  578. int kom_je_prvek_staticky(int guid);
  579. /* FPS
  580. */
  581. float kom_get_framerate(void);
  582. /* Debug-soubor
  583. */
  584. void kprintf(char log, const char *p_text, ...);
  585. void kprintfe(char log, const char *p_text, ...);
  586. /* Nacte level environment levelu
  587. */
  588. LEVEL_ENVIRONMENT *kom_get_level_environment(void);
  589. /* Nacte mesh, na ktery ukazuje mys
  590. */
  591. MeshHandle kom_get_mesh_mys(int itrida);
  592. /* Texture-config
  593. */
  594. /*
  595. Parametry funkce:
  596. mip_mapping = 0/1 (on/off)
  597. mip_filtr = 0/1 (linear/trilinear)
  598. std_filtr = 0/1 (near/liner)
  599. wrap_x/y = 0/1 (clamp/wrap)
  600. hi_res = 0/1
  601. */
  602. void kom_set_default_text_config(int mip_mapping, int mip_filtr,
  603. int std_filtr, int wrap_x, int wrap_y, int hi_res);
  604. /* Load zpet defaultnich hodnot
  605. */
  606. void kom_ret_default_text_config(void);
  607. /* Nahraje konfiguraci z INI (po zmene hodnot)
  608. */
  609. void kom_reload_ini(void);
  610. /* Cte velikost levelu
  611. */
  612. void kom_get_level_size(BOD * p_min, BOD * p_max);
  613. /* Zapne/vypne zpruhlednovac
  614. */
  615. void kom_zpruhlednovac_on(void);
  616. void kom_zpruhlednovac_off(void);
  617. /* Zvyraznovani prvku on/off
  618. */
  619. void kom_zvyraznovac(void);
  620. /* Load-slidery
  621. */
  622. void kom_load_param_set(int tiku);
  623. void kom_load_param_fce(void (*p_load_fce) (void));
  624. /* Pridani kurzoru do hry
  625. */
  626. MeshHandle kom_pridej_kurzor_do_levelu(void);
  627. /* Nastavi viditelnost prvku
  628. */
  629. MeshHandle kom_prvek_viditelnost(MeshHandle mh, int vid);
  630. /* Zere mesh
  631. */
  632. int kom_get_mesh_mys_all(void);
  633. /* Dela okno
  634. */
  635. //HWND otevri_okno(HINSTANCE handle_aplikace, int full_screen, int dx, int dy, HW_KONFIG *p_conf);
  636. #endif