This code contains the game Starship designed for the STM32F429i-DISC1 board. It requires a keyboard to play.
Dependencies: Starship LCD_DISCO_F429ZI USBHost mbed
Diff: Player.c
- Revision:
- 1:527a11035e0b
- Parent:
- 0:c9afe145b57b
--- a/Player.c Sun Sep 17 17:05:27 2017 +0000 +++ b/Player.c Fri Nov 17 02:23:33 2017 +0000 @@ -1,16 +1,34 @@ #include "Player.h" -void movePlayer(uint8_t x_vel, uint8_t y_vel) + +struct Player player; + +void resetPlayer() { - player.x_pos += x_vel; - player.y_pos -= y_vel; + player.x_pos = LCD_WIDTH/2-PLAYER_WIDTH/2; + player.y_pos = LCD_HEIGHT-PLAYER_HEIGHT-HEALTH_BAR_SIZE; + player.health = PLAYER_STARTING_HEALTH; + player.rapidFireTimer = 0; + player.powerShotTimer = 0; + player.wideShotTimer = 0; + player.shieldTimer = 0; + player.gunTimer = 0; + //player.fastMovementTimer = 0; + player.RFT_Timer = 0; + //player.speedFireTimer = 0; +} +void movePlayer(int8_t x_dir, int8_t y_dir) +{ + player.x_pos += PLAYER_VELOCITY * x_dir; + player.y_pos += PLAYER_VELOCITY * y_dir; + //} if(player.x_pos<=0) player.x_pos=0; else if(player.x_pos>=LCD_WIDTH-PLAYER_WIDTH) player.x_pos = LCD_WIDTH-PLAYER_WIDTH; if(player.y_pos<=0) player.y_pos = 0; - else if(player.y_pos>=LCD_HEIGHT-PLAYER_HEIGHT) - player.y_pos = LCD_HEIGHT-PLAYER_HEIGHT; + else if(player.y_pos>=LCD_HEIGHT-PLAYER_HEIGHT-HEALTH_BAR_SIZE) + player.y_pos = LCD_HEIGHT-PLAYER_HEIGHT-HEALTH_BAR_SIZE; } void updatePlayerTimers() { @@ -19,4 +37,39 @@ player.wideShotTimer = player.wideShotTimer ? player.wideShotTimer-1 : 0; player.shieldTimer = player.shieldTimer ? player.shieldTimer-1 : 0; player.gunTimer = player.gunTimer ? player.gunTimer-1 : 0; -} \ No newline at end of file + //player.fastMovementTimer = player.fastMovementTimer ? player.fastMovementTimer-1 : 0; + //player.speedFireTimer = player.speedFireTimer ? player.speedFireTimer-1 : 0; + player.RFT_Timer = player.RFT_Timer ? player.RFT_Timer-1 : RFT_PERIOD; +} +int16_t getPlayerBulletPos(int8_t XorY) +{ + if(XorY) + return player.x_pos+PLAYER_WIDTH/2-BULLET_SIZE/2; + return player.y_pos-BULLET_SIZE/2; +} +int8_t dealDamageToPlayer() +{ + if(player.shieldTimer) + return 0; + player.health--; + return !(player.health) ? 1 : 0; +} +int8_t shouldFire(int8_t didUserRequestFire) +{ + if(player.rapidFireTimer) + { + return !player.RFT_Timer ? 1 : 0; + } + return !player.gunTimer && didUserRequestFire ? 1 : 0; +} +void callMultiFuncPlayer() +{ + updatePlayerTimers(); +} +/* +int8_t callMultiFuncPlayer(int8_t x_dir, int8_t y_dir, int8_t didUserRequestFire) +{ + movePlayer(x_dir,y_dir); + updatePlayerTimers(); + return shouldFire(didUserRequestFire); +}*/ \ No newline at end of file