2
0
Эх сурвалжийг харах

Übersetzung fertig, bessere Speicherung von Daten

Jan 7 сар өмнө
parent
commit
fd5d6061ad

+ 12 - 4
src/main/java/controller/GameController.java

@@ -7,11 +7,13 @@ import model.items.ITEM_NAME;
 import util.GAMESTATE;
 import view.GamePanel;
 import view.tile.interactive.Hut;
+import view.tile.interactive.InteractiveTile;
 
-import java.awt.*;
 import java.io.Serializable;
+import java.util.ArrayList;
 
 public class GameController implements Runnable, Serializable {
+
     private transient KeyHandler keyHandler;
     private GameModel gameModel;
 
@@ -19,11 +21,13 @@ public class GameController implements Runnable, Serializable {
     private transient GamePanel view;
     private boolean running = true;
     private int fps = 60;
+    public transient ArrayList<InteractiveTile> interactiveTiles;
 
     public GameController() {
         this.keyHandler = new KeyHandler(this);
         this.gameModel = new GameModel();
         this.view = new GamePanel(this);
+        interactiveTiles = new ArrayList<>();
         setStartInventory();
         setupInteractiveTiles();
     }
@@ -34,9 +38,9 @@ public class GameController implements Runnable, Serializable {
     }
 
     private void setStartInventory() {
-        gameModel.getInventory().addToInventory(new Item(ITEM_NAME.STONE));
-        gameModel.getInventory().addToInventory(new Item(ITEM_NAME.WATER));
-        gameModel.getInventory().addToInventory(new Item(ITEM_NAME.WOOD));
+        gameModel.getInventory().addToInventory(new Item(ITEM_NAME.stone));
+        gameModel.getInventory().addToInventory(new Item(ITEM_NAME.water));
+        gameModel.getInventory().addToInventory(new Item(ITEM_NAME.wood));
     }
 
     public void setView(GamePanel gp){
@@ -135,4 +139,8 @@ public class GameController implements Runnable, Serializable {
     }
 
 
+    public void loadInteractiveTiles() {
+        interactiveTiles = new ArrayList<>();
+        setupInteractiveTiles();
+    }
 }

+ 9 - 2
src/main/java/main/Main.java

@@ -3,20 +3,27 @@ package main;
 import controller.GameController;
 import model.GameModel;
 import model.GameSaver;
+import util.Translator;
 import view.GamePanel;
 
 import javax.swing.*;
+import java.io.IOException;
 
 public class Main {
-    public static void main(String[] args) {
+
+    public static void main(String[] args) throws IOException {
+
+        Translator.load("lang/en_us.json");
+
         GameController gameController = GameSaver.loadGame();
         GamePanel gamePanel = gameController.getView();
+        gameController.loadInteractiveTiles();
 
         System.out.println("Starte Spiel...");
         JFrame window = new JFrame();
         window.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
         window.setResizable(false);
-        window.setTitle("Tiny Settlement");
+        window.setTitle(Translator.translate("game.title"));
 
         window.setPreferredSize(gamePanel.getPreferredSize());
         window.add(gamePanel);

+ 3 - 3
src/main/java/model/items/ITEM_NAME.java

@@ -3,7 +3,7 @@ package model.items;
 import java.io.Serializable;
 
 public enum ITEM_NAME implements Serializable {
-    WOOD,
-    STONE,
-    WATER,
+    wood,
+    stone,
+    water,
 }

+ 32 - 0
src/main/java/util/Translator.java

@@ -0,0 +1,32 @@
+package util;
+
+import java.io.*;
+import java.util.HashMap;
+import java.util.Map;
+
+public class Translator {
+    private Translator(){};
+
+    private static Map<String, String> translations = new HashMap<>();
+
+    public static void load(String filePath){
+        translations.clear();
+        try (BufferedReader reader = new BufferedReader(new InputStreamReader(Translator.class.getClassLoader().getResourceAsStream(filePath)))) {
+            String line;
+            while ((line = reader.readLine()) != null) {
+                line = line.trim();
+                if (line.contains(":")) {
+                    String[] parts = line.split(":", 2);
+                    String key = parts[0].trim().replaceAll("[\"{},]", "");
+                    String value = parts[1].trim().replaceAll("[\"{},]", "");
+                    translations.put(key, value);
+                }
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+    public static String translate(String key) {
+        return translations.getOrDefault(key, key); // fallback to key if missing
+    }
+}

+ 2 - 1
src/main/java/view/InventoryView.java

@@ -2,6 +2,7 @@ package view;
 
 import model.Inventory;
 import util.TextUtil;
+import util.Translator;
 
 import java.awt.*;
 
@@ -42,7 +43,7 @@ public class InventoryView {
 
             TextUtil.setFontAppropriateToSize(itemName, slotSize - slotSpacing/2, g2);
 
-            g2.drawString(itemName, x + slotSpacing/4, y + slotSize / 2 + 5);
+            g2.drawString(Translator.translate("item."+itemName), x + slotSpacing/4, y + slotSize / 2 + 5);
             g2.drawString( "" + inventory.getItemList().get(i).getCount() , x + slotSize - slotSize/5, y + slotSize -2);
 
             g2.setColor(Color.LIGHT_GRAY); // reset color for next slot

+ 8 - 7
src/main/java/view/UI.java

@@ -1,6 +1,7 @@
 package view;
 
 import util.GAMESTATE;
+import util.Translator;
 import view.components.Button;
 import view.popUpMenu.PopupMenu;
 import view.tile.interactive.InteractiveTile;
@@ -14,7 +15,7 @@ public class UI {
     private Graphics2D g2;
     private Font arial_40;
     private ArrayList<Button> activeButtons = new ArrayList<>();
-    private ArrayList<InteractiveTile> interactiveTiles = new ArrayList<>();
+
     public UI(GamePanel gp){
         this.gp = gp;
         arial_40 = new Font("Arial", Font.PLAIN, 80);
@@ -26,7 +27,7 @@ public class UI {
         g2.setColor(Color.white);
 
         if(gp.gameState == GAMESTATE.PAUSED){
-            drawPauseScreen(g2, "Game paused");
+            drawPauseScreen(g2, Translator.translate("menu.pause"));
         }
     }
     public void handleMenuClick(int screenX, int screenY) {
@@ -38,7 +39,7 @@ public class UI {
         }
     }
     public void handleClick(int screenX, int screenY){
-        for (InteractiveTile tile : gp.tileManager.interactiveTiles) {
+        for (InteractiveTile tile : gp.gameController.interactiveTiles) {
 
             if(tile.getClicked() && tile.getOnClickType() == ONCLICKTYPE.POPUP){
                 PopupMenu popupMenu = tile.getPopupMenu();
@@ -87,17 +88,17 @@ public class UI {
         int resumeY = boxY + 100;
         int saveY = resumeY + buttonHeight + spacing;
         int exitY = resumeY + buttonHeight + buttonHeight + spacing + spacing;
-        Button resumeButton = new Button(buttonWidth, buttonHeight, "Continue", () -> {
+        Button resumeButton = new Button(buttonWidth, buttonHeight, Translator.translate("menu.resume"), () -> {
             gp.gameState = GAMESTATE.PLAY;
         });
         drawAndRegisterButton(resumeButton, buttonX, resumeY);
 
-        Button exitButton = new Button(buttonWidth, buttonHeight, "Quit", () -> {
+        Button exitButton = new Button(buttonWidth, buttonHeight, Translator.translate("menu.quit"), () -> {
             gp.gameState = GAMESTATE.QUIT;
         });
         drawAndRegisterButton(exitButton, buttonX, exitY);
 
-        Button saveButton = new Button(buttonWidth, buttonHeight, "Save", () -> {
+        Button saveButton = new Button(buttonWidth, buttonHeight, Translator.translate("menu.save"), () -> {
             gp.gameState = GAMESTATE.SAVE;
         });
         drawAndRegisterButton(saveButton, buttonX, saveY);
@@ -114,7 +115,7 @@ public class UI {
     }
 
     public void closeMenus() {
-        for (InteractiveTile tile : gp.tileManager.interactiveTiles) {
+        for (InteractiveTile tile : gp.gameController.interactiveTiles) {
             tile.unClick();
         }
     }

+ 2 - 1
src/main/java/view/components/Button.java

@@ -1,8 +1,9 @@
 package view.components;
 
 import java.awt.*;
+import java.io.Serializable;
 
-public class Button {
+public class Button implements Serializable {
     private int screenX, screenY;
     private int height;
     private int width;

+ 2 - 1
src/main/java/view/popUpMenu/PopupMenu.java

@@ -3,9 +3,10 @@ package view.popUpMenu;
 import view.components.Button;
 
 import java.awt.*;
+import java.io.Serializable;
 import java.util.ArrayList;
 
-public abstract class PopupMenu {
+public abstract class PopupMenu implements Serializable {
 
     public int overlayWidth;
     public int overlayHeight;

+ 13 - 7
src/main/java/view/popUpMenu/UpgradeMenu.java

@@ -1,15 +1,21 @@
 package view.popUpMenu;
 
+import util.Translator;
 import view.components.Button;
 
-public class UpgradeMenu extends PopupMenu{
+import java.io.Serializable;
+
+public class UpgradeMenu extends PopupMenu {
     public UpgradeMenu(int width, int height) {
         super(width, height);
-        addButton(new Button(60,20,"Upgrade",() -> {
-            System.out.println("Clicked");
-        }), 10, 10);
-        addButton(new Button(60,20,"Collect",() -> {
-            System.out.println("Clicked");
-        }), 10, 40);
+        addButton( new Button(80, 25, Translator.translate("popup.upgrade"), this::upgrade), 10, 10 );
+        addButton(new Button(80,25, Translator.translate("popup.collect"),this::collect), 10, 40);
+    }
+
+    private void upgrade(){
+        System.out.println("Upgrade");
+    }
+    private void collect(){
+        System.out.println("Collect");
     }
 }

+ 5 - 4
src/main/java/view/tile/TileManager.java

@@ -21,18 +21,19 @@ public class TileManager {
     public int[][] mapTileNum;
     public Tile[][] mapTiles;
     public int mapTileOverflow = 1;
-    public ArrayList<InteractiveTile> interactiveTiles = new ArrayList<>();
+
     public TileManager(GamePanel gp){
         this.gamePanel = gp;
         tile = new Tile[10];
         mapTileNum = new int[gp.maxWorldCol][gp.maxWorldRow];
         getTileImage();
         loadMap("/maps/world01.txt");
-
     }
+
     public void addInteractiveTile(InteractiveTile tile) {
-        interactiveTiles.add(tile);
+        gamePanel.gameController.interactiveTiles.add(tile);
     }
+
     public void loadMap(String filePath){
         try{
             InputStream is = getClass().getResourceAsStream(filePath);
@@ -94,7 +95,7 @@ public class TileManager {
                 worldRow++;
             }
         }
-        for (InteractiveTile tile : interactiveTiles) {
+        for (InteractiveTile tile : gamePanel.gameController.interactiveTiles) {
             tile.updateCoordinates();
             tile.draw(g2, gamePanel.camera);
         }

+ 2 - 1
src/main/java/view/tile/interactive/Hut.java

@@ -6,8 +6,9 @@ import view.popUpMenu.PopupMenu;
 import view.popUpMenu.UpgradeMenu;
 
 import java.awt.*;
+import java.io.Serializable;
 
-public class Hut extends InteractiveTile {
+public class Hut extends InteractiveTile implements Serializable {
 
     public Hut(int worldGridX, int worldGridY, GameController gc) {
         super(worldGridX, worldGridY, gc.getView().tileSize, gc.getView().tileSize, gc);

+ 3 - 1
src/main/java/view/tile/interactive/InteractiveTile.java

@@ -2,11 +2,13 @@ package view.tile.interactive;
 
 import model.Tile;
 import java.awt.*;
+import java.io.Serializable;
+
 import controller.GameController;
 import view.Camera;
 import view.popUpMenu.PopupMenu;
 
-public abstract class InteractiveTile extends Tile {
+public abstract class InteractiveTile extends Tile implements Serializable {
     public int worldGridX, worldGridY;
     public int screenX, screenY;
     protected int width, height;

+ 13 - 0
src/main/resources/lang/de_de.json

@@ -0,0 +1,13 @@
+{
+  "game.title": "Tiny Settlement",
+  "menu.pause": "Spiel pausiert",
+  "menu.start": "Spiel starten",
+  "menu.resume": "Fortsetzen",
+  "menu.quit": "Beenden",
+  "menu.save": "Speichern",
+  "popup.collect": "Sammeln",
+  "popup.upgrade": "Verbessern",
+  "item.wood": "Holz",
+  "item.water": "Wasser",
+  "item.stone": "Stein"
+}

+ 12 - 0
src/main/resources/lang/en_us.json

@@ -0,0 +1,12 @@
+{
+  "game.title": "Tiny Settlement",
+  "menu.pause": "Game paused",
+  "menu.start": "Start Game",
+  "menu.resume": "Resume",
+  "menu.quit": "Quit",
+  "menu.save": "Save",
+  "popup.collect": "Collect",
+  "popup.upgrade": "Upgrade",
+  "item.wood": "Wood",
+  "item.water": "Water",
+  "item.stone": "Stone"}

+ 0 - 0
src/main/resources/lang/translation.json


+ 0 - 10
src/test/java/GUI/BasicGUITest.java

@@ -1,10 +0,0 @@
-package GUI;
-
-import org.junit.jupiter.api.Test;
-
-public class BasicGUITest {
-    @Test
-    public static void startUI(){
-
-    }
-}