void logic(void * data) { if(t3f_key[ALLEGRO_KEY_ESCAPE]) { t3f_exit(); } t3f_process_gui(page, data); }
void dot_privacy_logic(void * data) { APP_INSTANCE * app = (APP_INSTANCE *)data; bool m = false; dot_bg_objects_logic(data, DOT_GAME_LEVEL_BASE_SPEED); if(app->desktop_mode && t3f_mouse_button[0]) { m = true; } if(t3f_key[ALLEGRO_KEY_ESCAPE] || t3f_key[ALLEGRO_KEY_BACK] || m) { dot_menu_proc_privacy_back(data, 0, NULL); t3f_key[ALLEGRO_KEY_ESCAPE] = 0; t3f_key[ALLEGRO_KEY_BACK] = 0; t3f_mouse_button[0] = false; } app->tick++; if(!app->desktop_mode) { t3f_process_gui(app->menu[app->current_menu], app); } }
/* logic routines, passed to T^3 Framework */ void paddle_logic(void * data) { /* logic switch, use different logic for each state */ switch(paddle_state) { case EXAMPLE_STATE_TITLE: { t3f_process_gui(paddle_menu, data); break; } case EXAMPLE_STATE_GAME: { /* return to menu if Escape pressed */ if(t3f_key[ALLEGRO_KEY_ESCAPE]) { paddle_game_exit(); } /* store old paddle positions */ paddle[0].oy = paddle[0].y; paddle[1].oy = paddle[1].y; /* move paddle */ paddle[0].y = t3f_mouse_y - 32; if(paddle[0].y < 0) { paddle[0].y = 0; } if(paddle[0].y > 480.0 - 64.0) { paddle[0].y = 480.0 - 64.0; } t3f_move_collision_object_xy(paddle[0].object, paddle[0].x, paddle[0].y); /* move CPU paddle */ if(ball.vx > 0.0) { if(ball.x > paddle[1].x - 24) { paddle[1].y += paddle[1].dvy; } else { if(paddle[1].y < paddle[1].dy - 2.0) { paddle[1].y += 2.0; if(paddle[1].y > 480.0 - 64.0) { paddle[1].y = 480.0 - 64.0; } } else if(paddle[1].y > paddle[1].dy + 2.0) { paddle[1].y -= 2.0; if(paddle[1].y < 0.0) { paddle[1].y = 0.0; } } } /* correct paddle position so it doesn't go past edge */ if(paddle[1].y > 480.0 - 64.0) { paddle[1].y = 480.0 - 64.0; } if(paddle[1].y < 0.0) { paddle[1].y = 0.0; } } t3f_move_collision_object_xy(paddle[1].object, paddle[1].x, paddle[1].y); /* move ball */ ball.x += ball.vx; t3f_move_collision_object_xy(ball.object, ball.x, ball.y); if(ball.vx < 0 && t3f_check_object_collision(paddle[0].object, ball.object)) { al_play_sample(paddle_sample[EXAMPLE_SAMPLE_HIT], 0.5, 0.5, 1.0, ALLEGRO_PLAYMODE_ONCE, NULL); ball.x = paddle[0].x + 16.0; ball.vx = -ball.vx; ball.vx += EXAMPLE_SPEED_INCREASE; ball.vy -= (paddle[0].oy - paddle[0].y) / 4.0; if(ball.vy < -3.0) { ball.vy = -3.0; } if(ball.vy > 3.0) { ball.vy = 3.0; } paddle[1].dy = paddle_ai_predict_y() - 32 + 8.0; paddle[1].dvy = t3f_drand(&rng_state) * 6.0 - 3.0; } else if(ball.vx > 0 && t3f_check_object_collision(paddle[1].object, ball.object)) { al_play_sample(paddle_sample[EXAMPLE_SAMPLE_HIT], 0.5, 0.5, 1.0, ALLEGRO_PLAYMODE_ONCE, NULL); ball.x = paddle[1].x - 16.0 - 1.0; ball.vx = -ball.vx; ball.vx -= EXAMPLE_SPEED_INCREASE; ball.vy -= (paddle[1].oy - paddle[1].y) / 4.0; if(ball.vy < -3.0) { ball.vy = -3.0; } if(ball.vy > 3.0) { ball.vy = 3.0; } } if(ball.x < -16.0) { al_play_sample(paddle_sample[EXAMPLE_SAMPLE_SCORE], 0.5, 0.5, 1.0, ALLEGRO_PLAYMODE_ONCE, NULL); score[1]++; if(score[1] >= 5) { t3f_stop_music(); paddle_state = EXAMPLE_STATE_GAME_OVER; } paddle_init_ball(1.0); } else if(ball.x > 640.0) { al_play_sample(paddle_sample[EXAMPLE_SAMPLE_SCORE], 0.5, 0.5, 1.0, ALLEGRO_PLAYMODE_ONCE, NULL); score[0]++; if(score[0] >= 5) { t3f_stop_music(); paddle_state = EXAMPLE_STATE_GAME_OVER; } paddle_init_ball(-1.0); } ball.y += ball.vy; if(ball.y < 0.0) { ball.y = 0.0; ball.vy = -ball.vy; } else if(ball.y > 480.0 - 16.0) { ball.y = 480.0 - 16.0; ball.vy = -ball.vy; } break; } case EXAMPLE_STATE_GAME_OVER: { /* return to menu if Escape pressed */ if(t3f_mouse_button[0] || t3f_key[ALLEGRO_KEY_ESCAPE]) { paddle_game_exit(); } break; } } }
void dot_intro_logic(void * data) { APP_INSTANCE * app = (APP_INSTANCE *)data; int r; if(app->entering_name) { r = dot_text_entry_logic(); if(r != 0) { app->entering_name = false; } if(r == 1) { al_set_config_value(t3f_config, "Game Data", "User Name", app->user_name); } } dot_game_emo_logic(data); dot_bg_objects_logic(data, DOT_GAME_LEVEL_BASE_SPEED); switch(app->intro_state) { case DOT_INTRO_STATE_LOGO: { if(app->tick >= 900) { app->intro_state = DOT_INTRO_STATE_LOGO_OUT; } break; } case DOT_INTRO_STATE_LOGO_OUT: { app->logo_ox -= 4.0; app->credits_ox -= 4.0; if(app->logo_ox < -t3f_virtual_display_width) { app->credits.state = DOT_CREDITS_STATE_IN; app->intro_state = DOT_INTRO_STATE_CREDITS; } break; } case DOT_INTRO_STATE_CREDITS: { dot_credits_logic(&app->credits); if(app->credits.current_credit >= app->credits.credits) { app->credits.state = DOT_CREDITS_STATE_WAIT; app->intro_state = DOT_INTRO_STATE_CREDITS_OUT; } break; } case DOT_INTRO_STATE_CREDITS_OUT: { app->logo_ox += 4.0; app->credits_ox += 4.0; if(app->logo_ox >= 0.0) { app->credits.current_credit = 0; app->tick = 0; app->intro_state = DOT_INTRO_STATE_LOGO; } break; } } app->tick++; if(!app->entering_name && app->menu_showing) { t3f_process_gui(app->menu[app->current_menu], app); } if(!app->menu_showing) { if(t3f_mouse_button[0]) { app->menu_showing = true; t3f_mouse_button[0] = false; } } if(t3f_key[ALLEGRO_KEY_ESCAPE] || t3f_key[ALLEGRO_KEY_BACK]) { if(app->desktop_mode) { if(app->menu_showing) { if(app->current_menu == DOT_MENU_MAIN) { dot_intro_setup(data); app->menu_showing = false; } else { if(app->current_menu == DOT_MENU_LEADERBOARD_2) { t3f_play_music(DOT_MUSIC_TITLE); } app->current_menu = DOT_MENU_MAIN; } } else { t3f_exit(); } } else { if(app->current_menu == DOT_MENU_MAIN) { t3f_exit(); } else { app->current_menu = DOT_MENU_MAIN; } } t3f_key[ALLEGRO_KEY_ESCAPE] = 0; t3f_key[ALLEGRO_KEY_BACK] = 0; } }