1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--
-- file: camera_shake.lua
-- brief: Camera shakes
-- author: Dave Rodgers
--
-- Copyright (C) 2007.
-- Licensed under the terms of the GNU GPL, v2 or later.
--
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
function widget:GetInfo()
return {
name = "CameraShake",
desc = "Camera shakes",
author = "trepan",
date = "Jun 15, 2007",
license = "GNU GPL, v2 or later",
layer = 0,
enabled = true -- loaded by default?
}
end
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Automatically generated local definitions
local spSetCameraOffset = Spring.SetCameraOffset
local spSetShockFrontFactors = Spring.SetShockFrontFactors
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
local exps = 0
local shake = 0
local powerScale = 200
local decayFactor = 5
local minArea = 32 -- weapon's area of effect
local minPower = (0.02 / powerScale)
local distAdj = 100
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
function widget:Initialize()
-- required for ShockFront() call-ins
-- (threshold uses the 1/d^2 power)
spSetShockFrontFactors(minArea, minPower, distAdj)
end
function widget:Shutdown()
spSetCameraOffset()
end
function widget:ShockFront(power, dx, dy, dz)
exps = exps + 1
power = power * powerScale
if (power > 10) then
power = 10
end
shake = shake + power
end
local function birand(val)
return val * (1.0 - (0.002 * math.random(1000)))
end
function widget:Update(dt)
local t = widgetHandler:GetHourTimer()
local pShake = shake * 0.1
local tShake = shake * 0.025
local px, py, pz, tx, ty, tz =
birand(pShake),
birand(pShake),
birand(pShake),
birand(tShake),
birand(tShake)
spSetCameraOffset(px, py, pz, tx, ty)
local decay = (1 - (decayFactor * dt))
if (decay < 0) then
decay = 0
end
shake = shake * decay
end
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
|