raze/polymer/eduke32/source/lunatic/test/delmusicsfx.lua
helixhorned 1e26e640e4 Lunatic: swap first and second arg of con.spawn().
git-svn-id: https://svn.eduke32.com/eduke32@3939 1a8010ca-5511-0410-912e-c29ae57300e0
2013-07-09 18:23:41 +00:00

97 lines
2.3 KiB
Lua

local require = require
local string = require("string")
local con = require("con")
local xmath = require("xmath")
local gv = gv
local sprite = sprite
local actor = actor
local player = player
local assert = assert
local printf = printf
local gameevent = gameevent
local spritesofstat = spritesofstat
local Inf = 0/1
module(...)
-- Insert MUSICANDSFX? (Delete it otherwise.)
insp = false
-- Hitag and lotag of last deleted MUSICANDSFX sprite.
tag = {}
tag.hi, tag.lo = 0, 0
-- Preliminary dummy of a local gamevar.
local ournumjumps = 0
local lastv = xmath.vec3()
ilastv = xmath.ivec3()
require "end_gamevars"
-- We may cache globals defined in the gamevar section afterwards, but not
-- refer to locals defined prior to the gamevar section in it.
local tag = tag
local D = require("CON.DEFS")
gameevent{"JUMP", actor.FLAGS.chain_beg,
function(aci, pli)
local ps = player[pli]
ournumjumps = ournumjumps+1
if (insp) then
-- Insert MUSICANDSFX sprite with same lo-/hitag as last deleted one.
printf("delmusicsfx: jump count=%d, inserting", ournumjumps)
local spr = sprite[con.spawn(D.MUSICANDSFX, aci)]
spr.lotag, spr.hitag = tag.lo, tag.hi
else
-- Delete nearest MUSICANDSFX sprite.
local nearestdst = Inf
local nearesti = -1
for i in spritesofstat(actor.STAT.FX) do
local dst = (sprite[i]-ps.pos):len2()
if (nearesti == -1 or (dst < nearestdst and dst < sprite[i].hitag)) then
printf("MSFX %d dist %d", i, dst)
nearesti = i
nearestdst = dst
end
end
if (nearesti >= 0) then
local spr = sprite[nearesti]
tag.lo, tag.hi = spr.lotag, spr.hitag
lastv.x, lastv.y, lastv.z = spr.x, spr.y, spr.z+0.5
ilastv.x, ilastv.y, ilastv.z = spr.x, spr.y, spr.z
actor.delete(nearesti)
end
assert(nearesti < 0 or sprite[nearesti].picnum==D.MUSICANDSFX)
printf("delmusicsfx: jump count=%d, deleting sprite %d", ournumjumps, nearesti)
end
insp = not insp
end}
-- Display the number of times we jumped on the screen.
gameevent
{
"DISPLAYREST",
function()
con.minitext(240, 10, string.format("jumped %d times", ournumjumps))
end
}