Initial work on rune as scripting library
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user