//-----------------------------------------------------------------------------
//
//  $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 EXPORT_FROM_DLL 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 SecondaryUse( Event *ev ); //###
	virtual void      Archive( Archiver &arc );
	virtual void      Unarchive( Archiver &arc );
};

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

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

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

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

#endif /* quantumd.h */
