From 2c860be64bb0a18566abbbe9a346a3ecf38a1f6e Mon Sep 17 00:00:00 2001 From: ThisBirchWood Date: Sun, 9 Mar 2025 18:52:52 +0100 Subject: [PATCH] initial commit --- .gitignore | 1 + __pycache__/game.cpython-310.pyc | Bin 0 -> 1497 bytes __pycache__/player.cpython-310.pyc | Bin 0 -> 597 bytes game.py | 29 +++++++++++++++++++++++++++++ parser.py | 29 +++++++++++++++++++++++++++++ player.py | 13 +++++++++++++ 6 files changed, 72 insertions(+) create mode 100644 .gitignore create mode 100644 __pycache__/game.cpython-310.pyc create mode 100644 __pycache__/player.cpython-310.pyc create mode 100644 game.py create mode 100644 parser.py create mode 100644 player.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1fd1563 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +demo.dem \ No newline at end of file diff --git a/__pycache__/game.cpython-310.pyc b/__pycache__/game.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a81b02e5d21ccf3b8809885e4957201b6c3199e7 GIT binary patch literal 1497 zcmZ`(&5qkP5GJV~%Uau;Y}=qon!tx3fG&IJr9e;=3uJ+uYAg^0Xaxs^py6)hl_iCg zleOVJWr4m%bL_+P*bA>cZQr21v@=w^ap05&M?-$Y;m7%LJsidi$KyYKKl>$M>`z*3 z4-XedIL$*8z<`%*&Qs3WGX?^@D+b;>kqYpivn04i8716^!^g!DPV)qX zVkrlPM>&WqmU`eRAAAT-eF&j<<);A*Ac8(>A!;$~q1J-{FB)3^SvFTWk=qQ?1nk@znLdIFg?2HSP(dmysPa^Y=uhvV_>Jiye*QVipG;pErOgzU zWmZj(l{s(gW_p5Kb(NLl6J5_#-kRyt=iiQx)w~}6m^F>kQ*wUTENvw5ilUX0LTLsl zLf-ubJm#w*h2?N#W5ezdHq@$J=xUNvfHs443YrVpEmYQQ#(w2%{vNaILc%AB&{!1A zhQy)*T+)@Atlf(`F(Q*V1CZT)WMjzvExy`!j6PyH1$i?_zoBps7i;Dt3E{evV~yiA6ON$Lu9siq-=`<@HW*Dm)Gz+KE{}cHrM- zvk(H>k-Z%>+(M%rw6}%!chG1Hjd#%g7P_~C#v2rnB{Cbl9=Y7_O{LE^bQr-OW$@QJR|oHMfeoC_O$-x2wN+QSw0 IfE|ec03-rP5dZ)H literal 0 HcmV?d00001 diff --git a/__pycache__/player.cpython-310.pyc b/__pycache__/player.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..466e210bb274148c3b925c3ebe1f0ffd2595c3a0 GIT binary patch literal 597 zcmZvay-ve05XWujqoHaG>cHGJO9#Y+5JI$q1*%FFOBKnoVgrG+33e(-m5sg$6R(2A z3wUMX6_~h7MO7p&x}WXK{p~x;S-agNV6X2Vx0jTVPh4!91B+8|(*;}*NhDo?zpyEh zY(hdOhWH=bDE1+&$dpPlWzv&OIx9MLqzfwF`r}lTN`Ij=4z@PHIRhVnn?pcFE5b>| zfV6Ueta5=)<~E!bda^SeM=byb;}k;rlE;imr{)CX!_;=Fw1@ha$_PF@&(5>yApY>bd=Yv_w&*QoG0_7;2b+PdjOwqKIYRVUGAg7M{JsN+vI$f$wi9u7Uz!(k*@#f4$85IEwph74}hQ>ynujoXdM}a>v1c) R7Nf)l$Lm8*Y8@8VB|q>Td_e#J literal 0 HcmV?d00001 diff --git a/game.py b/game.py new file mode 100644 index 0000000..b89dfcc --- /dev/null +++ b/game.py @@ -0,0 +1,29 @@ +from player import Player + +class Game: + def __init__(self, map_name, game_info): + self.players = [] + self.map_name = map_name + self.round = 0 + self.tick = 0 + self.max_tick = game_info.index[-1] + self.game_info = game_info # pd dataframe sorted by tick + + def add_player(self, player: Player) -> None: + self.players.append(player) + + def next_tick(self) -> None: + self.tick += 1 + self._update_player_positions() + + def _update_player_positions(self) -> None: + # inefficient, might need to change + current_tick = self.game_info[self.game_info["tick"] == self.tick] + for player in self.players: + print("Updated player position of ", player.name) + player.x = current_tick[current_tick["player_steamid"] == player.steam_id]["X"].values[0] + player.y = current_tick[current_tick["player_steamid"] == player.steam_id]["Y"].values[0] + player.z = current_tick[current_tick["player_steamid"] == player.steam_id]["Z"].values[0] + player.pitch = current_tick[current_tick["player_steamid"] == player.steam_id]["pitch"].values[0] + player.yaw = current_tick[current_tick["player_steamid"] == player.steam_id]["yaw"].values[0] + player.dead = current_tick[current_tick["player_steamid"] == player.steam_id]["is_alive"].values[0] == 0 diff --git a/parser.py b/parser.py new file mode 100644 index 0000000..68efc90 --- /dev/null +++ b/parser.py @@ -0,0 +1,29 @@ +import demoparser2 +from game import Game +from player import Player + +demo_parser = demoparser2.DemoParser("demo.dem") +demo_info = demo_parser.parse_ticks(["X", "Y", "Z"]) + +class Parser: + def __init__(self, demo_path): + self.demo_parser = demoparser2.DemoParser(demo_path) + self.demo_info = self.demo_parser.parse_ticks(["X", "Y", "Z", "pitch", "yaw", "is_alive", "team", "player_steamid"]) + + self.players = self.demo_parser.parse_player_info() + +if __name__ == "__main__": + parser = Parser("demo.dem") + game = Game("de_dust2", parser.demo_info) + + for index, row in parser.players.iterrows(): + game.add_player(Player(row["name"], row["steamid"])) + + while game.tick < game.max_tick: + game.next_tick() + + + + + + diff --git a/player.py b/player.py new file mode 100644 index 0000000..dad69c4 --- /dev/null +++ b/player.py @@ -0,0 +1,13 @@ +class Player: + def __init__(self, name, steam_id, x=0, y=0, z=0, pitch=0, yaw=0): + self.name = name + self.steam_id = steam_id + self.x = x + self.y = y + self.z = z + + self.pitch = pitch + self.yaw = yaw # Probably only need this if top-down + self.dead = False + + \ No newline at end of file