diff options
| author | Martial Simon <msimon_fr@hotmail.com> | 2025-09-15 01:07:58 +0200 |
|---|---|---|
| committer | Martial Simon <msimon_fr@hotmail.com> | 2025-09-15 01:07:58 +0200 |
| commit | 967be9e750221ab2ab783f95df79bb26d290a45e (patch) | |
| tree | 6802900a5e975f9f68b169f0f503f040056d6952 /jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/converter | |
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.java | 126 |
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; + } +} |
