class PlayState(State): def __init__(self): # print("\tMenuState, init") super().__init__() self.entity_manager = ecs.EntityManager() self.system_manager = ecs.SystemManager(self.entity_manager) # used to make all the entities and shit self.maker = Maker(self.entity_manager, 'data/entities') """ self.system_manager.add_system(ControllerSystem(), 0) self.system_manager.add_system(MovableSystem(), 1) self.system_manager.add_system(CollisionSystem(), 1) """ self.system_manager.add_system(CommandSystem(), 0) self.system_manager.add_system(MovementSystem(), 1) self.system_manager.add_system(StateSystem(), 1) self.system_manager.add_system(AnimationSystem(), 1) self.system_manager.add_system(CollisionSystem(), 2) self.system_manager.add_system(DrawSystem(), 3) e = self.maker["Player"]("Detective.png", pos=(12, 12)) e2 = self.maker["Player"]("Detective.png", pos=(36, 12)) self.entity_manager.remove_component(e2, Commands) self.maker["Box"](pos=(12, 36)) self.world = World() self.viewport = Viewport() # self.viewport.center_on((0, 0)) self.viewport.lock_on( self.entity_manager.component_for_entity(e, Position)) def update(self, dt, keys): if 'esc' in keys: return False game = { 'dt': dt, 'keys': keys, 'viewport': self.viewport, 'world': self.world } play_flag = self.system_manager.update(game) self.viewport.update() self.world.update(self.viewport) return play_flag def draw(self): #self.viewport.screen.blit(self.world.image, pygame.Rect(0, 0, 10, 10)) self.viewport.draw_image(self.world.image, pos=self.world.position) self.system_manager.draw(self.viewport) # self.viewport.draw_rect((10, 10, 20, 20)) # pygame.draw.rect(self.viewport.screen, (255, 255, 255), (10, 10, 20, 20)) self.viewport.push()
def mainloop(device): world = World() finished = False clock = pygame.time.Clock() begin_motion = Vector2D(0.0, 0.0) end_motion = Vector2D(0.0, 0.0) #font = pygame.font.Font(None, 36) #text = font.render("Pummel The Chimp, And Win $$$", 1, (10, 10, 10)) bigbody = True move = 6 while not finished: for e in pygame.event.get(): if e.type == pygame.QUIT: finished = True break elif e.type == pygame.KEYDOWN: sc = world.root.scale.x if e.key == pygame.K_PAGEDOWN: world.root.scale *= 0.9 elif e.key == pygame.K_PAGEUP: world.root.scale *= 1.1 elif e.key == pygame.K_DOWN: world.root.move.y -= move*sc elif e.key == pygame.K_UP: world.root.move.y += move*sc elif e.key == pygame.K_LEFT: world.root.move.x += move*sc elif e.key == pygame.K_RIGHT: world.root.move.x -= move*sc elif e.key == pygame.K_SPACE: bigbody = not bigbody elif e.key == pygame.K_TAB: move += 2/sc elif e.type == pygame.KEYUP: if e.key == pygame.K_DOWN: world.root.move.y = 0 elif e.key == pygame.K_UP: world.root.move.y = 0 elif e.key == pygame.K_LEFT: world.root.move.x = 0 elif e.key == pygame.K_RIGHT: world.root.move.x = 0 elif e.type == pygame.MOUSEBUTTONDOWN: sc = world.root.scale.x begin_motion = (Vector2D(e.pos[0], e.pos[1]) - world.root.position)/sc elif e.type == pygame.MOUSEBUTTONUP: sc = world.root.scale.x end_motion = (Vector2D(e.pos[0], e.pos[1]) - world.root.position)/sc # arbitrary constant to give it a little more oomph :) motion = (end_motion - begin_motion) * 50 mass = 1 if not bigbody: mass = 0.1 node = MyNode(mass, world) node.position = (Vector2D(e.pos[0], e.pos[1]) - world.root.position)/sc node.last_position = node.position node.scale = Vector2D(40.0, 40.0) node.push = motion world.root.add(node) """for n in world.root._children: n.mass = 0 for c in n.world.root._children: if c == n: continue dist = (c.position - n.position).magnitude() / 100.0 n.mass += n.trumass/math.e**dist n.mass /= len(world.root._children) + 0.01""" device.clear() world.update(clock.tick(60) / 1000.0) world.render() device.flip() pygame.time.wait(0)