@woosh/meep-engine
Version:
Pure JavaScript game engine. Fully featured and production ready.
48 lines (37 loc) • 1.38 kB
JavaScript
import DataType from "../../../core/parser/simple/DataType.js";
import { computeDataTypeFromValue } from "../../../core/parser/simple/computeDataTypeFromValue.js";
/**
* Given a blackboard, returns a Proxy instance, exposing blackboard attributes as plain JSON
* Useful for connecting blackboard to systems that are not explicitly designed to work with a blackboard
* @param {AbstractBlackboard} blackboard
* @returns {Proxy}
*/
export function make_blackboard_proxy(blackboard) {
return new Proxy(blackboard, {
/**
*
* @param target
* @param {string} p
* @param receiver
* @returns {*}
*/
get(target, p, receiver) {
if (!target.contains(p, DataType.Any)) {
// property not found
return undefined;
}
const value_container = target.acquire(p, DataType.Any);
return value_container.getValue();
},
set(target, p, value, receiver) {
const dataType = computeDataTypeFromValue(value);
const value_container = target.acquire(p, dataType, value);
value_container.set(value);
// succeeded
return true;
},
ownKeys(target) {
return target.getKeys();
}
})
}