Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/runner.c
Original file line number Diff line number Diff line change
Expand Up @@ -775,6 +775,8 @@ static void rebuildDrawableCacheIfDirty(Runner* runner) {
}

void Runner_draw(Runner* runner) {
if (!runner->drawAutomatic) return;

Room* room = runner->currentRoom;

rebuildDrawableCacheIfDirty(runner);
Expand Down Expand Up @@ -1019,6 +1021,8 @@ static void endGuiPass(Runner* runner) {
}

void Runner_drawGUI(Runner* runner, int32_t windowW, int32_t windowH, int32_t targetW, int32_t targetH) {
if (!runner->drawAutomatic) return;

rebuildDrawableCacheIfDirty(runner);
Drawable* drawables = runner->cachedDrawables;
int32_t drawableCount = (int32_t) arrlen(drawables);
Expand Down Expand Up @@ -1109,7 +1113,9 @@ static void applyFreeCamera(Runner* runner, int32_t* viewX, int32_t* viewY, int3
*viewY = (int32_t) (centerY - zoomedH * 0.5f);
}


void Runner_drawViews(Runner* runner, int32_t gameW, int32_t gameH, bool debugShowCollisionMasks) {
if (!runner->drawAutomatic) return;
Renderer* renderer = runner->renderer;
renderer->vtable->clearScreen(renderer, runner->drawBackgroundColor ? runner->backgroundColor : 0, 1.0f);

Expand Down Expand Up @@ -2119,6 +2125,7 @@ Runner* Runner_create(DataWin* dataWin, VMContext* vm, Renderer* renderer, FileS
runner->windowTitle = dataWin->gen8.displayName ? strdup(dataWin->gen8.displayName) : nullptr;
runner->appSurfaceAutoDraw = true;
runner->usingAppSurface = true;
runner->drawAutomatic = true;
runner->applicationWidth = (int32_t) dataWin->gen8.defaultWindowWidth;
runner->applicationHeight = (int32_t) dataWin->gen8.defaultWindowHeight;
runner->oldApplicationWidth = runner->applicationWidth;
Expand Down
1 change: 1 addition & 0 deletions src/runner.h
Original file line number Diff line number Diff line change
Expand Up @@ -619,6 +619,7 @@ struct Runner {
// Just like the original runner, argv[0] is included in gameArgs
char** gameArgs;

bool drawAutomatic;
// Offset between game start time and nowNanos()
uint64_t gameStartTime;
};
Expand Down
12 changes: 12 additions & 0 deletions src/vm_builtins.c
Original file line number Diff line number Diff line change
Expand Up @@ -9316,6 +9316,17 @@ static RValue builtin_psn_setup_trophies(MAYBE_UNUSED VMContext* ctx, RValue* ar
}

// Draw functions

static RValue builtin_draw_enable_drawevent(VMContext* ctx, RValue* args, MAYBE_UNUSED int32_t argCount) {
if (1 > argCount) return RValue_makeUndefined();
Runner* runner = ctx->runner;
if (runner != nullptr) {
runner->drawAutomatic = RValue_toBool(args[0]);
}
return RValue_makeUndefined();
}


static RValue builtin_draw_sprite(VMContext* ctx, RValue* args, MAYBE_UNUSED int32_t argCount) {
Runner* runner = ctx->runner;
if (runner->renderer == nullptr) return RValue_makeUndefined();
Expand Down Expand Up @@ -15967,6 +15978,7 @@ void VMBuiltins_registerAll(VMContext* ctx) {
VM_registerBuiltin(ctx, "psn_setup_trophies", builtin_psn_setup_trophies);

// Draw
VM_registerBuiltin(ctx, "draw_enable_drawevent", builtin_draw_enable_drawevent);
VM_registerBuiltin(ctx, "draw_sprite", builtin_draw_sprite);
VM_registerBuiltin(ctx, "draw_sprite_ext", builtin_draw_sprite_ext);
VM_registerBuiltin(ctx, "draw_sprite_tiled", builtin_draw_sprite_tiled);
Expand Down
Loading