RessourceManager.java 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package controller;
  2. import controller.tiles.interactive.InteractiveTileController;
  3. import util.GAMESTATE;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import java.util.concurrent.Executors;
  7. import java.util.concurrent.ScheduledExecutorService;
  8. import java.util.concurrent.TimeUnit;
  9. public class RessourceManager {
  10. private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
  11. private final GameController gameController;
  12. public RessourceManager(GameController gameController) {
  13. this.gameController = gameController;
  14. }
  15. public void start() {
  16. scheduler.scheduleAtFixedRate(() -> {
  17. if (!gameController.isRunning()) {
  18. scheduler.shutdown();
  19. return;
  20. }
  21. if(gameController.getView().gameState == GAMESTATE.INVENTORY || gameController.getView().gameState == GAMESTATE.PLAY)
  22. calculateResources();
  23. }, 0, 1, TimeUnit.SECONDS);
  24. }
  25. public void stop() {
  26. scheduler.shutdownNow();
  27. }
  28. private void calculateResources() {
  29. // If interactiveTileControllers can change concurrently, consider making a snapshot:
  30. List<InteractiveTileController> snapshot;
  31. synchronized(gameController.interactiveTileControllers) {
  32. snapshot = new ArrayList<>(gameController.interactiveTileControllers);
  33. }
  34. for (InteractiveTileController c : snapshot) {
  35. int spI = c.getModel().getSecondsPerItem();
  36. // Avoid division by zero or spI <= 0:
  37. if (spI > 0) {
  38. // You need to track elapsed seconds per controller or use a shared seconds counter:
  39. // For simplicity, you could store a counter in each model:
  40. c.getModel().incrementSecondCounter();
  41. if (c.getModel().getSecondCounter() % spI == 0) {
  42. c.getModel().addItem();
  43. System.out.println("New amount: " + c.getModel().getItemAmount());
  44. }
  45. }
  46. }
  47. }
  48. }