//-----------------------------------------------------------------------------
//
//  $Logfile:: /Quake 2 Engine/Sin/code/game/quantumd.h                       $
// $Revision:: 17                                                             $
//   $Author:: Jimdose                                                        $
//     $Date:: 11/08/98 10:54p                                                $
//
// 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/quantumd.h                            $
// 
// 17    11/08/98 10:54p Jimdose
// trapped_sent wasn't being archived
// 
// 16    10/16/98 9:50p Aldie
// Added second attack
// 
// 15    10/10/98 5:58p Aldie
// More quantumdestab fixes
// 
// 14    10/05/98 10:42p Aldie
// Fixed dropping bug
// 
// 13    10/04/98 10:28p Aldie
// Added multiple weapon changes.  Damage, flashes, quantum stuff
// 
// 12    9/23/98 10:08p Aldie
// Added self destruct mechanism
// 
// 11    9/22/98 12:49p Markd
// Put in archive and unarchive functions
// 
// 10    9/21/98 1:54a Aldie
// Made quantum eat ammo
// 
// 9     9/16/98 8:58p Aldie
// Added ability to do a hold down weapon charge
// 
// 8     9/11/98 3:54p Aldie
// Put in release fire
// 
// 7     8/18/98 8:13p Aldie
// Added dual mode weapons to base class
// 
// 6     8/18/98 7:39p Aldie
// Added dual weapon modes to base class
// 
// 5     8/06/98 10:53p Aldie
// Added weapon tweaks and kickback.  Also modified blast radius damage and
// rocket jumping.
// 
// 4     7/29/98 5:56p Aldie
// Added header
//
// DESCRIPTION:
// Quantum Destabilizer

#ifndef __QUANTUMD_H__
#define __QUANTUMD_H__

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

class QuantumDestabilizer : public BulletWeapon
	{
   private:
      float             power;
      SentientPtr       trapped_sent;

	public:
		CLASS_PROTOTYPE( QuantumDestabilizer );
		
								QuantumDestabilizer();
		virtual void		Shoot( Event *ev );
      virtual void		ReleaseFire( float holdfiretime );
      void              EatAmmo( Event *ev );
      void              Destruct( Event *ev );
      void              StartSelfDestruct( Event *ev );
      void              SuckSentient( Vector pos, Vector org );
      qboolean          ShootSentient( Vector pos, Vector dir );
      void              SentientOverload( Event *ev );
      void              TraceAttack( Vector start,
                                     Vector end,
                                     int damage,
                                     trace_t	*trace,
                                     int numricochets,
                                     int kick,
                                     int dflags );
      virtual qboolean  Drop( void );
	   virtual void      Archive( Archiver &arc );
      virtual void      Unarchive( Archiver &arc );
	};

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

   arc.WriteFloat( power );
   arc.WriteSafePointer( trapped_sent );
   }

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

   arc.ReadFloat( &power );
   arc.ReadSafePointer( &trapped_sent );
   }

#endif /* quantumd.h */
