mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-24 10:40:46 +00:00
Lunatic: add preliminary helper code for local gamevar saving.
git-svn-id: https://svn.eduke32.com/eduke32@3858 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
34138cdc96
commit
528366da46
2 changed files with 33 additions and 5 deletions
|
@ -443,7 +443,7 @@ local function A_FP_ManhattanDist(ps, spr)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Returns: player index, distance
|
-- Returns: player index, distance
|
||||||
-- TODO: MP case
|
-- TODO_MP
|
||||||
function _findplayer(pli, spritenum)
|
function _findplayer(pli, spritenum)
|
||||||
return 0, A_FP_ManhattanDist(player[pli], sprite[spritenum])
|
return 0, A_FP_ManhattanDist(player[pli], sprite[spritenum])
|
||||||
end
|
end
|
||||||
|
@ -981,7 +981,7 @@ function _pstomp(ps, i)
|
||||||
end
|
end
|
||||||
|
|
||||||
function _pkick(ps, spr)
|
function _pkick(ps, spr)
|
||||||
-- TODO: multiplayer branch
|
-- TODO_MP
|
||||||
if (spr.picnum~=D.APLAYER and ps.quick_kick==0) then
|
if (spr.picnum~=D.APLAYER and ps.quick_kick==0) then
|
||||||
ps.quick_kick = 14
|
ps.quick_kick = 14
|
||||||
end
|
end
|
||||||
|
@ -1514,7 +1514,7 @@ function _ifp(flags, pli, aci)
|
||||||
elseif (band(l,32768)~=0 and sprite[ps.i].extra <= 0) then
|
elseif (band(l,32768)~=0 and sprite[ps.i].extra <= 0) then
|
||||||
return true
|
return true
|
||||||
elseif (band(l,65536)~=0) then
|
elseif (band(l,65536)~=0) then
|
||||||
-- TODO: multiplayer branch
|
-- TODO_MP
|
||||||
if (_angdiffabs(ps.ang, ffiC.getangle(sprite[aci].x-ps.pos.x, sprite[aci].y-ps.pos.y)) < 128) then
|
if (_angdiffabs(ps.ang, ffiC.getangle(sprite[aci].x-ps.pos.x, sprite[aci].y-ps.pos.y)) < 128) then
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
@ -2119,8 +2119,8 @@ local actorvar_methods = {
|
||||||
|
|
||||||
_serialize = function(acv)
|
_serialize = function(acv)
|
||||||
local strtab = { OUR_NAME..".actorvar(", tostring(acv._defval), ",{" }
|
local strtab = { OUR_NAME..".actorvar(", tostring(acv._defval), ",{" }
|
||||||
-- TODO: Must clean up sometime if not saving, too. (That is, what is
|
-- NOTE: We also clean up when spawning a sprite, too. (See
|
||||||
-- A_ResetVars() in the C-CON build.)
|
-- A_ResetVars() and related functions above.)
|
||||||
acv:_cleanup()
|
acv:_cleanup()
|
||||||
return serialize_array(acv, strtab, ffiC.MAXSPRITES)
|
return serialize_array(acv, strtab, ffiC.MAXSPRITES)
|
||||||
end,
|
end,
|
||||||
|
|
|
@ -1352,6 +1352,7 @@ end
|
||||||
local package_loaded = {} -- [<modname>] = false/true/table
|
local package_loaded = {} -- [<modname>] = false/true/table
|
||||||
local modname_stack = {} -- [<depth>]=string
|
local modname_stack = {} -- [<depth>]=string
|
||||||
local module_gamevars = {} -- [<modname>] = { <gvname1>, <gvname2>, ... }
|
local module_gamevars = {} -- [<modname>] = { <gvname1>, <gvname2>, ... }
|
||||||
|
local module_gvlocali = {} -- [<modname>] = { <localidx_beg>, <localidx_end> }
|
||||||
|
|
||||||
local function getcurmodname(thisfuncname)
|
local function getcurmodname(thisfuncname)
|
||||||
if (#modname_stack == 0) then
|
if (#modname_stack == 0) then
|
||||||
|
@ -1379,6 +1380,24 @@ local function readintostr_mod(fn)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local debug = require("debug")
|
||||||
|
|
||||||
|
-- Get the number of active locals in the function that calls the function
|
||||||
|
-- calling this one.
|
||||||
|
local function getnumlocals(l)
|
||||||
|
-- 200 is the max. number of locals at one level
|
||||||
|
for i=1,200 do
|
||||||
|
-- level:
|
||||||
|
-- 0 is getlocal() itself.
|
||||||
|
-- 1 is this function.
|
||||||
|
-- 2 is the function calling getnumlocals()
|
||||||
|
-- 3 is the function calling that one.
|
||||||
|
if (debug.getlocal(3, i) == nil) then
|
||||||
|
return i-1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local required_module_mt = {
|
local required_module_mt = {
|
||||||
__newindex = function()
|
__newindex = function()
|
||||||
-- TODO: allow gamevars to be nil?
|
-- TODO: allow gamevars to be nil?
|
||||||
|
@ -1420,6 +1439,13 @@ local function our_require(modname, ...)
|
||||||
end
|
end
|
||||||
|
|
||||||
module_gamevars[thismodname] = gvnames
|
module_gamevars[thismodname] = gvnames
|
||||||
|
local gvmodi = module_gvlocali[thismodname]
|
||||||
|
gvmodi[2] = getnumlocals()
|
||||||
|
|
||||||
|
if (ffiC._DEBUG_LUNATIC ~= 0) then
|
||||||
|
printf("Module '%s' has %d locals, index %d to %d", thismodname,
|
||||||
|
gvmodi[2]-gvmodi[1]+1, gvmodi[1], gvmodi[2])
|
||||||
|
end
|
||||||
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
@ -1500,6 +1526,8 @@ local function our_module()
|
||||||
package_loaded[modname] = M
|
package_loaded[modname] = M
|
||||||
-- change the environment of the function which called us:
|
-- change the environment of the function which called us:
|
||||||
setfenv(2, M)
|
setfenv(2, M)
|
||||||
|
|
||||||
|
module_gvlocali[modname] = { getnumlocals()+1 }
|
||||||
end
|
end
|
||||||
|
|
||||||
-- overridden 'error' that always passes a string to the base 'error'
|
-- overridden 'error' that always passes a string to the base 'error'
|
||||||
|
|
Loading…
Reference in a new issue