1 /* $Id: objpage.c,v 1.3 2004-12-19 15:21:11 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.
22 static char rcsid[] = "$Id: objpage.c,v 1.3 2004-12-19 15:21:11 btb Exp $";
25 // Num_robot_types --> N_polygon_models
26 // Cur_robot_type --> Cur_robot_type
27 // Texture[Cur_robot_type]->bitmap ---> robot_bms[robot_bm_nums[ Cur_robot_type ] ]
38 #include "screens.h" // For GAME_SCREEN?????
39 #include "editor.h" // For TMAP_CURBOX??????
40 #include "gr.h" // For canves, font stuff
41 #include "ui.h" // For UI_GADGET stuff
42 #include "object.h" // For robot_bms
43 #include "mono.h" // For debugging
52 #define OBJS_PER_PAGE 8
54 static UI_GADGET_USERBOX * ObjBox[OBJS_PER_PAGE];
55 static UI_GADGET_USERBOX * ObjCurrent;
57 static int ObjectPage = 0;
59 //static char Description[8][20] = { "Pig", "Star", "Little\nJosh", "Big\nJosh", "Flying\nPig", "Flying\nStar",
60 //"Little\nFlying\nJosh", "Big\nFlying\nJosh" };
62 //static grs_canvas * ObjnameCanvas;
63 //static char object_filename[13];
65 //static void objpage_print_name( char name[13] ) {
68 // gr_set_current_canvas( ObjnameCanvas );
69 // gr_get_string_size( name, &w, &h, &aw );
70 // gr_string( 0, 0, name );
71 // //gr_set_fontcolor( CBLACK, CWHITE );
74 //static void objpage_display_name( char *format, ... ) {
77 // va_start(ap, format);
78 // vsprintf(object_filename, format, ap);
81 // objpage_print_name(object_filename);
93 vms_angvec objpage_view_orient;
94 fix objpage_view_dist;
96 //this is bad to have the extern, but this snapshot stuff is special
97 extern int polyobj_lighting;
101 // Type is optional. If you pass -1, type is determined, else type is used, and id is not xlated through ObjId.
102 void draw_robot_picture(int id, vms_angvec *orient_angles, int type)
105 if (id >= Num_total_object_types)
109 type = ObjType[id]; // Find the object type, given an object id.
110 id = ObjId[id]; // Translate to sub-id.
116 PIGGY_PAGE_IN(Vclip[Hostage_vclip_num[id]].frames[0]);
117 gr_bitmap(0,0,&GameBitmaps[Vclip[Hostage_vclip_num[id]].frames[0].index]);
121 if ( Powerup_info[id].vclip_num > -1 ) {
122 PIGGY_PAGE_IN(Vclip[Powerup_info[id].vclip_num].frames[0]);
123 gr_bitmap(0,0,&GameBitmaps[Vclip[Powerup_info[id].vclip_num].frames[0].index]);
128 draw_model_picture(Player_ship->model_num,orient_angles); // Draw a poly model below
132 draw_model_picture(Robot_info[id].model_num,orient_angles); // Draw a poly model below
135 case OL_CONTROL_CENTER:
137 draw_model_picture(id,orient_angles);
140 //Int3(); // Invalid type!!!
146 void redraw_current_object()
151 gr_set_current_canvas(ObjCurrent->canvas);
152 draw_robot_picture(Cur_robot_type,&objpage_view_orient, -1);
153 gr_set_current_canvas(cc);
156 void gr_label_box( int i)
159 gr_clear_canvas(BM_XRGB(0,0,0));
160 draw_robot_picture(i,&objpage_view_orient, -1);
163 // sprintf( s, " %d ", i );
164 // gr_clear_canvas( BM_XRGB(0,15,0) );
165 // gr_set_fontcolor( CWHITE, BM_XRGB(0,15,0) );
166 // ui_string_centered( grd_curcanv->cv_bitmap.bm_w/2, grd_curcanv->cv_bitmap.bm_h/2, Description[i] );
169 int objpage_goto_first()
174 for (i=0; i<OBJS_PER_PAGE; i++ ) {
175 gr_set_current_canvas(ObjBox[i]->canvas);
176 if (i+ObjectPage*OBJS_PER_PAGE < Num_total_object_types ) {
177 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ i+ObjectPage*OBJS_PER_PAGE ] ] );
178 gr_label_box(i+ObjectPage*OBJS_PER_PAGE );
180 gr_clear_canvas( CGREY );
186 int objpage_goto_last()
190 ObjectPage=(Num_total_object_types)/OBJS_PER_PAGE;
191 for (i=0; i<OBJS_PER_PAGE; i++ )
193 gr_set_current_canvas(ObjBox[i]->canvas);
194 if (i+ObjectPage*OBJS_PER_PAGE < Num_total_object_types )
196 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ i+ObjectPage*OBJS_PER_PAGE ] ] );
197 gr_label_box(i+ObjectPage*OBJS_PER_PAGE );
199 gr_clear_canvas( CGREY );
205 static int objpage_goto_prev()
208 if (ObjectPage > 0) {
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_total_object_types)
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 static int objpage_goto_next()
228 if ((ObjectPage+1)*OBJS_PER_PAGE < Num_total_object_types) {
230 for (i=0; i<OBJS_PER_PAGE; i++ )
232 gr_set_current_canvas(ObjBox[i]->canvas);
233 if (i+ObjectPage*OBJS_PER_PAGE < Num_total_object_types)
235 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ i+ObjectPage*OBJS_PER_PAGE ] ] );
236 gr_label_box(i+ObjectPage*OBJS_PER_PAGE );
238 gr_clear_canvas( CGREY );
245 int objpage_grab_current(int n)
249 if ( (n<0) || ( n>= Num_total_object_types) ) return 0;
251 ObjectPage = n / OBJS_PER_PAGE;
253 if (ObjectPage*OBJS_PER_PAGE < Num_total_object_types) {
254 for (i=0; i<OBJS_PER_PAGE; i++ )
256 gr_set_current_canvas(ObjBox[i]->canvas);
257 if (i+ObjectPage*OBJS_PER_PAGE < Num_total_object_types)
259 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ i+ObjectPage*OBJS_PER_PAGE ] ] );
260 gr_label_box(i+ObjectPage*OBJS_PER_PAGE );
262 gr_clear_canvas( CGREY );
268 gr_set_current_canvas(ObjCurrent->canvas);
269 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ Cur_robot_type ] ] );
270 gr_label_box(Cur_robot_type);
272 //objpage_display_name( Texture[Cur_robot_type]->filename );
277 int objpage_goto_next_object()
281 n = Cur_robot_type++;
282 if (n >= Num_total_object_types) n = 0;
284 objpage_grab_current(n);
290 #define OBJBOX_X (TMAPBOX_X) //location of first one
291 #define OBJBOX_Y (OBJCURBOX_Y - 24 )
295 #define DELTA_ANG 0x800
297 int objpage_increase_pitch()
299 objpage_view_orient.p += DELTA_ANG;
300 redraw_current_object();
304 int objpage_decrease_pitch()
306 objpage_view_orient.p -= DELTA_ANG;
307 redraw_current_object();
311 int objpage_increase_heading()
313 objpage_view_orient.h += DELTA_ANG;
314 redraw_current_object();
318 int objpage_decrease_heading()
320 objpage_view_orient.h -= DELTA_ANG;
321 redraw_current_object();
325 int objpage_increase_bank()
327 objpage_view_orient.b += DELTA_ANG;
328 redraw_current_object();
332 int objpage_decrease_bank()
334 objpage_view_orient.b -= DELTA_ANG;
335 redraw_current_object();
339 int objpage_increase_z()
341 objpage_view_dist -= 0x8000;
342 redraw_current_object();
346 int objpage_decrease_z()
348 objpage_view_dist += 0x8000;
349 redraw_current_object();
353 int objpage_reset_orient()
355 objpage_view_orient.p = 0;
356 objpage_view_orient.b = 0;
357 objpage_view_orient.h = -0x8000;
358 //objpage_view_dist = DEFAULT_VIEW_DIST;
359 redraw_current_object();
364 // INIT TEXTURE STUFF
366 void objpage_init( UI_WINDOW *win )
370 //Num_total_object_types = N_polygon_models + N_hostage_types + N_powerup_types;
371 //Assert (N_polygon_models < MAX_POLYGON_MODELS);
372 //Assert (Num_total_object_types < MAX_OBJTYPE );
373 //Assert (N_hostage_types < MAX_HOSTAGE_TYPES );
374 //Assert (N_powerup_types < MAX_POWERUP_TYPES );
375 // Assert (N_robot_types < MAX_ROBOTS);
377 ui_add_gadget_button( win, OBJCURBOX_X + 00, OBJCURBOX_Y - 27, 30, 20, "<<", objpage_goto_prev );
378 ui_add_gadget_button( win, OBJCURBOX_X + 32, OBJCURBOX_Y - 27, 30, 20, ">>", objpage_goto_next );
380 ui_add_gadget_button( win, OBJCURBOX_X + 00, OBJCURBOX_Y - 54, 30, 20, "B", objpage_goto_first );
381 ui_add_gadget_button( win, OBJCURBOX_X + 32, OBJCURBOX_Y - 54, 30, 20, "E", objpage_goto_last );
383 ui_add_gadget_button( win, OBJCURBOX_X + 25, OBJCURBOX_Y + 62, 22, 13, "P-", objpage_decrease_pitch );
384 ui_add_gadget_button( win, OBJCURBOX_X + 25, OBJCURBOX_Y + 90, 22, 13, "P+", objpage_increase_pitch );
385 ui_add_gadget_button( win, OBJCURBOX_X + 00, OBJCURBOX_Y + 90, 22, 13, "B-", objpage_decrease_bank );
386 ui_add_gadget_button( win, OBJCURBOX_X + 50, OBJCURBOX_Y + 90, 22, 13, "B+", objpage_increase_bank );
387 ui_add_gadget_button( win, OBJCURBOX_X + 00, OBJCURBOX_Y + 76, 22, 13, "H-", objpage_decrease_heading );
388 ui_add_gadget_button( win, OBJCURBOX_X + 50, OBJCURBOX_Y + 76, 22, 13, "H+", objpage_increase_heading );
389 ui_add_gadget_button( win, OBJCURBOX_X + 00, OBJCURBOX_Y + 62, 22, 13, "Z+", objpage_increase_z );
390 ui_add_gadget_button( win, OBJCURBOX_X + 50, OBJCURBOX_Y + 62, 22, 13, "Z-", objpage_decrease_z );
391 ui_add_gadget_button( win, OBJCURBOX_X + 25, OBJCURBOX_Y + 76, 22, 13, "R", objpage_reset_orient );
393 for (i=0;i<OBJS_PER_PAGE;i++)
394 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);
396 ObjCurrent = ui_add_gadget_userbox( win, OBJCURBOX_X, OBJCURBOX_Y-5, 64, 64 );
398 objpage_reset_orient();
400 for (i=0; i<OBJS_PER_PAGE; i++ )
402 gr_set_current_canvas(ObjBox[i]->canvas);
403 if (i+ObjectPage*OBJS_PER_PAGE < Num_total_object_types)
405 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ i+ObjectPage*OBJS_PER_PAGE ] ] );
406 gr_label_box(i+ObjectPage*OBJS_PER_PAGE );
408 gr_clear_canvas( CGREY );
412 // Don't reset robot_type when we return to editor.
413 // Cur_robot_type = ObjectPage*OBJS_PER_PAGE;
414 gr_set_current_canvas(ObjCurrent->canvas);
415 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ Cur_robot_type ] ] );
416 gr_label_box(Cur_robot_type);
418 //ObjnameCanvas = gr_create_sub_canvas(&grd_curscreen->sc_canvas, OBJCURBOX_X , OBJCURBOX_Y + OBJBOX_H + 10, 100, 20);
419 //gr_set_current_canvas( ObjnameCanvas );
420 //gr_set_curfont( ui_small_font );
421 //gr_set_fontcolor( CBLACK, CWHITE );
422 //objpage_display_name( Texture[Cur_robot_type]->filename );
428 //gr_free_sub_canvas(ObjnameCanvas);
438 for (i=0; i<OBJS_PER_PAGE; i++ )
440 if (ObjBox[i]->b1_clicked && (i+ObjectPage*OBJS_PER_PAGE < Num_total_object_types))
442 Cur_robot_type = i+ObjectPage*OBJS_PER_PAGE;
443 gr_set_current_canvas(ObjCurrent->canvas);
444 //gr_ubitmap(0,0, robot_bms[robot_bm_nums[ Cur_robot_type ] ] );
445 gr_label_box(Cur_robot_type);
446 //objpage_display_name( Texture[Cur_robot_type]->filename );