Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 25 additions & 5 deletions wurst/_handles/Group.wurst
Original file line number Diff line number Diff line change
Expand Up @@ -111,14 +111,34 @@ public function group.get(int index) returns unit
return BlzGroupUnitAt(this, index)

/* Group iterator */
class GroupIterator
private group g
private int i = 0
private int n = 0

group iterGroup
construct(group source)
g = CreateGroup()
g.add(source)
n = g.size()

function hasNext() returns bool
return i < n

function next() returns unit
let u = g.get(i)
i += 1
return u

function close()
destroy this

ondestroy
g.clear()
g.destr()

/** Creates a new iterator for this group. */
public function group.iterator() returns group
iterGroup = CreateGroup()
iterGroup.add(this)
return iterGroup
public function group.iterator() returns GroupIterator
return new GroupIterator(this)

/** Returns whether the iterator has the next item */
public function group.hasNext() returns bool
Expand Down
3 changes: 2 additions & 1 deletion wurst/_handles/Trigger.wurst
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,8 @@ public function trigger.getExecCount() returns int
return GetTriggerExecCount(this)

public function trigger.registerAnyUnitEvent(playerunitevent whichEvent)
TriggerRegisterAnyUnitEventBJ(this, whichEvent)
for i = 0 to bj_MAX_PLAYER_SLOTS - 1
TriggerRegisterPlayerUnitEvent(this, Player(i), whichEvent, null)

public function trigger.registerDeathEvent(widget whichWidget) returns event
return TriggerRegisterDeathEvent(this, whichWidget)
Expand Down
6 changes: 3 additions & 3 deletions wurst/_handles/primitives/PrimitivesTests.wurst
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@ function testBoolean()

@Test
function testArrayLength()
let x = [1, 2, 3]
print("length: " + x.length.toString())
x.length.assertEquals(3)
let _x = [1, 2, 3]
print("length: " + _x.length.toString())
_x.length.assertEquals(3)

@Test
function testParity()
Expand Down
74 changes: 37 additions & 37 deletions wurst/closures/ClosureEvents.wurst
Original file line number Diff line number Diff line change
Expand Up @@ -187,39 +187,40 @@ public abstract class EventListener
// Unit Listeners
if trigUnit != null
let index = trigUnit.getIndex()
if fireEvents(trigUnit) and index > 0 and unitListenersFirsts[index] != null
if index > 0
var listener = unitListenersFirsts[index]
while listener != null
let nextListener = listener.next
if listener.eventId == id
listener.onEvent()
listener = nextListener
if listener != null and fireEvents(trigUnit)
while listener != null
let nextListener = listener.next
if listener.eventId == id
listener.onEvent()
listener = nextListener
// Global Listeners
if generalListenersFirsts[id] != null
var listener = generalListenersFirsts[id]
while listener != null
let nextListener = listener.next
listener.onEvent()
listener = nextListener
var globalListener = generalListenersFirsts[id]
if globalListener != null
while globalListener != null
let nextListener = globalListener.next
globalListener.onEvent()
globalListener = nextListener

static function onSpellEffect()
let trigUnit = GetTriggerUnit()
let abilId = GetSpellAbilityId()
let caster = GetSpellAbilityUnit()
let index = trigUnit.getIndex()
if castMapCasters[index] != null
var listener = castMapCasters[index]
while listener != null
let nextListener = listener.next
if listener.abilId == -1 or listener.abilId == abilId
listener.fire(GetSpellAbilityUnit())
listener = nextListener
if castMap.has(abilId)
var listener = castMap.get(abilId)
while listener != null
let nextListener = listener.next
if listener.eventUnit == null or listener.eventUnit == trigUnit
listener.fire(GetSpellAbilityUnit())
listener = nextListener
var listener = castMapCasters[index]
while listener != null
let nextListener = listener.next
if listener.abilId == -1 or listener.abilId == abilId
listener.fire(caster)
listener = nextListener

listener = castMap.get(abilId)
while listener != null
let nextListener = listener.next
if listener.eventUnit == null or listener.eventUnit == trigUnit
listener.fire(caster)
listener = nextListener

ondestroy
if uid < 0
Expand All @@ -240,7 +241,6 @@ public abstract class EventListener
next = null
prev = null

let unitTrig = CreateTrigger()
let leaveTrig = CreateTrigger()
let keyTrig = CreateTrigger()

Expand All @@ -257,10 +257,16 @@ function registerEventId(eventid evnt) returns int
let eventId = evnt.getHandleId()
eventTypeCounter++
eventidToIndex[eventId] = eventTypeCounter
if evnt.isPlayerunitEvent()
if evnt == EVENT_UNIT_DAMAGED
eventidToIndex[EVENT_PLAYER_UNIT_DAMAGED.getHandleId()] = eventTypeCounter
registerPlayerUnitEvent(EVENT_PLAYER_UNIT_DAMAGED, function EventListener.generalEventCallback)
else if evnt == EVENT_PLAYER_UNIT_DAMAGED
eventidToIndex[EVENT_UNIT_DAMAGED.getHandleId()] = eventTypeCounter
registerPlayerUnitEvent(EVENT_PLAYER_UNIT_DAMAGED, function EventListener.generalEventCallback)
else if evnt.isPlayerunitEvent()
registerPlayerUnitEvent(ConvertPlayerUnitEvent(eventId), function EventListener.generalEventCallback)
else if evnt != EVENT_UNIT_DAMAGED and evnt != EVENT_PLAYER_LEAVE and evnt != EVENT_PLAYER_CHAT_FILTER and not evnt.isKeyboardEvent() and not evnt.isMouseEvent()
error("registering handleid: " + eventId.toString() + " non-playerunitevent. Except EVENT_UNIT_DAMAGED and EVENT_PLAYER_LEAVE these are not supported right now.")
else if evnt != EVENT_PLAYER_LEAVE and evnt != EVENT_PLAYER_CHAT_FILTER and not evnt.isKeyboardEvent() and not evnt.isMouseEvent()
error("registering handleid: " + eventId.toString() + " non-playerunitevent. Except EVENT_PLAYER_LEAVE these are not supported right now.")
if evnt.isMouseEvent() and not EventListener.useMouseEvents
EventListener.useMouseEvents = true
for i = 0 to bj_MAX_PLAYERS - 1
Expand All @@ -269,10 +275,6 @@ function registerEventId(eventid evnt) returns int
..registerPlayerEvent(players[i], EVENT_PLAYER_MOUSE_MOVE)
return eventTypeCounter

function registerEventsForUnit(unit u)
if fireEvents(u)
unitTrig.registerUnitEvent(u, EVENT_UNIT_DAMAGED)

public function unregisterEventsForUnit(unit u)
if fireEvents(u)
let index = u.getIndex()
Expand All @@ -298,12 +300,10 @@ public function unregisterEvents(int id)


init
// Un/Register Events when unit enters map
onUnitIndex(() -> registerEventsForUnit(getIndexingUnit()))
// Clean up per-unit listener lists when units are deindexed.
onUnitDeindex(() -> unregisterEventsForUnit(getIndexingUnit()))

nullTimer() ->
unitTrig.addAction(() -> EventListener.generalEventCallback())
leaveTrig.addAction(() -> EventListener.generalEventCallback())
keyTrig.addAction(() -> EventListener.generalEventCallback())

Expand Down
Loading