- Joined
- Mar 21, 2011
- Messages
- 1,611
At the start of my game, i want to create a dialog window for player 1 to select settings like game length and item spawn rate etc.
I made this in GUI and want to make the same thing in vJass now, but i fail horribly xD
How it works:
There is a main dialog window that shows all options with the current setting behind it in "[]"
--------TITLE_SETTINGS-------------
--------TIME [2 minutes]-------------
--------ITEMS [40 seconds]----------
When you click on TIME for example, it will show a new dialog with the different minutes to set.
--------TITLE_TIME-------------
--------2 minutes---------------
--------4 minutes--------------
If you select one of those, you will return back to the Setting dialog with the new setting inside the bracket
example:
TIME [2 minutes] ---> TIME [4 minutes]
because the subsettings dialogbuttons are constant in their name (they do never change), i create all of those dialogs at the beginning of the game and show/hide them on klick. However, the main dialog always changes because of the data in the brackets "[]". So i create and destroy this one.
Until now, when i click on a button, no sub dialog disappears and i cannot click on sth else on the map. seems like it is there but not visible? i dunno.
I made this in GUI and want to make the same thing in vJass now, but i fail horribly xD
How it works:
There is a main dialog window that shows all options with the current setting behind it in "[]"
--------TITLE_SETTINGS-------------
--------TIME [2 minutes]-------------
--------ITEMS [40 seconds]----------
When you click on TIME for example, it will show a new dialog with the different minutes to set.
--------TITLE_TIME-------------
--------2 minutes---------------
--------4 minutes--------------
If you select one of those, you will return back to the Setting dialog with the new setting inside the bracket
example:
TIME [2 minutes] ---> TIME [4 minutes]
because the subsettings dialogbuttons are constant in their name (they do never change), i create all of those dialogs at the beginning of the game and show/hide them on klick. However, the main dialog always changes because of the data in the brackets "[]". So i create and destroy this one.
Until now, when i click on a button, no sub dialog disappears and i cannot click on sth else on the map. seems like it is there but not visible? i dunno.
JASS:
/* ---------------Dialog Settings--------------- */
set DialogItemBoxText[0] = "|cffffffffOften|r"
set DialogItemBoxText[1] = "|cffffffffMedium|r"
set DialogItemBoxText[2] = "|cffffffffLow|r"
set DialogItemBoxText[3] = "|cffffffffOff|r"
set DialogItemBoxValue[0] = 25
set DialogItemBoxValue[1] = 50
set DialogItemBoxValue[2] = 75
set DialogItemBoxValue[3] = 0
set DialogItemBoxSetting = 1
set DialogTimeText[0] = "|cffffffff10 minutes|r"
set DialogTimeText[1] = "|cffffffff15 minutes|r"
set DialogTimeText[2] = "|cffffffff20 minutes|r"
set DialogTimeValue[0] = 600
set DialogTimeValue[1] = 900
set DialogTimeValue[2] = 1200
set DialogTimeSetting = 0
set DialogEventText[0] = "|cffffffff120 seconds|r"
set DialogEventText[1] = "|cffffffff160 seconds|r"
set DialogEventText[2] = "|cffffffff200 seconds|r"
set DialogEventText[3] = "|cffffffffOff|r"
set DialogEventValue[0] = 120
set DialogEventValue[1] = 160
set DialogEventValue[2] = 200
set DialogEventValue[3] = 0
set DialogEventSetting = 1
set DialogAreaText[0] = "|cffffffffBloomfield|r"
set DialogAreaText[1] = "|cffffffffIslands|r"
set DialogAreaValue[0] = 0
set DialogAreaValue[1] = 1
set DialogAreaSetting = 0
set DialogVehicleText[0] = "|cffffffffOften|r"
set DialogVehicleText[1] = "|cffffffffMedium|r"
set DialogVehicleText[2] = "|cffffffffLow|r"
set DialogVehicleText[3] = "|cffffffffOff|r"
set DialogVehicleValue[0] = 170
set DialogVehicleValue[1] = 215
set DialogVehicleValue[2] = 260
set DialogVehicleValue[3] = 0
set DialogVehicleSetting = 1
/* --------------------------------------------- */
JASS:
library Dialog /* v.1.1.0.0
**************************************************
*
* A struct wrapper for easy dialog creation.
*
**************************************************
*
*/ requires Table /* [url]http://www.hiveworkshop.com/forums/jass-resources-412/snippet-new-table-188084/[/url]
*
**************************************************
*
* struct Dialog
*
* static method create() returns thistype
*
* Creates a new dialog and returns its instance.
*
* method operator title= takes string s
*
* Sets the title message for the dialog.
*
* method addButton( string text, integer hotkey ) returns button
*
* Adds a button to the dialog that reads <text>.
* The hotkey serves as a shortcut to press a dialog
* button. Example input: 'a', 'b', 512 (esc).
*
* method display( player p, boolean flag )
*
* Shows/hides a dialog for a particular player.
*
* method displayAll( boolean flag )
*
* Shows/hides a dialog for all players.
*
* method clear()
*
* Clears a dialog of its message and buttons.
*
* method destroy()
*
* Destroys a dialog and its instance.
*
* -- Event API --
*
* method registerClickEvent( boolexpr b )
*
* Registers when a dialog button is clicked.
*
* static method getClickedDialog() returns Dialog
* static method getClickedButton() returns button
* static method getPlayer() returns player
*
* Event responses.
*
**************************************************
*
* Constants - Credits to DysfunctionaI for the list!
*/
globals
constant integer KEY_SPACEBAR = 32
/* Number Pad */
constant integer KEY_NUMPAD_0 = 257
constant integer KEY_NUMPAD_1 = 258
constant integer KEY_NUMPAD_2 = 259
constant integer KEY_NUMPAD_3 = 260
constant integer KEY_NUMPAD_4 = 261
constant integer KEY_NUMPAD_5 = 262
constant integer KEY_NUMPAD_6 = 263
constant integer KEY_NUMPAD_7 = 264
constant integer KEY_NUMPAD_8 = 265
constant integer KEY_NUMPAD_9 = 266
constant integer KEY_NUMPAD_PLUS = 267
constant integer KEY_NUMPAD_MINUS = 268
constant integer KEY_NUMPAD_ASTERISK = 269
constant integer KEY_NUMPAD_SLASH = 270
constant integer KEY_NUMPAD_PERIOD = 271
constant integer KEY_EQUALS = 272
constant integer KEY_MINUS = 273
constant integer KEY_LEFT_BRACKET = 274
constant integer KEY_RIGHT_BRACKET = 275
constant integer KEY_BACKSLASH = 276
constant integer KEY_SEMICOLON = 277
constant integer KEY_APOSTROPHE = 278
constant integer KEY_COMMA = 279
constant integer KEY_PERIOD = 280
constant integer KEY_SLASH = 281
constant integer KEY_ESCAPE = 512
constant integer KEY_BACKSPACE = 514
/* Arrows */
constant integer KEY_LEFT_ARROW = 516
constant integer KEY_UP_ARROW = 517
constant integer KEY_RIGHT_ARROW = 518
constant integer KEY_DOWN_ARROW = 519
constant integer KEY_INSERT = 520
constant integer KEY_DELETE = 521
constant integer KEY_HOME = 522
constant integer KEY_END = 523
constant integer KEY_PAGE_UP = 524
constant integer KEY_PAGE_DOWN = 525
constant integer KEY_CAPS_LOCK = 526
constant integer KEY_NUM_LOCK = 527
constant integer KEY_SCROLL_LOCK = 528
constant integer KEY_PAUSE = 529
/* Function Buttons */
constant integer KEY_F1 = 768
constant integer KEY_F2 = 769
constant integer KEY_F3 = 770
constant integer KEY_F4 = 771
constant integer KEY_F5 = 772
constant integer KEY_F6 = 773
constant integer KEY_F7 = 774
constant integer KEY_F8 = 775
constant integer KEY_F9 = 776
constant integer KEY_F10 = 777
constant integer KEY_F11 = 778
constant integer KEY_F12 = 779
endglobals
/*
**************************************************/
globals
private Table instance = 0
endglobals
private module DialogInit
private static method onInit takes nothing returns nothing
set instance = Table.create()
endmethod
endmodule
struct Dialog
private dialog dg
private trigger click
private string msg
static method getClickedDialog takes nothing returns thistype
return instance[GetHandleId(GetClickedDialog())]
endmethod
static method getClickedButton takes nothing returns button
return GetClickedButton()
endmethod
static method getPlayer takes nothing returns player
return GetTriggerPlayer()
endmethod
method operator title= takes string text returns nothing
call DialogSetMessage(this.dg, text)
set this.msg = text
endmethod
method addButton takes string text, integer hotkey returns button
return DialogAddButton(this.dg, text, hotkey)
endmethod
method display takes player p, boolean flag returns nothing
call DialogDisplay(p, this.dg, flag)
call DialogSetMessage(this.dg, this.msg)
endmethod
method displayAll takes boolean flag returns nothing
call DialogDisplay(GetLocalPlayer(), this.dg, flag)
call DialogSetMessage(this.dg, this.msg)
endmethod
method clear takes nothing returns nothing
call DialogClear(this.dg)
set this.msg = ""
endmethod
method registerClickEvent takes boolexpr b returns nothing
if this.click == null then
set instance[GetHandleId(this.dg)] = this
set this.click = CreateTrigger()
call TriggerRegisterDialogEvent(this.click, this.dg)
endif
call TriggerAddCondition(this.click, b)
endmethod
method destroy takes nothing returns nothing
debug if this.dg == null then
debug call DisplayTextToPlayer(GetLocalPlayer(), 0, 0, "[Dialog] Attempted to destroy null dialog.")
debug endif
if this.click != null then
call DestroyTrigger(this.click)
call instance.remove(GetHandleId(this.dg))
set this.click = null
endif
call DialogClear(this.dg)
call DialogDestroy(this.dg)
set this.dg = null
call this.deallocate()
endmethod
static method create takes nothing returns thistype
local thistype this = thistype.allocate()
set this.dg = DialogCreate()
return this
endmethod
implement DialogInit
endstruct
endlibrary
JASS:
scope DialogSettings initializer Init
globals
private button array buttons
private button array ButtonTime
private boolexpr bxpr
private Dialog Time
private Dialog Event
private Dialog ItemBox
private Dialog Vehicle
private Dialog Area
endglobals
private function DialogStart takes nothing returns nothing
local Dialog log = Dialog.create()
set log.title = "|cffFF7000Settings"
set buttons[0] = log.addButton("|cff7ebff1Time [|r" + DialogTimeText[DialogTimeSetting] + "|cff7ebff1]|r", 0)
set buttons[1] = log.addButton("|cff7ebff1Event [|r" + DialogEventText[DialogEventSetting] + "|cff7ebff1]|r", 0)
set buttons[2] = log.addButton("|cff7ebff1Item Box [|r" + DialogItemBoxText[DialogItemBoxSetting] + "|cff7ebff1]|r", 0)
set buttons[3] = log.addButton("|cff7ebff1Vehicle [|r" + DialogVehicleText[DialogVehicleSetting] + "|cff7ebff1]|r", 0)
set buttons[4] = log.addButton("|cff7ebff1Area [|r" + DialogAreaText[DialogAreaSetting] + "|cff7ebff1]|r", 0)
set buttons[5] = log.addButton("|cff20c000Ready|r", 0)
call log.display(Player(0), true)
call log.registerClickEvent(bxpr)
call ReleaseTimer(GetExpiredTimer())
endfunction
private function DialogEvent takes nothing returns boolean
local Dialog log = Dialog.getClickedDialog()
local button bt = Dialog.getClickedButton()
if bt == buttons[0] then
call Time.display(Player(0), true)
elseif bt == buttons[1] then
elseif bt == buttons[2] then
elseif bt == buttons[3] then
endif
/* ... */
call log.destroy()
set bt = null
return false
endfunction
private function DialogTime takes nothing returns boolean
local Dialog log = Dialog.getClickedDialog()
local button bt = Dialog.getClickedButton()
local integer index = 0
loop
exitwhen index > 3
if bt == ButtonTime[index] then
set DialogTimeSetting = index
endif
set index = index + 1
endloop
call log.display(Player(0), false)
call TimerStart(NewTimer(), 0, false, function DialogStart)
set bt = null
return false
endfunction
private function Init takes nothing returns nothing
local integer index = 0
set Time = Dialog.create()
set Time.title = "|cffFF7000Time"
loop
exitwhen index > 3
set ButtonTime[index] = Time.addButton(DialogTimeText[index], 0)
set index = index + 1
endloop
call Time.registerClickEvent(Condition(function DialogTime))
call TimerStart(NewTimer(), 0, false, function DialogStart)
set bxpr = Condition(function DialogEvent)
endfunction
endscope