/**********************************************************************
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_LIGHT_OBJECT_HH
#define G1_LIGHT_OBJECT_HH
#include "g1_object.hh"
#include "g1_render.hh"
#include "objs/model_draw.hh"
extern g1_object_type g1_lightbulb_type;
class g1_light_object_class : public g1_object_class
{
public:
static g1_light_object_class *cast(g1_object_class *obj)
{
if (!obj || obj->id != g1_lightbulb_type)
{
#ifdef I4_CAST_WARN
i4_warning("bad cast to lightbulb_obj!\n");
#endif
return 0;
}
return (g1_light_object_class *)obj;
}
i4_float r,g,b; // 0..1 if colored lighting supported
i4_float white; // 0..1 if only white light supported
// light atenuation formula = min(1/(c1 + c2*d + c3*d*d),1)
i4_float c1,c2,c3; // 0..1 light antenuation values
g1_light_object_class *next; // next point source light in list
sw32 change_radius;
w32 *add_intensities;
enum { DATA_VERSION=0 };
g1_light_object_class(g1_object_type id, g1_loader_class *fp);
void save(g1_saver_class *fp);
virtual i4_bool occupy_location();
virtual void unoccupy_location();
void setup(float _x, float _y, float _h,
float _r, float _g, float _b, float _white,
float min_light_contribute=0.05,
float linear_contribute=0.25,
float geometric_contribute=0.5);
void move(float new_x, float new_y, float new_h);
virtual void draw(g1_draw_context_class *context);
virtual void think();
~g1_light_object_class();
};
extern g1_object_type g1_lightbulb_type;
#endif