[oden] It's a start

This commit is contained in:
John Doty 2023-06-20 06:33:29 -07:00
parent 83a0950153
commit 3b02faf9b4
2 changed files with 48 additions and 7 deletions

View file

@ -1,21 +1,61 @@
use oden_js as js;
use oden_js::{Class, ClassID, Context, ContextRef, Runtime, Value, ValueRef, ValueResult};
pub struct GraphicsAPI {}
impl GraphicsAPI {
fn print_fn(ctx: &ContextRef, _this: &ValueRef, args: &[&ValueRef]) -> ValueResult {
for arg in args {
print!("{}", arg.to_string(ctx)?);
}
println!();
Ok(Value::undefined(ctx))
}
}
impl Class for GraphicsAPI {
fn class_id() -> &'static ClassID {
static ID: ClassID = ClassID::new("GraphicsAPI");
&ID
}
fn prototype(context: &ContextRef) -> ValueResult {
let mut prototype = context.new_object()?;
let print = context.new_dynamic_fn(GraphicsAPI::print_fn)?;
prototype.set_property(context, "print", &print)?;
Ok(prototype)
}
}
pub struct ScriptContext {
context: js::Context,
init: js::Value,
update: js::Value,
draw: js::Value,
context: Context,
init: Value,
update: Value,
draw: Value,
}
impl ScriptContext {
pub fn new() -> Self {
let runtime = js::Runtime::new();
let runtime = Runtime::new();
let mut context = js::Context::new(runtime);
let mut context = Context::new(runtime);
context.add_intrinsic_bigfloat();
context.add_intrinsic_bigdecimal();
context.add_intrinsic_operators();
// TODO: This should be a module instead. Yuck.
let mut global = context
.global_object()
.expect("Unable to get global object");
let graphics = GraphicsAPI {};
let graphics = graphics
.into_value(&context)
.expect("Unable to wrap graphics API");
global
.set_property(&context, "graphics", &graphics)
.expect("Unable to establish graphics");
let js = include_str!("main.js");
let module = context
.load_module(js, "main.js")