#include "player.h" #include #include #include "background.h" /* extern bopti_image_t img_walking; extern bopti_image_t img_running; extern bopti_image_t img_static; */ extern bopti_image_t img_rectangle; static uint32_t framecounter = 0; extern Background MyBackground; Player::Player( int16_t _x, int16_t _y ) { x = libnum::num(_x); y = libnum::num(_y); width = 8; height = 8; speed = 10; xmin = (int) x - width; xmax = (int) x + width; ymin = (int) y - height; ymax = (int) y + height; last_tick = rtc_ticks(); } Player::~Player() { } void Player::Update( float dt, libnum::num ax, libnum::num ay ) { libnum::num DeltaTime = libnum::num( dt / 60000.0f ); vx += ax * DeltaTime; vy += ay * DeltaTime; libnum::num xtemp = x + vx * DeltaTime; libnum::num ytemp = y + vy * DeltaTime; if (MyBackground.CanGo( this )) { x = xtemp; y = ytemp; } xmin = (int) x - width; xmax = (int) x + width; ymin = (int) y - height; ymax = (int) y + height; } void Player::Render( void ) { uint32_t temptick = rtc_ticks(); if (temptick-last_tick>=10) { last_tick = temptick; framecounter++; } /* if (action==RUN) { uint8_t frameinternal = framecounter % 8; azrp_subimage_p8_effect(xmin, ymin, &img_running, frameinternal*16, 0, 16, 16, direction==RIGHT ? DIMAGE_NONE : IMAGE_HFLIP ); } else if (action==WALK) { uint8_t frameinternal = framecounter % 7; azrp_subimage_p8_effect(xmin, ymin, &img_walking, frameinternal*16, 0, 16, 16, direction==RIGHT ? DIMAGE_NONE : IMAGE_HFLIP ); } else if (action==STATIC) { uint8_t frameinternal = framecounter % 8; azrp_subimage_p8_effect(xmin, ymin, &img_static, frameinternal*16, 0, 16, 16, DIMAGE_NONE); } */ azrp_image_p8_effect(xmin, ymin, &img_rectangle, DIMAGE_NONE); } void Player::Set_Speed( uint8_t _sp ) { speed = _sp; } void Player::Walk_Left( float dt ) { libnum::num a = libnum::num( dt / 60000.0f ); x -= a * libnum::num( speed/3 ); this->direction = LEFT; this->action = WALK; } void Player::Walk_Right( float dt ) { libnum::num a = libnum::num( dt / 60000.0f ); x += a * libnum::num( speed/3 ); this->direction = RIGHT; this->action = WALK; } void Player::Run_Left( float dt ) { libnum::num a = libnum::num( dt / 60000.0f ); x -= a * libnum::num( speed ); this->direction = LEFT; this->action = RUN; } void Player::Run_Right( float dt ) { libnum::num a = libnum::num( dt / 60000.0f ); x += a * libnum::num( speed ); this->direction = RIGHT; this->action = RUN; } void Player::Jump( float dt ) { if (this->action==WALK) { //this->vx = speed / 3; this->vy = -speed / 2; } else if (this->action==RUN) { //this->vx = speed; this->vy = -speed; } else { //this->vx = 0; this->vy = -speed /2; } this->direction = LEFT; this->action = JUMP; if (this->direction==LEFT) { this->vx = -this->vx; } } void Player::No_Order( float dt ) { if (this->action == RUN || this->action == WALK) { this->action == BREAK; } }