NppClone/src/player.cpp

95 lines
2.2 KiB
C++

#include "parameters.h"
#include "level.h"
#include "player.h"
#include "utilities.h"
#include <gint/rtc.h>
#include <num/num.h>
#include <num/num.h>
/*
extern bopti_image_t img_walking;
extern bopti_image_t img_running;
extern bopti_image_t img_static;
*/
extern bopti_image_t img_circle;
static uint32_t framecounter = 0;
extern Level MyLevel;
#define SPEEDRUN 9.0f
#define SPEEDJUMP 9.0f
#define MAXFALLSPEED 15.0f
#define MAXRUNSPEED 10.0f
Player::Player(int16_t _x, int16_t _y) {
this->currx = libnum::num(_x); // initial position
this->curry = libnum::num(_y);
this->vx = libnum::num(0.0f); // initial velocity
this->vy = libnum::num(0.0f);
this->ax = libnum::num(
0.0f); // initial acceleration (ie. gravity chosen at 1 unit - be careful
// of the sign, y axis oriented to the bottom )
this->ay = libnum::num(0.0f);
this->tileX = (int)this->currx / 16;
this->tileY = (int)this->curry / 16;
last_tick = rtc_ticks();
}
Player::~Player() {}
void Player::Update(float dt) {
libnum::num DeltaTime = libnum::num(dt / 100.0f);
this->vy += this->ay * DeltaTime;
this->vx += this->ax * DeltaTime;
// if (this->vx >= MAXRUNSPEED) this->vx = MAXRUNSPEED;
// if (this->vy >= MAXFALLSPEED) this->vy = MAXFALLSPEED;
this->nextx = this->currx + this->vx * DeltaTime;
this->nexty = this->curry + this->vy * DeltaTime;
if (MyLevel.CanGo()) {
this->currx = this->nextx;
this->curry = this->nexty;
}
this->tileX = ((int)this->currx) / 16;
this->tileY = ((int)this->curry) / 16;
MyLevel.UpdateBorders();
}
void Player::Render(void) {
uint32_t temptick = rtc_ticks();
if (temptick - last_tick >= 10) {
last_tick = temptick;
framecounter++;
}
azrp_image_p8_effect((int)(this->currx * 16.0f), (int)(this->curry * 16.0f),
&img_circle, DIMAGE_NONE);
}
void Player::Left(float dt) { this->vx += LEFT; }
void Player::Right(float dt) { this->vx += RIGHT; }
void Player::Up(float dt) { this->vy += TOP; }
void Player::Down(float dt) { this->vy += BOTTOM; }
void Player::Jump(float dt) { this->vy -= SPEEDJUMP; }
void Player::Nothing(float dt) {
this->vx *= libnum::num(0.95);
this->vy *= libnum::num(0.95);
}