Initial work on rune as scripting library
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
2024-04-07 18:55:41 +02:00
parent 6379abf446
commit 67b0abe59f
24 changed files with 1186 additions and 739 deletions

View File

@@ -5,7 +5,7 @@ use std::fs::File;
use std::io::{BufReader, Read};
use std::sync::Arc;
use hashbrown::HashSet;
use hashbrown::{HashMap, HashSet};
use num_traits::PrimInt;
use project_root::get_project_root;
use serde_json::Value;
@@ -223,10 +223,11 @@ pub fn load_abilities(path: &String) -> Arc<dyn AbilityLibrary> {
if let Some(e) = value.get("effect") {
effect = e.as_str().unwrap().into();
}
let mut parameters = Vec::new();
if let Some(p) = value.get("parameters") {
for par in p.as_array().unwrap() {
parameters.push(parse_parameter(par));
let mut parameters = HashMap::new();
if let Some(pars) = value.get("parameters") {
let pars = pars.as_object().unwrap();
for par in pars {
parameters.insert(par.0.as_str().into(), parse_parameter(par.1));
}
}
@@ -258,11 +259,11 @@ pub fn load_moves(path: &String, types: &Arc<dyn TypeLibrary>) -> Arc<dyn MoveLi
if let Some(chance_value) = v.get("chance") {
chance = chance_value.as_f64().unwrap() as f32;
}
let mut parameters = Vec::new();
let mut parameters = HashMap::new();
if let Some(pars) = v.get("parameters") {
let pars = pars.as_array().unwrap();
let pars = pars.as_object().unwrap();
for par in pars {
parameters.push(parse_parameter(par));
parameters.insert(par.0.as_str().into(), parse_parameter(par.1));
}
}
@@ -451,10 +452,8 @@ fn parse_evolution(value: &Value) -> EvolutionData {
EvolutionData::new(method, species)
}
#[cfg(not(feature = "wasm"))]
fn load_script_resolver(path: &String) -> Arc<dyn ScriptResolver> {
Arc::new(EmptyScriptResolver::default())
}
#[cfg(not(any(feature = "wasm", feature = "rune")))]
fn load_script_resolver(path: &String) -> Arc<dyn ScriptResolver> { Arc::new(EmptyScriptResolver::default()) }
#[cfg(feature = "wasm")]
fn load_script_resolver(path: &String) -> Arc<dyn ScriptResolver> {
@@ -468,6 +467,28 @@ fn load_script_resolver(path: &String) -> Arc<dyn ScriptResolver> {
resolver
}
#[cfg(feature = "rune")]
fn load_script_resolver(path: &String) -> Arc<dyn ScriptResolver> {
let mut builder =
pkmn_lib::script_implementations::rune::script_resolver::RuneScriptResolverBuilder::new().unwrap();
// Recursively load all scripts in the scripts folder
for entry in walkdir::WalkDir::new(path.to_string() + "scripts/") {
let entry = entry.unwrap();
let path = entry.path();
if path.is_file() {
let file = File::open(&path).unwrap();
let mut reader = BufReader::new(file);
let mut buffer = Vec::new();
reader.read_to_end(&mut buffer).unwrap();
builder
.insert_script(path, &path.to_string_lossy(), &String::from_utf8(buffer).unwrap())
.unwrap();
}
}
let resolver = builder.build().unwrap();
resolver
}
fn parse_form(
name: StringKey,
value: &Value,