Newer
Older
AlgebraicDataflowArchitectureModel / GameEngine / src / main / java / gameEngine / entites / editorComponents / Draggable.java
package gameEngine.entites.editorComponents;

import gameEngine.entites.EditorEntity;
import gameEngine.input.Input;
import gameEngine.input.MouseInput;
import gameEngine.scenes.EditorScene;
import gameEngine.views.Window;

public abstract class Draggable extends EditorComponent {
    protected EditorEntity parent;
    protected boolean isDraggable = true;
    protected boolean isLeftDragging = false;
    protected boolean isRightDragging = false;
    protected float dragOffsetX = 0.0f;
    protected float dragOffsetY = 0.0f;

    public void setDraggable(boolean draggable) {
        this.isDraggable = draggable;
    }

    public void handleDragging() {
        if (!isDraggable) return;

        float mouseX = MouseInput.getX();
        float mouseY = MouseInput.getY();
        EditorScene scene = (EditorScene) Window.get().getScene();

        if (scene.getSelectedEntity() == null) {
            if (Input.GetMouseButtonDown(0) && isMouseOver(mouseX, mouseY)) {
                isLeftDragging = true;
                scene.setSelectedEntity(parent);
                scene.setClickedEntity(parent);
                leftDragStartAction(mouseX, mouseY); // ドラッグ開始時の処理
            }

            if (Input.GetMouseButtonDown(1) && isMouseOver(mouseX, mouseY)) {
                isRightDragging = true;
                scene.setSelectedEntity(parent);
                scene.setClickedEntity(parent);
                rightDragStartAction(mouseX, mouseY);
            }
        }

        if (isLeftDragging && Input.GetMouseButton(0)) {
            leftDraggingAction(mouseX, mouseY); // ドラッグ中の処理
        }
        if (isRightDragging && Input.GetMouseButton(1)) {
            rightDraggingAction(mouseX, mouseY); // ドラッグ中の処理
        }

        if (Input.GetMouseButtonUp(0)) {
            isLeftDragging = false;
            scene.clearSelectedObject();
        }
        if (Input.GetMouseButtonUp(1)) {
            isRightDragging = false;
            scene.clearSelectedObject();
        }
    }

    protected abstract boolean isMouseOver(float mouseX, float mouseY);
    protected abstract void leftDragStartAction(float mouseX, float mouseY);
    protected abstract void leftDraggingAction(float mouseX, float mouseY);
    protected abstract void rightDragStartAction(float mouseX, float mouseY);
    protected abstract void rightDraggingAction(float mouseX, float mouseY);

}