Added auto open for warp gui

This commit is contained in:
Cooldude2606
2019-06-08 15:45:40 +01:00
parent b93d4debfd
commit dbe40d51e2
3 changed files with 51 additions and 27 deletions

View File

@@ -213,12 +213,13 @@ Gui.classes.left_frames = LeftFrames
LeftFrames._prototype:on_draw(player,frame) --- Use to draw your elements to the new frame
LeftFrames._prototype:on_update(player,frame) --- Use to edit your frame when there is no need to redraw it
LeftFrames._prototype:on_player_toggle(player,frame) --- Triggered when the player toggle the left frame
LeftFrames._prototype:event_handler(action) --- Creates an event handler that will trigger one of its functions, use with Event.add
]]
local CenterFrames = require 'expcore.gui.center'
Gui.get_center_flow = CenterFrames.get_flow
Gui.toggle_left_frame = CenterFrames.toggle_frame
Gui.toggle_center_frame = CenterFrames.toggle_frame
Gui.draw_center_frame = CenterFrames.draw_frame
Gui.redraw_center_frame = CenterFrames.redraw_frames
Gui.new_center_frame = CenterFrames.new_frame

View File

@@ -45,6 +45,7 @@
LeftFrames._prototype:on_draw(player,frame) --- Use to draw your elements to the new frame
LeftFrames._prototype:on_update(player,frame) --- Use to edit your frame when there is no need to redraw it
LeftFrames._prototype:on_player_toggle(player,frame) --- Is triggered when the player presses the toggle button
LeftFrames._prototype:event_handler(action) --- Creates an event handler that will trigger one of its functions, use with Event.add
]]
local Gui = require 'expcore.gui.core'
@@ -58,7 +59,8 @@ local LeftFrames = {
frames={},
_prototype=Gui._prototype_factory{
on_draw = Gui._event_factory('on_draw'),
on_update = Gui._event_factory('on_update')
on_update = Gui._event_factory('on_update'),
on_player_toggle = Gui._event_factory('on_player_toggle')
}
}
setmetatable(LeftFrames._prototype, {
@@ -138,7 +140,12 @@ function LeftFrames.new_frame(permision_name)
mt.__call = self.event_handler
self:on_click(function(player,_element)
self:toggle(player)
local visible = self:toggle(player)
if self.events.on_player_toggle then
local frame = self:get_frame(player)
self.events.on_player_toggle(player,frame,visible)
end
end)
LeftFrames.frames[self.name] = self
@@ -258,6 +265,10 @@ Buttons.new_button()
for _,define in pairs(LeftFrames.frames) do
local frame = LeftFrames.get_frame(define.name,player)
frame.visible = false
if define.events.on_player_toggle then
define.events.on_player_toggle(player,frame,false)
end
end
element.visible = false
end)

View File

@@ -12,16 +12,19 @@ local format_time,table_keys,table_values,table_keysort = ext_require('expcore.c
local warp_list
local warp_name_store = 'gui.left.warps.names'
local warp_icon_store = 'gui.left.warps.tags'
local warp_player_in_range_store = 'gui.left.warps.allowed'
local warp_player_in_range_store = 'gui.left.warps.in_range'
local warp_details = {}
local force_warps = {}
local keep_open = {}
Global.register({
warp_details=warp_details,
force_warps=force_warps
force_warps=force_warps,
keep_open=keep_open
},function(tbl)
force_warps = tbl.force_warps
warp_details = tbl.warp_details
keep_open = tbl.keep_open
end)
--- Returns if a player is allowed to edit the given warp
@@ -247,7 +250,9 @@ Gui.new_progressbar()
style.color = Colors.light_blue
end)
:on_store_complete(function(player_name,reset)
Store.set(warp_player_in_range_store,player_name,true)
-- this is to force an update of the button
local in_range = Store.get(warp_player_in_range_store,player_name)
Store.set(warp_player_in_range_store,player_name,in_range)
end)
--- When the button is clicked it will teleport the player
@@ -274,7 +279,9 @@ end)
if config.bypass_warp_limits_permision and not Roles.player_allowed(player,config.bypass_warp_limits_permision) then
warp_timer:set_store(player.name,0)
Store.set(warp_player_in_range_store,player.name,false)
-- this is to force an update of the buttons
local in_range = Store.get(warp_player_in_range_store,player.name)
Store.set(warp_player_in_range_store,player.name,in_range)
end
end)
@@ -639,6 +646,9 @@ end)
generate_warp(player,data_table,warp_id)
end
end)
:on_player_toggle(function(player,element,visible)
keep_open[player.name] = visible
end)
--- When the name of a warp is updated this is triggered
Store.register(warp_name_store,function(value,warp_id)
@@ -691,6 +701,10 @@ Store.register(warp_player_in_range_store,function(value,player_name)
local timer = warp_timer:get_store(player_name)
local state = not timer and value
if not keep_open[player.name] then
Gui.toggle_left_frame(warp_list.name,player,value)
end
if force_warps[force.name] then
for _,warp_id in pairs(force_warps[force.name]) do
local element = table_area['icon-'..warp_id][goto_warp.name]
@@ -717,35 +731,33 @@ Event.on_nth_tick(math.floor(60/config.update_smothing),function()
end
for _,player in pairs(game.connected_players) do
local timer = warp_timer:get_store(player.name)
local role = config.bypass_warp_limits_permision and Roles.player_allowed(player,config.bypass_warp_limits_permision)
local was_in_range = Store.get(warp_player_in_range_store,player.name)
local force = player.force
local warps = force_warps[force.name]
if not timer and not role then
local force = player.force
local warps = force_warps[force.name]
if warps then
local surface = player.surface.index
local pos = player.position
local px,py = pos.x,pos.y
for _,warp_id in pairs(warps) do
local warp = warp_details[warp_id]
local wpos = warp.position
if warp.surface.index == surface then
local dx,dy = px-wpos.x,py-wpos.y
if not warp.editing and (dx*dx)+(dy*dy) < rs2 or (dx*dx)+(dy*dy) < r2 then
if warps then
local surface = player.surface.index
local pos = player.position
local px,py = pos.x,pos.y
for _,warp_id in pairs(warps) do
local warp = warp_details[warp_id]
local wpos = warp.position
if warp.surface.index == surface then
local dx,dy = px-wpos.x,py-wpos.y
if not warp.editing and (dx*dx)+(dy*dy) < rs2 or (dx*dx)+(dy*dy) < r2 then
if not was_in_range then
Store.set(warp_player_in_range_store,player.name,true)
return
end
return
end
end
end
if was_in_range then
Store.set(warp_player_in_range_store,player.name,false)
end
end
end
end)