Example scene working
This commit is contained in:
@@ -49,15 +49,14 @@ errorret_t engineInit(const int32_t argc, const char_t **argv) {
|
||||
errorChain(uiInit());
|
||||
errorChain(uiTextboxInit());
|
||||
errorChain(cutsceneInit());
|
||||
errorChain(sceneInit());
|
||||
entityManagerInit();
|
||||
backpackInit();
|
||||
physicsManagerInit();
|
||||
errorChain(networkInit());
|
||||
errorChain(scriptInit());
|
||||
errorChain(sceneInit());
|
||||
|
||||
consolePrint("Engine initialized");
|
||||
|
||||
errorChain(scriptExecFile("init.js"));
|
||||
|
||||
errorOk();
|
||||
@@ -75,7 +74,7 @@ errorret_t engineUpdate(void) {
|
||||
physicsManagerUpdate();
|
||||
errorChain(displayUpdate());
|
||||
errorChain(cutsceneUpdate());
|
||||
sceneUpdate();
|
||||
errorChain(sceneUpdate());
|
||||
errorChain(assetUpdate());
|
||||
errorChain(scriptUpdate());
|
||||
|
||||
@@ -90,7 +89,8 @@ void engineExit(void) {
|
||||
errorret_t engineDispose(void) {
|
||||
uiTextboxDispose();
|
||||
cutsceneDispose();
|
||||
sceneDispose();
|
||||
errorChain(sceneDispose());
|
||||
errorChain(scriptDispose());
|
||||
errorChain(networkDispose());
|
||||
entityManagerDispose();
|
||||
localeManagerDispose();
|
||||
@@ -98,7 +98,6 @@ errorret_t engineDispose(void) {
|
||||
consoleDispose();
|
||||
errorChain(displayDispose());
|
||||
// errorChain(saveDispose());
|
||||
errorChain(scriptDispose());
|
||||
errorChain(assetDispose());
|
||||
|
||||
errorOk();
|
||||
|
||||
@@ -3,6 +3,11 @@
|
||||
# This software is released under the MIT License.
|
||||
# https://opensource.org/licenses/MIT
|
||||
|
||||
include(duskjs2c)
|
||||
dusk_embed_js(${DUSK_LIBRARY_TARGET_NAME}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/scene.js
|
||||
)
|
||||
|
||||
target_sources(${DUSK_LIBRARY_TARGET_NAME}
|
||||
PUBLIC
|
||||
scene.c
|
||||
|
||||
+17
-1
@@ -18,15 +18,30 @@
|
||||
#include "asset/loader/assetloader.h"
|
||||
#include "script/module/modulebase.h"
|
||||
#include "console/console.h"
|
||||
#include "script/script.h"
|
||||
#include "scene_js.h"
|
||||
|
||||
scene_t SCENE;
|
||||
|
||||
errorret_t sceneInit(void) {
|
||||
memoryZero(&SCENE, sizeof(scene_t));
|
||||
errorChain(scriptExecString(SCENE_JS));
|
||||
errorOk();
|
||||
}
|
||||
|
||||
void sceneUpdate(void) {
|
||||
errorret_t sceneUpdate(void) {
|
||||
#ifdef DUSK_TIME_DYNAMIC
|
||||
if(TIME.dynamicUpdate) {
|
||||
errorChain(scriptExecString("Scene.dynamicUpdate();"));
|
||||
} else {
|
||||
errorChain(scriptExecString("Scene.update();"));
|
||||
}
|
||||
#else
|
||||
errorChain(scriptExecString("Scene.update();"));
|
||||
errorChain(scriptExecString("Scene.dynamicUpdate();"));
|
||||
#endif
|
||||
|
||||
errorOk();
|
||||
}
|
||||
|
||||
errorret_t sceneRender(void) {
|
||||
@@ -65,5 +80,6 @@ errorret_t sceneRender(void) {
|
||||
}
|
||||
|
||||
errorret_t sceneDispose(void) {
|
||||
errorChain(scriptExecString("Scene.dispose();"));
|
||||
errorOk();
|
||||
}
|
||||
|
||||
@@ -16,21 +16,29 @@ extern scene_t SCENE;
|
||||
|
||||
/**
|
||||
* Initialises the scene manager.
|
||||
*
|
||||
* @return An error if the init failed, or errorOk() if it succeeded.
|
||||
*/
|
||||
errorret_t sceneInit(void);
|
||||
|
||||
/**
|
||||
* Ticks the scene manager. Processes any pending scene transition, then
|
||||
* calls scriptSceneUpdate on the active scene.
|
||||
*
|
||||
* @return An error if the update failed, or errorOk() if it succeeded.
|
||||
*/
|
||||
void sceneUpdate(void);
|
||||
errorret_t sceneUpdate(void);
|
||||
|
||||
/**
|
||||
* Renders the current scene (entities, render pipeline, UI).
|
||||
*
|
||||
* @return An error if the render failed, or errorOk() if it succeeded.
|
||||
*/
|
||||
errorret_t sceneRender(void);
|
||||
|
||||
/**
|
||||
* Disposes the active scene immediately.
|
||||
*
|
||||
* @return An error if the dispose failed, or errorOk() if it succeeded.
|
||||
*/
|
||||
errorret_t sceneDispose(void);
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
// Copyright (c) 2026 Dominic Masters
|
||||
//
|
||||
// This software is released under the MIT License.
|
||||
// https://opensource.org/licenses/MIT
|
||||
|
||||
var Scene = {
|
||||
};
|
||||
|
||||
Scene.update = () => {
|
||||
}
|
||||
|
||||
Scene.dynamicUpdate = () => {
|
||||
}
|
||||
|
||||
Scene.set = (newScene) => {
|
||||
// Current scene active?
|
||||
if(Scene.current && Scene.current.dispose) {
|
||||
Scene.current.dispose();
|
||||
}
|
||||
|
||||
// Set new scene
|
||||
Scene.current = newScene;
|
||||
if(!newScene) return;
|
||||
|
||||
// Init
|
||||
if(newScene.init) {
|
||||
newScene.init();
|
||||
}
|
||||
};
|
||||
|
||||
Scene.dispose = () => {
|
||||
if(Scene.current && Scene.current.dispose) {
|
||||
Scene.current.dispose();
|
||||
}
|
||||
Scene.current = null;
|
||||
}
|
||||
+36
-16
@@ -16,6 +16,36 @@
|
||||
|
||||
script_t SCRIPT;
|
||||
|
||||
static void scriptExceptionInfo(
|
||||
jerry_value_t exception,
|
||||
char_t *msgBuf, size_t msgSize,
|
||||
char_t *stackBuf, size_t stackSize
|
||||
) {
|
||||
jerry_value_t errVal = jerry_exception_value(exception, false);
|
||||
|
||||
jerry_value_t errStr = jerry_value_to_string(errVal);
|
||||
jerry_size_t len = jerry_string_to_buffer(
|
||||
errStr, JERRY_ENCODING_UTF8, (jerry_char_t *)msgBuf, msgSize - 1
|
||||
);
|
||||
msgBuf[len] = '\0';
|
||||
jerry_value_free(errStr);
|
||||
|
||||
stackBuf[0] = '\0';
|
||||
jerry_value_t stackKey = jerry_string_sz("stack");
|
||||
jerry_value_t stackVal = jerry_object_get(errVal, stackKey);
|
||||
jerry_value_free(stackKey);
|
||||
if(!jerry_value_is_exception(stackVal) && !jerry_value_is_undefined(stackVal)) {
|
||||
jerry_value_t stackStr = jerry_value_to_string(stackVal);
|
||||
jerry_size_t stackLen = jerry_string_to_buffer(
|
||||
stackStr, JERRY_ENCODING_UTF8, (jerry_char_t *)stackBuf, stackSize - 1
|
||||
);
|
||||
stackBuf[stackLen] = '\0';
|
||||
jerry_value_free(stackStr);
|
||||
}
|
||||
jerry_value_free(stackVal);
|
||||
jerry_value_free(errVal);
|
||||
}
|
||||
|
||||
errorret_t scriptInit(void) {
|
||||
memoryZero(&SCRIPT, sizeof(script_t));
|
||||
|
||||
@@ -33,15 +63,10 @@ errorret_t scriptUpdate() {
|
||||
|
||||
if(jerry_value_is_exception(ret)) {
|
||||
char_t buf[256];
|
||||
jerry_value_t errVal = jerry_exception_value(ret, false);
|
||||
jerry_value_t errStr = jerry_value_to_string(errVal);
|
||||
jerry_size_t len = jerry_string_to_buffer(
|
||||
errStr, JERRY_ENCODING_UTF8, (jerry_char_t *)buf, sizeof(buf) - 1
|
||||
);
|
||||
buf[len] = '\0';
|
||||
jerry_value_free(errStr);
|
||||
jerry_value_free(errVal);
|
||||
char_t stack[512];
|
||||
scriptExceptionInfo(ret, buf, sizeof(buf), stack, sizeof(stack));
|
||||
jerry_value_free(ret);
|
||||
if(stack[0]) errorThrow("Script error: %s\n%s", buf, stack);
|
||||
errorThrow("Script error: %s", buf);
|
||||
}
|
||||
|
||||
@@ -61,15 +86,10 @@ errorret_t scriptExecString(const char_t *source) {
|
||||
|
||||
if(jerry_value_is_exception(result)) {
|
||||
char_t buf[256];
|
||||
jerry_value_t errVal = jerry_exception_value(result, false);
|
||||
jerry_value_t errStr = jerry_value_to_string(errVal);
|
||||
jerry_size_t len = jerry_string_to_buffer(
|
||||
errStr, JERRY_ENCODING_UTF8, (jerry_char_t *)buf, sizeof(buf) - 1
|
||||
);
|
||||
buf[len] = '\0';
|
||||
jerry_value_free(errStr);
|
||||
jerry_value_free(errVal);
|
||||
char_t stack[512];
|
||||
scriptExceptionInfo(result, buf, sizeof(buf), stack, sizeof(stack));
|
||||
jerry_value_free(result);
|
||||
if(stack[0]) errorThrow("Script error: %s\n%s", buf, stack);
|
||||
errorThrow("Script error: %s", buf);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user