class Game(object): def __init__(self, screen_size, resource_path): global _game _game = self self.mode = None self.running = False self.screen_size = screen_size pygame.mixer.pre_init(frequency=48000) pygame.init() pygame.display.set_caption("It's All Come to This") self.clock = pygame.time.Clock() self.screen = pygame.display.set_mode(self.screen_size, pygame.DOUBLEBUF | pygame.HWSURFACE) self.component_manager = componentmanager.ComponentManager() self.component_manager.register_module(component) self.component_manager.register_module(event) self.component_manager.register_module(locationcomponets) self.entity_manager = EntityManager() self.resource_manager = ResourceManager(resource_path) self.resource_manager.register_loader('entity', LoadEntityData) self.resource_manager.register_loader('image', LoadImage) self.resource_manager.register_loader('inputmap', LoadInputMapping) self.resource_manager.register_loader('sound', LoadSound) self.resource_manager.register_loader('text', LoadText) self.resource_manager.register_loader('event', LoadEvent) self.input_manager = InputManager() self.view = View(pygame.display.get_surface(), [SolidBackgroundLayer((128,192,128,255)), SimpleLayer('draw-location'), SimpleLayer('draw-human'), SimpleLayer('draw-ui')]) def run(self, mode): self.entity_manager.add_entity(Entity('camp')) self.entity_manager.add_entity(Entity('report')) origin = Vec2d(600, 200) num_humans = 6 names = self.resource_manager.get('text','names.txt').split('\n') for i in range(num_humans): pos = Vec2d(100,0).rotated(360.0*i/(num_humans)) + origin image = random.choice(('male.png', 'female.png')) self.entity_manager.add_entity(Entity('human', name=random.choice(names), home_x=pos.x, home_y=pos.y, image=image)) self.entity_manager.add_entity(Entity('mouse')) self.entity_manager.add_entity(Entity('farm')) self.entity_manager.add_entity(Entity('wall')) self.entity_manager.add_entity(Entity('well')) self.entity_manager.add_entity(Entity('rest-camp')) self.entity_manager.add_entity(Entity('work-camp')) self.entity_manager.add_entity(Entity('explore')) self.entity_manager.add_entity(Entity('infirmary')) self.entity_manager.add_entity(Entity('construction-site')) self.entity_manager.add_entity(Entity('dump')) self.entity_manager.add_entity(Entity('hospital')) self.entity_manager.add_entity(Entity('rival-camp')) self.entity_manager.add_entity(Entity('water-tower')) self.entity_manager.add_entity(Entity('forest')) self.entity_manager.add_entity(Entity("camp")) self.entity_manager.add_entity(Entity('camp-food-meter-ui')) self.entity_manager.add_entity(Entity('camp-defense-meter-ui')) self.entity_manager.add_entity(Entity('camp-shelter-meter-ui')) self.entity_manager.add_entity(Entity('camp-water-meter-ui')) self.entity_manager.add_entity(Entity('camp-medicine-meter-ui')) self.entity_manager.add_entity(Entity('button')) self.entity_manager.add_entity(Entity('info-window')) self.entity_manager.commit_changes() self.change_mode(mode) self.running = True self.entity_manager.commit_changes() while self.running: dt = self.clock.tick(60) / 1000.0 events = self.input_manager.process_events() for event in events: if event.target == 'GAME': if event.action == 'QUIT' and event.value > 0: self.running = False elif event.action == 'FULLSCREEN' and event.value > 0: pygame.display.toggle_fullscreen() elif event.action == 'RELOAD' and event.value > 0: self.resource_manager.clear() else: self.mode.handle_event(event) self.mode.update(dt) self.mode.draw() self.entity_manager.commit_changes() pygame.display.flip() def change_mode(self, new_mode): print self.mode, '->', new_mode if self.mode: self.mode.leave() self.mode = new_mode self.mode.enter() self.entity_manager.commit_changes()
class Game(object): def __init__(self, screen_size, resource_path): self.mode = None self.screen_size = screen_size self.map_size = (128,128) self.tile_size = (32,32) self.world_size = (self.tile_size[0] * self.map_size[0], self.tile_size[1] * self.map_size[1]) self.world_rooms = (8,8) pygame.init() self.clock = pygame.time.Clock() self.screen = pygame.display.set_mode(self.screen_size) self.component_manager = componentmanager.ComponentManager() self.component_manager.register_component('MovementComponent', MovementComponent()) self.component_manager.register_component('ExampleComponent', ExampleComponent()) self.component_manager.register_component('AnimationComponent', AnimationComponent()) self.component_manager.register_component('DrawComponent', DrawComponent()) self.component_manager.register_component('InputMovementComponent', InputMovementComponent()) self.component_manager.register_component('PlayerCollisionComponent', PlayerCollisionComponent()) self.component_manager.register_component('ZombieAIComponent', ZombieAIComponent()) self.component_manager.register_component('ZombieAIComponent', ZombieAIComponent()) self.component_manager.register_component('CarComponent', CarComponent()) self.component_manager.register_component('DrawHitBoxComponent', DrawHitBoxComponent()) self.component_manager.register_component('AttackComponent', AttackComponent()) self.component_manager.register_component('ItemComponent', ItemComponent()) self.component_manager.register_component('InputActionComponent', InputActionComponent()) self.component_manager.register_component('DeadComponent', DeadComponent()) self.component_manager.register_component('ZombieCollisionComponent', ZombieCollisionComponent()) self.entity_manager = EntityManager() self.resource_manager = ResourceManager(resource_path) self.resource_manager.register_loader('definition', LoadEntityData) self.resource_manager.register_loader('sprite', LoadImage) self.resource_manager.register_loader('inputmap', LoadInputMapping) self.resource_manager.register_loader('sound', LoadSound) self.input_manager = InputManager() self.input_manager.init_joysticks() def run(self, mode): #pygame.display.toggle_fullscreen() self.mode = mode self.music = self.resource_manager.get('sound', 'Teamawesome_zombies_LOOP.wav') self.music.play(loops=-1) self.entity_manager.add_entity(Entity('car')) for e in [Entity('character1'), Entity('character2'), Entity('character3'), Entity('character4')]: self.entity_manager.add_entity(e) self.item_names = ["engine", "gas-can", "radiator", "steering-wheel-2", "tire", "steering-wheel", "toolbox", "tire", "tire", "tire"] for i in self.item_names: x_pos = (self.world_size[0]/self.world_rooms[0] * randint(0, self.world_rooms[0]-1)) + self.world_size[0]/self.world_rooms[0]/2 y_pos = (self.world_size[1]/self.world_rooms[1] * randint(0, self.world_rooms[1]-1)) + self.world_size[1]/self.world_rooms[1]/2 self.entity_manager.add_entity(Entity(i, x=x_pos, y=y_pos)) self.entity_manager.add_entity(Entity('splashscreen')) self.renderer = Render(self) self.zombies = [] for _ in range(50): x_pos = (self.world_size[0]/self.world_rooms[0] * randint(0, self.world_rooms[0]-1)) + self.world_size[0]/self.world_rooms[0]/2 y_pos = (self.world_size[1]/self.world_rooms[1] * randint(0, self.world_rooms[1]-1)) + self.world_size[1]/self.world_rooms[1]/2 self.entity_manager.add_entity(Entity("zombie", x=x_pos, y=y_pos)) while True: dt = self.clock.tick(60) / 1000.0 events = self.input_manager.process_events() for event in events: if event.target == 'GAME': if event.action == 'QUIT' and event.value > 0: sys.exit() elif event.action == 'FULLSCREEN' and event.value > 0: pygame.display.toggle_fullscreen() elif event.action == 'RELOAD' and event.value > 0: self.resource_manager.clear() else: self.mode.handle_event(event) self.mode.update(dt) self.mode.draw() pygame.display.flip() pygame.display.set_caption('fps: %.0d' % self.clock.get_fps())