90 lines
1.8 KiB
C++
90 lines
1.8 KiB
C++
#include "Arduino.h"
|
|
|
|
class Player
|
|
{
|
|
public:
|
|
Player(int[3], int, int);
|
|
void Lives(int);
|
|
int Lives();
|
|
void Kill();
|
|
bool Alive();
|
|
void moveto(int);
|
|
void moveby(int);
|
|
int color[3];
|
|
int position;
|
|
bool attacking;
|
|
int last_attack;
|
|
void updateState(bool tilted, bool wobbled, int time);
|
|
void startAttack(int time);
|
|
int _lastState; // 0-> idle; 1-> move; 2 -> attack
|
|
private:
|
|
int _lives;
|
|
int _state;
|
|
|
|
int _attackDuration;
|
|
};
|
|
|
|
Player::Player(int player_color[3], int lives, int attackDuration){
|
|
_lives = lives;
|
|
attacking = false;
|
|
|
|
color[0] = player_color[0];
|
|
color[1] = player_color[1];
|
|
color[2] = player_color[2];
|
|
|
|
_attackDuration = attackDuration;
|
|
|
|
_lastState = 0; // start as idle;
|
|
}
|
|
|
|
void Player::updateState(bool tilted, bool wobbled, int time) {
|
|
|
|
// attack timed out
|
|
if(attacking && last_attack+_attackDuration < time) attacking = false;
|
|
|
|
// no longer attacking
|
|
if (!wobbled) attacking = false;
|
|
|
|
_lastState = 0;
|
|
if (tilted) _lastState = 1; // moving
|
|
if (wobbled) _lastState = 2; // attacking
|
|
}
|
|
|
|
void Player::startAttack(int time){
|
|
// if already attacking just return
|
|
if (attacking) return;
|
|
|
|
// I got tired of attacking, I should be idle or moving for a little before attacking again.
|
|
if (_lastState == 2) return;
|
|
|
|
last_attack = time;
|
|
attacking = true;
|
|
}
|
|
|
|
void Player::Lives(int n){
|
|
_lives = n;
|
|
}
|
|
|
|
bool Player::Alive(){
|
|
return _lives > 0;
|
|
}
|
|
|
|
void Player::Kill(){
|
|
_lives--;
|
|
if (_lives < 0) _lives = 0;
|
|
}
|
|
|
|
int Player::Lives(){
|
|
return _lives;
|
|
}
|
|
|
|
void Player::moveby(int amount){
|
|
position += amount;
|
|
if (position<0) position=0;
|
|
}
|
|
|
|
void Player::moveto(int amount){
|
|
position = amount;
|
|
if (position<0) position=0;
|
|
}
|