mirror of
https://github.com/AquariaOSE/Aquaria.git
synced 2024-12-25 14:15:46 +00:00
172 lines
4 KiB
Lua
172 lines
4 KiB
Lua
-- Copyright (C) 2007, 2010 - Bit-Blot
|
|
--
|
|
-- This file is part of Aquaria.
|
|
--
|
|
-- Aquaria is free software; you can redistribute it and/or
|
|
-- modify it under the terms of the GNU General Public License
|
|
-- as published by the Free Software Foundation; either version 2
|
|
-- of the License, or (at your option) any later version.
|
|
--
|
|
-- This program 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 General Public License for more details.
|
|
--
|
|
-- You should have received a copy of the GNU General Public License
|
|
-- along with this program; if not, write to the Free Software
|
|
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
if not v then v = {} end
|
|
if not AQUARIA_VERSION then dofile("scripts/entities/entityinclude.lua") end
|
|
|
|
v.rotSpd = 0.0
|
|
v.n = 0
|
|
v.gear = 0
|
|
v.gearBack = 0
|
|
v.actDelay = 0
|
|
v.t = 15
|
|
v.soundTimer =0
|
|
|
|
v.useSetRotSpd = 0
|
|
|
|
function v.commonInit(me, usrs)
|
|
v.useSetRotSpd = usrs
|
|
entity_setEntityType(me, ET_NEUTRAL)
|
|
--entity_setTexture(me, "")
|
|
entity_initSkeletal(me, "Gear")
|
|
--entity_setWidth(me, 64)
|
|
--entity_setHeight(me, 64)
|
|
entity_setUpdateCull(me, -1)
|
|
v.n = getNaija()
|
|
|
|
entity_setCollideRadius(me, 160)
|
|
|
|
v.gear = entity_getBoneByName(me, "Gear")
|
|
v.gearBack = entity_getBoneByName(me, "GearBack")
|
|
|
|
entity_scale(me, 1.5, 1.5)
|
|
|
|
loadSound("GearTurn")
|
|
loadSound("GearWaterLevel")
|
|
|
|
esetv(me, EV_BEASTBURST, 0)
|
|
esetv(me, EV_LOOKAT, 0)
|
|
end
|
|
|
|
function postInit(me)
|
|
v.mult = 1
|
|
local node = entity_getNearestNode(me, "FLIP")
|
|
if node ~= 0 and node_isEntityIn(node, me) then
|
|
v.useSetRotSpd = -v.useSetRotSpd
|
|
end
|
|
end
|
|
|
|
function enterState(me)
|
|
end
|
|
|
|
function exitState(me)
|
|
end
|
|
|
|
function activate(me)
|
|
end
|
|
|
|
function songNote(me, note)
|
|
end
|
|
|
|
function damage(me)
|
|
return false
|
|
end
|
|
|
|
local function doFunction(me)
|
|
if v.actDelay == 0 then
|
|
v.actDelay = v.t
|
|
local node = entity_getNearestNode(me)
|
|
if node ~= 0 and node_isEntityIn(node, me) then
|
|
node_activate(node)
|
|
end
|
|
playSfx("GearWaterLevel")
|
|
end
|
|
end
|
|
|
|
function update(me, dt)
|
|
local spinning = false
|
|
if v.actDelay > 0 then
|
|
v.actDelay = v.actDelay - dt
|
|
if v.actDelay < 0 then
|
|
v.actDelay = 0
|
|
end
|
|
end
|
|
|
|
|
|
if v.useSetRotSpd == 0 then
|
|
if entity_isEntityInRange(me, v.n, 600) then
|
|
if entity_isUnderWater(v.n) and avatar_isRolling() then
|
|
v.rotSpd = v.rotSpd + 90*dt*avatar_getRollDirection()
|
|
if v.rotSpd > 360 then
|
|
v.rotSpd = 360
|
|
elseif v.rotSpd < -360 then
|
|
v.rotSpd = -360
|
|
end
|
|
v.spinning = true
|
|
|
|
end
|
|
end
|
|
else
|
|
v.spinning = true
|
|
v.rotSpd = v.useSetRotSpd
|
|
end
|
|
--debugLog(string.format("rotspd:%d", v.rotSpd))
|
|
if v.rotSpd ~= 0 then
|
|
|
|
entity_rotate(me, entity_getRotation(me)+v.rotSpd*dt)
|
|
--bone_rotate(gear, bone_getRotation(gear)+v.rotSpd*dt)
|
|
bone_rotate(v.gearBack, bone_getRotation(v.gearBack)-v.rotSpd*2*dt)
|
|
|
|
if bone_getRotation(v.gear) > 360 then
|
|
bone_rotate(v.gear, bone_getRotation(v.gear)-360)
|
|
--entity_sound(me, "GearTurn")
|
|
elseif bone_getRotation(v.gear) < -360 then
|
|
bone_rotate(v.gear, bone_getRotation(v.gear)+360)
|
|
--entity_sound(me, "GearTurn")
|
|
end
|
|
v.soundTimer = v.soundTimer + v.rotSpd*dt
|
|
--debugLog(string.format("soundTimer: %f", v.soundTimer))
|
|
local intv = 90
|
|
if v.soundTimer > intv then
|
|
v.soundTimer = 0
|
|
entity_sound(me, "GearTurn")
|
|
end
|
|
if v.soundTimer < -intv then
|
|
v.soundTimer = 0
|
|
entity_sound(me, "GearTurn")
|
|
end
|
|
|
|
if not spinning then
|
|
local dir = 1
|
|
if v.rotSpd > 0 then
|
|
dir = -1
|
|
end
|
|
v.rotSpd = v.rotSpd + (30.0*dt*dir)
|
|
if dir == 1 and v.rotSpd > 0 then
|
|
v.rotSpd = 0
|
|
elseif dir == -1 and v.rotSpd < 0 then
|
|
v.rotSpd = 0
|
|
end
|
|
end
|
|
end
|
|
|
|
local minSpd = 300
|
|
if v.rotSpd > minSpd or v.rotSpd < -minSpd then
|
|
doFunction(me)
|
|
end
|
|
|
|
if entity_touchAvatarDamage(me, entity_getCollideRadius(me), 0) then
|
|
if avatar_isLockable() and entity_setBoneLock(v.n, me) then
|
|
else
|
|
local x, y = entity_getVectorToEntity(me, v.n, 8000)
|
|
entity_addVel(v.n, x, y)
|
|
end
|
|
end
|
|
entity_handleShotCollisions(me)
|
|
end
|