Add: Card Loading From Json
This commit is contained in:
@@ -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<TribeCard> loadDeck(String resourcePath) {
|
||||||
|
Gson gson = new Gson();
|
||||||
|
Type listType = new com.google.gson.reflect.TypeToken<List<CardDefinition>>(){}.getType();
|
||||||
|
|
||||||
|
try (InputStream is = DecksCreator.class.getResourceAsStream(resourcePath);
|
||||||
|
Reader reader = new InputStreamReader(is)) {
|
||||||
|
|
||||||
|
List<CardDefinition> definitions = gson.fromJson(reader, listType);
|
||||||
|
List<TribeCard> 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<Object> params; // Object per gestire boolean e int misti
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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]}
|
||||||
|
]
|
||||||
Reference in New Issue
Block a user