library MinimapFrames initializer MinimapFrameInit
globals
// DEFINE THIS:
integer your_map_size = 64 // 64 x 64
// DON'T EDIT:
framehandle array frames
boolean array key_is_down
real array map_x
real array map_y
framehandle minimap
integer frame_count = 0
real original_offset = 0.01
real original_size = 0.015
real new_offset
real new_size
real top_left_corner_x
real map_offset
endglobals
function MinimapFrameKeyUp takes nothing returns nothing
local player p = GetTriggerPlayer()
local integer id = GetPlayerId(p)
local integer i = 0
set key_is_down[id] = false
//call DisplayTextToPlayer(Player(0), 0, 0, "Left Control key is up")
loop
// Hide the frames so they can't be used
if (GetLocalPlayer() == p) then
call BlzFrameSetVisible(frames[i], false)
endif
set i = i + 1
exitwhen i == frame_count
endloop
set p = null
endfunction
function MinimapFrameKeyDown takes nothing returns nothing
local player p = GetTriggerPlayer()
local integer id = GetPlayerId(p)
local integer i = 0
// This will keep running so let's avoid repeats
if key_is_down[id] then
set p = null
return
endif
set key_is_down[id] = true
//call DisplayTextToPlayer(Player(0), 0, 0, "Left Control key is down")
loop
// Show the frames so they can be used
if (GetLocalPlayer() == p) then
call BlzFrameSetVisible(frames[i], true)
endif
set i = i + 1
exitwhen i == frame_count
endloop
set p = null
endfunction
function MinimapFrameClicked takes nothing returns nothing
local player p = GetTriggerPlayer()
local integer id = GetConvertedPlayerId(p)
local framehandle fh = BlzGetTriggerFrame()
local integer index = S2I(BlzFrameGetText(fh))
//call DisplayTextToPlayer(Player(0), 0, 0, "Pressed button: " + I2S(index))
///////////////////////////////////////////
// This is all GUI stuff (optional)
set udg_MinimapFramesPlayer = p
set udg_MinimapFramesX[id] = map_x[index]
set udg_MinimapFramesY[id] = map_y[index]
call TriggerExecute(udg_MinimapFramesTrigger)
///////////////////////////////////////////
call BlzFrameSetEnable(fh, false)
call BlzFrameSetEnable(fh, true)
set p = null
set fh = null
endfunction
function MinimapFrameCreate takes real x, real y returns framehandle
//local framehandle fh = BlzCreateSimpleFrame("MySimpleButton", minimap, 0)
local framehandle fh = BlzCreateFrameByType("GLUETEXTBUTTON", "MyScriptDialogButton", minimap, "ScriptDialogButton", 0)
call BlzFrameSetPoint(fh, FRAMEPOINT_CENTER, minimap, FRAMEPOINT_CENTER, x, y)
call BlzFrameSetSize(fh, new_size, new_size)
//call BlzFrameSetEnable(fh, false)
call BlzFrameSetVisible(fh, false)
call BlzFrameSetAlpha(fh, 0)
set frame_count = frame_count + 1
call BlzFrameSetText(fh, I2S(frame_count))
set frames[frame_count] = fh
return fh
endfunction
function MinimapFrameInit takes nothing returns nothing
local trigger t1 = CreateTrigger()
local trigger t2 = CreateTrigger()
local trigger t3 = CreateTrigger()
local framehandle fh = null
local integer count = 0
local real baseX = -0.075 - 0.001
local real x = baseX
local real y = 0.065
local real y_offset = 0.01 * (14.0 / 16.0)
local integer width = 16
local integer total = width * width
local integer x2 = 0
local integer y2 = 1
set new_offset = original_offset * (14.0 / 16.0)
set new_size = original_size * (14.0 / 16.0)
set top_left_corner_x = (your_map_size * 64) * -1
set map_offset = your_map_size * 8
//call DisplayTextToPlayer(Player(0), 10, 0, "map_offset " + R2S(map_offset) )
//call DisplayTextToPlayer(Player(0), 10, 0, "top_left_corner_x " + R2S(top_left_corner_x) )
//call DisplayTextToPlayer(Player(0), 10, 0, "top_left_corner_y " + R2S(top_left_corner_y) )
//call DisplayTextToPlayer(Player(0), 10, 0, "width " + I2S(width) )
//call DisplayTextToPlayer(Player(0), 10, 0, "total " + I2S(total) )
//call DisplayTextToPlayer(Player(0), 10, 0, "new_offset " + R2S(new_offset) )
//call DisplayTextToPlayer(Player(0), 10, 0, "new_size " + R2S(new_size) )
set minimap = BlzGetOriginFrame(ORIGIN_FRAME_MINIMAP, 0)
//call BlzLoadTOCFile("war3mapImported\\MySimpleButton.toc")
call BlzTriggerRegisterPlayerKeyEvent(t2, Player(0), OSKEY_LCONTROL, 2, true)
call BlzTriggerRegisterPlayerKeyEvent(t3, Player(0), OSKEY_LCONTROL, 0, false)
call TriggerAddAction(t2, function MinimapFrameKeyDown)
call TriggerAddAction(t3, function MinimapFrameKeyUp)
loop
if count != 0 and ModuloInteger(count, width) == 0 then
set x = baseX
set y = y - y_offset
set y2 = y2 + 1
set x2 = 0
endif
set count = count + 1
set x2 = x2 + 1
set x = x + new_offset
set fh = MinimapFrameCreate(x, y)
call BlzTriggerRegisterFrameEvent(t1, fh, FRAMEEVENT_CONTROL_CLICK)
// Calculate the map x/y coordinates (frame_count is the same as count)
set map_x[count] = (top_left_corner_x + (map_offset * x2)) - (map_offset / 2)
set map_y[count] = ((top_left_corner_x * -1) - (map_offset * y2)) + (map_offset / 2)
exitwhen count > total // 16 * 16 = 256
endloop
call TriggerAddAction(t1, function MinimapFrameClicked)
set t1 = null
set t2 = null
set t3 = null
set fh = null
endfunction
endlibrary