diff options
Diffstat (limited to 'jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data')
6 files changed, 255 insertions, 0 deletions
diff --git a/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/model/GameModel.java b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/model/GameModel.java new file mode 100644 index 0000000..7cca88c --- /dev/null +++ b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/model/GameModel.java @@ -0,0 +1,19 @@ +package fr.epita.assistants.item_producer.data.model; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Setter +@Table(name = "game") +public class GameModel { + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + Long id; + String map; +} diff --git a/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/model/ItemModel.java b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/model/ItemModel.java new file mode 100644 index 0000000..68d765a --- /dev/null +++ b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/model/ItemModel.java @@ -0,0 +1,28 @@ +package fr.epita.assistants.item_producer.data.model; + +import fr.epita.assistants.common.aggregate.ItemAggregate; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Setter +@Table(name = "item") +public class ItemModel { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + Long id; + @Enumerated(value = EnumType.STRING) + ItemAggregate.ResourceType type; + Float quantity; + + public ItemModel(float quantity, ItemAggregate.ResourceType type) { + this.quantity = quantity; + this.type = type; + } +} diff --git a/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/model/PlayerModel.java b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/model/PlayerModel.java new file mode 100644 index 0000000..943b5a3 --- /dev/null +++ b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/model/PlayerModel.java @@ -0,0 +1,37 @@ +package fr.epita.assistants.item_producer.data.model; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Getter +@Setter +@Entity +@AllArgsConstructor +@NoArgsConstructor +@Table(name = "player") +public class PlayerModel { + Float collectRateMultiplier; + Float moveSpeedMultiplier; + Integer posX; + Integer posY; + Float staminaMultiplier; + LocalDateTime lastCollect; + LocalDateTime lastMove; + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + Long id; + + public PlayerModel(float collectRateMultiplier, float moveSpeedMultiplier, int posX, int posY, float staminaMultiplier, LocalDateTime lastCollect, LocalDateTime lastMove) { + this.collectRateMultiplier = collectRateMultiplier; + this.moveSpeedMultiplier = moveSpeedMultiplier; + this.posX = posX; + this.posY = posY; + this.staminaMultiplier = staminaMultiplier; + this.lastCollect = lastCollect; + this.lastMove = lastMove; + } +} diff --git a/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/repository/GameRepository.java b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/repository/GameRepository.java new file mode 100644 index 0000000..e48f844 --- /dev/null +++ b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/repository/GameRepository.java @@ -0,0 +1,59 @@ +package fr.epita.assistants.item_producer.data.repository; + +import fr.epita.assistants.common.aggregate.ItemAggregate; +import fr.epita.assistants.item_producer.converter.ItemProducerConverter; +import fr.epita.assistants.item_producer.data.model.GameModel; +import io.quarkus.hibernate.orm.panache.PanacheRepository; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.transaction.Transactional; + +import java.util.List; + +@ApplicationScoped +public class GameRepository implements PanacheRepository<GameModel> { + @Transactional + public String getMap() { + return getGame().getMap(); + } + + private GameModel getGame() { + return findAll().firstResult(); + } + + @Transactional + public boolean isEmpty() { + return count() == 0; + } + + @Transactional + public void clearDB() { + deleteAll(); + } + + @Transactional + public void addEntry(String rle) { + GameModel game = new GameModel(); + game.setMap(rle); + persist(game); + } + + @Transactional + public boolean isValidCollect(int x, int y) { + List<List<String>> map = ItemProducerConverter.RLEtoMap(getMap()); + return ItemAggregate.ResourceType.valueOf(map.get(y).get(x)).getItemInfo().isCollectable(); + } + + @Transactional + public void setToGround(int x, int y) { + List<List<String>> map = ItemProducerConverter.RLEtoMap(getMap()); + map.get(y).set(x, ItemAggregate.ResourceType.GROUND.toString()); + String rle = ItemProducerConverter.MapToRLE(map); + update("map = ?1 where id = ?2", rle, getGame().getId()); + } + + @Transactional + public String collectResource(int posX, int posY) { + List<List<String>> map = ItemProducerConverter.RLEtoMap(getMap()); + return map.get(posY).get(posX); + } +} diff --git a/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/repository/ItemRepository.java b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/repository/ItemRepository.java new file mode 100644 index 0000000..b46311f --- /dev/null +++ b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/repository/ItemRepository.java @@ -0,0 +1,50 @@ +package fr.epita.assistants.item_producer.data.repository; + +import fr.epita.assistants.common.aggregate.ItemAggregate; +import fr.epita.assistants.item_producer.data.model.ItemModel; +import io.quarkus.hibernate.orm.panache.PanacheRepository; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.transaction.Transactional; + +import java.util.List; +import java.util.Map; +import java.util.Optional; + +@ApplicationScoped +public class ItemRepository implements PanacheRepository<ItemModel> { + @Transactional + public void deleteItems(Map<ItemAggregate.ResourceType, Float> toDelete) { + for (ItemAggregate.ResourceType type : toDelete.keySet()) { + ItemModel item = find("type = ?1", type).firstResult(); + if (item != null) + update("quantity = ?1 where type = ?2", item.getQuantity() - toDelete.get(type), type); + } + } + + @Transactional + public List<ItemModel> getItems() { + return find("where quantity > 0").stream().toList(); + } + + @Transactional + public Optional<ItemModel> exists(ItemAggregate.ResourceType type) { + return find("type = ?1", type).firstResultOptional(); + } + + @Transactional + public void addItem(ItemAggregate.ResourceType type, Float amount) { + ItemModel res = new ItemModel(amount, type); + persist(res); + } + + // amount should already be the updated amount + @Transactional + public void fillInventory(ItemAggregate.ResourceType type, Float amount) { + update("quantity = ?1 where type = ?2", amount, type); + } + + @Transactional + public List<ItemModel> getMoney() { + return find("where type = ?1", ItemAggregate.ResourceType.MONEY).stream().toList(); + } +} diff --git a/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/repository/PlayerRepository.java b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/repository/PlayerRepository.java new file mode 100644 index 0000000..b5bcde7 --- /dev/null +++ b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/repository/PlayerRepository.java @@ -0,0 +1,62 @@ +package fr.epita.assistants.item_producer.data.repository; + +import fr.epita.assistants.common.aggregate.ItemAggregate; +import fr.epita.assistants.common.utils.Direction; +import fr.epita.assistants.item_producer.converter.ItemProducerConverter; +import fr.epita.assistants.item_producer.data.model.PlayerModel; +import io.quarkus.hibernate.orm.panache.PanacheRepository; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.transaction.Transactional; + +import java.time.LocalDateTime; +import java.util.List; + +@ApplicationScoped +public class PlayerRepository implements PanacheRepository<PlayerModel> { + @Transactional + public void clearDB() { + deleteAll(); + } + + @Transactional + public void addEntry() { + PlayerModel player = new PlayerModel(1, 1, 0, 0, 1, null, null); + persist(player); + } + + @Transactional + public PlayerModel getFirstPlayer() { + return findAll().firstResult(); + } + + @Transactional + public boolean isValidMove(Direction direction, String rle) { + PlayerModel playerModel = getFirstPlayer(); + int x = playerModel.getPosX() + direction.getPoint().getPosX(); + int y = playerModel.getPosY() + direction.getPoint().getPosY(); + List<List<String>> map = ItemProducerConverter.RLEtoMap(rle); + return y >= 0 && x >= 0 && x < map.getFirst().size() && y < map.getFirst().size() && ItemAggregate.ResourceType.valueOf(map.get(y).get(x)).getItemInfo().isWalkable(); + } + + @Transactional + public void movePlayer(Direction direction) { + PlayerModel player = getFirstPlayer(); + update("posX = ?1, posY = ?2, lastMove = ?3 where id = ?4", player.getPosX() + direction.getPoint().getPosX() + , player.getPosY() + direction.getPoint().getPosY(), LocalDateTime.now(), player.getId()); + } + + public void updateMoveSpeed(Float newSpeed) { + PlayerModel player = getFirstPlayer(); + update("moveSpeedMultiplier = ?1 where id = ?2", newSpeed, player.getId()); + } + + public void updateCollectRate(Float newRate) { + PlayerModel player = getFirstPlayer(); + update("collectRateMultiplier = ?1 where id = ?2", newRate, player.getId()); + } + + public void updateStamina(Float newStamina) { + PlayerModel player = getFirstPlayer(); + update("staminaMultiplier = ?1 where id = ?2", newStamina, player.getId()); + } +} |
