Last active
January 7, 2022 22:28
-
-
Save CryZe/26608d313b73b596a9da104e606c4e7b to your computer and use it in GitHub Desktop.
Proposal for the MVP of the auto splitting API.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #[repr(transparent)] | |
| pub struct Address(pub u64); | |
| #[repr(transparent)] | |
| pub struct NonZeroAddress(pub NonZeroU64); | |
| #[repr(transparent)] | |
| pub struct ProcessId(NonZeroU64); | |
| #[repr(transparent)] | |
| pub struct TimerState(u32); | |
| impl TimerState { | |
| /// The timer is not running. | |
| pub const NOT_RUNNING: Self = Self(0); | |
| /// The timer is running. | |
| pub const RUNNING: Self = Self(1); | |
| /// The timer started but got paused. This is separate from the game | |
| /// time being paused. Game time may even always be paused. | |
| pub const PAUSED: Self = Self(2); | |
| /// The timer has ended, but didn't get reset yet. | |
| pub const ENDED: Self = Self(3); | |
| } | |
| extern "C" { | |
| /// Gets the state that the timer currently is in. | |
| pub fn timer_get_state() -> TimerState; | |
| /// Starts the timer. | |
| pub fn timer_start(); | |
| /// Splits the current segment. | |
| pub fn timer_split(); | |
| /// Resets the timer. | |
| pub fn timer_reset(); | |
| /// Sets a custom key value pair. This may be arbitrary information that | |
| /// the auto splitter wants to provide for visualization. | |
| pub fn timer_set_variable( | |
| key_ptr: *const u8, | |
| key_len: usize, | |
| value_ptr: *const u8, | |
| value_len: usize, | |
| ); | |
| /// Sets the game time. | |
| pub fn timer_set_game_time(secs: i64, nanos: i32); | |
| /// Pauses the game time. This does not pause the timer, only the | |
| /// automatic flow of time for the game time. | |
| pub fn timer_pause_game_time(); | |
| /// Resumes the game time. This does not resume the timer, only the | |
| /// automatic flow of time for the game time. | |
| pub fn timer_resume_game_time(); | |
| /// Attaches to a process based on its name. | |
| pub fn process_attach(name_ptr: *const u8, name_len: usize) -> Option<ProcessId>; | |
| /// Detaches from a process. | |
| pub fn process_detach(process: ProcessId); | |
| /// Checks whether is a process is still open. You should detach from a | |
| /// process and stop using it if this returns `false`. | |
| pub fn process_is_open(process: ProcessId) -> bool; | |
| /// Reads memory from a process at the address given. This will write | |
| /// the memory to the buffer given. Returns `false` if this fails. | |
| pub fn process_read( | |
| process: ProcessId, | |
| address: Address, | |
| buf_ptr: *mut u8, | |
| buf_len: usize, | |
| ) -> bool; | |
| /// Gets the address of a module in a process. | |
| pub fn process_get_module( | |
| process: ProcessId, | |
| name_ptr: *const u8, | |
| name_len: usize, | |
| ) -> Option<NonZeroAddress>; | |
| /// Sets the tick rate of the runtime. This influences the amount of | |
| /// times the `update` function is called per second. | |
| pub fn runtime_set_tick_rate(ticks_per_second: f64); | |
| /// Prints a log message for debugging purposes. | |
| pub fn runtime_print_message(text_ptr: *const u8, text_len: usize); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment