doukutsu-rs/src/scripting/doukutsu.rs

64 lines
1.6 KiB
Rust
Raw Normal View History

2021-01-01 01:46:01 +00:00
use lua_ffi::ffi::luaL_Reg;
2021-02-12 10:05:28 +00:00
use lua_ffi::{c_int, LuaObject, State};
2021-01-01 01:46:01 +00:00
use crate::scripting::LuaScriptingState;
pub struct Doukutsu {
pub ptr: *mut LuaScriptingState,
}
#[allow(unused)]
2021-01-01 01:46:01 +00:00
impl Doukutsu {
pub fn new(ptr: *mut LuaScriptingState) -> Doukutsu {
2021-02-12 10:05:28 +00:00
Doukutsu { ptr }
2021-01-01 01:46:01 +00:00
}
unsafe fn lua_play_sfx(&self, state: &mut State) -> c_int {
if let Some(index) = state.to_int(2) {
let game_state = &mut (*(*self.ptr).state_ptr);
game_state.sound_manager.play_sfx(index as u8);
}
0
}
unsafe fn lua_play_song(&self, state: &mut State) -> c_int {
if let Some(index) = state.to_int(2) {
let game_state = &mut (*(*self.ptr).state_ptr);
let ctx = &mut (*(*self.ptr).ctx_ptr);
2021-02-12 10:05:28 +00:00
let _ =
game_state.sound_manager.play_song(index as usize, &game_state.constants, &game_state.settings, ctx);
2021-01-01 01:46:01 +00:00
}
0
}
2021-02-10 20:14:09 +00:00
unsafe fn lua_get_flag(&self, state: &mut State) -> c_int {
2021-01-01 01:46:01 +00:00
if let Some(index) = state.to_int(2) {
let game_state = &mut (*(*self.ptr).state_ptr);
2021-02-10 20:14:09 +00:00
state.push(game_state.get_flag(index.max(0) as usize));
2021-01-01 01:46:01 +00:00
} else {
state.push_nil();
}
1
}
}
impl LuaObject for Doukutsu {
fn name() -> *const i8 {
c_str!("Doukutsu")
}
fn lua_fns() -> Vec<luaL_Reg> {
vec![
lua_method!("play_sfx", Doukutsu, Doukutsu::lua_play_sfx),
lua_method!("play_song", Doukutsu, Doukutsu::lua_play_song),
2021-02-10 20:14:09 +00:00
lua_method!("get_flag", Doukutsu, Doukutsu::lua_get_flag),
2021-01-01 01:46:01 +00:00
]
}
}