diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/Button.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/Button.java new file mode 100644 index 0000000..44237df --- /dev/null +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/Button.java @@ -0,0 +1,38 @@ +package gameEngine.entites.gameComponents; + +import gameEngine.entites.Entity; +import gameEngine.input.Input; +import gameEngine.input.MouseInput; + +public class Button extends GameComponent { + + private Entity entity; + private Mesh mesh; + public Button(Entity entity, Mesh mesh) { + this.entity = entity; + this.mesh = mesh; + } + + @Override + public GameComponent copy() { + return null; + } + + public void init() { + } + + public void update() { + float mouseX = MouseInput.getX(); + float mouseY = MouseInput.getY(); + + float x = entity.transform.position.x; + float y = entity.transform.position.y; + float width = mesh.getDisplayedWidth(); + float height = mesh.getDisplayedHeight(); + + // マウスがボタンの範囲内にあるかどうかをチェック + if (Input.GetMouseButtonUp(0) && mouseX >= x && mouseX <= x + width && mouseY >= y && mouseY <= y + height) { + System.out.println("Button clicked! Mouse X: " + mouseX + ", Mouse Y: " + mouseY); + } + } +} diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/Mesh.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/Mesh.java index 44e19c8..bf21be6 100644 --- a/GameEngine/src/main/java/gameEngine/entites/gameComponents/Mesh.java +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/Mesh.java @@ -24,12 +24,14 @@ this.type = type; if (type == MeshType.SPRITE) { this.texture = new Texture(texturePath); // Load the image + updateSpriteDimensions(); } } public Mesh(Mesh original, Entity newParent) { this.type = original.type; this.texture = original.texture; // Textureをそのまま参照 this.parent = newParent; // 新しい親オブジェクトに設定 + updateSpriteDimensions(); } @Override @@ -41,6 +43,7 @@ public void init() { if (type == MeshType.SPRITE) { renderSprite(); // スプライトの描画 + updateSpriteDimensions(); } } @@ -54,9 +57,55 @@ renderSprite(); // スプライトの描画 } } + /** + * スプライトの最終的な表示幅を取得 + * @return 表示幅(スケールとZスケールを考慮したサイズ) + */ + public float getDisplayedWidth() { + float zScale = calculateZScale(); + return spriteWidth * parent.transform.scale.x * zScale; + } + + /** + * スプライトの最終的な表示高さを取得 + * @return 表示高さ(スケールとZスケールを考慮したサイズ) + */ + public float getDisplayedHeight() { + float zScale = calculateZScale(); + return spriteHeight * parent.transform.scale.y * zScale; + } + + /** + * Z軸スケールを計算する + * @return 計算されたZ軸スケール + */ + private float calculateZScale() { + float z = parent.transform.position.z; + if (z >= 0) { + return 1.0f + (z * 0.1f); + } else { + return 1.0f / (1.0f + Math.abs(z) * 0.1f); + } + } + + public int getSpriteWidth() { + return spriteWidth; + } + + public int getSpriteHeight() { + return spriteHeight; + } + + private void updateSpriteDimensions() { + if (texture != null) { + this.spriteWidth = texture.getWidth(); + this.spriteHeight = texture.getHeight(); + } + } public void setTexturePath(String texturePath){ this.texture = new Texture(texturePath); + updateSpriteDimensions(); } private void renderSprite() { diff --git a/GameEngine/src/main/java/gameEngine/scenes/Scene.java b/GameEngine/src/main/java/gameEngine/scenes/Scene.java index 7a4b25d..d1b002d 100644 --- a/GameEngine/src/main/java/gameEngine/scenes/Scene.java +++ b/GameEngine/src/main/java/gameEngine/scenes/Scene.java @@ -52,16 +52,31 @@ public void addNewObject() { enqueueTask(() -> { - int entitiesLength = entities.size(); - String newId = Integer.toString(entitiesLength); - GameObject newGameObject = new GameObject(newId); - addEntity(newId, newGameObject); - newGameObject.addComponent(new Mesh(newGameObject, Mesh.MeshType.SPRITE, "GameEngine/resources/button.png")); - newGameObject.addComponent(new TextMesh(newGameObject, "Hello World",32, java.awt.Color.BLACK)); - newGameObject.setName("NewEntity" + newId); + addNewButtonObject(); + addNewTextObject(); }); } + private void addNewButtonObject(){ + int entitiesLength = entities.size(); + String newId = Integer.toString(entitiesLength); + GameObject button = new GameObject(newId); + addEntity(newId, button); + button.addComponent(new Mesh(button, Mesh.MeshType.SPRITE, "GameEngine/resources/button.png")); + button.addComponent(new Button(button, button.getComponent(Mesh.class))); + button.transform.setScale(1,1,1); + button.setName("NewEntity" + newId); + } + + private void addNewTextObject(){ + int entitiesLength = entities.size(); + String newId = Integer.toString(entitiesLength); + GameObject text = new GameObject(newId); + addEntity(newId, text); + text.addComponent(new TextMesh(text, "Hello World",32, java.awt.Color.BLACK)); + text.setName("NewEntity" + newId); + } + /** * Adds a component to the specified GameObject. * This method enqueues a task to add the given GameComponent to the GameObject's component list.