Mercurial > touhou
changeset 485:c099802e2435
Improve network latency by increasing game latency to 3 frames.
author | Thibaut Girka <thib@sitedethib.com> |
---|---|
date | Sun, 15 Jan 2012 15:36:23 +0100 |
parents | 699c8e8c7738 |
children | 2f53be1b2f60 |
files | pytouhou/network.py |
diffstat | 1 files changed, 26 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/pytouhou/network.py +++ b/pytouhou/network.py @@ -3,13 +3,14 @@ import struct from select import select import time -MSG_STRUCT = struct.Struct('!IHH') +MSG_STRUCT = struct.Struct('!HHH') class Network(object): def __init__(self, port=8080, dest=None, selected_player=0): self.frame = 0 self.keystate = 0 self.old_keystate = 0 + self.remote_keystate = 0 self.selected_player = selected_player @@ -60,18 +61,30 @@ class Network(object): def run_iter(self, game, keystate): - if self.frame < game.frame: + if game.frame % 3 == 0: + # Phase 1: Update game with old data + self.run_game_iter(game, self.keystate, self.remote_keystate) + elif game.frame % 3 == 1: + # Phase 2: Update data, send new data, update game with old data self.old_keystate, self.keystate = self.keystate, keystate - self.frame = game.frame - - self.send_message() + self.frame = game.frame // 3 + self.send_message() + self.run_game_iter(game, self.old_keystate, self.remote_keystate) + elif game.frame % 3 == 2: + # Phase 3: Send new data, get remote data, update game with new data + self.send_message() + # Follow one valid update + message = self.read_message() + if message: + frame, keystate, old_keystate = message + if frame == self.frame: + self.remote_keystate = keystate + elif frame == self.frame + 1: + self.remote_keystate = old_keystate + else: + raise Exception #TODO + self.run_game_iter(game, self.keystate, self.remote_keystate) + elif game.frame > 2: + print('ARGH') - # Follow one valid update - message = self.read_message() - if message: - frame, keystate, old_keystate = message - if frame == game.frame: - self.run_game_iter(game, self.keystate, keystate) - elif frame == game.frame + 1: - self.run_game_iter(game, self.keystate, old_keystate)