Skip to content

Commit de29084

Browse files
committed
Improve FriendlyPlayerExporter and pin with tests
Detect the friendly player in AI games and Battlegrounds by looking at the non-AI player. This should be more consistent.
1 parent c74ac0f commit de29084

3 files changed

Lines changed: 50 additions & 6 deletions

File tree

hslog/export.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,15 +194,29 @@ def __init__(self, packet_tree):
194194
super().__init__(packet_tree)
195195
self._controller_map = {}
196196
self.friendly_player = None
197+
self._ai_player = None
198+
self._non_ai_players = []
197199

198200
def export(self):
199201
for packet in self.packet_tree:
200202
self.export_packet(packet)
201-
if self.friendly_player:
203+
if self.friendly_player is not None:
202204
# Stop export once we have it
203205
break
204206
return self.friendly_player
205207

208+
def handle_create_game(self, packet):
209+
for player in packet.players:
210+
self.export_packet(player)
211+
if self._ai_player is not None and len(self._non_ai_players) == 1:
212+
self.friendly_player = self._non_ai_players[0]
213+
214+
def handle_player(self, packet):
215+
if packet.lo == 0:
216+
self._ai_player = packet.player_id
217+
else:
218+
self._non_ai_players.append(packet.player_id)
219+
206220
def handle_tag_change(self, packet):
207221
if packet.tag == GameTag.CONTROLLER:
208222
self._controller_map[packet.entity] = packet.value

tests/test_export.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from hslog.export import FriendlyPlayerExporter
2+
3+
from .conftest import logfile
4+
5+
6+
class TestFriendlyPlayerExporter():
7+
def test_inferrable(self, parser):
8+
with open(logfile("friendly_player_id_is_1.power.log")) as f:
9+
parser.read(f)
10+
11+
assert len(parser.games) == 1
12+
packet_tree = parser.games[0]
13+
fpe = FriendlyPlayerExporter(packet_tree)
14+
friendly_player = fpe.export()
15+
assert friendly_player == 1
16+
17+
def test_ai_game(self, parser):
18+
with open(logfile("puzzlelab.power.log")) as f:
19+
parser.read(f)
20+
21+
assert len(parser.games) == 1
22+
packet_tree = parser.games[0]
23+
fpe = FriendlyPlayerExporter(packet_tree)
24+
friendly_player = fpe.export()
25+
assert friendly_player == 1
26+
27+
def test_battlegrounds(self, parser):
28+
with open(logfile("36393_battlegrounds.power.log")) as f:
29+
parser.read(f)
30+
31+
assert len(parser.games) == 1
32+
packet_tree = parser.games[0]
33+
fpe = FriendlyPlayerExporter(packet_tree)
34+
friendly_player = fpe.export()
35+
assert friendly_player == 3

tests/test_main.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -134,11 +134,6 @@ def test_game_initialization():
134134
GameTag.CARDTYPE: CardType.PLAYER,
135135
}
136136

137-
# Test that there should be no friendly player
138-
fpe = FriendlyPlayerExporter(packet_tree)
139-
friendly_player = fpe.export()
140-
assert not friendly_player
141-
142137

143138
def test_timestamp_parsing():
144139
parser = LogParser()

0 commit comments

Comments
 (0)