/**********************************************************************
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_TAKEOVER_PAD_HH
#define G1_TAKEOVER_PAD_HH


#include "g1_object.hh"
#include "objs/model_draw.hh"

class i4_stream_wav_player;

extern g1_object_type g1_sfx_obj_type;

class g1_sfx_obj_class : public g1_object_class
{ 
  enum { DATA_VERSION=1 };
public:
  static g1_sfx_obj_class *cast(g1_object_class *obj)
  {
    if (!obj || obj->id != g1_sfx_obj_type)
    { 
#ifdef I4_CAST_WARN
      i4_warning("bad cast to sfx_obj!\n"); 
#endif
      return 0; 
    }
    
    return (g1_sfx_obj_class *)obj;
  }

  i4_stream_wav_player *stream;
  i4_str *filename;
  w16 max_volume;
  w32 max_hearable_distance;
  w32 restart_delay;
  w32 random_restart_delay;   
  w32 current_delay;         // time to count down until next sound is played
  float dist_from_camera_sqrd;    // calculated by g1_sound_man

  g1_sfx_obj_class *next_sfx;
  
  g1_sfx_obj_class(g1_object_type id, g1_loader_class *fp);
  ~g1_sfx_obj_class();
  virtual void save(g1_saver_class *fp);

  i4_str *get_context_string();  

  void set_filename(const i4_const_str &fname);

  // adds self to sound_manager
  i4_bool occupy_location();

  // remove self from sound_manager
  void unoccupy_location();
  virtual void draw(g1_draw_context_class *context);
  virtual void think();
};


#endif