def __init__(self, n, interfaces=None): self.number = n self.x, self.y = local_to_global(self.initial_position[n]).to_pos() self.point = LocalPoint(self.initial_position[n]) self.interfaces = [] super(Player, self).__init__(u'../resources/image/main/player/cursor.png', area=pygame.rect.Rect(0,n*40,40,40),x=100, y=100) self.animation_enable = False self.joy = JoyPad() if not interfaces: self.set_type() else: self.interfaces = interfaces self.press_counter = [0,0,0,0,0,0] self.key_mode = False self.pre_mouse_point = LocalPoint(0,0)
class Player(Image): pressed = False initial_position = ( (settings.STAGE_WIDTH-1, settings.STAGE_HEIGHT-1), (0,0), ) def __init__(self, n, interfaces=None): self.number = n self.x, self.y = local_to_global(self.initial_position[n]).to_pos() self.point = LocalPoint(self.initial_position[n]) self.interfaces = [] super(Player, self).__init__(u'../resources/image/main/player/cursor.png', area=pygame.rect.Rect(0,n*40,40,40),x=100, y=100) self.animation_enable = False self.joy = JoyPad() if not interfaces: self.set_type() else: self.interfaces = interfaces self.press_counter = [0,0,0,0,0,0] self.key_mode = False self.pre_mouse_point = LocalPoint(0,0) def set_type(self): count = self.joy.get_count() r = count for id in xrange(r): if self.joy.sticks[id].get_numbuttons < 6: count -=1 if count == 0: types = ('mouse','key') elif count == 1: types = ('mouse', 'pad') else: types = ('pad', 'pad') self.interfaces.append(types[self.number]) def update(self): u''' なにかキーが押されたらkey_mode=True。このとき、マウス操作は利かない マウス座標が前と変わったら、key_mode=False ''' if not self.pre_mouse_point == self.get_mouse_point(): self.key_mode = False if 'mouse' in self.interfaces and not self.key_mode: self.point = self.get_mouse_point() if self.in_map(): Mouse.hide_cursor() else: Mouse.show_cursor() if 'key' in self.interfaces: if Key.is_press(K_UP): self.press_counter[0] += 1 self.key_mode = True elif Key.is_press(K_DOWN): self.press_counter[1] += 1 self.key_mode = True if Key.is_press(K_LEFT): self.press_counter[2] += 1 self.key_mode = True elif Key.is_press(K_RIGHT): self.press_counter[3] += 1 self.key_mode = True if 'pad' in self.interfaces: if self.joy.get_count() == 1: id = 0 else: id = self.number axes = self.joy.sticks[id].get_numaxes() >= 2 pad = self.joy.sticks[id] if pad.get_button(0) or (axes and pad.get_axis(1) < -0.5): self.press_counter[0] += 1 self.key_mode = True if pad.get_button(1) or (axes and pad.get_axis(1) > 0.5): self.press_counter[1] += 1 self.key_mode = True if pad.get_button(2) or (axes and pad.get_axis(0) < -0.5): self.press_counter[2] += 1 self.key_mode = True if pad.get_button(3) or (axes and pad.get_axis(0) > 0.5): self.press_counter[3] += 1 self.key_mode = True if self.press_counter[0] > 2: self.press_counter[0] = 0 self.point.y -= 1 if self.press_counter[1] > 2: self.press_counter[1] = 0 self.point.y += 1 if self.press_counter[2] > 2: self.press_counter[2] = 0 self.point.x -= 1 if self.press_counter[3] > 2: self.press_counter[3] = 0 self.point.x += 1 if self.point.x < 0: self.point.x = 0 elif self.point.x > settings.STAGE_WIDTH-2: self.point.x = settings.STAGE_WIDTH-2 if self.point.y < 0: self.point.y =0 elif self.point.y > settings.STAGE_HEIGHT-2: self.point.y = settings.STAGE_HEIGHT-2 self.move_pointer() self.pre_mouse_point = self.get_mouse_point() def move_pointer(self): if self.in_map(): self.x, self.y = self.point.to_global().add(LocalPoint(1,1)).to_pos() self.rect.x = self.x self.rect.y = self.y def poll(self): if 'mouse' in self.interfaces and not self.key_mode: if Mouse.is_press('LEFT') and not self.pressed: self.pressed = True return 1 elif Mouse.is_press('RIGHT') and not self.pressed: self.pressed = True return -1 if Mouse.is_release(self): self.pressed = False if 'key' in self.interfaces: if Key.is_press(K_x): if not self.press_counter[4]: self.press_counter[4] = 1 self.key_mode = True return -1 elif Key.is_press(K_z): if not self.press_counter[5]: self.press_counter[5] = 1 self.key_mode = True return 1 else: self.press_counter[4] = 0 self.press_counter[5] = 0 if 'pad' in self.interfaces: if self.joy.get_count() == 1: id = 0 else: id = self.number if self.joy.sticks[id].get_numbuttons >= 13: left = 12 right = 11 else: left = 5 right = 6 pad = self.joy.sticks[id] if pad.get_button(left): if not self.press_counter[4]: self.press_counter[4] = 1 return -1 elif pad.get_button(right): if not self.press_counter[5]: self.press_counter[5] = 1 return 1 else: self.press_counter[4] = 0 self.press_counter[5] = 0 return 0 def get_mouse_point(self): return global_to_local(Mouse.get_pos()) def in_map(self): lp = self.point return 0 <= lp.x < settings.STAGE_WIDTH-1 and 0 <= lp.y < settings.STAGE_HEIGHT-1