From 8022fbadaa9793810f6454ce1700da9709de18bd Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Sat, 25 Sep 2021 23:22:05 -0700 Subject: [PATCH] Fixed bundle bugs. --- scripts/bundle.js | 21 ++++++++++++-- src/file/asset.c | 21 +++++++------- src/game/sandbox/sandboxscene.c | 4 +-- ts/game/Game.ts | 51 +++++++++++++++++++++++++++------ ts/main.ts | 44 +++++++++++++++++++++++++++- ts/scene/Scene.ts | 13 +++++++++ tsconfig.json | 2 +- 7 files changed, 130 insertions(+), 26 deletions(-) create mode 100644 ts/scene/Scene.ts diff --git a/scripts/bundle.js b/scripts/bundle.js index 439965ee..a3dac80a 100644 --- a/scripts/bundle.js +++ b/scripts/bundle.js @@ -8,10 +8,20 @@ const FILE_MAIN = 'main.js'; let doneFiles = []; let full = ` var exports = {}; + +function __extends(d,b) { + d.prototype = b.prototype; +} `; +const CRUMMY_EXTENDS = /var __extends =([\S\s]*?)\}\)\(\)\;/gm; +const ES5_DEFINED = /Object\.defineProperty\(exports, \"__esModule\", \{ value\: true \}\)\;/gm + const outputFix = (output, dir) => { - let out = output.replace(/exports\.\_\_esModule\ =\ true\;/gm, ''); + let out = output + .replace(CRUMMY_EXTENDS, '') + .replace(/exports\.\_\_esModule\ =\ true\;/gm, '') + ; // Replace requires with exports. const reg = /var\ (.*?)\ \= require\("(.*?)"\)\;/gm; @@ -23,8 +33,13 @@ const outputFix = (output, dir) => { out = out.replace(match.value[0], '').replace(exp, 'exports.'); } - // Remove exports.whatever = void 0; - out = out.replace(/exports\.(.*?) \= void 0\;/gm, ''); + out = out + .replace(CRUMMY_EXTENDS, '') + .replace(ES5_DEFINED, '') + .replace(/exports\.(.*?) \= void 0\;/gm, '') + .replace(/\ \ \ \ /gm, ' ') + ; + return out; } diff --git a/src/file/asset.c b/src/file/asset.c index 15b9b22e..de0116e3 100644 --- a/src/file/asset.c +++ b/src/file/asset.c @@ -139,16 +139,15 @@ void assetXmlLoad(xml_t *xml, char *assetName) { } void assetScripterAppend(scripter_t *scripter, char *fileName) { - assetbuffer_t *asset = assetBufferOpen(fileName); - int32_t read; - char buffer[2048]; - - duk_push_global_object(scripter->context); - - while(read = assetBufferRead(asset, buffer, 2048)) { - duk_push_lstring(scripter->context, buffer, (duk_size_t)read); - } + char *data; - duk_peval(scripter->context); - assetBufferClose(asset); + data = assetStringLoad(fileName); + duk_push_global_object(scripter->context); + duk_push_lstring(scripter->context, data, strlen(data)); + + if(duk_peval(scripter->context) != 0) { + printf("Error running: %s\n", duk_safe_to_string(scripter->context, -1)); + } + + free(data); } \ No newline at end of file diff --git a/src/game/sandbox/sandboxscene.c b/src/game/sandbox/sandboxscene.c index 9c05b34f..2eff1d97 100644 --- a/src/game/sandbox/sandboxscene.c +++ b/src/game/sandbox/sandboxscene.c @@ -28,9 +28,9 @@ bool sandboxSceneInit(sandboxscene_t *game) { } void sandboxSceneUpdate(sandboxscene_t *game) { - scripterInvokeMethodSimple(&game->scripter, "update"); + // scripterInvokeMethodSimple(&game->scripter, "update"); } void sandboxSceneDispose(sandboxscene_t *game) { - scripterInvokeMethodSimple(&game->scripter, "dispose"); + // scripterInvokeMethodSimple(&game->scripter, "dispose"); } \ No newline at end of file diff --git a/ts/game/Game.ts b/ts/game/Game.ts index acce15b9..eb78c71a 100644 --- a/ts/game/Game.ts +++ b/ts/game/Game.ts @@ -1,39 +1,74 @@ +import { Scene } from "../scene/Scene"; + +type Time = { + delta:number; + current:number; + last:number; +} + +export class Game { + public time:Time; + private scene:Scene|null; -export abstract class Game { constructor() { - + this.time = { delta: 0, current: 0, last: 0 }; + this.scene = null; + } + + public setScene(scene:Scene) { this.scene = scene; } + + private timeUpdate() { + this.time.delta = epochGetDelta(); + this.time.current = epochGetCurrent(); + this.time.last = epochGetLast(); } init() { - print("init"); + this.timeUpdate(); } update() { - print("update"); + this.timeUpdate(); + + if(this.scene) this.scene.update(); } dispose() { - print("Disposed"); + if(this.scene) this.scene.dispose(); } } +// Main Game Instance let GAME_MAIN:Game|null = null; +/** + * Set the main game instance. + * @param game Game to become the main game instance. + */ export const gameSetMain = (game:Game) => { - print("setting", game); GAME_MAIN = game; } +/** + * Method that is invoked by C when the game needs to intialize. + */ const init = () => { - if(!GAME_MAIN) return; - GAME_MAIN.init(); + print("init"); + // if(!GAME_MAIN) return; + // GAME_MAIN.init(); } +/** + * Method that is invoked by C every single frame. + */ const update = () => { if(!GAME_MAIN) return; GAME_MAIN.update(); } +/** + * Method that is invoked by C when the game needs to stop and clean up. + */ const dispose = () => { if(!GAME_MAIN) return; GAME_MAIN.dispose(); diff --git a/ts/main.ts b/ts/main.ts index 56cf8781..ff5fa7b6 100644 --- a/ts/main.ts +++ b/ts/main.ts @@ -1,7 +1,49 @@ import { Game, gameSetMain } from "./game/Game"; +import { Scene } from "./scene/Scene"; + +class TestScene extends Scene { + private quad:Primitive; + private camera:Camera; + private shader:Shader; + private texture:Texture; + + init() { + this.quad = primitiveCreate(); + quadInit(this.quad, 0, + -1, -1, 0, 0, + 1, 1, 1, 1 + ); + + this.shader = shaderCreate(); + assetShaderLoad(this.shader, + "shaders/textured.vert", + "shaders/textured.frag" + ); + + this.camera = cameraCreate(); + cameraLookAt(this.camera, 3,3,3, 0,0,0); + cameraPerspective(this.camera, 45, 16/9, 0.01, 1000); + + this.texture = textureCreate(); + assetTextureLoad(this.texture, "test_texture.png"); + } + + update() { + shaderUse(this.shader); + shaderUseCamera(this.shader, this.camera); + shaderUsePosition(this.shader, 0,0,0, 0,this.game.time.current,0); + primitiveDraw(this.quad, 0, -1); + } + + dispose() { + } +} class MainGame extends Game { - + constructor() { + super(); + this.setScene(new TestScene(this)); + } } gameSetMain(new MainGame()); \ No newline at end of file diff --git a/ts/scene/Scene.ts b/ts/scene/Scene.ts new file mode 100644 index 00000000..f100e4a9 --- /dev/null +++ b/ts/scene/Scene.ts @@ -0,0 +1,13 @@ +import { Game } from "../game/Game"; + +export abstract class Scene { + public readonly game:Game; + + constructor(game:Game) { + this.game = game; + } + + abstract init():void; + abstract update():void; + abstract dispose():void; +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 777abf9f..2f0d375d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es3", + "target": "ES5", "noImplicitAny": true, "removeComments": true, "preserveConstEnums": true,