/* =========================================================================== Copyright (C) 2015 the OpenMoHAA team This file is part of OpenMoHAA source code. OpenMoHAA source code is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. OpenMoHAA source code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenMoHAA source code; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA =========================================================================== */ // armor.cpp: Standard armor that prevents a percentage of damage per hit. // #include "g_local.h" #include "armor.h" CLASS_DECLARATION( Item, Armor, NULL ) { { NULL, NULL } }; Armor::Armor() { if ( LoadingSavegame ) { // no need to proceed if loading a game return; } if ( DM_FLAG( DF_NO_ARMOR ) ) { PostEvent( EV_Remove, EV_REMOVE ); return; } setAmount( 0 ); } void Armor::Setup ( const char *model, int amount ) { assert( model ); setModel( model ); setAmount( 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; item = sent->FindItem( getName() ); // If our armor is > than our current armor or armor has no value, then leave it alone. if ( item && ( ( item->getAmount() >= this->getAmount() ) || !this->getAmount() ) ) { return false; } } return true; }