############################################################################# ## This file is part of TunnelHack II. ## ##-------------------------------------------------------------------------## ## Copyright 2007-2008 Bryce Schroeder ## ## bryce.schroeder@gmail.com ## ## http://www.ferazelhosting.net/~bryce/ ## ##-------------------------------------------------------------------------## ## This program is free software: you can redistribute it and/or modify ## ## it under the terms of the GNU General Public License as published by ## ## the Free Software Foundation, either version 3 of the License, or ## ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## ## along with this program. If not, see . ## ############################################################################# # blame damage? from __future__ import absolute_import from g import g import time, pygame, sys, socket import resource, net, interface class Clock: rawpassed = timepassed = 0 last_tick = fps_count = fps_tick = 0 fps = 0 def tick(self, rate): endtime = (1./rate) * 1000 self.rawpassed = pygame.time.get_ticks() - self.last_tick delay = endtime - self.rawpassed if delay > 0.01: time.sleep(delay / 1000) nowtime = pygame.time.get_ticks() self.timepassed = nowtime - self.last_tick self.fps_count += 1 self.last_tick = nowtime if not self.fps_tick: self.fps_count, self.fps_tick = 0, nowtime elif self.fps_count >= 10: self.fps = self.fps_count / ((nowtime - self.fps_tick) / 1000.) self.fps_count = 0 self.fps_tick = nowtime class THMsgHandler(net.NetHandler): def PROP_EDGE(self, msg): g.level.get_prop(msg.name).add_order(msg.edge) #def process_message(msg): # """ # Process messages from the remote server. # """ # if msg.kind == "PROP_EDGE": # g.level.get_prop(msg.name).add_order(msg.edge) def main(): g.display = pygame.display.set_mode((800,600),) #pygame.FULLSCREEN) pygame.display.set_caption("TunnelHack II") # ugly but presently needed #g.interface_module = interface g.resources = resource.Resource_Manager(g) g.resources.load_directory('Ostendo Resources/') g.resources.load_directory('Local Data') g.resources.resolve() g.resources.integrate() # the code for multiple users would go here (replace default with user name) g.prefs = g.resources.get("Prefs","Default").meta g.net = net.Net() # client mode g.net.attach_handler(THMsgHandler()) g.done = False try: g.net.connect('', 31337) except socket.error: print >> sys.stderr, "Unable to connect to the server." g.net = None # simple event loop for testing things #background = g.resources.get("Image","Backdrop").surface.convert() g.level = g.resources.get("Map", "Test2").instance() g.interface_layer = g.resources.get("Interface", "Default").make() laila = g.resources.get("Prop", "Laila").instance() g.level.add_prop(laila, x=400,y=40) g.level.character = laila g.interface_layer.add_event_handler(g.level) g.level.clear(g.display) #g.display.fill((55,80,80)) dirty = [] clock = Clock() while not g.done: if g.net: g.net.process() #g.net.mailcarrier() # give time to the net class #for msg in g.net.fetch(): # process_message(msg) g.interface_layer.handle_events() g.interface_layer.update() dirty = g.level.draw(g.display, dirty) dirty.extend(g.interface_layer.draw(g.display)) pygame.display.update(dirty) clock.tick(60) if __name__ == '__main__': pygame.init() main()