From 23e5e88a7c686dde3603be362b83d5925ba0bd80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1si=20Benjamin?= <halftome@sch.bme.hu> Date: Sat, 19 Apr 2014 21:59:38 +0200 Subject: [PATCH] Some graphics, and TextureManager --- Game.cpp | 39 ++++++++++++++++++++++++++++++++-- Game.h | 14 ++++++------ TextureManager.cpp | 48 +++++++++++++++++++++++++++++++++++++++++ TextureManager.h | 19 +++++++++++++++++ gfx/arc1.png | Bin 0 -> 10645 bytes gfx/blocks1.png | Bin 0 -> 16276 bytes gfx/yolo.png | Bin 0 -> 8912 bytes main.cpp | 52 +++++++++++++++------------------------------ 8 files changed, 129 insertions(+), 43 deletions(-) create mode 100644 TextureManager.cpp create mode 100644 TextureManager.h create mode 100644 gfx/arc1.png create mode 100644 gfx/blocks1.png create mode 100644 gfx/yolo.png diff --git a/Game.cpp b/Game.cpp index 0822ff2..bb778ff 100644 --- a/Game.cpp +++ b/Game.cpp @@ -1,7 +1,14 @@ #include "Game.h" - -bool Game::init(const char* title, int xpos, int ypos, int width, int height, int flags) +#include <iostream> +#include "SDL2/SDL.h" +bool Game::init(const char* title, int xpos, int ypos, int width, int height, bool fullscreen) { + int flags = 0; + if(fullscreen) + { + flags = SDL_WINDOW_FULLSCREEN; + } + // attempt to initialize SDL if(SDL_Init(SDL_INIT_EVERYTHING) == 0) { @@ -34,8 +41,12 @@ bool Game::init(const char* title, int xpos, int ypos, int width, int height, in std::cout << "SDL init fail\n"; return false; // SDL init fail } + std::cout << "init success\n"; m_bRunning = true; // everything inited successfully, start the main loop + + m_textureManager.load("gfx/yolo.png", "animate", m_pRenderer); + return true; } @@ -44,3 +55,27 @@ void Game::render() SDL_RenderClear(m_pRenderer); // clear the renderer to the draw color SDL_RenderPresent(m_pRenderer); // draw to the screen } + +void Game::clean() +{ + std::cout << "cleaning game\n"; + SDL_DestroyWindow(m_pWindow); + SDL_DestroyRenderer(m_pRenderer); + SDL_Quit(); +} + +void Game::handleEvents() +{ + SDL_Event event; + if(SDL_PollEvent(&event)) + { + switch (event.type) + { + case SDL_QUIT: + m_bRunning = false; + break; + default: + break; + } + } +} diff --git a/Game.h b/Game.h index 68666f1..0b65249 100644 --- a/Game.h +++ b/Game.h @@ -1,13 +1,14 @@ -#ifndef __Game__ -#define __Game__ +#ifndef GAME_H_INCLUDED +#define GAME_H_INCLUDED #include "SDL.h" +#include "TextureManager.h" class Game { public: - Game(); - ~Game(); - bool init(const char* title, int xpos, int ypos, int width, int height, int flags); + //Game(); + //~Game(); + bool init(const char* title, int xpos, int ypos, int width, int height, bool fullscreen); void render(); void update(); void handleEvents(); @@ -16,7 +17,8 @@ public: private: SDL_Window* m_pWindow; SDL_Renderer* m_pRenderer; - + int m_currentFrame; + TextureManager m_textureManager; bool m_bRunning; }; #endif /* defined(__Game__) */ diff --git a/TextureManager.cpp b/TextureManager.cpp new file mode 100644 index 0000000..97763d4 --- /dev/null +++ b/TextureManager.cpp @@ -0,0 +1,48 @@ +#include "TextureManager.h" +#include <iostream> +#include "SDL2/SDL.h" +#include "SDL2/SDL_image.h" +bool TextureManager::load(std::string fileName, std::string id, SDL_Renderer* pRenderer) +{ + SDL_Surface* pTempSurface = IMG_Load(fileName.c_str()); + if(pTempSurface == 0) + { + return false; + } + SDL_Texture* pTexture = SDL_CreateTextureFromSurface(pRenderer, pTempSurface); + SDL_FreeSurface(pTempSurface); + // everything went ok, add the texture to our list + if(pTexture != 0) + { + m_textureMap[id] = pTexture; + return true; + } + // reaching here means something went wrong + return false; +} + +void TextureManager::draw(std::string id, int x, int y, int width, int height, SDL_Renderer* pRenderer, SDL_RendererFlip flip) +{ + SDL_Rect srcRect; + SDL_Rect destRect; + srcRect.x = 0; + srcRect.y = 0; + srcRect.w = destRect.w = width; + srcRect.h = destRect.h = height; + destRect.x = x; + destRect.y = y; + SDL_RenderCopyEx(pRenderer, m_textureMap[id], &srcRect, &destRect, 0, 0, flip); +} + +void TextureManager::drawFrame(std::string id, int x, int y, int width, int height, int currentRow, int currentFrame, SDL_Renderer *pRenderer, SDL_RendererFlip flip) +{ + SDL_Rect srcRect; + SDL_Rect destRect; + srcRect.x = width * currentFrame; + srcRect.y = height * currentRow; + srcRect.w = destRect.w = width; + srcRect.h = destRect.h = height; + destRect.x = x; + destRect.y = y; + SDL_RenderCopyEx(pRenderer, m_textureMap[id], &srcRect, &destRect, 0, 0, flip); +} diff --git a/TextureManager.h b/TextureManager.h new file mode 100644 index 0000000..8759521 --- /dev/null +++ b/TextureManager.h @@ -0,0 +1,19 @@ +#ifndef TEXTUREMANAGER_H_INCLUDED +#define TEXTUREMANAGER_H_INCLUDED +#include <iostream> +#include <map> +#include "SDL2/SDL.h" +class TextureManager +{ +public: + bool load(std::string fileName, std::string id, SDL_Renderer* pRenderer); + void draw(std::string id, int x, int y, int width, int height, SDL_Renderer* pRenderer, SDL_RendererFlip flip = SDL_FLIP_NONE); + void drawFrame(std::string id, int x, int y, int width, int height, int currentRow, int currentFrame, SDL_Renderer* pRenderer, SDL_RendererFlip flip = SDL_FLIP_NONE); +private: + std::map<std::string, SDL_Texture*> m_textureMap; +}; + + + + +#endif // TEXTUREMANAGER_H_INCLUDED diff --git a/gfx/arc1.png b/gfx/arc1.png new file mode 100644 index 0000000000000000000000000000000000000000..511f64c319e3e9ffe9c31fa90ebd65cdd713514e GIT binary patch literal 10645 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 literal 0 HcmV?d00001 diff --git a/gfx/blocks1.png b/gfx/blocks1.png new file mode 100644 index 0000000000000000000000000000000000000000..40044e1f885c6878ba870b1879e62472e40869ae GIT binary patch literal 16276 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 XC09?_6Ty}+(7tI;S3j3^P6<r_p;Sie literal 0 HcmV?d00001 diff --git a/gfx/yolo.png b/gfx/yolo.png new file mode 100644 index 0000000000000000000000000000000000000000..b76e6fbb9eac7b380ce72b21f407dbe40bcb7ff7 GIT binary patch literal 8912 zcmeAS@N?(olHy`uVBq!ia0y~yU}|7sV4T3g%)r3FsjDc?z`($g?&#~tz;Ki0&Zb*T zAmIX!$YKTtLo)^jxkHRM)zV!U7?>FXd_r9R|Nqaxu!3O)1H+0HAcA4ViVzSp1O)zs z{0Ry9^9MwLsRs`pL@+QUFfimWFjO!wv@kGCU|^U7($BDkf#CoH!x;vK8w?Cj7#Kb< zF#KU)*pT3`CB<b&j?10`k0TWxCu)4oH27TT2)NP{aAQiyof#ny=0v<$67gn5%!dsz zU$!JL7%(u{Ffe#9FoeLYsbOH~U|^WSz_5UUVGRSr9tMUJ3=CHo7#=V%yaC(6;K0D( z!@v;1z>vbgP{6<d*RX_vVFRWH3kwSu7nhKbkc5PUf`WpYnwp-To*6S{tXQ#P%a$!i zjvTpg;lhIl58k|a^XJc>9~(-3Y^nIMr{>3zhCgRI0>G}*U|<N*QHe0oNU$-;aIq-x zai|FKXov~uNQszGkT9bnWkEyEijI;E6KZzMXgRQ;=fsLB7q-lakYP#DU@0)+sBz%v z2;i9#!?PemU`>U<juw$46GSd7khrr(;>8Y`FDDcjRCHK$On6LeL>xS1JOWe#B6MO> zOj2@ea!On(8hjc$LOLeIOqr81XGzYA4I&C55;`#o7AYDYIXWRFCMgXz1sx7G6Fhom z1k6|vv0_bt3QvLoPl*FhhmXLV7=aBr0!J!DZghyenIZ892{4RQ;J?*Hm4QJ%&C|s( zq+-sSS$Df`1&FwLYrKf%eH<&VB;m<4GwzJCM%Sf%|EqoerkR)4&B;odq<`V-!7YpD z6-}#Nf7one{62wCYUdXp`<r+2iP5fx$9WZ!hkO~DyBQf1Hy9}>@Px6kv>ZIu&|nZD zDImb6eVCPze|Zn@$D7*i`#&1?9B*#WcRX;ux#92o?|Fv{Z~c{fbgS#(%v+*$5^^jx zZU=5RHT->R{!;J`3*&JvrZ^s^K2erG6EtI6G-6u5?3QP`ci@8+$Bp-O!r}!wQf?dC z85#2ven_yq$=~nEZ6U|aR3#zsLF@2Rg@pRwv3mq<*EMag5jF3<ZBQe6{eK-tMe9SO z{{F-pH&{zp+Wt?+;bdl}LkX!44iam4I5?W84iiNeybkC@&z+Qd_VHD%^VeT*idp~s z^VL^!9q;~cTOYvA&&*Vouz;`jUHRuWtzT7h=L;>pzF4KQX3eU<nw9tVetA1<zwOhY z&+ip84jc4Z@rbhQ5n_=sn=D$e`DR|Z_0(`?5BuMLA16mHdzmzG89#s4$;j?)0^8S} zF?zYoQ9L(pZP%hzb$?c@sus<OZ(q^$YJ$qGSi!pzr4o7^Kh7&WxG-}?gVt85{ddh$ z<JYHe{%hwu-|y$I(w#9nCR27f-Pz`MmjCRgH49g~ekQQw<%hHO*B|;UuzKO#z}I-A zZT;a1jtA;l7~9XQu=eo(`nb`$zLRaf)c%;d-`~D$iSc4wdn0F;<DE@j)8%*1J(j=4 z?u&NUXGM?8iL>utajec(=e@hVw4y>{AKzg%MtfeSKEd4$S?_ArT@pL`&;Ltx&5^K+ z-HUW4yY$BE?XM62Y|7B>v_5b9U4?b)JD(kIZ}_ap(Y5{Td$X3^R~^|M*d3W8OsdLm zSn<fR{88bs@Y7*RyO}1O?0Z!E^x=gyCm-g2@mQ+MH8qxLm0)-4taaPML+`ZBIKP`` z{_A|JFTu^TFMj_h(4idnKCI*RYk{b?l3%f}LuWpGZBQfdAxWTMjReb?O%l14^Hd7G zOU=9|t-5snjekhi)VSpJt6oKEUu~(7@zvytRVtCRn|>^Q-utrWAH{k5Z|^PSII?`( zemfQ`rC5E&TUQmI1k1j%>T~XSQ1|))2a}!h0%JDDt8f0+Z4Y+d?6df7#g*x=y<-3W zS$SwRr|+USS(koVn))nS@#U>P)0btX#jfHKiz3%1eb_5kfAP^X0TunuXU7#MhzM<} z{=7Vpy<9+maqUKq6_aH9Lziwkz9Um=jeYv&`2ANpR5ItSeVyjIVnN!OwByNB_WiBr ztg!#L%B$X-d4ptqzVzKU|9|Z~yioDQr9Z!43#@*((mDFoKV!4Q`3wvU|Np<4dofSR zQowa_#*&AEQ(R{4cZfXV{g25s>&XBAC(fN*nsj&pOZnvxkvva>17{xHetJ2&Y-bM7 zgLXFN84DlkH}Krq9^GmtbN_ou6Vp5^vt5tg>Na%yzu=SGG1p<Gi|6jgq1Qwn=I>Se z^Y`E1Z(;5B_qbcPH{04x%bVVN(cl{Y3(42*zhbX*rX2ctf%RCKaRb|jgmPvDR<?~V zTy7}~tuqun@N>89+=bVl?hO*@?`K+~k{K<m$l&q(bFb7t_Y1uV?mxP}e|>Iq*{XlW z5|4uu5)W9|AL%tZ#{ZEk-$3R?b)rX7&6&1lMX9`GwhzwDj5gN_q^kqCS|08f+xcVu zJ}XDRi14soi&fl2W__!Udl{c;by3YpS9sTtIvM}#Zc-6zUBbl~UTbza85L;6-rXf( zc8{Os$;P@1^HsJT<PYXPoVQ9bje+;UU&b4yUM%j8mcdPD)4pBbA|saSp=u!-ae!4t zqc>br=znaqlFB6mmIIeRgda-S)4$TO<$w^2@`tryId^l|KV;iad7k;_K(Wr7m&YFc zdbBKS?=q;d9S>`QR!lte)@siBqZ<wGNFAN|N@&gdmvvTc^^Lcq&7Z9h@nT)TRlmAf zmffC7_}3%b^;du1nznM$+D#(Y?*05(w}8jTJcLJ|VM2De$9ySA<_w1S!VWpRuP%Q7 z^?BOnyPqO-D!%+JRG$*i()>ucv@S<xf5?%-AIVw=zH9z@SslK5U2xF0*CK40o<}(Y zJEVS0+>;SIA^T%<h~MM(ufN;cJ&ZK>E;-V-?;?Yg19QdIZ+dwX)+yM0jL<2w7F|DC zqxZpbCrw2|wLeFT>aK4TwcS-!yy27Fkwp!w7YJ~^+_vRtfxU<C$L6LN2KGl-mc-?R zOcX!NKXsOG_X0+f2DT5zi~r2ceewC{>(_b51NN8f6MJgPlP???cl}|1c&z#S|G)2) z&gMP;O2{j+l-XtD9w9|%=MSo3e>TLN;+HaeAtv#PospwNB+=!g_<X|+2@XjNybpFu z9?0HWUfBHkd-9EW^Wx&>&9DDkRdwjEm0Gj1u|(5jozlMr42#$P{9Wk$yeHQ~|9zX( z(yrv2IzmQoxx*j-S)ly-N&DAXMY?7jTe1VV_UW~X_61J6FzZ&HIdetEX$GkSr?RFO z^9bY}|G0#e<v`hKr#)PT(XlGLQrGmSUp$!AZFY4Q)4e?N`QQI01)5D*ouGN?;;kbm z@AF+WIKsce>Kk)Zn@E7I&6zYUrxo27TjsCpUSOB&*#ruW05OG@%Nw7k^EnFhG&Ww^ z|J(Lpdc?yeUJE&re%p55JFtf5%U8{n1!6a*^mRI0d0gBSvozVz;o+|1Ni|Q|Cm9+F zO22Nu*(1Qy5ZJS<$VAsdYio(Q;thtlXY9-t>-HM+PE+XEtSs=TsPEu}%P(IPSkLa* zqFQr9AhP>|PO|Rw%{S}LC)<hlR564`{?TF$vRcH;vQ^}|Tvayj+q#6T1<bu)k_A^t zK4us4Zn+(l6qaw&aoDgu_Tf^gWq-aEzm+_|&-=E{pyBatYZHm!hU?*%WM(n_`B^NJ z^GcJU`5i}-OvsXC$#!{PZzc1#cgtA=_ACy5T~z55a<gH{;mgM@ljg{mBrN;F^PPFJ zz&hXHRUG@49+AILpTS|)@c2&xL;JSx_ZA49`fcl-AocI@BZFyoe!8$*JbDncLQb>Y zFgnfYaDBV{-Jq9OUmboVJ9mL|^DnzY7q_xKU0bJN-u6d8bH&EG1vh%44bALXYbqMI zEjxOiLF&M7mI>bLmNRs-US=p|@MP27arL%Xxb`I0UyW-vIzQg=LgGww)Lz}m$?c0Y zH2JiqFU#Js;F`e^ex13o=lN^gEm?NtuwO3ye`8V&a|T0qTl6hP2d34R=6pS{f6w8a zn`fH&O_R?Gc=-Fr5r^7~&u_1f_rJ_~{lnoKA0pb6f&^!8D*0gW;qQ&ynQRvru1V#k z%V$d5kv<%&D%_{eRMb{C%VgTDf|I6fN4M{Lao(in9s7X^@=CTgt@0svye^2|(kh+% z>YDZXhhb?9{w5L!Uf#CId%xH*x9iB+uZ=xYe_j_T{FPbxW>#>+dzJ^`bqg$3shnB< ziTPmI<UXT^v#c14S3NXKWB7kDfgwLr{V2zJ^|1UVo_2r5N5Ae{`W-I+z^oX4J81pv zf~<=L-QV`jeO&zJ_s@rU3|nqy88>VT*=^adJ@><&jvUr&6P6xih;m-V#+<>sQi^AR z>5?pihHDd6jZncK@{s!WVcsnVffm74BL7TRRPwWkDX`W(5p-~KoAAB9--ze&=FYjx zG@mzDg&7It<h6emUt6{}oo9im%GCshwTdf2Vd-fq;gIbC4#pr}whK~|z`+{Q%($g( z2`HE;Qu>geA<u8y-9ER?mzG^Vc`{G;(YD8thaYEvVlL#cIs?;|iyG(4#ZPbgIcK(x z{mqOmck|5tx24Fd-;;WBo*~NFiC33_Y2VEpyZdjyRp<P!4YaY<oqqUX(#9A)F_w)Q z9cqSm^7c#5`)%>@nnFF>1u3Dd43-HW7&krr^fKr7--iv)A5IWBH0|_HnS`X<Z@ZMv zf1LS#iDvDbitGvY%o)6#rX~y?e;6bZn9Ca87brBXS3msw#s>}t$wl2s8)uxAnAfQ2 zWf3o0_<H@<?`gc5Cg6a2$lP#1|MZM3h7DJ{IOO==zpsc{8y6q0ZF7j@#lNHjV)Ijf z$n{1n`q|ZC5&tg#jMOElXGI$h^mDTHPLSn0{`mLF4;41+&Y8&+&A&8d`SL{$QA`Dl zk8+lMIy2w75Xtl540&c82Yei7r0}%!Y=8Z=I<uy|afV`)s#IH^)TtZ0BEDB9F6$T0 z=lzt<uvT$ln^Z%FokC3wOB_SN-fL<+olBYuHG&R{EoF3IOPaR)wrk19P<!)ikHw%o z6U1xEU@pBy?9F#AC*z9|^Lu|hoas2@m;(>P#0dh9tPhSd_44o>j{J6$b(fvr9@7)^ z8Mm~xNNF+TnJpHa#g&k=mnp<0XRlaYO>g;6@wmPF<ob0^U6|3cAe8a(+p-;7+Mg`b z<+;A!WVTd71d~8D(=5{^8||_T8hWKJMaY}hFbFI=#HDvc&{9?Qi0_AwwR?&!I2^WU ztw`m5Xmh^1>Bm;{ELPqahKBQ-o=!czVAsqJy*&|!-Rs#tcsX0WUfd>hpg}&`Co+Q5 zG2(;flU1^f=Y7H}GWA#z%`zEP*+LIo5oue>_+#T*Mo*q-=^rcg)Rgw|XJ>p$XULWc zijp@CVQ|^0qN12{&`DBiw%55M0!!211t*K$d%W?g3yUX*w-Lv|rc9%qd43DnSh5cs zXVVug`LQxuzcqhW#|^nP3vbS6T$ACEU3(>fX~*3-W)BX@l-8+C`rld%)?Cvud%e0d z(c(yk#_<eC>)@`JUv~M5O5I><^A~bdvay%8`+oJ?zxVzwcRsFNcy>Ocj_HzZc3CSJ zPl%|n9J-JapliHZaQ^8juc}ua&1efy6V^Inz!AUwl{0hSs{VyVW=$WiNB#bvtMsTZ zpEvg(Pr^#YtzQG3IUkhFn%~Qy#4FI?B)}LU{^F36Zw}Y4JEuRKZetS-KBU{b?D9>Y zwZ9x$raON8T*|WZ2q*WPM@l!2Pp;>e0vYn`#kC9X-andfdSb<4MX~0oZ31qsp-UzG zO}S692c#MaMtyD+=hoslctHRBYz7`h3zKrjhuH~_eO%65T)Xh@e8xQ)9hSRHxBRxY zp5qgtlBjJraWSVWTN>-Fql<Ql_bYO62QO1RttxJ*$?|#H^wK44%wlVtC1;C&<w%(J zwv6pV{nZ49)15FQT(S<hG@kvkqsMK-lqn0A$cV{4l>8mJ>6oCG^%j5kjZ+o{nRwgo z%52x$z{{4=!tu~{O3|T5e#}4WvkV%Zx*U<YD|PGdR0b`NM@zI@6EvO{6*nEZozD=o zEm!cuqJSSyHy+sfOS5Oy?Vnl;+P;M_bj;q}s<4is?_#Hp*!JUdJ7z47cHV8zTrm^E z+RxqK65uMlP%JOx$fTkjmin{UuI%Y@7wxUo5ieggv*D<0&LMu*mlx((No-&_XCNaa zd1!g-+rryHzbihycWh?VQCETlE|bDx{g02e*&gX6E2_qXBs(1xnDacUOr(!t0aITm z?`^>!o^8KAERJ`W;K^|;NrCT2VluPyn`Kw*=KZO@fC!$|EeT7xITptFxX7^bJ6!TF zYu&>1V#Sp;w>JsOHAwb7>%Gq*{8y91nfdhPLpye9bnZBock2D)ll$3u**47S*zq{p zdG`KIJj@C+3^o{YtH*JC674%#9JeVsno*ehK<M5(%cd{|aN3FPdg<<H%Fyv>OC8_F zdk0(tlJ(ENK{LgOMOlzBBxm}gAcdL#nA9rNBs5lXcx=1<SoDJQ++K<HS}%1D#kzYF zIKuvO7MN`0HUIMC&9iCSXTx&P9v_z+{%aTByuZ}Px?_h)@PiD&KnC{h?-K%NyuVt= z^KkmpX97*FffdgVEqN=J7{L(4I*m<1BD}e@=FhK6SlEJdb$J=bmTl1sjz5^0+R&&j zKcOJgf;Ta^vvGsas)nw!VLy+C6exCh*_%nrbRO4g;5Zy2WK;8AeZziZ!Ptt8ZT<gv z9;7Pm`jEsc|92|)<&7UE9(%%|KEMA+tNpH4Gp%=tlCJK85=m!Vr*Lg*@_U+I^}ubx z>-br{QCHJi^VAk;`(F$Ap3a~zd~vFJ_KM$|Z)T-2<a(|xX4qYNLq}<A)9(uf{Amo; zYaYs-VfYqt*mefvn~iPN2FyPUq|}7B1;5DGef{cHyXvDEj5QLxY#+@2$$fgV{Q80J z2^q%}ntpU||4@^|!uy~(!=PdNr|%8w_Iuf4Jg%I7w;@sabV2gDk3W7^)@;hFi&1Zr zJkWk2fg%6-`-gsYRlFYd7j}q688+Onv6I_B_s#MC>C-<-oE86g<(M(^4+bfo2fBZ4 zZ=CdB-}qGQo`IkDwgTs6AAdZ3`uzO%?bD~n@1Hkc-jt)fR<Dj3(#m+BmE|dL<l%+{ zJFP_fyX^w89SiJSj&v8D`Mv-6vY?f><$SN4J!U-D`09iEPtsl)*=M9JTXvh_Upg<_ zhw9_M11HDFIg1!Sb7k2kp<K7WPLZ`g-uZgO`_(_?5*a3E8#LUvy~jW6&p*=-uNc?8 zTpY>blv^I*($YF*7MnxgagV(o`!q7#UEbeK`uO`W!?H^W4DapZZk^O$%6Q>nl7@cp zMiF&`+k4w@`EO`hF7<i?$K*ODi<>>mpZtHRoygFgZP4(yZ+h0J)7cJ}jT(&SZw}=X z(vrUB*6b!4_<q~9PB%N>W~O%<zMnpCOX5jL<Yn9N{-cm@9UHI5UWetG4E%{wz0*!# z&DNQo^>FR9TgTsS-93THG4I$Po#bhZI%^Ixe6x*Pbn^TH#?yQz{joX?@|W}{uQQPD z<zwIWK2Gna6mMFix?IMc6=HYUKHRG4RI_hpW4`en!cg(uG9%z})RxDI#<wz#_8v?5 z(Gt>AULm&1=e)skE=Q59q|=cSKTiMCU*C>m)$Q{-7dy|UnB7tIsS4fTx;W{-*qv#O zmfpT<5!d{5Yd`6GA$f$4S7*!0Nw2fa+?1VKW*Ht^o{_4(dfKeBhjz%Xl`dA!K!lKS z#*I8iMSbauQyRjTKFx4#ob>K_!K$tNb>6(&KVF}(AT!}a?ltp<qoxuE>W+Jx{){wX zaFSVeGGxQuM_Rk2f^+UUuT}XVJT-KAuXkGLtj!-}`JOW!*pqpKVcCTQhTqcqcb}wR z{P5dcez&ZB?)JwYe||38ee=Q0Z^1E<>6eWju`@K@F0qn&Xgf_~=j08HK8p`Bd^3(a zb@KdT#_K(5^I6s@{{1VaaqQqyuG=<6&T4NsHf6WEDrz^e8O&s3u6X}Z$iGgL_qVOw zX2}cHH7qIhd)W-CYecFZf6OzNd;fiMXVlb(ztqfACRA1Sv@h#Fz`re2?xv!t@TocB zX1obZylflJf1Ko7SIK)PDD(Eol>O>y6%1~6pQXi?T`A)+kK3SXE2VjMlcaL*nk~74 z4u907ZeLn7;q0<h<lviee*Qd$>xZ3hKQf&8VB_tN3){BlICe8zNr`2+9w;r5JIWXk zlRhbTK0}taRJ7Uo^LL(|OTBD_2vA9r1#eU)rO50)swi!zn0Tsyp`vW}V_tE&(+4{k z4r}o}D5;EPFE+>*boj&e_J3tg6x)U!Y|J;_SFBXCZ)dy7nX>oSbN?5@(}i>nI+jFi zh^c4X-<~Tm>s#qu&L4?49T^I3*d2;*Zs9?Amyg#dG_mkt_RJ$IGA9&NevEPL+4aIu zPL4t9!Xnki_5z>%TXZiha%C|F>EhyL+pz!RCEq$R-c2*+={Z08yY#S0&bb7`#YX#T zLSM$IM2mjrurO9hWS-&H%=jjK&y>mkKbvl7<ej`@T^X1CBk9(=GZq!!*uwL`!9?Of z^l|A2Po7^m(8_Z#xS9Q7JIfg*H=|W)8#5&j90Zkiz2+xQo?ob_!+m4MHFcf5kWWJV zlA(u}ef{f|$Ion`z{~bw+DA64pOz*E_O#|czj113%H^h&^WCl%nT0Z2Xz;Rq_*Kz7 z_m7U$hBXO^{0G>Z51Gym^PIhkQDzPsb4BGINB=rA-VI5yn={X*8Ejq@>cR<<+rq|N zVHamQdA{ReT{B&Y(9B@brdqjkk_Q~K4H}+54mJL1X%e$Nvov>At+|a!1M~F+2LI!$ zGd>w-F!)T*jY<p-Jv_Vk^#8wy82DnE8Es_OFFJXCVdK&}cH1-8h8=&Z^LUfc_RWu@ zZ1&Ce+b`|QY*E3>w!u0sbn<*>=C1lPX*;e}W?i1-YkDd&OOPp;nL9zL#B^VE>OA(! z|NNfJ5shrj6*h6Hljl1hK5nKPxy4R9{p2;vj77b!T{%1~6LSx4nR}M^?fL~74683B zFeLAJrDosV_VUY(Wv-K_30w*F74=|h=x*J%Vxw>K{g8<Qc{dn*Y!b>7E}mJh6U>uf zD#fF4e09;M;>-n}-DaUlq6~JnCzstaIl%W}tFGXaB-MYc|JZ^}Zly22Vjyg>y&&&$ z5`*@Y1O{&Rw^DYSS2FF>Nbfw#DVTG6y132yup8Ts8E?-I`5@%j-Q4#(z~}Ea?)hvR zoOszb6kJ*Na9h!|J;&~CYd?HC`@zqGh`p@a*D=0(VH@Bktb2IIk>|yK=e}NfgCT6i zK?X6t>>nqVt!g%#x;aK?+WU=h`~PsNC8#~R>cw#Bl*5Fd-%D=Fp8Rv^SP$cxpk_uL zscQmn`F2)VY+bo(&h4zNajzA5I+si;%n8z-YP@4k;=z7zws7W%rEJU*CTkRPR%J09 zD{s7?)Tpw%j{8x2xLP8cupvXpO>ahy6*na&_Lk|%UXVQCWh!x?DUr8ho$pk$kY(Nr zj+_-!*cQiazwh|=KP}~_pFR|LdVZ@!V`$^-yG?&Ko8&O8zM8<$-D+xJw`t|8MO6=$ zyRsJw*Zh&Yzhy1Ml8y7H>B@Xr*qF5BTmR(^jB6sA8FfUi2^7Yi6Jo20_)r<EDJH|j z$6j=2!82|CXB8&mo-@>Rb3T-;Z=Bbc&!By+!JvWlkkqb^e|l0m#CSO(H&mp?&ep3q zp8vtP)}N<w?z-*Vjyg^|R1ceN@jATx84Gj7Mz&VQH<oJ_O3yy~O_#~RNg~y{Ln2tW zPAD_tn$E1RS2-4CHW=&g`n;h3w$1ajS|kk&6RvAlp7oeMu_V*jV2a@U>r?v77wn#W zF|jaI=vvyDm7Z4_!qzw@GF0<rzc`k|c3ULaKtG$yVcL@ghTiWVEmD*7+Vw~CvVQMB zEjF1jeVMO`r=LqWg3NdIW%$PpX<0aCF+1|G^xu5{<WbFGfe-)Z3t3Hd+FW@+#o+FP z8)?U-Wx0-IES<;nqdzHtQF(>Is!Soa4K-$Kcb%=+ooObo8D}pS6`NK5@*}_J!5MWT z2aXj4Gu~NqY=c&Aq{(tNxe3mTJd(^V+R44X`e&|+&axb5JG-2p?k072Cl@f<Sg?gK zY+r4-#*3-Up;OWKU{Ua-NuPLRpW0s6j7)F6&9{DM*R>Gui=O){W5Yje)?LUTC&R4O zaQmu67^{P~>Vn0bPkUxF3w@Jr6v_5tsNL(ce+}=t*XxVI*{7__x1E1^UK9g=AEW4j zw^=-^Gmi1AsU!wo-f?2mrx~A@-4*Hf7Wi^dIy?AO<XgLn6U#r|E?uf%dv+!3hX)b? zjCa-@+o1JfsfP`ltHKPWQw}fHxwH@JvE}#3p6z1LD!7*&u*9^K?=M#qlJb`Ve;jfi zd<>j*qcUasZLV!%(`Ic=-MlfI?|WD3(r-_<EIro|gz)mAWgTB;D5obq*gb8T=A{%? zHo2O`tzSPI7p(2So$)sPv|`P)%47eU7YlJecxbqQX-8~t;?z`${)D6Z%K27)i}uoJ zl9K+kMyA``j@7p7ti<NCrc$5wrk`<WN?^3Hf(5H}m`>Lb{Rm5!mW@(tzc6^bK9nz` z{x>LZp2!-_<9qh+Pwtpv62s6B3!@Dg+*K<66HlutPGH&mynm7z<H;krRc95i@9fra zznAVdNygjDJBw!`*Mo}?Cq2}g?IP%wTbZcV()g5tqa|+sCL@W<d8v~`txlhhICyi) z{B3`jDhhaB88EEQ3T0gLFJw03o!{?Qy;{c<@pt7u@Qf8R!x^LOWM$`wM$l>lPgg&e IbxsLQ0P7T6a{vGU literal 0 HcmV?d00001 diff --git a/main.cpp b/main.cpp index c644e15..61d8002 100644 --- a/main.cpp +++ b/main.cpp @@ -1,37 +1,19 @@ -#include<SDL.h> -SDL_Window* g_pWindow = 0; -SDL_Renderer* g_pRenderer = 0; -int main(int argc, char* args[]) +#include "Game.h" + +// our Game object +Game* g_game = 0; + +int main(int argc, char* argv[]) { - // initialize SDL - if(SDL_Init(SDL_INIT_EVERYTHING) >= 0) - { - // if succeeded create our window - g_pWindow = SDL_CreateWindow("Chapter 1: Setting up SDL", - SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, - 640, 480, - SDL_WINDOW_SHOWN); - // if the window creation succeeded create our renderer - if(g_pWindow != 0) - { - g_pRenderer = SDL_CreateRenderer(g_pWindow, -1, 0); - } - } - else - { - return 1; // sdl could not initialize - } - // everything succeeded lets draw the window - // set to black // This function expects Red, Green, Blue and - // Alpha as color values - SDL_SetRenderDrawColor(g_pRenderer, 0, 0, 0, 255); - // clear the window to black - SDL_RenderClear(g_pRenderer); - // show the window - SDL_RenderPresent(g_pRenderer); - // set a delay before quitting - SDL_Delay(5000); - // clean up SDL - SDL_Quit(); - return 0; + g_game = new Game(); + g_game->init("Chapter 1", 100, 100, 640, 580, false); + while(g_game->running()) + { + g_game->handleEvents(); + //g_game->update(); + g_game->render(); + } + g_game->clean(); + delete g_game; + return 0; } -- GitLab