def show(self, window, window_scale, dt, *args): # Scale images base = transform.scale(self.base_img, (int(window_scale), int(window_scale))) barrel = transform.scale(self.barrel_img, (int(window_scale), int(window_scale))) # Rotate barrel if self.rot: barrel = transform.rotate(barrel, self.rot) # Get correct position after rotation rect = barrel.get_rect() offset = (window_scale - rect.width) / 2, (window_scale - rect.height) / 2 pos = list(self.pos) # Add recoil scale = 0.2 * self.recoil slope = gfunc.slope(self.rot) xc = slope[0] * scale * window_scale yc = slope[1] * scale * window_scale # Work out scaled pos pos[0] *= window_scale pos[1] *= window_scale # Show window.blit(base, pos) window.blit(barrel, (pos[0] + offset[0] + xc, pos[1] + offset[1] + yc))
def shoot(self, dt, game_size, game_scale): self.last_time += dt if self.last_time >= self.max_time: if self.aiming: self.last_time -= self.max_time # Shoot self.recoil = game_scale * 0.1 slope = gfunc.slope(self.rot) # Make a list of points that will receive damage pos = self.pos[0] + 0.5, self.pos[1] + 0.5 points = [pos] accuracy = 0.1 # Lower is better while True: last_pos = points[len(points) - 1] next_pos = (round(last_pos[0] - slope[0], 5), round(last_pos[1] - slope[1], 5)) points.append(next_pos) # Have we made it to the edge of the map? if next_pos[0] < -1 or next_pos[0] > game_size[0] + 1 or next_pos[1] < -1 or next_pos[1] > game_size[1] + 1: break self.shots.append([points[len(points) - 1], 0.2]) for value in points: self.points.append(value)
def show(self, window, window_scale, dt): # Show base base_img = transform.scale(self.base_img, (int(window_scale), int(window_scale))) # Work out scaled pos pos = list(self.pos) pos[0] *= window_scale pos[1] *= window_scale # Show window.blit(base_img, pos) # Show gun center_pos = pos[0] + window_scale / 2, pos[1] + window_scale / 2 gun_img = transform.scale(self.gun_img, (int(window_scale), int(window_scale))) gun_img = transform.rotate(gun_img, self.rot) rect = gun_img.get_rect() pos = [center_pos[0] - rect.width / 2, center_pos[1] - rect.height / 2] # Add recoil slope = gfunc.slope(self.rot) change = slope[0] * self.recoil, slope[1] * self.recoil pos[0] += change[0] pos[1] += change[1] window.blit(gun_img, pos)
def __init__(self, pos, rot, destination, speed=12): self.pos = list(pos) self.speed = speed self.dest = destination self.dist = math.sqrt((pos[0] - destination[0])**2 + (pos[1] - destination[1])**2) self.dist2 = 0 # Distance travelled self.slope = gfunc.slope(rot) self.angle = self.get_angle() self.id = 'bomb' self.height = 0.3 # Multiplied by the window scale
def shoot(self, dt): self.last_shot += dt * 10 if self.last_shot >= self.time: self.last_shot -= self.time if self.rot and self.aiming: pos = list(self.pos) pos[0] += 0.5 pos[1] += 0.5 self.projectiles.append(Bullet(pos, gfunc.slope(self.rot - 180))) self.recoil = 0.5