ELEC2645 (2018/19) / Mbed 2 deprecated el17lw

Dependencies:   mbed

Skateboarder/Stakeboarder.cpp

Committer:
lewisgw
Date:
2019-03-26
Revision:
10:8bf3713d9e9c
Parent:
9:fff2009f826e
Child:
14:9861fe85c803

File content as of revision 10:8bf3713d9e9c:

#include "Skateboarder.h"

// Define all the different possible sprite arrays.
int skate_right[17][10] =   { 
  { 0,0,0,1,1,1,0,0,0,0 },
  { 0,0,0,1,1,1,1,0,0,0 },
  { 0,1,1,1,1,1,1,0,0,0 },
  { 0,0,0,1,0,1,1,0,0,0 },
  { 0,0,0,1,1,1,0,0,0,0 },
  { 0,0,0,1,1,0,0,0,0,0 },
  { 0,0,0,1,1,0,0,0,0,0 },
  { 0,1,1,1,1,1,1,1,0,0 },
  { 1,1,0,1,1,0,0,1,1,0 },
  { 1,0,0,1,1,0,0,0,0,0 },
  { 0,0,0,1,1,0,0,0,0,0 },
  { 0,0,0,1,1,0,0,0,0,0 },
  { 0,0,0,1,0,1,0,0,0,0 },
  { 0,0,0,1,0,0,1,0,0,0 },
  { 1,0,0,1,0,0,0,1,0,1 },
  { 0,1,1,1,1,1,1,1,1,0 },
  { 0,0,1,0,0,0,0,1,0,0 },  
};

int skate_left[17][10] =   { 
  { 0,0,0,0,1,1,1,0,0,0 },
  { 0,0,0,1,1,1,1,0,0,0 },
  { 0,0,0,1,1,1,1,1,1,0 },
  { 0,0,0,1,1,0,1,0,0,0 },
  { 0,0,0,0,1,1,1,0,0,0 },
  { 0,0,0,0,0,1,1,0,0,0 },
  { 0,0,0,0,0,1,1,1,0,0 },
  { 0,1,1,1,1,1,1,1,0,0 },
  { 0,0,0,1,1,1,1,1,1,0 },
  { 0,0,0,0,1,1,0,0,1,0 },
  { 0,0,0,0,1,1,0,0,0,1 },
  { 0,0,0,0,1,1,0,0,0,0 },
  { 0,0,0,1,0,1,0,0,0,0 },
  { 0,0,1,0,0,1,0,0,0,0 },
  { 1,1,0,0,0,1,0,0,0,1 },
  { 0,1,1,1,1,1,1,1,1,0 },
  { 0,0,0,1,0,0,0,0,1,0 },    
};

int skate_stand_left[17][10] =   { 
  { 0,0,0,0,1,1,0,0,0,0 },
  { 0,0,0,1,1,1,1,0,0,0 },
  { 0,0,0,1,1,1,1,1,1,0 },
  { 0,0,0,1,0,0,1,0,0,0 },
  { 0,0,0,1,1,1,1,0,0,0 },
  { 0,0,0,0,1,1,0,0,0,0 },
  { 0,0,0,1,1,1,1,0,0,0 },
  { 0,0,1,1,1,1,0,1,0,0 },
  { 1,1,0,1,1,1,0,1,0,0 },
  { 0,0,0,1,1,1,0,0,0,0 },
  { 0,0,1,1,1,1,0,0,0,0 },
  { 1,0,1,0,0,1,0,0,0,0 },
  { 1,1,0,0,0,1,0,0,0,0 },
  { 0,1,0,0,0,1,0,0,0,0 },
  { 1,0,1,0,0,1,0,0,0,0 },
  { 0,0,0,1,0,1,0,0,0,0 },
  { 0,0,1,0,1,1,1,0,0,0 },  
};

int skate_stand_right[17][10] =   { 
  { 0,0,0,1,1,0,0,0,0,0 },
  { 0,0,1,1,1,1,0,0,0,0 },
  { 1,1,1,1,1,1,0,0,0,0 },
  { 0,0,1,0,0,1,0,0,0,0 },
  { 0,0,1,1,1,1,0,0,0,0 },
  { 0,0,0,1,1,0,0,0,0,0 },
  { 0,0,1,1,1,1,0,0,0,0 },
  { 0,1,1,1,1,0,1,0,0,0 },
  { 1,0,1,1,1,0,0,1,0,0 },
  { 1,0,1,1,1,0,0,0,0,0 },
  { 0,0,1,1,1,1,1,0,0,0 },
  { 0,0,1,0,0,0,1,0,1,0 },
  { 0,0,1,0,0,0,1,1,0,0 },
  { 0,0,1,0,0,0,1,0,1,0 },
  { 0,0,1,0,0,1,0,0,0,0 },
  { 0,0,1,0,1,0,0,0,0,0 },
  { 0,1,1,1,0,1,0,0,0,0 }, 
};

