#ifndef _SHOCKWAVE_H
#define _SHOCKWAVE_H

//---------------------------------------------------------------------------
// defines
//---------------------------------------------------------------------------
#define NUM_SPHERE_FRAMES        10
#define NUM_SHOCKRING_FRAMES     6

//---------------------------------------------------------------------------
// typedefs
//---------------------------------------------------------------------------
typedef struct
{
   short pc,lastpc;           // keep track of contents
   short bounce_count;        // # bounces
   short spawn;               //
   float explode_time;        // 
   float min,max;             // shockwave min/max damage radius
   float scale_change;
   float size_change;
} shockwaveHook_t;

//---------------------------------------------------------------------------
// globals
//---------------------------------------------------------------------------
extern weaponInfo_t shockwaveWeaponInfo;

//---------------------------------------------------------------------------
// function prototypes
//---------------------------------------------------------------------------
static void weapon_select(userEntity_t *self);
static void weapon_select_finish(userEntity_t *self);
static userInventory_t *weapon_give(userEntity_t *self);
static void *weapon_command(struct userInventory_s *ptr, char *commandStr, void *data);
static void weapon_use(userInventory_s *ptr, userEntity_t *self);
static void weapon_touch(userEntity_t *self, userEntity_t *other,cplane_t *plane, csurface_t *surf);

static void shockwave_bouncing(userEntity_t *self);
static void shockwave_exploding(userEntity_t *self);
static int shockwave_damage(userEntity_t *inflictor, userEntity_t *attacker, userEntity_t *ignore, float damage,float maxdist, int damage_type, float curmin, float curmax, float push_extra);
static userEntity_t *shockwave_explode(userEntity_t *self,short explosionNum);
static void shockwave_set_physics(userEntity_t *self);
static void shoot_func(userEntity_t *self);

static void explodeSphere(userEntity_t *self);
static void center_think(userEntity_t *self);

#endif