Regions & Rects in GUI --> JASS

Deadly Paradox

New Member
Reaction score
0
I'm converting a trigger a friend made for teleporting "choosers" around the skill picking area. He used regions to detect when the choosers entered circles of power. It feels really clunky to use, though. Is there any better way?

JASS:
scope Movement initializer Init
 
    globals
        private real ToCustomSkillsX = 0
        private real ToCustomSkillsY = 0
        private real ToCustomTavernsX = 0
        private real ToCustomTavernsY = 0
    endglobals
    
    private function MoveToCustomSkills takes nothing returns boolean
        local unit u = GetTriggerUnit()
        call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\MassTeleport\\MassTeleportTarget.mdl", GetUnitX(u), GetUnitY(u)))
        call SetUnitPosition(u, ToCustomSkillsX, ToCustomSkillsY)
        call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\MassTeleport\\MassTeleportTarget.mdl", GetUnitX(u), GetUnitY(u)))
        if (GetOwningPlayer(u) == GetLocalPlayer()) then
            call PanCameraTo(ToCustomSkillsX, ToCustomSkillsY)
        endif
        set u = null
        return false
    endfunction
    
    private function MoveToCustomTaverns takes nothing returns boolean
        local unit u = GetTriggerUnit()
        call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\MassTeleport\\MassTeleportTarget.mdl", GetUnitX(u), GetUnitY(u)))
        call SetUnitPosition(u, ToCustomTavernsX, ToCustomTavernsY)
        call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\MassTeleport\\MassTeleportTarget.mdl", GetUnitX(u), GetUnitY(u)))
        if (GetOwningPlayer(u) == GetLocalPlayer()) then
            call PanCameraTo(ToCustomTavernsX, ToCustomTavernsY)
        endif
        set u = null
        return false
    endfunction
 
    private function Init takes nothing returns nothing
        local trigger t = CreateTrigger()
        set ToCustomTavernsX = GetRectCenterX(gg_rct_ToCustomTaverns)
        set ToCustomTavernsY = GetRectCenterY(gg_rct_ToCustomTaverns)
        call TriggerAddCondition(t, Condition(function MoveToCustomTaverns))
        call TriggerRegisterEnterRectSimple(t, gg_rct_EnterCustomTaverns)
        set t = CreateTrigger()
        set ToCustomSkillsX = GetRectCenterX(gg_rct_ToCustomSkills)
        set ToCustomSkillsY = GetRectCenterY(gg_rct_ToCustomSkills)
        call TriggerAddCondition(t, Condition(function MoveToCustomSkills))
        call TriggerRegisterEnterRectSimple(t, gg_rct_LeaveCustomTaverns)
    endfunction
 
endscope


EDIT: I've been trying to avoid BJ functions. Is TriggerRegisterEnterRectSimple() okay to use?
 

Avahor

New Member
Reaction score
0
hi.

well regions created via region editor really are rects with 4 coords.
you can use the function RegionAddRect

using your rect "gg_rct_ToCustomTaverns" like this:

Code:
globals
  trigger t
endglobals
 
function SetRegionEvent takes rect myrect returns nothing.
  local region myregion = CreateRegion()
 
  call RegionAddRect(myregion,myrect)
  call TriggerRegisterEnterRegion(t, myregion, null)
endfunction
 
    private function Init takes nothing returns nothing
        set t = CreateTrigger()//trigger declared in globlas
        set ToCustomTavernsX = GetRectCenterX(gg_rct_ToCustomTaverns)
        set ToCustomTavernsY = GetRectCenterY(gg_rct_ToCustomTaverns)
 
    call SetRegionEvent(gg_rct_EnterCustomTaverns)
    call TriggerAddCondition(t, Condition(function MoveToCustomTaverns))
    call TriggerAddAction(t, Condition(function Actions))
 
     
    endfunction

i recommend to use two diferents triggers instead of one for entering and leaving events, using one will cause error
 

Avahor

New Member
Reaction score
0
so it´s another example. Indexing rects will help you to reduce strongly the code.
declaring rects array
globals
rect array myrects
endglobals


//setting rect array in some initialization trigger
set myrects[1] = gg_rct_ToCustomTaverns
set myrects[2] = gg_rct_sometavern
set myrects[3] = gg_rct_somedungeon
set myrects[4] = gg_rct_somecastle

using this you only need a number into register region event.

the RegionAddRect function will be like this:

JASS:
function SetRegionEvent takes integer numberRect returns nothing.
local region myregion = CreateRegion()
 
call RegionAddRect(myregion,myrects[numberRect])
call TriggerRegisterEnterRegion(t, myregion, null)
endfunction
 
//calling the function
 
private function Init takes nothing returns nothing
set t = CreateTrigger()//trigger declared in globlas
set ToCustomTavernsX = GetRectCenterX(gg_rct_ToCustomTaverns)
set ToCustomTavernsY = GetRectCenterY(gg_rct_ToCustomTaverns)
 
call SetRegionEvent(1)
call TriggerAddCondition(t, Condition(function MoveToCustomTaverns))
call TriggerAddAction(t, Condition(function Actions))
 
endfunction
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top