package gameEngine.entites.gameComponents; import gameEngine.Time; import gameEngine.entites.GameObject; import gameEngine.geometry.Transform; import gameEngine.input.*; import static org.lwjgl.glfw.GLFW.*; public class MoveImage extends GameComponent{ private GameObject parent; private final int moveSpeed = 100; private final int rotateSpeed = 100; public MoveImage(GameObject parent){ this.parent = parent; } @Override public GameComponent copy() { return this; } public void update() { Transform transform = parent.transform; if (transform != null) { handlePositionInput(transform); handleRotationInput(transform); } } private void handlePositionInput(Transform transform) { float x = transform.position.x; float y = transform.position.y; float z = transform.position.z; if (Input.GetKey(GLFW_KEY_W)) { transform.setPosition(x, y - moveSpeed * Time.deltaTime, z); } if (Input.GetKey(GLFW_KEY_A)) { transform.setPosition(x - moveSpeed * Time.deltaTime, y, z); } if (Input.GetKey(GLFW_KEY_S)) { transform.setPosition(x, y + moveSpeed * Time.deltaTime, z); } if (Input.GetKey(GLFW_KEY_D)) { transform.setPosition(x + moveSpeed * Time.deltaTime, y, z); } if (Input.GetKey(GLFW_KEY_Q)) { transform.setPosition(x, y, z - moveSpeed * Time.deltaTime); } if (Input.GetKey(GLFW_KEY_E)) { transform.setPosition(x, y, z + moveSpeed * Time.deltaTime); } } private void handleRotationInput(Transform transform) { float rotX = transform.rotation.x; float rotY = transform.rotation.y; float rotZ = transform.rotation.z; if (Input.GetKey(GLFW_KEY_Z)) { transform.setRotation(wrapAngle(rotX - rotateSpeed * Time.deltaTime), rotY, rotZ); // 左回転 } if (Input.GetKey(GLFW_KEY_C)) { transform.setRotation(wrapAngle(rotX + rotateSpeed * Time.deltaTime), rotY, rotZ); // 右回転 } if (Input.GetKey(GLFW_KEY_UP)) { transform.setRotation(rotX, wrapAngle(rotY - rotateSpeed * Time.deltaTime), rotZ); // 上方向 } if (Input.GetKey(GLFW_KEY_DOWN)) { transform.setRotation(rotX, wrapAngle(rotY + rotateSpeed * Time.deltaTime), rotZ); // 下方向 } if (Input.GetKey(GLFW_KEY_LEFT)) { transform.setRotation(rotX, rotY, wrapAngle(rotZ - rotateSpeed * Time.deltaTime)); // 左方向 } if (Input.GetKey(GLFW_KEY_RIGHT)) { transform.setRotation(rotX, rotY, wrapAngle(rotZ + rotateSpeed * Time.deltaTime)); // 右方向 } } private float wrapAngle(float angle) { if (angle < 0) { angle += 360; } else if (angle >= 360) { angle -= 360; } return angle; } }