atom0s
8 years ago
1 changed files with 235 additions and 0 deletions
@ -0,0 +1,235 @@
@@ -0,0 +1,235 @@
|
||||
--[[ |
||||
* Ashita - Copyright (c) 2014 - 2016 atom0s [atom0s@live.com] |
||||
* |
||||
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. |
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to |
||||
* Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. |
||||
* |
||||
* By using Ashita, you agree to the above license and its terms. |
||||
* |
||||
* Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were |
||||
* made. You must do so in any reasonable manner, but not in any way that suggests the licensor |
||||
* endorses you or your use. |
||||
* |
||||
* Non-Commercial - You may not use the material (Ashita) for commercial purposes. |
||||
* |
||||
* No-Derivatives - If you remix, transform, or build upon the material (Ashita), you may not distribute the |
||||
* modified material. You are, however, allowed to submit the modified works back to the original |
||||
* Ashita project in attempt to have it added to the original project. |
||||
* |
||||
* You may not apply legal terms or technological measures that legally restrict others |
||||
* from doing anything the license permits. |
||||
* |
||||
* No warranties are given. |
||||
]]-- |
||||
|
||||
_addon.author = 'atom0s'; |
||||
_addon.name = 'ImGui Style'; |
||||
_addon.version = '3.0.0'; |
||||
|
||||
require 'common' |
||||
|
||||
---------------------------------------------------------------------------------------------------- |
||||
-- Variables |
||||
---------------------------------------------------------------------------------------------------- |
||||
local show_style_window = nil; |
||||
|
||||
--------------------------------------------------------------------------------------------------- |
||||
-- func: SaveImGuiStyle |
||||
-- desc: Saves the current ImGui style for the current player. |
||||
--------------------------------------------------------------------------------------------------- |
||||
local function SaveImGuiStyle() |
||||
-- Obtain the local player entity.. |
||||
local p = GetPlayerEntity(); |
||||
if (p == nil) then return; end; |
||||
|
||||
-- Ensure we have a name.. |
||||
if (p.Name == nil or string.len(p.Name) == 0) then |
||||
return; |
||||
end |
||||
|
||||
-- Obtain the current style.. |
||||
local s = imgui.style; |
||||
|
||||
-- Build a style block to save.. |
||||
local f = { }; |
||||
f.Alpha = s.Alpha; |
||||
f.WindowPadding = { s.WindowPadding.x, s.WindowPadding.y }; |
||||
f.WindowMinSize = { s.WindowMinSize.x, s.WindowMinSize.y }; |
||||
f.WindowRounding = s.WindowRounding; |
||||
f.WindowTitleAlign = s.WindowTitleAlign; |
||||
f.ChildWindowRounding = s.ChildWindowRounding; |
||||
f.FramePadding = { s.FramePadding.x, s.FramePadding.y }; |
||||
f.FrameRounding = s.FrameRounding; |
||||
f.ItemSpacing = { s.ItemSpacing.x, s.ItemSpacing.y }; |
||||
f.ItemInnerSpacing = { s.ItemInnerSpacing.x, s.ItemInnerSpacing.y }; |
||||
f.TouchExtraPadding = { s.TouchExtraPadding.x, s.TouchExtraPadding.y }; |
||||
f.IndentSpacing = s.IndentSpacing; |
||||
f.ColumnsMinSpacing = s.ColumnsMinSpacing; |
||||
f.ScrollbarSize = s.ScrollbarSize; |
||||
f.ScrollbarRounding = s.ScrollbarRounding; |
||||
f.GrabMinSize = s.GrabMinSize; |
||||
f.GrabRounding = s.GrabRounding; |
||||
f.DisplayWindowPadding = { s.DisplayWindowPadding.x, s.DisplayWindowPadding.y }; |
||||
f.DisplaySafeAreaPadding = { s.DisplaySafeAreaPadding.x, s.DisplaySafeAreaPadding.y }; |
||||
f.AntiAliasedLines = s.AntiAliasedLines; |
||||
f.AntiAliasedShapes = s.AntiAliasedShapes; |
||||
f.CurveTessellationTol = s.CurveTessellationTol; |
||||
|
||||
f.colors = { }; |
||||
for x = 0, ImGuiCol_ModalWindowDarkening do |
||||
f.colors[x] = { s.Colors[x].x, s.Colors[x].y, s.Colors[x].z, s.Colors[x].w }; |
||||
end |
||||
|
||||
-- Save the style.. |
||||
ashita.settings.save(_addon.path .. 'settings/' .. p.Name .. '.json', f); |
||||
|
||||
print('[ImGuiStyle] Saved player UI configurations!'); |
||||
end |
||||
|
||||
--------------------------------------------------------------------------------------------------- |
||||
-- func: LoadImGuiStyle |
||||
-- desc: Loads the current players style. |
||||
--------------------------------------------------------------------------------------------------- |
||||
local function LoadImGuiStyle(name) |
||||
local f = ashita.settings.load(_addon.path .. 'settings/' .. name .. '.json', f); |
||||
if (f == nil) then return; end |
||||
|
||||
local s = imgui.style; |
||||
|
||||
s.Alpha = f.Alpha; |
||||
s.WindowPadding = ImVec2(f.WindowPadding[1], f.WindowPadding[2]); |
||||
s.WindowMinSize = ImVec2(f.WindowMinSize[1], f.WindowMinSize[2]); |
||||
s.WindowRounding = f.WindowRounding; |
||||
s.WindowTitleAlign = f.WindowTitleAlign; |
||||
s.ChildWindowRounding = f.ChildWindowRounding; |
||||
s.FramePadding = ImVec2(f.FramePadding[1], f.FramePadding[2]); |
||||
s.FrameRounding = f.FrameRounding; |
||||
s.ItemSpacing = ImVec2(f.ItemSpacing[1], f.ItemSpacing[2]); |
||||
s.ItemInnerSpacing = ImVec2(f.ItemInnerSpacing[1], f.ItemInnerSpacing[2]); |
||||
s.TouchExtraPadding = ImVec2(f.TouchExtraPadding[1], f.TouchExtraPadding[2]); |
||||
s.IndentSpacing = f.IndentSpacing; |
||||
s.ColumnsMinSpacing = f.ColumnsMinSpacing; |
||||
s.ScrollbarSize = f.ScrollbarSize; |
||||
s.ScrollbarRounding = f.ScrollbarRounding; |
||||
s.GrabMinSize = f.GrabMinSize; |
||||
s.GrabRounding = f.GrabRounding; |
||||
s.DisplayWindowPadding = ImVec2(f.DisplayWindowPadding[1], f.DisplayWindowPadding[2]); |
||||
s.DisplaySafeAreaPadding = ImVec2(f.DisplaySafeAreaPadding[1], f.DisplaySafeAreaPadding[2]); |
||||
s.AntiAliasedLines = f.AntiAliasedLines; |
||||
s.AntiAliasedShapes = f.AntiAliasedShapes; |
||||
s.CurveTessellationTol = f.CurveTessellationTol; |
||||
|
||||
for x = 0, ImGuiCol_ModalWindowDarkening do |
||||
ashita.gui.stylecolor(x, ImVec4(f.colors[tostring(x)][1], f.colors[tostring(x)][2], f.colors[tostring(x)][3], f.colors[tostring(x)][4])); |
||||
end |
||||
end |
||||
|
||||
---------------------------------------------------------------------------------------------------- |
||||
-- func: print_help |
||||
-- desc: Displays a help block for proper command usage. |
||||
---------------------------------------------------------------------------------------------------- |
||||
local function print_help(cmd, help) |
||||
-- Print the invalid format header.. |
||||
print('\31\200[\31\05' .. _addon.name .. '\31\200]\30\01 ' .. '\30\68Invalid format for command:\30\02 ' .. cmd .. '\30\01'); |
||||
|
||||
-- Loop and print the help commands.. |
||||
for k, v in pairs(help) do |
||||
print('\31\200[\31\05' .. _addon.name .. '\31\200]\30\01 ' .. '\30\68Syntax:\30\02 ' .. v[1] .. '\30\71 ' .. v[2]); |
||||
end |
||||
end |
||||
|
||||
---------------------------------------------------------------------------------------------------- |
||||
-- func: load |
||||
-- desc: Event called when the addon is being loaded. |
||||
---------------------------------------------------------------------------------------------------- |
||||
ashita.register_event('load', function() |
||||
show_style_window = imgui.CreateVar(1); |
||||
|
||||
-- Obtain the local player entity.. |
||||
local p = GetPlayerEntity(); |
||||
if (p == nil) then return; end; |
||||
|
||||
-- Ensure we have a name.. |
||||
if (p.Name == nil or string.len(p.Name) == 0) then |
||||
return; |
||||
end |
||||
|
||||
-- Load the current players settings.. |
||||
LoadImGuiStyle(p.Name); |
||||
end); |
||||
|
||||
---------------------------------------------------------------------------------------------------- |
||||
-- func: unload |
||||
-- desc: Event called when the addon is being unloaded. |
||||
---------------------------------------------------------------------------------------------------- |
||||
ashita.register_event('unload', function() |
||||
if (show_style_window ~= nil) then |
||||
imgui.DeleteVar(show_style_window); |
||||
end |
||||
end); |
||||
|
||||
---------------------------------------------------------------------------------------------------- |
||||
-- func: command |
||||
-- desc: Event called when a command was entered. |
||||
---------------------------------------------------------------------------------------------------- |
||||
ashita.register_event('command', function(command, ntype) |
||||
local args = command:args(); |
||||
|
||||
-- Ensure this is an imguistyle command.. |
||||
if (args[1] ~= '/imguistyle') then |
||||
return false; |
||||
end |
||||
|
||||
-- Toggles the editor.. |
||||
if (#args == 1 or args[2] == 'show') then |
||||
if (show_style_window ~= nil) then |
||||
imgui.SetVarValue(show_style_window, not imgui.GetVarValue(show_style_window)); |
||||
end |
||||
return true; |
||||
end |
||||
|
||||
-- Saves the style.. |
||||
if (#args == 2 and args[2] == 'save') then |
||||
SaveImGuiStyle(); |
||||
return true; |
||||
end |
||||
|
||||
print_help('/imguistyle', { |
||||
{ '/imguistyle show', '- Toggles the ImGui style editor window on and off.' }, |
||||
{ '/imguistyle save', '- Saves the current style to the players personal settings file.' }, |
||||
}); |
||||
return true; |
||||
end); |
||||
|
||||
---------------------------------------------------------------------------------------------------- |
||||
-- func: render |
||||
-- desc: Event called when the addon is being rendered. |
||||
---------------------------------------------------------------------------------------------------- |
||||
ashita.register_event('render', function() |
||||
if (show_style_window == nil) then |
||||
return; |
||||
end |
||||
|
||||
if (imgui.GetVarValue(show_style_window) == true) then |
||||
imgui.Begin('Style Editor'); |
||||
imgui.ShowStyleEditor(); |
||||
imgui.End(); |
||||
end |
||||
end); |
||||
|
||||
--------------------------------------------------------------------------------------------------- |
||||
-- func: incoming_packet |
||||
-- desc: Called when our addon receives an incoming packet. |
||||
--------------------------------------------------------------------------------------------------- |
||||
ashita.register_event('incoming_packet', function(id, size, data) |
||||
-- Look for zoning / login packets to load |
||||
-- player specific configs.. |
||||
if (id == 0x000A) then |
||||
-- Get the players name and load their config.. |
||||
local name = struct.unpack('s', data, 0x84 + 1); |
||||
LoadImGuiStyle(name); |
||||
end |
||||
|
||||
return false; |
||||
end); |
Loading…
Reference in new issue