Basic implementation of evolutions
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -6,7 +6,7 @@ use wasmer::{FunctionEnv, FunctionEnvMut, Imports, StoreMut};
|
||||
|
||||
use crate::script_implementations::wasm::extern_ref::ExternRef;
|
||||
use crate::script_implementations::wasm::script_resolver::WebAssemblyEnv;
|
||||
use crate::static_data::EffectParameter;
|
||||
use crate::static_data::Parameter;
|
||||
use crate::StringKey;
|
||||
|
||||
/// Dynamic data registration
|
||||
@@ -140,51 +140,39 @@ fn string_key_get_str(env: FunctionEnvMut<WebAssemblyEnv>, string_key: ExternRef
|
||||
}
|
||||
|
||||
/// Gets the type of an EffectParameter
|
||||
fn effect_parameter_get_type(
|
||||
env: FunctionEnvMut<WebAssemblyEnv>,
|
||||
parameter: ExternRef<EffectParameter>,
|
||||
) -> WasmResult<u8> {
|
||||
fn effect_parameter_get_type(env: FunctionEnvMut<WebAssemblyEnv>, parameter: ExternRef<Parameter>) -> WasmResult<u8> {
|
||||
let value = get_value_arc!(parameter, env);
|
||||
wasm_ok(match value.deref() {
|
||||
EffectParameter::Bool(_) => 1,
|
||||
EffectParameter::Int(_) => 2,
|
||||
EffectParameter::Float(_) => 3,
|
||||
EffectParameter::String(_) => 4,
|
||||
Parameter::Bool(_) => 1,
|
||||
Parameter::Int(_) => 2,
|
||||
Parameter::Float(_) => 3,
|
||||
Parameter::String(_) => 4,
|
||||
})
|
||||
}
|
||||
|
||||
/// Gets the inner bool data of an EffectParameter. Panics if it's not a bool.
|
||||
fn effect_parameter_as_bool(
|
||||
env: FunctionEnvMut<WebAssemblyEnv>,
|
||||
parameter: ExternRef<EffectParameter>,
|
||||
) -> WasmResult<u8> {
|
||||
fn effect_parameter_as_bool(env: FunctionEnvMut<WebAssemblyEnv>, parameter: ExternRef<Parameter>) -> WasmResult<u8> {
|
||||
let value = get_value_arc!(parameter, env);
|
||||
match value.deref() {
|
||||
EffectParameter::Bool(b) => wasm_ok(<u8 as From<bool>>::from(*b)),
|
||||
Parameter::Bool(b) => wasm_ok(<u8 as From<bool>>::from(*b)),
|
||||
_ => wasm_err::<u8>(anyhow!("Unexpected parameter type. Expected bool, got {}", value), &env),
|
||||
}
|
||||
}
|
||||
|
||||
/// Gets the inner int data of an EffectParameter. Panics if it's not an int.
|
||||
fn effect_parameter_as_int(
|
||||
env: FunctionEnvMut<WebAssemblyEnv>,
|
||||
parameter: ExternRef<EffectParameter>,
|
||||
) -> WasmResult<i64> {
|
||||
fn effect_parameter_as_int(env: FunctionEnvMut<WebAssemblyEnv>, parameter: ExternRef<Parameter>) -> WasmResult<i64> {
|
||||
let value = get_value_arc!(parameter, env);
|
||||
match value.deref() {
|
||||
EffectParameter::Int(i) => wasm_ok(*i),
|
||||
Parameter::Int(i) => wasm_ok(*i),
|
||||
_ => wasm_err::<i64>(anyhow!("Unexpected parameter type. Expected int, got {}", value), &env),
|
||||
}
|
||||
}
|
||||
|
||||
/// Gets the inner float data of an EffectParameter. Panics if it's not a float.
|
||||
fn effect_parameter_as_float(
|
||||
env: FunctionEnvMut<WebAssemblyEnv>,
|
||||
parameter: ExternRef<EffectParameter>,
|
||||
) -> WasmResult<f32> {
|
||||
fn effect_parameter_as_float(env: FunctionEnvMut<WebAssemblyEnv>, parameter: ExternRef<Parameter>) -> WasmResult<f32> {
|
||||
let value = get_value_arc!(parameter, env);
|
||||
match value.deref() {
|
||||
EffectParameter::Float(f) => wasm_ok(*f),
|
||||
Parameter::Float(f) => wasm_ok(*f),
|
||||
_ => wasm_err::<f32>(
|
||||
anyhow!("Unexpected parameter type. Expected float, got {}", value),
|
||||
&env,
|
||||
@@ -195,11 +183,11 @@ fn effect_parameter_as_float(
|
||||
/// Gets the inner string data of an EffectParameter. Panics if it's not a string.
|
||||
fn effect_parameter_as_string(
|
||||
env: FunctionEnvMut<WebAssemblyEnv>,
|
||||
parameter: ExternRef<EffectParameter>,
|
||||
parameter: ExternRef<Parameter>,
|
||||
) -> WasmResult<ExternRef<StringKey>> {
|
||||
let value = get_value_arc!(parameter, env);
|
||||
match value.deref() {
|
||||
EffectParameter::String(s) => wasm_ok(ExternRef::<StringKey>::func_new(&env, s.clone().into())),
|
||||
Parameter::String(s) => wasm_ok(ExternRef::<StringKey>::func_new(&env, s.clone().into())),
|
||||
_ => wasm_err::<ExternRef<StringKey>>(
|
||||
anyhow!("Unexpected parameter type. Expected string, got {}", value),
|
||||
&env,
|
||||
|
||||
@@ -3,7 +3,7 @@ use crate::script_implementations::wasm::export_registry::FunctionEnvMut;
|
||||
use crate::script_implementations::wasm::export_registry::{register, try_wasm, wasm_ok, WasmResult};
|
||||
use crate::script_implementations::wasm::extern_ref::ExternRef;
|
||||
use crate::script_implementations::wasm::script_resolver::WebAssemblyEnv;
|
||||
use crate::static_data::{Ability, EffectParameter};
|
||||
use crate::static_data::{Ability, Parameter};
|
||||
use crate::StringKey;
|
||||
|
||||
register! {
|
||||
@@ -32,7 +32,7 @@ fn ability_get_parameters(
|
||||
let parameters = ability.parameters();
|
||||
let mut vec : Vec<u32> = Vec::with_capacity(parameters.len());
|
||||
for parameter in parameters {
|
||||
vec.push(ExternRef::<EffectParameter>::func_new(&env, parameter.into()).index() as u32);
|
||||
vec.push(ExternRef::<Parameter>::func_new(&env, parameter.into()).index() as u32);
|
||||
}
|
||||
let wasm_ptr = try_wasm!(env.data().data().copy_value_vec_to_wasm(&vec), env);
|
||||
let r: u64 = unsafe { std::mem::transmute((wasm_ptr, vec.len() as u32)) };
|
||||
|
||||
@@ -9,7 +9,7 @@ use std::sync::{Arc, Weak};
|
||||
pub(crate) enum WasmObject {
|
||||
// Static data
|
||||
StringKey(crate::StringKey),
|
||||
EffectParameter(Weak<crate::static_data::EffectParameter>),
|
||||
EffectParameter(Weak<crate::static_data::Parameter>),
|
||||
|
||||
MoveData(Weak<dyn crate::static_data::MoveData>),
|
||||
Species(Weak<dyn crate::static_data::Species>),
|
||||
@@ -182,13 +182,13 @@ impl FromWasmObj for crate::StringKey {
|
||||
}
|
||||
}
|
||||
|
||||
impl From<&Arc<crate::static_data::EffectParameter>> for WasmObject {
|
||||
fn from(value: &Arc<crate::static_data::EffectParameter>) -> Self {
|
||||
impl From<&Arc<crate::static_data::Parameter>> for WasmObject {
|
||||
fn from(value: &Arc<crate::static_data::Parameter>) -> Self {
|
||||
Self::EffectParameter(Arc::downgrade(value))
|
||||
}
|
||||
}
|
||||
|
||||
impl_from_wasm_obj!(EffectParameter, Arc<crate::static_data::EffectParameter>);
|
||||
impl_from_wasm_obj!(EffectParameter, Arc<crate::static_data::Parameter>);
|
||||
|
||||
impl From<&Arc<dyn crate::static_data::MoveData>> for WasmObject {
|
||||
fn from(value: &Arc<dyn crate::static_data::MoveData>) -> Self {
|
||||
|
||||
@@ -2,7 +2,7 @@ use crate::dynamic_data::{ItemScript, Pokemon};
|
||||
use crate::script_implementations::wasm::export_registry::WasmVoidResultExtension;
|
||||
use crate::script_implementations::wasm::extern_ref::ExternRef;
|
||||
use crate::script_implementations::wasm::script_resolver::WebAssemblyEnvironmentData;
|
||||
use crate::static_data::EffectParameter;
|
||||
use crate::static_data::Parameter;
|
||||
use crate::StringKey;
|
||||
use std::sync::Arc;
|
||||
|
||||
@@ -64,12 +64,12 @@ macro_rules! ex_ref {
|
||||
}
|
||||
|
||||
impl ItemScript for WebAssemblyItemScript {
|
||||
fn on_initialize(&self, pars: Vec<Arc<EffectParameter>>) -> anyhow_ext::Result<()> {
|
||||
fn on_initialize(&self, pars: Vec<Arc<Parameter>>) -> anyhow_ext::Result<()> {
|
||||
let env = &self.environment;
|
||||
if let Some(func) = env.script_function_cache().item_on_initialize(env) {
|
||||
let pars = pars
|
||||
.into_iter()
|
||||
.map(|p| ExternRef::<EffectParameter>::new(env, (&p).into()).index() as u32)
|
||||
.map(|p| ExternRef::<Parameter>::new(env, (&p).into()).index() as u32)
|
||||
.collect::<Vec<_>>();
|
||||
let wasm_ptr = env.copy_value_vec_to_wasm(&pars)?;
|
||||
let r: u64 = unsafe { std::mem::transmute((wasm_ptr, pars.len() as u32)) };
|
||||
|
||||
@@ -12,7 +12,7 @@ use crate::script_implementations::wasm::export_registry::WasmVoidResultExtensio
|
||||
use crate::script_implementations::wasm::extern_ref::ExternRef;
|
||||
use crate::script_implementations::wasm::script_resolver::WebAssemblyEnvironmentData;
|
||||
use crate::script_implementations::wasm::WebAssemblyScriptCapabilities;
|
||||
use crate::static_data::{EffectParameter, Item, Statistic, TypeIdentifier};
|
||||
use crate::static_data::{Item, Parameter, Statistic, TypeIdentifier};
|
||||
use crate::StringKey;
|
||||
|
||||
/// A WebAssemblyScript is there to implement the Script trait within WebAssemblyScript.
|
||||
@@ -125,7 +125,7 @@ impl Script for WebAssemblyScript {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn on_initialize(&self, library: &Arc<dyn DynamicLibrary>, pars: Vec<Arc<EffectParameter>>) -> Result<()> {
|
||||
fn on_initialize(&self, library: &Arc<dyn DynamicLibrary>, pars: Vec<Arc<Parameter>>) -> Result<()> {
|
||||
if !self.has_capability(&WebAssemblyScriptCapabilities::Initialize) {
|
||||
return Ok(());
|
||||
}
|
||||
@@ -134,7 +134,7 @@ impl Script for WebAssemblyScript {
|
||||
if let Some(func) = env.script_function_cache().on_initialize(env) {
|
||||
let pars = pars
|
||||
.into_iter()
|
||||
.map(|p| ExternRef::<EffectParameter>::new(env, (&p).into()).index() as u32)
|
||||
.map(|p| ExternRef::<Parameter>::new(env, (&p).into()).index() as u32)
|
||||
.collect::<Vec<_>>();
|
||||
let wasm_ptr = env.copy_value_vec_to_wasm(&pars)?;
|
||||
let r: u64 = unsafe { std::mem::transmute((wasm_ptr, pars.len() as u32)) };
|
||||
|
||||
Reference in New Issue
Block a user