From 2120f83e1cecd6e8b3e9f350d760d26f0677b2aa Mon Sep 17 00:00:00 2001 From: /nick haya <74699483+The-SGPT@users.noreply.github.com> Date: Tue, 8 Feb 2022 13:54:19 +0800 Subject: [PATCH] New stuff $- Refined camera a lil bit\n- Alpha support :)\n- Splash screem :O --- README.md | 2 + bin/data/black.png | Bin 0 -> 339 bytes bin/data/flixel.ogg | Bin 0 -> 33629 bytes bin/data/powered.png | Bin 0 -> 1001 bytes src/Main.cpp | 93 ++++++++++++++++++++++++++++++++----------- src/Render.cpp | 21 ++++++++-- src/Render.hpp | 6 +++ 7 files changed, 96 insertions(+), 26 deletions(-) create mode 100644 bin/data/black.png create mode 100644 bin/data/flixel.ogg create mode 100644 bin/data/powered.png diff --git a/README.md b/README.md index 89d5ca9..6aa3f4b 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,8 @@ You know how to place them. It's fucking common sense. - After successfully making the build files, run `cmake --build --config Release` to build it without the use of VStudio. - If everything worked well, congratulations! You have just compiled a shitty program. +`src/Main.cpp` should contain example code with some explanations. + # Licensing The sole libraries themselves (SDL and BASS) are under different licenses ofc, so you'll have to deal with that diff --git a/bin/data/black.png b/bin/data/black.png new file mode 100644 index 0000000000000000000000000000000000000000..00e8199e693916c0c5519ba2cd27df539173ffc4 GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0y~yU}|7sV0^&B3=}#3|KN2X#aJBV?!>U}oXkrghb7(7 z*O7r?V?XzwL{=c*AiyWY6-bi=qU>e3ff_gqJR*x382Ao@Fyrz36)8Z$HJ&bxAr-gY r9yDYG@(wNd>YvM=uK;8YKEP)h`Hz8d)qz7&Ah&tC`njxgN@xNAKcgma literal 0 HcmV?d00001 diff --git a/bin/data/flixel.ogg b/bin/data/flixel.ogg new file mode 100644 index 0000000000000000000000000000000000000000..29fbbecd68cc4b33cc6a31b2343cb08f5e04173e GIT binary patch literal 33629 zcmeEucTiMMv*_$DNiq^739Doz2g$H13L+9E3P{dLkepTol%OC=RB{p|i2{-r$pV6) z(!eYPMFYrrl-57yJr@48yjr^2mhqIx9p8@kE0_Y zL1_necKZxd$MyV=gzJf`xpHq+_Phi3za&}2Ur_u|3w=9R zTLE=98>FM1x$YSPh6QHa1p|cyJ(jp}%{#@2TFDGqbpA zWoafVgcLECkU|OzTZtmg#3efWE9s-;C~! z(E)%Gfb>F%c)#|#y$Qd^@04i#p5dNm3zd3(pH)FmYjt^yew|R6J5tP&763ee<{?UU zo4WqHZjXgwo=TIEw+;6c8ZPvjAyh7I#Bll2tFi09DCYpcc$zyi!5^h62A(vjvex-5!98b1}3U7Y)Yb_Q20Ymq-I>K@H^=tdc z5X$Qikbhmy#({*s1uC>WE5t$m3-9l+kN^#l2;6>2)A@n9`#W>@CUXxJhvs>X?;`yD zTH@NGays{J{=BE7r(1Vvtpzhg&u9HE9)98QBXG2HAKsuXLEE`YkWuDks z$ymIQutGSn#E~SOJ7QMy#hmgB4!c-upLm<_0D+?~~8@H-ts`eNY+0!dvoI1~aIgU0*U`{;)pO*Pu6f z{#_Lf^c4R34Oe;9y}$6zfVzLnH+lQ5QED3M5kB(9q3WD5^mJhPcCGsyt_;Ha&*j`1 z`=FqCGaI6BO$kN@ydW^Axs-e970aV&@>l7??L65m&tKe9$$z4u#lV&GDEMsTNB}}8 z|DB63h0&WoyOj6VjhOdcc5DRiSMHBpBAtA=OJUPD>E+TU${VD@pZZkz#DD5qJTIS5 zbuX4ucE~9oFualjF*r}oUx|Vy6=@lBjey}yKEe{+AgM?XCjR${+hFgZy7>Lya?d6+ z#LR#B`HY!$^gNvm5Tp+h49IB_}?$Jgdj!fkJ# zs9itzcY^sX+8SsthBEh_lsNg z>sbBtv>L9kx?dS!P!TY>_iuU7}R z@-zR7dR|1tlEf2@huU^U;yN8F!oM3`yB){kGOQZA9Qbn&h5W%0M#dk*%Cu- z%l`BJe|2NOixBI<<$s_+h}3CdQ2zUl*^lf_`~PA5KTQFM?O^24AKmqgOIP4%Nf>y_ek~SxyH^ZtY0xWX%cx3?G@uhB zOD5?5yS(G5f!cy9#KwSUPF)T>vOI+I8< z#11aoAHsc|#w_`NPgpbnXc!?t1M07+|M;d%eL4UnV=W9I`$96-3I@*h06c{dx-xgdUsxERV);l+4L~=-mJvk*!!?HEzK%(ZgN~3}%#s68 z;)5v-n$A8k%{j^V9J|c+mwb2n6<=D}B`+j#igjFG*RX9@0Z4X$nU;+I<&(MSlWCh=@bw{I=eD9I&0TFBow!-s_=WIH?&REp z0$vDF&)E{CqhoBF{7-SUfNak{t&K0FF8E|}N95)g6q9Ju+=L7tNP!RHLqMUTg5T9B zTp3hkeBs$&kj2aJe;UOZqwNX`3ZV4{eh+Fe=wZc>j_Xob^pItfPh)|zabCv?Lxzr;%2Fa!#+75)1(m(hlExW7w|R0NK}{gr`uZaCBgp

>!63(C`3evN*IV_5DD9H%Qqhh0P3!g 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 H|LFe#*jMa? literal 0 HcmV?d00001 diff --git a/bin/data/powered.png b/bin/data/powered.png new file mode 100644 index 0000000000000000000000000000000000000000..e9e27bff8c3ff3769c81df1096fbf270bfeae5c3 GIT binary patch literal 1001 zcmeAS@N?(olHy`uVBq!ia0y~yU}|7sV0^&B3=}#3|KN2X#aJBV?!>U}oXkrghb7(7 z*O7r?V?XzwL{=c*AiyWYRai#4WM&AEM%V3VG(Sd$zTNjF@|Q&}daJs={a>u~dG`YuyT8@)Twi?zv^F>Rj$4_szHU6a3j zZt-4EPK^ggrP6jkNPX59FaK?~{J)BpFubaQTp55^O;-Br2SKhm!`vK^s2d^a_^YdI+pZ99h)<%#QJzf1=);T3K0RX1_ Be0l%? literal 0 HcmV?d00001 diff --git a/src/Main.cpp b/src/Main.cpp index a5585d0..1c15a25 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -17,24 +17,29 @@ class MainState : public State { Object title2; Object title3; Object title4; + // cameras are rects SDL_Rect camera = {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT}; + // to override a function, just state back the name of it with a virtual keyword + // before it virtual void Create() { + playMusic("data/canyon.ogg"); + // i know that this isnt the best idea to do this + // yeah, im just lazy title.create(0, 0, "data/bg.png"); - AddObject(&title); - + AddObject(&title); title2.create(640, 0, "data/bg.png"); - AddObject(&title2); - + AddObject(&title2); title3.create(640, 480, "data/bg.png"); AddObject(&title3); - title4.create(0, 480, "data/bg.png"); AddObject(&title4); + // example of animated object objs.create(0, 0, "data/smile.png"); AddObject(&objs); objs.AddAnimation("idle", {{0, 0, 50, 50}, {50, 0, 50, 50}}); objs.PlayAnimation("idle"); objs.framerate = 1; + // set cameras :) objs.setCamera(&camera); title.setCamera(&camera); title2.setCamera(&camera); @@ -42,63 +47,105 @@ class MainState : public State { title4.setCamera(&camera); title.scale.y = 0; + // center object objs.centerSelf(); - title.center.x = WINDOW_WIDTH/2; - title.center.y = WINDOW_HEIGHT/2; - + // offsets :) title2.offset.x = 640; title3.offset = {640, 480}; title4.offset.y = 480; + // example of a text object text.create(50, 480 - 100, "Welcome to the funny application\nMake yourself at home :)\n- haya", "data/monogram.ttf", {255, 255, 255, 255}, TTF_STYLE_NORMAL, 40); AddObject(&text); } int yvel = 0; int xvel = 0; float elaped = 0; + // update virtual void Update(float dt) { + // to get current keyboard input, use SDL_GetKeyboardState const Uint8* kb = SDL_GetKeyboardState(NULL); + // :) yvel = -kb[SDL_SCANCODE_UP] + kb[SDL_SCANCODE_DOWN]; xvel = -kb[SDL_SCANCODE_LEFT] + kb[SDL_SCANCODE_RIGHT]; objs.x = objs.x + xvel*2; objs.y = objs.y + yvel*2; - title.scale.y = sin(elaped); - title.scale.x = cos(elaped); - title2.scale.y = sin(elaped); - title2.scale.x = cos(elaped); - title3.scale.y = sin(elaped); - title3.scale.x = cos(elaped); - title4.scale.y = sin(elaped); - title4.scale.x = cos(elaped); + // cool scaling + title.scale.y = sin(elaped/100); + title.scale.x = cos(elaped/100); + title2.scale.y = cos(elaped/100); + title2.scale.x = sin(elaped/100); + title3.scale.y = sin(elaped/100); + title3.scale.x = sin(elaped/100); + title4.scale.y = cos(elaped/100); + title4.scale.x = cos(elaped/100); + // make camera point to an object pointTo(&camera, objs); + // center shit title.centerSelf(); title2.centerSelf(); title3.centerSelf(); title4.centerSelf(); text.centerSelf(); - text.scale.y = cos(elaped*10)*2; + // :) + text.scale.y = cos(elaped/10)*2; text.offset.y = -240/2; - elaped += 0.01; + // for the sin and cos shit + elaped += 1; } - }; +MainState m2; + +class SplashScreen : public State { + Object bg; + Object black; + int tick[2]; + virtual void Create() { + bg.create(0, 0, "data/powered.png"); + AddObject(&bg); + + black.create(0, 0, "data/black.png"); + AddObject(&black); + + black.alpha = 0; + + playSound("data/flixel.ogg"); + + // basic timer + tick[0] = Sec2Tick(1.0); + tick[1] = Sec2Tick(3.0); + + //SDL_SetRenderDrawColor( renderer, 0xFF, 0xFF, 0xFF, 0xFF ); + } + int now[2] = {0, 0}; + virtual void Update(float dt) { + for (int i = 0; i < 2; i++) { + now[i]++; + } + if (!(now[0] < tick[0])) { + black.alpha += 1; + } + if (!(now[1] < tick[1])) { + SwitchState(&m2); + } + } +}; + +SplashScreen m; + int main() { Init("SDLflixel :)))))"); - MainState m; - SwitchState(&m); - playMusic("data/canyon.ogg"); - if (!Update()) { return 0; } diff --git a/src/Render.cpp b/src/Render.cpp index 54d093f..40b8f9a 100644 --- a/src/Render.cpp +++ b/src/Render.cpp @@ -15,7 +15,7 @@ using namespace Render; SDL_Window* Render::window; SDL_Renderer* Render::renderer; SDL_Event Render::event; -State* Render::current_state; +State* Render::current_state = nullptr; array Render::audioArray; anshub::AudioOut Render::music; string Render::currentMusic = ""; @@ -40,6 +40,7 @@ Render::State::~State() { void Render::Object::create(int x, int y, string path){ this->_tex = IMG_LoadTexture(renderer, path.c_str()); + SDL_SetTextureBlendMode(_tex, SDL_BLENDMODE_BLEND); if (_tex == nullptr) { cout << "texture failed to lod" << endl; } @@ -82,6 +83,11 @@ void Render::Object::Draw(float dt) { _sc_w = _w; _h = h*scale.y; _sc_h = _h; + + if (alpha > 100) + alpha = 100; + + SDL_SetTextureAlphaMod(this->_tex, (this->alpha/100)*255); } void Render::Object::setCamera(SDL_Rect* cam_p) { @@ -259,6 +265,11 @@ bool Render::Update() { } void Render::SwitchState(State* state) { + if (current_state != nullptr) { + for (int i = 0; i < current_state->get_obj().size(); i++) { + SDL_DestroyTexture(current_state->get_obj()[i]->_tex); + } + } current_state = state; current_state->Create(); } @@ -268,7 +279,7 @@ bool Render::playSound(string path, int id) { for (int i = 0; i < MAX_SE; i++) { if (audioArray[i].NowPlaying(false).size() == 0) { audioArray[i].Play(path); - cout << "Played dat boi. audio id no: " << i << endl; + cout << "Played " << path << ". audio id no: " << i << endl; break; } } @@ -282,10 +293,14 @@ bool Render::playSound(string path, int id) { bool Render::playMusic(string path) { if (path == "") { music.Stop(currentMusic); + cout << "Stopped music from " << path << "." << endl; + return true; } if (currentMusic != "") { music.Stop(currentMusic); + cout << "Stopped music from " << path << "." << endl; } + cout << "Played " << path << " as music." << endl; music.Play(path, true); currentMusic = path; @@ -293,7 +308,7 @@ bool Render::playMusic(string path) { } void Render::pointTo(SDL_Rect* camera, Object object) { - camera->x = ( object.x + (object.w / 2)/2 ) - WINDOW_WIDTH / 2; + camera->x = ( object.x + (object.w / 2) ) - WINDOW_WIDTH / 2; camera->y = ( object.y + (object.h / 2) ) - WINDOW_HEIGHT / 2; if( camera->x < 0 ) diff --git a/src/Render.hpp b/src/Render.hpp index f7cbfd8..6c58e03 100644 --- a/src/Render.hpp +++ b/src/Render.hpp @@ -67,6 +67,8 @@ namespace Render { float angle = 0.00001; + float alpha = 100; + SDL_Point center = {0, 0}; map get_properties() const; @@ -216,5 +218,9 @@ namespace Render { * Make the camera center itself on an object. */ void pointTo(SDL_Rect* camera, Object object); + + inline int Sec2Tick(float time) { + return FRAMERATE*time; + } } #endif \ No newline at end of file