Basic implementation of evolutions
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2023-07-29 12:57:52 +02:00
parent 3f91f80982
commit d8b8559c2e
25 changed files with 437 additions and 115 deletions

View File

@@ -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,

View File

@@ -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)) };

View File

@@ -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 {

View File

@@ -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)) };

View File

@@ -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)) };