From 3c3ead5bf5b7c2c58a9219d068bd61eb150c195d Mon Sep 17 00:00:00 2001 From: Slyvtt Date: Fri, 27 Jan 2023 22:52:13 +0100 Subject: [PATCH] scrolling background --- TODO.txt | 26 ++++++++++++++++++++++++++ src/background.cpp | 12 ++++++++---- src/background.h | 6 +++++- src/enemy.cpp | 5 +---- src/main.cpp | 3 +++ src/trajectory.cpp | 6 +++--- src/trajectory.h | 4 ++-- 7 files changed, 48 insertions(+), 14 deletions(-) create mode 100644 TODO.txt diff --git a/TODO.txt b/TODO.txt new file mode 100644 index 0000000..415a56c --- /dev/null +++ b/TODO.txt @@ -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 \ No newline at end of file diff --git a/src/background.cpp b/src/background.cpp index 872c57a..3742446 100644 --- a/src/background.cpp +++ b/src/background.cpp @@ -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; } \ No newline at end of file diff --git a/src/background.h b/src/background.h index 66b25ce..8b2d6c3 100644 --- a/src/background.h +++ b/src/background.h @@ -8,7 +8,7 @@ #include #include - +#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; + }; diff --git a/src/enemy.cpp b/src/enemy.cpp index 84cbbb8..975fa7b 100644 --- a/src/enemy.cpp +++ b/src/enemy.cpp @@ -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; diff --git a/src/main.cpp b/src/main.cpp index b782407..077dd7d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -179,6 +179,9 @@ static void update( float dt ) MyPlayerBullets.erase( MyPlayerBullets.begin() + i ); } } + + MyBackground.Update( dt ); + } diff --git a/src/trajectory.cpp b/src/trajectory.cpp index a3755a7..10d5702 100644 --- a/src/trajectory.cpp +++ b/src/trajectory.cpp @@ -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; } \ No newline at end of file diff --git a/src/trajectory.h b/src/trajectory.h index 2c89283..e367a6d 100644 --- a/src/trajectory.h +++ b/src/trajectory.h @@ -7,7 +7,7 @@ #include #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 ControlPoints; bool isLoop;