Prepping UI overhaul
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
require('./input.js');
|
require('./input.js');
|
||||||
|
|
||||||
var OverworldScene = require('./overworldscene.js');
|
var OverworldScene = require('./OverworldScene.js');
|
||||||
|
|
||||||
Scene.set(new OverworldScene());
|
Scene.set(new OverworldScene());
|
||||||
@@ -15,3 +15,4 @@ add_subdirectory(display)
|
|||||||
add_subdirectory(time)
|
add_subdirectory(time)
|
||||||
add_subdirectory(console)
|
add_subdirectory(console)
|
||||||
add_subdirectory(input)
|
add_subdirectory(input)
|
||||||
|
add_subdirectory(ui)
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
#include "script/module/scene/modulescene.h"
|
#include "script/module/scene/modulescene.h"
|
||||||
#include "script/module/console/moduleconsole.h"
|
#include "script/module/console/moduleconsole.h"
|
||||||
#include "script/module/input/moduleinput.h"
|
#include "script/module/input/moduleinput.h"
|
||||||
|
#include "script/module/ui/moduleui.h"
|
||||||
|
|
||||||
void moduleListInit(void) {
|
void moduleListInit(void) {
|
||||||
modulePlatform();
|
modulePlatform();
|
||||||
@@ -24,6 +25,7 @@ void moduleListInit(void) {
|
|||||||
moduleTimeInit();
|
moduleTimeInit();
|
||||||
moduleConsoleInit();
|
moduleConsoleInit();
|
||||||
moduleInputInit();
|
moduleInputInit();
|
||||||
|
moduleUiInit();
|
||||||
moduleComponentInit();
|
moduleComponentInit();
|
||||||
moduleComponentListInit();
|
moduleComponentListInit();
|
||||||
moduleEntityInit();
|
moduleEntityInit();
|
||||||
@@ -35,6 +37,7 @@ void moduleListDispose(void) {
|
|||||||
moduleEntityDispose();
|
moduleEntityDispose();
|
||||||
moduleComponentListDispose();
|
moduleComponentListDispose();
|
||||||
moduleComponentDispose();
|
moduleComponentDispose();
|
||||||
|
moduleUiDispose();
|
||||||
moduleInputDispose();
|
moduleInputDispose();
|
||||||
moduleConsoleDispose();
|
moduleConsoleDispose();
|
||||||
moduleTimeDispose();
|
moduleTimeDispose();
|
||||||
|
|||||||
@@ -9,8 +9,8 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Registers every script module (Component + its typed per-type
|
* Registers every script module (Component + its typed per-type
|
||||||
* wrappers, Entity, Scene, require(), Mesh, Time, Console, Input, the
|
* wrappers, Entity, Scene, require(), Mesh, Time, Console, Input, UI,
|
||||||
* platform globals). Called once by scriptManagerInit().
|
* the platform globals). Called once by scriptManagerInit().
|
||||||
*/
|
*/
|
||||||
void moduleListInit(void);
|
void moduleListInit(void);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
# Copyright (c) 2026 Dominic Masters
|
||||||
|
#
|
||||||
|
# This software is released under the MIT License.
|
||||||
|
# https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
target_sources(${DUSK_LIBRARY_TARGET_NAME}
|
||||||
|
PUBLIC
|
||||||
|
moduleui.c
|
||||||
|
)
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2026 Dominic Masters
|
||||||
|
*
|
||||||
|
* This software is released under the MIT License.
|
||||||
|
* https://opensource.org/licenses/MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "moduleui.h"
|
||||||
|
#include "script/module/modulebase.h"
|
||||||
|
#include "console/console.h"
|
||||||
|
|
||||||
|
// Stub: stringify "<name> <args...>" (like Console.print) and forward to
|
||||||
|
// consolePrint(), so UI.add/UI.remove are visibly wired up before there's
|
||||||
|
// any real UI system behind them.
|
||||||
|
static jerry_value_t moduleUiLogCall(
|
||||||
|
const char_t *name,
|
||||||
|
const jerry_value_t args[],
|
||||||
|
const jerry_length_t argc
|
||||||
|
) {
|
||||||
|
char_t buffer[CONSOLE_LINE_MAX];
|
||||||
|
size_t pos = strlen(name);
|
||||||
|
if(pos >= CONSOLE_LINE_MAX) pos = CONSOLE_LINE_MAX - 1;
|
||||||
|
memoryCopy(buffer, name, pos);
|
||||||
|
|
||||||
|
for(jerry_length_t i = 0; i < argc; i++) {
|
||||||
|
jerry_value_t strVal = jerry_value_to_string(args[i]);
|
||||||
|
if(jerry_value_is_exception(strVal)) return strVal;
|
||||||
|
|
||||||
|
if(pos + 1 < CONSOLE_LINE_MAX) buffer[pos++] = ' ';
|
||||||
|
|
||||||
|
jerry_size_t written = jerry_string_to_buffer(
|
||||||
|
strVal, JERRY_ENCODING_UTF8,
|
||||||
|
(jerry_char_t *)(buffer + pos), (jerry_size_t)(CONSOLE_LINE_MAX - pos - 1)
|
||||||
|
);
|
||||||
|
jerry_value_free(strVal);
|
||||||
|
pos += written;
|
||||||
|
}
|
||||||
|
buffer[pos] = '\0';
|
||||||
|
|
||||||
|
// Fixed "%s" format -- buffer is arbitrary JS-provided text and must
|
||||||
|
// never be used as the format string itself.
|
||||||
|
consolePrint("%s", buffer);
|
||||||
|
|
||||||
|
return jerry_undefined();
|
||||||
|
}
|
||||||
|
|
||||||
|
moduleBaseFunction(moduleUiAddFn) {
|
||||||
|
return moduleUiLogCall("UI.add", args, argc);
|
||||||
|
}
|
||||||
|
|
||||||
|
moduleBaseFunction(moduleUiRemoveFn) {
|
||||||
|
return moduleUiLogCall("UI.remove", args, argc);
|
||||||
|
}
|
||||||
|
|
||||||
|
void moduleUiInit(void) {
|
||||||
|
jerry_value_t uiObj = jerry_object();
|
||||||
|
moduleBaseDefineMethod(uiObj, "add", moduleUiAddFn);
|
||||||
|
moduleBaseDefineMethod(uiObj, "remove", moduleUiRemoveFn);
|
||||||
|
moduleBaseSetValue("UI", uiObj);
|
||||||
|
jerry_value_free(uiObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
void moduleUiDispose(void) {
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2026 Dominic Masters
|
||||||
|
*
|
||||||
|
* This software is released under the MIT License.
|
||||||
|
* https://opensource.org/licenses/MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers the global `UI` object, exposing `UI.add(...)` and
|
||||||
|
* `UI.remove(...)`. Both are stubs for now -- they stringify and
|
||||||
|
* space-join their arguments (like Console.print) and forward the
|
||||||
|
* result to consolePrint(), prefixed with the called method's name.
|
||||||
|
*/
|
||||||
|
void moduleUiInit(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disposes the UI module's script resources.
|
||||||
|
*/
|
||||||
|
void moduleUiDispose(void);
|
||||||
@@ -19,3 +19,5 @@ dusktest(test_scriptinput.c)
|
|||||||
target_compile_definitions(test_scriptinput PRIVATE
|
target_compile_definitions(test_scriptinput PRIVATE
|
||||||
DUSK_ASSETS_DIR="${DUSK_ASSETS_DIR}"
|
DUSK_ASSETS_DIR="${DUSK_ASSETS_DIR}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
dusktest(test_moduleui.c)
|
||||||
|
|||||||
@@ -0,0 +1,83 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2026 Dominic Masters
|
||||||
|
*
|
||||||
|
* This software is released under the MIT License.
|
||||||
|
* https://opensource.org/licenses/MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "dusktest.h"
|
||||||
|
#include "console/console.h"
|
||||||
|
#include "script/scriptmanager.h"
|
||||||
|
#include "util/memory.h"
|
||||||
|
|
||||||
|
static int ui_setup(void **state) {
|
||||||
|
consoleInit();
|
||||||
|
|
||||||
|
errorret_t ret = scriptManagerInit();
|
||||||
|
if(errorIsNotOk(ret)) { errorCatch(ret); return -1; }
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ui_teardown(void **state) {
|
||||||
|
errorret_t ret = scriptManagerDispose();
|
||||||
|
if(errorIsNotOk(ret)) errorCatch(ret);
|
||||||
|
|
||||||
|
consoleDispose();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_ui_add_logs_prefixed_args(void **state) {
|
||||||
|
jerry_value_t result;
|
||||||
|
errorret_t ret = scriptManagerExec(
|
||||||
|
"UI.add('button', 1, true);", &result
|
||||||
|
);
|
||||||
|
assert_true(errorIsOk(ret));
|
||||||
|
jerry_value_free(result);
|
||||||
|
|
||||||
|
assert_string_equal(
|
||||||
|
CONSOLE.line[CONSOLE_HISTORY_MAX - 1], "UI.add button 1 true"
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_int_equal(memoryGetAllocatedCount(), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_ui_remove_logs_prefixed_args(void **state) {
|
||||||
|
jerry_value_t result;
|
||||||
|
errorret_t ret = scriptManagerExec("UI.remove('button');", &result);
|
||||||
|
assert_true(errorIsOk(ret));
|
||||||
|
jerry_value_free(result);
|
||||||
|
|
||||||
|
assert_string_equal(
|
||||||
|
CONSOLE.line[CONSOLE_HISTORY_MAX - 1], "UI.remove button"
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_int_equal(memoryGetAllocatedCount(), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_ui_add_no_args_logs_just_the_name(void **state) {
|
||||||
|
jerry_value_t result;
|
||||||
|
errorret_t ret = scriptManagerExec("UI.add();", &result);
|
||||||
|
assert_true(errorIsOk(ret));
|
||||||
|
jerry_value_free(result);
|
||||||
|
|
||||||
|
assert_string_equal(CONSOLE.line[CONSOLE_HISTORY_MAX - 1], "UI.add");
|
||||||
|
|
||||||
|
assert_int_equal(memoryGetAllocatedCount(), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
assertInit();
|
||||||
|
const struct CMUnitTest tests[] = {
|
||||||
|
cmocka_unit_test_setup_teardown(
|
||||||
|
test_ui_add_logs_prefixed_args, ui_setup, ui_teardown
|
||||||
|
),
|
||||||
|
cmocka_unit_test_setup_teardown(
|
||||||
|
test_ui_remove_logs_prefixed_args, ui_setup, ui_teardown
|
||||||
|
),
|
||||||
|
cmocka_unit_test_setup_teardown(
|
||||||
|
test_ui_add_no_args_logs_just_the_name, ui_setup, ui_teardown
|
||||||
|
),
|
||||||
|
};
|
||||||
|
return cmocka_run_group_tests(tests, NULL, NULL);
|
||||||
|
}
|
||||||
Vendored
+1
@@ -15,3 +15,4 @@
|
|||||||
/// <reference path="console/console.d.ts" />
|
/// <reference path="console/console.d.ts" />
|
||||||
/// <reference path="platform/platform.d.ts" />
|
/// <reference path="platform/platform.d.ts" />
|
||||||
/// <reference path="input/input.d.ts" />
|
/// <reference path="input/input.d.ts" />
|
||||||
|
/// <reference path="ui/ui.d.ts" />
|
||||||
|
|||||||
Vendored
+15
@@ -0,0 +1,15 @@
|
|||||||
|
// Copyright (c) 2026 Dominic Masters
|
||||||
|
//
|
||||||
|
// This software is released under the MIT License.
|
||||||
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stub for now: both methods just stringify and space-join their
|
||||||
|
* arguments (like console.log) and forward the result to the engine's
|
||||||
|
* console, prefixed with the called method's name. No real UI element
|
||||||
|
* system exists behind this yet.
|
||||||
|
*/
|
||||||
|
declare const UI: {
|
||||||
|
add(...args: any[]): void;
|
||||||
|
remove(...args: any[]): void;
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user