rosu_memory_lib/reader/beatmap/stable/
mod.rs

1pub mod file;
2pub mod location;
3pub mod memory;
4pub mod offset;
5
6use crate::reader::beatmap::stable::offset::*;
7use crate::reader::common::stable::memory::check_game_state;
8use crate::reader::common::GameState;
9use crate::reader::structs::State;
10use crate::Error;
11use rosu_mem::process::{Process, ProcessTraits};
12
13pub(crate) fn get_beatmap_addr(p: &Process, state: &mut State) -> Result<i32, Error> {
14    match check_game_state(p, state, GameState::SongSelect)?
15        || check_game_state(p, state, GameState::Editor)?
16        || check_game_state(p, state, GameState::Playing)?
17        || check_game_state(p, state, GameState::ResultScreen)?
18    {
19        true => Ok(p.read_i32(p.read_i32(state.addresses.base - BEATMAP_OFFSET.ptr)?)?),
20        false => Err(Error::NotAvailable("Not in song select".to_string())),
21    }
22}
23
24pub(crate) fn read_from_beatmap_ptr_string(
25    p: &Process,
26    state: &mut State,
27    offset: i32,
28) -> Result<String, Error> {
29    let beatmap_addr = get_beatmap_addr(p, state)?;
30    Ok(p.read_string(beatmap_addr + offset)?)
31}