From 19344d644b2c9de7c9f7215527ea2f8678dfe9df Mon Sep 17 00:00:00 2001 From: Alfred Burgess <alfred.burgess95@gmail.com> Date: Mon, 18 Dec 2023 17:49:57 +0800 Subject: [PATCH] Created font-fild and text rendering --- assets/MonoRegular-jEmAR.ttf | Bin 0 -> 11908 bytes assets/arrow.png | Bin 0 -> 1476 bytes include/colour.h | 2 +- include/components/cFontfile.h | 28 +++++++++++++++ include/components/cTexture.h | 18 +++++++--- include/entities/eButton.h | 21 +++++++++++ include/window.h | 13 ++++++- src/components/cFontfile.cpp | 53 +++++++++++++++++++++++++++ src/components/cTexture.cpp | 13 ++----- src/entities/eButton.cpp | 5 +++ src/game-engine.cpp | 28 ++++----------- src/window.cpp | 63 +++++++++++++-------------------- 12 files changed, 168 insertions(+), 76 deletions(-) create mode 100644 assets/MonoRegular-jEmAR.ttf create mode 100644 assets/arrow.png create mode 100644 include/components/cFontfile.h create mode 100644 include/entities/eButton.h create mode 100644 src/components/cFontfile.cpp create mode 100644 src/entities/eButton.cpp diff --git a/assets/MonoRegular-jEmAR.ttf b/assets/MonoRegular-jEmAR.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4a91568d61829b0200e5bd9e7a268d037162a39d GIT binary patch literal 11908 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 Y&byE&U7{?I%7Y{LQ{`$6iXH#|0Q;e&cmMzZ literal 0 HcmV?d00001 diff --git a/assets/arrow.png b/assets/arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..197722bde7a16b1d053fc1b97f34723530d3d7de GIT binary patch literal 1476 zcmV;#1v~nQP)<h;3K|Lk000e1NJLTq003kF003kN0ssI2|9}Dm00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1zAZ%K~#8N?VK%h z+dvS8x1ckbDG4kLEDS8^jA3CwfJtTyQ&w137+7f7pHLVWXc$;n7-(3SzR8}qo0Tl- z<ok?o`+)d#mXyb<)k=y>kM!7>NR#D3lQoH-^m9RrCTpBEt%<`dXc!*o;e<|_tVw*K zFU}OgENd`-=nv}D6<xidH_jBoOlqJ)oza=IqvA9EnW@LgmbTyNd#@voOS;6gW0%F6 zPU+NH*#(OFC;B8mqs(LSk;>wdw4zm46Jklrzx4MjedU)IbiwaB7FnYQ8WusH%-0>m zE#30q>y$OBMu*YFNLroKxeUG@S@(30-*BQJWDU-4H*~Y1jad)#p5F7!U-U}`YnA1t zhNCxw_Tk?1vb8E&)(j&OUTV6ywG<@_wR4_}Zs5SVrt3SpGn<%)TWL|UW}6DD#(>rG zR<L_|JhLp6Sl+GPh-zd2Y?OE48-3H`nPmya8g`eP<}Apm(3~qvkp<8+KV7Wu0%vy^ zG;`A6_Mmf@p&(fRzHn{f_Vn4;n$~7c0^H^cm&KqDluHc+dU3rJ4Z(sIhqMKwxD8h! z3+yZWa@`A?NJI0kQ1B)Yc3i(G3RA*NyrXyVlFMzQB3S^wR<v?E-U%d^nI8(bfx2XA zP`TW1unV*oW=<&F1}c@MO)Y6@mIlXdsYY4a6sp+absd)k1LspT!){~M$@>2^IFKoQ z3lx`r-J27=xBZyXWyzIC5K};|``+T;bC?r_Y*F9#V~Uog55OR%x@QT5IZ?RL&M^qe zl@+|G|DYdkb^OG17iO9ptw>hzqJB^JQmS}`{4>JLbfdM%3T_H(K(*!-ex#4QLVk(R zGY7^&&rn{1o7&P=iaL_(H~r>u9zn=VfCS`0T!iXzrYu>(8--iC)z6&u4Kg?MQkK*; zc?zv5NS5w^f|$}PL|~nIsT+MMOYWw@njU9Lk%fZ=r##+K)R)6e0ckJMI(7SX@rXlD z1|<#kpiqP?bFg%~!5N@7iH_bC%4egGI37XBh$g?R;e%y1IP38W@q<~!NG(T5EpxAn zl_jUD-h*Wxa-zV;Ag8}B`a|O5&b=s8mTnY+9DP8i>hSX+ee-%j3%t?2C{UJZsm#*Z zNUC;k8+6eJqfRt4jmah}c=O5V3&4q~Dspw0IZPf|kxXr9BiZ4Vs?e&_3SlNN8DvE= zg-%WW%tS5#rz1@nhgr&`mKDhqkmegXGH?dm2lnLYt4zD--LZ7C@X6~>FRUqDs%G~e z`ZQ|p2r`Leq4Ci@dRSBXmt4`xEcF7Sc|F<gI_N_W5!Mutg#ADt4qr2$9DDE0Mwg{c zbswc1j!vskZS6kd%8FOcg@Gqm!HFm<fvJ>f1!BocU<#y6D-d2*)D}ULIITcnSy5XA zL*ldo!DN|)LPRwM2A;D=B7iJtLWR-^6{AHk?EAa^s2nQG9CwJ=3B|~L74vufQJF8R zd)y^RC`Om|ecyqL!Aw~up^|B0(wBC|PZpOasNsF(NORl?={p8tsw^aqafC>mP)x40 z0wb~pz7L4&@{|cBr0*Dn5m|*~laQrj5JqI_Cu_M<Nt2~x5JqGbMXruPs7Y4F($3T* zD`RPAYLdmK5N13XO_m4M$jaL^FxAM)+cYrM$dc-wrD<TQk;SGEW;`WLmIrmnDxtcA zI%Jhl-9a6)N~rFj4q0ppVa5~FWO>kJdC+8e&}4bgWO>kJc~F6@hq3P;C8Gja*>AlI z70Akd>s_co7Mntt@$^(6OP&>)@$^(6i=T>LNBe)+rc;5ea%i$VXtF$LvOH+AJZQ2! eXtE|lkN*HlT2HY1*5t(i0000<MNUMnLSTY6g}H73 literal 0 HcmV?d00001 diff --git a/include/colour.h b/include/colour.h index 80e875f..bf2ad7c 100644 --- a/include/colour.h +++ b/include/colour.h @@ -1,7 +1,7 @@ #ifndef __COLOUR_H__ #define __COLOUR_H__ -#include <cstdint>; +#include <cstdint> struct RGBA{ uint8_t r; diff --git a/include/components/cFontfile.h b/include/components/cFontfile.h new file mode 100644 index 0000000..cb06e74 --- /dev/null +++ b/include/components/cFontfile.h @@ -0,0 +1,28 @@ +#ifndef __COMPONENTS__FONTFILE_H__ +#define __COMPONENTS__FONTFILE_H__ + +#include <SDL_image.h> +#include <SDL_ttf.h> + +#include "components/cTexture.h" +#include "colour.h" + +class cFontfile : public cTexture +{ + static bool ttf_isInit; + public: + cFontfile(); + void renderText( std::string str ); + bool loadFromFile( std::string path ); + + void setColour( Colour colour ); + void setColour( uint8_t red, uint8_t green, uint8_t blue ); + private: + TTF_Font* _font = NULL; + Colour _colour = Colour(0, 0, 0); + SDL_Color _col = { 0xff, 0xff, 0x00 }; + uint8_t _fontsize = 28; +}; + + +#endif // __COMPONENTS__FONTFILE_H__ \ No newline at end of file diff --git a/include/components/cTexture.h b/include/components/cTexture.h index 0afd96c..d76eea8 100644 --- a/include/components/cTexture.h +++ b/include/components/cTexture.h @@ -6,11 +6,10 @@ #include <string> #include "components/components-generic.h" #include "window.h" +#include "logger.h" #include "colour.h" #include "maths/vec2.h" - - class cTexture : public CComponentGeneric { public: @@ -18,8 +17,14 @@ class cTexture : public CComponentGeneric ~cTexture(); bool loadFromFile( std::string path ); void free(); - void render( Vec2 pt ); - void render( Vec2 pt, SDL_Renderer *renderer, SDL_Rect *clip = NULL ); + void render( + SDL_Renderer *renderer, + Vec2 pt, + SDL_Rect *clip = NULL, + double angle = 0, + SDL_Point* center = NULL, + SDL_RendererFlip flip = SDL_FLIP_NONE + ); int getWidth(){ return this->_width; } int getHeight(){ return this->_height; } @@ -29,10 +34,13 @@ class cTexture : public CComponentGeneric void setBlendMode( SDL_BlendMode blending ); void setAlpha( uint8_t alpha ); - private: + protected: + Logger &_logger; SDL_Texture* _texture; uint16_t _width; uint16_t _height; }; +class cFontfile; + #endif // __COMPONENTS__TEXTURE_H__ diff --git a/include/entities/eButton.h b/include/entities/eButton.h new file mode 100644 index 0000000..90f3c62 --- /dev/null +++ b/include/entities/eButton.h @@ -0,0 +1,21 @@ +#ifndef __ENTITIES__BUTTON +#define __ENTITIES__BUTTON + +#include <SDL.h> + +#include "entities/entity-generic.h" +#include "maths/maths.h" +#include "components/cTexture.h" + +class eButton : public EntityGeneric +{ + public: + void setPosition( Vec2 pos ); + void handleEvent( SDL_Event* evt ); + void render(); + private: + Vec2 _pos; + cTexture _sprite; +}; + +#endif // __ENTITIES__BUTTON diff --git a/include/window.h b/include/window.h index 52f660f..c40d6a0 100644 --- a/include/window.h +++ b/include/window.h @@ -10,8 +10,13 @@ #include "logger.h" #include "colour.h" #include "maths/vec2.h" -#include "components/cTexture.h" + + +// #include "components/cFontfile.h" +// #include "components/cTexture.h" + +class cFontfile; class cTexture; const uint16_t SCREEN_HEIGHT = 600; @@ -54,12 +59,15 @@ class Window SDL_Surface* loadSurface( std::string path ); Logger& _logger; SDL_Window* _window; + size_t _frame = 0; SDL_Texture* _activeTexture; Colour _screenModulation; cTexture* _background; cTexture* _character; + cTexture* _arrow; cTexture* _textureSprite; + cFontfile* _fontFile; SDL_Rect _sprites[4]; uint8_t _alpha = 0xff; @@ -84,4 +92,7 @@ class Window void clean(); }; + + + #endif // __WINDOW_H__ \ No newline at end of file diff --git a/src/components/cFontfile.cpp b/src/components/cFontfile.cpp new file mode 100644 index 0000000..519d56b --- /dev/null +++ b/src/components/cFontfile.cpp @@ -0,0 +1,53 @@ +#include "components/cFontfile.h" + +bool cFontfile::ttf_isInit = false; + +cFontfile::cFontfile() + : cTexture() +{ + if( ! cFontfile::ttf_isInit ) + { + if( TTF_Init() == -1 ) + { printf( "SDL_ttf could not initialize! SDL_ttf Error: %s\n", TTF_GetError() ); } + else { cFontfile::ttf_isInit = true; } + } +} + + +bool cFontfile::loadFromFile( std::string path ) +{ + this->_logger.info( "Loading Font: "+path ); + this->free(); + SDL_Texture* texture = NULL; + this->_font = TTF_OpenFont( path.c_str(), this->_fontsize ); + if( this->_font == NULL ) + { printf( "Failed to load lazy font! SDL_ttf Error: %s\n", TTF_GetError() ); } + else + { + + } + return texture != NULL; +} + +void cFontfile::renderText( std::string str ) +{ + free(); + + SDL_Surface* textSurface = TTF_RenderText_Solid( this->_font, str.c_str(), this->_col ); + + if( textSurface == NULL ) + { /* error */ return; } + this->_texture = SDL_CreateTextureFromSurface( Window::renderer, textSurface ); + if( ! this->_texture ) + { /* error */ return; } + + this->_width = textSurface->w; + this->_height = textSurface->h; + + SDL_FreeSurface( textSurface ); +} + +void cFontfile::setColour( Colour colour ) { this->_colour = colour; } +void cFontfile::setColour( uint8_t red, uint8_t green, uint8_t blue ) { + this->_colour = Colour( red, green, blue ); +} \ No newline at end of file diff --git a/src/components/cTexture.cpp b/src/components/cTexture.cpp index 499ae0f..2562f51 100644 --- a/src/components/cTexture.cpp +++ b/src/components/cTexture.cpp @@ -2,6 +2,7 @@ cTexture::cTexture() : _texture( NULL ), + _logger( Logger::instance() ), _width( 0 ), _height( 0 ) {} @@ -50,7 +51,7 @@ void cTexture::setColour( uint8_t red, uint8_t green, uint8_t blue ) { SDL_SetTe void cTexture::setBlendMode( SDL_BlendMode blending ) { SDL_SetTextureBlendMode( this->_texture, blending ); } void cTexture::setAlpha( uint8_t alpha ) { SDL_SetTextureAlphaMod( this->_texture, alpha ); } -void cTexture::render( Vec2 pt, SDL_Renderer *renderer, SDL_Rect* clip ) +void cTexture::render( SDL_Renderer *renderer, Vec2 pt, SDL_Rect* clip, double angle, SDL_Point* center, SDL_RendererFlip flip ) { if( this->_width && this->_height ) { @@ -60,14 +61,6 @@ void cTexture::render( Vec2 pt, SDL_Renderer *renderer, SDL_Rect* clip ) quad.w = clip->w; quad.h = clip->h; } - SDL_RenderCopy( renderer, this->_texture, clip, &quad ); - } -} -void cTexture::render( Vec2 pt ) -{ - if( Window::renderer != NULL ) - { - SDL_Rect quad = { (int)pt.x, (int)pt.y, this->_width, this->_height }; - SDL_RenderCopy( Window::renderer, this->_texture, NULL, &quad ); + SDL_RenderCopyEx( renderer, this->_texture, clip, &quad, angle, center, flip ); } } \ No newline at end of file diff --git a/src/entities/eButton.cpp b/src/entities/eButton.cpp new file mode 100644 index 0000000..b4f5fc3 --- /dev/null +++ b/src/entities/eButton.cpp @@ -0,0 +1,5 @@ +#include "entities/eButton.h" + +void eButton::setPosition( Vec2 pos ){} +void eButton::handleEvent( SDL_Event* evt ){} +void eButton::render(){} \ No newline at end of file diff --git a/src/game-engine.cpp b/src/game-engine.cpp index e24ab03..2563fa2 100644 --- a/src/game-engine.cpp +++ b/src/game-engine.cpp @@ -36,8 +36,8 @@ void GameEngine::run() this->init(); this->isRunning = true; this->_frame = 0; - std::chrono::system_clock::time_point now = std::chrono::system_clock::now(); - std::time_t _frametime = std::chrono::system_clock::to_time_t(now); + std::chrono::system_clock::time_point now = std::chrono::high_resolution_clock::now(); + std::time_t _frametime = std::chrono::high_resolution_clock::to_time_t(now); while( this->isRunning ) { this->update(); } } @@ -47,13 +47,15 @@ void GameEngine::update() this->handleInput(); this->_entityManager.update(); - std::chrono::system_clock::time_point now = std::chrono::system_clock::now(); + std::chrono::system_clock::time_point now = std::chrono::high_resolution_clock::now(); if ( ++this->_frame % 1 == 0 ) { - std::time_t cTime = std::chrono::system_clock::to_time_t(now); + std::time_t cTime = std::chrono::high_resolution_clock::to_time_t(now); size_t delTime = cTime - this->_frametime; this->_frametime = cTime; - printf( "Frame: %i at %.2f fps\n", this->_frame, delTime == 0 ? 0.0 : 1.0 / delTime ); + std::cout << cTime << std::endl; + // printf( "Frame: %i at %.2f fps\n", this->_frame, delTime == 0 ? 0.0 : 1.0 / delTime ); + printf( "Frame: %i at %.2f fps over %i s\n", this->_frame, delTime == 0 ? 0.0 : 1.0 / delTime, delTime ); } this->_window->update(); } @@ -70,22 +72,6 @@ void GameEngine::handleInput() { case SDL_QUIT: this->close(); break; case SDLK_ESCAPE: this->close(); break; - // case SDLK_PAGEUP: - // this->_screenModulation.brighten( 5 ); - // break; - // case SDLK_PAGEDOWN: - // this->_screenModulation.darken( 5 ); - // break; - // case SDLK_PLUS: - // case SDLK_KP_PLUS: - // case SDLK_GREATER: - // if( this->_alpha < 0xFF ) this->_alpha += 5; - // break; - // case SDLK_LESS: - // case SDLK_MINUS: - // case SDLK_KP_MINUS: - // if( this->_alpha > 5 ) this->_alpha -= 5; - // break; } } } diff --git a/src/window.cpp b/src/window.cpp index abd0c53..abe9cd5 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1,4 +1,6 @@ #include "window.h" +#include "components/cFontfile.h" +#include "components/cTexture.h" bool Window::sdlIsInit = false; SDL_Renderer* Window::renderer = NULL; @@ -14,7 +16,9 @@ Window::Window() this->_renderSurface = nullptr; this->_background = new cTexture(); this->_character = new cTexture(); + this->_arrow = new cTexture(); this->_water = new cTexture(); + this->_fontFile = new cFontfile(); this->_textureSprite = new cTexture(); this->_screenModulation = Colour( 0x88, 0x88, 0x88, 0xFF ); @@ -38,6 +42,7 @@ void Window::initialise() this->_toClose = false; this->_hasInit = true; + this->_frame = 0; } SDL_Texture* Window::loadTexture( std::string path ) @@ -85,6 +90,9 @@ void Window::loadMedia() { this->_background->loadFromFile( "assets/background.png" ); this->_character->loadFromFile( "assets/person.png" ); + this->_arrow->loadFromFile( "assets/arrow.png" ); + this->_fontFile->loadFromFile( "assets/MonoRegular-jEmAR.ttf" ); + this->_fontFile->setColour( 255, 255, 0 ); if( this->_water->loadFromFile( "assets/water_animated.png" ) ) { // Set Frame 1 @@ -156,20 +164,19 @@ void Window::update() { SDL_Rect bg = this->_createViewport( 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT ); this->_background->setColour( this->_screenModulation ); - this->_background->render( {0,0}, this->_renderer ); - this->_character->render( {SCREEN_HEIGHT/3,SCREEN_HEIGHT/3}, this->_renderer ); - // this->_textureSprite->render( {0,0}, this->_renderer ); + this->_background->render( this->_renderer, {0,0} ); + this->_character->render( this->_renderer, {SCREEN_HEIGHT/3,SCREEN_HEIGHT/3} ); + // this->_textureSprite->render( this->_renderer, {0,0} ); //Render top left sprite this->_textureSprite->setAlpha( this->_alpha ); - this->_textureSprite->render( {0, 0}, this->_renderer, &this->_sprites[ 0 ] ); + this->_textureSprite->render( this->_renderer, {0, 0}, &this->_sprites[ 0 ] ); //Render top right sprite - this->_textureSprite->render( {SCREEN_WIDTH - this->_sprites[ 1 ].w, 0}, this->_renderer, &this->_sprites[ 1 ] ); + this->_textureSprite->render( this->_renderer, {SCREEN_WIDTH - this->_sprites[ 1 ].w, 0}, &this->_sprites[ 1 ] ); //Render bottom left sprite - this->_textureSprite->render( {0, SCREEN_HEIGHT - this->_sprites[ 2 ].h}, this->_renderer, &this->_sprites[ 2 ] ); + this->_textureSprite->render( this->_renderer, {0, SCREEN_HEIGHT - this->_sprites[ 2 ].h}, &this->_sprites[ 2 ] ); //Render bottom right sprite - this->_textureSprite->render( {SCREEN_WIDTH - this->_sprites[ 3 ].w, SCREEN_HEIGHT - this->_sprites[ 3 ].h}, this->_renderer, &this->_sprites[ 3 ] ); - + this->_textureSprite->render( this->_renderer, {SCREEN_WIDTH - this->_sprites[ 3 ].w, SCREEN_HEIGHT - this->_sprites[ 3 ].h}, &this->_sprites[ 3 ] ); SDL_Rect core = this->_createViewport( SCREEN_WIDTH / 4, SCREEN_HEIGHT / 4, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2 ); @@ -183,7 +190,13 @@ void Window::update() { this->_drawPoint( { SCREEN_WIDTH / 2, i } ); } + // Water + this->_water->render( this->_renderer, { 0, 0 }, &this->_waterTicks[ this->_frame % this->_waterFrames ] ); + + SDL_Rect overlay = this->_createViewport( 0, 0, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2 ); + this->_arrow->render( this->_renderer, {100, 100}, NULL, this->_frame % 360 ); + const int hexRad = 10; const int hexSpacing = 1; const int drawHexRad = hexRad + hexSpacing; @@ -202,7 +215,11 @@ void Window::update() { // SDL_RenderCopy( this->_renderer, this->_activeTexture, NULL, NULL ); + overlay = this->_createViewport( 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT ); + this->_fontFile->renderText( std::to_string(this->_frame) ); + this->_fontFile->render( this->_renderer, {50,50} ); + ++this->_frame; SDL_RenderPresent( this->_renderer ); } @@ -296,36 +313,6 @@ void Window::spawn() void Window::processInput() { - SDL_Event e; - while( SDL_PollEvent( &e ) ) - { - // std::cout << "event" << std::endl; - if( e.type == SDL_QUIT ) this->_toClose = true; - else if( e.type == SDL_KEYDOWN ) - { - switch( e.key.keysym.sym ) - { - case SDL_QUIT: this->_toClose = true; break; - case SDLK_ESCAPE: this->_toClose = true; break; - case SDLK_PAGEUP: - this->_screenModulation.brighten( 5 ); - break; - case SDLK_PAGEDOWN: - this->_screenModulation.darken( 5 ); - break; - case SDLK_PLUS: - case SDLK_KP_PLUS: - case SDLK_GREATER: - if( this->_alpha < 0xFF ) this->_alpha += 5; - break; - case SDLK_LESS: - case SDLK_MINUS: - case SDLK_KP_MINUS: - if( this->_alpha > 5 ) this->_alpha -= 5; - break; - } - } - } } void Window::clean() -- GitLab