From 4b2803c7b98c002fd898affa3d531022dade4110 Mon Sep 17 00:00:00 2001 From: Ritchie Cunningham Date: Tue, 8 Mar 2022 22:20:43 +0000 Subject: [PATCH] [Change] Documented Camera --- bin/tfg/Camera.class | Bin 1618 -> 1608 bytes bin/tfg/Game.class | Bin 5567 -> 6008 bytes bin/tfg/Player.class | Bin 3397 -> 3451 bytes src/tfg/Camera.java | 59 ++++++++++++++++++++++++++++++++----------- src/tfg/Game.java | 10 ++++++++ src/tfg/Player.java | 10 +++++++- 6 files changed, 63 insertions(+), 16 deletions(-) diff --git a/bin/tfg/Camera.class b/bin/tfg/Camera.class index 4034950c8f7763acc39a5b1d561bf0353abd9915..aefc46acdef12f2ab1e458dc1c24df5b62f2bf4f 100644 GIT binary patch literal 1608 zcmah}Yi|-k6g>lNd30^HYOz+WrBs31uJ2d1K2UsN>no@qw{*ZIurv#O=#Mg*C`~jm ze)dNh&)r2>NmE0Zo!PnPo^#LK*=ouX}-|Tns#4%A&UybYr1T0)LKPb z6EU$HLbez=bi;P+){;Uhy<5~jc{4?Yfm~xv#}URp12K#!gwvT~43unO5JPc{;ZOtz z6{h~9(!gPiD~wch>t0ao$#iBnA-RUr^vYR`;D|zEm+VrJC^>2%f~dl1!FKfWMtxPg zudLOYRv0TZN>;6Cxwfo3F9%xh?52WI=$!$5QS>cZ(oRdeD-Np(y3>5$Z0WjLb6|(M5Hgm>kXPXxrZqB4sBbfwRt9Y z^p>A|^smXCE?`(ey9^sj=kxgtV?*0#WjIGk0T$ekF3Z=%r- zao{HsUor97Lr!uW!vM#l94CoC#`ZeS5g2C%;<-A(r_83v$C_}`Qz0zdL*wk+rf?CL$jAJ+j4RYLjuBjC zwPC)!#<^eXb?!)%AyhtnfGzITu|QW$kHzp~J1k0$rjzGcr<&-@Y-*-lUH!MvupKIwURBn*0ZN}v7TL& zwN>dp^j)UueA%wq-c^C|)IYt`1%Xh`S(Q3Eu*X0YJpvu6bRh~-Gth~!vi2H?pi7`P zZ`b79dUZv*%hpOo@+9vRtxCaiZMAN0hPhLvsj>ExyROknwM z>9*0_4QRIKu=`MPJZj*W;us;vCHnY1-e(;i#FVLZ6|`N2j5hv;ny`3C>lI-cdR8}ub--7QMfR;|$;bop`B;H&`qihlzdXEqfrU9}YFFn6L{@d8&1^w2o> zWwv2tI=|>2&^z@G{cpIZVIRl62yyJ@*u~L6FZN)7J43-e4AN3xANJEjVISB*Kh3q^ zS!d=qNWFPAgnl2&2%LNX5MUSwxufX4BzYBn@-6zeF!BwF+0RHkI=Y3i%-Bav(wN%D z@i`tJ+rr5f>!hFS0GSLjgCT|)B>WIYILByBkfq8Z6Tssv&T+*+IFAbqu45Dzafw7@ zM4G16L1L^^lbFeSO5d*J_*k;Ew(^R0pqJ7YjHA%wfe)?{Q+-{y=A$d?IxUTuY}6*^ z6V^sy#y?}`QRY2zQ~Zs8gh~4j?K{fe#{JjyX^$0aixtOQGm|*xX(=x8omdO#X~s%$ VUwxt_SwKALgQ+JW@PMO+#h;1yO(g&T diff --git a/bin/tfg/Game.class b/bin/tfg/Game.class index 531999c5aa2d4acbf5e4ea6170aa93eb879a1dc8..b650aa9f793bd5f4706abb23d5cd24a11200a236 100644 GIT binary patch literal 6008 zcma)A349w@ng2gq_E_>u>^RNkBu(17iH|mJN@+qI+B&kFC{`rblI=PvHDh_~Od?C_ zNKTtT%T>yj78Vu?Nw`XZ8p>5nth5BmwaYG)o0eT*mt!v$D6j{xOP9s`zZuDr?Nas^ zXWo3r`|j_1^Yo?Pf8ucfFI3Y8sub$-6O*0$%_+-(PoeRcdBW^Wnd!;S*w`^EnOCU2 z%}$SJZd14|ApaGtM9(&44=WKE+Y^>0mJDJN{Q=LP!EaO~l zQ(SE}WuCMg1sxGj`dx_lnu%;~Fs!iJMJKG=^Mm0~%A(kO+0Ncfa+(^{VaiETzhjo< z1YL-noh|XoF*>#@PW#R^;gL^uQ3j7@$p@ESF!mAA_@4AdF8Twz0b_mZFl(1Puv zrj=1>4Tsx?WNW*I#tH*hC4*6O(?8$qrQx>%a0eJ%fKFm^=11PiYb^$WgLyYEKbyp zgd&mHutIZ1`WJI{1#lIv7f)|cxVH6=sQlyGOQG4P(TG(Nq#lhXtX61<*l8;|JvC-I z33JRVY<`C=6&q5f| z7{*N$ay$Qr1#?*Ah>JNHKpfkp%5KpZ#fzl}9LvnJgm<=9L~W_qu4i-1z?gy|)p5wo z`Z10P0~F*=mxP_NG$wJBj>fyAJ*9{Vo;fseOmcXfVP~~^?J5+BRtKgu(#RHC`qBD<`dd zC}n1I*0|6Dcr{*Q;BL0qGKE6d_%qzYU1si(ol4m`E15};vt&444vN|LYTPIFR9`BT z>~vmazFyh-J;8%E}dK{A#Fe$>`s&N`;my>4iEF4RvrZ0wvwfw+LTYryRi)l0I6aBG4?ZF%Bd3g<$=l~d#kq~$zv4PaXy zT#zf7rcA3`7feGuZzhkk*4?2amVQ#>Q+S-4vYAxMJ$YCNYZo~j=7g3()m4wr;By8( z%fq-FjuKVl^Y}}K%@%GRs1;JC^LDD!Ml3#FyCG;?vT=dmj;; z_+Mrk%Y|JWDel?X>3SfA_f?Ix_!=d(wjJT9dII0j_$IzZMBY7EFRO^|atSSR`ZC2& z;cpFmo2TY;sdJe%{tn+^=VqL7J8h=ijE5z_-_!Ve>42JKiVY*qe_!JVQXIxnGZ&?w ze*6gkWZ)kaHZN1tXPq3&n9g_$Uo`$1|H2gW9NV(o`bth({$u>az`rdz+KXB|F53uC~K|{2aeD@C%lc%;+B5;TM#9a{oL2gN{aH1BnB2 z?k%FyrVjj<#;@>eCSfXbg2mb7&E5qGoWK%{|JL{)*VDMDdPd`aUAghtVB&z#|4-xh zF1?#{dZ3iheZ!%6f@D>#mCq&j2)R}(!zG8hJ+fb`fRJlL@nCm z*soS<)gZ~N^*WXLRjagWD(2TR9bvjit2JsZCmW}7JnOI_nAt^heBt!)$Xx-oUNswv zf-AnnmN03xQEg&BQ)uZ^X{p%7-)1)DQvBjxnOw@Y3}3@p;^_gRfmMCp=3*s zHDOMtc(!a-S8BCGXvVmmldo`w&-)msv(NR}KEcmGrLLB4U&nq`*J$;8buA4)AvXeU z-Npg%oQd^%-Os(dwR(Y!h}vKz77wv{o>E;}?G=>X-yM#IdPaL=!9iB#Q|dact{1|( zgRzl#A{^`+-8Yy>#G<491EF|vbGKIeglGLyo`Fz=)#z#H(JCZNs~4Dpv1l|D3?)4J zeyt7&ea!;BCmi=!iW~>E>JyHY3mk`HL*C{?T1ACa-xnIGw5(sN8wIZgUujKTtAr2& zj6kC7?T}W(g1+cbY%m^r7FS2KIxGxp7BN&xzFDgm3C9YLBNR=920SB2wR*9u)1$~o zzeIRUtE8aoJ@kT4mR1vjU*+M44}?OI(FN*Jt!$whOhfpvr{K6&DZ%MP=%&PIQL~}g z3eDwnESiZ=Cy(~pR%$%tI2p&lI))*hnRb#^FFzq!kn&Z&Lv~P9IGwhfV9Mmw%yHOr zGO`!s)W9V?eX4mWu0xevwfNQ~7cFA_e6K=)FmF%pJFiJDomU1I=7qss`TYnq9+aXc zEPHv;WAmCZ4PZjbdcl9 zIqcx;RU@;wdKSAI*Za=nx;b>W`{oe*n5#6z=Qh{K)$mbq12)o(EyP`ho!E}6(TWhR z#6cR_OJ41nf&Dl@$d527o{3?)Sw-B63sBVE7wIS3>q zunS1h_pI=5Jr8FN(`93t-4yMkk|6!vhl|m}8)}Gey%k;ti(V?ZX?fy(rPKzWyY(%*{piZ>9A{#OcsdWG z6C>D-!_3POT#uXS^kK&T7E(t^8AFo)j={p+nBW~^60axaG%->R1I!wOQ4CZq-h@YR z6GP?48}KpAGQX?1=i@j>o0@sgnd6&}nr}q`=b7)_l=Udz4C?5>W8C4#Cn#|-CAqqxee4 zIefir-MR@J!J)w8P3#RiIYl#@BY z>m?YrW;m?XJo+%rl-|ZP-p&x7V(Mt=PfJGRNaZ!;I$0>n{f{w;M>Evmm$B8 z;dmXs%oKhLZ*&vrwcwM*1U92v)hp?7Ny2pq%=3qhY8gESzhN=YCK1TM6E5sG<{83D z`sG4oWY?@&)4-M2Lq27IUCUJ>UMCSNs1@a247fw!t<-S3qW9{G7Ad((7G*rhJj;ZM zy3tW?@C#~nL9L4rGu=^NP@9G1sko$|E-yp!I$cn1g8ABABo@>aWlOv{_%2%VZjS2* zIT_xAHoOzSs;uU0?LBjx{1=669{3XVl1PYX(BLe9Xbc;YMN{}f~eF+*DsICM}5~?Wy#|RWD zBOg~gA7N-4nbJ*aie0`9ZCu+K;$2*Ka{!09_Hs(axh6P;Os-={@fVya{w{M0cW}Lv zg?%sA`&b;Oxt?L79^yK~nRAZo96pWDas52Lg0FM^2EK>ybNvB+f~UFu9KXSDxjv(+ zRV`Ouu9#k9Ij2Q U^dI5JDtE&MUPzx%`5QL;0dcn0C;$Ke literal 5567 zcma)A3w%@68ULR)?QPNnw1pNZh=>K+f>a&?S`bQ`LTLJ+Nn0z<8q!M%q)ACq6gQnZ zd^;yo9N=SaZtLbAYK2tA>4uxzM7O!Q&ArsU=caqlP3P?X-@Qo_DC&N{_MZDa&iDSl zb8en~`_ab%tXACyauf;@Tl;F(2l`C|4uzuafn9-`a3IoG)4FB58B8eTUmS|`MlV)4 z%^QvN)ohP%?GM-V#R3D{Lcw@VyBX;<=Zvrb3A~BhHtIg(7`qnNS~% z#1nx?qB9U4Gz(Bj8~lyyXNwIqz!uOD>Ng|t5IGfQWa*9Xjwj6inoe34jV%dLT>d~f zu-l9&Xs>wEWYrZe>-cf}=j#Yr2q&a*Z-f zH84}*)b|LR3o}se1Q|8*kS}kiX&5LlaJs_u%XfaO8X6M} zR4ceL0db+q)^Uc$L`*VJqfjj5;{xNvVk|YVM4?n@o=C!sZ4Cs?wrD(*U@|n8;Vem4 zYg>=k-RM`CYDIS(W33Y_aJGS!3ez(7j}=XQG#rg-oCC>Ux7+J&?NTVuO7roYwJt2e zYVnkDUS9bQD&Ki~Iy7rFicl;;TBlKh$qJLap@`Ws*uTY$`2$<*l8puf;m$xTBybAp zNNfwSOk9>`sZ-kR=nsS<3T2g>#}|23r;AF;<?cJK&+2~CZA*vtFTXD z%C)wMLFBPMv}um{^DharZY)oQn;P$XJa*r5?dzk)N!5cHXp&X%@w&3B7QA*#`a zsgAmP!2V#*mt}&IYL5DFG`Pcsof7?>7}VGWjxHl+a^%D~&8AmYWx1T%l(;lM!L>=l{|AHd}XE@NMeQz&$e58?{$3dEa3;czH!2BVQ)=9x2LqZGka z8XuA(C`@N}U@##vuhzI`Y-2DMO>LAd*J)gzwZ$9l3k3y#qsC2wpJ0n>hy|FoJ`r}a z#z$}q0~m<=vJ7Z6@KN^ZiGz6EU?|MNU4Yv-JQ~}4=gf9tFK(9veT;5ao-FsmaX{lB z?qCT81_n6#6=qg?s>U&=q%)>_ahJy3__&lv)II}P>a{}4pBPX>Cw#4eCz-}fVW;MRb>P)l9!TMRU1JKKqNK{I&73bs@lB0y;b|fg)@gWpR&>Wp zsE{L*DSiguHt;MDxOY=$F>8DW-(}}UW4)nBAZ%saBLV)N#`mQI@`7PDj5z-TjUP&J z7~2Bz7W(PL3;2nFA1j#g96#!vAxrnrko?|AF8IcfQec-g>9$DPM1 zH`9z7zrZh9yP-HSZJaoq9tv|#GGfy^#E9Ce^PTuLerw=2EGHSP4WSsXH`a0cJN%xG zwzRhUH^^ai9F;az;SU;r#H&m~e{>g%v&0^lV-h$vB^ZCw__O7yPgMO?<8PK+Uu%bd zgV6t>@lT6hC-i@5{9EXbF1ODw?o{Si6=>y5<<|_vgsD&~ttOC(Q`tHf3fWGnBZyLFs7YEC zsbX5(%R!(pJ3HiKR|y#sR@cdSGeb?*YKo{adP8x!Lh@Rm%B03iS*2>4R?}5ERqm2Y zDm!={%l=*6u`Arky)(5sMH(Z&-rMSPGiJ}IQ?;5cD80VU)8cOEX>6_UU@o3fbF?~L z2vawVSv)e<2UHo3dAEnBA5S%TMs&$ecT zRx5?zVg&pdZ_m-HR?t(LTRVL2leoHCt8;~+^f-oW$!oQ$6OIWshr7k^ZnurB*Q&wN zX;b8WDiLnfYQ3NfZSw?ut|!EKEpGu-Qr#iB6-r3`~FIv5L@jlAvfe3lF3BH2Mvo=C)u)rSL| z6>?wTJYW^eti)-Yxw-sK<42l&74WS@z6pqR@;wJG!o28P@4V4lblz?)n0H&CXrmM} zVcElP5k998+D9phYg6?IrdJ=qjP4Pfau~C!OI(LBn}|8x#W`0LtCvSmaTxQ7s3OOL z!&u1IMcuM+(+I}W4nK}%^ppYtr^O5mWvNhqiKS;WoZXT>}$!F;%} z5F2TD19`P=262sqoLG+yDHA<(FNe4ZN1&+N<6V%%#*C7QR$P|Rud^s*xh1U3-hgJb zaAN@@)=IIQ?Q&mCiH$Id;`y@bLzs00o4UEqKLnq>bdBKr5?2zN2`)T>p6()7k!u)% z5%eXoJ)^yhvVm2Yj@3MjR?)$8u@q~vTw0cLNy*LM)~)t1BrfhdP@P01cU8%N`v`W@ zw|GlxJ;!lI5{WK8E=l73EAoc0m8@6V@SYXM5GE16wk+@ZiY+&-$SX6-^33Zi_T4%9 zD$zIWQEIxw+WO&@&Z$nl?+#|}5Y`;Q-tLlHN3d_kHB+6D89GerzWDp2{j6+_%7rF{!Ni_bBc#oTir zK2MvJg>2(LNV;Dbr7(YKiF4ovEewD;4L+BXB zYuVVpSlBhg_3HEtDQr@e zWYm>gBX~d69pqHI1G8}_3+*mWwY#&_FSXSd706xLR-dzwWk&UC!mujsehQ8Ux*k?j zAAii%R6VR_u(lknL%eDcU?(0k(!gm1iYBI^3V|l2q4@$8ry=(Lv7(YR#DQ_Fs3;Ac zDNueIS}M?(hUJ9DNM{SlnPyxikSh(X5lE+@bplODLvDcz)6fQi3er#$p}aKELLf!y zen^!*z(b&jGjyif#HO9cOWr0_^Vg*nTvuWp+*}(uWPDux93la(TlfP(l?kO&lc;;tAuG-%Z6E#~B$nfYeEZ)VPy=&z{z?a$07Ai>A1>ql0* z)N@30l>G|5FPYxhlS+1_d-{4^j&s7MUty^3$3@N)=X1+m_9( zO)l-6)toa8R;4wh8Rml7X00t6;j+yoMYY*$RYx>e7&Tw5c=)R3n)z$Rt=pPA+%@a$ zO6$Jn0T0bqd%5*k^Mt2n*j`yWu6agOM(}!jc6;fhS?sJTYv+~bIWH999VzdiV$%xq z!;YHocJ2IDCN!^kBeSKwRChA1SP~=;Ii2ATiV7K}!u)hvl{48?ln5o_H9m)9Q}osP z9LumMmSbR=WrF~gRplGyJLRv>J)Z;9LC{eE9*qZ`gfM0Xb#uS$EMn!N zzecPQ>lE}}PKY0(Q(h~;hw#MLg&MZgC6UVii@bS$8}sBq$sE5%wtt%ypdjLkg;5bO mflyUY950zu5*}G{fqDs(Oi6i&>45I@POK}r5#BS?xbPoOUX*wM delta 536 zcmXYt%TH5L5XOJE*mG_#2Sehb+89Deh_M)vMMI)#LZXQw;Sm$-f|Zq2(?r1N)rH^# zAE@91J-+JuMGL-L=tV2KbHmC%g^eo{;?S}Wvg_+&-M8N(#SO!x?NCkXrr{R1ZAx`Urn#rN>(FACRZG}lxo?+LV#7njBl}k+)N{iN zUfNx{Nxe3_;jKNWx2YLJo`N0M+Z*Q$?}^C@>EY~9+RxY(eZWoe+3t7Te+NvvlE0Qro9N<+-Dozao)Qxrl{;GMB!azC-YU9z_DCdp&vL|NQ1jX#VG?UE z;8nnxaup2JhS_&?38Xs2qVOTU@m;(pxoIjab#3_%wEBfZ diff --git a/src/tfg/Camera.java b/src/tfg/Camera.java index 0b735af..aa7bb87 100644 --- a/src/tfg/Camera.java +++ b/src/tfg/Camera.java @@ -4,32 +4,61 @@ import org.jsfml.graphics.RenderWindow; import org.jsfml.graphics.View; import org.jsfml.system.Vector2f; +/** + * Camera that can center on various objects. + * @author Ritchie Cunningham + */ public class Camera { - public int[] currentPos = {0, 0}; - private static RenderWindow window; + /** + * The window the camera is affecting. + */ + private RenderWindow window; - public Camera(RenderWindow newWindow) { - window = newWindow; + /** + * Default view. + */ + private View defaultView; + + /** + * Create a new camera for window w. + * @param w Window for which to create the camera. + */ + public Camera(RenderWindow w) { + window = w; + defaultView = (View) window.getDefaultView(); } - public static void SetWindow(RenderWindow newWindow) { - window = newWindow; + /** + * Center the camera on the following position. + * @param pos Position to center the camera on. + * @param step + */ + public void centerOn(Vector2f pos, float step) { + View newView = new View(defaultView.getCenter(), defaultView.getSize()); + newView.setCenter(pos); + window.setView(newView); } - public static void MoveTo(Vector2f toLoc, float step) { - View defaultView = (View) window.getDefaultView(); - View view = new View(vectorLerp(defaultView.getCenter(), - toLoc, step), defaultView.getSize()); - window.setView(view); + /** + * Center the camera on the default view. + */ + public void centerOnDefault() { + window.setView(defaultView); } - public static float Lerp(float x0, float x1, float m) { + + /** + * + * @param x0 + * @param x1 + * @param m + * @return + */ + public float Lerp(float x0, float x1, float m) { return x0 + m * (x1-x0); } - public static Vector2f vectorLerp(Vector2f v0, Vector2f v1, float m) { + public Vector2f vectorLerp(Vector2f v0, Vector2f v1, float m) { return new Vector2f(Lerp(v0.x, v1.x, m), Lerp(v0.y, v1.y, m)); } - - public static void Rotate() {} } diff --git a/src/tfg/Game.java b/src/tfg/Game.java index 42e5b15..26ae0ed 100644 --- a/src/tfg/Game.java +++ b/src/tfg/Game.java @@ -4,6 +4,7 @@ import org.jsfml.graphics.Color; import org.jsfml.graphics.RenderWindow; import org.jsfml.graphics.TextStyle; import org.jsfml.system.Clock; +import org.jsfml.system.Vector2f; import org.jsfml.system.Vector2i; import org.jsfml.window.Keyboard; import org.jsfml.window.Keyboard.Key; @@ -42,6 +43,11 @@ public class Game { * Repesents whether or not the user has the window opened and in focus. */ private boolean windowFocus = true; + + /** + * Allows the window to shift focus. + */ + private Camera camera; /** @@ -60,6 +66,7 @@ public class Game { window.create(new VideoMode(windowDimensions.x, windowDimensions.y), windowTitle); player.changeMap(new Map(10, 10, Tile.SAND)); + camera = new Camera(window); } /** @@ -151,8 +158,11 @@ public class Game { /* The window has automatic double-buffering. */ window.clear(); /* Draw each object like layers, background to foreground. */ + Vector2f playerPos = player.getSprite().getPosition(); + camera.centerOn(playerPos, 0); window.draw(player.getMap()); window.draw(player); + camera.centerOnDefault(); window.draw(fpsUI); window.display(); } diff --git a/src/tfg/Player.java b/src/tfg/Player.java index 7b8ae73..47c49ab 100644 --- a/src/tfg/Player.java +++ b/src/tfg/Player.java @@ -101,7 +101,7 @@ public class Player extends Entity implements Drawable { * e.g. NORTH would return the location above the current location. */ Location newLoc = entityLoc.getRelativeLocation(d); - playerLoc.setDirection(d); + entityLoc.setDirection(d); if(currentMap.isValidLocation(newLoc)) { currentAction = PlayerAction.MOVING; entityLoc.setDirection(d); @@ -130,6 +130,14 @@ public class Player extends Entity implements Drawable { } } + /** + * Get animated sprite. + * @return Animated sprite. + */ + public Sprite getSprite() { + return playerSprite.getSprite(); + } + /** * Draw the player on screen. */