m1_info.cc 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. /********************************************************************** <BR>
  2. This file is part of Crack dot Com's free source code release of
  3. Golgotha. <a href="http://www.crack.com/golgotha_release"> <BR> for
  4. information about compiling & licensing issues visit this URL</a>
  5. <PRE> If that doesn't help, contact Jonathan Clark at
  6. golgotha_source@usa.net (Subject should have "GOLG" in it)
  7. ***********************************************************************/
  8. #include "m1_info.hh"
  9. #include "lisp/li_types.hh"
  10. #include "file/file.hh"
  11. #include "make_tlist.hh"
  12. #include "gui/text_scroll.hh"
  13. #include "r1_api.hh"
  14. #include "tmanage.hh"
  15. #include "max_object.hh"
  16. #include "tupdate.hh"
  17. #include "st_edit.hh"
  18. #include "render.hh"
  19. m1_info_struct m1_info;
  20. extern i4_text_scroll_window_class *m1_warn_window;
  21. const i4_const_str m1_info_struct::current_filename()
  22. {
  23. if (m1_info.models.size()==0)
  24. return i4_const_str("");
  25. else
  26. return *m1_info.models[m1_info.current_model];
  27. }
  28. void m1_info_struct::set_current_filename(const i4_const_str &str)
  29. {
  30. if (m1_info.models.size()==0)
  31. {
  32. m1_info.models.add();
  33. m1_info.current_model=0;
  34. }
  35. else
  36. delete m1_info.models[m1_info.current_model];
  37. m1_info.models[m1_info.current_model]=new i4_str(str);
  38. }
  39. void m1_info_struct::get_texture_list(i4_array<i4_str *> &array, i4_bool for_all)
  40. {
  41. int i;
  42. if (for_all)
  43. {
  44. // add any textures from res files
  45. if (res_files.size())
  46. {
  47. i4_file_class *fp[500];
  48. for (i=0; i<res_files.size(); i++)
  49. fp[i]=i4_open(*res_files[i]);
  50. int tmp_int;
  51. i4_array<i4_str *> tmp_array(0,32);
  52. g1_get_load_info(fp, res_files.size(), array, tmp_array, tmp_int, i4_T);
  53. for (i=0; i<tmp_array.size(); i++)
  54. delete tmp_array[i];
  55. }
  56. for (i=0; i<textures.size(); i++)
  57. array.add(new i4_str(*textures[i]));
  58. for (i=0; i<models.size(); i++)
  59. g1_make_texture_list_for_model(*models[i], array);
  60. }
  61. else
  62. g1_make_texture_list_for_model(*models[current_model], array);
  63. }
  64. void m1_info_struct::init(int argc, i4_const_str *argv)
  65. {
  66. for (int i=1; i<argc; i++)
  67. {
  68. if (argv[i]=="-update")
  69. update_mode=1;
  70. else
  71. {
  72. i4_filename_struct fn;
  73. i4_split_path(argv[i],fn);
  74. if (fn.extension)
  75. {
  76. if (strcmp(fn.extension,"scm")==0)
  77. res_files.add(new i4_str(argv[i]));
  78. else if (strcmp(fn.extension,"tga")==0)
  79. textures.add(new i4_str(argv[i]));
  80. else if (strcmp(fn.extension, "gmod")==0 || strcmp(fn.extension,"crk")==0)
  81. models.add(new i4_str(argv[i]));
  82. }
  83. }
  84. }
  85. }
  86. void m1_info_struct::uninit()
  87. {
  88. int i;
  89. for (i=0; i<res_files.size(); i++) delete res_files[i];
  90. res_files.uninit();
  91. for (i=0; i<textures.size(); i++) delete textures[i];
  92. textures.uninit();
  93. for (i=0; i<models.size(); i++) delete models[i];
  94. models.uninit();
  95. }
  96. void m1_info_struct::texture_list_changed()
  97. {
  98. if (update_mode)
  99. return ;
  100. r1_texture_manager_class *tman=r_api->get_tmanager();
  101. if (!obj)
  102. return;
  103. if (tman)
  104. {
  105. int i;
  106. tman->reset();
  107. textures_loaded=i4_F;
  108. i4_status_class *stat=i4_create_status("Updating textures");
  109. int nq=m1_info.obj->num_quad;
  110. for (i=0; i<nq; i++)
  111. m1_update_texture(*m1_info.obj->texture_names[i], i4_F, stat,
  112. i/(float)nq, (i+1)/(float)nq);
  113. if (stat) delete stat;
  114. for (i=0; i<m1_info.obj->num_quad; i++)
  115. m1_info.obj->quad[i].material_ref=tman->register_texture(*m1_info.obj->texture_names[i],
  116. m1_info.current_filename());
  117. m1_st_edit->edit_poly_changed();
  118. m1_render_window->request_redraw(i4_F);
  119. }
  120. }