int skate_duck_right[17][10] =   { 
  { 0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,1,1,0,0,0,0 },
  { 0,0,0,1,1,1,1,0,0,0 },
  { 0,1,1,1,1,1,1,0,0,0 },
  { 0,0,0,1,0,0,1,0,0,0 },
  { 0,0,0,0,1,1,0,0,0,0 },
  { 0,0,1,1,1,1,1,1,0,0 },
  { 0,1,0,1,1,1,1,0,1,1 },
  { 1,0,0,1,1,1,1,0,0,0 },
  { 0,0,0,1,1,1,1,0,0,0 },
  { 0,0,1,1,0,0,1,1,0,0 },
  { 1,0,1,1,0,0,1,1,0,1 },
  { 0,1,1,1,1,1,1,1,1,0 },
  { 0,0,1,0,0,0,0,1,0,0 }, 
};

int skate_duck_left[17][10] =   {
  { 0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,1,1,0,0,0,0 },
  { 0,0,0,1,1,1,1,0,0,0 },
  { 0,0,0,1,1,1,1,1,1,0 },
  { 0,0,0,1,0,0,1,0,0,0 },
  { 0,0,0,0,1,1,0,0,0,0 },
  { 0,0,1,1,1,1,1,1,0,0 },
  { 1,1,0,1,1,1,1,0,1,0 },
  { 0,0,0,1,1,1,1,0,0,1 },
  { 0,0,0,1,1,1,1,0,0,0 },
  { 0,0,1,1,0,0,1,1,0,0 },
  { 1,0,1,1,0,0,1,1,0,1 },
  { 0,1,1,1,1,1,1,1,1,0 },
  { 0,0,1,0,0,0,0,1,0,0 },   
};

// Constructor and destructor.
Skateboarder::Skateboarder() {} 

Skateboarder::~Skateboarder() {}

void Skateboarder::set_x_position_and_sprite(
    float joy_x, 
    int moving_counter, 
    Skate_Direction direction, 
    float joy_y) {
  _skate_direction = direction;
  _moving_counter = moving_counter;
  process_x_variables(joy_x);    
  _x = 40 + 0.4*_moving_counter;
  check_duck(joy_y);
}
    
void Skateboarder::process_x_variables(float joy_x) {
  // Sets the value of the Sprite_value enum according to joystick direction 
  // and previous direction if the joystick is not moving. Adds or subtracts
  // one from moving counter for horizontal movement. 
  if (joy_x > 0.1) {
    _moving_counter = _moving_counter++;
    _skate_direction = Right;
    _sprite_value = Skate_right;
  } else if (joy_x < -0.1) {
    _moving_counter = _moving_counter--;
    _skate_direction = Left;
    _sprite_value = Skate_left; 
  } else if (_skate_direction == Left) {
    _sprite_value = Stand_left;
  } else { 
    _sprite_value = Stand_right;
  } 
}
    
void Skateboarder::check_duck(float joy_y) {
  // Re-write the Sprite_value if the duck condition is met.
  if (joy_y < -0.1 && _skate_direction == Right) {
    _sprite_value = Skate_duck_right;         
  } else if (joy_y < -0.1 && _skate_direction == Left) {
    _sprite_value = Skate_duck_left;        
  }
}
    
    
void Skateboarder::set_y_position(bool jump, int jump_counter, int level_condition) {
  _jump_counter = jump_counter;
  _level_condition = level_condition; 
  // Set jump counter to 40 if button is pressed. Second condition is to restrict 
  // double jump. Keep subtracting jump counter from default y position, subtracting
  // one from the jump counter on every iteration until it is equal to 0.
  if (jump && _jump_counter < 10) _jump_counter = 40;
  if (_jump_counter !=0) _jump_counter--;        
  if(_level_condition == 1 && jump){
    _level = 5;
  } else if (_level_condition == 0) {
    _level = 23;
  }
  _y = _level - 0.5*_jump_counter;        
}



int Skateboarder::get_x_position() {
  return _x;
}

int Skateboarder::get_moving_counter() {
  return _moving_counter;
}
  
int Skateboarder::get_y_position() {
  return _y;
}

int Skateboarder::get_jump_counter() {
  return _jump_counter;
}

Skate_Direction Skateboarder::get_direction() {
  return _skate_direction;
}
    
Sprite_value Skateboarder::get_sprite_value() {
  return _sprite_value;
}   

int * Skateboarder::get_sprite(Sprite_value sprite) {
  if (sprite == Skate_right) {
    return *skate_right;
  } else if (sprite == Skate_left) {
    return *skate_left;
  } else if (sprite == Stand_left) {
    return *skate_stand_left;
  } else if (sprite == Skate_duck_right) {
    return *skate_duck_right;
  } else if (sprite == Skate_duck_left) {
    return *skate_duck_left;
  } else {
    return *skate_stand_right;
  }
} 

void Skateboarder::fall(bool fall_flag) {
  _fall_flag = fall_flag;
  _y++;
  if (_y == 80) {
    _fall_flag = false;
    _reset_flag = true;
  }
}
     
bool Skateboarder::get_fall_flag() {
  return _fall_flag;
}
     
bool Skateboarder::get_reset_flag() {
  return _reset_flag;
}
     
void Skateboarder::set_reset_flag(bool flag) {
  if (flag) {
    _reset_flag = true;
  } else {
    _reset_flag = false;
  }
}