コード例 #1
0
ファイル: rope.py プロジェクト: hamolicious/Rope-Simulation
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)
コード例 #2
0
    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))
コード例 #3
0
ファイル: rope.py プロジェクト: hamolicious/Rope-Simulation
    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
コード例 #4
0
    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)
コード例 #5
0
    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))
コード例 #6
0
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
コード例 #7
0
    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)
コード例 #8
0
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)
コード例 #9
0
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
コード例 #10
0
    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