def main(): scanner = SimpleScanner() gl.glClearColor(0.1, 0.1, 0.2, 1.0) timer_msec = int(1000 / 60) # 60 times per second renderer = Renderer() drawings_list = [] fish_queue = Queue( ) # Queue to maintain order of the fish and kill the oldest ones fish_limit = 10 # Maximum amount of fish to draw scanned_fish_queue = Queue() draw_ocean(drawings_list) fish_shader_program = Renderer.create_shader(gl.GL_VERTEX_SHADER, FISH_SHADER_CODE) bubble_texture = Renderer.create_texture_from_file( 'ocean/images/bubble.png') load_fish_from_files(scanner, drawings_list, fish_queue, fish_shader_program, bubble_texture) glut.glutDisplayFunc(partial(renderer.render, drawings_list)) glut.glutIgnoreKeyRepeat(True) glut.glutKeyboardFunc(create_key_processor(scanner, scanned_fish_queue)) glut.glutTimerFunc( timer_msec, create_animation_function(renderer, drawings_list, scanned_fish_queue, fish_queue, fish_limit, timer_msec, fish_shader_program, bubble_texture), 0) glut.glutMainLoop()
def draw_ocean(drawings_list: List[Drawing]) -> None: """ Draw all the sprites in the ocean scene :param drawings_list: Lists of sprites to draw :return: """ seaweed_shader_program = Renderer.create_shader(gl.GL_VERTEX_SHADER, SEAWEED_SHADER_CODE) drawings_list.append(create_back_layer('ocean/images/back_down.png', -0.8)) drawings_list.append( create_back_layer('ocean/images/back_middle.png', -0.78)) drawings_list.append(create_back_layer('ocean/images/back_reef.png', 0.8)) draw_sails(drawings_list, seaweed_shader_program) seaweed_texture = Renderer.create_texture_from_file( 'ocean/images/seaweed_2.png') # Draw seaweed under the ship drawing = DrawingSeaweed(seaweed_texture, shader=seaweed_shader_program) drawing.position = np.array([1.2, 0.4, -0.75]) drawing.scale = np.array([0.8, 0.4, 1.0]) drawings_list.append(drawing) seaweed_texture = Renderer.create_texture_from_file( 'ocean/images/seaweed_1.png') # Draw seaweed in the right corner drawing = DrawingSeaweed(seaweed_texture, shader=seaweed_shader_program) drawing.position = np.array([1.2, 1.0, 0.9]) drawing.scale = np.array([0.8, 1.4, 1.0]) # drawing.color = np.array([0.5, 0.5, 1.0]) drawings_list.append(drawing) # Draw seaweed in the front of the rock drawing = DrawingSeaweed(seaweed_texture, shader=seaweed_shader_program) drawing.position = np.array([0.2, 0.15, -0.7]) drawing.scale = np.array([0.4, 0.4, 1.0]) # drawing.color = np.array([0.6, 0.6, 1.0]) drawings_list.append(drawing) seaweed_texture = Renderer.create_texture_from_file( 'ocean/images/seaweed_3.png') # Draw seaweed in the left corner drawing = DrawingSeaweed(seaweed_texture, shader=seaweed_shader_program) drawing.position = np.array([-1.2, 0.6, 0.9]) drawing.scale = np.array([0.3, 1.0, 1.0]) # drawing.color = np.array([0.5, 0.5, 1.0]) drawings_list.append(drawing) # Draw seaweed on the background drawing = DrawingSeaweed(seaweed_texture, shader=seaweed_shader_program) drawing.position = np.array([-0.8, -0.5, -0.795]) drawing.scale = np.array([0.3, 1.0, 1.0]) drawing.color = np.array([0.3, 0.3, 0.8]) drawings_list.append(drawing) drawing = DrawingSeaweed(seaweed_texture, shader=seaweed_shader_program) drawing.position = np.array([0.0, -0.2, -0.795]) drawing.scale = np.array([-0.3, 1.0, 1.0]) drawing.color = np.array([0.3, 0.3, 0.8]) drawings_list.append(drawing) drawing = DrawingSeaweed(seaweed_texture, shader=seaweed_shader_program) drawing.position = np.array([-0.4, -0.2, -0.795]) drawing.scale = np.array([0.1, 0.3, 1.0]) drawing.color = np.array([0.1, 0.1, 0.4]) drawings_list.append(drawing)