mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-24 18:50:47 +00:00
Lunatic: various tweaks and API changes/additions.
git-svn-id: https://svn.eduke32.com/eduke32@3063 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
3a7b697a32
commit
8f89c89d86
4 changed files with 62 additions and 17 deletions
|
@ -312,7 +312,7 @@ end
|
||||||
|
|
||||||
function getbunch(sectnum, cf)
|
function getbunch(sectnum, cf)
|
||||||
if (sectnum < 0 or sectnum >= ffiC.numsectors) then
|
if (sectnum < 0 or sectnum >= ffiC.numsectors) then
|
||||||
error('passed out-of-bounds sector number'..sectnum, 2)
|
error('passed out-of-bounds sector number '..sectnum, 2)
|
||||||
end
|
end
|
||||||
if (cf ~= 0 and cf ~= 1) then
|
if (cf ~= 0 and cf ~= 1) then
|
||||||
error("passed invalid 'cf' to getbunch, must be 0 or 1", 2)
|
error("passed invalid 'cf' to getbunch, must be 0 or 1", 2)
|
||||||
|
@ -324,12 +324,14 @@ end
|
||||||
|
|
||||||
---=== Engine functions, wrapped for Lua convenience ===---
|
---=== Engine functions, wrapped for Lua convenience ===---
|
||||||
-- returns a hitdata_ct
|
-- returns a hitdata_ct
|
||||||
function hitscan(x,y,z, sectnum, vx,vy,vz, cliptype)
|
-- TODO: make v[xyz] be passed as one aggregate, too?
|
||||||
|
-- Additionally, permit different coordinates? (ang&horiz, ...)
|
||||||
|
function hitscan(pos, sectnum, vx,vy,vz, cliptype)
|
||||||
if (sectnum < 0 or sectnum >= ffiC.numsectors) then
|
if (sectnum < 0 or sectnum >= ffiC.numsectors) then
|
||||||
error('passed out-of-bounds sector number'..sectnum, 2)
|
error('passed out-of-bounds sector number '..sectnum, 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
local vec = vec3_ct(x,y,z)
|
local vec = vec3_ct(pos.x, pos.y, pos.z)
|
||||||
local hitdata = hitdata_ct()
|
local hitdata = hitdata_ct()
|
||||||
|
|
||||||
ffiC.hitscan(vec, sectnum, vx,vy,vz, hitdata, cliptype)
|
ffiC.hitscan(vec, sectnum, vx,vy,vz, hitdata, cliptype)
|
||||||
|
|
|
@ -12,13 +12,14 @@ module(...)
|
||||||
|
|
||||||
ffi.cdef[[
|
ffi.cdef[[
|
||||||
typedef struct { double x, y; } dvec2_t;
|
typedef struct { double x, y; } dvec2_t;
|
||||||
|
typedef struct { double x, y, z; } dvec3_t;
|
||||||
]]
|
]]
|
||||||
|
|
||||||
local vec2_
|
local vec2_
|
||||||
local mt = {
|
local vec2_mt = {
|
||||||
__add = function(a, b) return vec2_(a.x+b.x, a.y+b.y) end,
|
__add = function(a, b) return vec2_(a.x+b.x, a.y+b.y) end,
|
||||||
__sub = function(a, b) return vec2_(a.x-b.x, a.y-b.y) end,
|
__sub = function(a, b) return vec2_(a.x-b.x, a.y-b.y) end,
|
||||||
__unm = function(a) return vec2_(-a.x, -b.x) end,
|
__unm = function(a) return vec2_(-a.x, -a.x) end,
|
||||||
|
|
||||||
__mul = function(a,b)
|
__mul = function(a,b)
|
||||||
if (type(a)=="number") then
|
if (type(a)=="number") then
|
||||||
|
@ -50,17 +51,60 @@ local mt = {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
local vec3_
|
||||||
|
local vec3_mt = {
|
||||||
|
__add = function(a, b) return vec3_(a.x+b.x, a.y+b.y, a.z+b.z) end,
|
||||||
|
__sub = function(a, b) return vec3_(a.x-b.x, a.y-b.y, a.z-b.z) end,
|
||||||
|
__unm = function(a) return vec3_(-a.x, -a.x, -a.z) end,
|
||||||
|
|
||||||
|
__mul = function(a,b)
|
||||||
|
if (type(a)=="number") then
|
||||||
|
return vec3_(a*b.x, a*b.y, a*b.z)
|
||||||
|
end
|
||||||
|
|
||||||
|
assert(type(b)=="number")
|
||||||
|
return vec2_(a.x*b, a.y*b, a.z*b)
|
||||||
|
end,
|
||||||
|
|
||||||
|
__div = function(a,b)
|
||||||
|
assert(type(b)=="number")
|
||||||
|
return vec2_(a.x/b, a.y/b, a.z/b)
|
||||||
|
end,
|
||||||
|
--[[
|
||||||
|
__eq = function(a,b)
|
||||||
|
return (a.x==b.x and a.y==b.y and a.z==b.z)
|
||||||
|
end,
|
||||||
|
--]]
|
||||||
|
__len = function(a) return math.sqrt(a.x*a.x + a.y*a.y + a.z*a.z) end,
|
||||||
|
|
||||||
|
__tostring = function(a) return "vec3("..a.x..", "..a.y..", "..a.z..")" end,
|
||||||
|
|
||||||
|
__index = {
|
||||||
|
lensq = function(a) return a.x*a.x + a.y*a.y + a.z*a.z end,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
-- VEC2 user data constructor.
|
-- VEC2 user data constructor.
|
||||||
-- * vec2(<table or ctype>), the arg should be indexable with "x" and "y"
|
-- * vec2(<table>), <table> should be indexable with "x" and "y"
|
||||||
-- * vec2(x, y), assuming that x and y are numbers
|
-- * vec2(x, y), assuming that x and y are numbers
|
||||||
vec2_ = ffi.metatype("dvec2_t", mt)
|
vec2_ = ffi.metatype("dvec2_t", vec2_mt)
|
||||||
vec2 = vec2_
|
vec2 = vec2_
|
||||||
|
|
||||||
-- Returns a vec2 from anything indexable with "x" and "y"
|
-- Returns a vec2 from anything indexable with "x" and "y"
|
||||||
-- (vec2(t) works if t is such a table, but not if it's a vec2)
|
-- (vec2(t) works if t is such a table, but not if it's a vec2 or other cdata)
|
||||||
function tovec2(t)
|
function tovec2(t) return vec2(t.x, t.y) end
|
||||||
return vec2(t.x, t.y)
|
|
||||||
end
|
-- Same for vec3
|
||||||
|
vec3_ = ffi.metatype("dvec3_t", vec3_mt)
|
||||||
|
vec3 = vec3_
|
||||||
|
function tovec3(t) return vec3(t.x, t.y, t.z) end
|
||||||
|
|
||||||
|
-- This has no metamethods, but can be useful for calculations expecting
|
||||||
|
-- integer values, e.g. geom.ivec3(x, y, z) is a reasonable way to round
|
||||||
|
-- a vec3. It can be also used as the RHS to the vec2/vec3 arithmetic
|
||||||
|
-- methods.
|
||||||
|
ivec3 = ffi.typeof("vec3_t")
|
||||||
|
|
||||||
|
|
||||||
-- Two-element vector cross product.
|
-- Two-element vector cross product.
|
||||||
-- Anti-commutative, distributive.
|
-- Anti-commutative, distributive.
|
||||||
|
|
|
@ -76,8 +76,8 @@ local mt = {
|
||||||
end,
|
end,
|
||||||
|
|
||||||
reset = function(s)
|
reset = function(s)
|
||||||
s.n, s.m = 0, 0
|
s.n = 0
|
||||||
s.s, s.min, s.max = NaN, NaN, NaN
|
s.m, s.s, s.min, s.max = NaN, NaN, NaN, NaN
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -86,7 +86,7 @@ local rstat = ffi.metatype("runningstat_t", mt)
|
||||||
function new(n,m,s, min,max)
|
function new(n,m,s, min,max)
|
||||||
if (n == nil) then
|
if (n == nil) then
|
||||||
-- initialization containing no elements
|
-- initialization containing no elements
|
||||||
return rstat(0, 0, NaN, NaN, NaN)
|
return rstat(0, NaN, NaN, NaN, NaN)
|
||||||
elseif (m == nil) then
|
elseif (m == nil) then
|
||||||
-- same as initialization with N==0 above (one element)
|
-- same as initialization with N==0 above (one element)
|
||||||
return rstat(1, n, 0, n, n)
|
return rstat(1, n, 0, n, n)
|
||||||
|
|
|
@ -245,9 +245,8 @@ gameactor(1680, -- LIZTROOP
|
||||||
|
|
||||||
local spr = sprite[i]
|
local spr = sprite[i]
|
||||||
|
|
||||||
local x,y,z = spr.x, spr.y, spr.z
|
|
||||||
local t = gv.gethitickms()
|
local t = gv.gethitickms()
|
||||||
local hit = hitscan(x,y,z, spr.sectnum, 10, 10, 0, gv.CLIPMASK0)
|
local hit = hitscan(spr, spr.sectnum, 10, 10, 0, gv.CLIPMASK0)
|
||||||
|
|
||||||
hs:add(1000*(gv.gethitickms()-t))
|
hs:add(1000*(gv.gethitickms()-t))
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue