2 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
3 SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
4 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
5 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
6 IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
7 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
8 FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
9 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
10 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
11 COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
16 * object selection stuff.
20 // Num_robot_types --> N_polygon_models
21 // Cur_robot_type --> Cur_robot_type
22 // Texture[Cur_robot_type]->bitmap ---> robot_bms[robot_bm_nums[ Cur_robot_type ] ]
33 #include "editor.h" // For TMAP_CURBOX??????
34 #include "gr.h" // For canves, font stuff
35 #include "ui.h" // For UI_GADGET stuff
36 #include "mono.h" // For debugging
40 #define OBJS_PER_PAGE 8
42 static UI_GADGET_USERBOX * ObjBox[OBJS_PER_PAGE];
43 static UI_GADGET_USERBOX * ObjCurrent;
45 static int ObjectPage = 0;
47 //static char Description[8][20] = { "Pig", "Star", "Little\nJosh", "Big\nJosh", "Flying\nPig", "Flying\nStar",
48 //"Little\nFlying\nJosh", "Big\nFlying\nJosh" };
50 //static grs_canvas * ObjnameCanvas;
51 //static char object_filename[13];
53 //static void objpage_print_name( char name[13] ) {
56 // gr_set_current_canvas( ObjnameCanvas );
57 // gr_get_string_size( name, &w, &h, &aw );
58 // gr_string( 0, 0, name );
59 // //gr_set_fontcolor( CBLACK, CWHITE );
62 //static void objpage_display_name( char *format, ... ) {
65 // va_start(ap, format);
66 // vsprintf(object_filename, format, ap);
69 // objpage_print_name(object_filename);
79 vms_angvec objpage_view_orient;
80 fix objpage_view_dist;
82 //this is bad to have the extern, but this snapshot stuff is special
83 extern int polyobj_lighting;
87 void draw_object_picture(int id, vms_angvec *orient_angles, int type)
90 if (id >= Num_object_subtypes)
96 PIGGY_PAGE_IN(Vclip[Hostage_vclip_num[id]].frames[0]);
97 gr_bitmap(0,0,&GameBitmaps[Vclip[Hostage_vclip_num[id]].frames[0].index]);
101 if ( Powerup_info[id].vclip_num > -1 ) {
102 PIGGY_PAGE_IN(Vclip[Powerup_info[id].vclip_num].frames[0]);
103 gr_bitmap(0,0,&GameBitmaps[Vclip[Powerup_info[id].vclip_num].frames[0].index]);
108 draw_model_picture(Player_ship->model_num,orient_angles); // Draw a poly model below
112 draw_model_picture(Robot_info[id].model_num,orient_angles); // Draw a poly model below
117 draw_model_picture(Reactors[id].model_num, orient_angles);
120 //Int3(); // Invalid type!!!
126 void redraw_current_object()
131 gr_set_current_canvas(ObjCurrent->canvas);
132 draw_object_picture(Cur_object_id, &objpage_view_orient, Cur_object_type);
133 gr_set_current_canvas(cc);
136 void gr_label_box( int i)
139 gr_clear_canvas(BM_XRGB(0,0,0));
140 draw_object_picture(i, &objpage_view_orient, Cur_object_type);
143 // sprintf( s, " %d ", i );
144 // gr_clear_canvas( BM_XRGB(0,15,0) );
145 // gr_set_fontcolor( CWHITE, BM_XRGB(0,15,0) );
146 // ui_string_centered( grd_curcanv->cv_bitmap.bm_w/2, grd_curcanv->cv_bitmap.bm_h/2, Description[i] );
149 int objpage_goto_first()
154 for (i=0; i<OBJS_PER_PAGE; i++ ) {
155 gr_set_current_canvas(ObjBox[i]->canvas);
156 if (i+ObjectPage*OBJS_PER_PAGE < Num_object_subtypes ) {
157 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ i+ObjectPage*OBJS_PER_PAGE ] ] );
158 gr_label_box(i+ObjectPage*OBJS_PER_PAGE );
160 gr_clear_canvas( CGREY );
166 int objpage_goto_last()
170 ObjectPage=(Num_object_subtypes)/OBJS_PER_PAGE;
171 for (i=0; i<OBJS_PER_PAGE; i++ )
173 gr_set_current_canvas(ObjBox[i]->canvas);
174 if (i+ObjectPage*OBJS_PER_PAGE < Num_object_subtypes )
176 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ i+ObjectPage*OBJS_PER_PAGE ] ] );
177 gr_label_box(i+ObjectPage*OBJS_PER_PAGE );
179 gr_clear_canvas( CGREY );
185 static int objpage_goto_prev()
188 if (ObjectPage > 0) {
190 for (i=0; i<OBJS_PER_PAGE; i++ )
192 gr_set_current_canvas(ObjBox[i]->canvas);
193 if (i+ObjectPage*OBJS_PER_PAGE < Num_object_subtypes)
195 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ i+ObjectPage*OBJS_PER_PAGE ] ] );
196 gr_label_box(i+ObjectPage*OBJS_PER_PAGE );
198 gr_clear_canvas( CGREY );
205 static int objpage_goto_next()
208 if ((ObjectPage+1)*OBJS_PER_PAGE < Num_object_subtypes) {
210 for (i=0; i<OBJS_PER_PAGE; i++ )
212 gr_set_current_canvas(ObjBox[i]->canvas);
213 if (i+ObjectPage*OBJS_PER_PAGE < Num_object_subtypes)
215 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ i+ObjectPage*OBJS_PER_PAGE ] ] );
216 gr_label_box(i+ObjectPage*OBJS_PER_PAGE );
218 gr_clear_canvas( CGREY );
225 int objpage_grab_current(int n)
229 if ((n < 0) || (n >= Num_object_subtypes)) return 0;
231 ObjectPage = n / OBJS_PER_PAGE;
233 if (ObjectPage*OBJS_PER_PAGE < Num_object_subtypes) {
234 for (i=0; i<OBJS_PER_PAGE; i++ )
236 gr_set_current_canvas(ObjBox[i]->canvas);
237 if (i + ObjectPage*OBJS_PER_PAGE < Num_object_subtypes)
239 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ i+ObjectPage*OBJS_PER_PAGE ] ] );
240 gr_label_box(i+ObjectPage*OBJS_PER_PAGE );
242 gr_clear_canvas( CGREY );
248 gr_set_current_canvas(ObjCurrent->canvas);
249 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ Cur_robot_type ] ] );
250 gr_label_box(Cur_object_id);
252 //objpage_display_name( Texture[Cur_robot_type]->filename );
257 int objpage_goto_next_object()
259 // there should be a pop-up menu for this
260 switch (Cur_object_type)
263 Cur_object_type = OBJ_HOSTAGE;
264 Num_object_subtypes = 1;
268 Cur_object_type = OBJ_PLAYER;
269 Num_object_subtypes = 1; // can have anarchy/coop, but this is handled automatically
273 Cur_object_type = OBJ_POWERUP;
274 Num_object_subtypes = N_powerup_types;
278 Cur_object_type = OBJ_CNTRLCEN;
279 Num_object_subtypes = Num_reactors;
284 Cur_object_type = OBJ_ROBOT;
285 Num_object_subtypes = N_robot_types;
289 objpage_grab_current(0);
295 #define OBJBOX_X (TMAPBOX_X) //location of first one
296 #define OBJBOX_Y (OBJCURBOX_Y - 24 )
300 #define DELTA_ANG 0x800
302 int objpage_increase_pitch()
304 objpage_view_orient.p += DELTA_ANG;
305 redraw_current_object();
309 int objpage_decrease_pitch()
311 objpage_view_orient.p -= DELTA_ANG;
312 redraw_current_object();
316 int objpage_increase_heading()
318 objpage_view_orient.h += DELTA_ANG;
319 redraw_current_object();
323 int objpage_decrease_heading()
325 objpage_view_orient.h -= DELTA_ANG;
326 redraw_current_object();
330 int objpage_increase_bank()
332 objpage_view_orient.b += DELTA_ANG;
333 redraw_current_object();
337 int objpage_decrease_bank()
339 objpage_view_orient.b -= DELTA_ANG;
340 redraw_current_object();
344 int objpage_increase_z()
346 objpage_view_dist -= 0x8000;
347 redraw_current_object();
351 int objpage_decrease_z()
353 objpage_view_dist += 0x8000;
354 redraw_current_object();
358 int objpage_reset_orient()
360 objpage_view_orient.p = 0;
361 objpage_view_orient.b = 0;
362 objpage_view_orient.h = -0x8000;
363 //objpage_view_dist = DEFAULT_VIEW_DIST;
364 redraw_current_object();
369 // INIT TEXTURE STUFF
371 void objpage_init( UI_WINDOW *win )
375 //Num_total_object_types = N_polygon_models + N_hostage_types + N_powerup_types;
376 //Assert (N_polygon_models < MAX_POLYGON_MODELS);
377 //Assert (Num_total_object_types < MAX_OBJTYPE );
378 //Assert (N_hostage_types < MAX_HOSTAGE_TYPES );
379 //Assert (N_powerup_types < MAX_POWERUP_TYPES );
380 // Assert (N_robot_types < MAX_ROBOTS);
382 ui_add_gadget_button( win, OBJCURBOX_X + 00, OBJCURBOX_Y - 27, 30, 20, "<<", objpage_goto_prev );
383 ui_add_gadget_button( win, OBJCURBOX_X + 32, OBJCURBOX_Y - 27, 30, 20, ">>", objpage_goto_next );
385 ui_add_gadget_button( win, OBJCURBOX_X + 00, OBJCURBOX_Y - 54, 30, 20, "B", objpage_goto_first );
386 ui_add_gadget_button( win, OBJCURBOX_X + 32, OBJCURBOX_Y - 54, 30, 20, "E", objpage_goto_last );
388 ui_add_gadget_button( win, OBJCURBOX_X + 25, OBJCURBOX_Y + 62, 22, 13, "P-", objpage_decrease_pitch );
389 ui_add_gadget_button( win, OBJCURBOX_X + 25, OBJCURBOX_Y + 90, 22, 13, "P+", objpage_increase_pitch );
390 ui_add_gadget_button( win, OBJCURBOX_X + 00, OBJCURBOX_Y + 90, 22, 13, "B-", objpage_decrease_bank );
391 ui_add_gadget_button( win, OBJCURBOX_X + 50, OBJCURBOX_Y + 90, 22, 13, "B+", objpage_increase_bank );
392 ui_add_gadget_button( win, OBJCURBOX_X + 00, OBJCURBOX_Y + 76, 22, 13, "H-", objpage_decrease_heading );
393 ui_add_gadget_button( win, OBJCURBOX_X + 50, OBJCURBOX_Y + 76, 22, 13, "H+", objpage_increase_heading );
394 ui_add_gadget_button( win, OBJCURBOX_X + 00, OBJCURBOX_Y + 62, 22, 13, "Z+", objpage_increase_z );
395 ui_add_gadget_button( win, OBJCURBOX_X + 50, OBJCURBOX_Y + 62, 22, 13, "Z-", objpage_decrease_z );
396 ui_add_gadget_button( win, OBJCURBOX_X + 25, OBJCURBOX_Y + 76, 22, 13, "R", objpage_reset_orient );
398 for (i=0;i<OBJS_PER_PAGE;i++)
399 ObjBox[i] = ui_add_gadget_userbox( win, OBJBOX_X + (i/2)*(2+OBJBOX_W), OBJBOX_Y + (i%2)*(2+OBJBOX_H), OBJBOX_W, OBJBOX_H);
401 ObjCurrent = ui_add_gadget_userbox( win, OBJCURBOX_X, OBJCURBOX_Y-5, 64, 64 );
403 objpage_reset_orient();
405 for (i=0; i<OBJS_PER_PAGE; i++ )
407 gr_set_current_canvas(ObjBox[i]->canvas);
408 if (i+ObjectPage*OBJS_PER_PAGE < Num_object_subtypes)
410 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ i+ObjectPage*OBJS_PER_PAGE ] ] );
411 gr_label_box(i+ObjectPage*OBJS_PER_PAGE );
413 gr_clear_canvas( CGREY );
417 // Don't reset robot_type when we return to editor.
418 // Cur_robot_type = ObjectPage*OBJS_PER_PAGE;
419 gr_set_current_canvas(ObjCurrent->canvas);
420 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ Cur_robot_type ] ] );
421 gr_label_box(Cur_object_id);
423 //ObjnameCanvas = gr_create_sub_canvas(&grd_curscreen->sc_canvas, OBJCURBOX_X , OBJCURBOX_Y + OBJBOX_H + 10, 100, 20);
424 //gr_set_current_canvas( ObjnameCanvas );
425 //gr_set_curfont( ui_small_font );
426 //gr_set_fontcolor( CBLACK, CWHITE );
427 //objpage_display_name( Texture[Cur_robot_type]->filename );
433 //gr_free_sub_canvas(ObjnameCanvas);
443 for (i=0; i<OBJS_PER_PAGE; i++ )
445 if (ObjBox[i]->b1_clicked && (i+ObjectPage*OBJS_PER_PAGE < Num_object_subtypes))
447 Cur_object_id = i+ObjectPage*OBJS_PER_PAGE;
448 gr_set_current_canvas(ObjCurrent->canvas);
449 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ Cur_robot_type ] ] );
450 gr_label_box(Cur_object_id);
451 //objpage_display_name( Texture[Cur_robot_type]->filename );