//-----------------------------------------------------------------------------
//
//  $Logfile:: /game/armor.cpp                                                $
// $Revision:: 2                                                              $
//   $Author:: Burgermac                                                      $
//     $Date:: 12/27/00 6:51 PM                                               $
//
// Copyright (C) 1997 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.
//
// DESCRIPTION:
// Standard armor that prevents a percentage of damage per hit.
//

#include "g_local.h"
#include "armor.h"

/*
========
ARMOR
========
*/

CLASS_DECLARATION( Item, Armor, NULL )

ResponseDef Armor::Responses[] =
{
	{ NULL, NULL }
};

Armor::Armor()
{
	if( DM_FLAG( DF_NO_ARMOR ) )
	{
		PostEvent( EV_Remove, 0 );
		return;
	}

	Set( 0 );
}

void Armor::Setup( const char* model, int amount )
{
	assert( model );
	setModel( model );
	Set( amount );
}

void Armor::Add( int num )
{
	// Armor never adds, it only replaces
	amount = num;
	if( amount >= MaxAmount() )
		amount = MaxAmount();
}

qboolean Armor::Pickupable( Entity* other )
{
	if( !other->isSubclassOf( Sentient ) )
	{
		return false;
	}
	else
	{
		Sentient* sent;
		Item* item;

		sent = ( Sentient* )other;

		// Mutants don't get armor
		if( sent->flags & ( FL_MUTANT | FL_SP_MUTANT ) )
		{
			return false;
		}

		item = sent->FindItem( getClassname() );
		// If our armor is > than our current armor or armor has no value, then leave it alone.
		if( item )
			if( ( item->Amount() >= this->Amount() ) || !this->Amount() )
			{
				return false;
			}
	}
	return true;
}

CLASS_DECLARATION( Armor, RiotHelmet, "armor_riothelmet" );

ResponseDef RiotHelmet::Responses[] =
{
	{ NULL, NULL }
};

RiotHelmet::RiotHelmet()
{
	Setup( "riothelm.def", MAX_ARMOR );
}

CLASS_DECLARATION( Armor, FlakJacket, "armor_flakjacket" );

ResponseDef FlakJacket::Responses[] =
{
	{ NULL, NULL }
};

FlakJacket::FlakJacket()
{
	Setup( "flakjack.def", MAX_ARMOR );
}

CLASS_DECLARATION( Armor, FlakPants, "armor_flakpants" );

ResponseDef FlakPants::Responses[] =
{
	{ NULL, NULL }
};

FlakPants::FlakPants()
{
	Setup( "flakpants.def", MAX_ARMOR );
}

