diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/DecksCreator.java b/src/main/java/it/polimi/ingsw/gc14/Model/DecksCreator.java new file mode 100644 index 0000000..e2c5c92 --- /dev/null +++ b/src/main/java/it/polimi/ingsw/gc14/Model/DecksCreator.java @@ -0,0 +1,76 @@ +package it.polimi.ingsw.gc14.Model; + +import com.google.gson.*; +import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters.*; +import it.polimi.ingsw.gc14.Model.Cards.TribeCard; +import java.io.*; +import java.lang.reflect.Type; +import java.util.*; + + +public class DecksCreator { + + public static List loadDeck(String resourcePath) { + Gson gson = new Gson(); + Type listType = new com.google.gson.reflect.TypeToken>(){}.getType(); + + try (InputStream is = DecksCreator.class.getResourceAsStream(resourcePath); + Reader reader = new InputStreamReader(is)) { + + List definitions = gson.fromJson(reader, listType); + List cards = new ArrayList<>(); + + for (CardDefinition def : definitions) { + cards.add(createCard(def)); + } + return cards; + + } catch (IOException e) { + throw new RuntimeException("Errore caricamento mazzo: " + resourcePath, e); + } + } + + private static TribeCard createCard(CardDefinition def) { + int era = def.era; + int[] p = def.params.stream().mapToInt(d -> (int) Math.round((Float) d)).toArray(); + + return switch (def.type) { + case "Hunter" -> p.length == 0 + ? new Hunter(era, def.armed) + : new Hunter(era, def.armed, p[0]); + case "Builder" -> switch (p.length) { + case 2 -> new Builder(era, p[0], p[1]); + case 3 -> new Builder(era, p[0], p[1], p[2]); + default -> throw new IllegalArgumentException("Builder: parametri non validi"); + }; + case "Gatherers" -> switch (p.length) { + case 0 -> new Gatherers(era); + case 1 -> new Gatherers(era, p[0]); + default -> throw new IllegalArgumentException("Gatherers: parametri non validi"); + }; + case "Artist" -> switch (p.length) { + case 0 -> new Artist(era); + case 1 -> new Artist(era, p[0]); + default -> throw new IllegalArgumentException("Artist: parametri non validi"); + }; + case "Inventor" -> switch (p.length) { + case 1 -> new Inventor(era, p[0]); + case 2 -> new Inventor(era, p[0], p[1]); + default -> throw new IllegalArgumentException("Inventor: parametri non validi"); + }; + case "Shaman" -> switch (p.length) { + case 1 -> new Shaman(era, p[0]); + case 2 -> new Shaman(era, p[0], p[1]); + default -> throw new IllegalArgumentException("Shaman: parametri non validi"); + }; + default -> throw new IllegalArgumentException("Tipo sconosciuto: " + def.type); + }; + } + + private static class CardDefinition { + String type; + int era; + boolean armed; + List params; // Object per gestire boolean e int misti + } +} \ No newline at end of file diff --git a/src/main/resources/Cards/cards_era1.json b/src/main/resources/Cards/cards_era1.json new file mode 100644 index 0000000..e7ea16c --- /dev/null +++ b/src/main/resources/Cards/cards_era1.json @@ -0,0 +1,36 @@ +[ + {"type": "Hunter", "era": 1, "armed": true, "params": []}, + {"type": "Hunter", "era": 1, "armed": true, "params": []}, + {"type": "Hunter", "era": 1, "armed": false, "params": []}, + {"type": "Hunter", "era": 1, "armed": false, "params": [3]}, + {"type": "Hunter", "era": 1, "armed": false, "params": [3]}, + + {"type": "Builder", "era": 1, "armed": false, "params": [1, 3]}, + {"type": "Builder", "era": 1, "armed": false, "params": [2, 0]}, + {"type": "Builder", "era": 1, "armed": false, "params": [2, 1, 5]}, + {"type": "Builder", "era": 1, "armed": false, "params": [1, 2]}, + + {"type": "Gatherers", "era": 1, "armed": false, "params": []}, + {"type": "Gatherers", "era": 1, "armed": false, "params": []}, + {"type": "Gatherers", "era": 1, "armed": false, "params": [3]}, + {"type": "Gatherers", "era": 1, "armed": false, "params": [5]}, + + {"type": "Artist", "era": 1, "armed": false, "params": []}, + {"type": "Artist", "era": 1, "armed": false, "params": []}, + {"type": "Artist", "era": 1, "armed": false, "params": []}, + {"type": "Artist", "era": 1, "armed": false, "params": [3]}, + {"type": "Artist", "era": 1, "armed": false, "params": [4]}, + + {"type": "Inventor", "era": 1, "armed": false, "params": [8]}, + {"type": "Inventor", "era": 1, "armed": false, "params": [0]}, + {"type": "Inventor", "era": 1, "armed": false, "params": [2]}, + {"type": "Inventor", "era": 1, "armed": false, "params": [9]}, + {"type": "Inventor", "era": 1, "armed": false, "params": [5, 4]}, + {"type": "Inventor", "era": 1, "armed": false, "params": [7, 4]}, + {"type": "Inventor", "era": 1, "armed": false, "params": [4, 4]}, + + {"type": "Shaman", "era": 1, "armed": false, "params": [2, 5]}, + {"type": "Shaman", "era": 1, "armed": false, "params": [2]}, + {"type": "Shaman", "era": 1, "armed": false, "params": [1]}, + {"type": "Shaman", "era": 1, "armed": false, "params": [1, 4]} +] \ No newline at end of file