Skip to content
Snippets Groups Projects
Select Git revision
  • 40f51b9e3b3117682728c24918697686db85c9df
  • master default
  • Huaer
  • krueger
4 results

playerprojectile.cpp

Blame
  • 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);
    };