Skip to main content

GameClientDef

Trait GameClientDef 

Source
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§

Required Methods§

Source

fn new(cfg: &Self::Config, engine_cfg: &EngineClientConfig) -> Self

Source

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), поэтому не параметризована трейтом отдельно.

Source

fn update(&mut self, local_now: f64)

Шаг предикта до текущего рендер-времени.

Source

fn track_frame(&mut self, my_game_id: Option<u32>, frame: &FrameData)

Отслеживание своего актора в пересечённом кадре (дискретные поля, freeze при уничтожении, reset по forceReset камеры). my_game_id — текущий id своего актора (из последнего player-блока).

Source

fn filter_frame_game( &mut self, game: &mut Map<String, Value>, my_game_id: Option<u32>, local_now: f64, )

Фильтр собственных событий в JSON-форме кадра (подавление дублей локально предсказанных эффектов).

Source

fn update_world(&mut self, snapshot: &DecodedSnapshot)

Обновление игрового мира для дальнейшего локального спавна эффектов (raycast и т.п.) — по каждому пересечённому кадру.

Source

fn update_world_interpolated(&mut self, game: &InterpolatedGame)

То же — по интерполированному состоянию (между кадрами).

Source

fn render_overlay(&self, my_game_id: Option<u32>) -> Option<RenderOverlay>

Полная predicted-запись рендер-тика; None — предикт не готов (нет своего актора/модели/меты), тогда камера рендер-тика берётся из интерполяции, а флаг HOT_HAS_PREDICTED не выставляется.

Source

fn apply_input(&mut self, action: &str, key_name: &str, local_now: f64)

Source

fn set_model(&mut self, model_name: &str)

Source

fn set_active(&mut self, active: bool)

Source

fn set_map(&mut self, map_json: &str) -> Result<(), String>

Source

fn sync_panel(&mut self, items: &[String])

Source

fn reset(&mut self)

Source

fn cycle_item(&mut self, back: bool)

Циклический выбор активного предмета/режима актора (нейтральный аналог смены оружия — конкретный смысл определяет игра).

Source

fn try_action( &mut self, my_game_id: Option<u32>, local_now: f64, ) -> Option<String>

Локальное визуальное действие актора (выстрел и т.п.; гейты внутри — предикт активен, свой актор жив). JSON спавна либо None.

Provided Methods§

Source

fn begin_reconcile(&mut self, _snapshot: &DecodedSnapshot)

Авторитетный кадр ПЕРЕД replay предикта: игра снимает с него состояние тел, которые ведёт сама (динамика карты, чужие акторы в контакте). Дефолт пустой — игре, предсказывающей только своего актора, кадр в этой точке не нужен.

Source

fn finish_reconcile(&mut self)

Парный хук ПОСЛЕ on_server_state: replay уже переиграл и тела игры, так что расхождение старого предсказания с новым считается здесь. Дефолт пустой.

Source

fn render_rows(&self) -> Vec<PredictedRow>

Строки рендер-тика, которыми игра перекрывает интерполированные (см. PredictedRow). Дефолт пустой — предсказанных чужих тел нет.

Source

fn predicted_state(&self) -> Option<[f32; 8]>

Предсказанное состояние своего актора в раскладке player-блока — уровень 1 детектора рассинхрона (client::divergence). Движок снимает его непосредственно перед on_server_state, то есть до затирания предикта авторитетным состоянием. Дефолт None — тогда движок сравнивает камеру predicted-оверлея с x/y кадра (уровень 0), и от плагина не требуется ничего.

Source

fn replayed_inputs(&self) -> Option<(f64, f64, usize)>

Окно локального времени истории ввода, переигранное последним реконсилем: (начало, конец, число вводов). Реконсиляция идёт по времени, а не по seq, поэтому именно окно локализует расхождение в формуле движения. Дефолт None.

Source

fn apply_aim(&mut self, _x: f32, _y: f32, _flags: u32, _local_now: f64)

Ввод указателем: мировая точка (движок уже пересчитал экранные координаты через камеру) и биты состояния указателя — бит 0 «прижат», бит 1 «двойной тап». Дефолт пустой, как у GameSim.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§