From 832fa5d11734e3d63d3531bfc52f97e6fd405ca3 Mon Sep 17 00:00:00 2001 From: NaulaN Date: Thu, 16 Jun 2022 16:15:52 +0200 Subject: [PATCH 1/5] Jeux de test pour les constructions --- .../entities/player/inventory/Stack.java | 3 +- .../entities/player/craft/CraftTest.java | 110 ++++++++++++++++++ 2 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 src/test/java/fr/sae/terraria/modele/entities/player/craft/CraftTest.java diff --git a/src/main/java/fr/sae/terraria/modele/entities/player/inventory/Stack.java b/src/main/java/fr/sae/terraria/modele/entities/player/inventory/Stack.java index 00b5916..0eaff13 100644 --- a/src/main/java/fr/sae/terraria/modele/entities/player/inventory/Stack.java +++ b/src/main/java/fr/sae/terraria/modele/entities/player/inventory/Stack.java @@ -104,7 +104,8 @@ public boolean removeQuantity(int quantity) return false; } - @Override public String toString(){ + @Override public String toString() + { if (item instanceof Block) return String.valueOf(((Block) item).getTypeOfBlock()); return item.toString(); diff --git a/src/test/java/fr/sae/terraria/modele/entities/player/craft/CraftTest.java b/src/test/java/fr/sae/terraria/modele/entities/player/craft/CraftTest.java new file mode 100644 index 0000000..1d8e340 --- /dev/null +++ b/src/test/java/fr/sae/terraria/modele/entities/player/craft/CraftTest.java @@ -0,0 +1,110 @@ +package fr.sae.terraria.modele.entities.player.craft; + +import fr.sae.terraria.modele.Environment; +import fr.sae.terraria.modele.entities.blocks.Block; +import fr.sae.terraria.modele.entities.items.Item; +import fr.sae.terraria.modele.entities.player.Player; +import fr.sae.terraria.modele.entities.player.craft.recipes.IngredientSet; +import fr.sae.terraria.modele.entities.player.craft.recipes.PickaxeRecipe; +import fr.sae.terraria.modele.entities.player.craft.recipes.RockRecipe; +import fr.sae.terraria.modele.entities.player.inventory.Stack; +import fr.sae.terraria.modele.entities.tools.MaterialSet; +import fr.sae.terraria.modele.entities.tools.Tool; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import java.util.Objects; + +import static org.junit.jupiter.api.Assertions.*; + + +public class CraftTest +{ + private static Environment environment; + private static Player player; + + + public CraftTest() { super(); } + + @BeforeAll public static void init() + { + environment = new Environment(1., 1.); + player = environment.getPlayer(); + } + + @Test public final void stockTest() + { + player.pickup(Item.STONE); + player.pickup(Item.STONE); + player.pickup(Item.STONE); + player.pickup(Item.STONE); + + boolean haveEnoughStones = false; + for (Stack stack : player.getInventory().get()) + if (Item.isStone(stack.getItem()) && stack.haveEnoughQuantity(RockRecipe.NB_STONES)) + haveEnoughStones = true; + assertTrue(haveEnoughStones); + + Block block = Craft.rock(environment); + player.pickup(block); + + boolean haveRock = false; + for (Stack stack : player.getInventory().get()) + if (stack.getItem() instanceof Block && Block.isRock((Block) stack.getItem())) + haveRock = true; + assertTrue(haveRock); + + boolean dontHaveStones = true; + for (Stack stack : player.getInventory().get()) + if (Item.isStone(stack.getItem())) { + dontHaveStones = false; + break; + } + assertTrue(dontHaveStones); + } + + @Test public final void pickaxeTest() + { + player.pickup(Item.WOOD); + player.pickup(Item.WOOD); + player.pickup(Item.WOOD); + player.pickup(Item.STICK); + player.pickup(Item.STICK); + + boolean haveEnoughWoods = false; + boolean haveEnoughSticks = false; + for (Stack stack : player.getInventory().get()) { + if (Item.isWood(stack.getItem()) && stack.haveEnoughQuantity(PickaxeRecipe.WoodRecipe.NB_WOODS)) + haveEnoughWoods = true; + if (Item.isStick(stack.getItem()) && stack.haveEnoughQuantity(PickaxeRecipe.NB_STICKS)) + haveEnoughSticks = true; + } + + assertTrue(haveEnoughWoods); + assertTrue(haveEnoughSticks); + Tool woodPickaxe = Craft.pickaxe(environment, MaterialSet.WOOD); + assertTrue(!Objects.isNull(woodPickaxe) && Tool.isPickaxe(woodPickaxe) && MaterialSet.isWood(woodPickaxe.getMaterial())); + player.pickup(woodPickaxe); + + boolean havePickaxe = false; + for (Stack stack : player.getInventory().get()) + if (Tool.isPickaxe((Tool) stack.getItem())) + havePickaxe = true; + assertTrue(havePickaxe); + + + boolean dontHaveWoods = true; + boolean dontHaveSticks = true; + for (Stack stack : player.getInventory().get()) { + System.out.println(stack.getItem()); + if (!Item.isWood(stack.getItem()) && stack.haveEnoughQuantity(PickaxeRecipe.WoodRecipe.NB_WOODS)) { + dontHaveWoods = false; + break; + } else if (!Item.isStick(stack.getItem()) && stack.haveEnoughQuantity(PickaxeRecipe.NB_STICKS)) { + dontHaveSticks = false; + break; + } + } + assertTrue(dontHaveSticks && dontHaveWoods); + } +} From 9574eee23a3fbeeddfd63774e4caeaad21dd9afa Mon Sep 17 00:00:00 2001 From: NaulaN Date: Thu, 16 Jun 2022 21:20:51 +0200 Subject: [PATCH 2/5] Ajustement Lexique, ajout du craft de la torche --- .../terraria/controller/MenuController.java | 63 +++++++-- .../fr/sae/terraria/modele/Environment.java | 1 - .../modele/entities/player/craft/Craft.java | 18 +++ .../player/craft/recipes/IngredientSet.java | 6 + .../player/craft/recipes/RockRecipe.java | 2 +- .../player/craft/recipes/TorchRecipe.java | 32 +++++ .../resources/fr/sae/terraria/vue/menu.fxml | 122 ++++++++---------- 7 files changed, 160 insertions(+), 84 deletions(-) create mode 100644 src/main/java/fr/sae/terraria/modele/entities/player/craft/recipes/TorchRecipe.java diff --git a/src/main/java/fr/sae/terraria/controller/MenuController.java b/src/main/java/fr/sae/terraria/controller/MenuController.java index f3ddf98..5d523b4 100644 --- a/src/main/java/fr/sae/terraria/controller/MenuController.java +++ b/src/main/java/fr/sae/terraria/controller/MenuController.java @@ -16,10 +16,20 @@ public class MenuController implements Initializable { @FXML public HBox recipeRock; + @FXML public HBox recipeTorch; + @FXML public HBox recipeWoodPickaxe; @FXML public HBox recipeStonePickaxe; @FXML public HBox recipeIronPickaxe; + @FXML public HBox recipeWoodAxe; + @FXML public HBox recipeStoneAxe; + @FXML public HBox recipeIronAxe; + + @FXML public HBox recipeWoodSword; + @FXML public HBox recipeStoneSword; + @FXML public HBox recipeIronSword; + public Environment environment = null; public Player player = null; @@ -27,28 +37,59 @@ public class MenuController implements Initializable @Override public void initialize(URL location, ResourceBundle resources) { // Craft de la roche à partir de 3 pierres - this.recipeRock.addEventFilter(Event.ANY, ev -> { - if (ev.getEventType().getName().equalsIgnoreCase("MOUSE_PRESSED")) + this.recipeRock.addEventFilter(Event.ANY, event -> { + if (event.getEventType().getName().equalsIgnoreCase("MOUSE_PRESSED")) this.player.pickup(Craft.rock(this.environment)); }); - this.recipeWoodPickaxe.addEventFilter(Event.ANY, ev -> { - if (ev.getEventType().getName().equalsIgnoreCase("MOUSE_PRESSED")) + this.recipeTorch.addEventFilter(Event.ANY, event -> { + if (event.getEventType().getName().equalsIgnoreCase("MOUSE_PRESSED")) + this.player.pickup(Craft.torch(this.environment)); + }); + + + // LES PIOCHES + this.recipeWoodPickaxe.addEventFilter(Event.ANY, event -> { + if (event.getEventType().getName().equalsIgnoreCase("MOUSE_PRESSED")) this.player.pickup(Craft.pickaxe(this.environment, MaterialSet.WOOD)); }); - this.recipeStonePickaxe.addEventFilter(Event.ANY, ev -> { - if (ev.getEventType().getName().equalsIgnoreCase("MOUSE_PRESSED")) + this.recipeStonePickaxe.addEventFilter(Event.ANY, event -> { + if (event.getEventType().getName().equalsIgnoreCase("MOUSE_PRESSED")) this.player.pickup(Craft.pickaxe(this.environment, MaterialSet.STONE)); }); - this.recipeIronPickaxe.addEventFilter(Event.ANY, ev -> { - if (ev.getEventType().getName().equalsIgnoreCase("MOUSE_PRESSED")) + this.recipeIronPickaxe.addEventFilter(Event.ANY, event -> { + if (event.getEventType().getName().equalsIgnoreCase("MOUSE_PRESSED")) this.player.pickup(Craft.pickaxe(this.environment, MaterialSet.IRON)); }); - this.recipeWoodPickaxe.addEventFilter(Event.ANY, ev -> { - if (ev.getEventType().getName().equalsIgnoreCase("MOUSE_PRESSED")) - this.player.pickup(Craft.pickaxe(this.environment, MaterialSet.WOOD)); + + + // LES HACHES + this.recipeWoodAxe.addEventFilter(Event.ANY, event -> { + + }); + + this.recipeStoneAxe.addEventFilter(Event.ANY, event -> { + + }); + + this.recipeIronAxe.addEventFilter(Event.ANY, event -> { + + }); + + + // LES EPEES + this.recipeWoodSword.addEventFilter(Event.ANY, event -> { + + }); + + this.recipeStoneSword.addEventFilter(Event.ANY, event -> { + + }); + + this.recipeIronSword.addEventFilter(Event.ANY, event -> { + }); } } diff --git a/src/main/java/fr/sae/terraria/modele/Environment.java b/src/main/java/fr/sae/terraria/modele/Environment.java index 672b5aa..011e8fb 100644 --- a/src/main/java/fr/sae/terraria/modele/Environment.java +++ b/src/main/java/fr/sae/terraria/modele/Environment.java @@ -6,7 +6,6 @@ import fr.sae.terraria.modele.entities.blocks.Block; import fr.sae.terraria.modele.entities.blocks.BlockSet; import fr.sae.terraria.modele.entities.blocks.Tree; -import fr.sae.terraria.modele.entities.entity.CollideObjectType; import fr.sae.terraria.modele.entities.entity.Entity; import fr.sae.terraria.modele.entities.entity.ReproductiveObjectType; import fr.sae.terraria.modele.entities.items.Meat; diff --git a/src/main/java/fr/sae/terraria/modele/entities/player/craft/Craft.java b/src/main/java/fr/sae/terraria/modele/entities/player/craft/Craft.java index 2d5b093..906c1df 100644 --- a/src/main/java/fr/sae/terraria/modele/entities/player/craft/Craft.java +++ b/src/main/java/fr/sae/terraria/modele/entities/player/craft/Craft.java @@ -7,6 +7,7 @@ import fr.sae.terraria.modele.entities.player.craft.recipes.Ingredient; import fr.sae.terraria.modele.entities.player.craft.recipes.PickaxeRecipe; import fr.sae.terraria.modele.entities.player.craft.recipes.RockRecipe; +import fr.sae.terraria.modele.entities.player.craft.recipes.TorchRecipe; import fr.sae.terraria.modele.entities.player.inventory.Inventory; import fr.sae.terraria.modele.entities.player.inventory.Stack; import fr.sae.terraria.modele.entities.tools.MaterialSet; @@ -33,6 +34,23 @@ public static Block rock(final Environment environment) return (!Objects.isNull(rockIngredients)) ? new Block(BlockSet.ROCK, environment) : null; } + public static Block torch(final Environment environment) + { + Inventory inventory = environment.getPlayer().getInventory(); + + Ingredient torchIngredients = TorchRecipe.apply(inventory); + if (!Objects.isNull(torchIngredients)) for (int i = 0; i < torchIngredients.get().length; i++) { + Stack stack = torchIngredients.get()[i]; + + if (Item.isStick(stack.getItem())) + stack.removeQuantity(TorchRecipe.NB_STICKS); + if (Item.isCoal(stack.getItem())) + stack.removeQuantity(TorchRecipe.NB_COALS); + } + + return (!Objects.isNull(torchIngredients)) ? new Block(BlockSet.TORCH, environment) : null; + } + public static Tool pickaxe(final Environment environment, final MaterialSet material) { Inventory inventory = environment.getPlayer().getInventory(); diff --git a/src/main/java/fr/sae/terraria/modele/entities/player/craft/recipes/IngredientSet.java b/src/main/java/fr/sae/terraria/modele/entities/player/craft/recipes/IngredientSet.java index 6a608fe..a307d78 100644 --- a/src/main/java/fr/sae/terraria/modele/entities/player/craft/recipes/IngredientSet.java +++ b/src/main/java/fr/sae/terraria/modele/entities/player/craft/recipes/IngredientSet.java @@ -40,4 +40,10 @@ public static boolean irons(final Ingredient ingredient, final Stack stack, fina boolean haveEnoughIrons = Item.isIron(stack.getItem()) && stack.haveEnoughQuantity(nbStones); return haveEnoughIrons && IngredientSet.putStackIntoIngredientsList(ingredient, stack); } + + public static boolean coals(final Ingredient ingredient, final Stack stack, final int nbCoals) + { + boolean haveEnoughCoals = Item.isCoal(stack.getItem()) && stack.haveEnoughQuantity(nbCoals); + return haveEnoughCoals && IngredientSet.putStackIntoIngredientsList(ingredient, stack); + } } diff --git a/src/main/java/fr/sae/terraria/modele/entities/player/craft/recipes/RockRecipe.java b/src/main/java/fr/sae/terraria/modele/entities/player/craft/recipes/RockRecipe.java index 27178a3..ac1e260 100644 --- a/src/main/java/fr/sae/terraria/modele/entities/player/craft/recipes/RockRecipe.java +++ b/src/main/java/fr/sae/terraria/modele/entities/player/craft/recipes/RockRecipe.java @@ -13,7 +13,7 @@ public class RockRecipe public static Ingredient apply(final Inventory inventory) { Ingredient ingredient = new Ingredient(RockRecipe.NB_INGREDIENTS); - boolean haveEnoughStone ; + boolean haveEnoughStone; int i = 0; do { diff --git a/src/main/java/fr/sae/terraria/modele/entities/player/craft/recipes/TorchRecipe.java b/src/main/java/fr/sae/terraria/modele/entities/player/craft/recipes/TorchRecipe.java new file mode 100644 index 0000000..6090c03 --- /dev/null +++ b/src/main/java/fr/sae/terraria/modele/entities/player/craft/recipes/TorchRecipe.java @@ -0,0 +1,32 @@ +package fr.sae.terraria.modele.entities.player.craft.recipes; + +import fr.sae.terraria.modele.entities.player.inventory.Inventory; +import fr.sae.terraria.modele.entities.player.inventory.Stack; + + +public class TorchRecipe +{ + private static final int NB_INGREDIENTS = 2; + public static final int NB_COALS = 1; + public static final int NB_STICKS = 1; + + + public static Ingredient apply(final Inventory inventory) + { + Ingredient ingredient = new Ingredient(TorchRecipe.NB_INGREDIENTS); + boolean haveEnoughCoal = false; + boolean haveEnoughSticks = false; + + int i = 0; + do { + Stack stack = inventory.get().get(i); + + if (!haveEnoughCoal) + haveEnoughCoal = IngredientSet.coals(ingredient, stack, TorchRecipe.NB_COALS); + if (!haveEnoughSticks) + haveEnoughSticks = IngredientSet.sticks(ingredient, stack, TorchRecipe.NB_COALS); + } while (i < inventory.get().size() && (!haveEnoughCoal || !haveEnoughSticks)); + + return (haveEnoughCoal && haveEnoughSticks) ? ingredient : null; + } +} diff --git a/src/main/resources/fr/sae/terraria/vue/menu.fxml b/src/main/resources/fr/sae/terraria/vue/menu.fxml index 38fd511..ab8eee4 100644 --- a/src/main/resources/fr/sae/terraria/vue/menu.fxml +++ b/src/main/resources/fr/sae/terraria/vue/menu.fxml @@ -13,16 +13,15 @@ + xmlns="http://javafx.com/javafx/11" xmlns:fx="http://javafx.com/fxml/1"> - + - + @@ -31,11 +30,9 @@ - + - + @@ -44,75 +41,59 @@
- - - + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + + - + + + +
@@ -121,17 +102,16 @@ - + - +
- +
From ee6bc3b1ee083136baad6b264a9b8ea80d4268b6 Mon Sep 17 00:00:00 2001 From: NaulaN Date: Thu, 16 Jun 2022 21:24:49 +0200 Subject: [PATCH 3/5] =?UTF-8?q?Ajout=20des=20loots=20suppl=C3=A9mentaire?= =?UTF-8?q?=20des=20blocks=20de=20type=20Roche?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/fr/sae/terraria/modele/entities/blocks/Block.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/fr/sae/terraria/modele/entities/blocks/Block.java b/src/main/java/fr/sae/terraria/modele/entities/blocks/Block.java index 1f74001..e50455e 100644 --- a/src/main/java/fr/sae/terraria/modele/entities/blocks/Block.java +++ b/src/main/java/fr/sae/terraria/modele/entities/blocks/Block.java @@ -76,6 +76,11 @@ private void loots() } else if (Block.isRock(this)) { for (int loot = 0; loot < Block.ROCK_NB_LOOTS; loot++) player.pickup(Item.STONE); + + if (Math.random() > .5) + player.pickup(Item.COAL); + if (Math.random() < .05) + player.pickup(Item.IRON); } else if (Block.isTallGrass(this)) { for (int loot = (int) (Math.random()*3)+1; loot <= TallGrass.LOOTS_FIBRE_MAX; loot++) player.pickup(Item.FIBER); From 8187ef48b00cc5f8acab99f48937a0b228b676f7 Mon Sep 17 00:00:00 2001 From: NaulaN Date: Thu, 16 Jun 2022 21:32:36 +0200 Subject: [PATCH 4/5] Fix pprobleme torche --- src/main/java/fr/sae/terraria/modele/Environment.java | 2 -- .../modele/entities/player/craft/recipes/TorchRecipe.java | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/fr/sae/terraria/modele/Environment.java b/src/main/java/fr/sae/terraria/modele/Environment.java index 011e8fb..b6cc2d6 100644 --- a/src/main/java/fr/sae/terraria/modele/Environment.java +++ b/src/main/java/fr/sae/terraria/modele/Environment.java @@ -121,8 +121,6 @@ private void gameLoop() KeyFrame keyFrame = new KeyFrame(Duration.seconds(Terraria.TARGET_FPS), (ev -> { // TODO TEST if (!caught[0]) { - this.player.pickup(new Block(BlockSet.TORCH, this)); - this.player.pickup(new Meat(this)); this.player.pickup(new Tool(ToolSet.PICKAXE, MaterialSet.IRON)); this.player.pickup(new Vodka(this)); this.player.pickup(new Tool(ToolSet.SWORD, MaterialSet.IRON)); diff --git a/src/main/java/fr/sae/terraria/modele/entities/player/craft/recipes/TorchRecipe.java b/src/main/java/fr/sae/terraria/modele/entities/player/craft/recipes/TorchRecipe.java index 6090c03..b66ec31 100644 --- a/src/main/java/fr/sae/terraria/modele/entities/player/craft/recipes/TorchRecipe.java +++ b/src/main/java/fr/sae/terraria/modele/entities/player/craft/recipes/TorchRecipe.java @@ -25,6 +25,7 @@ public static Ingredient apply(final Inventory inventory) haveEnoughCoal = IngredientSet.coals(ingredient, stack, TorchRecipe.NB_COALS); if (!haveEnoughSticks) haveEnoughSticks = IngredientSet.sticks(ingredient, stack, TorchRecipe.NB_COALS); + i++; } while (i < inventory.get().size() && (!haveEnoughCoal || !haveEnoughSticks)); return (haveEnoughCoal && haveEnoughSticks) ? ingredient : null; From a4af44d25b567b3b2a7a9bb085ddd16c72778777 Mon Sep 17 00:00:00 2001 From: NaulaN Date: Fri, 17 Jun 2022 10:58:55 +0200 Subject: [PATCH 5/5] eat sound --- .../fr/sae/terraria/modele/Environment.java | 4 +--- .../terraria/modele/entities/items/Meat.java | 3 ++- .../terraria/modele/entities/items/Vodka.java | 2 ++ .../terraria/modele/entities/player/Player.java | 1 + .../entities/player/inventory/Inventory.java | 2 ++ .../resources/fr/sae/terraria/sound/hit.wav | Bin 0 -> 82240 bytes 6 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 src/main/resources/fr/sae/terraria/sound/hit.wav diff --git a/src/main/java/fr/sae/terraria/modele/Environment.java b/src/main/java/fr/sae/terraria/modele/Environment.java index b6cc2d6..f9a1282 100644 --- a/src/main/java/fr/sae/terraria/modele/Environment.java +++ b/src/main/java/fr/sae/terraria/modele/Environment.java @@ -4,11 +4,9 @@ import fr.sae.terraria.modele.entities.Rabbit; import fr.sae.terraria.modele.entities.Slime; import fr.sae.terraria.modele.entities.blocks.Block; -import fr.sae.terraria.modele.entities.blocks.BlockSet; import fr.sae.terraria.modele.entities.blocks.Tree; import fr.sae.terraria.modele.entities.entity.Entity; import fr.sae.terraria.modele.entities.entity.ReproductiveObjectType; -import fr.sae.terraria.modele.entities.items.Meat; import fr.sae.terraria.modele.entities.items.Vodka; import fr.sae.terraria.modele.entities.player.Player; import fr.sae.terraria.modele.entities.tools.MaterialSet; @@ -177,7 +175,7 @@ public static Clip playSound(String path, boolean loop) } catch (Exception e) { e.printStackTrace(); } if (!Objects.isNull(clip)) { - clip.loop((loop) ? Clip.LOOP_CONTINUOUSLY : 0); + clip.loop(loop ? Clip.LOOP_CONTINUOUSLY : 0); clip.start(); } diff --git a/src/main/java/fr/sae/terraria/modele/entities/items/Meat.java b/src/main/java/fr/sae/terraria/modele/entities/items/Meat.java index 831aeb4..37d8772 100644 --- a/src/main/java/fr/sae/terraria/modele/entities/items/Meat.java +++ b/src/main/java/fr/sae/terraria/modele/entities/items/Meat.java @@ -19,8 +19,9 @@ public Meat(final Environment environment) @Override public void consumes() { - Player player = environment.getPlayer(); + Environment.playSound("sound/eat.wav", false); + Player player = environment.getPlayer(); if (player.getPv() < player.getPvMax()) player.setPv(player.getPv() + 1); } diff --git a/src/main/java/fr/sae/terraria/modele/entities/items/Vodka.java b/src/main/java/fr/sae/terraria/modele/entities/items/Vodka.java index de241fa..bb4871c 100644 --- a/src/main/java/fr/sae/terraria/modele/entities/items/Vodka.java +++ b/src/main/java/fr/sae/terraria/modele/entities/items/Vodka.java @@ -28,6 +28,8 @@ public Vodka(final Environment environment) @Override public void consumes() { + Environment.playSound("sound/eat.wav", false); + Player player = environment.getPlayer(); Inventory inventory = player.getInventory(); inventory.get().get(inventory.getPosCursor()).remove(); diff --git a/src/main/java/fr/sae/terraria/modele/entities/player/Player.java b/src/main/java/fr/sae/terraria/modele/entities/player/Player.java index 8343386..12fe97a 100644 --- a/src/main/java/fr/sae/terraria/modele/entities/player/Player.java +++ b/src/main/java/fr/sae/terraria/modele/entities/player/Player.java @@ -3,6 +3,7 @@ import fr.sae.terraria.modele.Environment; import fr.sae.terraria.modele.TileMaps; import fr.sae.terraria.modele.entities.entity.*; +import fr.sae.terraria.modele.entities.items.Item; import fr.sae.terraria.modele.entities.player.inventory.Inventory; import fr.sae.terraria.modele.entities.player.inventory.Stack; import fr.sae.terraria.vue.View; diff --git a/src/main/java/fr/sae/terraria/modele/entities/player/inventory/Inventory.java b/src/main/java/fr/sae/terraria/modele/entities/player/inventory/Inventory.java index 76f4575..74714cb 100644 --- a/src/main/java/fr/sae/terraria/modele/entities/player/inventory/Inventory.java +++ b/src/main/java/fr/sae/terraria/modele/entities/player/inventory/Inventory.java @@ -1,10 +1,12 @@ package fr.sae.terraria.modele.entities.player.inventory; import fr.sae.terraria.modele.entities.entity.StowableObjectType; +import fr.sae.terraria.modele.entities.items.Item; import fr.sae.terraria.modele.entities.player.Player; import javafx.beans.property.IntegerProperty; import javafx.beans.property.SimpleIntegerProperty; import javafx.collections.FXCollections; +import javafx.collections.ListChangeListener; import javafx.collections.ObservableList; import javafx.scene.input.KeyCode; diff --git a/src/main/resources/fr/sae/terraria/sound/hit.wav b/src/main/resources/fr/sae/terraria/sound/hit.wav new file mode 100644 index 0000000000000000000000000000000000000000..8b0a14f6689afe0a34a95fc329cccd6b7fefd6b0 GIT binary patch literal 82240 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

bd)14 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 I(PFXx1+KZ4GXMYp literal 0 HcmV?d00001