void melee_tick(scene *scene, int paused) { melee_local *local = scene_get_userdata(scene); game_player *player1 = game_state_get_player(scene->gs, 0); game_player *player2 = game_state_get_player(scene->gs, 1); ctrl_event *i = NULL; // Handle extra controller inputs i = player1->ctrl->extra_events; if (i) { do { if(i->type == EVENT_TYPE_ACTION) { handle_action(scene, 1, i->event_data.action); } else if (i->type == EVENT_TYPE_CLOSE) { game_state_set_next(scene->gs, SCENE_MENU); return; } } while((i = i->next)); } i = player2->ctrl->extra_events; if (i) { do { if(i->type == EVENT_TYPE_ACTION) { handle_action(scene, 2, i->event_data.action); } else if (i->type == EVENT_TYPE_CLOSE) { game_state_set_next(scene->gs, SCENE_MENU); return; } } while((i = i->next)); } if(!local->pulsedir) { local->ticks++; } else { local->ticks--; } if(local->ticks > 120) { local->pulsedir = 1; } if(local->ticks == 0) { local->pulsedir = 0; } local->hartick++; if (local->selection == 1) { if(local->hartick > 10) { local->hartick = 0; object_dynamic_tick(&local->har_player1[5*local->row_a + local->column_a]); if (player2->selectable) { object_dynamic_tick(&local->har_player2[5*local->row_b + local->column_b]); } } } }
void mechlab_tick(scene *scene, int paused) { mechlab_local *local = scene_get_userdata(scene); guiframe_tick(local->frame); guiframe_tick(local->dashboard); object_dynamic_tick(local->mech); // Check if root is finished component *root = guiframe_get_root(local->frame); if(trnmenu_is_finished(root)) { if(local->dashtype == DASHBOARD_SELECT_NEW_PIC) { guiframe_free(local->frame); local->frame = guiframe_create(0, 0, 320, 200); guiframe_set_root(local->frame, lab_menu_pilotselect_create(scene, &local->dw)); guiframe_layout(local->frame); } else { game_state_set_next(scene->gs, SCENE_MENU); } } }
// Init mechlab int mechlab_create(scene *scene) { // Alloc mechlab_local *local = malloc(sizeof(mechlab_local)); memset(local, 0, sizeof(mechlab_local)); animation *bg_ani[3]; // Init the background for(int i = 0; i < sizeof(bg_ani)/sizeof(animation*); i++) { sprite *spr = sprite_copy(animation_get_sprite(&bk_get_info(&scene->bk_data, 14)->ani, i)); bg_ani[i] = create_animation_from_single(spr, spr->pos); object_create(&local->bg_obj[i], scene->gs, vec2i_create(0,0), vec2f_create(0,0)); object_set_animation(&local->bg_obj[i], bg_ani[i]); object_select_sprite(&local->bg_obj[i], 0); object_set_repeat(&local->bg_obj[i], 1); object_set_animation_owner(&local->bg_obj[i], OWNER_OBJECT); } // Find last saved game ... game_player *p1 = game_state_get_player(scene->gs, 0); const char* last_name = settings_get()->tournament.last_name; if(last_name == NULL || strlen(last_name) == 0) { last_name = NULL; } // ... and attempt to load it, if one was found. if(last_name != NULL) { int ret = sg_load(&p1->pilot, last_name); if(ret != SD_SUCCESS) { PERROR("Could not load saved game for playername '%s': %s!", last_name, sd_get_error(ret)); last_name = NULL; } else { DEBUG("Loaded savegame for playername '%s'.", last_name); } } // Either initialize a new tournament if no savegame is found, // or just show old savegame stats directly if it was. local->dashtype = DASHBOARD_NONE; if(last_name == NULL) { DEBUG("No previous savegame found"); } else { DEBUG("Previous savegame found; loading as default."); } mechlab_select_dashboard(scene, local, DASHBOARD_STATS); // Create main menu local->frame = guiframe_create(0, 0, 320, 200); guiframe_set_root(local->frame, lab_menu_main_create(scene)); guiframe_layout(local->frame); // Load HAR animation *initial_har_ani = &bk_get_info(&scene->bk_data, 15 + p1->pilot.har_id)->ani; local->mech = malloc(sizeof(object)); object_create(local->mech, scene->gs, vec2i_create(0,0), vec2f_create(0,0)); object_set_animation(local->mech, initial_har_ani); object_set_repeat(local->mech, 1); object_dynamic_tick(local->mech); // Set callbacks scene_set_userdata(scene, local); scene_set_input_poll_cb(scene, mechlab_input_tick); scene_set_event_cb(scene, mechlab_event); scene_set_render_cb(scene, mechlab_render); scene_set_free_cb(scene, mechlab_free); scene_set_dynamic_tick_cb(scene, mechlab_tick); // Pick renderer video_select_renderer(VIDEO_RENDERER_HW); return 0; }