diff options
author | Florian Jung <flo@windfisch.org> | 2015-09-01 20:47:11 +0200 |
---|---|---|
committer | Florian Jung <flo@windfisch.org> | 2015-09-01 20:48:03 +0200 |
commit | 7a836f4a0a68188a1486b669c4cd437b5f592a5d (patch) | |
tree | 666d7867967e8d6fdc04aca6b18d8a95a077f33c /main.py | |
parent | f99e10cff97afdc3e6ef07db22cf5f7fd442e067 (diff) | |
parent | 7c1180a7b58e7b8c17c8dab297058d0c001386c6 (diff) |
Merge branch 'master' into pathfinding
Diffstat (limited to 'main.py')
-rw-r--r-- | main.py | 147 |
1 files changed, 125 insertions, 22 deletions
@@ -7,16 +7,79 @@ import sys import math import time import random -import gui +import nogui as gui # might be overridden later. import stats -from subscriber import DummySubscriber +from subscriber import EnhancingSubscriber from interval_utils import * from pathfinding import PathfindingTesterStrategy +import time + +class Clock: + def __init__(self): + self.t = time.time() + self.fps_t = time.time() + self.fps = 27 + self.cnt = 0 + self.newfps = False + + def tic(self): + t = time.time() + result = t-self.t + self.t=t + return result + + def getfps(self): + self.cnt+=1 + if time.time() > self.fps_t + 1: + self.fps_t += 1 + self.fps = self.cnt + self.cnt = 0 + self.newfps = True + else: + self.newfps = False + return self.fps + +class ProblemException(BaseException): + pass + +class ProblemManager: + def __init__(self, setup): + self.setup = setup + self.problems = {} + for t in setup: + self.problems[t] = [] + + def report(self, prob): + self.problems[prob] += [time.time()] + self.problems[prob] = list(filter(lambda t : time.time() < t + self.setup[prob][1], self.problems[prob])) + + if len(self.problems[prob]) > self.setup[prob][0]: + print("PROBLEM: "+prob) + if self.setup[prob][2]: + raise ProblemException + +probs = ProblemManager({"network lag":(100,5,True), "strategy lag":(5,2,False), "gui lag":(5,2,False), "high fps":(5,6,True), "low fps":(5,6,True)}) + + +if "--nogui" in sys.argv: + sys.argv.remove("--nogui") +else: + try: + import gui + except: + print("ERROR: could not import gui... running without gui.") + # global vars -sub = DummySubscriber() +sub = EnhancingSubscriber() c = client.Client(sub) -stats = stats.Stats() +sub.set_client(c) +stats = stats.Stats(c) + +try: + nick = sys.argv[2] +except: + nick = "" for i in range(1,10): # 10 connection attempts print("trying to connect, attempt "+str(i)) @@ -25,8 +88,11 @@ for i in range(1,10): # 10 connection attempts try: token = sys.argv[1] addr, *_ = utils.get_party_address(token) + print("using party token") + except: addr, token, *_ = utils.find_server() + print("joining random game") # connect c.connect(addr,token) @@ -37,27 +103,64 @@ for i in range(1,10): # 10 connection attempts c.disconnect() -c.player.nick="test cell pls ignore" +c.player.nick=nick # initialize GUI gui.set_client(c) # initialize strategy -strategy = PathfindingTesterStrategy(c) - -# main loop -while True: - c.on_message() - - gui.draw_frame() - - if len(list(c.player.own_cells)) > 0: - target = strategy.process_frame() - - if gui.bot_input and target != None: - c.send_target(target[0], target[1]) - - stats.log_pos(c.player.center) - stats.log_mass(c.player.total_mass) - gui.update() +strategy = PathfindingTesterStrategy(c, gui) + +autorespawn_counter = 60 + +clock = Clock() + +try: + # main loop + while gui.running: + c.on_message() + if clock.tic() > 1./20: + print("NETWORK LAG") + probs.report("network lag") + + gui.draw_frame() + if clock.tic() > 1./40: + print("GUI SLOW") + probs.report("gui lag") + + if len(list(c.player.own_cells)) > 0: + target = strategy.process_frame() + + if gui.bot_input: + c.send_target(target[0], target[1]) + + stats.process_frame() + + if clock.tic() > 1./25.: + print("STRATEGY LAG") + probs.report("strategy lag") + + gui.draw_debug() + gui.update() + + if not c.player.is_alive: + if autorespawn_counter == 0: + c.send_respawn() + autorespawn_counter = 60 + else: + autorespawn_counter-=1 + + fps = clock.getfps() + if clock.newfps: + print("FPS: %3d" % fps) + if fps < 24: + probs.report("low fps") + if fps > 50: + probs.report("high fps") +except ProblemException: + print("Exiting due to a problem such as low/high fps, network lags etc") + +stats.save("stats.pickle") + +print("bye") |