pub trait GameClientDef: Sized {
type Config: DeserializeOwned;
Show 22 methods
// Required methods
fn new(cfg: &Self::Config, engine_cfg: &EngineClientConfig) -> Self;
fn on_server_state(
&mut self,
state: [f32; 8],
centering: bool,
server_time: f64,
offset: f64,
local_now: f64,
);
fn update(&mut self, local_now: f64);
fn track_frame(&mut self, my_game_id: Option<u32>, frame: &FrameData);
fn filter_frame_game(
&mut self,
game: &mut Map<String, Value>,
my_game_id: Option<u32>,
local_now: f64,
);
fn update_world(&mut self, snapshot: &DecodedSnapshot);
fn update_world_interpolated(&mut self, game: &InterpolatedGame);
fn render_overlay(&self, my_game_id: Option<u32>) -> Option<RenderOverlay>;
fn apply_input(&mut self, action: &str, key_name: &str, local_now: f64);
fn set_model(&mut self, model_name: &str);
fn set_active(&mut self, active: bool);
fn set_map(&mut self, map_json: &str) -> Result<(), String>;
fn sync_panel(&mut self, items: &[String]);
fn reset(&mut self);
fn cycle_item(&mut self, back: bool);
fn try_action(
&mut self,
my_game_id: Option<u32>,
local_now: f64,
) -> Option<String>;
// Provided methods
fn begin_reconcile(&mut self, _snapshot: &DecodedSnapshot) { ... }
fn finish_reconcile(&mut self) { ... }
fn render_rows(&self) -> Vec<PredictedRow> { ... }
fn predicted_state(&self) -> Option<[f32; 8]> { ... }
fn replayed_inputs(&self) -> Option<(f64, f64, usize)> { ... }
fn apply_aim(&mut self, _x: f32, _y: f32, _flags: u32, _local_now: f64) { ... }
}Expand description
Игровая половина клиентского ядра — зеркало crate::sim::GameSim<G> на
клиентской стороне. ClientState<G> (ниже) зовёт эти методы в фиксированных
точках рендер-тика; Self хранит всё нужное для предикта (модели, оружие,
историю ввода) само — ClientState<G> игровых конфигов не хранит.
Required Associated Types§
type Config: DeserializeOwned
Required Methods§
fn new(cfg: &Self::Config, engine_cfg: &EngineClientConfig) -> Self
Sourcefn on_server_state(
&mut self,
state: [f32; 8],
centering: bool,
server_time: f64,
offset: f64,
local_now: f64,
)
fn on_server_state( &mut self, state: [f32; 8], centering: bool, server_time: f64, offset: f64, local_now: f64, )
Reconciliation по player-блоку кадра (авторитетное состояние своего
актора). Раскладка [f32; PLAYER_STATE_LEN] — движковая (общая с
серверным GameSim::prediction_state), поэтому не параметризована
трейтом отдельно.
Sourcefn track_frame(&mut self, my_game_id: Option<u32>, frame: &FrameData)
fn track_frame(&mut self, my_game_id: Option<u32>, frame: &FrameData)
Отслеживание своего актора в пересечённом кадре (дискретные поля,
freeze при уничтожении, reset по forceReset камеры). my_game_id —
текущий id своего актора (из последнего player-блока).
Sourcefn filter_frame_game(
&mut self,
game: &mut Map<String, Value>,
my_game_id: Option<u32>,
local_now: f64,
)
fn filter_frame_game( &mut self, game: &mut Map<String, Value>, my_game_id: Option<u32>, local_now: f64, )
Фильтр собственных событий в JSON-форме кадра (подавление дублей локально предсказанных эффектов).
Sourcefn update_world(&mut self, snapshot: &DecodedSnapshot)
fn update_world(&mut self, snapshot: &DecodedSnapshot)
Обновление игрового мира для дальнейшего локального спавна эффектов (raycast и т.п.) — по каждому пересечённому кадру.
Sourcefn update_world_interpolated(&mut self, game: &InterpolatedGame)
fn update_world_interpolated(&mut self, game: &InterpolatedGame)
То же — по интерполированному состоянию (между кадрами).
Sourcefn render_overlay(&self, my_game_id: Option<u32>) -> Option<RenderOverlay>
fn render_overlay(&self, my_game_id: Option<u32>) -> Option<RenderOverlay>
Полная predicted-запись рендер-тика; None — предикт не готов (нет
своего актора/модели/меты), тогда камера рендер-тика берётся из
интерполяции, а флаг HOT_HAS_PREDICTED не выставляется.
fn apply_input(&mut self, action: &str, key_name: &str, local_now: f64)
fn set_model(&mut self, model_name: &str)
fn set_active(&mut self, active: bool)
fn set_map(&mut self, map_json: &str) -> Result<(), String>
fn sync_panel(&mut self, items: &[String])
fn reset(&mut self)
Sourcefn cycle_item(&mut self, back: bool)
fn cycle_item(&mut self, back: bool)
Циклический выбор активного предмета/режима актора (нейтральный аналог смены оружия — конкретный смысл определяет игра).
Provided Methods§
Sourcefn begin_reconcile(&mut self, _snapshot: &DecodedSnapshot)
fn begin_reconcile(&mut self, _snapshot: &DecodedSnapshot)
Авторитетный кадр ПЕРЕД replay предикта: игра снимает с него состояние тел, которые ведёт сама (динамика карты, чужие акторы в контакте). Дефолт пустой — игре, предсказывающей только своего актора, кадр в этой точке не нужен.
Sourcefn finish_reconcile(&mut self)
fn finish_reconcile(&mut self)
Парный хук ПОСЛЕ on_server_state: replay уже переиграл и тела
игры, так что расхождение старого предсказания с новым считается
здесь. Дефолт пустой.
Sourcefn render_rows(&self) -> Vec<PredictedRow>
fn render_rows(&self) -> Vec<PredictedRow>
Строки рендер-тика, которыми игра перекрывает интерполированные
(см. PredictedRow). Дефолт пустой — предсказанных чужих тел нет.
Sourcefn predicted_state(&self) -> Option<[f32; 8]>
fn predicted_state(&self) -> Option<[f32; 8]>
Предсказанное состояние своего актора в раскладке player-блока —
уровень 1 детектора рассинхрона (client::divergence). Движок
снимает его непосредственно перед on_server_state, то есть до
затирания предикта авторитетным состоянием. Дефолт None — тогда
движок сравнивает камеру predicted-оверлея с x/y кадра (уровень 0),
и от плагина не требуется ничего.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".