class Point: def __init__(self, x, y, distance_to_child, static=False): self.pos = Vec(x, y) self.vel = Vec() self.accel = Vec() self.mass = 1 self.static = static self.colour = (255, 255, 255) self.child = None self.distance_to_child = distance_to_child def draw(self, screen): pygame.draw.circle(screen, self.colour, self.pos.get(), Settings.point_size) if self.child is None: return pygame.draw.line(screen, self.colour, self.pos.get(), self.child.pos.get(), Settings.rope_width) self.child.draw(screen) def set_child(self, child): self.child = child self.distance_to_child = self.pos.dist(self.child.pos)
def __init__(self, screen_size, depth): self.pos = Vector2D(screen_size[0]/2, screen_size[1]/2) self.r = screen_size[0]/15 self.colour = [255, 255, 0] self.children = [] for _ in range(randint(2, 5)): self.children.append(Planet(self, depth-1))
def __init__(self, x, y, distance_to_child, static=False): self.pos = Vec(x, y) self.vel = Vec() self.accel = Vec() self.mass = 1 self.static = static self.colour = (255, 255, 255) self.child = None self.distance_to_child = distance_to_child
def draw(self, screen, delta_time, cam_pos, draw_line): self.rel_angle += self.rel_delta_angle * delta_time self.pos = Vector2D.from_angle(self.rel_angle) self.pos.mult(self.distance) self.pos.add(self.parent.pos) if draw_line: pygame.draw.aaline(screen, [20, 20, 20], (self.pos + cam_pos).get(), (self.parent.pos + cam_pos).get(), 1) pygame.draw.circle(screen, self.colour, ((self.pos + cam_pos).get()), int(self.r)) for child in self.children: child.draw(screen, delta_time, cam_pos, draw_line)
def __init__(self, parent, depth): self.parent = parent self.rel_angle = randint(0, 360) self.rel_delta_angle = randint(-35, 25) + 5 self.distance = randint(int(parent.r*2), int(parent.r*5)) self.r = randint(int(parent.r*0.5), int(parent.r*0.8)) self.colour = [randint(50, 255) for _ in range(3)] self.pos = Vector2D.from_angle(self.rel_angle) self.pos.mult(self.distance) self.pos.add(self.parent.pos) self.children = [] if depth > 0: for _ in range(randint(0, 2)): self.children.append(Planet(self, depth-1))
def controll_camera(): global heading_angle forward_vec = Vector2D.from_angle(heading_angle) forward_vec.mult(cam_speed) forward_vec.mult(delta_time) accel = False is_forward = False if key[pygame.K_w]: cam_vel.add(forward_vec) accel = is_forward = True if key[pygame.K_s]: cam_vel.sub(forward_vec) accel = True if not accel: cam_vel.mult(0.995) if key[pygame.K_a]: heading_angle -= cam_rot_speed if key[pygame.K_d]: heading_angle += cam_rot_speed if abs(cam_vel.x) > cam_max_speed: if cam_vel.x < 0: polarity = -1 else: polarity = 1 cam_vel.x = cam_max_speed * polarity if abs(cam_vel.y) > cam_max_speed: if cam_vel.y < 0: polarity = -1 else: polarity = 1 cam_vel.y = cam_max_speed * polarity cam_pos.add(cam_vel) if cam_pos.dist([0, 0]) > max(size) * 1.5: cam_pos.mult(-1) return is_forward
def add_branch(self, depth, pos, angle=-90): if depth <= 0: return new_angle = randint(-self.max_angle, self.max_angle) length = randint(10, 20) new_pos = Vec.from_angle(new_angle + angle) new_pos.mult(length) new_pos.add(pos) width = map_to_range(depth, 0, self.start_depth, self.end_width, self.start_width) self.branches.append( Branch(pos, new_pos, width) ) self.add_branch(depth-1, new_pos) for _ in range(self.max_branches): if randint(0, 100) < self.new_branch_chance: self.add_branch(depth-1, new_pos)
def get_new_disk(size, min_size, max_size): rad = randint(min_size, max_size) x, y = Vec.random_pos(size[0] - rad, size[1] - rad, min_x=rad, min_y=rad).get() return Disk(x, y, rad)
size = (1000, 600) screen = pygame.display.set_mode(size) screen.fill([255, 255, 255]) pygame.display.set_icon(screen) clock, fps = pygame.time.Clock(), 0 delta_time = 0 #endregion planet_recursion_depth = 5 sun = Sun(size, planet_recursion_depth) bg = pygame.image.load('Data/background.png').convert() space_ship_idle = pygame.image.load('Data/space_ship_idle.png') space_ship_moving = pygame.image.load('Data/space_ship_moving.png') cam_pos = Vector2D() heading_angle = 90 cam_vel = Vector2D() cam_speed = 2 cam_max_speed = 2 cam_rot_speed = 0.7 def controll_camera(): global heading_angle forward_vec = Vector2D.from_angle(heading_angle) forward_vec.mult(cam_speed) forward_vec.mult(delta_time) accel = False
def __init__(self, x, y): self.pos = Vector2D(x, y) self.colour = [0, 0, 0] ; self.colour_additions = 0 self.raw_colour_ray = Ray(x, y, 0) ; self.raw_ray_finished = False self.light_rays = [] ; self.light_ray_finished = False