Shmup/src/shmup/bonus.cpp

96 lines
2.0 KiB
C++

#include "../config.h"
#include "bonus.h"
#include <num/num.h>
#include <gint/rtc.h>
extern bopti_image_t img_emp_circ;
extern bopti_image_t img_life_bonus;
extern bopti_image_t img_sat_bonus;
Bonus::Bonus( int16_t _x, int16_t _y, uint8_t _id )
{
x = libnum::num( _x );
y = libnum::num( _y );
ID = _id;
if (ID==0)
{
width = img_life_bonus.width/2;
height = img_life_bonus.height/2;
speed = 0;
}
else if (ID==1)
{
width = img_sat_bonus.width/2;
height = img_sat_bonus.height/2;
speed = 0;
}
xmin = (int) x - width;
xmax = (int) x + width;
ymin = (int) y - height;
ymax = (int) y + height;
toberemoved = false;
currentframe = libnum::num(0);
accumulatedTime = 0.0f;
}
Bonus::~Bonus()
{
if (hasTrajectory)
pathToFollow->DeleteRegistry();
}
void Bonus::Update( float dt )
{
if (!hasTrajectory)
{
/*
libnum::num a = libnum::num( dt / 60000.0f );
x += a * libnum::num( dirx * speed );
y += a * libnum::num( diry * speed );
if (x<width || x>azrp_width-width) dirx=-1*dirx;
if (y<height || y>azrp_height-height) diry=-1*diry;
*/
}
else
{
pathToFollow->CalculatePosition( &accumulatedTime, dt, speed, true, &x, &y );
}
xmin = (int) x - width;
xmax = (int) x + width;
ymin = (int) y - height;
ymax = (int) y + height;
libnum::num a = libnum::num( dt / 150000.0f );
currentframe += a;
if (currentframe >7 ) currentframe = libnum::num(0);
}
void Bonus::Render( void )
{
uint8_t dximg = (int) currentframe * 15;
uint8_t sz = (int) currentframe;
azrp_subimage_p8( (int) x-sz, (int) y-sz, &img_emp_circ, dximg+7-sz, 7-sz, sz*2+1, sz*2+1, DIMAGE_NONE );
if (ID==0)
{
azrp_image_p8_effect(xmin, ymin, &img_life_bonus, DIMAGE_NONE);
}
else if (ID==1)
{
azrp_image_p8_effect(xmin, ymin, &img_sat_bonus, DIMAGE_NONE);
}
}