Skip to content

Commit f762293

Browse files
committed
Move multipliers into constants and make calulations easier to read.
1 parent d8fa276 commit f762293

File tree

4 files changed

+28
-10
lines changed

4 files changed

+28
-10
lines changed

sc2reader/constants.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,14 @@
8383
},
8484
}
8585

86+
LOTV_SPEEDUP = 1.4
87+
88+
GAME_SECONDS_PER_SECOND = {
89+
'WoL': 1.4,
90+
'HotS': 1.4,
91+
'LotV': 1
92+
}
93+
8694
GATEWAY_CODES = {
8795
'US': 'Americas',
8896
'KR': 'Asia',

sc2reader/engine/plugins/apm.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from __future__ import absolute_import, print_function, unicode_literals, division
33

44
from collections import defaultdict
5+
from sc2reader.constants import LOTV_SPEEDUP, GAME_SECONDS_PER_SECOND
56

67

78
class APMTracker(object):
@@ -24,8 +25,15 @@ def handleInitGame(self, event, replay):
2425
human.seconds_played = replay.length.seconds
2526

2627
def handlePlayerActionEvent(self, event, replay):
27-
event.player.aps[event.second] += 1.4
28-
event.player.apm[int(event.second/60)] += 1.4
28+
speed_multiplier = 1
29+
if replay.expansion == 'LotV':
30+
speed_multiplier = LOTV_SPEEDUP
31+
32+
game_seconds_per_second = GAME_SECONDS_PER_SECOND[replay.expansion]
33+
34+
game_second = int(event.second/speed_multiplier)
35+
event.player.aps[game_second] += game_seconds_per_second
36+
event.player.apm[int(game_second/60)] += game_seconds_per_second
2937

3038
def handlePlayerLeaveEvent(self, event, replay):
3139
event.player.seconds_played = event.second

sc2reader/factories/plugins/replay.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from sc2reader import log_utils
88
from sc2reader.utils import Length
99
from sc2reader.factories.plugins.utils import PlayerSelection, GameState, JSONDateEncoder, plugin
10+
from sc2reader.constants import LOTV_SPEEDUP, GAME_SECONDS_PER_SECOND
1011

1112

1213
@plugin
@@ -103,27 +104,28 @@ def APMTracker(replay):
103104

104105
speed_multiplier = 1
105106
if replay.expansion == 'LotV':
106-
speed_multiplier = 1.4
107+
speed_multiplier = LOTV_SPEEDUP
107108

108-
game_seconds_per_second = 1.4
109+
game_seconds_per_second = GAME_SECONDS_PER_SECOND[replay.expansion]
109110
if replay.expansion == 'LotV':
110-
game_seconds_per_second = 1.4
111+
game_seconds_per_second = 1
111112

112113
for player in replay.players:
113114
player.aps = defaultdict(int)
114115
player.apm = defaultdict(int)
115116
player.seconds_played = replay.length.seconds
116117

117118
for event in player.events:
119+
game_second = int(event.second/speed_multiplier)
118120
if event.name == 'SelectionEvent' or 'AbilityEvent' in event.name or 'Hotkey' in event.name:
119-
player.aps[event.second/speed_multiplier] += game_seconds_per_second
120-
player.apm[int(event.second/60/speed_multiplier)] += game_seconds_per_second
121+
player.aps[game_second] += game_seconds_per_second
122+
player.apm[int(game_second/60)] += game_seconds_per_second
121123

122124
elif event.name == 'PlayerLeaveEvent':
123-
player.seconds_played = event.second/speed_multiplier
125+
player.seconds_played = game_second
124126

125127
if len(player.apm) > 0:
126-
player.avg_apm = sum(player.aps.values())/float(player.seconds_played)*60*speed_multiplier
128+
player.avg_apm = sum(player.aps.values())/float(player.seconds_played)*60
127129
else:
128130
player.avg_apm = 0
129131

test_replays/test_all.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -503,7 +503,7 @@ def test_lotv_apm(self):
503503
from pprint import pprint
504504
pprint(player)
505505
if player.name == 'Zenchii':
506-
self.assertTrue(int(player.avg_apm) == 56)
506+
self.assertEquals(int(player.avg_apm), 56)
507507

508508

509509
class TestGameEngine(unittest.TestCase):

0 commit comments

Comments
 (0)