#pragma once // ============================================================================ // camera_controller.h - 增强相机控制器(飞行 / 步行模式) // ============================================================================ #include "camera.h" #include "../ASM/math_c_fallback.h" typedef enum { CAMERA_MODE_FLY, CAMERA_MODE_WALK, } CameraMode; typedef struct { Camera* camera; CameraMode mode; float move_speed; float mouse_sensitivity; float height_offset; // 步行模式眼睛离地面高度 float pitch_min; float pitch_max; float yaw; float pitch; float (*ground_height_fn)(float x, float z, void* user); void* ground_user; } CameraController; CameraController camera_controller_create(Camera* camera); // 更新 yaw/pitch,鼠标输入以 delta 像素为单位 void camera_controller_look(CameraController* ctrl, float delta_x, float delta_y); // 移动:dir 为本地空间方向 (x=右, y=上, z=前) void camera_controller_move(CameraController* ctrl, Vec3 dir, float dt); // 设置地形高度采样回调 void camera_controller_set_ground_callback(CameraController* ctrl, float (*get_height)(float x, float z, void* user), void* user); // 切换模式 void camera_controller_set_mode(CameraController* ctrl, CameraMode mode); // 每帧应用约束(如步行贴地) void camera_controller_update(CameraController* ctrl, float dt);