void platformer_update() { character* main_char = entity_get("main_char"); if (left_held) { main_char->velocity.x -= 0.1; main_char->facing_left = true; } else if (right_held) { main_char->velocity.x += 0.1; main_char->facing_left = false; } else { main_char->velocity.x *= 0.95; } /* Give the player some gravity speed */ const float gravity = 0.2; main_char->velocity.y += gravity; /* Update moves position based on velocity */ character_update(main_char); /* Two phases of collision detection */ collision_detection(); collision_detection_coins(); /* Camera follows main character */ camera_position = vec2_new(main_char->position.x, -main_char->position.y); /* Update the framerate text */ ui_button* framerate = ui_elem_get("framerate"); ui_button_set_label(framerate, frame_rate_string()); /* Update the time text */ ui_button* victory = ui_elem_get("victory"); if (!victory->active) { level_time += frame_time(); ui_button* time = ui_elem_get("time"); sprintf(time->label->string, "Time %06i", (int)level_time); ui_text_draw(time->label); } }
static int load_resources(void* unused) { folder_load(P("./resources/terrain/")); folder_load(P("./resources/vegetation/")); static_object* skydome = entity_new("skydome", static_object); skydome->renderable = asset_hndl_new_load(P("./resources/terrain/skydome.obj")); ((renderable*)asset_hndl_ptr(skydome->renderable))->material = asset_hndl_new_load(P("$CORANGE/shaders/skydome.mat")); skydome->position = vec3_new(512, 0, 512); skydome->scale = vec3_new(1024, 1024, 1024); landscape* world = entity_new("world", landscape); world->terrain = asset_hndl_new_load(P("./resources/terrain/heightmap.raw")); world->normalmap = asset_hndl_new_load(P("./resources/terrain/normalsmap.dds")); world->colormap = asset_hndl_new_load(P("./resources/terrain/colormap.dds")); world->attributemap = asset_hndl_new_load(P("./resources/terrain/attributemap.dds")); landscape_set_textures(world, asset_hndl_new_load(P("./resources/terrain/surface.dds")), asset_hndl_new_load(P("./resources/terrain/surface_bump.dds")), asset_hndl_new_load(P("./resources/terrain/surface_far.dds")), asset_hndl_new_load(P("./resources/terrain/surface_far_bump.dds"))); vegetation_init(); //vegetation_add_type(asset_get("./resources/terrain/heightmap.raw"), // asset_get("./resources/vegetation/grass.obj"), // 4.0); ui_button* loading = ui_elem_get("loading"); ui_spinner* load_spinner = ui_elem_get("load_spinner"); ui_button* framerate = ui_elem_get("framerate"); ui_button* wireframe = ui_elem_get("wireframe"); ui_button* freecam = ui_elem_get("freecam"); loading->active = false; load_spinner->active = false; framerate->active = true; wireframe->active = true; freecam->active = true; loading_resources = false; return 1; }
void sea_update() { camera* cam = entity_get("camera"); light* sun = entity_get("sun"); wave_time += frame_time(); static_object* corvette = entity_get("corvette"); corvette->position.y = (sin(wave_time) + 1) / 2; corvette->rotation = v4_quaternion_pitch(sin(wave_time * 1.123) / 50); corvette->rotation = v4_quaternion_mul(corvette->rotation, v4_quaternion_yaw(sin(wave_time * 1.254) / 25)); corvette->rotation = v4_quaternion_mul(corvette->rotation, v4_quaternion_roll(sin(wave_time * 1.355) / 100)); static_object* center_sphere = entity_get("center_sphere"); physics_object* balls[100]; int num_balls; entities_get(balls, &num_balls, physics_object); for(int i = 0; i < num_balls; i++) { physics_object_collide_static(balls[i], center_sphere, frame_time()); physics_object_collide_static(balls[i], corvette, frame_time()); physics_object_update(balls[i], frame_time()); } Uint8 keystate = SDL_GetMouseState(NULL, NULL); if(keystate & SDL_BUTTON(1)) { float a1 = -(float)mouse_x * 0.01; float a2 = (float)mouse_y * 0.01; cam->position = v3_sub(cam->position, cam->target); cam->position = m33_mul_v3(m33_rotation_y( a1 ), cam->position ); cam->position = v3_add(cam->position, cam->target); cam->position = v3_sub(cam->position, cam->target); vector3 rotation_axis = v3_normalize(v3_cross( v3_sub(cam->position, v3_zero()) , v3(0,1,0) )); cam->position = m33_mul_v3(m33_rotation_axis_angle(rotation_axis, a2 ), cam->position ); cam->position = v3_add(cam->position, cam->target); } if(keystate & SDL_BUTTON(3)) { sun->position.x += (float)mouse_y / 2; sun->position.z -= (float)mouse_x / 2; } mouse_x = 0; mouse_y = 0; ui_button* framerate = ui_elem_get("framerate"); ui_button_set_label(framerate, frame_rate_string()); }
static int save_noise_to_file_thread(void* unused) { image* noise = perlin_noise_generate(512, 512, 8); image_tga_save_file(noise, "./perlin_noise.tga"); debug("Noise saved as perlin_noise.tga"); image_delete(noise); ui_spinner* save_spinner = ui_elem_get("save_spinner"); save_spinner->color.w = 0; currently_saving = false; return 0; }
void ui_elem_render(char* name) { ui_elem* elem = ui_elem_get(name); int* type_ptr = dict_get(ui_elem_types, name); int type_id = *type_ptr; for(int i = 0; i < num_ui_elem_handlers; i++) { ui_elem_handler ui_hand = ui_elem_handlers[i]; if (ui_hand.type_id == type_id) { ui_hand.render_func(elem); break; } } }
void metaballs_update() { camera* cam = entity_get("camera"); light* sun = entity_get("sun"); Uint8 keystate = SDL_GetMouseState(NULL, NULL); if(keystate & SDL_BUTTON(1)){ float a1 = -(float)mouse_x * frame_time() * 0.25; float a2 = (float)mouse_y * frame_time() * 0.25; cam->position = v3_sub(cam->position, cam->target); cam->position = m33_mul_v3(m33_rotation_y( a1 ), cam->position ); cam->position = v3_add(cam->position, cam->target); cam->position = v3_sub(cam->position, cam->target); vector3 rotation_axis = v3_normalize(v3_cross( v3_sub(cam->position, v3_zero()) , v3(0,1,0) )); cam->position = m33_mul_v3(m33_rotation_axis_angle(rotation_axis, a2 ), cam->position ); cam->position = v3_add(cam->position, cam->target); } if(keystate & SDL_BUTTON(3)){ sun->position.x += (float)mouse_y / 2; sun->position.z -= (float)mouse_x / 2; } mouse_x = 0; mouse_y = 0; particles_update(frame_time()); ui_button* framerate = ui_elem_get("framerate"); ui_button_set_label(framerate, frame_rate_string()); #ifdef MARCHING_CUBES marching_cubes_metaball_data( particle_positions_memory(), particles_count() ); marching_cubes_clear(); marching_cubes_update(); #endif #ifdef VOLUME_RENDERER volume_renderer_metaball_data( particle_positions_memory(), particles_count() ); volume_renderer_update(); #endif }
void sea_update() { camera* cam = entity_get("camera"); light* sun = entity_get("sun"); wave_time += frame_time(); static_object* corvette = entity_get("corvette"); corvette->position.y = (sin(wave_time) + 1) / 2; corvette->rotation = quaternion_pitch(sin(wave_time * 1.123) / 50); corvette->rotation = quaternion_mul(corvette->rotation, quaternion_yaw(sin(wave_time * 1.254) / 25)); corvette->rotation = quaternion_mul(corvette->rotation, quaternion_roll(sin(wave_time * 1.355) / 100)); static_object* center_sphere = entity_get("center_sphere"); physics_object* balls[100]; int num_balls; entities_get(balls, &num_balls, physics_object); for(int i = 0; i < num_balls; i++) { physics_object_collide_static(balls[i], center_sphere, frame_time()); physics_object_collide_static(balls[i], corvette, frame_time()); physics_object_update(balls[i], frame_time()); } Uint8 keystate = SDL_GetMouseState(NULL, NULL); if(keystate & SDL_BUTTON(3)){ sun->position.x += (float)mouse_y / 2; sun->position.z -= (float)mouse_x / 2; } mouse_x = 0; mouse_y = 0; ui_button* framerate = ui_elem_get("framerate"); ui_button_set_label(framerate, frame_rate_string()); }