1 /* $Id: objpage.c,v 1.2 2004-12-19 14:52:48 btb Exp $ */
3 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
4 SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
5 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
6 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
7 IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
8 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
9 FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
10 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
11 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
12 COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
17 * object selection stuff.
24 static char rcsid[] = "$Id: objpage.c,v 1.2 2004-12-19 14:52:48 btb Exp $";
27 // Num_robot_types --> N_polygon_models
28 // Cur_robot_type --> Cur_robot_type
29 // Texture[Cur_robot_type]->bitmap ---> robot_bms[robot_bm_nums[ Cur_robot_type ] ]
36 #include "screens.h" // For GAME_SCREEN?????
37 #include "editor.h" // For TMAP_CURBOX??????
38 #include "gr.h" // For canves, font stuff
39 #include "ui.h" // For UI_GADGET stuff
40 #include "object.h" // For robot_bms
41 #include "mono.h" // For debugging
50 #define OBJS_PER_PAGE 8
52 static UI_GADGET_USERBOX * ObjBox[OBJS_PER_PAGE];
53 static UI_GADGET_USERBOX * ObjCurrent;
55 static int ObjectPage = 0;
57 //static char Description[8][20] = { "Pig", "Star", "Little\nJosh", "Big\nJosh", "Flying\nPig", "Flying\nStar",
58 //"Little\nFlying\nJosh", "Big\nFlying\nJosh" };
60 //static grs_canvas * ObjnameCanvas;
61 //static char object_filename[13];
63 //static void objpage_print_name( char name[13] ) {
66 // gr_set_current_canvas( ObjnameCanvas );
67 // gr_get_string_size( name, &w, &h, &aw );
68 // gr_string( 0, 0, name );
69 // //gr_set_fontcolor( CBLACK, CWHITE );
72 //static void objpage_display_name( char *format, ... ) {
75 // va_start(ap, format);
76 // vsprintf(object_filename, format, ap);
79 // objpage_print_name(object_filename);
91 vms_angvec objpage_view_orient;
92 fix objpage_view_dist;
94 //this is bad to have the extern, but this snapshot stuff is special
95 extern int polyobj_lighting;
99 // Type is optional. If you pass -1, type is determined, else type is used, and id is not xlated through ObjId.
100 void draw_robot_picture(int id, vms_angvec *orient_angles, int type)
103 if (id >= Num_total_object_types)
107 type = ObjType[id]; // Find the object type, given an object id.
108 id = ObjId[id]; // Translate to sub-id.
114 PIGGY_PAGE_IN(Vclip[Hostage_vclip_num[id]].frames[0]);
115 gr_bitmap(0,0,&GameBitmaps[Vclip[Hostage_vclip_num[id]].frames[0].index]);
119 if ( Powerup_info[id].vclip_num > -1 ) {
120 PIGGY_PAGE_IN(Vclip[Powerup_info[id].vclip_num].frames[0]);
121 gr_bitmap(0,0,&GameBitmaps[Vclip[Powerup_info[id].vclip_num].frames[0].index]);
126 draw_model_picture(Player_ship->model_num,orient_angles); // Draw a poly model below
130 draw_model_picture(Robot_info[id].model_num,orient_angles); // Draw a poly model below
133 case OL_CONTROL_CENTER:
135 draw_model_picture(id,orient_angles);
138 //Int3(); // Invalid type!!!
144 void redraw_current_object()
149 gr_set_current_canvas(ObjCurrent->canvas);
150 draw_robot_picture(Cur_robot_type,&objpage_view_orient, -1);
151 gr_set_current_canvas(cc);
154 void gr_label_box( int i)
157 gr_clear_canvas(BM_XRGB(0,0,0));
158 draw_robot_picture(i,&objpage_view_orient, -1);
161 // sprintf( s, " %d ", i );
162 // gr_clear_canvas( BM_XRGB(0,15,0) );
163 // gr_set_fontcolor( CWHITE, BM_XRGB(0,15,0) );
164 // ui_string_centered( grd_curcanv->cv_bitmap.bm_w/2, grd_curcanv->cv_bitmap.bm_h/2, Description[i] );
167 int objpage_goto_first()
172 for (i=0; i<OBJS_PER_PAGE; i++ ) {
173 gr_set_current_canvas(ObjBox[i]->canvas);
174 if (i+ObjectPage*OBJS_PER_PAGE < Num_total_object_types ) {
175 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ i+ObjectPage*OBJS_PER_PAGE ] ] );
176 gr_label_box(i+ObjectPage*OBJS_PER_PAGE );
178 gr_clear_canvas( CGREY );
184 int objpage_goto_last()
188 ObjectPage=(Num_total_object_types)/OBJS_PER_PAGE;
189 for (i=0; i<OBJS_PER_PAGE; i++ )
191 gr_set_current_canvas(ObjBox[i]->canvas);
192 if (i+ObjectPage*OBJS_PER_PAGE < Num_total_object_types )
194 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ i+ObjectPage*OBJS_PER_PAGE ] ] );
195 gr_label_box(i+ObjectPage*OBJS_PER_PAGE );
197 gr_clear_canvas( CGREY );
203 static int objpage_goto_prev()
206 if (ObjectPage > 0) {
208 for (i=0; i<OBJS_PER_PAGE; i++ )
210 gr_set_current_canvas(ObjBox[i]->canvas);
211 if (i+ObjectPage*OBJS_PER_PAGE < Num_total_object_types)
213 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ i+ObjectPage*OBJS_PER_PAGE ] ] );
214 gr_label_box(i+ObjectPage*OBJS_PER_PAGE );
216 gr_clear_canvas( CGREY );
223 static int objpage_goto_next()
226 if ((ObjectPage+1)*OBJS_PER_PAGE < Num_total_object_types) {
228 for (i=0; i<OBJS_PER_PAGE; i++ )
230 gr_set_current_canvas(ObjBox[i]->canvas);
231 if (i+ObjectPage*OBJS_PER_PAGE < Num_total_object_types)
233 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ i+ObjectPage*OBJS_PER_PAGE ] ] );
234 gr_label_box(i+ObjectPage*OBJS_PER_PAGE );
236 gr_clear_canvas( CGREY );
243 int objpage_grab_current(int n)
247 if ( (n<0) || ( n>= Num_total_object_types) ) return 0;
249 ObjectPage = n / OBJS_PER_PAGE;
251 if (ObjectPage*OBJS_PER_PAGE < Num_total_object_types) {
252 for (i=0; i<OBJS_PER_PAGE; i++ )
254 gr_set_current_canvas(ObjBox[i]->canvas);
255 if (i+ObjectPage*OBJS_PER_PAGE < Num_total_object_types)
257 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ i+ObjectPage*OBJS_PER_PAGE ] ] );
258 gr_label_box(i+ObjectPage*OBJS_PER_PAGE );
260 gr_clear_canvas( CGREY );
266 gr_set_current_canvas(ObjCurrent->canvas);
267 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ Cur_robot_type ] ] );
268 gr_label_box(Cur_robot_type);
270 //objpage_display_name( Texture[Cur_robot_type]->filename );
275 int objpage_goto_next_object()
279 n = Cur_robot_type++;
280 if (n >= Num_total_object_types) n = 0;
282 objpage_grab_current(n);
288 #define OBJBOX_X (TMAPBOX_X) //location of first one
289 #define OBJBOX_Y (OBJCURBOX_Y - 24 )
293 #define DELTA_ANG 0x800
295 int objpage_increase_pitch()
297 objpage_view_orient.p += DELTA_ANG;
298 redraw_current_object();
302 int objpage_decrease_pitch()
304 objpage_view_orient.p -= DELTA_ANG;
305 redraw_current_object();
309 int objpage_increase_heading()
311 objpage_view_orient.h += DELTA_ANG;
312 redraw_current_object();
316 int objpage_decrease_heading()
318 objpage_view_orient.h -= DELTA_ANG;
319 redraw_current_object();
323 int objpage_increase_bank()
325 objpage_view_orient.b += DELTA_ANG;
326 redraw_current_object();
330 int objpage_decrease_bank()
332 objpage_view_orient.b -= DELTA_ANG;
333 redraw_current_object();
337 int objpage_increase_z()
339 objpage_view_dist -= 0x8000;
340 redraw_current_object();
344 int objpage_decrease_z()
346 objpage_view_dist += 0x8000;
347 redraw_current_object();
351 int objpage_reset_orient()
353 objpage_view_orient.p = 0;
354 objpage_view_orient.b = 0;
355 objpage_view_orient.h = -0x8000;
356 //objpage_view_dist = DEFAULT_VIEW_DIST;
357 redraw_current_object();
362 // INIT TEXTURE STUFF
364 void objpage_init( UI_WINDOW *win )
368 //Num_total_object_types = N_polygon_models + N_hostage_types + N_powerup_types;
369 //Assert (N_polygon_models < MAX_POLYGON_MODELS);
370 //Assert (Num_total_object_types < MAX_OBJTYPE );
371 //Assert (N_hostage_types < MAX_HOSTAGE_TYPES );
372 //Assert (N_powerup_types < MAX_POWERUP_TYPES );
373 // Assert (N_robot_types < MAX_ROBOTS);
375 ui_add_gadget_button( win, OBJCURBOX_X + 00, OBJCURBOX_Y - 27, 30, 20, "<<", objpage_goto_prev );
376 ui_add_gadget_button( win, OBJCURBOX_X + 32, OBJCURBOX_Y - 27, 30, 20, ">>", objpage_goto_next );
378 ui_add_gadget_button( win, OBJCURBOX_X + 00, OBJCURBOX_Y - 54, 30, 20, "B", objpage_goto_first );
379 ui_add_gadget_button( win, OBJCURBOX_X + 32, OBJCURBOX_Y - 54, 30, 20, "E", objpage_goto_last );
381 ui_add_gadget_button( win, OBJCURBOX_X + 25, OBJCURBOX_Y + 62, 22, 13, "P-", objpage_decrease_pitch );
382 ui_add_gadget_button( win, OBJCURBOX_X + 25, OBJCURBOX_Y + 90, 22, 13, "P+", objpage_increase_pitch );
383 ui_add_gadget_button( win, OBJCURBOX_X + 00, OBJCURBOX_Y + 90, 22, 13, "B-", objpage_decrease_bank );
384 ui_add_gadget_button( win, OBJCURBOX_X + 50, OBJCURBOX_Y + 90, 22, 13, "B+", objpage_increase_bank );
385 ui_add_gadget_button( win, OBJCURBOX_X + 00, OBJCURBOX_Y + 76, 22, 13, "H-", objpage_decrease_heading );
386 ui_add_gadget_button( win, OBJCURBOX_X + 50, OBJCURBOX_Y + 76, 22, 13, "H+", objpage_increase_heading );
387 ui_add_gadget_button( win, OBJCURBOX_X + 00, OBJCURBOX_Y + 62, 22, 13, "Z+", objpage_increase_z );
388 ui_add_gadget_button( win, OBJCURBOX_X + 50, OBJCURBOX_Y + 62, 22, 13, "Z-", objpage_decrease_z );
389 ui_add_gadget_button( win, OBJCURBOX_X + 25, OBJCURBOX_Y + 76, 22, 13, "R", objpage_reset_orient );
391 for (i=0;i<OBJS_PER_PAGE;i++)
392 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);
394 ObjCurrent = ui_add_gadget_userbox( win, OBJCURBOX_X, OBJCURBOX_Y-5, 64, 64 );
396 objpage_reset_orient();
398 for (i=0; i<OBJS_PER_PAGE; i++ )
400 gr_set_current_canvas(ObjBox[i]->canvas);
401 if (i+ObjectPage*OBJS_PER_PAGE < Num_total_object_types)
403 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ i+ObjectPage*OBJS_PER_PAGE ] ] );
404 gr_label_box(i+ObjectPage*OBJS_PER_PAGE );
406 gr_clear_canvas( CGREY );
410 // Don't reset robot_type when we return to editor.
411 // Cur_robot_type = ObjectPage*OBJS_PER_PAGE;
412 gr_set_current_canvas(ObjCurrent->canvas);
413 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ Cur_robot_type ] ] );
414 gr_label_box(Cur_robot_type);
416 //ObjnameCanvas = gr_create_sub_canvas(&grd_curscreen->sc_canvas, OBJCURBOX_X , OBJCURBOX_Y + OBJBOX_H + 10, 100, 20);
417 //gr_set_current_canvas( ObjnameCanvas );
418 //gr_set_curfont( ui_small_font );
419 //gr_set_fontcolor( CBLACK, CWHITE );
420 //objpage_display_name( Texture[Cur_robot_type]->filename );
426 //gr_free_sub_canvas(ObjnameCanvas);
436 for (i=0; i<OBJS_PER_PAGE; i++ )
438 if (ObjBox[i]->b1_clicked && (i+ObjectPage*OBJS_PER_PAGE < Num_total_object_types))
440 Cur_robot_type = i+ObjectPage*OBJS_PER_PAGE;
441 gr_set_current_canvas(ObjCurrent->canvas);
442 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ Cur_robot_type ] ] );
443 gr_label_box(Cur_robot_type);
444 //objpage_display_name( Texture[Cur_robot_type]->filename );