From 46acb06393ac6c7b93cc086ebcf55322f2175873 Mon Sep 17 00:00:00 2001 From: ms622 <ms622@hdm-stuttgart.de> Date: Sat, 9 Dec 2023 16:02:01 +0100 Subject: [PATCH] update: added test map in GameSceneController.java, add: textures, update: variables in TileManager.java #41 #39 --- .../Controller/GameSceneController.java | 30 ++++++++++++++++++ .../battlearena/Model/Entity/Player.java | 2 +- .../battlearena/Model/Map/TileManager.java | 19 ++++++++--- src/main/resources/fxml/GameScene.fxml | 5 ++- src/main/resources/textures/map/Grass01.png | Bin 0 -> 1802 bytes src/main/resources/textures/map/Grass02.png | Bin 0 -> 1800 bytes src/main/resources/textures/map/Grass04.png | Bin 0 -> 1956 bytes src/main/resources/textures/map/Stone01.png | Bin 0 -> 1859 bytes src/main/resources/textures/map/Stone02.png | Bin 0 -> 1953 bytes .../resources/textures/map/mapPlaceholder.png | Bin 3227 -> 0 bytes .../textures/map/stoneExampleTexture.png | Bin 3100 -> 0 bytes 11 files changed, 48 insertions(+), 8 deletions(-) create mode 100644 src/main/resources/textures/map/Grass01.png create mode 100644 src/main/resources/textures/map/Grass02.png create mode 100644 src/main/resources/textures/map/Grass04.png create mode 100644 src/main/resources/textures/map/Stone01.png create mode 100644 src/main/resources/textures/map/Stone02.png delete mode 100644 src/main/resources/textures/map/mapPlaceholder.png delete mode 100644 src/main/resources/textures/map/stoneExampleTexture.png diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java index 9c8b490d..3882c1e0 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java @@ -4,6 +4,7 @@ import de.hdm_stuttgart.battlearena.Model.Entity.EntityFactory; import de.hdm_stuttgart.battlearena.Model.Entity.EntityType; import de.hdm_stuttgart.battlearena.Model.Entity.IEntity; import de.hdm_stuttgart.battlearena.Model.Inputs.InputHandler; +import de.hdm_stuttgart.battlearena.Model.Map.TileManager; import javafx.animation.AnimationTimer; import javafx.fxml.FXML; @@ -31,14 +32,42 @@ public class GameSceneController implements Initializable { IEntity player; IEntity enemy; + TileManager tileManager; + + //map data + String mapString = "4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 " + + "4 1 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 3 " + + "4 2 1 1 1 1 1 2 2 2 1 1 1 1 2 1 1 3 " + + "4 1 1 1 2 2 4 3 3 1 4 3 3 3 3 2 2 3 " + + "4 1 1 1 2 2 4 1 1 1 1 1 1 1 3 1 2 3 " + + "4 1 1 1 2 2 4 1 3 3 3 1 1 1 3 2 2 3 " + + "4 1 1 1 2 2 4 1 1 1 1 1 1 1 3 2 1 3 " + + "4 1 1 1 2 2 4 3 3 1 4 3 3 3 3 2 1 3 " + + "4 1 1 1 1 1 1 2 2 2 1 1 1 1 1 1 1 3 " + + "4 1 1 1 2 2 4 3 3 1 3 3 3 3 3 2 1 3 " + + "4 1 1 1 1 2 4 3 3 1 3 3 3 3 3 1 1 3 " + + "4 1 1 1 1 2 4 3 3 1 3 3 3 3 3 2 2 3 " + + "4 1 1 1 1 1 4 3 3 1 3 3 3 3 3 1 2 3 " + + "4 1 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 3 " + + "4 1 1 2 1 1 1 2 2 2 1 1 1 1 1 1 1 3 " + + "4 1 1 1 2 2 4 3 3 1 3 3 3 3 3 2 2 3 " + + "4 1 1 1 2 2 4 3 3 1 3 3 3 3 3 2 2 3 " + + "4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3"; + int horizontalTileCount = 18; + int verticalTileCount = 18; + int diffTileCount = 5; + @Override public void initialize(URL url, ResourceBundle resourceBundle) { graphicsContext2D = canvas2D.getGraphicsContext2D(); + graphicsContext2D.setImageSmoothing(false); player = EntityFactory.createEntity(EntityType.PLAYER, graphicsContext2D, inputHandler); enemy = EntityFactory.createEntity(EntityType.ENEMY_PLAYER, graphicsContext2D, inputHandler); + tileManager = new TileManager(graphicsContext2D, diffTileCount, horizontalTileCount, verticalTileCount, mapString); + AnimationTimer gameLoop = new AnimationTimer() { @Override public void handle(long l) { @@ -58,6 +87,7 @@ public class GameSceneController implements Initializable { } private void renderContent(GraphicsContext graphicsContext) { + tileManager.renderMap(); player.renderEntity(graphicsContext); enemy.renderEntity(graphicsContext); } diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/Player.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/Player.java index 838affe1..f3242a2d 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/Player.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/Player.java @@ -61,7 +61,7 @@ class Player implements IEntity { mapPosX = 10; mapPosY = 10; boxCollider = new BoundingBox(mapPosX+15,mapPosY+10, playerWidth, playerHeight); - playerSpeed = 3; + playerSpeed = 5; playerDirection = EntityDirection.DOWN; } diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Map/TileManager.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Map/TileManager.java index 885d2308..cc320b3a 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Map/TileManager.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Map/TileManager.java @@ -16,9 +16,14 @@ public class TileManager { private final ITile[] tileSet; private final int[][] tileMap; + private final int horizontalTileCount; + private final int verticalTileCount; + public TileManager(GraphicsContext graphicsContext2D, int diffTileCount, int horizontalTileCount, int verticalTileCount, String mapString) { this.graphicsContext2D = graphicsContext2D; + this.horizontalTileCount = horizontalTileCount; + this.verticalTileCount = verticalTileCount; tileSet = new BackgroundTile[diffTileCount]; tileMap = new int[horizontalTileCount][verticalTileCount]; @@ -30,9 +35,15 @@ public class TileManager { private void createTiles() { try { tileSet[0] = TileFactory.createTile(TileType.WALKABLE, - new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/map/mapPlaceholder.png")))); - tileSet[1] = TileFactory.createTile(TileType.NON_WALKABLE, - new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/map/stoneExampleTexture.png")))); + new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/map/Grass01.png")))); + tileSet[1] = TileFactory.createTile(TileType.WALKABLE, + new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/map/Grass02.png")))); + tileSet[2] = TileFactory.createTile(TileType.WALKABLE, + new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/map/Grass04.png")))); + tileSet[3] = TileFactory.createTile(TileType.NON_WALKABLE, + new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/map/Stone01.png")))); + tileSet[4] = TileFactory.createTile(TileType.NON_WALKABLE, + new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/map/Stone02.png")))); } catch (Exception e) { log.error(e); } @@ -51,7 +62,7 @@ public class TileManager { } } - public void renderMap(int horizontalTileCount, int verticalTileCount) { + public void renderMap() { int currentTile; int scaledTileSize = 48; //todo: later replace "48" with value from gameScene. int tilePosX; diff --git a/src/main/resources/fxml/GameScene.fxml b/src/main/resources/fxml/GameScene.fxml index f6f5b8cd..f046db58 100644 --- a/src/main/resources/fxml/GameScene.fxml +++ b/src/main/resources/fxml/GameScene.fxml @@ -4,12 +4,11 @@ <?import javafx.scene.layout.AnchorPane?> <?import javafx.scene.layout.StackPane?> - -<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.hdm_stuttgart.battlearena.Controller.GameSceneController"> +<AnchorPane prefHeight="864.0" prefWidth="864.0" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.hdm_stuttgart.battlearena.Controller.GameSceneController"> <children> <StackPane prefHeight="400.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> <children> - <Canvas fx:id="canvas2D" height="400.0" width="600.0" /> + <Canvas fx:id="canvas2D" height="864.0" width="864.0" /> </children> </StackPane> </children> diff --git a/src/main/resources/textures/map/Grass01.png b/src/main/resources/textures/map/Grass01.png new file mode 100644 index 0000000000000000000000000000000000000000..e835d4676d2f80105626ece4d99b485a30b289fe GIT binary patch literal 1802 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4(FKU@Xmab`HpPc6ZLt$u9~nNK8(3 z$t*6&NvsSoW?;~mSUO>^_u&AMqyDRdE?9N&$;udYI$ycORaTgxE#hhr!n!(mRvl+< zjf!Sap>Vk75BZ3Lkp&w%LJA5C1YFn!@6NH(+>udnZ+gfrrF+Mp{<WA>yffy2bbzGx zHztjj(<b^HS+e!Yt|!&a?el_HrEOZVNQdj+-`%f2U;KK{za!FjcbULV|Cs6L^rn~1 zV+yYS8+&#B$yri=?_Y83l@xn0v2$u}H|IT7Il~OiN2?y}Ieon8vfg~_c~ev7{FoMT zi7TsZho{bR>n}Cz)4NjFZf(ACZ~oQr=|^Q=1)fP1R+H!o2yA3weOUkJa-V&lZc%tb zfL=e7&M6m9LE%kDK3`avC}dQ~;rMF8j^fvK{A+)o%*}l-IwQB>oc^s_PRtf_7f!x< z`&I>ugcL*GD<9Jk_g4$QJu5o!o6}$hQ`>uu&56$rDVA5)^Sr2j_$Qg?gDg|o)X(dc z&%Kpuo!_Yamt9;lYfmtn<7r?#RHR0Druq6ZXaU(A46KZ749q|lBLfqVkYZp3vl$q? z7^UItAVv*@n)XZv7O0viAPoX7K+FiInHDg?RR}C#MzBFj4W%+?0x8Y{kH}&M1`%Hn zW}I@WSD%4_IVUqDq9nrC$0|8LS1&OoKPgqOBDVmfi@~PC3dqb&ElE_U$j!+swyLmI z0;{kBvO&W7N(x{lCE2!05xxNm&iO^D3TAo+dIm~%TnY*bHbp6ERzWUqQ0+jTtx`rw zNr9EVetCJhUb(Seeo?x<p{1pzzJZaxk&!M?g>G?WUP)qwZeFo6#1NP{E~&-IMVSR9 znfZANAafIw@=Hr>m6Sjh!2!gbDamkq3QCJ|z_z3$>!;?V=BDPA6zd!68R}!xSCW~A zaA96CG&q0(qYsh+YBRv9&9k5+*#sC;t`$J{K>Y`FXfoK|;*u17BnA3L1_l<o21dF@ zmilo20iAD?l5ACyS(1|q4mh}fz#-_EQ-UfAQV$A(oJ>&2TID3>rQ0f1=%%EmC6?xt zDA~CeB^DPO7~1GV6rpN{h@zTlqmRXU8<3~1B7;(k^K(i;!ER@0Y-9rt3KUU91VD5| zVAX*vimoFdBflgcn4pR>lRfiFQi}?TfQbuiBg{VBD$vbBSRR^}Sz-q>08JQ47gFR{ zITn?a=NDy%fFlAPia1q3O@V|cQu>4>esJgmQ@<UTjXpdl*>OFxXIlo$x%Qqejv*F; zrIRoE9SY!SJ1yC1$i!W)_c1E|%=ZtBHBLL!F78g%GBo6|iTB?Aj=^`^=B@Srx7BaI z`TF;5&rNIJX|D`Ax_HZPd)tq(o0r9%aNmACpsQh7-GqNPv?c$ozaMvaPF-)st9dE^ zK1HN&lmGhu)_cXi{a%{Fa>YgFKYCBxJE$@#^Q6ym$pb3F=^_V~=Gt4&obHz&ePox? zJ645FKabDIdeAf_#nAHD9D(~TE)!=y+QD3;ur|s6_0)MEmnkpU7hP<bb?p|9uR=9n zm5<4dIog(z%e&osp3m^vBf&Ub^`^nMcjx08zV7n1`jE9IuQE(VA@t)$MfHQ{!-7f< z@qCyzb-tNW|K2BSqF=jM+~-h<={dT8@}rtRE+tPAc6EL}cJ5lY_06qwmjs166!L_X r^A^A0Keb%R?PJo^Njk?~Omh0)AUP@SQzNGWsG#z6^>bP0l+XkKx$S;E literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/map/Grass02.png b/src/main/resources/textures/map/Grass02.png new file mode 100644 index 0000000000000000000000000000000000000000..144fad81f75b681454b58768081394cb40aaeead GIT binary patch literal 1800 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4(FKU@Xmab`HpPc6ZLt$u9~nNK8(3 z$t*6&NvsSoW?;~mSUO>^_u&AMqyDRdE?9N&$;udYI$ycORaTgxE#hhr!n!(mRvl+< zjf!Sap>Vk75BZ3Lkp&w%LJA5C1YFn!@6NH(+>udnZ+gfrrF+Mp{<WA>yffy2bbzGx zHztjj(<b^HS+e!Yt|!&a?el_HrEOZVNQdj+-`%f2U;KK{za!FjcbULV|Cs6L^rn~1 zV+yYS8+&#B$yri=?_Y83l@xn0v2$u}H|IT7Il~OiN2?y}Ieon8vfg~_c~ev7{FoMT zi7TsZho{bR>n}Cz)4NjFZf(ACZ~oQr=|^Q=1)fP1R+H!o2yA3weOUkJa-V&lZc%tb zfL=e7&M6m9LE%kDK3`avC}dQ~;rMF8j^fvK{A+)o%*}l-IwQB>oc^s_PRtf_7f!x< z`&I>ugcL*GD<9Jk_g4$QJu5o!o6}$hQ`>uu&56$rDVA5)^Sr2j_$Qg?gDg|o)X(dc z&%Kpuo!_Yamt9;lYfmtn<7r?#RHR0Druq6ZXaU(A46KZ749q|lBLfqVkYZp3vl$q? z7^UItAVv*@n)XZv7O0viAPoX7K+FiInHDg?RR}C#MzBFj4W%+?0x8Y{kH}&M1`%Hn zW}I@WSD%4_IVUqDq9nrC$0|8LS1&OoKPgqOBDVmfi@~PC3dqb&ElE_U$j!+swyLmI z0;{kBvO&W7N(x{lCE2!05xxNm&iO^D3TAo+dIm~%TnY*bHbp6ERzWUqQ0+jTtx`rw zNr9EVetCJhUb(Seeo?x<p{1pzzJZaxk&!M?g>G?WUP)qwZeFo6#1NP{E~&-IMVSR9 znfZANAafIw@=Hr>m6Sjh!2!gbDamkq3QCJ|z_z3$>!;?V=BDPA6zd!68R}!xSCW~A zaA96CG&q0(qYsh+YBRv9&9k5+*#sC;t`$J{K>Y`FXfoK|;*u17BnA3L1_l<o21dF@ zmilo20iAD?l5ACyS(1|q4mh}fz#-_EQ-UfAQV$A(oJ>&2TID3>rQ0f1=%%EmC6?xt zDA~CeB^DPO7}@AU6rpN{h@zTlqmRXU8<3~1B7;(k^K(i;!ER@03^Wr%6cGUs9T8Y{ zAd8~w2*}7U$p<E=qReE^ypq(Sf+Aqz0^10)54Q?*vk;bt=4F=H!3;nXM$&~8IaZEE zCFS`=*&*PFfQKSZ6;M+kA&QhfA&DOx`oPq0$7Q1r&q;P%m4dY;z?^IA>Eak-As9Q! z*YB_cPwQMQ?f}7@$ZZ9UQyv#dl&yKl^hf7r(AK8d6VFdhpB2@Wma{+IzWS1_t$p8p z`{M`J>0jIU-}YJO`@OG~4%~@Zmn?JAMI!p)gaZl*D)ILGlF$1(FV_Fe_^IP?_51ol zM#meu>n)nvO4iG}p80;te8Q5>rBXG$g6DNb1-3AkTZI^W3Y=lqzhu+A1*aFjzRmLH zk-%Y-rsC#<_s^d`c3q6MZ14WJkMe$<J9u^dt4$5n8&;`*jI3DYC^%o=WuXisQ^J$? zX1TvLl)|i|D>P<^hE8FTRFZd_)Aua;%NHk;6M`xmT>hIJ`1M3L#jwy;p?T7qklJ~H zFP}Yp$`_JwX!5#S8#2wMl8XNAW%6F4b;K+0iknj3tW=gs6IT4#AX;S=d1a?zm)Ep( lmLs#Tr?1|<(p5$HH}hS&<t2Zfi<g6nDNk2Fmvv4FO#m$Rc*Ot! literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/map/Grass04.png b/src/main/resources/textures/map/Grass04.png new file mode 100644 index 0000000000000000000000000000000000000000..4ce012b5eac6c41488efe96c5f66eb43c28c98ce GIT binary patch literal 1956 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4(FKU@Xmab`HpPc6ZLt$u9~nNK8(3 z$t*6&NvsSoW?;~mSUO>^_u&AMqyDRdE?9N&$;udYI$ycORaTgxE#hhr!n!(mRvl+< zjf!Sap>Vk75BZ3Lkp&w%LJA5C1YFn!@6NH(+>udnZ+gfrrF+Mp{<WA>yffy2bbzGx zHztjj(<b^HS+e!Yt|!&a?el_HrEOZVNQdj+-`%f2U;KK{za!FjcbULV|Cs6L^rn~1 zV+yYS8+&#B$yri=?_Y83l@xn0v2$u}H|IT7Il~OiN2?y}Ieon8vfg~_c~ev7{FoMT zi7TsZho{bR>n}Cz)4NjFZf(ACZ~oQr=|^Q=1)fP1R+H!o2yA3weOUkJa-V&lZc%tb zfL=e7&M6m9LE%kDK3`avC}dQ~;rMF8j^fvK{A+)o%*}l-IwQB>oc^s_PRtf_7f!x< z`&I>ugcL*GD<9Jk_g4$QJu5o!o6}$hQ`>uu&56$rDVA5)^Sr2j_$Qg?gDg|o)X(dc z&%Kpuo!_Yamt9;lYfmtn<7r?#RHR0Druq6ZXaU(A46KZ749q|lBLfqVkYZp3vl$q? z7^UItAVv*@n)XZv7O0viAPoX7K+FiInHDg?RR}C#MzBFj4W%+?0x8Y{kH}&M1`%Hn zW}I@WSD%4_IVUqDq9nrC$0|8LS1&OoKPgqOBDVmfi@~PC3dqb&ElE_U$j!+swyLmI z0;{kBvO&W7N(x{lCE2!05xxNm&iO^D3TAo+dIm~%TnY*bHbp6ERzWUqQ0+jTtx`rw zNr9EVetCJhUb(Seeo?x<p{1pzzJZaxk&!M?g>G?WUP)qwZeFo6#1NP{E~&-IMVSR9 znfZANAafIw@=Hr>m6Sjh!2!gbDamkq3QCJ|z_z3$>!;?V=BDPA6zd!68R}!xSCW~A zaA96CG&q0(qYsh+YBRv9&9k5+*#sC;t`$J{K>Y`FXfoK|;*u17BnA3L1_l<o21dF@ zmilo20iAD?l5ACyS(1|q4mh}fz#-_EQ-UfAQV$A(oJ>&2TID3>rQ0f1=%%EmC6?xt zDA~CeB^DPOnAqq;6rpN{h@zTlqmRXU8<3~1B7;(k^K(i;!ER@0Y-9rt3KUU91VD5| zVAX*vimoFdBflgcn4pR>lRfiFQi}?TfQbuiBg{VBD$vbBSRR^}Sz-q>08JQ47gFR{ zITn?a=NDy%fFlAPia1q3O@V|cQu>4>esJgmQ@<UTjXpdl*>O#=>6r-3xi>vs978Mw zODEs<iVhTLOJAO;<dobiqCD-A!pbJIZ`)X-Cvd&`{KfE>-d8Wyy;*_zwnyBAvYXhq zgyg*b7BKt7yBgs%bFF_9&a9dF^Z(4P-=YqFyXGU}sj_tMu9D@|PoLj^|7b@1Z(aFi z?n_Gorsu4>en>s{=fr={g+flxUvyZ$e#v{!cF`bLB{zkjTkDT|pI79XWT8L*S?<I7 zc{QIGC@$aG^kqrWw5<F`TRrFW{++cpURyDQ>4Z#Z>d#*bdsgsYTyS|ybEXi>3zo1c z3>VdBNSr#J-TgXjMehAJ&I>19t+@45bZ!c~ITUtQ$1*GL@m@0nMxoPZr*Q<AiLj*x zp5#arWY#;<a?hag)Q<∋VVWFOi@2qcmlYbjqU%D_w08>%Gcc-?(m7n*Olx%&~Ot z2`kwh53KoA&#j}uQxs{rT4qy^pzPc&C!XG#S{|?QKH}av2BjrSn=dr&Vs7S6T&el) z&9ck~!3Ea7438FXKOFRDTlSGNyAwI>^N$%8eLu+JQB~f-FzNT2*a=ovpC88_VG>!( zZ*%yL<BzASIje*_{;hapSUV?n^2v+qB0}Yt*M^z$+Gg)}^zBu99#((y%If1~(hp}c x=>GlnC_Q+mc8>8ytB^mJPZzsf{&8UaXZx(sUw$14GoOHpP)}Dsmvv4FO#tph$vgl6 literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/map/Stone01.png b/src/main/resources/textures/map/Stone01.png new file mode 100644 index 0000000000000000000000000000000000000000..b6cf13f66633060803264739b889f64c32877a0e GIT binary patch literal 1859 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4(FKU@Xmab`HpPc6ZLt$u9~nNK8(3 z$t*6&NvsSoW?;~mSUO>^_u&AMqyDRdE?9N&$;udYI$ycORaTgxE#hhr!n!(mRvl+< zjf!Sap>Vk75BZ3Lkp&w%LJA5C1YFn!@6NH(+>udnZ+gfrrF+Mp{<WA>yffy2bbzGx zHztjj(<b^HS+e!Yt|!&a?el_HrEOZVNQdj+-`%f2U;KK{za!FjcbULV|Cs6L^rn~1 zV+yYS8+&#B$yri=?_Y83l@xn0v2$u}H|IT7Il~OiN2?y}Ieon8vfg~_c~ev7{FoMT zi7TsZho{bR>n}Cz)4NjFZf(ACZ~oQr=|^Q=1)fP1R+H!o2yA3weOUkJa-V&lZc%tb zfL=e7&M6m9LE%kDK3`avC}dQ~;rMF8j^fvK{A+)o%*}l-IwQB>oc^s_PRtf_7f!x< z`&I>ugcL*GD<9Jk_g4$QJu5o!o6}$hQ`>uu&56$rDVA5)^Sr2j_$Qg?gDg|o)X(dc z&%Kpuo!_Yamt9;lYfmtn<7r?#RHR0Druq6ZXaU(A46KZ749q|lBLfqVkYZp3vl$q? z7^UItAVv*@n)XZv7O0viAPoX7K+FiInHDg?RR}C#MzBFj4W%+?0x8Y{kH}&M1`%Hn zW}I@WSD%4_IVUqDq9nrC$0|8LS1&OoKPgqOBDVmfi@~PC3dqb&ElE_U$j!+swyLmI z0;{kBvO&W7N(x{lCE2!05xxNm&iO^D3TAo+dIm~%TnY*bHbp6ERzWUqQ0+jTtx`rw zNr9EVetCJhUb(Seeo?x<p{1pzzJZaxk&!M?g>G?WUP)qwZeFo6#1NP{E~&-IMVSR9 znfZANAafIw@=Hr>m6Sjh!2!gbDamkq3QCJ|z_z3$>!;?V=BDPA6zd!68R}!xSCW~A zaA96CG&q0(qYsh+YBRv9&9k5+*#sC;t`$J{K>Y`FXfoK|;*u17BnA3L1_l<o21dF@ zmilo20iAD?l5ACyS(1|q4mh}fz#-_EQ-UfAQV$A(oJ>&2TID3>rQ0f1=%%EmC6?xt zDA@&<<maUt7~1GV6rpN{h@zTlqmRXU8<3~1B7;(k^K(i;!ER@0Y-9rt3KUU91VD5| zVAX*vimoFdBflgcn4pR>lRfiFQi}?TfQbuiBg{VBD$vbBSRR^}Sz-q>08JQ47gFR{ zITn?a=NDy%fFlAPia1q3O@V|cQu>4>esJgmQ@<UTjXpdl*>SnOaySCaxfPx+jv*F; zslkp#%?3PEj9X%MY`10p`CqswQ$Fy7<w?mRg_AwIcSjrvILol@N$gq`;eGXf7mcjH z&%IijEtdBDZB^u=#}-j{6`rxBB(^L+{3Sdz^?C7f<rv{7ZXYHc$YFXHpkVRP^23F< zWr7Dbr?g8>Q~cJjzr`!Dj3IO3i&YZU)16vt7EPME^Hh=q`{vaTiofleE1G+vglUrF zr$e(&t$kmgd)>sHaj)Zw_^v(tO#9;fHT0As0uH&XnXxBr-sC+doazhpZ`!F=C9HQ* z`tai0>&Gd^cY`)v`feTn;P-<wn)%rZRjFDx&ip)>9>&0)rOmmo|NGa}nKwhWPj{a_ zJ@$vMG@B2znA5IM8OdGm3WYA;u=!Q$Ua-;R7=!<1xzYxGwu!#JpJuP<nQ|`h(2nO4 zhrh)qOo-&{F<jU2(BYc`)4auhXE!zPb(_!dU7+AZowVSS;0UADer=0wIlnyHXdg1w yKhbqVkHOW>s_##J{`e#0d4FM=*-WEJQ|$A;A6fTXZ~Jsm3FqnR=d#Wzp$P!5CYELZ literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/map/Stone02.png b/src/main/resources/textures/map/Stone02.png new file mode 100644 index 0000000000000000000000000000000000000000..2ac41bee77062960aa2d8cfc921f66e45de629ba GIT binary patch literal 1953 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4(FKU@Xmab`HpPc6ZLt$u9~nNK8(3 z$t*6&NvsSoW?;~mSUO>^_u&AMqyDRdE?9N&$;udYI$ycORaTgxE#hhr!n!(mRvl+< zjf!Sap>Vk75BZ3Lkp&w%LJA5C1YFn!@6NH(+>udnZ+gfrrF+Mp{<WA>yffy2bbzGx zHztjj(<b^HS+e!Yt|!&a?el_HrEOZVNQdj+-`%f2U;KK{za!FjcbULV|Cs6L^rn~1 zV+yYS8+&#B$yri=?_Y83l@xn0v2$u}H|IT7Il~OiN2?y}Ieon8vfg~_c~ev7{FoMT zi7TsZho{bR>n}Cz)4NjFZf(ACZ~oQr=|^Q=1)fP1R+H!o2yA3weOUkJa-V&lZc%tb zfL=e7&M6m9LE%kDK3`avC}dQ~;rMF8j^fvK{A+)o%*}l-IwQB>oc^s_PRtf_7f!x< z`&I>ugcL*GD<9Jk_g4$QJu5o!o6}$hQ`>uu&56$rDVA5)^Sr2j_$Qg?gDg|o)X(dc z&%Kpuo!_Yamt9;lYfmtn<7r?#RHR0Druq6ZXaU(A46KZ749q|lBLfqVkYZp3vl$q? z7^UItAVv*@n)XZv7O0viAPoX7K+FiInHDg?RR}C#MzBFj4W%+?0x8Y{kH}&M1`%Hn zW}I@WSD%4_IVUqDq9nrC$0|8LS1&OoKPgqOBDVmfi@~PC3dqb&ElE_U$j!+swyLmI z0;{kBvO&W7N(x{lCE2!05xxNm&iO^D3TAo+dIm~%TnY*bHbp6ERzWUqQ0+jTtx`rw zNr9EVetCJhUb(Seeo?x<p{1pzzJZaxk&!M?g>G?WUP)qwZeFo6#1NP{E~&-IMVSR9 znfZANAafIw@=Hr>m6Sjh!2!gbDamkq3QCJ|z_z3$>!;?V=BDPA6zd!68R}!xSCW~A zaA96CG&q0(qYsh+YBRv9&9k5+*#sC;t`$J{K>Y`FXfoK|;*u17BnA3L1_l<o21dF@ zmilo20iAD?l5ACyS(1|q4mh}fz#-_EQ-UfAQV$A(oJ>&2TID3>rQ0f1=%%EmC6?xt zDA@&<<maUt7}@AU6rpN{h@zTlqmRXU8<3~1B7;(k^K(i;!ER@03^Wr%6cGUs9T8Y{ zAd8~w2*}7U$p<E=qReE^ypq(Sf+Aqz0^10)54Q?*vk;bt=4F=H!3;nXM$&~8IaZEE zCFS`=*&*PFfQKSZ6;M+kA&QhfA&DOx`oPq0$7Q1r&q;P%caK<$0dwv(PZ!4!3&GUj z-9?8Sc&-?lnTQ0aO3HPzI}82_Xo>Im8UBe;Q-Sp-gAub@VFk}ZMlOvCp1!bcJU%AO zc6U8@U0rvs<o<o9WS-VUkIgq*_U&hC+8?#{#nI0hAFb85o=tNW-M&gM&?DvSvdN#_ z_C)DT4_R;TWi;u^1e;IoAuBy5%1WM!aQv|Nd5P8BjJ<J_uV<aS=UO0i*!A0<`OlOj zbCxm0@?I$3DYJLm?M<rYl5wx}m&jJX%rWy`d@&#?sPD7G)m7f-&#GCT+ne+3^Uoz6 zIWOd$pY7{^_3K~58mEm*>_od#BiRo|c=+<2>pq-hxZQc(p%+Sg|0YXlHkFB}DI8Bb z?)B!TINv%C7XgdLmU-fWo&Ow{Md>6*{hgxcuvBF;*Mtw3B;I{wYJJf!*$}C~pQ|B$ z*RTE8-}A2<A6k6TeRDjcWP#3?D4nT`J@?3Hc^q5wS|!gsdS~Ft$&wEbZdx{Zql^ZV zh>P}_Z4;JE)-Y!>TawbOZ}dv#l{kx;lz)qhNYQH3oeICWD<|}bG`!zs>g91o!zXF| zcSUmr$$(H+wh1cPdk$t_iFA-wm^fc~?MJEjJ<QJA4mz*dzrg5%*fDuW2BC>-S|25| p-00Z7bFVP#pN9_fc0D=nSpRO`;|88rt2sdBr>Co*%Q~loCICt2wg~_L literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/map/mapPlaceholder.png b/src/main/resources/textures/map/mapPlaceholder.png deleted file mode 100644 index ca3f707dff2cf59fbcf284b896a786fafa5e9180..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3227 zcmV;M3}o|(P)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004XF*Lt006O% z3;baP000U}X+uL$b5ch_AW20-HZeIiHZ3wPF#rHaiJen-Sd;e_KHv9c4^~3h@UfR{ zfdC>StO&>uS)ve<0AYj>5<ta;hzeE|6%m|BRm6hT3P_!Z;-DzFXF-aHT8mX&IPM?Z zr?q{0@9pjT*ZaKZoag+`dCw1k5fUbm=Avo<IZ}l@I@lkNPe{bcy?_E0NZ<q@5a!Fm zX9dLo0Pq8Ocz$%SKl}l&ZvX-SaMdm(635~HgSt>AR{$W90N^4L=L-RlQUJ&<RLB$n z$QS^yQ?q0W0F(d#Y<YY_A^@rl0POThJ_P{Ssgv9n0NA1&sR#g#0RWjOM<fD3y8vKS zfl@32z`_8atUw|z1i-EVfLXROM*@Jo1ps!ASdb4uU;u!bLM+SxAUFa5Lmm^&10YNT zpfJ+E;Hh75g}6uo0Km(Y&6i8kGZeU$&>DC0@ZjPh;=*jPLSYvv5M~MFBAl0-BNIsH z15C~g000{K(ZT*WKal6<<l*LK=WOrv#iIUe@NXhMA@Se-yo>?_01!^k@7iDG<<<jm z#{sZ)ziX*m0NPdnXy5r=GusKES_;s5`HOit{6HR_p-{*?9UKY^3+*Lhp}jEUi$4D| z;cwuJe)jx89{$^U@Bnd|K$)$;ql5i%VQzM=QjX`#1VS-x_va)2$Ay3Wjw#XNG_hPP z6^ij#iMUWAO~-k;QjtU<$(7;~>3=fuAC~<IlXndOtcFj(PPPZN%WS}Y?g0Xe4p`E5 z06>28EsPoqkpK{9G%|Vj005J}`Hw&=0RYXHq~ibpyyzHQsFW8>#s~laM4*8xut5h5 z!4#~(4xGUqyucR%VFpA%3?#rj5JCpzfE)^;7?wd9RKPme1hudO8lVxH;SjXJF*pt9 z;1XPc>u?taU>Kgl7`%oF1VP9M6Ja4bh!J9r*dopd7nzO(B4J20l7OTj>4+3jBE`sZ zqynizYLQ(?Bl0bB6giDtK>Co|$RIL`{EECsF_eL_Q3KQhbwIhO9~z3rpmWi5G!I>X zmZEFX8nhlgfVQHi(M#xcbO3#dj$?q)F%D*o*<oCahecqCSQ;kB7GvdDHCB%`V;xvG zb`=}Io?-6@Bm#?o6YL0Hgb>1Pf{>6$SWH+$s3q(pv=X`qR|$iJF~TPzlc-O$C3+J1 z#CT#lv5;6stS0Uu9wDA3UMCI{Uz12A4#|?_P6{C<kTOXNNoz>kNG+sOq(0IRX`D<Z z>yT~9-sA|ffUF>wk++Z!kWZ5P$;0Hg6gtI-;!FvmBvPc55=u2?Kjj3apE5$3psG>L zsh-pbs)#zDT1jo7c2F-<hp7`Zb($s3n-)XMq%EV>(3)vyY4>O^>2$gY-Gd%Qm(Z8e zYv>2*=jns=cMJ`N4THx>VkjAF8G9M07`GWOnM|ey)0dgZR4~^v8<}UA514ONSSt1^ zd=-((5|uiYR+WC0=c-gyb5%dpd8!Lkt5pxHURHgkMpd&=<EaVM7OT~%9aX!jHm=T6 zcT$f~&rx5azF+-<`eO~UhJ{9;hDf7SW4Fc`jUg7sGG*~tLe_Ft1M4hnm`!3^via;x zb_M$zb}xHOQ$usAW~^qBW}W77%>fR^vEcAI*_=wwA<hlXdo2SkKP|D=YOQ9ieyum! zdfL9)V(oJ67VYcW?{#pUK%Fd|^*U`j_jL)nHo8%|g}U2y&+0zYW9xb83H8eL4(Z*| zNA+#=qxBc+@7C|pA2%>G2sV%zY%w@v@XU~7=xdm1xY6*0;iwVIXu6TaXrs|dqbIl~ z?uTdNHFy_3W~^@<VyraYW!!5#VPa`A+oZ&##pJ#z&6I1JX1dX|({#+t$SmBf*sRIy zjyctwYo1}g*}U8QjfJH}oW)9uHjBrW+LnCF1(r>g_pF#!K2~{F^;XxcN!DEJEbDF7 zS8PxlSDOr*I-AS3sI8l=#CDr)-xT5$k15hA^;2%zG3@;83hbKf2JJcaVfH2VZT8O{ z%p4LO);n}Nd~$Sk%yw*Wyz8XlG{dRHsl(}4XB%gsbDi@w7p6;)%MzD%mlsoQr;4X; zpL)xc<r?m~(zVm|qno>%+^yMd)ZNTI#eJ*$O)i@o$z8)e??LqN_gLa_%;TM>o2SC_ zkmoO6c3xRt`@J4dvz#WL)-Y|z+r(Soy~}%GIzByR`p)SCKE^%*pL(B%zNWq+-#xw~ ze%5}Oeh2)X`#bu}{g3#+;d$~F@lFL`0l@*~0lk45fwKc^10MvL1f>Tx1&sx}1}_Xg z6+#RN4Ot&@lW)Km@*DYMGu&q^n$Z=?2%QyL8~QNJCQKgI5srq>2;UHXZ>IT7>CCnW zh~P(Th`1kV8JQRPeH1AwGO8}>QM6NZadh`A)~w`N`)9q5@sFvDxjWlxwsLl7tZHmh zY-8-3xPZ8-xPf?w_(k!T5_A(J3GIpG#Ms0=iQ{tu=WLoYoaCBRmULsT<=mpV7v|~C z%bs^USv6UZd^m-e5|^?+<%1wXP%juy<)>~<9TW0|n}ttBzM_qyQL(qUN<5P0omQ3h zINdvaL;7fjPeygdGYL;pD|wL_lDQ-EO;$wK-mK5raoH_7l$?~Dqf!lNmb5F^Ft;eT zPi8AClMUo~=55LwlZVRp<RkfW^V=0{g-p?-v{J564i-!=s4I9|7+ZL_NWDl})HB~^ z{_6Q73xXDWy^yd_xUjR>xOiFd;3B_8yA~shQx|tGF<nx+WO!-t(tXQl%d(dJP~uop zRq|?i-13f6gVLp?Lo0$;G?l58$;)o8^jf)N6=9WRRqtw-)mv77Di@VstZ=NTuK2J< zxaQ(lPG8l0^?7aD+TKdH%I)h&>!j;$toK>JuS&gYLDkTP@C~gS@r~shUu{a>bfJ1` z^^VQ7&C1OKHDNXFTg<ks+w!3{qxO28e_hK~{jICFzS$<)*1z3%d-D#19Thv?@09Gk zwJUg6YrRE%^={Jcg58fAVjH@@=6>C{M|V%fo{xK_dk6MK@9S!GZ*1JJzrV5xZBjOk z9!NTH<(q(S+MDf~ceQX@Dh|Ry<-sT4rhI$jQ0Sq~!`#Eo-<f~6^$6=oc`MR7zjdrF zqivu)p}p_ujH8_$UL8lixBq_cG2>%($2E^vo}is5J@NVEf|KK?WT&2;PCq@=ncR8z zO#GQ^T~S@VXG71PKNocFOt)Y6$@AXlk6rM*aP%VgV%sIRORYVwJx6|U{ozQjTW{-S z_si{9Jg#)~P3t?+@6&(!YQWWV*Z9{iU7vZq@5byKw{9lg9JnRA_4s!7?H6|n?o8ZW zdXIRo{Jz@#>IeD{>VLHUv1Pz*;P_y`V9&!@5AO~Mho1hF|I>%z(nrik)gwkDjgOrl z9~%uCz4Bzvli{bbrxVZ0epdf^>vOB;-~HnIOV3#R*zgPai_gEVd8zYq@2jb=I>#f& zAH2?aJ@Kaet<Kwh@3`-}-^aZlnJD}~{!sJL`eVnZ&`<Y1=Y0PBFZYD=`z=Q}&j0`b zAY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF*m;eA5aGbhPJOBUy32;bRa{vGw zAOHXyAOXz}o1Opw0lY~>K~!jg?OCx(LqQPCNdh5lz{<utwko8sPA7ykHdZ!*g@Tn` zz92;e8!MYMBBV=g5s;K3So#$~u+Z*qiW{;^5N_b6+C1(qZ<%3t_FmY(ZTvPeIJ+9g zcy|AiTS9Sqk$*ma^zFs<?D>xC%?gBk0^#m!7$szp3R3xe(~0qDvW_v6%Fjny-|D6H zOdcrXr^`iluRH_t2{f5(kZvZA)%YOB)Ak<hPG_=eW|0l9Z}svC$TJ|HK)^<3X<pt2 z$0`p#KYti(Jd>Rx&wzXaw2?8&5MJM6*^98egFFNB2?S=REfgcXl0%@UVwH+{CwT_s z6EN9nZ_`0|rHH_$x&BW7RVT8NV5&k0i}khmrRD2!jQb~VuDvK}c?RSYaNB7H)^sd` zIqpSRE(+uskWYX%vTf|{Ha44~PGqHmHZq3)w%L|OS?zR52-lx^2_co}TMoPLF-B{R zcDK{s+z^>;ERsWM$ul6I0Ifo-0$8pJ8TIUZ=8@_L4h1yv2eY*ZMzQy%nti;$>V#`n z<D(c)chkodc?RSYaNi4Anu~Y9_g1z#)RzQzBl9*m2Fuijs6&0J_yd-E2Yb1?qB;No N002ovPDHLkV1kdF9nk;) diff --git a/src/main/resources/textures/map/stoneExampleTexture.png b/src/main/resources/textures/map/stoneExampleTexture.png deleted file mode 100644 index 29dfde5c4e557cfd2b1e4dc536f774faabea40a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3100 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 -- GitLab