pub struct ClientState<G: GameClientDef> { /* private fields */ }Expand description
Generic оркестрация клиентского ядра поверх игровой G: GameClientDef:
сетевой буфер (interpolator), очередь событийных кадров, hot-буфер
рендер-тика. Байтовая раскладка hot-буфера (флаги/камера/N танков×поля/M
динамики×поля/predicted-хвост) не меняется — см. write_hot.
Implementations§
Source§impl<G: GameClientDef> ClientState<G>
impl<G: GameClientDef> ClientState<G>
pub fn new(cfg: EngineClientConfig, game_cfg: &G::Config) -> Self
Sourcepub fn push_frame(&mut self, data: &[u8], local_now: f64) -> bool
pub fn push_frame(&mut self, data: &[u8], local_now: f64) -> bool
Бинарный кадр из транспорта: распаковка, вставка в буфер по seq, reconciliation предикта по player-блоку. false — кадр отброшен (чужой порт, версия или повреждённые данные).
Sourcepub fn game(&self) -> &G
pub fn game(&self) -> &G
Игровая половина ядра: игровая обёртка ABI (ClientCore плагина)
достаёт через неё свои подсистемы — движок их формы не знает.
pub fn my_game_id(&self) -> Option<u32>
pub fn offset(&self) -> Option<f64>
Sourcepub fn sample(&mut self, local_now: f64) -> usize
pub fn sample(&mut self, local_now: f64) -> usize
Рендер-тик: выдача пересечённых кадров (фильтр дублей → JSON-очередь), интерполяция, шаг предикта, запись hot-буфера. Возвращает длину hot-буфера в f32-элементах.
pub fn hot(&self) -> &[f32]
Sourcepub fn take_frames(&mut self) -> String
pub fn take_frames(&mut self) -> String
Событийные кадры JSON-строкой [{game, camera}, …]; очередь очищается.
pub fn apply_input(&mut self, action: &str, key_name: &str, local_now: f64)
pub fn apply_aim(&mut self, x: f32, y: f32, flags: u32, local_now: f64)
pub fn try_action(&mut self, local_now: f64) -> Option<String>
pub fn cycle_item(&mut self, back: bool)
pub fn set_model(&mut self, model_name: &str)
Sourcepub fn set_active(&mut self, active: bool)
pub fn set_active(&mut self, active: bool)
Смена режима игрок/спектатор (KEYSET_DATA).
Sourcepub fn set_map(&mut self, map_json: &str) -> Result<(), String>
pub fn set_map(&mut self, map_json: &str) -> Result<(), String>
Данные карты (MAP_DATA): мир raycast + сброс буфера и предикта.
pub fn sync_panel(&mut self, panel_json: &str)
Sourcepub fn resync(&mut self)
pub fn resync(&mut self)
Ресинк часов после долгой паузы вкладки (visibilitychange → visible): сетевая половина начинает с чистого листа, чтобы следующий кадр пересеял оффсет точно, а не догонял EMA десятки кадров. Игровую половину (предикт, своя идентичность) не трогаем — сущности на полотне живы.
Sourcepub fn debug_json(&self) -> String
pub fn debug_json(&self) -> String
Зеркало серверного EngineSim::debug_json на клиенте: состояние
сетевого буфера (глубина, окно seq, оффсет, последний кадр), свой
gameId, размеры hot-буфера и очереди событийных кадров.
Sourcepub fn take_divergence(&mut self) -> String
pub fn take_divergence(&mut self) -> String
Записи расхождения предикта с авторитетным состоянием (JSON,
см. client::divergence); очередь очищается. "null" — детектор
выключен (боевой конфиг без секции divergence).
Sourcepub fn decode_frame(&self, data: &[u8]) -> String
pub fn decode_frame(&self, data: &[u8]) -> String
Чистая распаковка кадра v3 в JSON-форму unpackFrame (тесты/харнесс).
Auto Trait Implementations§
impl<G> Freeze for ClientState<G>where
G: Freeze,
impl<G> RefUnwindSafe for ClientState<G>where
G: RefUnwindSafe,
impl<G> Send for ClientState<G>where
G: Send,
impl<G> Sync for ClientState<G>where
G: Sync,
impl<G> Unpin for ClientState<G>where
G: Unpin,
impl<G> UnsafeUnpin for ClientState<G>where
G: UnsafeUnpin,
impl<G> UnwindSafe for ClientState<G>where
G: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.