library WindowExample initializer initTest requires CWWindow
globals
private Destructable array EscButtons[15]
private Destructable array InfoButtons[15]
private Destructable array ThanksButtons[15]
private Destructable array SwitchHeroButtons[15]
private TrackAble array EscTracks[15]
private TrackAble array InfoTracks[15]
private TrackAble array ThanksTracks[15]
private TrackAble array SwitchHeroTracks[15]
private Destructable array selected[15]
private unit array heroes[15]
private integer array heroIDS[100]
private integer array curHero[15]
private integer maxHeroID = 1
endglobals
private function lockCamera takes nothing returns nothing
call SetCameraPosition(0, 0)
call SetCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK, 270, 0)
call SetCameraField(CAMERA_FIELD_TARGET_DISTANCE, 1000, 0)
endfunction
//! textmacro EW_addAction takes DEST_ID, X, Y, DESTSAFE, TRACKSAFE
set $TRACKSAFE$ = .createTrack(Player(i), "CustomWindow\\IconBase.mdx", dist2destdist($X$), dist2destdist($Y$), 0, 0.)
set $DESTSAFE$ = .createDestructable(Player(i), $DEST_ID$, 1.01, dist2destdist($X$), dist2destdist($Y$), 0.01, 270)
//! endtextmacro
private function changeUnit takes integer i returns nothing
set curHero[i] = curHero[i] +1
if curHero[i] > maxHeroID then
set curHero[i] = 0
endif
call RemoveUnit(heroes[i])
set heroes[i] = CreateUnit(Player(i), heroIDS[curHero[i]], 0., -64., 0.)
if GetLocalPlayer() != Player(i) then
call SetUnitVertexColor(heroes[i], 255, 255, 255, 0)
endif
endfunction
struct ExampleWindow extends Window
//==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
//: Methods
//==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
public method init takes nothing returns nothing
local integer i = 0
set heroIDS[0] = 'Hpal'
set heroIDS[1] = 'Hamg'
call makeBlack(bj_mapInitialPlayableArea)
call FogModifierStart(CreateFogModifierRect(Player(0), FOG_OF_WAR_VISIBLE, bj_mapInitialPlayableArea, false, false))
call TimerStart(CreateTimer(), 0.1, true, function lockCamera)
loop
exitwhen i >= 15
call changeUnit(i)
//! runtextmacro EW_addAction("'B000'", "400", "200", "EscButtons[i]", "EscTracks[i]")
//! runtextmacro EW_addAction("'B001'", "-400", "200", "InfoButtons[i]", "InfoTracks[i]")
//! runtextmacro EW_addAction("'B002'", "-400", "100", "ThanksButtons[i]", "ThanksTracks[i]")
//! runtextmacro EW_addAction("'B004'", "0", "-100", "SwitchHeroButtons[i]", "SwitchHeroTracks[i]")
set i = i + 1
endloop
endmethod
endstruct
public function exampleEvent takes Window eventWindow, TrackAble eventTrack returns nothing
//call BJDebugMsg("Window #" + I2S(integer(eventWindow)) + ": Event fires")
endfunction
public function exampleHit takes Window eventWindow, TrackAble eventTrack returns nothing
local trackable trackHandle = eventTrack.getHandle()
local integer i = GetPlayerId(eventTrack.getOwner())
//call BJDebugMsg("Player " + GetPlayerName(Player(i)) + " has clicked on trackable!")
call ClearTextMessages()
//: Compare data to see what happened
if trackHandle == EscTracks[i].getHandle() then
call EndGame(false)
endif
if trackHandle == InfoTracks[i].getHandle() then
call BJDebugMsg("This system was made by Anachron / dhk_undead_lord.")
call BJDebugMsg("Please give him credits if you use this.")
endif
if trackHandle == ThanksTracks[i].getHandle() then
call BJDebugMsg("Thanks for Deaod for his advanced knowledge and systems.")
call BJDebugMsg("Thanks to Vexorian for vJass <3.")
call BJDebugMsg("And thanks to hiveworkshop for hosting.")
endif
if trackHandle == SwitchHeroTracks[i].getHandle() then
call changeUnit(i)
endif
endfunction
public function exampleHover takes Window eventWindow, TrackAble eventTrack returns nothing
local trackable trackHandle = eventTrack.getHandle()
local integer i = GetPlayerId(eventTrack.getOwner())
local effect tmp = null
local real x = eventTrack.getX()
local real y = eventTrack.getY()
call ClearTextMessages()
if selected[i] != 0 then
call RemoveDestructable(selected[i].getHandle())
call selected[i].destroy()
endif
set selected[i] = eventWindow.createDestructable(Player(i), 'B003', 1.01, x, y, 0.01, 270)
if trackHandle == EscTracks[i].getHandle() then
call BJDebugMsg("Click on this icon to exit the game.")
endif
if trackHandle == InfoTracks[i].getHandle() then
call BJDebugMsg("Click meh!")
endif
if trackHandle == ThanksTracks[i].getHandle() then
call BJDebugMsg("Click meh too!")
endif
endfunction
private function initTest takes nothing returns nothing
//: Enable the Window, set the methods
//: to run on generalEvent, hit and hover event.
local ExampleWindow ew = ExampleWindow.create(exampleEvent, exampleHit, exampleHover)
call ew.init()
endfunction
endlibrary