载入中...
搜索中...
未找到
VehicleSystem.h
浏览该文件的文档.
1#pragma once
2
9
10#include <functional>
11#include <string>
12
13namespace eve::vehicle {
14
15class IVehicleMobility;
16class IVehicleDriver;
17
19using VehicleEventSink = std::function<void(const VehicleEvent&)>;
20
23public:
25 static void registerMobility(IVehicleMobility* mobility);
34 static IVehicleMobility* findMobility(const std::string& name);
36 static int mobilityCount();
37
39 static void registerDriver(IVehicleDriver* driver);
48 static IVehicleDriver* findDriver(const std::string& name);
50 static int driverCount();
51
53 static void setPlayerControls(int playerId, const PlayerControl& control);
62 static const PlayerControl* playerControls(int playerId);
63
65 static void setEventSink(VehicleEventSink sink);
66
68 static void update(VehicleEntity& v, float dt);
69
71 static void processOrders(VehicleEntity& v, float dt);
72
77 [[nodiscard]] static eve::Result<void> pushOrder(VehicleEntity& v, const VehicleOrder& order);
79 static void clearOrders(VehicleEntity& v);
89
91 static float steerToward(VehicleEntity& v, float targetHeadingDeg);
92
94 static bool enterSeat(VehicleEntity& v, int seatIndex, int playerId);
96 static bool exitSeat(VehicleEntity& v, int seatIndex);
98 static int findSeatByPlayer(VehicleEntity& v, int playerId);
99};
100
101} // namespace eve::vehicle
float v
std::string name
std::vector< std::int32_t > order
Move-only operation result carrying either a value or Status.
Definition Result.h:155
驾驶者:把某乘客的控制转成载具输入。
移动模型:读输入、更新运动状态。
载具实体:数据全部在组件里,行为在 VehicleSystem。
载具系统:移动注册 + 命令处理 + 更新。
static void update(VehicleEntity &v, float dt)
每帧推进:命令 → 输入 → 移动模型。自动瞄准由 Vehicle 模块完成。
static eve::Result< void > pushOrder(VehicleEntity &v, const VehicleOrder &order)
追加一条命令;Move/AttackMove 会清空旧命令(RTS 习惯)。
static float steerToward(VehicleEntity &v, float targetHeadingDeg)
按角度差生成转向输入(-1..1)。
static void setPlayerControls(int playerId, const PlayerControl &control)
写入某玩家的控制状态(游戏每帧填充)。
static IVehicleDriver * findDriver(const std::string &name)
按名字取驾驶者;未注册返回 nullptr。
static const VehicleOrder * currentOrder(VehicleEntity &v)
当前命令;无命令返回 nullptr。
static void registerDriver(IVehicleDriver *driver)
注册驾驶者实现;同名替换。
static int driverCount()
已注册驾驶者数量。
static bool exitSeat(VehicleEntity &v, int seatIndex)
Exit seat.
static IVehicleMobility * findMobility(const std::string &name)
按名字取移动模型;未注册返回 nullptr。
static const PlayerControl * playerControls(int playerId)
取某玩家的控制状态;未设置返回 nullptr。
static void setEventSink(VehicleEventSink sink)
注册事件汇(替换旧的;传 nullptr 清空)。
static void registerMobility(IVehicleMobility *mobility)
注册移动模型实现;同名替换。
static int findSeatByPlayer(VehicleEntity &v, int playerId)
Finds seat by player.
static void clearOrders(VehicleEntity &v)
清空命令队列。
static void processOrders(VehicleEntity &v, float dt)
处理命令队列:把队首命令转成 v.input()。
static bool enterSeat(VehicleEntity &v, int seatIndex, int playerId)
座位:进入 / 离开 / 按玩家找座位。
static int mobilityCount()
已注册移动模型数量。
驾驶者接口与玩家控制状态。
std::function< void(const VehicleEvent &)> VehicleEventSink
事件汇:由 Vehicle 模块(或测试)注册,把事件写入自己的队列。
一名玩家的原始控制(归一化,游戏侧填充)。角度为度。
载具事件(帧缓存,脚本轮询)。
一条 Vehicle 领域命令(生命周期由 Vehicle order adapter 执行)。