Skip to main content
Skip to main content

NightlightFlicker

NightlightFlicker

Description

s are flickering lights that are only active at night or during bad weather

Functions

new

Description

Creating nightlightflicker

Definition

new(integer name)

Arguments

integernamenode id

Return Values

integerinstanceInstance of object

Code

function NightlightFlicker.new(id)
local self = setmetatable( { } , NightlightFlicker _mt)

self.id = id
self.isVisible = false
self.isFlickerActive = false
self.nextFlicker = 0
self.flickerDuration = 100
setVisibility( self.id, self.isVisible)

g_messageCenter:subscribe(MessageType.DAY_NIGHT_CHANGED, self.oNWeatherChanged, self )

return self
end

onCreate

Description

Creating nightlightflicker

Definition

onCreate(integer id)

Arguments

integeridnode id

Code

function NightlightFlicker:onCreate(id)
g_currentMission:addUpdateable( NightlightFlicker.new(id))
end

onWeatherChanged

Description

Change visibility of night object

Definition

onWeatherChanged()

Code

function NightlightFlicker:onWeatherChanged()
if g_currentMission ~ = nil and g_currentMission.environment ~ = nil then
self.isVisible = not(g_currentMission.environment.isSunOn and not g_currentMission.environment.weather:getIsRaining())
setVisibility( self.id, self.isVisible)
end
end

update

Description

Update flickering

Definition

update(float dt)

Arguments

floatdttime since last call in ms

Code

function NightlightFlicker:update(dt)
if self.isVisible then

self.nextFlicker = self.nextFlicker - dt
if self.nextFlicker < = 0 then
self.isFlickerActive = true
setVisibility( self.id, false )
self.nextFlicker = math.floor( math.random() * 1500 + self.flickerDuration + 10 ) -- set next flicker at least 10ms after this one
end

if self.isFlickerActive then
self.flickerDuration = self.flickerDuration - dt
if self.flickerDuration < = 0 then
self.isFlickerActive = false
self.flickerDuration = math.floor( math.random() * 200 )
setVisibility( self.id, true )
end
end

end
end