diff --git a/app/Http/Controllers/Game/GymController.php b/app/Http/Controllers/Game/GymController.php new file mode 100644 index 0000000..9ffd1ec --- /dev/null +++ b/app/Http/Controllers/Game/GymController.php @@ -0,0 +1,51 @@ +trainingService = new TrainingService(); + } + + public function index(Request $request): View + { + $character = $request->user()->character; + $dailyCap = config('game.gym.daily_cap', 5); + $energyCost = config('game.gym.energy_cost', 20); + + $stats = []; + foreach (['strength', 'defense', 'speed', 'dexterity'] as $stat) { + $stats[$stat] = [ + 'value' => $character->$stat, + 'sessions_today' => $this->trainingService->getSessionsToday($character, $stat), + 'sessions_remaining'=> $this->trainingService->getSessionsRemaining($character, $stat), + ]; + } + + return view('game.gym.index', compact('character', 'stats', 'energyCost', 'dailyCap')); + } + + public function train(Request $request): RedirectResponse + { + $request->validate(['stat' => 'required|in:strength,defense,speed,dexterity']); + + $character = $request->user()->character; + $result = $this->trainingService->train($character, $request->stat); + + if ($result['success']) { + return redirect()->route('game.gym.index')->with('success', $result['message']); + } + + return redirect()->route('game.gym.index')->with('error', $result['message']); + } +} \ No newline at end of file diff --git a/routes/game.php b/routes/game.php index 3f62b4c..4d2f673 100644 --- a/routes/game.php +++ b/routes/game.php @@ -3,6 +3,7 @@ use App\Http\Controllers\Game\CharacterController; use App\Http\Controllers\Game\CrimeController; use App\Http\Controllers\Game\DashboardController; +use App\Http\Controllers\Game\GymController; use App\Http\Controllers\Game\InventoryController; use Illuminate\Support\Facades\Route; @@ -56,6 +57,12 @@ Route::middleware(['auth', 'verify.character'])->group(function () { Route::post('/{inventory}/use', [InventoryController::class, 'use'])->name('use'); Route::post('/{inventory}/drop', [InventoryController::class, 'drop'])->name('drop'); }); + + // Gym routes + Route::prefix('game/gym')->name('game.gym.')->group(function () { + Route::get('/', [GymController::class, 'index'])->name('index'); + Route::post('/train', [GymController::class, 'train'])->name('train')->middleware(['check.energy:gym']); + }); }); // Hospital route (for when character is in hospital)