--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| 	Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]

local BUILDER, PART = pac.PartTemplate("base_movable")

PART.ClassName = "shake"
PART.Group = 'effects'
PART.Icon = 'icon16/transmit.png'

BUILDER:StartStorableVars()
	BUILDER:SetPropertyGroup("generic")
	BUILDER:SetPropertyGroup("shake")
		BUILDER:GetSet("Amplitude", 1)
		BUILDER:GetSet("Falloff", false)
		BUILDER:GetSet("Frequency", 1)
		BUILDER:GetSet("Duration", 0.5)
		BUILDER:GetSet("Radius", 100)
BUILDER:EndStorableVars()

function PART:OnShow(from_rendering)
	if not from_rendering then
		local position = self:GetDrawPosition()
		local eyedistance = position:Distance(pac.EyePos)
		local radius = math.Clamp(self.Radius, 0.0001, 500)

		if eyedistance < radius then
			local amplitude = self.Amplitude
			if self.Falloff then
				amplitude = amplitude * (1 - (eyedistance / radius))
			end
			util.ScreenShake(position, amplitude, self.Frequency, math.Clamp(self.Duration, 0.0001, 2), 0)
		end
	end
end

BUILDER:Register()