samp_sdk/omp/generated/timer.rs
1//! `ITimer` — generated by `cargo xtask gen-omp` from `Server/Components/Timers/timers.hpp`.
2//! Implemented by `Timer` in the server's `Timers`.
3//!
4//! Do not edit: change `xtask/omp-wrappers.toml` or the generator and
5//! regenerate. Slots are clang's layout of the header for each ABI, checked
6//! against the official binaries by `cargo xtask check-abi --generated`.
7
8#![allow(unused_imports)]
9
10use crate::omp::containers::{FlatSet, HybridString, Pair, Span};
11use crate::omp::types::{
12 Colour, GTAQuat, Hours, Microseconds, Milliseconds, Minutes, Seconds, StringView, TimePoint,
13 UID, Vector2, Vector3, Vector4, WorldTimePoint,
14};
15use crate::omp::vtable::{call_vtable_small_struct, opaque, slots, virtual_fns};
16use crate::omp::*;
17
18slots! {
19 /// `bool ITimer::running()`
20 SLOT_RUNNING: usize = 6, 5;
21 /// `Milliseconds ITimer::remaining()`
22 SLOT_REMAINING: usize = 7, 6;
23 /// `unsigned int ITimer::calls()`
24 SLOT_CALLS: usize = 8, 7;
25 /// `Milliseconds ITimer::interval()`
26 SLOT_INTERVAL: usize = 9, 8;
27 /// `bool ITimer::trigger()`
28 SLOT_TRIGGER: usize = 10, 9;
29 /// `TimerTimeOutHandler * ITimer::handler()`
30 SLOT_HANDLER: usize = 12, 11;
31}
32
33virtual_fns! {
34 /// `bool ITimer::running()`.
35 ///
36 /// # Safety
37 /// `timer` must be a live `ITimer`.
38 #[must_use]
39 pub fn timer_running(timer: ITimer) -> bool = [0, SLOT_RUNNING] or false;
40
41 /// `unsigned int ITimer::calls()`.
42 ///
43 /// # Safety
44 /// `timer` must be a live `ITimer`.
45 #[must_use]
46 pub fn timer_calls(timer: ITimer) -> u32 = [0, SLOT_CALLS] or 0;
47
48 /// `bool ITimer::trigger()`.
49 ///
50 /// # Safety
51 /// `timer` must be a live `ITimer`.
52 #[must_use]
53 pub fn timer_trigger(timer: ITimer) -> bool = [0, SLOT_TRIGGER] or false;
54
55 /// `TimerTimeOutHandler * ITimer::handler()`.
56 ///
57 /// # Safety
58 /// `timer` must be a live `ITimer`.
59 #[must_use]
60 pub fn timer_handler(
61 timer: ITimer,
62 ) -> *mut TimerTimeOutHandler = [0, SLOT_HANDLER] or std::ptr::null_mut();
63}
64
65/// `Milliseconds ITimer::remaining()`.
66///
67/// # Safety
68/// `timer` must be a live `ITimer`.
69#[must_use]
70pub unsafe fn timer_remaining(timer: *mut ITimer) -> Option<Milliseconds> {
71 call_vtable_small_struct!(
72 timer.cast::<u8>(),
73 0,
74 SLOT_REMAINING,
75 Milliseconds,
76 Milliseconds::default()
77 )
78}
79
80/// `Milliseconds ITimer::interval()`.
81///
82/// # Safety
83/// `timer` must be a live `ITimer`.
84#[must_use]
85pub unsafe fn timer_interval(timer: *mut ITimer) -> Option<Milliseconds> {
86 call_vtable_small_struct!(
87 timer.cast::<u8>(),
88 0,
89 SLOT_INTERVAL,
90 Milliseconds,
91 Milliseconds::default()
92 )
93}
94
95// What the generator left out, and why.
96// skipped: `void ITimer::kill()` — covered by a hand-written wrapper under another name