Rendering a moving square entirely from lua.
This commit is contained in:
@@ -1 +1,28 @@
|
|||||||
print('Initial scene')
|
module('spritebatch')
|
||||||
|
module('time')
|
||||||
|
|
||||||
|
x = 0.0
|
||||||
|
y = 0.0
|
||||||
|
|
||||||
|
function sceneDispose()
|
||||||
|
-- print('Disposing initial scene')
|
||||||
|
end
|
||||||
|
|
||||||
|
function sceneUpdate()
|
||||||
|
-- print('Updating initial scene')
|
||||||
|
x = x + TIME.delta * 10.0
|
||||||
|
y = y + TIME.delta * 10.0
|
||||||
|
end
|
||||||
|
|
||||||
|
function sceneRender()
|
||||||
|
-- print('Rendering initial scene')
|
||||||
|
x1 = x + 32
|
||||||
|
y1 = y + 32
|
||||||
|
spriteBatchPush(
|
||||||
|
nil,
|
||||||
|
x, y,
|
||||||
|
x1, y1,
|
||||||
|
nil
|
||||||
|
)
|
||||||
|
spriteBatchFlush()
|
||||||
|
end
|
||||||
@@ -7,11 +7,18 @@
|
|||||||
#include "assert/assert.h"
|
#include "assert/assert.h"
|
||||||
#include "util/memory.h"
|
#include "util/memory.h"
|
||||||
|
|
||||||
|
#include "display/camera.h"
|
||||||
|
#include "display/screen.h"
|
||||||
|
|
||||||
scene_t SCENE;
|
scene_t SCENE;
|
||||||
|
|
||||||
|
camera_t cam;
|
||||||
|
|
||||||
errorret_t sceneInit(void) {
|
errorret_t sceneInit(void) {
|
||||||
memoryZero(&SCENE, sizeof(scene_t));
|
memoryZero(&SCENE, sizeof(scene_t));
|
||||||
|
|
||||||
|
cameraInitOrthographic(&cam);
|
||||||
|
|
||||||
errorChain(scriptContextInit(&SCENE.scriptContext));
|
errorChain(scriptContextInit(&SCENE.scriptContext));
|
||||||
errorOk();
|
errorOk();
|
||||||
}
|
}
|
||||||
@@ -32,9 +39,16 @@ void sceneRender(void) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cam.orthographic.right = SCREEN.width;
|
||||||
|
cam.orthographic.bottom = SCREEN.height;
|
||||||
|
cam.orthographic.left = 0.0f;
|
||||||
|
cam.orthographic.top = 0.0f;
|
||||||
|
cameraPushMatrix(&cam);
|
||||||
|
|
||||||
errorret_t err = scriptContextCallFunc(
|
errorret_t err = scriptContextCallFunc(
|
||||||
&SCENE.scriptContext, "sceneRender", NULL, 0, NULL
|
&SCENE.scriptContext, "sceneRender", NULL, 0, NULL
|
||||||
);
|
);
|
||||||
|
cameraPopMatrix();
|
||||||
errorCatch(errorPrint(err));
|
errorCatch(errorPrint(err));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
# https://opensource.org/licenses/MIT
|
# https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
# Subdirectories
|
# Subdirectories
|
||||||
|
add_subdirectory(display)
|
||||||
add_subdirectory(event)
|
add_subdirectory(event)
|
||||||
add_subdirectory(input)
|
add_subdirectory(input)
|
||||||
add_subdirectory(item)
|
add_subdirectory(item)
|
||||||
|
|||||||
10
src/script/module/display/CMakeLists.txt
Normal file
10
src/script/module/display/CMakeLists.txt
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# Copyright (c) 2026 Dominic Masters
|
||||||
|
#
|
||||||
|
# This software is released under the MIT License.
|
||||||
|
# https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
# Sources
|
||||||
|
target_sources(${DUSK_LIBRARY_TARGET_NAME}
|
||||||
|
PUBLIC
|
||||||
|
modulespritebatch.c
|
||||||
|
)
|
||||||
99
src/script/module/display/modulespritebatch.c
Normal file
99
src/script/module/display/modulespritebatch.c
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2026 Dominic Masters
|
||||||
|
*
|
||||||
|
* This software is released under the MIT License.
|
||||||
|
* https://opensource.org/licenses/MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "modulespritebatch.h"
|
||||||
|
#include "display/spritebatch.h"
|
||||||
|
#include "assert/assert.h"
|
||||||
|
|
||||||
|
void moduleSpriteBatch(scriptcontext_t *context) {
|
||||||
|
scriptContextRegFunc(context, "spriteBatchFlush", moduleSpriteBatchFlush);
|
||||||
|
scriptContextRegFunc(context, "spriteBatchClear", moduleSpriteBatchClear);
|
||||||
|
scriptContextRegFunc(context, "spriteBatchPush", moduleSpriteBatchPush);
|
||||||
|
}
|
||||||
|
|
||||||
|
int moduleSpriteBatchFlush(lua_State *L) {
|
||||||
|
assertNotNull(L, "Lua state is null");
|
||||||
|
|
||||||
|
spriteBatchFlush();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int moduleSpriteBatchClear(lua_State *L) {
|
||||||
|
assertNotNull(L, "Lua state is null");
|
||||||
|
|
||||||
|
spriteBatchClear();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int moduleSpriteBatchPush(lua_State *L) {
|
||||||
|
assertNotNull(L, "Lua state is null");
|
||||||
|
|
||||||
|
// Texture ID must be Nil for now
|
||||||
|
if(!lua_isnil(L, 1)) {
|
||||||
|
return luaL_error(L, "Texture parameter must be nil");
|
||||||
|
}
|
||||||
|
|
||||||
|
// MinX, MinY, MaxX, MaxY
|
||||||
|
if(
|
||||||
|
!lua_isnumber(L, 2) || !lua_isnumber(L, 3) || !lua_isnumber(L, 4) ||
|
||||||
|
!lua_isnumber(L, 5)
|
||||||
|
) {
|
||||||
|
return luaL_error(L, "Sprite coordinates must be numbers");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Color (struct), must be Nil for now
|
||||||
|
if(!lua_isnil(L, 6)) {
|
||||||
|
return luaL_error(L, "Color parameter must be nil");
|
||||||
|
}
|
||||||
|
// if(!lua_istable(L, 6)) {
|
||||||
|
// return luaL_error(L, "Color parameter must be a color struct");
|
||||||
|
// }
|
||||||
|
|
||||||
|
// Optional UV min and maxes, defaults to 0,0 -> 1,1
|
||||||
|
float_t u0 = 0.0f;
|
||||||
|
float_t v0 = 0.0f;
|
||||||
|
float_t u1 = 1.0f;
|
||||||
|
float_t v1 = 1.0f;
|
||||||
|
|
||||||
|
if(lua_gettop(L) >= 8) {
|
||||||
|
if(!lua_isnumber(L, 7) || !lua_isnumber(L, 8)) {
|
||||||
|
return luaL_error(L, "Sprite UV min coordinates must be numbers");
|
||||||
|
}
|
||||||
|
|
||||||
|
u0 = (float_t)lua_tonumber(L, 7);
|
||||||
|
v0 = (float_t)lua_tonumber(L, 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(lua_gettop(L) >= 10) {
|
||||||
|
if(!lua_isnumber(L, 9) || !lua_isnumber(L, 10)) {
|
||||||
|
return luaL_error(L, "Sprite UV max coordinates must be numbers");
|
||||||
|
}
|
||||||
|
|
||||||
|
u1 = (float_t)lua_tonumber(L, 9);
|
||||||
|
v1 = (float_t)lua_tonumber(L, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
float_t minX = (float_t)lua_tonumber(L, 2);
|
||||||
|
float_t minY = (float_t)lua_tonumber(L, 3);
|
||||||
|
float_t maxX = (float_t)lua_tonumber(L, 4);
|
||||||
|
float_t maxY = (float_t)lua_tonumber(L, 5);
|
||||||
|
|
||||||
|
spriteBatchPush(
|
||||||
|
NULL,
|
||||||
|
minX,
|
||||||
|
minY,
|
||||||
|
maxX,
|
||||||
|
maxY,
|
||||||
|
COLOR_MAGENTA,
|
||||||
|
u0,
|
||||||
|
v0,
|
||||||
|
u1,
|
||||||
|
v1
|
||||||
|
);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
40
src/script/module/display/modulespritebatch.h
Normal file
40
src/script/module/display/modulespritebatch.h
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2026 Dominic Masters
|
||||||
|
*
|
||||||
|
* This software is released under the MIT License.
|
||||||
|
* https://opensource.org/licenses/MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "script/scriptcontext.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register sprite batch functions to the given script context.
|
||||||
|
*
|
||||||
|
* @param context The script context to register sprite batch functions to.
|
||||||
|
*/
|
||||||
|
void moduleSpriteBatch(scriptcontext_t *context);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Script binding for flushing the sprite batch.
|
||||||
|
*
|
||||||
|
* @param L The Lua state.
|
||||||
|
* @return Number of return values on the Lua stack.
|
||||||
|
*/
|
||||||
|
int moduleSpriteBatchFlush(lua_State *L);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Script binding for clearing the sprite batch.
|
||||||
|
*
|
||||||
|
* @param L The Lua state.
|
||||||
|
* @return Number of return values on the Lua stack.
|
||||||
|
*/
|
||||||
|
int moduleSpriteBatchClear(lua_State *L);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Script binding for pushing a sprite to the sprite batch.
|
||||||
|
*
|
||||||
|
* @param L The Lua state.
|
||||||
|
* @return Number of return values on the Lua stack.
|
||||||
|
*/
|
||||||
|
int moduleSpriteBatchPush(lua_State *L);
|
||||||
@@ -14,6 +14,7 @@
|
|||||||
#include "script/module/locale/modulelocale.h"
|
#include "script/module/locale/modulelocale.h"
|
||||||
#include "script/module/time/moduletime.h"
|
#include "script/module/time/moduletime.h"
|
||||||
#include "script/module/event/moduleevent.h"
|
#include "script/module/event/moduleevent.h"
|
||||||
|
#include "script/module/display/modulespritebatch.h"
|
||||||
#include "util/string.h"
|
#include "util/string.h"
|
||||||
|
|
||||||
const scriptmodule_t SCRIPT_MODULE_LIST[] = {
|
const scriptmodule_t SCRIPT_MODULE_LIST[] = {
|
||||||
@@ -25,6 +26,7 @@ const scriptmodule_t SCRIPT_MODULE_LIST[] = {
|
|||||||
{ .name = "locale", .callback = moduleLocale },
|
{ .name = "locale", .callback = moduleLocale },
|
||||||
{ .name = "time", .callback = moduleTime },
|
{ .name = "time", .callback = moduleTime },
|
||||||
{ .name = "event", .callback = moduleEvent },
|
{ .name = "event", .callback = moduleEvent },
|
||||||
|
{ .name = "spritebatch", .callback = moduleSpriteBatch },
|
||||||
};
|
};
|
||||||
|
|
||||||
#define SCRIPT_MODULE_COUNT ( \
|
#define SCRIPT_MODULE_COUNT ( \
|
||||||
|
|||||||
Reference in New Issue
Block a user