Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion app/Http/Controllers/Api/RoomProgressController.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public function show()
public function complete(Request $request)
{
$request->validate([
'roomId' => 'required|integer|min:1|max:10',
'roomId' => 'required|integer|min:1|max:9',
]);

$roomId = $request->input('roomId');
Expand Down Expand Up @@ -49,6 +49,7 @@ public function complete(Request $request)
'currentRoom' => $progress->current_room,
'completedRooms' => $progress->completed_rooms,
'message' => 'Salle complétée avec succès',
'allRoomsCompleted' => count($completedRooms) === 9,
]);
}

Expand Down
2 changes: 1 addition & 1 deletion app/Models/RoomProgress.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public function completeRoom(int $roomId): bool
}

// Passer à la salle suivante (max 10 salles)
$nextRoom = $roomId < 10 ? $roomId + 1 : $roomId;
$nextRoom = $roomId < 9 ? $roomId + 1 : $roomId;

$this->update([
'completed_rooms' => $completedRooms,
Expand Down
Binary file modified laravel
Binary file not shown.
33 changes: 17 additions & 16 deletions resources/js/pages/dashboard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,12 @@ const rooms = [
{ id: 1, name: "La salle des Lumières", status: "locked", icon: "💡" },
{ id: 2, name: "La Salle des Symboles", status: "locked", icon: "🔣" },
{ id: 3, name: "La Bibliothèque mystérieuse", status: "locked", icon: "📚" },
{ id: 4, name: "Le Labyrinthe", status: "locked", icon: "🌀" },
{ id: 5, name: "La Salle du Code", status: "locked", icon: "🔐" },
{ id: 6, name: "Le Puzzle de cable", status: "locked", icon: "🔌" },
{ id: 7, name: "Après la pluie voila le soleil", status: "locked", icon: "🌈" },
{ id: 8, name: "Le Protocole Simon", status: "locked", icon: "🎮" },
{ id: 9, name: "Le Plateau Mystère", status: "locked", icon: "🎲" },
{ id: 10, name: "La Synchronisation Finale", status: "locked", icon: "⚡" },
{ id: 4, name: "La Grille Mystérieuse", status: "locked", icon: "🎨" },
{ id: 5, name: "Le Puzzle de cable", status: "locked", icon: "🔌" },
{ id: 6, name: "Le Mot Mêlé du Manoir", status: "locked", icon: "🔤" },
{ id: 7, name: "Le Protocole Simon", status: "locked", icon: "🎮" },
{ id: 8, name: "Le Plateau Mystère", status: "locked", icon: "🎲" },
{ id: 9, name: "Le Coffre-Fort du Voleur", status: "locked", icon: "🔐" },
];

interface RoomProgress {
Expand Down Expand Up @@ -150,19 +149,21 @@ export default function Dashboard() {
</div>

{/* Actions */}
{room.id === currentRoom && (
{isRoomAccessible(room.id) && (
<div className="mt-4 flex gap-3">
<Link
href="/messages"
className="px-4 py-2 bg-green-700 hover:bg-green-600 text-black font-bold border border-green-500 transition-all duration-200 text-sm"
>
OUVRIR CANAL SÉCURISÉ
</Link>
{room.id === currentRoom && (
<Link
href="/messages"
className="px-4 py-2 bg-green-700 hover:bg-green-600 text-black font-bold border border-green-500 transition-all duration-200 text-sm"
>
OUVRIR CANAL SÉCURISÉ
</Link>
)}
<Link
href={`/room/${room.id}`}
className="px-4 py-2 border border-green-500/50 hover:border-green-400 text-green-400 transition-all duration-200 text-sm"
className={`px-4 py-2 ${room.id === currentRoom ? 'border border-green-500/50 hover:border-green-400 text-green-400' : 'border border-green-600 bg-green-800/30 hover:bg-green-800/50 text-green-300'} transition-all duration-200 text-sm`}
>
ENTRER DANS LA SALLE →
{completedRooms.includes(room.id) ? 'REVOIR LA SALLE ↻' : 'ENTRER DANS LA SALLE →'}
</Link>
</div>
)}
Expand Down
38 changes: 13 additions & 25 deletions resources/js/pages/rooms/room-1.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
import { Head, Link } from '@inertiajs/react';
import { useState, useEffect } from 'react';
import { useState } from 'react';
import ChatPanel from '@/components/ChatPanel';
import CompleteRoomButton from '@/components/CompleteRoomButton';
import { Message } from '@/types';

// Code Morse: "LUMIERE" = .-.. ..- -- .. . .-. .
// Code Morse: "OEUVRE" = --- . ..- ...- .-. .
const morseCode = [
{ char: 'L', pattern: [1, 0, 2, 0, 1, 0, 1] }, // .-..
{ char: 'U', pattern: [1, 0, 1, 0, 2] }, // ..-
{ char: 'M', pattern: [2, 0, 2] }, // --
{ char: 'I', pattern: [1, 0, 1] }, // ..
{ char: 'O', pattern: [2, 0, 2, 0, 2] }, // ---
{ char: 'E', pattern: [1] }, // .
{ char: 'U', pattern: [1, 0, 1, 0, 2] }, // ..-
{ char: 'V', pattern: [1, 0, 1, 0, 1, 0, 2] }, // ...-
{ char: 'R', pattern: [1, 0, 2, 0, 1] }, // .-.
{ char: 'E', pattern: [1] }, // .
];
Expand Down Expand Up @@ -62,7 +61,7 @@ export default function Room1({ messages, sessionId }: { messages: Message[]; se

const handleSubmit = (e: React.FormEvent) => {
e.preventDefault();
if (userInput.toUpperCase() === 'LUMIERE') {
if (userInput.toUpperCase() === 'OEUVRE') {
setSolved(true);
} else {
alert('Code incorrect ! Observez bien les lumières.');
Expand Down Expand Up @@ -100,18 +99,19 @@ export default function Room1({ messages, sessionId }: { messages: Message[]; se
</h1>

<p className="text-xl mb-8 text-yellow-300/80">
"Décodez le message lumineux..."
"Chaque clignotement éclaire un secret."
</p>

{/* Instructions */}
<div className="border-2 border-yellow-500/30 bg-yellow-950/20 p-6 mb-8 text-left">
<h3 className="text-lg font-bold mb-3 text-yellow-400">📋 INSTRUCTIONS :</h3>
<div className="space-y-2 text-yellow-300/80 text-sm">
<p>• <strong className="text-yellow-400">Joueur WEB</strong> : Observez les lumières qui clignotent</p>
<p>• <strong className="text-yellow-400">Agent Wilson (WEB)</strong> : Observez les lumières qui clignotent</p>
<p>• Lumière <strong className="text-yellow-400">COURTE</strong> = point (.)</p>
<p>• Lumière <strong className="text-yellow-400">LONGUE</strong> = trait (-)</p>
<p>• <strong className="text-yellow-400">Pause</strong> = nouvelle lettre</p>
<p>• Décrivez les signaux au joueur MOBILE qui décode le morse</p>
<p>• Décrivez précisément les signaux à <strong className="text-yellow-400">Agent Owen (MOBILE)</strong></p>
<p>• <strong className="text-yellow-400">Agent Owen</strong> possède le tableau de décodage Morse</p>
</div>
</div>

Expand All @@ -136,18 +136,6 @@ export default function Room1({ messages, sessionId }: { messages: Message[]; se
</button>
</div>

{/* Morse Reference */}
<div className="border border-yellow-600/30 bg-yellow-950/10 p-4 mb-8 text-xs">
<details className="cursor-pointer">
<summary className="text-yellow-400 font-bold mb-2">📖 AIDE: Table du code Morse</summary>
<div className="grid grid-cols-5 gap-2 text-yellow-300/70">
{Object.entries(morseToText).map(([morse, letter]) => (
<div key={letter}>{letter}: {morse}</div>
))}
</div>
</details>
</div>

{/* Input form */}
{!solved && (
<form onSubmit={handleSubmit} className="space-y-4">
Expand Down Expand Up @@ -179,10 +167,10 @@ export default function Room1({ messages, sessionId }: { messages: Message[]; se
✨ CODE DÉCODÉ! ✨
</div>
<p className="text-yellow-300 mb-4 text-xl">
Message: <span className="font-bold">LUMIERE</span>
Message: <span className="font-bold">OEUVRE</span>
</p>
<p className="text-yellow-300 mb-6">
Code de la salle: <span className="font-bold text-2xl text-green-400">4729</span>
<p className="text-yellow-300 mb-6 italic text-sm">
"L'art est lumière, et la lumière guide les esprits."
</p>
</div>
)}
Expand Down
Loading
Loading