//-----------------------------------------------------------------------------
//
//  $Logfile:: /Quake 2 Engine/Sin/code/game/pulserifle.h                     $
// $Revision:: 14                                                             $
//   $Author:: Markd                                                          $
//     $Date:: 10/09/98 11:56p                                                $
//
// Copyright (C) 1998 by Ritual Entertainment, Inc.
// All rights reserved.
//
// This source is may not be distributed and/or modified without
// expressly written permission by Ritual Entertainment, Inc.
//
// $Log:: /Quake 2 Engine/Sin/code/game/pulserifle.h                          $
// 
// 14    10/09/98 11:56p Markd
// Added GenericPulseRifle
// 
// 13    9/29/98 11:46p Aldie
// New effects
// 
// 12    9/22/98 12:49p Markd
// Put in archive and unarchive functions
// 
// 11    8/29/98 5:27p Markd
// added specialfx, replaced misc with specialfx where appropriate
// 
// 10    8/18/98 8:13p Aldie
// Added dual mode weapons to base class
// 
// 9     6/17/98 5:42p Aldie
// Made beam do a trace attack
// 
// 8     6/15/98 10:40a Aldie
// New version of pulserifle
// 
// 7     5/13/98 6:22p Markd
// Added Beam pointer
// 
// 6     3/30/98 2:36p Jimdose
// Changed from subclass of Magnum to subclass of BulletWeapon
// 
// 5     3/28/98 8:55p Jimdose
// Created file
// 
// DESCRIPTION:
// Pulse rifle
// 

#ifndef __PULSERIFLE_H__
#define __PULSERIFLE_H__

#include "g_local.h"
#include "item.h"
#include "weapon.h"
#include "bullet.h"
#include "specialfx.h"

class PulseRifle : public BulletWeapon
	{
      int      beam_modelindex;

	public:
		CLASS_PROTOTYPE( PulseRifle );
		
								PulseRifle();
		virtual void		Shoot( Event *ev );
      void              TraceAttack( Vector start,
                                     Vector end,
                                     int damage,
                                     trace_t *trace,
                                     int numricochets,
                                     int kick,
                                     int dflags );
      void              PulseExplosion(trace_t *trace);
	   virtual void      Archive( Archiver &arc );
      virtual void      Unarchive( Archiver &arc );
	};

inline void PulseRifle::Archive
	(
	Archiver &arc
	)
   {
   BulletWeapon::Archive( arc );

   arc.WriteInteger( beam_modelindex );
   }

inline void PulseRifle::Unarchive
	(
	Archiver &arc
	)
   {
   BulletWeapon::Unarchive( arc );

   arc.ReadInteger( &beam_modelindex );
   }

class GenericPulseRifle : public PulseRifle
	{
	public:
		CLASS_PROTOTYPE( GenericPulseRifle );

								GenericPulseRifle();
	};



#endif /* pulserifle.h */
