From 4e66ba1b80fae2b7d1341f0f51de81941ccd3a9d Mon Sep 17 00:00:00 2001 From: Slyvtt Date: Mon, 23 Jan 2023 22:03:09 +0100 Subject: [PATCH] Working Catmull-Rom Splines for loopping trajectories of enemies --- CMakeLists.txt | 2 +- assets-cg/Sprites/Enemies/Enemy_Red_Lvl1.png | Bin 0 -> 1299 bytes assets-cg/icon-sel.png | Bin 8388 -> 23097 bytes assets-cg/icon-uns.png | Bin 4629 -> 26047 bytes src/collections.cpp | 26 ++++++++++ src/collections.h | 1 + src/enemy.cpp | 35 ++++++++++--- src/enemy.h | 3 ++ src/main.cpp | 7 ++- src/trajectory.cpp | 52 ++++++++++++++++++- src/trajectory.h | 3 ++ 11 files changed, 116 insertions(+), 13 deletions(-) create mode 100644 assets-cg/Sprites/Enemies/Enemy_Red_Lvl1.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 8cc5e5b..e2fdfe4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,7 +43,7 @@ set(ASSETS_cg assets-cg/Sprites/Enemies/mainship2.png assets-cg/Sprites/Enemies/Enemy_Blue_Lvl1.png - + assets-cg/Sprites/Enemies/Enemy_Red_Lvl1.png # ... ) diff --git a/assets-cg/Sprites/Enemies/Enemy_Red_Lvl1.png b/assets-cg/Sprites/Enemies/Enemy_Red_Lvl1.png new file mode 100644 index 0000000000000000000000000000000000000000..290f94dd1273f7ee28122714d6cfea33c3ca03fe GIT binary patch literal 1299 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 literal 8388 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 eAO6GMGy8vrh%z;G%GZ4W0000 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 LNkvXXu0mjfMjhGA diff --git a/src/collections.cpp b/src/collections.cpp index e801fe4..75cb835 100644 --- a/src/collections.cpp +++ b/src/collections.cpp @@ -59,6 +59,32 @@ void Create_Ennemies( void ) Enemy* e4 = new Enemy( 348, 112, 1); e4->Set_Speed_Vector( 1, 3, 3 ); MyEnemies.push_back( e4 ); + + + + + Point2D *A = new Point2D( 348, 112 ); + Point2D *B = new Point2D( 371, 199 ); + Point2D *C = new Point2D( 198, 149 ); + Point2D *D = new Point2D( 25, 199 ); + Point2D *E = new Point2D( 25, 25 ); + Point2D *F = new Point2D( 198, 75 ); + Point2D *G = new Point2D( 371, 25 ); + + + Trajectory *MyTrajectory= new Trajectory(); + MyTrajectory->AddPoint( A ); + MyTrajectory->AddPoint( B ); + MyTrajectory->AddPoint( C ); + MyTrajectory->AddPoint( D ); + MyTrajectory->AddPoint( E ); + MyTrajectory->AddPoint( F ); + MyTrajectory->AddPoint( G ); + + Enemy* e5 = new Enemy( 348, 112, 2); + e5->hasTrajectory = true; + e5->pathToFollow = MyTrajectory; + MyEnemies.push_back( e5 ); } diff --git a/src/collections.h b/src/collections.h index b0c133b..172e2f7 100644 --- a/src/collections.h +++ b/src/collections.h @@ -9,6 +9,7 @@ #include "enemy.h" #include "MyAzurShaders.h" #include "impact.h" +#include "trajectory.h" void Create_Player_Shoot( uint8_t id ); diff --git a/src/enemy.cpp b/src/enemy.cpp index a112795..84cbbb8 100644 --- a/src/enemy.cpp +++ b/src/enemy.cpp @@ -5,6 +5,7 @@ extern bopti_image_t img_mainship2; extern bopti_image_t img_Enemy_Blue_Lvl1; +extern bopti_image_t img_Enemy_Red_Lvl1; Enemy::Enemy( int16_t _x, int16_t _y, uint8_t _id ) { @@ -28,6 +29,12 @@ Enemy::Enemy( int16_t _x, int16_t _y, uint8_t _id ) height = img_Enemy_Blue_Lvl1.height/2; speed = 2; } + else if (ID==2) + { + width = img_Enemy_Red_Lvl1.width/2; + height = img_Enemy_Red_Lvl1.height/2; + speed = 2; + } xmin = (int) x - width; xmax = (int) x + width; @@ -38,22 +45,33 @@ Enemy::Enemy( int16_t _x, int16_t _y, uint8_t _id ) if (ID==0) life = 400; else if (ID==1) life = 200; + else if (ID==2) life = 100; } Enemy::~Enemy() { - - + if (hasTrajectory) + delete(pathToFollow); } void Enemy::Update( float dt ) { - libnum::num a = libnum::num( dt / 60000.0f ); - x += a * libnum::num( dirx * speed ); - y += a * libnum::num( diry * speed ); + if (!hasTrajectory) + { + libnum::num a = libnum::num( dt / 60000.0f ); + x += a * libnum::num( dirx * speed ); + y += a * libnum::num( diry * speed ); - if (xazrp_width-width) dirx=-1*dirx; - if (yazrp_height-height) diry=-1*diry; + if (xazrp_width-width) dirx=-1*dirx; + if (yazrp_height-height) diry=-1*diry; + } + else + { + int tempX, tempY; + pathToFollow->CalculatePosition( dt, speed, true, &tempX, &tempY ); + x = libnum::num( tempX ); + y = libnum::num( tempY ); + } xmin = (int) x - width; xmax = (int) x + width; @@ -65,8 +83,9 @@ void Enemy::Update( float dt ) void Enemy::Render( void ) { - if (ID==0) azrp_image_p8_effect(xmin, ymin, &img_mainship2, IMAGE_VFLIP); + if (ID==0) azrp_image_p8_effect(xmin, ymin, &img_mainship2, DIMAGE_NONE); if (ID==1) azrp_image_p8_effect(xmin, ymin, &img_Enemy_Blue_Lvl1, DIMAGE_NONE); + if (ID==2) azrp_image_p8_effect(xmin, ymin, &img_Enemy_Red_Lvl1, DIMAGE_NONE); } diff --git a/src/enemy.h b/src/enemy.h index 3fabb02..cbe9924 100644 --- a/src/enemy.h +++ b/src/enemy.h @@ -9,6 +9,7 @@ #include #include "bullet.h" +#include "trajectory.h" class Enemy @@ -31,6 +32,8 @@ class Enemy uint8_t speed; // speed of this ennemy bool toberemoved; + bool hasTrajectory = false; + Trajectory *pathToFollow; private: int8_t dirx, diry; // vector of the current direction of the ennemy (TODO : to implement more complex displacement pattern) diff --git a/src/main.cpp b/src/main.cpp index 87b2595..e3ce2d5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,4 +1,4 @@ -#define DEBUG_MODE 1 +#define DEBUG_MODE 0 #include #include @@ -253,12 +253,13 @@ static void get_inputs( float dt ) if(keydown(KEY_8) && usb_is_open()) {record = true; }; if(keydown(KEY_9) && usb_is_open()) {record = false; }; if(keydown(KEY_DEL) && usb_is_open()) {textoutput = true;}; + #endif if(keydown(KEY_SHIFT) && keydown(KEY_F1)) {texttodraw=0;} if(keydown(KEY_SHIFT) && keydown(KEY_F2)) {texttodraw=1;} if(keydown(KEY_SHIFT) && keydown(KEY_F3)) {texttodraw=2;} if(keydown(KEY_SHIFT) && keydown(KEY_F4)) {texttodraw=3;} - #endif + if(keydown(KEY_LEFT)) @@ -344,6 +345,8 @@ void FreeMoreRAM( void ) } +extern bopti_image_t img_Enemy_Red_Lvl1; + int main(void) { diff --git a/src/trajectory.cpp b/src/trajectory.cpp index 2fa618c..a3755a7 100644 --- a/src/trajectory.cpp +++ b/src/trajectory.cpp @@ -2,12 +2,60 @@ Trajectory::Trajectory( ) { - + accumulatedTime = 0.0f; } Trajectory::~Trajectory( ) { - + for( auto& p : ControlPoints ) + delete( p ); + ControlPoints.clear(); +} + + +void Trajectory::AddPoint( Point2D *p ) +{ + ControlPoints.push_back( p ); +} + + +void Trajectory::CalculatePosition( float time, uint16_t speed, bool looped, int *xreturn, int *yreturn ) +{ + accumulatedTime += speed * time / 2000000.0f; + if (accumulatedTime>ControlPoints.size()) accumulatedTime-=ControlPoints.size(); + + libnum::num t = libnum::num( accumulatedTime - (int) accumulatedTime ); + + int p0, p1, p2, p3; + + if (!looped) + { + p1 = (int) accumulatedTime + 1; + p2 = p1 + 1; + p3 = p2 + 1; + p0 = p1 - 1; + } + else + { + p1 = (int) accumulatedTime; + p2 = (p1 + 1) % ControlPoints.size(); + p3 = (p2 + 1) % ControlPoints.size(); + p0 = p1 >= 1 ? p1 - 1 : ControlPoints.size() - 1; + } + + libnum::num tt = t * t; + libnum::num ttt = tt * t; + + libnum::num q1 = -ttt + 2*tt - t; + libnum::num q2 = 3*ttt - 5*tt + libnum::num( 2 ); + libnum::num q3 = -3*ttt + 4*tt + t; + libnum::num q4 = ttt - tt; + + 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; } \ No newline at end of file diff --git a/src/trajectory.h b/src/trajectory.h index 2e820c3..2c89283 100644 --- a/src/trajectory.h +++ b/src/trajectory.h @@ -15,9 +15,12 @@ class Trajectory Trajectory( ); ~Trajectory( ); + void AddPoint( Point2D *p ); + void CalculatePosition( float time, uint16_t speed, bool looped, int *xreturn, int *yreturn ); std::vector ControlPoints; bool isLoop; + float accumulatedTime; };