Fixed gui events

This commit is contained in:
Cooldude2606
2019-08-29 18:49:43 +01:00
parent b631172487
commit 38f0413b31
2 changed files with 27 additions and 19 deletions

View File

@@ -83,17 +83,26 @@ local Prototype = {
--- Acts as a gernal handler for any factorio event --- Acts as a gernal handler for any factorio event
local function factorio_event_handler(event) local function factorio_event_handler(event)
local element = event.element local element = event.element
local event_handlers = Factorio_Events[event.name] local rasied_event = event.name
local factorio_event_concepts = Factorio_Events[rasied_event]
if element then if element then
if not element.valid then return end if not element.valid then return end
local concept_event_raise = event_handlers[element.name] local concept = factorio_event_concepts[element.name]
if concept_event_raise then if concept then
concept_event_raise(event) for event_name, factorio_event in pairs(concept.factorio_events) do
if rasied_event == factorio_event then
concept:raise_event(event_name,event,true)
end
end
end end
else else
for _,concept_event_raise in pairs(event_handlers) do for _,concept in pairs(factorio_event_concepts) do
concept_event_raise(event) for event_name, factorio_event in pairs(concept.factorio_events) do
if rasied_event == factorio_event then
concept:raise_event(event_name,event,true)
end
end
end end
end end
@@ -121,11 +130,8 @@ function Prototype:clone(concept_name)
end end
-- Remakes even handlers for factorio -- Remakes even handlers for factorio
concept.factorio_events = {} for _,factorio_event in pairs(concept.factorio_events) do
for event_name,factorio_event in pairs(self.factorio_events) do Factorio_Events[factorio_event][concept.name] = concept
Factorio_Events[factorio_event][concept.name] = function(event)
concept:raise_event(event_name,event,true)
end
end end
-- Remove all refrences to an instance store -- Remove all refrences to an instance store
@@ -217,15 +223,17 @@ end)
-- Adds the factorio event handler if this event is linked to one -- Adds the factorio event handler if this event is linked to one
if factorio_event then if factorio_event then
self.factorio_events[event_name] = factorio_event self.factorio_events[event_name] = factorio_event
self.events[event_name].factorio_handler = event_condition self.events[event_name].factorio_event_condition = event_condition
if not Factorio_Events[factorio_event] then local factorio_event_concepts = Factorio_Events[factorio_event]
Factorio_Events[factorio_event] = {} if not factorio_event_concepts then
factorio_event_concepts = {}
Factorio_Events[factorio_event] = factorio_event_concepts
Event.add(factorio_event,factorio_event_handler) Event.add(factorio_event,factorio_event_handler)
end end
Factorio_Events[factorio_event][self.name] = function(event) if not factorio_event_concepts[self.name] then
self:raise_event(event_name,event,true) factorio_event_concepts[self.name] = self
end end
end end
@@ -264,7 +272,7 @@ function Prototype:raise_event(event_name,event,from_factorio)
local handlers = self.events[event_name] local handlers = self.events[event_name]
-- If it is from factorio and the filter fails -- If it is from factorio and the filter fails
if from_factorio and handlers.factorio_handler and not handlers.factorio_handler(event) then if from_factorio and handlers.factorio_event_condition and not handlers.factorio_event_condition(event) then
return return
end end

View File

@@ -183,7 +183,7 @@ Gui.clone_concept('checkbox',TEST 'force_checkbox')
event.concept.set_data(element,element.state) -- Update other instances event.concept.set_data(element,element.state) -- Update other instances
event.player.print('Force stored checkbox is now: '..tostring(element.state)) event.player.print('Force stored checkbox is now: '..tostring(element.state))
end) end)
:define_combined_store(function(element,state) :define_combined_store(Gui.categorize_by_force,function(element,state)
element.state = state or false element.state = state or false
end) end)
@@ -196,7 +196,7 @@ Gui.clone_concept('checkbox',TEST 'player_checkbox')
event.concept.set_data(element,element.state) -- Update other instances event.concept.set_data(element,element.state) -- Update other instances
event.player.print('Player stored checkbox is now: '..tostring(element.state)) event.player.print('Player stored checkbox is now: '..tostring(element.state))
end) end)
:define_combined_store(function(element,state) :define_combined_store(Gui.categorize_by_player,function(element,state)
element.state = state or false element.state = state or false
end) end)