From 826dfd01fc34dedc41804d7cc552e68f7ed4fb8d Mon Sep 17 00:00:00 2001 From: Goober5000 Date: Mon, 13 Jun 2022 01:44:43 -0400 Subject: [PATCH] clean up Lua frame handling a bit There's no need to keep all this infrastructure to run every frame for a barely used situation. This cleans it up a bit and does the position reset in the actual drawString function. --- code/graphics/2d.cpp | 2 -- code/scripting/api/libs/graphics.cpp | 13 +++++++++---- code/scripting/api/libs/graphics.h | 2 -- code/scripting/lua.cpp | 5 ----- code/scripting/scripting.cpp | 5 ----- code/scripting/scripting.h | 6 ------ 6 files changed, 9 insertions(+), 24 deletions(-) diff --git a/code/graphics/2d.cpp b/code/graphics/2d.cpp index b30c175ca0..a9d93e65ac 100644 --- a/code/graphics/2d.cpp +++ b/code/graphics/2d.cpp @@ -2560,8 +2560,6 @@ void gr_flip(bool execute_scripting) if (OnFrameHook->isActive()) { OnFrameHook->run(); } - // WMC - Do scripting reset stuff - Script_system.EndFrame(); } gr_reset_immediate_buffer(); diff --git a/code/scripting/api/libs/graphics.cpp b/code/scripting/api/libs/graphics.cpp index e874b4e622..e2cbcdff2e 100644 --- a/code/scripting/api/libs/graphics.cpp +++ b/code/scripting/api/libs/graphics.cpp @@ -40,6 +40,8 @@ namespace { static const int NextDrawStringPosInitial[] = {0, 0}; static int NextDrawStringPos[] = {NextDrawStringPosInitial[0], NextDrawStringPosInitial[1]}; +static fix PreviousFrametimeOverall = 0; + static bool WarnedBadThicknessLine = false; } @@ -51,10 +53,6 @@ namespace api { //**********LIBRARY: Graphics ADE_LIB(l_Graphics, "Graphics", "gr", "Graphics Library"); -void graphics_on_frame() { - memcpy(NextDrawStringPos, NextDrawStringPosInitial, sizeof(NextDrawStringPos)); -} - static float lua_Opacity = 1.0f; static int lua_Opacity_type = GR_ALPHABLEND_FILTER; static int lua_ResizeMode = GR_RESIZE_NONE; @@ -1229,6 +1227,13 @@ static int drawString_sub(lua_State *L, bool use_resize_arg) int resize_mode = lua_ResizeMode; + // if the frame has changed since the last drawString call, reset the string position + if (PreviousFrametimeOverall != game_get_overall_frametime()) + { + PreviousFrametimeOverall = game_get_overall_frametime(); + memcpy(NextDrawStringPos, NextDrawStringPosInitial, sizeof(NextDrawStringPos)); + } + int x = NextDrawStringPos[0]; int y = NextDrawStringPos[1]; diff --git a/code/scripting/api/libs/graphics.h b/code/scripting/api/libs/graphics.h index d4f984b956..1b88760d2c 100644 --- a/code/scripting/api/libs/graphics.h +++ b/code/scripting/api/libs/graphics.h @@ -7,8 +7,6 @@ namespace api { DECLARE_ADE_LIB(l_Graphics); -void graphics_on_frame(); - } } diff --git a/code/scripting/lua.cpp b/code/scripting/lua.cpp index 0eb0a330cd..8cdd44d7b7 100644 --- a/code/scripting/lua.cpp +++ b/code/scripting/lua.cpp @@ -185,11 +185,6 @@ int script_state::CreateLuaState() return 1; } -void script_state::EndLuaFrame() -{ - scripting::api::graphics_on_frame(); -} - static bool sort_table_entries(const ade_table_entry* left, const ade_table_entry* right) { const char* leftCmp = left->Name != nullptr ? left->Name : left->ShortName; const char* rightCmp = right->Name != nullptr ? right->Name : left->ShortName; diff --git a/code/scripting/scripting.cpp b/code/scripting/scripting.cpp index c98c40f460..138b89eca0 100644 --- a/code/scripting/scripting.cpp +++ b/code/scripting/scripting.cpp @@ -792,11 +792,6 @@ bool script_state::IsConditionOverride(int action, object *objp1, object *objp2, return false; } -void script_state::EndFrame() -{ - EndLuaFrame(); -} - void script_state::Clear() { // Free all lua value references diff --git a/code/scripting/scripting.h b/code/scripting/scripting.h index ad4e373dd4..4bd13f3cef 100644 --- a/code/scripting/scripting.h +++ b/code/scripting/scripting.h @@ -193,9 +193,6 @@ class script_state static void OutputLuaDocumentation(scripting::ScriptingDocumentation& doc, const scripting::DocumentationErrorReporter& errorReporter); - //Internal Lua helper functions - void EndLuaFrame(); - public: //***Init/Deinit script_state(const char *name); @@ -259,10 +256,7 @@ public: void RunInitFunctions(); //*****Other functions - void EndFrame(); - static script_state* GetScriptState(lua_State* L); - util::event OnStateDestroy; };