buldthensnip/pkg/base/ent/expl_grenade.lua
2015-02-09 13:56:26 +13:00

156 lines
3.6 KiB
Lua

--[[
This file is part of Ice Lua Components.
Ice Lua Components is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Ice Lua Components is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with Ice Lua Components. If not, see <http://www.gnu.org/licenses/>.
]]
return function (plr)
local this = {} this.this = this
this.plr = plr
this.mdl = mdl_nade_inst
this.gui_x = 0.15
this.gui_y = 0.25
this.gui_scale = 0.1
this.gui_pick_scale = 2.0
this.t_nadeboom = nil
this.t_newnade = nil
this.ammo = 2
function plr.expl_ammo_checkthrow()
if this.ammo <= 0 then return false end
if plr.mode == PLM_NORMAL then
this.ammo = this.ammo - 1
end
return true
end
function this.restock()
this.ammo = 4
end
function this.throw_nade(sec_current)
local sya = math.sin(plr.angy)
local cya = math.cos(plr.angy)
local sxa = math.sin(plr.angx)
local cxa = math.cos(plr.angx)
local fwx,fwy,fwz
fwx,fwy,fwz = sya*cxa, sxa, cya*cxa
local n = new_nade({
x = plr.x,
y = plr.y,
z = plr.z,
vx = fwx*MODE_NADE_SPEED*MODE_NADE_STEP+plr.vx*MODE_NADE_STEP,
vy = fwy*MODE_NADE_SPEED*MODE_NADE_STEP+plr.vy*MODE_NADE_STEP,
vz = fwz*MODE_NADE_SPEED*MODE_NADE_STEP+plr.vz*MODE_NADE_STEP,
fuse = math.max(0, this.t_nadeboom - sec_current),
pid = this.plr.pid
})
nade_add(n)
net_send(nil, common.net_pack("BhhhhhhH",
PKT_NADE_THROW,
math.floor(n.x*32+0.5),
math.floor(n.y*32+0.5),
math.floor(n.z*32+0.5),
math.floor(n.vx*256+0.5),
math.floor(n.vy*256+0.5),
math.floor(n.vz*256+0.5),
math.floor(n.fuse*100+0.5)))
end
function this.tick(sec_current, sec_delta)
if this.t_newnade and sec_current >= this.t_newnade then
this.t_newnade = nil
end
if this.t_nadeboom then
if (not this.ev_lmb) or sec_current >= this.t_nadeboom then
this.throw_nade(sec_current)
this.t_newnade = sec_current + MODE_DELAY_NADE_THROW
this.t_nadeboom = nil
this.ev_lmb = false
end
end
if client and plr.alive and (not plr.t_switch) then
if this.ev_lmb and plr.mode ~= PLM_SPECTATE then
if plr.tools[plr.tool+1] == this then
if (not this.t_newnade) and this.ammo > 0 then
if (not this.t_nadeboom) then
if plr.mode == PLM_NORMAL then
this.ammo = this.ammo - 1
end
this.t_nadeboom = sec_current + MODE_NADE_FUSE
client.wav_play_global(wav_pin, plr.x, plr.y, plr.z)
net_send(nil, common.net_pack("BhhhhhhH", PKT_NADE_PIN))
end
end
end end end
end
function this.focus()
--
end
function this.unfocus()
--
end
function this.need_restock()
return this.ammo < 4
end
function this.key(key, state, modif)
--
end
function this.click(button, state)
if button == 1 then
-- LMB
this.ev_lmb = state
end
end
function this.free()
--
end
function this.textgen()
local col
if this.ammo == 0 then
col = 0xFFFF3232
else
col = 0xFFC0C0C0
end
return col, ""..this.ammo
end
function this.get_model()
return this.mdl
end
function this.render(px, py, pz, ya, xa, ya2)
if this.ammo > 0 then
this.get_model().render_global(
px, py, pz, ya, xa, ya2, 1)
end
end
return this
end