Select Git revision
playerprojectile.cpp
-
weberma73121 authoredweberma73121 authored
playerprojectile.cpp 3.01 KiB
#include "playerprojectile.hpp"
#include "Platform.hpp"
#include "Level.hpp"
PlayerProjectile::PlayerProjectile(float x, float y, enum direction dir)
: Projectile(x,y,dir)
{
};
static StaticPixelBuffer<3,3> constexpr Psprite= {
{{
{" 6 "},
{"666"},
{" 6 "}
}}};
const PixelBuffer& PlayerProjectile::getSprite()
{
return Psprite;
};
bool PlayerProjectile::move(FloatSeconds const & Frametime, Level &level)
{
int speed = 15;
const auto &sprite = this->getSprite();
switch (this->dir)
{
case direction::BACK: //down
if(!level.checkCollision(this->x, this->y - 3*Frametime.count(), sprite.w(), sprite.h()))
{
this->y -= speed*Frametime.count();
if(level.HitPlayer(this->x, this->y, sprite.w(), sprite.h())
|| level.HitObstacle(this->x, this->y, PLAYER_PROJECTILE_COLOR, sprite.w(), sprite.h()))
{
//Player hit
return false;
}
}
else
{
return false;
}
break;
break;
case direction::LEFT:
if(!level.checkCollision(this->x - 3*Frametime.count(), this->y, sprite.w(), sprite.h()))
{
this->x -= speed*Frametime.count();
if(level.HitPlayer(this->x, this->y, sprite.w(), sprite.h())
|| level.HitObstacle(this->x, this->y, PLAYER_PROJECTILE_COLOR, sprite.w(), sprite.h()))
{
//Player hit
return false;
}
}
else
{
return false;
}
break;
break;
case direction::RIGHT:
if(!level.checkCollision(this->x + 3*Frametime.count(),this->y, sprite.w(), sprite.h()))
{
this->x += speed*Frametime.count();
if(level.HitPlayer(this->x, this->y, sprite.w(), sprite.h())
|| level.HitObstacle(this->x, this->y, PLAYER_PROJECTILE_COLOR, sprite.w(), sprite.h()))
{
//Player hit
return false;
}
}
else
{
return false;
}
break;
break;
default:
if(!level.checkCollision(this->x, this->y + 3*Frametime.count(), sprite.w(), sprite.h()))
{
this->y += speed*Frametime.count();
if(level.HitPlayer(this->x, this->y, sprite.w(), sprite.h())
|| level.HitObstacle(this->x, this->y, PLAYER_PROJECTILE_COLOR, sprite.w(), sprite.h()))
{
//Player hit
return false;
}
}
else
{
return false;
}
break;
}
return true;
};
bool PlayerProjectile::doStep(const FloatSeconds &Frametime, Level &level)
{
return move(Frametime,level);
};