Files
commandergenius/project/jni/application/alienblaster/item.cpp

137 lines
3.4 KiB
C++

/***************************************************************************
alienBlaster
Copyright (C) 2004
Paul Grathwohl, Arne Hormann, Daniel Kuehn, Soenke Schwardt
This program 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, or (at your option)
any later version.
This program 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 this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
***************************************************************************/
#include <iostream>
#include "item.h"
#include "boundingBox.h"
#include "surfaceDB.h"
#include "global.h"
Item::Item(const Vector2D &position, const Vector2D &velocity, ItemTypes itemType) {
this->itemType = itemType;
pos = position;
vel = velocity;
timeLived = 0;
switch (itemType) {
case ITEM_PRIMARY_UPGRADE:
{
sprite = surfaceDB.loadSurface( FN_ITEM_PRIMARY_UPGRADE );
break;
}
case ITEM_DUMBFIRE_DOUBLE:
{
sprite = surfaceDB.loadSurface( FN_ITEM_DUMBFIRE_DOUBLE );
break;
}
case ITEM_KICK_ASS_ROCKET:
{
sprite = surfaceDB.loadSurface( FN_ITEM_KICK_ASS_ROCKET );
break;
}
case ITEM_HELLFIRE:
{
sprite = surfaceDB.loadSurface( FN_ITEM_HELLFIRE );
break;
}
case ITEM_MACHINE_GUN:
{
sprite = surfaceDB.loadSurface( FN_ITEM_MACHINE_GUN );
break;
}
case ITEM_HEALTH:
{
sprite = surfaceDB.loadSurface( FN_ITEM_HEALTH );
break;
}
case ITEM_HEATSEEKER:
{
sprite = surfaceDB.loadSurface( FN_ITEM_HEATSEEKER );
break;
}
case ITEM_NUKE:
{
sprite = surfaceDB.loadSurface( FN_ITEM_NUKE );
break;
}
case ITEM_DEFLECTOR:
{
sprite = surfaceDB.loadSurface( FN_ITEM_DEFLECTOR );
break;
}
case ITEM_LASER:
{
sprite = surfaceDB.loadSurface( FN_ITEM_LASER );
break;
}
case ITEM_ENERGY_BEAM:
{
sprite = surfaceDB.loadSurface( FN_ITEM_ENERGY_BEAM );
break;
}
default:
{
cout << "Item(): unexpected itemType: " << itemType << endl;
sprite = surfaceDB.loadSurface( FN_ITEM_PRIMARY_UPGRADE );
break;
}
}
boundingBox = new BoundingBox( lroundf(pos.getX() - sprite->w / 2.0),
lroundf(pos.getY() - sprite->h / 2.0),
sprite->w, sprite->h );
}
Item::~Item() {
delete boundingBox;
}
void Item::update( int dT ) {
pos += vel * dT / 1000.0;
updateBoundingBox();
timeLived += dT;
}
void Item::deleteItem() {
timeLived = ITEM_LIFETIME;
}
void Item::updateBoundingBox() {
boundingBox->moveUpperBound( lroundf(pos.getY() - sprite->h * 0.5) );
boundingBox->moveLeftBound( lroundf(pos.getX() - sprite->w * 0.5) );
}
void Item::draw(SdlCompat_AcceleratedSurface *screen) {
SDL_Rect r;
r.x = lroundf(pos.getX()) - sprite->w / 2;
r.y = lroundf(pos.getY()) - sprite->h / 2;
r.w = sprite->w;
r.h = sprite->h;
SDL_BlitSurface( sprite, 0, screen, &r );
}
BoundingBox *Item::getBoundingBox() {
return boundingBox;
}