Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Next Next commit
Add handler for command_update_target_unit_event
This is one step towards fixing Zerg Macro (ggtracker/ggtrackerstack#13,
ggtracker/ggtrackerstack#49) and Terran Macro
(ggtracker/ggtrackerstack#48)
  • Loading branch information
gravelweb committed Jun 11, 2016
commit 90bc21912507293ec1aeda9fcbb5dbb439aa6f03
12 changes: 12 additions & 0 deletions sc2reader/engine/plugins/context.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ def handleInitGame(self, event, replay):
replay.units = set()
replay.unit = dict()

# keep track of last TargetAbilityEvent for UpdateTargetAbilityEvent
self.last_target_ability_event = None

def handleGameEvent(self, event, replay):
self.load_message_game_player(event, replay)

Expand Down Expand Up @@ -47,6 +50,8 @@ def handleAbilityEvent(self, event, replay):
self.logger.error("Other unit {0} not found".format(event.other_unit_id))

def handleTargetAbilityEvent(self, event, replay):
self.last_target_ability_event = event

if not replay.datapack:
return

Expand All @@ -62,6 +67,13 @@ def handleTargetAbilityEvent(self, event, replay):
event.target = unit
replay.objects[event.target_unit_id] = unit

def handleUpdateTargetAbilityEvent(self, event, replay):
# store corresponding TargetAbilityEvent data in this event
# currently using for *MacroTracker only, so only need ability name
event.ability_name = self.last_target_ability_event.ability_name

self.handleTargetAbilityEvent(event, replay)

def handleSelectionEvent(self, event, replay):
if not replay.datapack:
return
Expand Down
16 changes: 16 additions & 0 deletions sc2reader/events/game.py
Original file line number Diff line number Diff line change
Expand Up @@ -339,6 +339,22 @@ def __init__(self, frame, pid, data):
self.location = (self.x, self.y, self.z)


class UpdateTargetAbilityEvent(TargetAbilityEvent):
"""
Extends :class:`TargetAbilityEvent`

This event is generated when a TargetAbilityEvent is updated, likely due to
changing the target unit. It is unclear if this needs to be a separate event
from TargetAbilityEvent, but for flexibility, it will be treated
differently.

One example of this event occuring is casting inject on a hatchery while
holding shift, and then shift clicking on a second hatchery.
"""

name = 'UpdateTargetAbilityEvent'


class SelfAbilityEvent(AbilityEvent):
"""
Extends :class:`AbilityEvent`
Expand Down
25 changes: 15 additions & 10 deletions sc2reader/readers.py
Original file line number Diff line number Diff line change
Expand Up @@ -1525,7 +1525,7 @@ def __init__(self):
61: (None, self.trigger_hotkey_pressed_event),
103: (None, self.command_manager_state_event),
104: (None, self.command_update_target_point_event),
105: (None, self.command_update_target_unit_event),
105: (UpdateTargetAbilityEvent, self.command_update_target_unit_event),
106: (None, self.trigger_anim_length_query_by_name_event),
107: (None, self.trigger_anim_length_query_by_props_event),
108: (None, self.trigger_anim_offset_event),
Expand Down Expand Up @@ -1596,19 +1596,24 @@ def command_update_target_point_event(self, data):

def command_update_target_unit_event(self, data):
return dict(
target=dict(
target_unit_flags=data.read_uint16(),
flags=0, # fill me with previous TargetUnitEvent.flags
ability=None, # fill me with previous TargetUnitEvent.ability
data=('TargetUnit', dict(
flags=data.read_uint16(),
timer=data.read_uint8(),
tag=data.read_uint32(),
snapshot_unit_link=data.read_uint16(),
snapshot_control_player_id=data.read_bits(4) if data.read_bool() else None,
snapshot_upkeep_player_id=data.read_bits(4) if data.read_bool() else None,
snapshot_point=dict(
unit_tag=data.read_uint32(),
unit_link=data.read_uint16(),
control_player_id=data.read_bits(4) if data.read_bool() else None,
upkeep_player_id=data.read_bits(4) if data.read_bool() else None,
point=dict(
x=data.read_bits(20),
y=data.read_bits(20),
z=data.read_bits(32) - 2147483648,
)
)
),
)),
sequence=0, # fill me with previous TargetUnitEvent.flags
other_unit_tag=None, # fill me with previous TargetUnitEvent.flags
unit_group=None, # fill me with previous TargetUnitEvent.flags
)

def command_event(self, data):
Expand Down