Esempio n. 1
0
 def will_collide_with(self, obj):
     pos1 = self.pos[:]
     pos1[0] += self.speed[0]
     pos2 = pos1[:]
     pos2[1] += self.speed[1]
     return utils.overlap(self.get_moving_rect(pos1), obj.get_rect()) or \
            utils.overlap(self.create_rect(pos1, pos2), obj.get_rect())
Esempio n. 2
0
 def check_obstacles(self, map, magnitude, direction):
     self.ground = False
     # calculate expected position
     pos = self.pos[:]
     pos[direction] += magnitude
     player_rect = [[min(self.pos[0], pos[0]),
                     min(self.pos[1], pos[1])],
                    [
                        max(self.pos[0], pos[0]) + self.size[0],
                        max(self.pos[1], pos[1]) + self.size[1]
                    ]]
     # revise expected position
     for obs in map.objects['obstacle'] + map.objects['elevator']:
         obs_rect = obs.get_rect()
         obs_orig_rect = obs.get_orig_rect()
         if utils.overlap(player_rect, obs_rect):
             rel_pos = utils.direction(self.get_rect(), obs_orig_rect,
                                       direction)
             # return to the edge
             if rel_pos == 'low' and magnitude > 0:
                 pos[direction] = obs_rect[0][direction] - self.size[
                     direction]
                 self.speed[direction] = 0
                 # detect if player is on the ground
                 if direction == 1:
                     self.ground = True
                     self.jump_times = 1
             elif rel_pos == 'high' and magnitude < 0:
                 pos[direction] = obs_rect[1][direction]
                 self.speed[direction] = 0
     return pos
Esempio n. 3
0
 def show(self, ui, *, pan=(0, 0)):
     for desc in self.descriptions:
         for i, text in enumerate(desc['text']):
             pos = desc['pos'][0], desc['pos'][1] + i * desc['font'][1] * 2
             ui.show_text(pos,
                          text,
                          f.get_font(desc['font'][0], desc['font'][1]),
                          color=desc['color'],
                          save=str(desc['font']) + '-' + str(desc['color']),
                          pan=pan)
     for obj in self.get_objects():
         if not utils.overlap(self.get_rect(), obj.get_rect(pan=pan)):
             continue
         obj.show(ui, pan=pan)
Esempio n. 4
0
 def check_squeeze(self, map):
     # extend by 4
     self.compressed_size = self.squeeze(
         self.pos, self.size, self.compressed_size,
         -4 if self.compressed_size > 4 else -self.compressed_size, 'high')
     # squeeze
     for obs in map.objects['obstacle'] + map.objects['elevator']:
         if not utils.overlap(self.get_rect(), obs.get_rect()):
             continue
         rel_pos = self.rel_pos[obs][1]
         if rel_pos is None:
             continue
         diff = (self.pos[1] +
                 self.size[1]) - obs.pos[1] if rel_pos == 'low' else (
                     obs.pos[1] + obs.size[1]) - self.pos[1]
         self.compressed_size = self.squeeze(self.pos, self.size,
                                             self.compressed_size, diff,
                                             rel_pos)
Esempio n. 5
0
 def check_obstacles(self, map, magnitude, direction):
     self.ground = False
     # calculate expected position
     pos = self.pos[:]
     pos[direction] += magnitude
     # revise expected position
     for obs in map.objects['elevator'] + map.objects['obstacle']:
         obs_rect = obs.get_rect()
         if utils.overlap(self.get_moving_rect(pos), obs_rect):
             rel_pos = self.rel_pos[obs][direction]
             # return to the edge
             if rel_pos == 'low' and magnitude >= obs.speed[direction]:
                 pos[direction] = obs_rect[0][direction] - self.size[
                     direction]
                 self.speed[direction] = obs.speed[direction]
                 # detect if player is on the ground
                 if direction == 1:
                     self.reference_frame = obs
                     self.ground = True
                     self.jump_times = 1
             elif rel_pos == 'high' and magnitude <= obs.speed[direction]:
                 pos[direction] = obs_rect[1][direction]
                 self.speed[direction] = obs.speed[direction]
     return pos
Esempio n. 6
0
 def collide_with(self, obj):
     return utils.overlap(self.get_rect(), obj.get_rect())