scrolling background

This commit is contained in:
Sylvain PILLOT 2023-01-27 22:52:13 +01:00
parent 91b9826625
commit 3c3ead5bf5
7 changed files with 48 additions and 14 deletions

26
TODO.txt Normal file
View File

@ -0,0 +1,26 @@
The SHMUP Todo list :
Partie décors :
- animer le décors avec le parallaxe (glissement de la droite vers la gauche pour donner l'avancement du vaisseau).
- animer des éléments du décors (clignotements, sprites animés, ...)
- interaction avec le décors (collisions possibles avec certaines tiles) qui imposent donc de suivre un "chemin" dans le niveau
Partie mouvement :
- améliorer le système de trajectoires sur base de Splines pour rendre la vitesse des ennemis plus constante.
- rendre les satellites sur une trajectoire (possibilité d'avoir des patterns plus complexes)
- possibilité de transformer les trajectoires (grossissement/rétrécissement, translation et rotation)
Partie interaction / gameplay :
- implémenter les tirs ennemis (avec une IA minimale)
- implémenter les hits des tirs ennemis sur le joueur
- implémenter les collisions avec les ennemies
- implémenter le tir des satellites
- implémenter un système de bonus (points, upgrade tir/satellites/... )
Autres :
- plein de trucs dont boss "multi-morceaux et multi-hitboxes"
- création de différents levels
- créations de différents ennemis
- créations de différents boss
- créations de différentes armes
- créations de différents bonus

View File

@ -22,18 +22,21 @@ Background::~Background( )
void Background::Render( void )
{
int x0 = (int) xlevel;
int shifttile = (int) (16*xlevel.frac());
for(int i=0; i<25; i++)
for(int i=0; i<=25; i++)
{
for(int j=0; j<14; j++)
{
uint16_t index = j * map_Level1.w + i;
uint16_t index = j * map_Level1.w + (x0+i)%25;
uint16_t currentTile = map_Level1.layers[ index ];
if (currentTile!=0)
{
uint16_t xtile = ((currentTile % 9)-1) * 16;
uint16_t ytile = (currentTile / 9) * 16;
azrp_subimage_p8( i*16, j*16, map_Level1.tileset, xtile, ytile, 16, 16, DIMAGE_NONE );
azrp_subimage_p8( i*16-shifttile, j*16, map_Level1.tileset, xtile, ytile, 16, 16, DIMAGE_NONE );
}
}
}
@ -43,5 +46,6 @@ void Background::Render( void )
void Background::Update( float dt )
{
libnum::num a = libnum::num( dt / 18000.0f );
xlevel += a;
}

View File

@ -8,7 +8,7 @@
#include <azur/gint/render.h>
#include <vector>
#include "num/num.h"
struct Map {
/*width, height and the number of layer of the map*/
@ -31,6 +31,10 @@ class Background
void Update( float dt );
void Render( );
private:
libnum::num xlevel, ylevel;
};

View File

@ -67,10 +67,7 @@ void Enemy::Update( float dt )
}
else
{
int tempX, tempY;
pathToFollow->CalculatePosition( dt, speed, true, &tempX, &tempY );
x = libnum::num( tempX );
y = libnum::num( tempY );
pathToFollow->CalculatePosition( dt, speed, true, &x, &y );
}
xmin = (int) x - width;

View File

@ -179,6 +179,9 @@ static void update( float dt )
MyPlayerBullets.erase( MyPlayerBullets.begin() + i );
}
}
MyBackground.Update( dt );
}

View File

@ -21,7 +21,7 @@ void Trajectory::AddPoint( Point2D *p )
}
void Trajectory::CalculatePosition( float time, uint16_t speed, bool looped, int *xreturn, int *yreturn )
void Trajectory::CalculatePosition( float time, uint16_t speed, bool looped, libnum::num *xreturn, libnum::num *yreturn )
{
accumulatedTime += speed * time / 2000000.0f;
if (accumulatedTime>ControlPoints.size()) accumulatedTime-=ControlPoints.size();
@ -56,6 +56,6 @@ void Trajectory::CalculatePosition( float time, uint16_t speed, bool looped, int
libnum::num tx = libnum::num( 0.5f ) * (ControlPoints[p0]->x * q1 + ControlPoints[p1]->x * q2 + ControlPoints[p2]->x * q3 + ControlPoints[p3]->x * q4);
libnum::num ty = libnum::num( 0.5f ) * (ControlPoints[p0]->y * q1 + ControlPoints[p1]->y * q2 + ControlPoints[p2]->y * q3 + ControlPoints[p3]->y * q4);
*xreturn = (int) tx;
*yreturn = (int) ty;
*xreturn = tx;
*yreturn = ty;
}

View File

@ -7,7 +7,7 @@
#include <vector>
#include "point2D.h"
#include "num/num.h"
class Trajectory
{
@ -16,7 +16,7 @@ class Trajectory
~Trajectory( );
void AddPoint( Point2D *p );
void CalculatePosition( float time, uint16_t speed, bool looped, int *xreturn, int *yreturn );
void CalculatePosition( float time, uint16_t speed, bool looped, libnum::num *xreturn, libnum::num *yreturn );
std::vector<Point2D*> ControlPoints;
bool isLoop;