int game_step(const float g[3], float dt) { struct s_file *fp = &file; static float s = 0.f; static float t = 0.f; float d = 0.f; float b = 0.f; float st = 0.f; int i, n = 1, m = 0; s = (7.f * s + dt) / 8.f; t = s; if (jump_b) { jump_dt += dt; /* Handle a jump. */ if (0.5 < jump_dt) { fp->uv[ball].p[0] = jump_p[0]; fp->uv[ball].p[1] = jump_p[1]; fp->uv[ball].p[2] = jump_p[2]; } if (1.f < jump_dt) jump_b = 0; } else { /* Run the sim. */ while (t > MAX_DT && n < MAX_DN) { t /= 2; n *= 2; } for (i = 0; i < n; i++) { d = sol_step(fp, g, t, ball, &m); if (b < d) b = d; if (m) st += t; } /* Mix the sound of a ball bounce. */ if (b > 0.5) audio_play(AUD_BUMP, (float) (b - 0.5) * 2.0f); } game_update_view(dt); return game_update_state(st); }
static void stroke_timer(int id, float dt) { float g[3] = { 0.f, 0.f, 0.f }; //senquack - allowed more flexible aim-speed control #ifdef GCWZERO float rot_dir = stroke_rotate; float rot_speed = 0.0f; if (l_pressed && r_pressed) { rot_dir = 0.0f; // k = 0.0f; } else if (l_pressed) { rot_dir = -1.0f; rot_speed = 24.0f; } else if (r_pressed) { rot_dir = 1.0f; rot_speed = 24.0f; } else { if (fast_aim) { rot_speed = 24.0f; } else { rot_speed = 2.0f; } } game_set_rot(rot_dir * rot_speed); if (fast_aim) { game_set_mag(stroke_mag * 24.0f); } else { game_set_mag(stroke_mag * 6.0f); } #else float k; if (SDL_GetModState() & KMOD_SHIFT || (joystick && SDL_JoystickGetButton(joystick, config_get_d(CONFIG_JOYSTICK_BUTTON_X)))) { k = 0.25f; } else { k = 1.0f; } game_set_rot(stroke_rotate * k); game_set_mag(stroke_mag * k); #endif //GCWZERO game_update_view(dt); game_step(g, dt); }
static void stop_timer(int id, float dt) { float g[3] = { 0.f, 0.f, 0.f }; game_update_view(dt); game_step(g, dt); if (time_state() > 1) { if (hole_next()) goto_state(&st_next); else goto_state(&st_score); } }
static void stroke_timer(int id, float dt) { float g[3] = { 0.f, 0.f, 0.f }; float k; if (SDL_GetModState() & KMOD_SHIFT || (joystick && SDL_JoystickGetButton(joystick, config_get_d(CONFIG_JOYSTICK_BUTTON_B)))) k = 0.25; else k = 1.0; game_set_rot(stroke_rotate * k); game_set_mag(stroke_mag * k); game_update_view(dt); game_step(g, dt); }
static int game_step(const float g[3], float dt, int bt) { if (server_state) { float h[3]; /* Smooth jittery or discontinuous input. */ tilt.rx += (input_get_x() - tilt.rx) * dt / input_get_s(); tilt.rz += (input_get_z() - tilt.rz) * dt / input_get_s(); game_tilt_axes(&tilt, view.e); game_cmd_tiltaxes(); game_cmd_tiltangles(); grow_step(&vary, dt); game_tilt_grav(h, g, &tilt); if (jump_b > 0) { jump_dt += dt; /* Handle a jump. */ if (jump_dt >= 0.5f) { /* Translate view at the exact instant of the jump. */ if (jump_b == 1) { float dp[3]; v_sub(dp, jump_p, vary.uv->p); v_add(view.p, view.p, dp); jump_b = 2; } /* Translate ball and hold it at the destination. */ v_cpy(vary.uv->p, jump_p); } if (jump_dt >= 1.0f) jump_b = 0; } else { /* Run the sim. */ float b = sol_step(&vary, h, dt, 0, NULL); /* Mix the sound of a ball bounce. */ if (b > 0.5f) { float k = (b - 0.5f) * 2.0f; if (got_orig) { if (vary.uv->r > grow_orig) audio_play(AUD_BUMPL, k); else if (vary.uv->r < grow_orig) audio_play(AUD_BUMPS, k); else audio_play(AUD_BUMPM, k); } else audio_play(AUD_BUMPM, k); } } game_cmd_updball(); game_update_view(dt); game_update_time(dt, bt); return game_update_state(bt); } return GAME_NONE; }
int game_step(const float g[3], float dt, int bt) { struct s_file *fp = &file; float h[3]; float d = 0.f; float b = 0.f; float t; int i, n = 1; #ifdef REDUCE_PHYSICS static unsigned tn=0; tn++; sol_test_inc=((tn&1))+1; sol_test_inc2=((~tn&1))+1; // if ((tn&1)) // sol_test_max=0.2333333f; // else // sol_test_max=0.3333333f; #endif if (game_state) { t = dt; /* Smooth jittery or discontinuous input. */ if (t < RESPONSE) { game_rx += (game_ix - game_rx) * t / RESPONSE; game_rz += (game_iz - game_rz) * t / RESPONSE; } else { game_rx = game_ix; game_rz = game_iz; } game_update_grav(h, g); part_step(h, t); if (jump_b) { jump_dt += t; /* Handle a jump. */ if (0.5 < jump_dt) { fp->uv[0].p[0] = jump_p[0]; fp->uv[0].p[1] = jump_p[1]; fp->uv[0].p[2] = jump_p[2]; } if (1.f < jump_dt) jump_b = 0; } else { /* Run the sim. */ while (t > MAX_DT && n < MAX_DN) { t /= 2; n *= 2; } for (i = 0; i < n; i++) if (b < (d = sol_step(fp, h, t, 0, NULL))) b = d; /* Mix the sound of a ball bounce. */ if (b > 0.5) audio_play(AUD_BUMP, (b - 0.5f) * 2.0f); } game_step_fade(dt); game_update_view(dt); game_update_time(dt, bt); return game_update_state(); } return GAME_NONE; }