45 lines
1.4 KiB
C
45 lines
1.4 KiB
C
#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);
|