/**********************************************************************
This file is part of Crack dot Com's free source code release of
Golgotha.
for
information about compiling & licensing issues visit this URL
If that doesn't help, contact Jonathan Clark at
golgotha_source@usa.net (Subject should have "GOLG" in it)
***********************************************************************/
#ifndef G1_PICK_WIN_HH
#define G1_PICK_WIN_HH
#include "window/window.hh"
#include "g1_limits.hh"
#include "menu/menuitem.hh"
#include "time/time.hh"
class i4_image_class;
class g1_draw_context_class;
class g1_3d_pick_window : public i4_menu_item_class
{
protected:
i4_bool need_flip_update;
sw32 last_mx, last_my;
i4_bool grabl, grabr;
i4_image_class *act,*pass;
i4_time_class start;
i4_event_reaction_class *reaction;
public:
struct camera_struct
{
i4_float theta, phi, zrot;
i4_float view_dist,
center_x,
center_y,
center_z;
i4_bool stopped;
void init()
{
stopped=i4_F;
center_x=0;
center_y=0;
center_z=0;
view_dist=1;
theta=0;
phi=0;
zrot=0;
}
} camera;
g1_3d_pick_window(w16 w, w16 h,
i4_image_class *active_back,
i4_image_class *passive_back,
camera_struct &camera,
i4_event_reaction_class *reaction)
: i4_menu_item_class(0,0,w,h),
camera(camera),
act(active_back),
pass(passive_back),
reaction(reaction)
{
grabl=i4_F;
grabr=i4_F;
need_flip_update=i4_T;
}
void request_redraw(i4_bool for_a_child)
{
need_flip_update=i4_T;
i4_menu_item_class::request_redraw(for_a_child);
}
~g1_3d_pick_window()
{
if (reaction)
delete reaction;
}
virtual i4_bool selected() { return i4_F; }
void setup_bg_color();
virtual void do_activate()
{
i4_menu_item_class::do_activate();
start.get();
}
virtual void do_deactivate()
{
i4_menu_item_class::do_deactivate();
}
virtual void parent_draw(i4_draw_context_class &context);
virtual void draw_object(g1_draw_context_class *context) = 0;
virtual void receive_event(i4_event *ev);
char *name() { return "object window"; }
} ;
#endif