- Joined
- Apr 24, 2012
- Messages
- 5,111
JASS:
library ChargedAbility/*v1.0
*************************************************************************************
*
* Charged Ability
*
*************************************************************************************
*
* */uses/*
*
* */Table/* hiveworkshop.com/forums/jass-functions-413/snippet-new-table-188084/
*
*************************************************************************************
*
* API
*
* static method create takes integer base returns thistype
* method setState takes integer abil, integer charge returns nothing
* method removeState takes integer charge returns nothing
* method pushState takes integer abil returns nothing
* method popState takes nothing returns nothing
*
* method pushCharge takes unit u, integer level returns nothing
* method popCharge takes unit u, integer level returns boolean
* method setCharge takes unit u, integer charge, integer level returns nothing
* method getCharge takes unit u returns integer
* method isFull takes unit u returns boolean
* method isEmpty takes unit u returns boolean
*
*************************************************************************************/
struct ChargedAbility
private Table t
private integer charges
method setState takes integer abil, integer charge returns nothing
if charge > 0 then
if charge > charges then
set charges = charges + 1
set charge = charges
endif
set t[charges] = abil
endif
endmethod
method removeState takes integer abil, integer charge returns nothing
if charges >= 1 and charge > 0 then
loop
exitwhen charge < charges
set t[charge] = t[charge + 1]
set charge = charge + 1
endloop
set charges = charges - 1
endif
endmethod
method pushState takes integer abil returns nothing
call setState(abil, charges + 1)
endmethod
method popState takes integer abil returns nothing
call removeState(t[charges], charges)
endmethod
static method create takes integer base returns thistype
local thistype this = allocate()
set t = Table.create()
set charges = 0
set t[0] = base
return this
endmethod
method getCharge takes unit u returns integer
local integer i
if u != null then
set i = charges
loop
exitwhen i == -1
if GetUnitAbilityLevel(u, t[i]) > 0 then
return i
endif
set i = i - 1
endloop
endif
return -1
endmethod
method isFull takes unit u returns boolean
if u != null then
return GetUnitAbilityLevel(u, t[charges]) > 0
endif
return false
endmethod
method isEmpty takes unit u returns boolean
if u != null then
return GetUnitAbilityLevel(u, t[0]) > 0
endif
return false
endmethod
method setCharge takes unit u, integer charge, integer level returns nothing
local integer c
if charge <= charges and charge >= 0 and u != null then
set c = getCharge(u)
if c > -1 then
call UnitRemoveAbility(u, t[c])
call UnitAddAbility(u, t[charge])
call SetUnitAbilityLevel(u, t[charge], level)
endif
endif
endmethod
method pushCharge takes unit u, integer level returns nothing
call setCharge(u, getCharge(u) + 1, level)
endmethod
method popCharge takes unit u, integer level returns boolean
local integer c = getCharge(u)
if c < 0 then
return false
endif
call setCharge(u, c - 1, level)
return true
endmethod
endstruct
endlibrary
To add:
- charged ability but uses only one ability
- and a much better documentation!
Attachments
Last edited: