@devoplx/nodecraft-engine
Version:
NodeCraft Engine, a revolutionary game development framework tailored for Node.js and TypeScript, redefines the landscape by seamlessly managing player data, inventory, AI, and more. This advanced engine empowers developers to craft immersive gaming exper
79 lines (77 loc) • 2.3 kB
JavaScript
const createEngine = () => {
const engineInstance = new adaptiEngine();
return engineInstance;
};
class adaptiEngine {
constructor() {
this.status = "inactive";
this.events = {};
this.userEvents = ["userLoggedIn", "userLoggedOut"];
this.appEvents = ["onInitializing", "appClosed", "onInit"];
this.customEvents = [];
}
init() {
this.emit("onInitializing", {});
this.status = "initializing";
this.emit("onInit");
}
getEvents(filter = "all") {
if (filter === "all") {
return {
userEvents: this.userEvents,
appEvents: this.appEvents,
customEvents: this.customEvents
};
} else if (filter === "user") {
return this.userEvents;
} else if (filter === "app") {
return this.appEvents;
}
}
async on(eventName, callBack) {
if (this.userEvents.includes(eventName) || this.appEvents.includes(eventName)) {
if (!this.events[eventName]) {
this.events[eventName] = [];
}
this.events[eventName].push(callBack);
} else {
console.log(`Custom event detected: ${eventName}. Adding to customEvents.`);
if (!this.events[eventName]) {
this.events[eventName] = [];
}
this.events[eventName].push(callBack);
}
}
async emit(eventName, data, callBack) {
return new Promise(async (resolve, reject) => {
await this.invokeCallbacks(eventName, data, resolve, reject);
if (callBack) {
callBack();
} else {
resolve();
}
});
}
async invokeCallbacks(eventName, data, resolve, reject) {
const eventCallbacks = this.events[eventName];
if (eventCallbacks) {
for (const callBack of eventCallbacks) {
try {
if (eventName === "userLoggedIn" || eventName === "userLoggedOut") {
await callBack(data);
} else if (eventName === "onInit" || eventName === "onInitializing") {
const dataa = await callBack(data, this);
} else {
await callBack(data);
}
} catch (error) {
console.error(`Error in callBack for event ${eventName}:`, error);
reject(error);
}
}
resolve();
}
}
}
var core_default = createEngine;
export { adaptiEngine, core_default as default };