Skip to content

Commit a1830f7

Browse files
Reformatted the output structure of playerPositionsStats
1 parent e2041d2 commit a1830f7

File tree

9 files changed

+120
-24
lines changed

9 files changed

+120
-24
lines changed

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<Company>Source Engine Discord</Company>
1616
<Copyright>© 2014 EHVAG, 2020 Source Engine Discord and contributors</Copyright>
1717
<Product>SourceEngine.Demo</Product>
18-
<Version>2.0.5</Version>
18+
<Version>2.0.6</Version>
1919
</PropertyGroup>
2020

2121
<PropertyGroup Label="Package Metadata">

src/SourceEngine.Demo.Stats.App/Program.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ static void Main(string[] args)
361361
//IEnumerable<DecoyEventArgs> gde = new List<DecoyEventArgs>();
362362
IEnumerable<ChickenKilledEventArgs> cke = new List<ChickenKilledEventArgs>();
363363
IEnumerable<ShotFired> sfe = new List<ShotFired>();
364-
IEnumerable<playerPositionsStats> ppe = new List<playerPositionsStats>();
364+
IEnumerable<PlayerPositionsInstance> ppe = new List<PlayerPositionsInstance>();
365365

366366

367367
mse = (from start in mdTest.GetEvents<MatchStartedEventArgs>()
@@ -460,8 +460,8 @@ static void Main(string[] args)
460460
sfe = (from shot in mdTest.GetEvents<ShotFired>()
461461
select (shot as ShotFired));
462462

463-
ppe = (from playerPos in mdTest.GetEvents<playerPositionsStats>()
464-
select (playerPos as playerPositionsStats));
463+
ppe = (from playerPos in mdTest.GetEvents<PlayerPositionsInstance>()
464+
select (playerPos as PlayerPositionsInstance));
465465

466466
tanookiStats tanookiStats = tanookiStatsCreator(tpe, dpe);
467467

src/SourceEngine.Demo.Stats/DemoProcessor.cs

Lines changed: 59 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ public static MatchData FromDemoFile(string file, bool parseChickens, bool parse
202202
{
203203
int round = GetCurrentRoundNum(md);
204204

205-
if (round > 0)
205+
if (round > 0 && playerPosition.Player.SteamID > 0)
206206
{
207207
bool playerAlive = CheckIfPlayerAliveAtThisPointInRound(md, playerPosition.Player, round);
208208
var freezetimeEndedEvents = md.events.Where(k => k.Key.Name.ToString() == "FreezetimeEndedEventArgs").Select(v => v.Value).ElementAt(0);
@@ -211,17 +211,17 @@ public static MatchData FromDemoFile(string file, bool parseChickens, bool parse
211211

212212
if (playerAlive && freezetimeEndedThisRound)
213213
{
214-
var playerPositionStat = new playerPositionsStats()
214+
var playerPositionsInstance = new PlayerPositionsInstance()
215215
{
216216
Round = round,
217217
TimeInRound = (int)(e.CurrentTime - freezetimeEndedEventLast.TimeEnd),
218-
PlayerSteamID = playerPosition.Player.SteamID,
218+
SteamID = playerPosition.Player.SteamID,
219219
XPosition = playerPosition.Player.Position.X,
220220
YPosition = playerPosition.Player.Position.Y,
221221
ZPosition = playerPosition.Player.Position.Z,
222222
};
223223

224-
md.addEvent(typeof(playerPositionsStats), playerPositionStat);
224+
md.addEvent(typeof(PlayerPositionsInstance), playerPositionsInstance);
225225
}
226226
}
227227
}
@@ -1747,7 +1747,61 @@ public List<teamStats> GetTeamStats(ProcessedData processedData, AllStats allSta
17471747

17481748
public List<playerPositionsStats> GetPlayerPositionsStats(ProcessedData processedData)
17491749
{
1750-
return processedData.PlayerPositionsValues.ToList();
1750+
List<playerPositionsStats> playerPositionsStats = new List<playerPositionsStats>();
1751+
1752+
// create playerPositionsStats with empty PlayerPositionByTimeInRound
1753+
foreach (var roundsGroup in processedData.PlayerPositionsValues.GroupBy(x => x.Round))
1754+
{
1755+
int lastRound = processedData.RoundEndReasonValues.Count();
1756+
1757+
foreach (var round in roundsGroup.Where(x => x.Round > 0 && x.Round <= lastRound).Select(x => x.Round).Distinct())
1758+
{
1759+
playerPositionsStats.Add(new playerPositionsStats()
1760+
{
1761+
Round = round,
1762+
PlayerPositionByTimeInRound = new List<PlayerPositionByTimeInRound>(),
1763+
});
1764+
}
1765+
}
1766+
1767+
//create PlayerPositionByTimeInRound with empty PlayerPositionBySteamId
1768+
foreach (var playerPositionsStat in playerPositionsStats)
1769+
{
1770+
foreach (var timeInRoundsGroup in processedData.PlayerPositionsValues.Where(x => x.Round == playerPositionsStat.Round).GroupBy(x => x.TimeInRound))
1771+
{
1772+
foreach (var timeInRound in timeInRoundsGroup.Select(x => x.TimeInRound).Distinct())
1773+
{
1774+
playerPositionsStat.PlayerPositionByTimeInRound.Add(new PlayerPositionByTimeInRound()
1775+
{
1776+
TimeInRound = timeInRound,
1777+
PlayerPositionBySteamID = new List<PlayerPositionBySteamID>(),
1778+
});
1779+
}
1780+
}
1781+
}
1782+
1783+
//create PlayerPositionBySteamId
1784+
foreach (var playerPositionsStat in playerPositionsStats)
1785+
{
1786+
foreach (var playerPositionByTimeInRound in playerPositionsStat.PlayerPositionByTimeInRound)
1787+
{
1788+
foreach (var steamIdsGroup in processedData.PlayerPositionsValues.Where(x => x.Round == playerPositionsStat.Round && x.TimeInRound == playerPositionByTimeInRound.TimeInRound).GroupBy(x => x.SteamID).Distinct())
1789+
{
1790+
foreach (var playerPositionsInstance in steamIdsGroup)
1791+
{
1792+
playerPositionByTimeInRound.PlayerPositionBySteamID.Add(new PlayerPositionBySteamID()
1793+
{
1794+
SteamID = playerPositionsInstance.SteamID,
1795+
XPosition = playerPositionsInstance.XPosition,
1796+
YPosition = playerPositionsInstance.YPosition,
1797+
ZPosition = playerPositionsInstance.ZPosition,
1798+
});
1799+
}
1800+
}
1801+
}
1802+
}
1803+
1804+
return playerPositionsStats;
17511805
}
17521806

17531807
public void CreateJson(ProcessedData processedData, AllStats allStats, string mapNameString, string mapDateString)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
namespace SourceEngine.Demo.Stats.Models
2+
{
3+
public class PlayerPositionBySteamID
4+
{
5+
public long SteamID { get; set; }
6+
public double XPosition { get; set; }
7+
public double YPosition { get; set; }
8+
public double ZPosition { get; set; }
9+
10+
public PlayerPositionBySteamID() { }
11+
}
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using System.Collections.Generic;
2+
3+
namespace SourceEngine.Demo.Stats.Models
4+
{
5+
public class PlayerPositionByTimeInRound
6+
{
7+
public int TimeInRound { get; set; }
8+
public List<PlayerPositionBySteamID> PlayerPositionBySteamID { get; set; }
9+
10+
public PlayerPositionByTimeInRound() { }
11+
}
12+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
5+
namespace SourceEngine.Demo.Stats.Models
6+
{
7+
public class PlayerPositionsInstance
8+
{
9+
public int Round { get; set; }
10+
public int TimeInRound { get; set; }
11+
public long SteamID { get; set; }
12+
public double XPosition { get; set; }
13+
public double YPosition { get; set; }
14+
public double ZPosition { get; set; }
15+
16+
public PlayerPositionsInstance() { }
17+
}
18+
}

src/SourceEngine.Demo.Stats/Models/ProcessedData.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public class ProcessedData
3434
public IEnumerable<NadeEventArgs> GrenadeValues { get; set; }
3535
public IEnumerable<ChickenKilledEventArgs> ChickenValues { get; set; }
3636
public IEnumerable<ShotFired> ShotsFiredValues { get; set; }
37-
public IEnumerable<playerPositionsStats> PlayerPositionsValues { get; set; }
37+
public IEnumerable<PlayerPositionsInstance> PlayerPositionsValues { get; set; }
3838
public bool WriteTicks { get; set; }
3939
}
4040
}

src/SourceEngine.Demo.Stats/Models/playerPositionsStats.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
1-
namespace SourceEngine.Demo.Stats.Models
1+
using System.Collections.Generic;
2+
3+
namespace SourceEngine.Demo.Stats.Models
24
{
35
public class playerPositionsStats
46
{
57
public int Round { get; set; }
6-
public int TimeInRound { get; set; }
7-
public long PlayerSteamID { get; set; }
8-
public double XPosition { get; set; }
9-
public double YPosition { get; set; }
10-
public double ZPosition { get; set; }
8+
public List<PlayerPositionByTimeInRound> PlayerPositionByTimeInRound { get; set; }
119

1210
public playerPositionsStats() { }
1311
}

tests/SourceEngine.Demo.Stats.Tests/Tests.cs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using SourceEngine.Demo.Parser;
77
using SourceEngine.Demo.Stats.Models;
88
using Xunit;
9+
using System.Linq;
910

1011
namespace SourceEngine.Demo.Stats.Tests
1112
{
@@ -272,11 +273,12 @@ public void Should_return_player_positions_stats_correctly()
272273

273274
// Assess
274275
allStats.playerPositionsStats.Count.ShouldBe(1);
275-
allStats.playerPositionsStats[0].PlayerSteamID.ShouldBe(32443298432);
276-
allStats.playerPositionsStats[0].TimeInRound.ShouldBe(1);
277-
allStats.playerPositionsStats[0].XPosition.ShouldBe(20);
278-
allStats.playerPositionsStats[0].YPosition.ShouldBe(200);
279-
allStats.playerPositionsStats[0].ZPosition.ShouldBe(2000);
276+
allStats.playerPositionsStats[0].Round.ShouldBe(1);
277+
allStats.playerPositionsStats[0].PlayerPositionByTimeInRound.FirstOrDefault().TimeInRound.ShouldBe(1);
278+
allStats.playerPositionsStats[0].PlayerPositionByTimeInRound.FirstOrDefault().PlayerPositionBySteamID.FirstOrDefault().SteamID.ShouldBe(32443298432);
279+
allStats.playerPositionsStats[0].PlayerPositionByTimeInRound.FirstOrDefault().PlayerPositionBySteamID.FirstOrDefault().XPosition.ShouldBe(20);
280+
allStats.playerPositionsStats[0].PlayerPositionByTimeInRound.FirstOrDefault().PlayerPositionBySteamID.FirstOrDefault().YPosition.ShouldBe(200);
281+
allStats.playerPositionsStats[0].PlayerPositionByTimeInRound.FirstOrDefault().PlayerPositionBySteamID.FirstOrDefault().ZPosition.ShouldBe(2000);
280282
}
281283

282284
[Fact]
@@ -1031,13 +1033,13 @@ public void MockData()
10311033
}
10321034
};
10331035

1034-
var playerPositionsStats = new List<playerPositionsStats>()
1036+
var playerPositionsStats = new List<PlayerPositionsInstance>()
10351037
{
1036-
new playerPositionsStats
1038+
new PlayerPositionsInstance
10371039
{
10381040
Round = 1,
1039-
PlayerSteamID = TeamPlayersValues[0].Terrorists[0].SteamID,
10401041
TimeInRound = 1,
1042+
SteamID = TeamPlayersValues[0].Terrorists[0].SteamID,
10411043
XPosition = 20,
10421044
YPosition = 200,
10431045
ZPosition = 2000

0 commit comments

Comments
 (0)