Initial work on DynamicLibrary up to and including the Pokemon model.
This commit is contained in:
parent
62a3ffb2bf
commit
7511f56b1a
|
@ -1,5 +1,6 @@
|
||||||
use crate::dynamic_data::{BattleStatCalculator, Gen7BattleStatCalculator};
|
use crate::dynamic_data::{BattleStatCalculator, Gen7BattleStatCalculator};
|
||||||
use crate::ffi::IdentifiablePointer;
|
use crate::ffi::{IdentifiablePointer, OwnedPtr};
|
||||||
|
use std::ptr::drop_in_place;
|
||||||
|
|
||||||
/// Creates a new Gen 7 battle stat calculator
|
/// Creates a new Gen 7 battle stat calculator
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
@ -9,3 +10,9 @@ extern "C" fn gen_7_battle_stat_calculator_new() -> IdentifiablePointer<Box<dyn
|
||||||
let ptr = Box::into_raw(Box::new(v));
|
let ptr = Box::into_raw(Box::new(v));
|
||||||
IdentifiablePointer::new(ptr, id)
|
IdentifiablePointer::new(ptr, id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Drops a battle stat calculator.
|
||||||
|
#[no_mangle]
|
||||||
|
extern "C" fn battle_stat_calculator_drop(ptr: OwnedPtr<Box<dyn BattleStatCalculator>>) {
|
||||||
|
unsafe { drop_in_place(ptr) };
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
use crate::dynamic_data::{DamageLibrary, Gen7DamageLibrary};
|
use crate::dynamic_data::{DamageLibrary, Gen7DamageLibrary};
|
||||||
use crate::ffi::IdentifiablePointer;
|
use crate::ffi::{IdentifiablePointer, OwnedPtr};
|
||||||
|
use std::ptr::drop_in_place;
|
||||||
|
|
||||||
/// Creates a new generation 7 damage library. `has_randomness` defines whether a random damage
|
/// Creates a new generation 7 damage library. `has_randomness` defines whether a random damage
|
||||||
/// modifier (0.85x - 1.00x) is applied to the calculated damage.
|
/// modifier (0.85x - 1.00x) is applied to the calculated damage.
|
||||||
|
@ -10,3 +11,9 @@ extern "C" fn gen_7_damage_library_new(randomness: u8) -> IdentifiablePointer<Bo
|
||||||
let ptr = Box::into_raw(Box::new(v));
|
let ptr = Box::into_raw(Box::new(v));
|
||||||
IdentifiablePointer::new(ptr, id)
|
IdentifiablePointer::new(ptr, id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Drops a DamageLibrary.
|
||||||
|
#[no_mangle]
|
||||||
|
extern "C" fn damage_library_drop(ptr: OwnedPtr<Box<dyn DamageLibrary>>) {
|
||||||
|
unsafe { drop_in_place(ptr) };
|
||||||
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ use crate::dynamic_data::{
|
||||||
};
|
};
|
||||||
use crate::ffi::{IdentifiablePointer, OwnedPtr};
|
use crate::ffi::{IdentifiablePointer, OwnedPtr};
|
||||||
use crate::static_data::StaticData;
|
use crate::static_data::StaticData;
|
||||||
|
use std::ptr::drop_in_place;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
/// Instantiates a new DynamicLibrary with given parameters.
|
/// Instantiates a new DynamicLibrary with given parameters.
|
||||||
|
@ -25,3 +26,9 @@ extern "C" fn dynamic_library_new(
|
||||||
a.into()
|
a.into()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Drops a dynamic library.
|
||||||
|
#[no_mangle]
|
||||||
|
extern "C" fn dynamic_library_drop(ptr: OwnedPtr<Arc<dyn StaticData>>) {
|
||||||
|
unsafe { drop_in_place(ptr) };
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
use crate::dynamic_data::{Gen7MiscLibrary, MiscLibrary};
|
use crate::dynamic_data::{Gen7MiscLibrary, MiscLibrary};
|
||||||
use crate::ffi::IdentifiablePointer;
|
use crate::ffi::{IdentifiablePointer, OwnedPtr};
|
||||||
|
use std::ptr::drop_in_place;
|
||||||
|
|
||||||
/// Instantiates a new MiscLibrary.
|
/// Instantiates a new MiscLibrary.
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
@ -9,3 +10,9 @@ extern "C" fn gen_7_misc_library_new() -> IdentifiablePointer<Box<dyn MiscLibrar
|
||||||
let ptr = Box::into_raw(Box::new(v));
|
let ptr = Box::into_raw(Box::new(v));
|
||||||
IdentifiablePointer::new(ptr, id)
|
IdentifiablePointer::new(ptr, id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Drops a MiscLibrary.
|
||||||
|
#[no_mangle]
|
||||||
|
extern "C" fn misc_library_drop(ptr: OwnedPtr<Box<dyn MiscLibrary>>) {
|
||||||
|
unsafe { drop_in_place(ptr) };
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
use crate::dynamic_data::{EmptyScriptResolver, ScriptResolver};
|
use crate::dynamic_data::{EmptyScriptResolver, ScriptResolver};
|
||||||
use crate::ffi::IdentifiablePointer;
|
use crate::ffi::{IdentifiablePointer, OwnedPtr};
|
||||||
|
use std::ptr::drop_in_place;
|
||||||
|
|
||||||
/// Instantiates a basic empty script resolver, that always returns None.
|
/// Instantiates a basic empty script resolver, that always returns None.
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
@ -12,6 +13,12 @@ extern "C" fn empty_script_resolver_new() -> IdentifiablePointer<Box<dyn ScriptR
|
||||||
IdentifiablePointer::new(ptr, id)
|
IdentifiablePointer::new(ptr, id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Drops a script resolver.
|
||||||
|
#[no_mangle]
|
||||||
|
extern "C" fn script_resolver_drop(ptr: OwnedPtr<Box<dyn ScriptResolver>>) {
|
||||||
|
unsafe { drop_in_place(ptr) };
|
||||||
|
}
|
||||||
|
|
||||||
/// Foreign function interfaces for the Webassembly script resolver.
|
/// Foreign function interfaces for the Webassembly script resolver.
|
||||||
#[cfg(feature = "wasm")]
|
#[cfg(feature = "wasm")]
|
||||||
mod web_assembly_script_resolver {
|
mod web_assembly_script_resolver {
|
||||||
|
|
|
@ -14,7 +14,7 @@ extern "C" fn pokemon_new(
|
||||||
library: ExternPointer<Arc<dyn DynamicLibrary>>,
|
library: ExternPointer<Arc<dyn DynamicLibrary>>,
|
||||||
species: ExternPointer<Arc<dyn Species>>,
|
species: ExternPointer<Arc<dyn Species>>,
|
||||||
form: ExternPointer<Arc<dyn Form>>,
|
form: ExternPointer<Arc<dyn Form>>,
|
||||||
hidden_ability: bool,
|
hidden_ability: u8,
|
||||||
ability_index: u8,
|
ability_index: u8,
|
||||||
level: LevelInt,
|
level: LevelInt,
|
||||||
unique_identifier: u32,
|
unique_identifier: u32,
|
||||||
|
@ -28,7 +28,7 @@ extern "C" fn pokemon_new(
|
||||||
species.as_ref().clone(),
|
species.as_ref().clone(),
|
||||||
form.as_ref(),
|
form.as_ref(),
|
||||||
AbilityIndex {
|
AbilityIndex {
|
||||||
hidden: hidden_ability,
|
hidden: hidden_ability == 1,
|
||||||
index: ability_index,
|
index: ability_index,
|
||||||
},
|
},
|
||||||
level,
|
level,
|
||||||
|
@ -246,7 +246,7 @@ extern "C" fn pokemon_get_battle_side_index(ptr: ExternPointer<Arc<Pokemon>>) ->
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the index of the slot on the side of the battle the Pokemon is in. If the Pokemon
|
/// Get the index of the slot on the side of the battle the Pokemon is in. If the Pokemon
|
||||||
// is not on the battlefield, this always returns 0.
|
/// is not on the battlefield, this always returns 0.
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
extern "C" fn pokemon_get_battle_index(ptr: ExternPointer<Arc<Pokemon>>) -> u8 {
|
extern "C" fn pokemon_get_battle_index(ptr: ExternPointer<Arc<Pokemon>>) -> u8 {
|
||||||
ptr.as_ref().get_battle_index().unwrap_or_default()
|
ptr.as_ref().get_battle_index().unwrap_or_default()
|
||||||
|
|
Loading…
Reference in New Issue