ECE2035 Project 2

Dependencies:   mbed mbed-rtos SDFileSystem

player.cpp

Committer:
kwengryn3
Date:
2021-04-20
Revision:
10:1994adcfc86f
Parent:
9:f1d34ef049c5

File content as of revision 10:1994adcfc86f:

//=================================================================
// Implementation for the player module
//
// Copyright 2020 Georgia Tech.  All rights reserved.
// The materials provided by the instructor in this course are for
// the use of the students currently enrolled in the course.
// Copyrighted course materials may not be further disseminated.
// This file must not be made publicly available anywhere.
//==================================================================
#include "player_private.h"
#include "globals.h"
#include "compost_pile_public.h";
#define X 0xFFFFFF //WHITE
#define PLAYER_WIDTH 15
#define KNIFE_HEIGHT 2
#define KNIFE_WIDTH 12
#define _ 0x000000 //BLACK

PLAYER player; // structure of player


int player_sprite[PLAYER_HEIGHT * PLAYER_WIDTH] = {
 X,X,X,X,X,X,_,_,_,_,_,_,_,_,_,
 X,_,_,_,X,X,X,_,_,_,_,_,_,_,_,
 X,_,_,_,_,X,X,X,_,_,_,_,_,_,_,
 X,_,_,_,_,_,X,X,X,_,_,_,_,_,_,
 X,_,_,_,_,_,_,X,X,_,_,_,_,_,_,
 X,_,_,_,_,_,_,X,X,X,_,_,_,_,_,
 X,_,_,_,_,_,_,_,X,X,_,_,_,_,_,
 X,_,_,_,_,_,_,_,X,X,_,_,_,_,_,
 X,_,_,_,_,_,_,X,X,X,_,_,_,_,_,
 X,_,_,_,_,_,_,X,X,_,_,_,_,_,_,
 X,_,_,_,_,_,X,X,X,_,_,_,_,_,_,
 X,_,_,_,_,X,X,X,_,_,_,_,_,_,_,
 X,_,_,_,X,X,X,_,_,_,_,_,_,_,_,
 X,X,X,X,X,X,_,_,_,_,_,_,_,_,_,
};

int player_mask[PLAYER_HEIGHT * PLAYER_WIDTH] = {
 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,

};

int knife_sprite[KNIFE_HEIGHT * KNIFE_WIDTH] = {
X,X,X,X,X,X,X,X,X,X,X,X,
X,X,X,X,X,X,X,X,X,X,X,X,

};

int knife_mask[KNIFE_HEIGHT * KNIFE_WIDTH] = {
_,_,_,_,_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,_,_,_,_,

};




PLAYER player_get_info(void){
    return player;
}

void player_init(void) {

    player.score = 0;
    player.height = PLAYER_HEIGHT;
    player.y = 0;
    player.player_has_knife = true;
    player.knife_length = KNIFE_WIDTH;
    player.strikes = 7;
    
    point topLeftP;
    point bottomRightP;
    topLeftP.x = 0;
    topLeftP.y = player.y + 6;
    bottomRightP.x =  12;
    bottomRightP.y =  player.y + 7;
    
    boundingBox knifeBox;
    knifeBox.topLeft = topLeftP;
    knifeBox.bottomRight = bottomRightP;
    player.knife_boundingBox = knifeBox;
    
    player_draw(0xFFFFFF);
    player_knife_draw();

}

void player_move(double x_acc) {
    int y_pos;
    y_pos = player.y + (-1 * x_acc * 20);
    if (y_pos < 10) {
        y_pos = 10;   
    }
    if (y_pos > 112 - (get_compost_tallest_height() * 11)) {
        y_pos = 112 - (get_compost_tallest_height() * 11);
    }
    int y_prev = player.y;
    player.y = y_pos;
    uLCD.BLIT(0,y_prev, PLAYER_WIDTH, PLAYER_HEIGHT, player_mask);
    uLCD.BLIT(0,y_pos, PLAYER_WIDTH, PLAYER_HEIGHT, player_sprite);
    
    if (player.player_has_knife) {
        uLCD.BLIT(0, y_prev + 6, KNIFE_WIDTH, KNIFE_HEIGHT, knife_mask);
        uLCD.BLIT(0, y_pos + 6, KNIFE_WIDTH, KNIFE_HEIGHT, knife_sprite);
        
        player.knife_boundingBox.topLeft.y = y_pos + 6;
        player.knife_boundingBox.bottomRight.y = y_pos + 7;
         player.knife_boundingBox.topLeft.x = 0;
        player.knife_boundingBox.bottomRight.x = 11;
        
        
    } else {
        point currTopLeft = player.knife_boundingBox.topLeft;
        
        player.knife_boundingBox.topLeft.x += 4;
        player.knife_boundingBox.bottomRight.x += 4;
        
        if (player.knife_boundingBox.bottomRight.x >= 125) {
            player.player_has_knife = true;
            uLCD.BLIT(currTopLeft.x, currTopLeft.y, KNIFE_WIDTH, KNIFE_HEIGHT, knife_mask);
            uLCD.BLIT(0, y_pos + 6, KNIFE_WIDTH, KNIFE_HEIGHT, knife_sprite);
            player.knife_boundingBox.topLeft.y = y_pos + 6;
            player.knife_boundingBox.bottomRight.y = y_pos + 7;
            player.knife_boundingBox.topLeft.x = 0;
            player.knife_boundingBox.bottomRight.x = 12;
            player.strikes--;
            
        } else {
            uLCD.BLIT(currTopLeft.x, currTopLeft.y, KNIFE_WIDTH, KNIFE_HEIGHT, knife_mask);
            uLCD.BLIT(player.knife_boundingBox.topLeft.x, currTopLeft.y, KNIFE_WIDTH, KNIFE_HEIGHT, knife_sprite);
        }
        
    
    }
    
    


}

void player_moveDown(void) { 

}

void player_throw(void) {
    if (player.player_has_knife) {
        player.player_has_knife = false; 
    } 
}

void player_knife_draw(void) {
    uLCD.BLIT(0, player.y + 6, KNIFE_WIDTH, KNIFE_HEIGHT, knife_sprite);
 
}

void player_knife_return(void) {
    player.player_has_knife = true;
    uLCD.BLIT(player.knife_boundingBox.topLeft.x, player.knife_boundingBox.topLeft.y, KNIFE_WIDTH, KNIFE_HEIGHT, knife_mask);
    player.knife_boundingBox.topLeft.x = 0;
    player.knife_boundingBox.topLeft.y = player.y + 6;

}

// ==== player_private.h implementation ====
void player_draw(int color) {
    uLCD.BLIT(0, player.y, PLAYER_WIDTH, PLAYER_HEIGHT, player_sprite); 
}

void player_score_inc(void) {

}

int get_player_strikes() {
    return player.strikes;
}