From 658366249f309b2dc2d6c07eeda57676e337ed43 Mon Sep 17 00:00:00 2001 From: Cooldude2606 Date: Sat, 16 Dec 2017 17:54:28 +0000 Subject: [PATCH] Added Sliders --- ExpCore/GuiParts/inputs.lua | 45 +++++++++++++++++++++++++++++++++++-- ExpCore/GuiParts/test.lua | 14 +++++++++--- 2 files changed, 54 insertions(+), 5 deletions(-) diff --git a/ExpCore/GuiParts/inputs.lua b/ExpCore/GuiParts/inputs.lua index 9ffe8748..27d5c399 100644 --- a/ExpCore/GuiParts/inputs.lua +++ b/ExpCore/GuiParts/inputs.lua @@ -51,9 +51,14 @@ function inputs._input:draw(root) return root.add(data) elseif is_type(self.data._state,'function') then local data = table.deepcopy(self.draw_data) - local success, err = pcall(self.data._state,root) + local success, err = pcall(self.data._state,player,root) if success then data.state = err else error(err) end return root.add(data) + elseif is_type(self.data._start,'function') then + local data = table.deepcopy(self.draw_data) + local success, err = pcall(self.data._start,player,root) + if success then data.value = err else error(err) end + return root.add(data) else return root.add(self.draw_data) end @@ -74,7 +79,8 @@ function inputs.add(obj) type == 'radiobutton' or type == 'textfield' or type == 'text-box' or - type == 'slider' + type == 'slider' or + type == 'drop-down' then else return end if obj.type == 'button' or obj.type == 'sprite-button' then obj.style = mod_gui.button_style end obj.draw_data = table.deepcopy(obj) @@ -108,6 +114,7 @@ Event.register(inputs.events.click,inputs._event_handler) Event.register(inputs.events.elem,inputs._event_handler) Event.register(inputs.events.state,inputs._event_handler) Event.register(inputs.events.text,inputs._event_handler) +Event.register(inputs.events.slider,inputs._event_handler) -- the folwing functions are just to make inputs easier but if what you want is not include use inputs.add(obj) --- Used to define a button, can have many function @@ -263,6 +270,40 @@ function inputs.add_text(name,box,text,callback) return textbox end +--- Used to define a slider callback only on value_changed +-- @usage Gui.inputs.add_slider('test','horizontal',1,10,5,function) +-- @tparam string name the name of this button +-- @tapram string text the caption to go with the slider +-- @tparam number min the lowest number +-- @tparam number max the highest number +-- @param start_callback either a number or a function to return a number +-- @tparam function callback the function to be called on value_changed function(player,value,percent,element) +-- @treturn table the slider object that was made, to allow a custom error event if wanted +function inputs.add_slider(name,orientation,min,max,start_callback,callback) + local slider = inputs.add{ + type='slider', + name=name, + orientation=orientation, + minimum_value=min, + maximum_value=max, + value=start + } + slider.data._start = start_callback + slider.data._callback = callback + slider.data.max = max + slider:on_event('slider',function(event) + local player = Game.get_player(event) + local value = event.element.slider_value + local data = slider.data + local percent = value/data.max + if is_type(data._callback,'function') then + local success, err = pcall(data._callback,player,value,percent,event.element) + if not success then error(err) end + else error('Invalid Callback Condition Format') end + end) + return slider +end + return inputs -- to see examples look at GuiParts/test.lua diff --git a/ExpCore/GuiParts/test.lua b/ExpCore/GuiParts/test.lua index 5c9584f7..df385fb0 100644 --- a/ExpCore/GuiParts/test.lua +++ b/ExpCore/GuiParts/test.lua @@ -49,7 +49,7 @@ local elem_test = Gui.inputs.add_elem_button('test-elem','item','Testing Elems', player_return(elem.type..' '..elem.value,nil,player) end) -local check_test = Gui.inputs.add_checkbox('test-check',false,'Cheat Mode',function(parent) +local check_test = Gui.inputs.add_checkbox('test-check',false,'Cheat Mode',function(player,parent) return game.players[parent.player_index].cheat_mode end,function(player,element) player.cheat_mode = true @@ -57,8 +57,8 @@ end,function(player,element) player.cheat_mode = false end) -local radio_test = Gui.inputs.add_checkbox('test-radio',true,'Kill Self',function(parent) - return game.players[parent.player_index].in_combat +local radio_test = Gui.inputs.add_checkbox('test-radio',true,'Kill Self',function(player,parent) + return player.in_combat end,function(player,element) if player.character then player.character.die() end Gui.inputs.reset_radio(element.parent['test-radio-reset']) @@ -78,6 +78,13 @@ local box_test = Gui.inputs.add_text('test-box',true,'default text but a box',fu player_return(text,nil,player) end) +slider_test = Gui.inputs.add_slider('test-slider','vertical',0,5,function(player,parent) + return player.character_running_speed_modifier +end,function(player,value,percent,element) + player.character_running_speed_modifier = value + player_return('Value In Percent of Max '..percent*100,nil,player) +end) + local function test_gui(event) if not game.player and not event.player_index then return end local player = game.player or Game.get_player(event) @@ -93,6 +100,7 @@ local function test_gui(event) radio_test_reset:draw(frame) text_test:draw(frame) box_test:draw(frame) + slider_test:draw(frame) end Gui.toolbar.add('open-gui-test','Open Test Gui','Opens the test gui with every input',test_gui)