From c8548d0f783e759ed71ef9ae0a8043b1a5bfa885 Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Mon, 20 Apr 2020 23:28:00 +0200 Subject: [PATCH] [DEV] tutorial 18 'player movement' implementation --- res/white.png | Bin 1868 -> 23077 bytes src/engineTester/MainGameLoop.java | 8 +++ src/entities/Camera.java | 12 ---- src/entities/Player.java | 94 +++++++++++++++++++++++++++ src/renderEngine/DisplayManager.java | 71 ++++++++++---------- 5 files changed, 135 insertions(+), 50 deletions(-) create mode 100644 src/entities/Player.java diff --git a/res/white.png b/res/white.png index 6db12c4efd0bd0079cdc0acc3d9c03949b25332d..0213f5674a024e17b7862e771c1426b7f6fd2332 100644 GIT binary patch delta 22972 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 literal 1868 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|GzJEyM^zyaB|(Yh3I#>^X_+~x z3MG{VsS2qTnLx>kTW_aF7RhS!wB3(%oz|eza-=AuZPl9xdiM4u^S>3o@tL~k&Z^5= zY}{LyTw}k%_jvz$L2z^SsXq`fIH$IC|vq&nb65Rdw}Tqb zo36fI%e8mk-VYs)$E#~UWVik;`qEKjIYo4);mh-$PUn};yYzHLPw}Mg+r_Kc=O^#x zDc1@YzP&DA{q^$?YdqStN?WHI@GExi{%*`{8SU!*!t>Oo<~2LpZJ%fhi#)mee6Q$_ zoeuNG>}%rx%8Sl_y>$BfteNsxK0W7NGGDxY`VY+wcO*alW}V!=y5Du)=HGK3|JgOm zNNd)5+0yrm-?Fu_d+Gh&%42A9^v*Vsj^k3&55C-Z#F!b<;h4(ib!FwHB^!^s@oK8c zjqE;5uBeD#7MWTK__BW4zlsn(O8s5JdPaij9+ zF>ANm)215ho4!+P2soLP5WIvb%&Y5f^2v?utGd)e&t|=H?7pUBnR?bTI&ON5>Bf|- zn`iEHg^K&Hn|Jrl-U{6qmhuJDV%Ah>E)C-oZPcm>y%C79zuHb>TXGe9cmLBQ8lO)FdI6y<$Gd9O* zxhoIHWrb^==DW>{_8-+<@n6jRpXkmF7yfb=F}|=X`rQ&0zyJ9ywX%7KLN9Ar)NWY$ zhEdn8q~3a;%w8n;_rL7PBl7$|)Xi#`+b7NSwqL>4-&5RED|kpJ7H#_QSDz4$>?!H49HuO2*F zv$}b;0!Lkgg{76|E|1Rt-dws#HWu%W@2>9OUCwZQg~lvVDRz^)W|vR4OgOui>tT3{ z0Be6;k7rlvna(7xeUD$uF>bqeG;-Sio%ZhQXKfczP!Kq;)s`uoFW{eli|ui3QkQZ*S`6&H((P^2}PtN*O&6}Yv)+MV`z9GoS^pWPH8LM7SIiG49CYf(| zP0Ms?ssFb_9&z!JX;xUC%i%J-}l*&r=`3x?QY?|e%a-fOf2&owfDYVZ`Lr=|I+JR z-7=Ohxy<6%bA9hI>yiXY%cJJQ2z5e``U%weklZsYoy(_Q-7D8-E-tI0y8VG(m@2&?@oCO|{#S9GG z!XV7ZFl&wkP>{XE)7O>#35&3ZkU)pyv3bC9E85e=F$7pZT`>ffX&i?Q4(xxP$iS{5 zRJCRDl7{JSOa=@G7#Nrtco?X~pq@!^7mXT8y%3