--==========================================================================
--== Скрипт управления видимостью артефактов
--== Список артефактов заносится в таблицу db.artefacts
--== Автор: Singapur22
--== Дата создания: 26 августа 2010 года
--== Дата последнего изменения: 26 августа 2010 года
--==========================================================================
	
local snd_vanish = "anomaly\\pux_blast"  --звук исчезания арта

--================================================================================================================================
--== Инициализация артефактов
--================================================================================================================================

function init(obj)
	local new_binder = genegic_artefacts_binder(obj)
	obj:bind_object(new_binder)
end

--================================================================================================================================
--== Класс биндера артефактов
--================================================================================================================================

class "genegic_artefacts_binder" (object_binder)

function genegic_artefacts_binder:__init(obj) super(obj)
    self.snd_vanish = xr_sound.get_safe_sound_object(snd_vanish)
end 

function genegic_artefacts_binder:reload(section)
	object_binder.reload(self, section)
end

function genegic_artefacts_binder:reinit()
	object_binder.reinit(self)

	if type(db.artefacts[self.object:id()]) ~= "table" then
        db.artefacts[self.object:id()] = { }
	end
	self.st = db.artefacts[self.object:id()]
end

function genegic_artefacts_binder:update(delta)
	object_binder.update(self, delta)
	
	local object_id = self.object:id()
	local parent = self.object:parent()
	
	--== контроль над артами в инвентаре ==--
	if parent then 
	    if parent:id() == db.actor:id() then
		    local item1 = db.actor:item_in_slot(1)
			if item1 and item1:id() == object_id then
			    -- если арт в первом слоте, включаем запрет исчезания
				if not self.st.weapon then
					self.st.weapon = true
				end
			else
				-- отключаем запрет исчезания, если арт уже не в первом слоте
				if self.st.weapon then
					self.st.weapon = false
				end
			end
		elseif self.st.podmena then
		    -- поддержка подбирания артов неписями
		    alife():create(self.st.podmena, parent:position(), parent:level_vertex_id(), parent:game_vertex_id(), parent:id())
		    db.artefacts[ object_id ] = nil
		    alife():release( alife():object( object_id ), true )
		end
	    return 
	end
	
	--== контроль над свободными артами в онлайн ==--
	local dist = db.actor:position():distance_to_sqr(self.object:position())
	if dist <= 4 and self.st.podmena then
	    alife():create(self.st.podmena, self.object:position(), self.object:level_vertex_id(), self.object:game_vertex_id())
		db.artefacts[ object_id ] = nil
		alife():release(alife():object( object_id ), true)
	elseif dist > 6 and not self.st.weapon then
	    if not self.st.podmena then
	        local sobj = alife():create("af_podmena", self.object:position(), self.object:level_vertex_id(), self.object:game_vertex_id())
		    db.artefacts[ sobj.id ] = {}
		    db.artefacts[ sobj.id ].podmena = self.object:section()
		    db.artefacts[ sobj.id ].vanish = false
		    db.artefacts[ self.object:id() ] = nil
		
		    alife():release( alife():object( object_id ), true )
		else
		    if not self.st.vanish then
			    if dist < 100 then
			        self.snd_vanish:play_at_pos(self.object, self.object:position(), sound_object.s3d)
				end
				self.st.vanish = true
			end
		end
	end
end

function genegic_artefacts_binder:net_spawn(data)
	if not object_binder.net_spawn(self, data) then
		return false
	end
	return true
end

--происходит при переходе артефакта в offline
function genegic_artefacts_binder:net_destroy()
    if self.st.weapon then
	    self.st.weapon = false
	end
end

function genegic_artefacts_binder:save(packet)
end

function genegic_artefacts_binder:load(reader)
end

--===========================================================================================================================================
--== Сохранение/Загрузка таблицы db.artefacts
--===========================================================================================================================================

-- список доступных материнских артефактов, для востановления таблицы db.artefacts после загрузки/перезагркзке игры.
local list_arts = { 'af_medusa', 'af_cristall_flower', 'af_night_star', 'af_vyvert',
                    'af_gravi', 'af_gold_fish', 'af_blood', 'af_mincer_meat', 'af_soul',
					'af_electra_sparkler', 'af_electra_flash', 'af_electra_moonlight', 'af_rusty_thorn', 
					'af_rusty_kristall', 'af_rusty_sea-urchin', 'af_ameba_slime', 'af_ameba_slug',
					'af_ameba_mica', 'af_drops', 'af_fireball', 'af_cristall', 'af_dummy_glassbeads', 
					'af_dummy_pellicle', 'af_dummy_battery', 'af_dummy_dummy', 'af_dummy_spring', 'af_fuzz_kolobok', 'af_med', 'glaz_drakona', 'af_poes', 'af_romashka', 'af_2', 'af_4', 'af_5', 'af_6', 'af_7', 'af_11', 'af_8', 'af_9', 'af_10', 'af_12', 'af_krovosos', 'af_phantom', 'af_bat', 'af_pero', 'af_dusha_zony', 'af_podmena' }

--сохранение имени материнской секции артефакта подмены
function save(p)
    local tbl = {}
	for k,v in pairs(db.artefacts) do
		if v.podmena then
		    for i,s in ipairs(list_arts) do
			    if s == v.podmena then
		            tbl[k] = i
				end
			end
		end
	end

    local size = 0
	for k,v in pairs(tbl) do
		size = size + 1
	end
	p:w_u16(size)
	for k,v in pairs(tbl) do
		p:w_u16(k)
		p:w_u8(v)
	end
end

--загрузка имени материнской секции артефакта подмены
function load(p)
    local t = p:r_u16()
	for i = 1,t do
	    local id = p:r_u16()
		local value = p:r_u8()
		db.artefacts[id] = {}
		db.artefacts[id].podmena = list_arts[value]
	end
end

--===========================================================================================================================================
