objekt_editor.h 27 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090
  1. /*
  2. H k objekt editoru
  3. */
  4. #define POPIS_OS_ON 1
  5. #define POPIS_OS_OFF 0
  6. #define MENIT_VZDAL_ON 1
  7. #define MENIT_VZDAL_OFF 0
  8. #define STRED_ON 1
  9. #define STRED_OFF 0
  10. #define PODLOZKA_KONT 99
  11. #define KAMERA_1 95
  12. #define KAMERA_2 96
  13. #define KAMERA_3 97
  14. #define KAMERA_4 98
  15. #define R_BOD 94
  16. #define R_BOD_1 93
  17. #define REZERVOVANE_KONT 10
  18. #define MAX_SVETEL 200
  19. #define MAX_PRUHLEDNYCH_OBJEKTU 200
  20. #define CELKEM_MODU 5
  21. #define MOD_XZ 0
  22. #define MOD_XY 1
  23. #define MOD_ZY 2
  24. #define MOD_GAME 3
  25. #define MOD_KAMERA 4
  26. #define KONT_NUM 2000
  27. #define VEL_CTVERCE 4
  28. #define MAX_UNDO 5
  29. #define NZ_STROM 128 // 1 x 1 kilometr
  30. #define NX_STROM 128
  31. #define DX_STROM 10 //x a z posun
  32. #define DZ_STROM 10
  33. #define X_STROM 0
  34. #define Z_STROM 0
  35. #define NZ_STROM_POSUN 7
  36. #define OXRES p_cnf->wxres
  37. #define OYRES p_cnf->wyres
  38. #define OXSTART p_cnf->wx
  39. #define OYSTART p_cnf->wy
  40. #define MAX_EDIT_TEXTUR 1000
  41. #define MAX_EDIT_ANIMACI 1000
  42. #define MAX_RAY_TEXTUR 1000
  43. #define MAX_EDIT_SVETEL 100
  44. #define MAX_EDIT_KAMER 20
  45. #define MAX_EDIT_VLN 20
  46. #define SHAD_FLAT 0
  47. #define SHAD_GOURAND 1
  48. #define SHAD_PHONG 2
  49. #define DUMMY_OBJEKT "$$$DUMMY"
  50. #define SCENA_LEVEL 0
  51. #define SCENA_POLY 1
  52. /*
  53. Bud je to bod kontejneru nebo divoky bod v prostoru na x,y,z
  54. */
  55. typedef struct _I_VERTEX
  56. {
  57. word v;
  58. word o;
  59. word k;
  60. } I_VERTEX;
  61. typedef struct _F_VERTEX
  62. {
  63. word f; // vybrana face
  64. word o; // vybrane objekt
  65. word k; // vybrany kontejner
  66. } F_VERTEX;
  67. typedef struct _D_VERTEX
  68. {
  69. word k, o, f;
  70. float x, y, z;
  71. byte pozice;
  72. byte d2; //true pokud je to 2d bod
  73. } D_VERTEX;
  74. typedef struct _I_OBJEKT
  75. {
  76. word o;
  77. word k;
  78. } I_OBJEKT;
  79. /* Texturova cast - texturovaci nastroje
  80. */
  81. typedef struct _ROH
  82. {
  83. int x1, y1, x2, y2;
  84. } ROH;
  85. typedef struct _ROHF
  86. {
  87. float x1, y1, x2, y2;
  88. } ROHF;
  89. /*
  90. D3DFOG_NONE = 0,
  91. D3DFOG_EXP = 1,
  92. D3DFOG_EXP2 = 2,
  93. D3DFOG_LINEAR = 3
  94. */
  95. typedef struct _EDIT_OKNO
  96. {
  97. GLMATRIX project, word, camera, invcam, // inverzni viev matrix s normalizovanejma vektorama
  98. r_bod;
  99. float vzdal;
  100. float fi;
  101. byte fs; // full-scrren -> po jeho deaktivaci prekresli zbyvajici okna
  102. int min_x, min_y;
  103. int max_x, max_y;
  104. } EDIT_OKNO;
  105. typedef struct _KONFIG_MATERIALU
  106. {
  107. int aktivni; // texturovaci lista aktivni
  108. int vybr_polozka; // vybrana plozka v liste
  109. int vybr_mat; // vybrany material
  110. HWND hwnd_list; // hwnd listu materialu
  111. HWND hwnd_dialog; // hwnd listu materialu
  112. } KONFIG_MATERIALU;
  113. typedef struct _KONFIG_OBJEKTU
  114. {
  115. int aktivni; // obj lista aktivni
  116. int vybr_polozka; // vybrana plozka v liste
  117. HWND hwnd_dialog; // hwnd listu materialu
  118. } KONFIG_OBJEKTU;
  119. typedef struct _KONFIG_ANIMACE
  120. {
  121. int aktivni; // ani lista aktivni
  122. HWND hwnd_dialog; // hwnd listu animaci
  123. int par1;
  124. } KONFIG_ANIMACE;
  125. #define OZNACOVAT_MESH 0x1
  126. #define OZNACOVAT_KOSTI 0x2
  127. #define OZNACOVAT_SVETLA 0x4
  128. typedef struct _KONFIG_EDITOR
  129. {
  130. byte vsechno_obj;
  131. byte vsechno_kont;
  132. byte grid;
  133. byte dratove;
  134. byte textury;
  135. byte objekt_origin;
  136. byte objekt_stred;
  137. byte high_face_render;
  138. byte high_face_render_refresh;
  139. byte mys_on;
  140. byte nitkovy_kriz;
  141. byte render_mod;
  142. byte free_look;
  143. byte svetla;
  144. byte svetla_kreslit;
  145. byte svetla_dynamicke;
  146. byte svetla_bez_gourandu;
  147. byte svetla_sceny;
  148. byte max_svetla;
  149. byte flare;
  150. byte animace;
  151. byte okoli;
  152. byte light_maps;
  153. byte load_textur;
  154. byte load_prvku;
  155. byte keyframe_load;
  156. byte keyframe_static;
  157. byte keyframe_kont;
  158. byte druh_sceny;
  159. byte kdtree_bunka;
  160. byte kdtree_render;
  161. byte kdtree_hloubka;
  162. byte kdtree_render_bunky;
  163. byte kdtree_kreslit_vse;
  164. byte kamera_load;
  165. byte kamera_kreslit;
  166. byte kamera_aktivni;
  167. byte kamera_vkladat_do_klicu;
  168. byte mazat_dummy;
  169. byte obalky_kontejner;
  170. byte obalky_objekt;
  171. byte barvy_z_materialu;
  172. byte render_zrcadla;
  173. byte norm_vect;
  174. float norm_vect_velikost;
  175. byte mlhokostka_aktivni; // aktivni mlhokostka
  176. byte mlhokostku_kreslit; // kreslit mlhokostky
  177. byte mlhokostka_testy; // testy na kostky
  178. float slicka_delta;
  179. int posledni_prikaz;
  180. int kamera_kostka_kreslit;
  181. int undo;
  182. int undo_num;
  183. byte aktivni_pozadi; // aktivni pozadi pro level
  184. int delit_materialy;
  185. int oznacovat;
  186. int load;
  187. int precizni_export_obb;
  188. int editor_priorita;
  189. int mazat_materialy;
  190. int render;
  191. } KONFIG_EDITOR;
  192. /*
  193. mody: (X/Z) = 0 - shora
  194. (X/Y) = 1 - zepredu
  195. (Y/Z) = 2 - zleva (z boku)
  196. (GAME) = 3 - herni - sikmo zhora
  197. (USER) = 4...5 - dalsi
  198. */
  199. typedef struct _STATISTIKA_SCENY
  200. {
  201. int kontejneru;
  202. int objektu;
  203. int facu;
  204. int polyface;
  205. int bodu;
  206. int textur;
  207. int materialu;
  208. int svetel;
  209. int ray_bodu;
  210. int kont_stat;
  211. int kont_dyn;
  212. } STATISTIKA_SCENY;
  213. typedef struct _BARVY_BODU
  214. {
  215. // == 0 - diffusni, 1 == spekularni
  216. HWND hDlg; // handle dialogu == 0 nic
  217. byte mod;
  218. float gr, gg, gb, ga;
  219. byte gourand_cop;
  220. float gourand_scale;
  221. float gourand_pridat1;
  222. float gourand_pridat2;
  223. int multi_mesh;
  224. int oboustrany_stinovac;
  225. int set_operace;
  226. float set_krok;
  227. int lo, hi;
  228. } BARVY_BODU;
  229. typedef struct _POLY_LIST
  230. {
  231. struct _POLY_LIST *p_next; // dalsi poly v seznamu
  232. int poly; // cislo poly
  233. } POLY_LIST;
  234. typedef struct _EDIT_STINY
  235. {
  236. POLY_LIST *p_poly[MAX_EDIT_SVETEL];
  237. // seznam objektu ktere stini poly v tomto svetlu
  238. } EDIT_STINY;
  239. typedef void (*P_FILRT_FUNC) (bitmapa * p_bmp);
  240. typedef struct _FILTR_FUNC
  241. {
  242. char jmeno[50];
  243. P_FILRT_FUNC p_fnc;
  244. } FILTR_FUNC;
  245. #define FILTR_FUNC_NUM 6
  246. typedef struct _RAY_TRACER
  247. {
  248. dword ambient; // ambientni osvetleni sceny
  249. float faktor; // scale faktor textur
  250. byte disk; // render na disk ?
  251. byte disk_mezi;
  252. byte stupen_filtrace; // stupen filtrace textur
  253. byte filtrace;
  254. byte stiny; // pocitat stiny
  255. int okraj;
  256. int text_min_x;
  257. int text_min_y;
  258. int max_x_surface; // max x rozmer textur
  259. int max_y_surface; // max y rozmer textur
  260. int max_x_lepic; // max x rozmer textur
  261. int max_y_lepic; // max y rozmer textur
  262. byte stinovani; // 0 - flat 1 - gourand 2 - phong
  263. byte supersampl;
  264. byte sup_hloubka;
  265. byte sup_velikost_x;
  266. byte sup_velikost_y;
  267. FILTR_FUNC filtr_func[FILTR_FUNC_NUM];
  268. FILTR_FUNC *p_akt_filtr_func;
  269. int lightmap_filtr;
  270. } RAY_TRACER;
  271. typedef struct _LIGHTMAP_INFO
  272. {
  273. BOD normal; // face normal
  274. BOD normal_bod; // normala pocitaneho bodu
  275. int k, o, f; // umisteni light-mapy
  276. int dx, dy; // rozmery light-mapy
  277. int material;
  278. int mail; // mail-box
  279. int poly;
  280. int indicie;
  281. int ray_phit; // naposledy protnuty poly
  282. int ray_khit; // naposledy protnuty kontejner
  283. int umistena; // lightmapa je uz umistena
  284. int vface[3]; // seznam facu co se ma vyhodit
  285. } LIGHTMAP_INFO;
  286. typedef struct _QUAD_FACE
  287. {
  288. void *p_item; // polozka v stromu
  289. int kont; // cislo kontejneru (je to pointer na kontejner)
  290. int poly; // cislo poly (je to poly)
  291. int face; // cislo plosky (je to face)
  292. //EDIT_MESH_POLY *p_poly; // poly ktereho se to tyka
  293. //TEXT_KOORD *p_koord;// koordinaty plosky
  294. struct _QUAD_FACE *p_dalsi; // dalsi plosky
  295. } QUAD_FACE;
  296. typedef struct _QUAD_TREE
  297. {
  298. QBOD rad; // rozmery stromu
  299. BOD st; // start stromu
  300. BOD bunka; // velikost bunek stromu
  301. QUAD_FACE ****p_face;
  302. } QUAD_TREE;
  303. typedef struct _DEKOVAC
  304. {
  305. int aktivni;
  306. float radius; // kam dekovac dosahne
  307. float sila; // sila dekovace na vzdalenost
  308. } DEKOVAC;
  309. #define ELIM_STRED 0x01 // Eliminovat podle stredu
  310. #define ELIM_MAZAT 0x02 // Premazavat oznaceni
  311. #define ELIM_NORMAL 0x04 // Eliminator podle normaly
  312. #define ELIM_INTELIGENT_1 0x10 // eliminator podle sousednosti
  313. #define ELIM_INTELIGENT_2 0x20 // eliminator podle polohy bodu
  314. #define ELIM_INTELIGENT_2_BRUTAL 0x40 // eliminator podle polohy bodu
  315. #define ELIM_STATIC 0x80 // eliminator podle sousednosti
  316. #define ELIM_DYNAMIC 0x100 // eliminator podle sousednosti
  317. #define ELIM_PRVKY 0x200 // eliminuji se herni prvky
  318. #define ELIM_OKOLI 0x400 // eliminuje se okoli
  319. typedef struct _ELIMINATOR
  320. {
  321. int flag;
  322. BOD p;
  323. BOD norm;
  324. float uhel;
  325. int spol_bodu_1;
  326. int spol_bodu_2;
  327. int dlg_aktivni;
  328. HWND hwnd_dialog; // hwnd listu materialu
  329. float delta_vzdalenost;
  330. } ELIMINATOR;
  331. typedef struct _LISTA_PRVKU
  332. {
  333. int aktivni;
  334. int prvnum; // pocet prvku
  335. int *p_prv; // seznam cisel prvku dle databaze
  336. int *p_pos; // pozice v listboxu
  337. int prvni; // prvni prvek seznamu
  338. int prvakt; // vybrany prvek v seznamu (okne) - vybranu = prvni+akt
  339. HWND hDlg; // list-box kam nastavovat pozici (NULL pokud nic)
  340. HWND hDlg_box; // dialog-box handle
  341. int control; // kontrol-dialog listu
  342. int oken; // oken na horni liste
  343. } LISTA_PRVKU;
  344. #define GROUP_KONT 0x01
  345. #define GROUP_OBJ 0x02
  346. #define GROUP_FACE 0x04
  347. typedef struct _LIGHT_CONFIG
  348. {
  349. HWND hDlg; // handle na listu/0 pokud nic
  350. int extra_svetlo; // akt svetla jsou extra/obycejna
  351. int scena_light; // svetla jsou sceny/kontejneru
  352. } LIGHT_CONFIG;
  353. typedef struct _EDIT_JOINT
  354. {
  355. int k, o; // vybrany objekt
  356. JOINT *p_joint_akt; // aktualni joint
  357. JOINT_ANIMACE *p_joint_animace_akt; // aktualni joint-animace
  358. // dialog-box flagy
  359. int ak;
  360. HWND hDlg;
  361. JOINT_ANIMACE *p_play; // prehravane joint-animace
  362. } EDIT_JOINT;
  363. typedef struct _JOINT_ANIM_GENERATOR
  364. {
  365. byte jmeno[MAX_JMENO];
  366. int framu_min;
  367. int framu_max;
  368. float scale_0;
  369. float scale_1;
  370. float udr_sila; // pomer nd-rady
  371. float udr_rozsah; // rosah nd-rady
  372. int udr_frame_min;
  373. int udr_frame_max;
  374. float ud_rozsah; // rozsah generatoru
  375. int ud_frame_min; // min vzdalenost framu
  376. int ud_frame_max; // mix vzdalenost framu
  377. float vtr_sila; // pomer nd-rady
  378. float vtr_rozsah; // rosah nd-rady
  379. int vtr_frame_min;
  380. int vtr_frame_max;
  381. float vt_rozsah; // rozsah generatoru vetru
  382. int vt_frame_min; // min vzdalenost framu
  383. int vt_frame_max; // mix vzdalenost framu
  384. BOD vt_smer; // smer vetru
  385. JOINT_ANIMACE *p_anim;
  386. BOD osa;
  387. float znaminko;
  388. BOD osa_vitr;
  389. float sila_vetru;
  390. int framu;
  391. int anim_vse;
  392. int vtr_keys;
  393. KEY_POINT_BRS *p_vkeys; // Spline values for scaling
  394. float *p_vtr;
  395. float *p_vtr_all;
  396. int udr_keys;
  397. KEY_POINT_BRS *p_ukeys; // Spline values for scaling
  398. float *p_udr;
  399. float *p_udr_all;
  400. } JOINT_ANIM_GENERATOR;
  401. // bunka pro generovani flare
  402. // generuje se z vybranych vertexu
  403. typedef struct _FLARE_GEN
  404. {
  405. STATIC_LIGHT *p_slight; // svetlo ktere to haze
  406. BOD p; // gen-bod
  407. float start;
  408. dword start_color;
  409. float konec;
  410. dword konec_color;
  411. } FLARE_GEN;
  412. // Decimator plosek
  413. #define HFLAG_HRANA 0x1
  414. // Popis jedne hrany
  415. typedef struct _HRAN
  416. {
  417. int ind1, ind2;
  418. GLMATRIX q;
  419. OBJ_VERTEX bod;
  420. float err;
  421. float err_uhel;
  422. int flag;
  423. BOD face_normal;
  424. } HRAN;
  425. #define HRN_SEGMENT 1000
  426. typedef struct _OBJ_LIST
  427. {
  428. int k;
  429. int o;
  430. EDIT_OBJEKT *p_obj;
  431. } OBJ_LIST;
  432. typedef struct _HRAN_STACK
  433. {
  434. int max_err;
  435. float max_err_flt;
  436. int vaha;
  437. float vaha_flt;
  438. int hrany;
  439. float hrany_flt;
  440. int prah;
  441. float prah_flt;
  442. float stupen;
  443. int vertexu;
  444. int vertexy;
  445. HWND hDlg;
  446. HRAN *p_list;
  447. int listnum;
  448. int listakt;
  449. GLMATRIX *p_mat; // seznam quadrik
  450. int zalnum;
  451. int zalakt;
  452. OBJ_LIST *p_zal;
  453. int flag;
  454. int *p_vmask;
  455. } HRAN_STACK;
  456. typedef struct _K_EDITOR
  457. {
  458. byte jmeno_sceny[100];
  459. GLMATRIX *p_project, *p_word, *p_camera, *p_invcam, // inverzni viev matrix s normalizovanejma vektorama
  460. *p_r_bod;
  461. float *p_vzdal;
  462. float *p_fi;
  463. int wx, wy, wxres, wyres;
  464. EDIT_OKNO viewports[CELKEM_MODU];
  465. int mod; // aktivni okno
  466. UINT vybr_prikaz;
  467. UINT fprikaz;
  468. BOD primka[2];
  469. float skok_x, skok_fi, skok_vzdal;
  470. NASTAVENI_KAMER kam;
  471. KONFIG_MATERIALU km;
  472. KONFIG_OBJEKTU kk;
  473. KONFIG_EDITOR cnf;
  474. KONFIG_DIR dir;
  475. TEXT_DIR tdir;
  476. STATISTIKA_SCENY stat;
  477. BARVY_BODU bar;
  478. RAY_TRACER ray;
  479. KONFIG_ANIMACE ak;
  480. KONFIG_ANIMACE akkam;
  481. KONFIG_ANIMACE akmat;
  482. DEKOVAC deka; // dekovac
  483. ELIMINATOR elm; // eliminator plosek
  484. LISTA_PRVKU lp;
  485. LIGHT_CONFIG lc;
  486. EDIT_JOINT jcf; // konfigurace jointu
  487. FLARE_GEN fgen; // flare-generator
  488. HRAN_STACK ds; // decimacni stack
  489. ZEMNI_MLHA zm; // zemni mlha
  490. JOINT_ANIM_GENERATOR jgen; // joint-generator
  491. B_KONFIG bnf; // berusci konfig
  492. byte kreslit_level; // ma se kreslit level ?
  493. byte kreslit_scenu; // ma se kreslit scena ?
  494. dword svetlost_sceny; //RGBA ambientniho svetla
  495. dword barva_pozadi;
  496. void *p_test;
  497. int cul;
  498. RGB_M barva_grid;
  499. RGB_M barva_vybr_kont;
  500. RGB_M barva_vybr_objekt;
  501. RGB_M barva_vybr_face;
  502. RGB_M barva_neaktivni;
  503. int TimeBase; // cas spusteni programu -> casova zakladna (v milisec)
  504. int TimeEndLastFrame; // cas na konci posledniho framu (v milisec)
  505. int TimeLastFrame; // delka posledniho framu (obracena hodnota je fps)
  506. //int TimePredpoklad; // predpokladana hodnota na konci dalsiho framu
  507. float fps; // fps = 1000/TimeLongLastFrame
  508. int drobic_hloubka;
  509. int lep_obj_1;
  510. int lep_obj_2;
  511. int prvni_kont;
  512. int d_listu_kont;
  513. int prvni_objekt;
  514. int vybr_objekt;
  515. int vybr_objekt_last;
  516. int d_listu;
  517. int vybr_kont;
  518. int vybr_kont_last;
  519. int vybr_face;
  520. int vybr_text;
  521. dword blend_faktor;
  522. byte ctverec;
  523. int x1, y1, x2, y2;
  524. float ctverec_barva[3];
  525. byte linelist;
  526. dword linelist_barva;
  527. byte linelist_num;
  528. ROHF linelist_cara[20];
  529. // staticka svetla pro metodu ray-castingu
  530. int lightnum;
  531. int lightakt;
  532. STATIC_LIGHT light[MAX_EDIT_SVETEL];
  533. // flare placky
  534. int flareakt;
  535. LENS_FLARE flare[MAX_EDIT_SVETEL];
  536. // Dynamicke svetla
  537. int dl_recalc; // flag - prepocitat svetla (neco se posunulo)
  538. int dl_new; // flag - zmenil se pocet svetel (pribylo/ubylo)
  539. int dl_lightnum;
  540. int dl_on; // zapnute prepocty statickych svetel
  541. int dl_akt; // vybrane svetlo
  542. DYN_LIGHT p_dlight[MAX_FLARE_SVETEL];
  543. // Extra dynamicke svetla
  544. int edl_akt;
  545. int edl_recalc; // flag - prepocitat svetla (neco se posunulo)
  546. int edl_new; // flag - zmenil se pocet svetel (pribylo/ubylo)
  547. int edl_lightnum;
  548. EXTRA_DYN_LIGHT p_edlight[MAX_FLARE_SVETEL];
  549. // Kamery
  550. int kamnum; // pocet kamer sceny
  551. int kamakt; // aktivni kamera sceny
  552. KAMERA kamery[MAX_EDIT_KAMER];
  553. /* Enviromentalni prostredi pro level
  554. */
  555. LEVEL_ENVIRONMENT env;
  556. /* Oplzle Mlzne kostky
  557. */
  558. MLZNA_KOSTKA *p_mlha_akt;
  559. MLZNA_KOSTKA *p_mlha;
  560. // zrcadla ve scene
  561. int zdcadlo_akt;
  562. ZDRCADLO_DESC zrcadlo;
  563. COLORREF user_color[16];
  564. int group_param;
  565. int vybr_group;
  566. int groupnum;
  567. I_VERTEX *p_group;
  568. int groupflag; // group flag
  569. int vybr_face_group;
  570. int groupfacenum;
  571. F_VERTEX *p_group_face;
  572. int vybr_dvert;
  573. int dvertnum;
  574. D_VERTEX *p_dvert;
  575. int max_kont;
  576. int kontejneru;
  577. EDIT_KONTEJNER *p_kont[KONT_NUM]; // kontejnery sceny
  578. int kontraynum;
  579. EDIT_KONTEJNER *p_kont_raytracer[KONT_NUM]; // staticke kontejnery sceny
  580. EDIT_MATERIAL *p_mat[MAX_EDIT_MATERIALU]; // materialy
  581. EDIT_TEXT p_text[MAX_EDIT_TEXTUR]; // textury objektu
  582. int polynum; // pocet poly
  583. EDIT_MESH_POLY *p_poly; // seznam poly
  584. EDIT_STINY *p_stiny; // seznam stinicich poly
  585. EDIT_TEXT p_lightmap[MAX_RAY_TEXTUR]; // staticke light-mapy
  586. KD_BUNKA kdtree; // kd strom sceny
  587. EDIT_MATERIAL **p_smat; // material sceny
  588. // keyframe data
  589. float key_time;
  590. // Predpocitane data
  591. float sinus_table[360];
  592. GLMATRIX init_matrix;
  593. // Modifikator matic
  594. int mod_matrix_akt; // modifikacni matice aktivni ?
  595. GLMATRIX mod_matrix; // modifikacni matice ke slozeni
  596. byte berusky_hra[200]; // cesta ke hre
  597. byte berusky_hra_dir[200]; // cesta ke hre
  598. // look-up tabulka pro druhou odmocninu
  599. int p_looksqrt_linear[MAX_LOOK_TABLE * MAX_LOOK_TABLE];
  600. int p_looksqrt_quadratic[MAX_LOOK_TABLE * MAX_LOOK_TABLE];
  601. // Jednorozmerne look-up tabulky
  602. float p_looksqrt_linear_float[MAX_LOOK_TABLE];
  603. float p_looksqrt_quadratic_float[MAX_LOOK_TABLE];
  604. GLMATRIX tmp_matrix;
  605. } K_EDITOR;
  606. extern K_EDITOR cnf, *p_cnf;
  607. int XK;
  608. int YK;
  609. #define KONZOLE_RADKU 5
  610. typedef struct _GAMESLOT
  611. {
  612. byte jmeno[30];
  613. int vzor;
  614. GLMATRIX word;
  615. byte rezerved[10];
  616. } GAMESLOT;
  617. typedef struct _SCENE_STATISTIC
  618. {
  619. int textsize; // velikost textur v byte
  620. int texnum; // pocet textur ve scene
  621. int lightsize; // velikost lightmap
  622. int lightnum; // pocet lightmap
  623. int matnum; // pocet materialu
  624. int matsize; // velikost materialu (B)
  625. int kontnum; // pocet kontejneru
  626. int objnum; // pocet objektu
  627. int kontsize; // velikost kontejneru (B)
  628. int lev_kontnum; // pocet kontejneru
  629. int lev_objnum; // pocet objektu
  630. int lev_kontsize; // velikost kontejneru (B)
  631. int polynum; // pocet poly
  632. int polyface; // pocet facu v poly
  633. int vidmemuse; // pouzito videopameti (primary surf + back buffers + z-buffer)
  634. int totmem;
  635. int freemem;
  636. int facu;
  637. int bodu;
  638. } SCENE_STATISTIC;
  639. #define oe_smaz_malou_konzoli(p_con) \
  640. smaz_surf_rec(p_con,akt_konzole_pozadi,\
  641. 0,YK*VYSKA_FONTU,XRES-1,YRES-1);
  642. #define prikaz(prikaz)\
  643. {\
  644. system_kurzor = 1;\
  645. prikaz;\
  646. system_kurzor = 0;\
  647. }\
  648. #define n_objekt(kont,obj) { if(!p_cnf->p_kont[kont] || !p_cnf->p_kont[kont]->p_obj[obj]) { ddw("Spatny objekt file %s line %d",__FILE__,__LINE__); return; }}
  649. #define n_kont(kont) { if(!p_cnf->p_kont[kont]) { ddw("Spatny kontejner -> file %s line %d",__FILE__,__LINE__); return;} }
  650. #define n_kont_ret(kont) { if(!p_cnf->p_kont[kont]) { return;} }
  651. #define n_objekt_mrizka(kont,obj) { if(!p_cnf->p_kont[kont] || !p_cnf->p_kont[kont]->p_obj[obj] || !p_cnf->p_kont[kont]->p_mt) { ddw("Spatny objekt file %s line %d",__FILE__,__LINE__); return;} }
  652. #define n_kont_mrizka(kont) { if(!p_cnf->p_kont[kont] || !p_cnf->p_kont[kont]->p_mt) { ddw("Spatny kontejner file %s line %d",__FILE__,__LINE__); return;} }
  653. #define n_svetlo(kont,obj) { if(!p_cnf->p_kont[kont] || !p_cnf->p_kont[kont]->p_obj[obj] || !p_cnf->p_kont[kont]->p_obj[obj]->p_light) { ddw("Spatne svetlo file %s line %d",__FILE__,__LINE__); return; }}
  654. #define n_editlock(kont) { if(p_cnf->p_kont[kont]->editlock) return;}
  655. #define n_je_editlock(kont) { if(!p_cnf->p_kont[kont]->editlock) return;}
  656. #define X_LOAD 100
  657. #define Y_LOAD 450
  658. #define X_RADKU 50
  659. #define Y_RADKU 6
  660. void oe_cekej_na_klavesu(K_EDITOR * p_cnf);
  661. void oe_cekej_na_mys(K_EDITOR * p_cnf);
  662. float oe_stredni_vzdalenost_ve_scene(K_EDITOR * p_cnf);
  663. float oe_nulova_vzdalenost_ve_scene(K_EDITOR * p_cnf);
  664. float oe_objektova_vzdalenost_ve_scene(K_EDITOR * p_cnf);
  665. void oe_konfiguruj_editor(K_EDITOR * p_cnf, byte * p_file, int renderovac);
  666. void oe_uloz_konfiguraci(K_EDITOR * p_cnf, byte * p_dir, byte * p_file,
  667. byte dir);
  668. void oe_ini_mod(K_EDITOR * p_cnf, int mod, int styl);
  669. void oe_nahod_mod(K_EDITOR * p_cnf, int mod);
  670. void oe_klavesy_v_game_modu(K_EDITOR * p_cnf);
  671. void oe_klavesy_zmena_modu(K_EDITOR * p_cnf);
  672. int oe_dotaz_konzole_char(byte * p_dotaz, int radek, byte * p_ret);
  673. int oe_dotaz_konzole_int(byte * p_dotaz, int radek, int *p_cislo,
  674. int aktualni);
  675. //int oe_hlaska_konzole(LPDIRECTDRAWSURFACE7 p_con, byte *p_hlaska,int radek);
  676. void oe_klavesy_load_save(K_EDITOR * p_cnf);
  677. void oe_prikaz_posun_sceny(K_EDITOR * p_cnf);
  678. void oe_prikaz_posun_sceny_xz(K_EDITOR * p_cnf);
  679. void oe_prikaz_rotace_sceny(K_EDITOR * p_cnf, int mod);
  680. void oe_prikaz_no_off_popisy_vertexu(K_EDITOR * p_cnf);
  681. void oe_vybrani_ctverce(K_EDITOR * p_cnf, dword barva);
  682. void oe_posun_ctverce(K_EDITOR * p_cnf);
  683. void oe_posun_strany_ctverce(K_EDITOR * p_cnf);
  684. void oe_vybrani_konstantniho_ctverce(K_EDITOR * p_cnf);
  685. void oe_klavesy_editace_facu(K_EDITOR * p_cnf);
  686. void oe_klavesy_editace_svetel(K_EDITOR * p_cnf);
  687. void oe_pridej_dvertex(K_EDITOR * p_cnf, BOD * p, int k, int o, int f,
  688. byte pozice, byte d2);
  689. void oe_pridej_texture_tag_3d(K_EDITOR * p_cnf, int cislo);
  690. void oe_pridej_cary_texture_tag(K_EDITOR * p_cnf);
  691. void oe_pridej_texture_tag_2d(K_EDITOR * p_cnf, int cislo, float x, float y);
  692. void oe_zrus_texture_tagy(K_EDITOR * p_cnf);
  693. void interpolace_primky(BOD * t1, BOD * t2, BOD * t, BOD * p);
  694. void interpolace_textury(BOD * t1, BOD * t2, BOD * t3, BOD * t4, BOD * t,
  695. BOD * p);
  696. void oe_transformuj_2d_texture_tagy(K_EDITOR * p_cnf, int k, int o,
  697. byte textura);
  698. void oe_transformuj_2d_texture_tagy_body(K_EDITOR * p_cnf, byte textura);
  699. void pridej_objekt_normalove_vektory(K_EDITOR * p_cnf);
  700. void oe_prikaz_vyber_texture_tag_ctverec(K_EDITOR * p_cnf);
  701. void oe_posun_vsechny_texture_tag(K_EDITOR * p_cnf);
  702. void oe_posun_nejblizsi_texture_tag(K_EDITOR * p_cnf);
  703. void oe_klavesy_editace_stinu(K_EDITOR * p_cnf);
  704. void oe_prikaz_test(K_EDITOR * p_cnf);
  705. void oe_prikaz_prepsat(K_EDITOR * p_cnf);
  706. void oe_test(K_EDITOR * p_cnf);
  707. void oe_klavesy_test(K_EDITOR * p_cnf);
  708. void oe_klavesy_editace_kontejneru(K_EDITOR * p_cnf);
  709. void oe_klavesy_editace_objektu(K_EDITOR * p_cnf);
  710. void oe_prikaz_rychla_rotace(K_EDITOR * p_cnf, int t);
  711. void oe_prikaz_rychly_mirror(K_EDITOR * p_cnf, int t, int mu, int mv);
  712. void oe_klavesy_textury(K_EDITOR * p_cnf);
  713. void oe_klavesy_editace_vertexu(K_EDITOR * p_cnf);
  714. void oe_prikaz_zmena_textury_draty(K_EDITOR * p_cnf);
  715. void oe_prikaz_zmena_textury_draty2(K_EDITOR * p_cnf);
  716. void oe_prikaz_konzole_on_off(K_EDITOR * p_cnf);
  717. void oe_prikaz_list_objekty(K_EDITOR * p_cnf, int smer);
  718. void oe_prikaz_list_kontejnery(K_EDITOR * p_cnf, int smer);
  719. void oe_prikaz_zmena_cul(K_EDITOR * p_cnf);
  720. void oe_prikaz_selekce_objektu(K_EDITOR * p_cnf);
  721. void oe_prikaz_selekce_kontejneru(K_EDITOR * p_cnf);
  722. void oe_prikaz_zmena_kresleni_kontejneru(K_EDITOR * p_cnf);
  723. void oe_prikaz_zmena_kresleni_objekt(K_EDITOR * p_cnf);
  724. void oe_prikaz_zmena_kresleni_kamer(K_EDITOR * p_cnf);
  725. void oe_prikaz_zmena_origin(K_EDITOR * p_cnf);
  726. void oe_prikaz_smazani_konzole(K_EDITOR * p_cnf);
  727. void oe_prikaz_nitkovy_kriz(K_EDITOR * p_cnf);
  728. void oe_prikaz_zmena_konzole_objekty(K_EDITOR * p_cnf);
  729. void oe_klavesy_konfigurace(K_EDITOR * p_cnf);
  730. void oe_klavesy_vyroba_objektu(K_EDITOR * p_cnf);
  731. dword oe_vrat_body_ve_scene(K_EDITOR * p_cnf, int x1, int y1, int x2, int y2,
  732. I_VERTEX * p_index);
  733. int oe_nejblizsi_bod_ve_scene(K_EDITOR * p_cnf, BOD * p_bod, int *p_k,
  734. int *p_o, int *p_f);
  735. int oe_prikaz_vyber_mysi_mesh(K_EDITOR * p_cnf);
  736. void oe_prikaz_prirad_material_objekt(K_EDITOR * p_cnf);
  737. void oe_prikaz_prirad_material_kontejner(K_EDITOR * p_cnf);
  738. void oe_prikaz_kapatko(K_EDITOR * p_cnf);
  739. void oe_mys_editace(K_EDITOR * p_cnf);
  740. void oe_prikaz_edituj_rozlozeni_textury(K_EDITOR * p_cnf);
  741. void oe_get_souradnice_mysi_2d(K_EDITOR * p_cnf, BOD * p_bod);
  742. void oe_vyber_primku(K_EDITOR * p_cnf);
  743. void oe_test_int(K_EDITOR * p_cnf);
  744. void oe_klavesy_object_editor(K_EDITOR * p_cnf);
  745. void go_object_editor(char *p_edit_kont, char *p_text_dir);
  746. void oe_updatuj_scenu_stat(K_EDITOR * p_cnf);
  747. void oe_poly_to_scena(K_EDITOR * p_cnf);
  748. void oe_konec(K_EDITOR * p_cnf);
  749. void oe_updatuj_scenu_flag(K_EDITOR * p_cnf);
  750. void oe_updatuj_statistiku_sceny(K_EDITOR * p_cnf, SCENE_STATISTIC * p_stat);
  751. void oe_updatuj_fps(K_EDITOR * p_cnf);
  752. void oe_objekty_nacucni_z_materialu(K_EDITOR * p_cnf);
  753. void oe_transformuj_scenu_staticke(K_EDITOR * p_cnf);
  754. void oe_prikaz_vypis_face(K_EDITOR * p_cnf);
  755. void oe_prikaz_posun_scenu(K_EDITOR * p_cnf);
  756. void oe_prikaz_scena_zoom(int koeficient);
  757. int intersect_kont_fast(EDIT_KONTEJNER * p_kont, BOD * p_orig, BOD * p_dir);
  758. int intersect_kont(EDIT_KONTEJNER * p_kont, BOD * p_orig, BOD * p_dir,
  759. int *p_o, int *p_f, float *p_t);
  760. // sledovani paprsku
  761. int oe_intersect_scena(K_EDITOR * p_cnf, BOD * p_orig, BOD * p_dir,
  762. float *p_t, int *p_k, int *p_o, int *p_f);
  763. //void oe_scena_to_poly(K_EDITOR *p_cnf);
  764. //int oe_scena_to_poly(K_EDITOR *p_cnf, EDIT_MESH_POLY **p_list);
  765. //void oe_poly_to_scena(K_EDITOR *p_cnf);
  766. void oe_prikaz_narovnej_kameru(K_EDITOR * p_cnf);
  767. void oe_wrlog(K_EDITOR * p_cnf, byte * p_text, ...);
  768. void oe_wrlog_matrix(K_EDITOR * p_cnf, GLMATRIX * p_mat, byte * p_text, ...);
  769. void oe_scena_to_game(K_EDITOR * p_cnf);
  770. void oe_zalohuj_scenu(K_EDITOR * p_cnf);
  771. void oe_zalohuj_scenu_zpet(K_EDITOR * p_cnf);
  772. void oe_kamera_to_view(K_EDITOR * p_cnf, int k);
  773. int oe_prikaz_vyber_mysi_bod(K_EDITOR * p_cnf, BOD * p_p);
  774. int oe_cti_mod(K_EDITOR * p_cnf);
  775. void oe_vyber_material(K_EDITOR * p_cnf);
  776. char *ftoa(float cislo, char *p_string, int des);
  777. void oe_prikaz_scale_sceny(K_EDITOR * p_cnf);
  778. int oe_scena_to_raykont(K_EDITOR * p_cnf, EDIT_KONTEJNER ** p_ray, int max);
  779. int oe_je_group_kontejner(K_EDITOR * p_cnf);
  780. int oe_je_group_objekt(K_EDITOR * p_cnf);
  781. int oe_je_group_face(K_EDITOR * p_cnf);
  782. void oe_vypis_poly(K_EDITOR * p_cnf);
  783. void oe_zrus_vyber_kosti(K_EDITOR * p_cnf, EDIT_OBJEKT * p_obj);
  784. void oe_obb_calc_scena(K_EDITOR * p_cnf);
  785. int oe_prikaz_vyber_mysi_kosti(K_EDITOR * p_cnf);
  786. int go_renderovac_renderuj(char *p_file, char *p_out);
  787. // list konteneru
  788. __inline void oe_klist_reset(int *k)
  789. {
  790. *k = -1;
  791. }
  792. __inline EDIT_KONTEJNER *oe_klist_next_maska(K_EDITOR * p_cnf, int *k,
  793. dword maska, dword vysledek)
  794. {
  795. EDIT_KONTEJNER *p_kont;
  796. while ((*k) + 1 < p_cnf->max_kont) {
  797. p_kont = p_cnf->p_kont[++(*k)];
  798. if (p_kont && ((p_kont->kflag & maska) == vysledek))
  799. return (p_kont);
  800. }
  801. return (NULL);
  802. }
  803. __inline EDIT_KONTEJNER *oe_klist_next(K_EDITOR * p_cnf, int *k)
  804. {
  805. EDIT_KONTEJNER *p_kont;
  806. while ((*k) + 1 < p_cnf->max_kont) {
  807. p_kont = p_cnf->p_kont[++(*k)];
  808. if (p_kont)
  809. return (p_kont);
  810. }
  811. return (NULL);
  812. }