/**********************************************************************
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_BOLT_HH
#define G1_BOLT_HH

#include "objs/map_piece.hh"

class g1_bolt_class : public g1_object_class
{
public:
  int ticks;
  i4_bool first, lit;
  i4_3d_vector target_pos;
  i4_float w1,w2;
  i4_color c1,c2;
  i4_float a1,a2;
  i4_float size;
  s1_sound_handle sfx_loop;

  g1_typed_reference_class originator;
  g1_typed_reference_class target;
  g1_typed_reference_class light, end_light;
  
  enum {NUM_ARCS=5};
  
  struct arc_point
  {
    i4_3d_vector lposition,position;
  } arc[NUM_ARCS];

  void request_remove();

  void setup(const i4_3d_vector &start_pos,
             const i4_3d_vector &target_pos,
             g1_object_class *originator,
             g1_object_class *target=0);

  void setup_look(i4_float _size,
                  i4_float start_width,     i4_float end_width,
                  i4_color start_color,     i4_color end_color,
                  i4_float start_alpha=1.0, i4_float end_alpha=1.0,
                  i4_bool  _lit=i4_F)
  {
    size = _size;
    w1 = start_width; w2 = end_width;
    c1 = start_color; c2 = end_color;
    a1 = start_alpha; a2 = end_alpha;
    lit = _lit;
  }

  void move(const i4_3d_vector &pos);
  void arc_to(const i4_3d_vector &target);
  void copy_old_points();

  ~g1_bolt_class();

  g1_bolt_class(g1_object_type id, g1_loader_class *fp);
  virtual void save(g1_saver_class *fp);
  virtual void draw(g1_draw_context_class *context);  
  virtual void think();
  virtual void post_think();

  void create_light();
  void destroy_light();
};

#endif