64 lines
2.1 KiB
Plaintext
64 lines
2.1 KiB
Plaintext
|
--[[
|
||
|
Functionality and interactivity for table fan furniture
|
||
|
Author: HarukaSai (visit us at: https://discord.com/invite/efp)
|
||
|
Credits: Aoldri
|
||
|
19-06-2023
|
||
|
]]
|
||
|
|
||
|
function toggle_fan(obj_id)
|
||
|
local section = alife_object(obj_id):section_name()
|
||
|
local is_on = hf_obj_manager.get_data(obj_id).is_on
|
||
|
|
||
|
hf_obj_manager.update_data(obj_id, {is_on = (not is_on)})
|
||
|
end
|
||
|
|
||
|
function init(obj)
|
||
|
obj:bind_object(haru_placeable_fan_wrapper(obj).binder)
|
||
|
end
|
||
|
|
||
|
--------------------------------------------------------------------------------
|
||
|
-- Class "placeable_digital_clock_binder"
|
||
|
--------------------------------------------------------------------------------
|
||
|
class "haru_placeable_fan_wrapper" (bind_hf_base.hf_binder_wrapper)
|
||
|
-- Class constructor
|
||
|
function haru_placeable_fan_wrapper:__init(obj) super(obj)
|
||
|
self.first_update = true
|
||
|
|
||
|
self.snd_switch = sound_object([[efp_props\fan_switch]])
|
||
|
self.snd_idle = sound_object([[efp_props\fan_idle]])
|
||
|
end
|
||
|
|
||
|
-- Class update
|
||
|
function haru_placeable_fan_wrapper:update(delta)
|
||
|
bind_hf_base.hf_binder_wrapper.update(self, delta)
|
||
|
|
||
|
local is_on = hf_obj_manager.get_data(self.object:id()).is_on
|
||
|
|
||
|
if (self.last_state ~= is_on) or self.first_update then
|
||
|
self.object:play_cycle(is_on and "fan_movement" or "fan_static")
|
||
|
|
||
|
if (not self.first_update) then
|
||
|
self.snd_switch:play_no_feedback(self.object, sound_object.s3d, 0, self.object:position(), 0.5, random_float(0.9, 1.1))
|
||
|
end
|
||
|
|
||
|
if is_on then
|
||
|
if (not self.snd_idle:playing()) then
|
||
|
|
||
|
self.snd_idle:play_at_pos(self.object, self.object:position(), 0, sound_object.s3d + sound_object.looped)
|
||
|
self.snd_idle.volume = self.first_update and 0.5 or 0
|
||
|
self.snd_idle_max = time_global() + (not self.first_update and 2000 or 0)
|
||
|
end
|
||
|
else
|
||
|
if self.snd_idle:playing() then
|
||
|
self.snd_idle:stop()
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if self.snd_idle:playing() and (self.snd_idle_max > time_global()) then
|
||
|
self.snd_idle.volume = 0.5 - (self.snd_idle_max - time_global()) / 2000
|
||
|
end
|
||
|
|
||
|
self.last_state = is_on
|
||
|
self.first_update = false
|
||
|
end
|