summaryrefslogtreecommitdiff
path: root/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/converter
diff options
context:
space:
mode:
authorMartial Simon <msimon_fr@hotmail.com>2025-09-15 01:07:58 +0200
committerMartial Simon <msimon_fr@hotmail.com>2025-09-15 01:07:58 +0200
commit967be9e750221ab2ab783f95df79bb26d290a45e (patch)
tree6802900a5e975f9f68b169f0f503f040056d6952 /jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/converter
add: added projectsHEADmain
Diffstat (limited to 'jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/converter')
-rw-r--r--jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/converter/ItemProducerConverter.java126
1 files changed, 126 insertions, 0 deletions
diff --git a/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/converter/ItemProducerConverter.java b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/converter/ItemProducerConverter.java
new file mode 100644
index 0000000..cb81247
--- /dev/null
+++ b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/converter/ItemProducerConverter.java
@@ -0,0 +1,126 @@
+package fr.epita.assistants.item_producer.converter;
+
+import fr.epita.assistants.common.aggregate.ItemAggregate;
+import fr.epita.assistants.common.aggregate.ResetInventoryAggregate;
+import fr.epita.assistants.common.api.request.StartRequest;
+import fr.epita.assistants.common.api.response.*;
+import fr.epita.assistants.item_producer.data.model.PlayerModel;
+import fr.epita.assistants.item_producer.domain.entity.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class ItemProducerConverter {
+ public static StartEntity Start(StartRequest r) {
+ if (r.getMapPath() == null || r.getMapPath().isEmpty())
+ return null;
+ return new StartEntity(r.getMapPath(), null);
+ }
+
+ public static Map<ItemAggregate.ResourceType, Float> DeleteItems(ResetInventoryAggregate items) {
+ Map<ItemAggregate.ResourceType, Float> map = new HashMap<>();
+ for (ItemAggregate i : items.getItems()) {
+ map.merge(i.getType(), i.getQuantity(), Float::sum);
+ }
+ return map;
+ }
+
+ public static MoveEntity Move(PlayerModel playerMove) {
+ return new MoveEntity(playerMove.getPosX(), playerMove.getPosY());
+ }
+
+ public static List<List<String>> RLEtoMap(String rle) {
+ List<String> lines = List.of(rle.split(";"));
+ List<List<String>> map = new ArrayList<>();
+ for (int k = 0; k < lines.size(); k++) {
+ map.add(new ArrayList<>());
+ for (int i = 0; i < lines.get(k).length(); i++) {
+ for (int j = 0; j < lines.get(k).charAt(i) - '0'; j++) {
+ String type = ItemAggregate.ResourceType.getResource(lines.get(k).charAt(i + 1)).toString();
+ map.get(k).add(type);
+ }
+ i++;
+ }
+ }
+ return map;
+ }
+
+ public static String MapToRLE(List<List<String>> map) {
+ List<String> rows = new ArrayList<>();
+ for (List<String> resourceRow : map) {
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < resourceRow.size(); i++) {
+ int j;
+ // count sequence of this resource type
+ String s = resourceRow.get(i);
+ for (j = i; j < resourceRow.size() && s.equals(resourceRow.get(j)); j++) {
+ continue;
+ }
+ int tmp = j;
+ j -= i;
+ i = tmp - 1;
+ while (j > 9) {
+ sb.append('9');
+ sb.append(ItemAggregate.ResourceType.valueOf(s).getItemInfo().getValue());
+ j -= 9;
+ }
+ if (j > 0) {
+ sb.append(j);
+ sb.append(ItemAggregate.ResourceType.valueOf(s).getItemInfo().getValue());
+ }
+ }
+ rows.add(sb.toString());
+ }
+ return String.join(";", rows);
+ }
+
+ public static StartEntity Collect(String resource) {
+ List<List<String>> map = new ArrayList<>();
+ map.add(new ArrayList<>());
+ map.getFirst().add(resource);
+ return new StartEntity(null, MapToRLE(map));
+ }
+
+ public static PlayerEntity ResponseToEntity(PlayerResponse r) {
+ return new PlayerEntity(r.getPosX(), r.getPosY(), r.getLastMove(), r.getLastCollect(),
+ r.getMoveSpeedMultiplier(), r.getStaminaMultiplier(), r.getCollectRateMultiplier());
+ }
+
+ public static StartEntity ResponseToEntity(StartResponse r) {
+ return new StartEntity(null, MapToRLE(r.getMap()));
+ }
+
+ public static StartResponse EntityToResponse(StartEntity e) {
+ if (e == null)
+ return null;
+ return new StartResponse(RLEtoMap(e.getRle()));
+ }
+ public static ItemResponse EntityToResponse(ItemEntity e) {
+ return new ItemResponse(e.getId(), e.getQuantity(), e.getType());
+ }
+
+ public static ItemsResponse EntityToResponse(ItemsEntity e) {
+ if (e == null)
+ return null;
+ return new ItemsResponse(e.getItems().stream().map(ItemProducerConverter::EntityToResponse).toList());
+ }
+
+ public static PlayerResponse EntityToResponse(PlayerEntity e) {
+ if (e == null)
+ return null;
+ return new PlayerResponse(e.getPosX(), e.getPosY(), e.getLastMove(), e.getLastCollect(),
+ e.getMoveSpeedMultiplier(), e.getStaminaMultiplier(), e.getCollectRateMultiplier());
+ }
+
+ public static MoveResponse EntityToResponse(MoveEntity e) {
+ if (e == null)
+ return null;
+ return new MoveResponse(e.getPosX(), e.getPosY());
+ }
+
+ public static UpgradeCostResponse EntityToResponse(UpgradeCostEntity e) {
+ return null;
+ }
+}