- Joined
- Feb 2, 2020
- Messages
- 14
Good work
library GridSystem initializer init
//Grid System By CanFight
globals
private image array gridEffect
private boolean showHide
private boolean waitForClick
private integer gridRed = 200
private integer gridGreen = 200
private integer gridBlue = 200
private integer gridAlpha = 255
private integer gridSize = 8
private integer gridSizeMax = 32
private integer gridSizeMin = 4
endglobals
private function ShowHideGrid takes nothing returns nothing
local integer i = 0
if GetLocalPlayer() == GetTriggerPlayer() then
if showHide then
set showHide = false
loop
exitwhen i >= gridSizeMax * gridSizeMax
call SetImageColor(gridEffect[i],255,255,255,0)
set i = i + 1
endloop
else
set waitForClick = true
endif
endif
endfunction
private function MouseMove takes nothing returns nothing endfunction
local real x = I2R(R2I(BlzGetTriggerPlayerMouseX()) / 128) * 128
local real y = I2R(R2I(BlzGetTriggerPlayerMouseY()) / 128) * 128
local real tx
local real ty
local integer i = 0
local integer ix = 0
local integer iy = 0
if GetLocalPlayer() == GetTriggerPlayer() then
if waitForClick then
set waitForClick = false
set showHide = true
loop
exitwhen i >= gridSize * gridSize
set tx = x + ix * 128 - gridSize / 2 * 128
set ty = y + iy * 128 - gridSize / 2 * 128
call SetImageColor(gridEffect[i],gridRed,gridGreen,gridBlue,gridAlpha)
call SetImagePosition(gridEffect[i],tx,ty,0)
set ix = ix + 1
if ix >= gridSize then
set ix = 0
set iy = iy + 1
endif
set i = i + 1
endloop
endif
endif
endfunction
private function GetHexSignValue takes string sign returns integer
if sign == "a" or sign == "A" then
return 10
endif
if sign == "b" or sign == "B" then
return 11
endif
if sign == "c" or sign == "C" then
return 12
endif
if sign == "d" or sign == "D" then
return 13
endif
if sign == "e" or sign == "E" then
return 14
endif
if sign == "f" or sign == "F" then
return 15
endif
return S2I(sign)
endfunction
private function SetGridProp takes nothing returns nothing
local string s = GetEventPlayerChatString()
local integer i = 0
if SubString(s, 0, 4) == "-gc " and GetLocalPlayer() == GetTriggerPlayer() then
set gridRed = GetHexSignValue(SubString(s, 4, 5)) * 16 + GetHexSignValue(SubString(s, 5, 6))
set gridGreen = GetHexSignValue(SubString(s, 6, 7)) * 16 + GetHexSignValue(SubString(s, 7, 8))
set gridBlue = GetHexSignValue(SubString(s, 8, 9)) * 16 + GetHexSignValue(SubString(s, 9, 10))
if showHide then
loop
exitwhen i >= gridSize * gridSize
call SetImageColor(gridEffect[i],gridRed,gridGreen,gridBlue,gridAlpha)
set i = i + 1
endloop
endif
return
endif
if SubString(s, 0, 4) == "-gs " and GetLocalPlayer() == GetTriggerPlayer() then
set gridSize = S2I(SubString(s, 4, 6))
if gridSize < gridSizeMin then
set gridSize = gridSizeMin
endif
if gridSize > gridSizeMax then
set gridSize = gridSizeMax
endif
set showHide = true
call ShowHideGrid()
endif
endfunction
private function init takes nothing returns nothing
local integer i = 0
local trigger t = CreateTrigger()
local trigger t2 = CreateTrigger()
local trigger t3 = CreateTrigger()
call TriggerAddAction(t, function ShowHideGrid)
call TriggerAddAction(t2, function MouseMove)
call TriggerAddAction(t3, function SetGridProp)
loop
exitwhen i > 23
call BlzTriggerRegisterPlayerKeyEvent(t, Player(i),OSKEY_G,0,true)
call TriggerRegisterPlayerEvent(t2, Player(i), EVENT_PLAYER_MOUSE_DOWN)
call TriggerRegisterPlayerChatEvent( t3, Player(i), "", false )
set i = i + 1
endloop
set showHide = false
set waitForClick = false
set i = 0
loop
exitwhen i >= gridSizeMax * gridSizeMax
set gridEffect[i] = CreateImage("Gridplane.dds",128,128,0,0,0,0, 1,1,1, 1)
call SetImageRenderAlways( gridEffect[i], true )
call SetImageColor( gridEffect[i], 255, 255, 255, 0)
set i = i + 1
endloop
endfunction
endlibrary
if Debug then Debug.beginFile "PlayerGrid" end
OnInit.global("PlayerGrid", function(require)
local BUTTON_KEY = OSKEY_G
GridSystem = {}
function GridSystem:init()
self.gridEffect = {}
self.showHide = false
self.waitForClick = false
self.gridRed = 200
self.gridGreen = 200
self.gridBlue = 200
self.gridAlpha = 255
self.gridSize = 8
self.gridSizeMax = 32
self.gridSizeMin = 4
for i = 1, self.gridSizeMax * self.gridSizeMax do
self.gridEffect[i] = CreateImage("Gridplane.dds", 128, 128, 0, 0, 0, 0, 1, 1, 1, 1)
SetImageRenderAlways(self.gridEffect[i], true)
SetImageColor(self.gridEffect[i], 255, 255, 255, 0)
end
local t = CreateTrigger()
local t2 = CreateTrigger()
local t3 = CreateTrigger()
for i = 0, bj_MAX_PLAYER_SLOTS do
BlzTriggerRegisterPlayerKeyEvent(t, Player(i), BUTTON_KEY, 0, true)
TriggerRegisterPlayerEvent(t2, Player(i), EVENT_PLAYER_MOUSE_DOWN)
TriggerRegisterPlayerChatEvent(t3, Player(i), "", false)
end
TriggerAddAction(t, function() self:ShowHideGrid() end)
TriggerAddAction(t2, function() self:MouseMove() end)
TriggerAddAction(t3, function() self:SetGridProp() end)
end
function GridSystem:ShowHideGrid()
if GetLocalPlayer() ~= GetTriggerPlayer() then
return
end
if self.showHide then
self.showHide = false
for i, image in ipairs(self.gridEffect) do
SetImageColor(image, 255, 255, 255, 0)
end
else
self.waitForClick = true
end
end
function GridSystem:MouseMove()
local x = math.floor(BlzGetTriggerPlayerMouseX() / 128) * 128
local y = math.floor(BlzGetTriggerPlayerMouseY() / 128) * 128
if GetLocalPlayer() ~= GetTriggerPlayer() or not self.waitForClick then return end
self.waitForClick = false
self.showHide = true
local ix, iy = 0, 0
for i, image in ipairs(self.gridEffect) do
if i > self.gridSize * self.gridSize then break end
local tx = x + ix * 128 - self.gridSize / 2 * 128
local ty = y + iy * 128 - self.gridSize / 2 * 128
SetImageColor(image, self.gridRed, self.gridGreen, self.gridBlue, self.gridAlpha)
SetImagePosition(image, tx, ty, 0)
ix = ix + 1
if ix >= self.gridSize then
ix = 0
iy = iy + 1
end
end
end
function GridSystem:GetHexSignValue(sign)
local hex = { ["a"] = 10, ["b"] = 11, ["c"] = 12, ["d"] = 13, ["e"] = 14, ["f"] = 15 }
return hex[sign:lower()] or tonumber(sign)
end
function GridSystem:SetGridProp()
local s = GetEventPlayerChatString()
if GetLocalPlayer() ~= GetTriggerPlayer() then
return
end
if s:sub(1, 4) == "-gc " then
self.gridRed = self:GetHexSignValue(s:sub(5, 5)) * 16 + self:GetHexSignValue(s:sub(6, 6))
self.gridGreen = self:GetHexSignValue(s:sub(7, 7)) * 16 + self:GetHexSignValue(s:sub(8, 8))
self.gridBlue = self:GetHexSignValue(s:sub(9, 9)) * 16 + self:GetHexSignValue(s:sub(10, 10))
if self.showHide then
for i, image in ipairs(self.gridEffect) do
if i > self.gridSize * self.gridSize then break end
SetImageColor(image, self.gridRed, self.gridGreen, self.gridBlue, self.gridAlpha)
end
end
elseif s:sub(1, 4) == "-gs " then
self.gridSize = tonumber(s:sub(5, 7))
self.gridSize = math.max(self.gridSizeMin, math.min(self.gridSize, self.gridSizeMax))
self.showHide = true
self:ShowHideGrid()
end
end
GridSystem:init()
end)
if Debug then Debug.endFile() end