Compare commits
112 Commits
3a8219f867
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| d0e9f9951d | |||
| 6e546483f9 | |||
| ddcb13cd63 | |||
| 2eb0e64b30 | |||
| 6a5774667e | |||
|
|
3a6bd21b59 | ||
|
|
a5fa460a69 | ||
|
|
694de9e2d6 | ||
| 9fdfe27728 | |||
|
|
ea479f8225 | ||
|
|
6127e53708 | ||
|
|
2f9da6b38e | ||
|
|
2b8dc254bf | ||
|
|
068ad3dd92 | ||
|
|
954af3cded | ||
|
|
cfeded5079 | ||
|
|
ac9ba24857 | ||
|
|
b15ca69499 | ||
|
|
12e8ac34d4 | ||
|
|
4a21f85a37 | ||
|
|
1eb3aec524 | ||
|
|
647e5b9048 | ||
|
|
903a1de933 | ||
|
|
fa1ffc214c | ||
| 1145d26e9d | |||
|
|
c1cb862f4c | ||
|
|
6767f55640 | ||
|
|
f4c821ae97 | ||
|
|
67d1453c23 | ||
|
|
90a0de0429 | ||
|
|
d988aabac0 | ||
|
|
34d213d5f4 | ||
|
|
ab4043defa | ||
|
|
11d47caf1e | ||
|
|
40fe732caa | ||
| 6229fe7b9e | |||
|
|
36fa5a9092 | ||
|
|
f9e94f5c18 | ||
|
|
1ad8282833 | ||
| 4b8a650c26 | |||
|
|
94a60de6b2 | ||
| 663e89de9e | |||
| 0ccd551ef8 | |||
| 7131b876cc | |||
|
|
8517ac89da | ||
|
|
be14f4513c | ||
|
|
0c2d989ad8 | ||
|
|
1c59e7af7a | ||
| 63c4244e92 | |||
| 4d1ed00f03 | |||
|
|
40a8dee263 | ||
|
|
d8f56cb548 | ||
|
|
853a6ae9ee | ||
|
|
6d81f67ddf | ||
| 2c03331663 | |||
| 3e6a2130e9 | |||
| 2eb7bd46dc | |||
| a9c4c653d2 | |||
| e787094078 | |||
|
|
1ade298ff5 | ||
| d5a84144ef | |||
| 1276edf2f2 | |||
| 90e2064ec9 | |||
| 34b76b2cb9 | |||
|
|
a9d2a0c9a5 | ||
|
|
15b585df02 | ||
|
|
f6347feff1 | ||
|
|
c7f0e747b1 | ||
|
|
1d28a75529 | ||
|
|
ecbf7a5b34 | ||
|
|
46660bd921 | ||
|
|
9c7c2ddc1d | ||
|
|
edea5e0972 | ||
|
|
f3809db72b | ||
|
|
68b6493e50 | ||
| a267884dbe | |||
| 64b0e5e770 | |||
| 57b37d0139 | |||
| 4939b74fad | |||
| 7e5de16a02 | |||
|
|
49045e4d76 | ||
|
|
43100e65e9 | ||
|
|
94ddc4a00f | ||
|
|
abf097e117 | ||
| ee415c3d8b | |||
| 4fc21e7876 | |||
| 37aa7b5067 | |||
|
|
09d54aa525 | ||
|
|
76de2a5a5c | ||
|
|
284e396d5f | ||
| e77fb7cb1e | |||
| 4c1a439319 | |||
|
|
4ba42f6566 | ||
| 999d27936a | |||
|
|
d0e282b41c | ||
| 024b80d393 | |||
| b509c9f4c3 | |||
| 34fbb797c1 | |||
| 26cdc99701 | |||
| b10b6475d8 | |||
| 2dbfff770f | |||
|
|
9b1e2ccf6d | ||
|
|
68421a71df | ||
| a791415bd3 | |||
|
|
577357b090 | ||
| 1be3750672 | |||
| 5668d21b0d | |||
| 001adb89bd | |||
| 04a0e1a912 | |||
| 554d44cebb | |||
|
|
3ad5811566 | ||
|
|
a8a0f54cb7 |
3
.gitignore
vendored
@@ -1 +1,2 @@
|
||||
Test
|
||||
Test
|
||||
backend/user.db
|
||||
128
README.md
@@ -1,23 +1,117 @@
|
||||
Règles :
|
||||
Un rayon laser constant
|
||||
Un ou plusieurs laser
|
||||
Laser non movibles, on/off
|
||||
Mirroirs orientables
|
||||
Prisme (dédouble le laser ou le renvoi selon l'angle)
|
||||
Vitre colorée fixe ou placable par le joueur (r,j,b)
|
||||
Bouton allumable par clique souris (interaction porte, mirroir, etc)
|
||||
Bouton allumable par laser spécifique (interaction porte, mirroir, etc)
|
||||
<div align="center">
|
||||
<h1 align="center">MirrorGame</h1>
|
||||
<p align="center">
|
||||
Browser puzzle game where you guide lasers with mirrors, tinted glass, doors, and triggers.
|
||||
<br />
|
||||
<br />
|
||||
<a href="https://git.ninolbt.com/Nono/Projet_48h/issues">⚠️ Report Bug</a>
|
||||
·
|
||||
<a href="https://git.ninolbt.com/Nono/Projet_48h/issues">💡 Request Feature</a>
|
||||
·
|
||||
<a href="https://gamegamegame.ninolbt.com/">🎮 Play Online</a>
|
||||
</p>
|
||||
<p align="center">
|
||||
<img src="https://img.shields.io/badge/language-Rust%20%7C%20HTML%20%7C%20CSS%20%7C%20JavaScript-00ADD8?style=for-the-badge&labelColor=000000" />
|
||||
<img src="https://img.shields.io/badge/platform-Web-6E56CF?style=for-the-badge&labelColor=000000" />
|
||||
<img src="https://img.shields.io/badge/status-Playable-28A745?style=for-the-badge&labelColor=000000" />
|
||||
</p>
|
||||
<p align="center">
|
||||
<img src="./web/assets/img/image_game.png" alt="MirrorGame main menu" />
|
||||
</p>
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
Rayon :
|
||||
Blanc -> rebondis seulement sur les mirroirs et s'arrête contre les murs
|
||||
Rouge -> Allumage boutons
|
||||
Bleu -> Rebondis sur toutes les surfaces
|
||||
Jaune -> Traverse tout (mirroir compris)
|
||||
### 🔍 Overview
|
||||
|
||||
`MirrorGame` is a small laser-reflection puzzle game built during a game jam format.
|
||||
|
||||
Systeme de placement d'objet par grille
|
||||
The goal is to route a laser beam through each level by rotating mirrors, using tinted glass to change beam color, and interacting with doors, buttons, captors, and other grid-based puzzle elements until the beam reaches the target.
|
||||
|
||||
Comptes utilisateur
|
||||
The game is playable online and can also be run locally through the Rust server included in this repository.
|
||||
> Level progression is stored locally in your browser with `localStorage`.
|
||||
|
||||
Optionnel : timer, tableau de score,
|
||||
### ✨ Features
|
||||
|
||||
- **Laser puzzle gameplay**: Redirect beams across handcrafted levels to activate targets.
|
||||
- **Mirror rotation**: Rotate mirrors directly on the board to change the laser path.
|
||||
- **Colored glass placement**: Drag and drop red, blue, and yellow glass tiles onto the grid.
|
||||
- **Interactive mechanisms**: Trigger doors, buttons, captors, and rotating mirror systems.
|
||||
- **Multiple levels**: Progress through several unlockable puzzle stages.
|
||||
- **Browser save data**: Unlocked levels are persisted between sessions with `localStorage`.
|
||||
- **Rust-powered local server**: Lightweight backend serves the HTML, CSS, JS, and assets.
|
||||
|
||||
### 🎮 Live Demo
|
||||
|
||||
Play here: [MirrorGame](https://gamegamegame.ninolbt.com/)
|
||||
|
||||
### 🖼️ Screenshot
|
||||
|
||||
Main menu:
|
||||
|
||||

|
||||
|
||||
### 🧰 Requirements
|
||||
|
||||
- Rust and Cargo
|
||||
- A modern desktop browser
|
||||
|
||||
---
|
||||
|
||||
### 🚀 Installation and usage
|
||||
|
||||
#### Option 1 — Play online
|
||||
|
||||
- Open [**MirrorGame**](https://gamegamegame.ninolbt.com/) in your browser.
|
||||
|
||||
#### Option 2 — Run locally from source
|
||||
|
||||
1. Install Rust using [rustup](https://rustup.rs/).
|
||||
2. Clone or download this repository.
|
||||
3. Open a terminal in the `backend` folder.
|
||||
4. Start the local server:
|
||||
|
||||
```bash
|
||||
cargo run
|
||||
```
|
||||
|
||||
5. Open your browser at:
|
||||
|
||||
```text
|
||||
http://127.0.0.1:3500
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 📖 How to play
|
||||
|
||||
1. **Launch the game**
|
||||
- Open the online version or run the project locally.
|
||||
- Click **Play** from the main menu.
|
||||
|
||||
2. **Understand the goal**
|
||||
- Each level starts with a laser source.
|
||||
- Your objective is to make the beam reach the target tile.
|
||||
|
||||
3. **Rotate mirrors**
|
||||
- Click mirrors to rotate them and redirect the beam.
|
||||
- Some mirrors are controlled by puzzle mechanisms instead of direct input.
|
||||
|
||||
4. **Use tinted glass**
|
||||
- Drag red, blue, or yellow glass from the toolbox onto empty cells.
|
||||
- Double-click a placed glass tile to remove it and get it back.
|
||||
|
||||
5. **Solve interactions**
|
||||
- Red beams can activate buttons and captors.
|
||||
- Doors, rotators, and other level elements react depending on the puzzle setup.
|
||||
|
||||
6. **Progress through levels**
|
||||
- Completing a level unlocks the next one.
|
||||
- Use the level menu to revisit unlocked stages.
|
||||
|
||||
---
|
||||
|
||||
### 🛠️ Tech Stack
|
||||
|
||||
- **Backend**: Rust with `axum` and `tower-http`
|
||||
- **Frontend**: HTML, CSS, and vanilla JavaScript
|
||||
1
backend/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/target
|
||||
865
backend/Cargo.lock
generated
Normal file
@@ -0,0 +1,865 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 4
|
||||
|
||||
[[package]]
|
||||
name = "atomic-waker"
|
||||
version = "1.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
|
||||
|
||||
[[package]]
|
||||
name = "autocfg"
|
||||
version = "1.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
|
||||
|
||||
[[package]]
|
||||
name = "axum"
|
||||
version = "0.8.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8b52af3cb4058c895d37317bb27508dccc8e5f2d39454016b297bf4a400597b8"
|
||||
dependencies = [
|
||||
"axum-core",
|
||||
"bytes",
|
||||
"form_urlencoded",
|
||||
"futures-util",
|
||||
"http",
|
||||
"http-body",
|
||||
"http-body-util",
|
||||
"hyper",
|
||||
"hyper-util",
|
||||
"itoa",
|
||||
"matchit",
|
||||
"memchr",
|
||||
"mime",
|
||||
"percent-encoding",
|
||||
"pin-project-lite",
|
||||
"serde_core",
|
||||
"serde_json",
|
||||
"serde_path_to_error",
|
||||
"serde_urlencoded",
|
||||
"sync_wrapper",
|
||||
"tokio",
|
||||
"tower",
|
||||
"tower-layer",
|
||||
"tower-service",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "axum-core"
|
||||
version = "0.5.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"futures-core",
|
||||
"http",
|
||||
"http-body",
|
||||
"http-body-util",
|
||||
"mime",
|
||||
"pin-project-lite",
|
||||
"sync_wrapper",
|
||||
"tower-layer",
|
||||
"tower-service",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "axum-server"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b1df331683d982a0b9492b38127151e6453639cd34926eb9c07d4cd8c6d22bfc"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"either",
|
||||
"fs-err",
|
||||
"http",
|
||||
"http-body",
|
||||
"hyper",
|
||||
"hyper-util",
|
||||
"tokio",
|
||||
"tower-service",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "backend"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"axum",
|
||||
"axum-server",
|
||||
"serde",
|
||||
"sqlite",
|
||||
"tokio",
|
||||
"tower-http",
|
||||
"tracing-subscriber",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "2.10.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3"
|
||||
|
||||
[[package]]
|
||||
name = "bytes"
|
||||
version = "1.11.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
|
||||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.2.58"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e1e928d4b69e3077709075a938a05ffbedfa53a84c8f766efbf8220bb1ff60e1"
|
||||
dependencies = [
|
||||
"find-msvc-tools",
|
||||
"shlex",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
|
||||
|
||||
[[package]]
|
||||
name = "either"
|
||||
version = "1.15.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
|
||||
|
||||
[[package]]
|
||||
name = "equivalent"
|
||||
version = "1.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
|
||||
|
||||
[[package]]
|
||||
name = "errno"
|
||||
version = "0.3.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "find-msvc-tools"
|
||||
version = "0.1.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
|
||||
|
||||
[[package]]
|
||||
name = "fnv"
|
||||
version = "1.0.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
|
||||
|
||||
[[package]]
|
||||
name = "form_urlencoded"
|
||||
version = "1.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
|
||||
dependencies = [
|
||||
"percent-encoding",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fs-err"
|
||||
version = "3.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "73fde052dbfc920003cfd2c8e2c6e6d4cc7c1091538c3a24226cec0665ab08c0"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"tokio",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "futures-channel"
|
||||
version = "0.3.32"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d"
|
||||
dependencies = [
|
||||
"futures-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "futures-core"
|
||||
version = "0.3.32"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"
|
||||
|
||||
[[package]]
|
||||
name = "futures-sink"
|
||||
version = "0.3.32"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893"
|
||||
|
||||
[[package]]
|
||||
name = "futures-task"
|
||||
version = "0.3.32"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393"
|
||||
|
||||
[[package]]
|
||||
name = "futures-util"
|
||||
version = "0.3.32"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
|
||||
dependencies = [
|
||||
"futures-core",
|
||||
"futures-task",
|
||||
"pin-project-lite",
|
||||
"slab",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "h2"
|
||||
version = "0.4.13"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54"
|
||||
dependencies = [
|
||||
"atomic-waker",
|
||||
"bytes",
|
||||
"fnv",
|
||||
"futures-core",
|
||||
"futures-sink",
|
||||
"http",
|
||||
"indexmap",
|
||||
"slab",
|
||||
"tokio",
|
||||
"tokio-util",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.16.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
|
||||
|
||||
[[package]]
|
||||
name = "http"
|
||||
version = "1.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"itoa",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "http-body"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"http",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "http-body-util"
|
||||
version = "0.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"futures-core",
|
||||
"http",
|
||||
"http-body",
|
||||
"pin-project-lite",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "http-range-header"
|
||||
version = "0.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c"
|
||||
|
||||
[[package]]
|
||||
name = "httparse"
|
||||
version = "1.10.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
|
||||
|
||||
[[package]]
|
||||
name = "httpdate"
|
||||
version = "1.0.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
|
||||
|
||||
[[package]]
|
||||
name = "hyper"
|
||||
version = "1.8.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11"
|
||||
dependencies = [
|
||||
"atomic-waker",
|
||||
"bytes",
|
||||
"futures-channel",
|
||||
"futures-core",
|
||||
"h2",
|
||||
"http",
|
||||
"http-body",
|
||||
"httparse",
|
||||
"httpdate",
|
||||
"itoa",
|
||||
"pin-project-lite",
|
||||
"pin-utils",
|
||||
"smallvec",
|
||||
"tokio",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hyper-util"
|
||||
version = "0.1.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"http",
|
||||
"http-body",
|
||||
"hyper",
|
||||
"pin-project-lite",
|
||||
"tokio",
|
||||
"tower-service",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "indexmap"
|
||||
version = "2.13.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017"
|
||||
dependencies = [
|
||||
"equivalent",
|
||||
"hashbrown",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "itoa"
|
||||
version = "1.0.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
|
||||
|
||||
[[package]]
|
||||
name = "lazy_static"
|
||||
version = "1.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.183"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d"
|
||||
|
||||
[[package]]
|
||||
name = "lock_api"
|
||||
version = "0.4.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
|
||||
dependencies = [
|
||||
"scopeguard",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "log"
|
||||
version = "0.4.29"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
|
||||
|
||||
[[package]]
|
||||
name = "matchit"
|
||||
version = "0.8.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3"
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "2.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
|
||||
|
||||
[[package]]
|
||||
name = "mime"
|
||||
version = "0.3.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
|
||||
|
||||
[[package]]
|
||||
name = "mime_guess"
|
||||
version = "2.0.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e"
|
||||
dependencies = [
|
||||
"mime",
|
||||
"unicase",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mio"
|
||||
version = "1.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"wasi",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nu-ansi-term"
|
||||
version = "0.50.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
|
||||
dependencies = [
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "once_cell"
|
||||
version = "1.21.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
|
||||
|
||||
[[package]]
|
||||
name = "parking_lot"
|
||||
version = "0.12.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
|
||||
dependencies = [
|
||||
"lock_api",
|
||||
"parking_lot_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "parking_lot_core"
|
||||
version = "0.9.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"redox_syscall",
|
||||
"smallvec",
|
||||
"windows-link",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "percent-encoding"
|
||||
version = "2.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
|
||||
|
||||
[[package]]
|
||||
name = "pin-project-lite"
|
||||
version = "0.2.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
|
||||
|
||||
[[package]]
|
||||
name = "pin-utils"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
|
||||
|
||||
[[package]]
|
||||
name = "pkg-config"
|
||||
version = "0.3.32"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.106"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.45"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.5.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ryu"
|
||||
version = "1.0.23"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f"
|
||||
|
||||
[[package]]
|
||||
name = "scopeguard"
|
||||
version = "1.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
|
||||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.228"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
|
||||
dependencies = [
|
||||
"serde_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_core"
|
||||
version = "1.0.228"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
|
||||
dependencies = [
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive"
|
||||
version = "1.0.228"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "1.0.149"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
|
||||
dependencies = [
|
||||
"itoa",
|
||||
"memchr",
|
||||
"serde",
|
||||
"serde_core",
|
||||
"zmij",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_path_to_error"
|
||||
version = "0.1.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457"
|
||||
dependencies = [
|
||||
"itoa",
|
||||
"serde",
|
||||
"serde_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_urlencoded"
|
||||
version = "0.7.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
|
||||
dependencies = [
|
||||
"form_urlencoded",
|
||||
"itoa",
|
||||
"ryu",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sharded-slab"
|
||||
version = "0.1.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
|
||||
dependencies = [
|
||||
"lazy_static",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "shlex"
|
||||
version = "1.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
|
||||
|
||||
[[package]]
|
||||
name = "signal-hook-registry"
|
||||
version = "1.4.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b"
|
||||
dependencies = [
|
||||
"errno",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "slab"
|
||||
version = "0.4.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
|
||||
|
||||
[[package]]
|
||||
name = "smallvec"
|
||||
version = "1.15.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
|
||||
|
||||
[[package]]
|
||||
name = "socket2"
|
||||
version = "0.6.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sqlite"
|
||||
version = "0.37.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f66e9c01a11936154f3910dbba732c01f8b591543bc4d6672bddee79fd9c4783"
|
||||
dependencies = [
|
||||
"sqlite3-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sqlite3-src"
|
||||
version = "0.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e5b6d3c860886b0a33e69e421796a5f4a27f23597a182c2450f6d7ace5103120"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"pkg-config",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sqlite3-sys"
|
||||
version = "0.18.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a7781d97adc13a1d5081127a9ee29afad8427f3757bd984daf814d8265267039"
|
||||
dependencies = [
|
||||
"sqlite3-src",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.117"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sync_wrapper"
|
||||
version = "1.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
|
||||
|
||||
[[package]]
|
||||
name = "thread_local"
|
||||
version = "1.1.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tokio"
|
||||
version = "1.50.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"libc",
|
||||
"mio",
|
||||
"parking_lot",
|
||||
"pin-project-lite",
|
||||
"signal-hook-registry",
|
||||
"socket2",
|
||||
"tokio-macros",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tokio-macros"
|
||||
version = "2.6.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tokio-util"
|
||||
version = "0.7.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"futures-core",
|
||||
"futures-sink",
|
||||
"pin-project-lite",
|
||||
"tokio",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tower"
|
||||
version = "0.5.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4"
|
||||
dependencies = [
|
||||
"futures-core",
|
||||
"futures-util",
|
||||
"pin-project-lite",
|
||||
"sync_wrapper",
|
||||
"tokio",
|
||||
"tower-layer",
|
||||
"tower-service",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tower-http"
|
||||
version = "0.6.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"bytes",
|
||||
"futures-core",
|
||||
"futures-util",
|
||||
"http",
|
||||
"http-body",
|
||||
"http-body-util",
|
||||
"http-range-header",
|
||||
"httpdate",
|
||||
"mime",
|
||||
"mime_guess",
|
||||
"percent-encoding",
|
||||
"pin-project-lite",
|
||||
"tokio",
|
||||
"tokio-util",
|
||||
"tower-layer",
|
||||
"tower-service",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tower-layer"
|
||||
version = "0.3.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
|
||||
|
||||
[[package]]
|
||||
name = "tower-service"
|
||||
version = "0.3.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
|
||||
|
||||
[[package]]
|
||||
name = "tracing"
|
||||
version = "0.1.44"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
|
||||
dependencies = [
|
||||
"log",
|
||||
"pin-project-lite",
|
||||
"tracing-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tracing-core"
|
||||
version = "0.1.36"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a"
|
||||
dependencies = [
|
||||
"once_cell",
|
||||
"valuable",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tracing-log"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
|
||||
dependencies = [
|
||||
"log",
|
||||
"once_cell",
|
||||
"tracing-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tracing-subscriber"
|
||||
version = "0.3.23"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319"
|
||||
dependencies = [
|
||||
"nu-ansi-term",
|
||||
"sharded-slab",
|
||||
"smallvec",
|
||||
"thread_local",
|
||||
"tracing-core",
|
||||
"tracing-log",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicase"
|
||||
version = "2.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.24"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
|
||||
|
||||
[[package]]
|
||||
name = "valuable"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
|
||||
|
||||
[[package]]
|
||||
name = "wasi"
|
||||
version = "0.11.1+wasi-snapshot-preview1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
|
||||
|
||||
[[package]]
|
||||
name = "windows-link"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
|
||||
|
||||
[[package]]
|
||||
name = "windows-sys"
|
||||
version = "0.61.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
|
||||
dependencies = [
|
||||
"windows-link",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zmij"
|
||||
version = "1.0.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
|
||||
13
backend/Cargo.toml
Normal file
@@ -0,0 +1,13 @@
|
||||
[package]
|
||||
name = "backend"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
axum = "0.8.8"
|
||||
axum-server = "0.8.0"
|
||||
serde = "1.0.228"
|
||||
tokio = { version = "1.50.0", features = ["full"] }
|
||||
tracing-subscriber = "0.3.23"
|
||||
tower-http = { version = "0.6", features = ["fs"] }
|
||||
sqlite = "*"
|
||||
@@ -1,14 +0,0 @@
|
||||
struct Laser {
|
||||
color : array,
|
||||
}
|
||||
|
||||
struct Mirror {
|
||||
color : array,
|
||||
x : int,
|
||||
y : int,
|
||||
}
|
||||
|
||||
struct Spawn {
|
||||
x : int,
|
||||
y : int,
|
||||
}
|
||||
59
backend/src/main.rs
Normal file
@@ -0,0 +1,59 @@
|
||||
use axum::{Router, response::Html, routing::get};
|
||||
use std::net::SocketAddr;
|
||||
use std::path::Path;
|
||||
use tokio::fs::File;
|
||||
use tokio::io::{self, AsyncReadExt};
|
||||
use tower_http::services::ServeDir;
|
||||
mod user;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
let db = user::DataBase::open(String::from("user"));
|
||||
db.create_table("users", "name TEXT, level TEXT, password TEXT");
|
||||
let app = Router::new()
|
||||
.route("/", get(handler))
|
||||
.route("/game", get(game))
|
||||
.nest_service("/web/assets", ServeDir::new("../web/assets"));
|
||||
|
||||
let addr = SocketAddr::from(([0, 0, 0, 0], 3500));
|
||||
println!("listening on {}", addr);
|
||||
axum_server::bind(addr)
|
||||
.serve(app.into_make_service())
|
||||
.await
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
async fn handler() -> Html<String> {
|
||||
let html_content = read_html_from_file("../web/templates/view/index.html")
|
||||
.await
|
||||
.unwrap_or_else(|_| "<h1>Error loading HTML file</h1>".to_string());
|
||||
Html(html_content)
|
||||
}
|
||||
|
||||
async fn game() -> Html<String> {
|
||||
let html_content = read_html_from_file("../web/templates/view/game.html")
|
||||
.await
|
||||
.unwrap_or_else(|_| "<h1>Error loading HTML file</h1>".to_string());
|
||||
Html(html_content)
|
||||
}
|
||||
|
||||
async fn register() -> Html<String> {
|
||||
let html_content = read_html_from_file("../web/templates/view/register.html")
|
||||
.await
|
||||
.unwrap_or_else(|_| "<h1>Error loading HTML file</h1>".to_string());
|
||||
Html(html_content)
|
||||
}
|
||||
|
||||
async fn login() -> Html<String> {
|
||||
let html_content = read_html_from_file("../web/templates/view/login.html")
|
||||
.await
|
||||
.unwrap_or_else(|_| "<h1>Error loading HTML file</h1>".to_string());
|
||||
Html(html_content)
|
||||
}
|
||||
|
||||
async fn read_html_from_file<P: AsRef<Path>>(path: P) -> io::Result<String> {
|
||||
let mut file = File::open(path).await?;
|
||||
let mut contents = String::new();
|
||||
file.read_to_string(&mut contents).await?;
|
||||
Ok(contents)
|
||||
}
|
||||
63
backend/src/user.rs
Normal file
@@ -0,0 +1,63 @@
|
||||
use sqlite::Connection;
|
||||
|
||||
pub struct User {
|
||||
name: String,
|
||||
level: u32,
|
||||
}
|
||||
|
||||
impl User {
|
||||
pub fn open(name: String, level: u32) -> User {
|
||||
User {name, level}
|
||||
}
|
||||
|
||||
pub fn get_name(&self) -> String{return self.name.clone()}
|
||||
pub fn get_level(&self) -> u32{return self.level}
|
||||
}
|
||||
|
||||
|
||||
pub struct DataBase {
|
||||
connection: Connection,
|
||||
}
|
||||
|
||||
impl DataBase {
|
||||
pub fn open(name: String) -> DataBase {
|
||||
let connection = sqlite::open(name + ".db").unwrap();
|
||||
DataBase { connection }
|
||||
}
|
||||
|
||||
fn execute(&self, arg: String){
|
||||
match self.connection.execute(arg){
|
||||
_ => (),
|
||||
Err(e) => panic!("Error : {}",e),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn create_table(&self, table: &str, var: &str){
|
||||
self.execute("CREATE TABLE ".to_owned() + &table.to_string() + "(" + &var.to_string() + ");");
|
||||
}
|
||||
|
||||
pub fn add_column(&self, table: &str, arg: &str){
|
||||
self.execute("ALTER TABLE ".to_owned() + &table.to_string() + " ADD " + &arg.to_string() + ";");
|
||||
}
|
||||
|
||||
pub fn insert(&self, table: &str, arg: &str){
|
||||
self.execute("INSERT INTO ".to_owned() + &table.to_string() + " VALUES (" + &arg.to_string() + ")" + ";");
|
||||
}
|
||||
|
||||
pub fn check(&self, table: &str, arg: &str) -> bool {
|
||||
let mut end = false;
|
||||
self.connection.iterate("Select name FROM ".to_owned() + &table.to_string() + " WHERE name = " + &format!("'{}'",&arg.to_string()), |pairs| {
|
||||
for &(name, value) in pairs.iter() {
|
||||
if name == "name" {
|
||||
end = true;
|
||||
}
|
||||
}
|
||||
return end;
|
||||
});
|
||||
return end;
|
||||
}
|
||||
|
||||
pub fn update(&self, table: &str, arg: &str, where_is: &str, arg2: &str){
|
||||
self.execute("UPDATE ".to_owned() + &table.to_string() + " SET " + &arg.to_string() + " WHERE " + &where_is.to_string() + " = " + &arg2.to_string());
|
||||
}
|
||||
}
|
||||
579
web/assets/css/game.css
Normal file
@@ -0,0 +1,579 @@
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
html,
|
||||
body {
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
body {
|
||||
background: #FFF6E5;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-family: Arial, sans-serif;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.level-menu-shell {
|
||||
position: fixed;
|
||||
top: 24px;
|
||||
right: 24px;
|
||||
z-index: 1100;
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.level-menu-toggle {
|
||||
border: none;
|
||||
border-radius: 999px;
|
||||
background: #223;
|
||||
color: #fff;
|
||||
padding: 12px 18px;
|
||||
font-size: 0.95rem;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
box-shadow: 0 8px 20px rgba(34, 51, 68, 0.18);
|
||||
}
|
||||
|
||||
.level-menu-panel {
|
||||
min-width: 180px;
|
||||
background: rgba(255, 255, 255, 0.96);
|
||||
border-radius: 18px;
|
||||
padding: 14px;
|
||||
box-shadow: 0 18px 40px rgba(34, 51, 68, 0.18);
|
||||
border: 1px solid rgba(34, 51, 68, 0.08);
|
||||
}
|
||||
|
||||
.level-menu-panel h2 {
|
||||
font-size: 0.95rem;
|
||||
color: #223;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.level-menu-list {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.level-menu-item {
|
||||
border: none;
|
||||
border-radius: 10px;
|
||||
padding: 10px 12px;
|
||||
text-align: left;
|
||||
background: #dfe5f8;
|
||||
color: #223;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.level-menu-item.is-current {
|
||||
background: #223;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.level-menu-item:disabled {
|
||||
background: #eceff7;
|
||||
color: #8a92a3;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
main {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 20px;
|
||||
border-radius: 150px;
|
||||
min-width: fit-content;
|
||||
flex-shrink: 0;
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
.game-layout {
|
||||
width: min(96vw, 1200px);
|
||||
}
|
||||
|
||||
.game-title {
|
||||
font-size: clamp(2rem, 4vw, 3rem);
|
||||
font-weight: 700;
|
||||
color: #223;
|
||||
letter-spacing: 0.04em;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.toolbox {
|
||||
width: 100%;
|
||||
background: #dfe5f8;
|
||||
border-radius: 10px;
|
||||
padding: 14px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.toolbox h2 {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.toolbox p {
|
||||
font-size: 0.9rem;
|
||||
color: #334;
|
||||
}
|
||||
|
||||
.glass-palette {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.map {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 10px;
|
||||
background: #dadeef;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
.lign {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.cell {
|
||||
width: clamp(28px, 6.2vmin, 72px);
|
||||
height: clamp(28px, 6.2vmin, 72px);
|
||||
transition: all 0.2s ease;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
position: relative;
|
||||
background-color: #2a2a2a;
|
||||
user-select: none;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.cell.can-drop {
|
||||
outline: 2px dashed rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.empty {
|
||||
background-color: #dadeef;
|
||||
}
|
||||
|
||||
.empty:hover {
|
||||
background-color: #333333;
|
||||
}
|
||||
|
||||
.laser {
|
||||
background-color: #DADEEF;
|
||||
background-image: url("/web/assets/img/tiles/Laser.svg");
|
||||
background-size: 80%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
.colored-laser {
|
||||
background-color: #DADEEF;
|
||||
background-image: url("/web/assets/img/tiles/Prisme.svg");
|
||||
background-size: 80%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.mirror {
|
||||
background-color: #DADEEF;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
-moz-transform: scaleX(-1);
|
||||
-webkit-transform: scaleX(-1);
|
||||
-o-transform: scaleX(-1);
|
||||
transform: scaleX(-1);
|
||||
-ms-filter: fliph; /*IE*/
|
||||
filter: fliph; /*IE*/
|
||||
}
|
||||
|
||||
.wall {
|
||||
background-color: #DADEEF;
|
||||
background-image: url("/web/assets/img/tiles/Tuile.svg");
|
||||
background-size: 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.wall-semi-angle {
|
||||
background-color: #DADEEF;
|
||||
background-image: url("/web/assets/img/tiles/BottomLeft.svg");
|
||||
background-size: 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.horizontal-semi {
|
||||
background-color: #DADEEF;
|
||||
background-image: url("/web/assets/img/tiles/HorizontaleSemi.svg");
|
||||
background-size: 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: bottom;
|
||||
}
|
||||
|
||||
.captor {
|
||||
background-color: #DADEEF;
|
||||
background-image: url("/web/assets/img/tiles/Capteur-1.svg");
|
||||
background-size: 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
.captor-turn {
|
||||
background-color: #DADEEF;
|
||||
background-image: url("/web/assets/img/tiles/Capteur-2.svg");
|
||||
background-size: 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.captor-turn-reverse {
|
||||
background-color: #DADEEF;
|
||||
background-image: url("/web/assets/img/tiles/Capteur-2.svg");
|
||||
background-size: 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
.captor-turn-horizontale2 {
|
||||
background-color: #DADEEF;
|
||||
background-image: url("/web/assets/img/tiles/Capteur-1.svg");
|
||||
background-size: 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.captor-vertical-top {
|
||||
background-color: #DADEEF;
|
||||
background-image: url("/web/assets/img/tiles/Capteur-1.svg");
|
||||
background-size: 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
|
||||
.cable {
|
||||
background-color: #DADEEF;
|
||||
background-image: url("/web/assets/img/tiles/CableH.svg");
|
||||
background-size: 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.cable-turn {
|
||||
background-color: #DADEEF;
|
||||
background-image: url("/web/assets/img/tiles/CableBottomLeft.svg");
|
||||
background-size: 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.cable-turn-horizontale3 {
|
||||
background-color: #DADEEF;
|
||||
background-image: url("/web/assets/img/tiles/CableTopRight.svg");
|
||||
background-size: 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.cable-vertical {
|
||||
background-color: #DADEEF;
|
||||
background-image: url("/web/assets/img/tiles/CableV.svg");
|
||||
background-size: 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.cable-turn-horizontale {
|
||||
background-color: #DADEEF;
|
||||
background-image: url("/web/assets/img/tiles/CableTopLeft.svg");
|
||||
background-size: 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.cable-turn-horizontale2 {
|
||||
background-color: #DADEEF;
|
||||
background-image: url("/web/assets/img/tiles/CableTopLeft.svg");
|
||||
background-size: 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
.door {
|
||||
background-color: #DADEEF;
|
||||
background-image: url("/web/assets/img/tiles/WoodenDoor.svg");
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
background-position: end;
|
||||
}
|
||||
|
||||
.door-open {
|
||||
background-image: url("/web/assets/img/tiles/WoodenDoor_openned.svg");
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
background-position: end;
|
||||
}
|
||||
|
||||
.button {
|
||||
background-color: #DADEEF;
|
||||
background-image: url("/web/assets/img/tiles/ButtonComplete.svg"), url("/web/assets/img/tiles/Tuile.svg");
|
||||
background-size: 100% 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.button-2 {
|
||||
background-color: #DADEEF;
|
||||
background-image: url("/web/assets/img/tiles/ButtonQuarter.svg"), url("/web/assets/img/tiles/Tuile.svg");
|
||||
background-size: 100% 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.button-rotator {
|
||||
background-color: #DADEEF;
|
||||
background-image: url("/web/assets/img/tiles/ButtonProfile.svg"), url("/web/assets/img/tiles/Tuile.svg");
|
||||
background-size: 100% 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.button-active {
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
.target {
|
||||
background-color: #DADEEF;
|
||||
background-image: url("/web/assets/img/tiles/Trigger.svg");
|
||||
background-size: 80%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.demi-wall-corner-up-left {
|
||||
background-color: #DADEEF;
|
||||
background-image: url("/web/assets/img/tiles/TopLeft.svg");
|
||||
background-size: 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.demi-wall-corner-up-right {
|
||||
background-color: #DADEEF;
|
||||
background-image: url("/web/assets/img/tiles/TopRight.svg");
|
||||
background-size: 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.demi-wall-corner-down-left {
|
||||
background-color: #DADEEF;
|
||||
background-image: url("/web/assets/img/tiles/BottomLeftAngle.svg");
|
||||
background-size: 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.demi-wall-corner-down-right {
|
||||
background-color: #DADEEF;
|
||||
background-image: url("/web/assets/img/tiles/BottomRightAngle.svg");
|
||||
background-size: 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.laser-overlay {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
pointer-events: none;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.laser-horizontal {
|
||||
--laser-color: red;
|
||||
background: linear-gradient(to bottom, transparent 0%, transparent 45%, var(--laser-color) 45%, var(--laser-color) 55%, transparent 55%, transparent 100%);
|
||||
}
|
||||
|
||||
.laser-vertical {
|
||||
--laser-color: red;
|
||||
background: linear-gradient(to right, transparent 0%, transparent 45%, var(--laser-color) 45%, var(--laser-color) 55%, transparent 55%, transparent 100%);
|
||||
}
|
||||
|
||||
.laser-diagonal-down {
|
||||
--laser-color: red;
|
||||
background: linear-gradient(45deg, transparent 0%, transparent 46%, var(--laser-color) 46%, var(--laser-color) 54%, transparent 54%, transparent 100%);
|
||||
}
|
||||
|
||||
.laser-diagonal-up {
|
||||
--laser-color: red;
|
||||
background: linear-gradient(135deg, transparent 0%, transparent 46%, var(--laser-color) 46%, var(--laser-color) 54%, transparent 54%, transparent 100%);
|
||||
}
|
||||
|
||||
.laser-color-white {
|
||||
--laser-color: #f8f8f8;
|
||||
}
|
||||
|
||||
.laser-color-red {
|
||||
--laser-color: #ff3b30;
|
||||
}
|
||||
|
||||
.laser-color-blue {
|
||||
--laser-color: #2d7ff9;
|
||||
}
|
||||
|
||||
.laser-color-yellow {
|
||||
--laser-color: #ffd400;
|
||||
}
|
||||
|
||||
.btn-mirror {
|
||||
background: none;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
z-index: 3;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.btn-mirror-locked {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.mirror-img {
|
||||
width: 80%;
|
||||
height: 80%;
|
||||
object-fit: contain;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.glass-item {
|
||||
width: 54px;
|
||||
height: 54px;
|
||||
border: none;
|
||||
border-radius: 10px;
|
||||
cursor: grab;
|
||||
position: relative;
|
||||
box-shadow: inset 0 0 0 2px rgba(0, 0, 0, 0.1);
|
||||
user-select: none;
|
||||
color: #223;
|
||||
font-size: 0.8rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.glass-item:disabled {
|
||||
cursor: not-allowed;
|
||||
opacity: 0.45;
|
||||
}
|
||||
|
||||
.glass-item-label {
|
||||
position: absolute;
|
||||
right: 4px;
|
||||
bottom: 3px;
|
||||
z-index: 2;
|
||||
font-size: 0.7rem;
|
||||
font-weight: 700;
|
||||
color: #223;
|
||||
background: rgba(255, 255, 255, 0.88);
|
||||
padding: 1px 5px;
|
||||
border-radius: 999px;
|
||||
}
|
||||
|
||||
.glass-item::after,
|
||||
.cell-glass::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
inset: 10px;
|
||||
border-radius: 8px;
|
||||
background: rgba(255, 255, 255, 0.45);
|
||||
border: 1px solid rgba(255, 255, 255, 0.8);
|
||||
}
|
||||
|
||||
.glass-red {
|
||||
background: rgba(255, 59, 48, 0.85);
|
||||
}
|
||||
|
||||
.glass-blue {
|
||||
background: rgba(45, 127, 249, 0.85);
|
||||
}
|
||||
|
||||
.glass-yellow {
|
||||
background: rgba(255, 212, 0, 0.9);
|
||||
}
|
||||
|
||||
.cell-glass {
|
||||
position: absolute;
|
||||
inset: 5px;
|
||||
border-radius: 8px;
|
||||
opacity: 0.9;
|
||||
pointer-events: none;
|
||||
z-index: 4;
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
.map {
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
main {
|
||||
padding: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.win-overlay {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
z-index: 1000;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
visibility: hidden;
|
||||
gap: 20px;
|
||||
backdrop-filter: blur(6px);
|
||||
|
||||
}
|
||||
|
||||
.win-overlay h1 {
|
||||
font-size: 2rem;
|
||||
font-weight: 700;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.win-overlay p {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 400;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.win-overlay button {
|
||||
font-size: 1.5rem;
|
||||
padding: 10px 20px;
|
||||
border-radius: 5px;
|
||||
background-color: #fff;
|
||||
color: #000;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
@@ -0,0 +1,253 @@
|
||||
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap');
|
||||
|
||||
* {
|
||||
--clr-light-a0: #ffffff;
|
||||
--clr-light-a10: #f4f4f4;
|
||||
--clr-light-a20: #e0e0e0;
|
||||
--clr-light-a30: #c2c2c2;
|
||||
--clr-light-a40: #a3a3a3;
|
||||
--clr-light-a50: #858585;
|
||||
--clr-dark: #000000;
|
||||
|
||||
--clr-surface-a0: #FFF6E5;
|
||||
--clr-surface-a10: #f7f7f7;
|
||||
--clr-surface-a20: #DADEEF;
|
||||
--clr-surface-a30: #e0e0e0;
|
||||
--clr-surface-a40: #d1d1d1;
|
||||
--clr-surface-a50: #c2c2c2;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
html {
|
||||
font-size: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: var(--clr-surface-a0);
|
||||
font-family: 'Inter', sans-serif;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.hero {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
min-height: 100vh;
|
||||
gap: 3rem;
|
||||
padding: 2rem clamp(1rem, 4vw, 3rem);
|
||||
box-sizing: border-box;
|
||||
background: var(--clr-surface-a10);
|
||||
}
|
||||
|
||||
.adsbanner {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: clamp(0.75rem, 3vw, 2.5rem);
|
||||
transform: translateY(-50%);
|
||||
z-index: 5;
|
||||
width: clamp(160px, 22vw, 300px);
|
||||
aspect-ratio: 9 / 16;
|
||||
box-shadow: 0 18px 40px rgba(0,0,0,0.18);
|
||||
}
|
||||
|
||||
.adsbanner.is-hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.leftadsbanner {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
right: clamp(0.75rem, 3vw, 2.5rem);
|
||||
transform: translateY(-50%);
|
||||
z-index: 5;
|
||||
width: clamp(160px, 22vw, 300px);
|
||||
aspect-ratio: 9 / 16;
|
||||
}
|
||||
|
||||
.leftadsbanner.is-hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.hero-content {
|
||||
max-width: 90vw;
|
||||
text-align: left;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
background: var(--clr-surface-a20);
|
||||
border-radius: 1.5rem;
|
||||
padding: 2rem clamp(2rem, 8vw, 10rem);
|
||||
box-shadow: 0px 0px 27px 14px rgba(0,0,0,0.2);
|
||||
}
|
||||
|
||||
.hero-content-text {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.hero h1 {
|
||||
color: var(--clr-dark);
|
||||
font-size: clamp(2.5rem, 7vw, 4rem);
|
||||
margin: 0 0 1rem 0;
|
||||
line-height: 1.1;
|
||||
word-break: break-word;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
.hero-content button {
|
||||
margin-top: 2rem;
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
.hero img {
|
||||
max-width: 400px;
|
||||
width: 35vw;
|
||||
min-width: 180px;
|
||||
height: auto;
|
||||
border-radius: 1.5rem;
|
||||
box-shadow: 0 6px 32px rgba(0,0,0,.10);
|
||||
flex-shrink: 1;
|
||||
background: var(--clr-surface-a0);
|
||||
}
|
||||
|
||||
/* --- RESPONSIVE HERO-PLAY-BUTTON FIXES --- */
|
||||
|
||||
@media (max-width: 900px) {
|
||||
.hero {
|
||||
flex-direction: column;
|
||||
text-align: center;
|
||||
gap: 2rem;
|
||||
padding: 1.5rem;
|
||||
}
|
||||
.hero-content {
|
||||
max-width: 100vw;
|
||||
text-align: center;
|
||||
padding: 2rem;
|
||||
}
|
||||
.hero-content {
|
||||
align-items: center;
|
||||
}
|
||||
.adsbanner {
|
||||
left: 1rem;
|
||||
width: clamp(130px, 24vw, 220px);
|
||||
}
|
||||
.leftadsbanner {
|
||||
right: 1rem;
|
||||
width: clamp(130px, 24vw, 220px);
|
||||
}
|
||||
.hero img {
|
||||
max-width: 70vw;
|
||||
min-width: 0;
|
||||
}
|
||||
.hero-play-button {
|
||||
padding: 1rem 4vw;
|
||||
font-size: 1.1rem;
|
||||
min-width: min(220px, 70vw);
|
||||
max-width: 90vw;
|
||||
}
|
||||
.hero-play-button svg {
|
||||
width: 2em;
|
||||
height: 1em;
|
||||
min-width: 1.25em;
|
||||
min-height: 1em;
|
||||
margin-right: 0.5em;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
.hero {
|
||||
min-height: 70vh;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
.hero-content {
|
||||
padding: 1.5rem;
|
||||
}
|
||||
.hero h1 {
|
||||
font-size: clamp(2rem, 9vw, 2.5rem);
|
||||
}
|
||||
.hero p {
|
||||
font-size: clamp(1rem, 5vw, 1.15rem);
|
||||
}
|
||||
.adsbanner {
|
||||
top: 1rem;
|
||||
left: 0.75rem;
|
||||
transform: none;
|
||||
width: clamp(110px, 30vw, 170px);
|
||||
border-radius: 1rem;
|
||||
}
|
||||
.leftadsbanner {
|
||||
right: 0.75rem;
|
||||
width: clamp(110px, 30vw, 170px);
|
||||
border-radius: 1rem;
|
||||
}
|
||||
.hero img {
|
||||
max-width: 100%;
|
||||
border-radius: 1rem;
|
||||
box-shadow: 0 2px 12px rgba(0,0,0,.07);
|
||||
}
|
||||
.hero-play-button {
|
||||
padding: 0.85rem 3vw;
|
||||
min-width: min(120px, 92vw);
|
||||
max-width: 96vw;
|
||||
font-size: 1rem;
|
||||
}
|
||||
.hero-play-button svg {
|
||||
width: 1.3em;
|
||||
height: 1em;
|
||||
min-width: 1em;
|
||||
min-height: 1em;
|
||||
margin-right: 0.45em;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.adsbanner,
|
||||
.leftadsbanner {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.hero-play-button {
|
||||
font-family: inherit;
|
||||
font-size: 20px;
|
||||
background: #8ea3fd;
|
||||
color: white;
|
||||
padding: 1rem 10rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center; /* Ensure SVG/button content is horizontally centered */
|
||||
border: none;
|
||||
border-radius: 50px;
|
||||
overflow: hidden;
|
||||
transition: all 0.2s;
|
||||
cursor: pointer;
|
||||
box-shadow: 0 2px 8px rgba(30, 80, 255, 0.10);
|
||||
/* Button grows/shrinks with container at low widths */
|
||||
width: 100%;
|
||||
max-width: 500px;
|
||||
min-width: 180px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.hero-play-button:hover {
|
||||
background: #7286e0;
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
|
||||
.hero-play-button:active {
|
||||
transform: scale(0.95);
|
||||
}
|
||||
|
||||
.hero-play-button svg {
|
||||
width: 2em;
|
||||
height: 1em;
|
||||
min-width: 1.2em;
|
||||
min-height: 1em;
|
||||
margin-right: 0.6em;
|
||||
color: var(--clr-surface-a0);
|
||||
flex-shrink: 0;
|
||||
flex-grow: 0;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
BIN
web/assets/img/img_test_main_menu.png
Normal file
|
After Width: | Height: | Size: 49 KiB |
9
web/assets/img/tiles/BlueMirror.svg
Normal file
@@ -0,0 +1,9 @@
|
||||
<svg width="20" height="200" viewBox="0 0 20 200" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<ellipse cx="10" cy="100" rx="10" ry="100" fill="url(#paint0_linear_25_4)"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_25_4" x1="-8.46573" y1="60.2496" x2="61.4687" y2="123.939" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#3C62E2" stop-opacity="0.4"/>
|
||||
<stop offset="1" stop-color="#00137C" stop-opacity="0.4"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 447 B |
19
web/assets/img/tiles/BottomLeft-1.svg
Normal file
@@ -0,0 +1,19 @@
|
||||
<svg width="100" height="50" viewBox="0 0 100 50" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M1 49V1.61816L95.7637 49L1 49Z" fill="url(#paint0_linear_19_240)" stroke="url(#paint1_linear_19_240)" stroke-width="2"/>
|
||||
<circle cx="5.5" cy="44.5" r="1.5" transform="rotate(-180 5.5 44.5)" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="44.5" r="1" transform="rotate(-180 5.5 44.5)" fill="#898989"/>
|
||||
<circle cx="4.5" cy="8.5" r="1.5" transform="rotate(-180 4.5 8.5)" fill="#4A4A4A"/>
|
||||
<circle cx="4.5" cy="8.5" r="1" transform="rotate(-180 4.5 8.5)" fill="#898989"/>
|
||||
<circle cx="77.5" cy="44.5" r="1.5" transform="rotate(-180 77.5 44.5)" fill="#4A4A4A"/>
|
||||
<circle cx="77.5" cy="44.5" r="1" transform="rotate(-180 77.5 44.5)" fill="#898989"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_19_240" x1="0" y1="0" x2="40" y2="80" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_19_240" x1="100" y1="50" x2="60" y2="-30" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
19
web/assets/img/tiles/BottomLeft-2.svg
Normal file
@@ -0,0 +1,19 @@
|
||||
<svg width="50" height="100" viewBox="0 0 50 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M49 99L1.61816 99L49 4.23633L49 99Z" fill="url(#paint0_linear_19_286)" stroke="url(#paint1_linear_19_286)" stroke-width="2"/>
|
||||
<circle cx="44.5" cy="94.5" r="1.5" transform="rotate(90 44.5 94.5)" fill="#4A4A4A"/>
|
||||
<circle cx="44.5" cy="94.5" r="1" transform="rotate(90 44.5 94.5)" fill="#898989"/>
|
||||
<circle cx="8.5" cy="95.5" r="1.5" transform="rotate(90 8.5 95.5)" fill="#4A4A4A"/>
|
||||
<circle cx="8.5" cy="95.5" r="1" transform="rotate(90 8.5 95.5)" fill="#898989"/>
|
||||
<circle cx="44.5" cy="22.5" r="1.5" transform="rotate(90 44.5 22.5)" fill="#4A4A4A"/>
|
||||
<circle cx="44.5" cy="22.5" r="1" transform="rotate(90 44.5 22.5)" fill="#898989"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_19_286" x1="0" y1="0" x2="80" y2="40" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_19_286" x1="50" y1="100" x2="-30" y2="60" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
21
web/assets/img/tiles/BottomLeft.svg
Normal file
@@ -0,0 +1,21 @@
|
||||
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M1 99L1 1.61816L99 50.6182V99L1 99Z" fill="url(#paint0_linear_35_19)" stroke="url(#paint1_linear_35_19)" stroke-width="2"/>
|
||||
<circle cx="5.5" cy="94.5" r="1.5" transform="rotate(-180 5.5 94.5)" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="94.5" r="1" transform="rotate(-180 5.5 94.5)" fill="#898989"/>
|
||||
<circle cx="4.5" cy="8.5" r="1.5" transform="rotate(-180 4.5 8.5)" fill="#4A4A4A"/>
|
||||
<circle cx="4.5" cy="8.5" r="1" transform="rotate(-180 4.5 8.5)" fill="#898989"/>
|
||||
<circle cx="94.5" cy="94.5" r="1.5" transform="rotate(-180 94.5 94.5)" fill="#4A4A4A"/>
|
||||
<circle cx="94.5" cy="94.5" r="1" transform="rotate(-180 94.5 94.5)" fill="#898989"/>
|
||||
<circle cx="94.5" cy="53.5" r="1.5" transform="rotate(-180 94.5 53.5)" fill="#4A4A4A"/>
|
||||
<circle cx="94.5" cy="53.5" r="1" transform="rotate(-180 94.5 53.5)" fill="#898989"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_35_19" x1="0" y1="0" x2="40" y2="80" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_35_19" x1="100" y1="50" x2="60" y2="-30" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
19
web/assets/img/tiles/BottomLeftAngle.svg
Normal file
@@ -0,0 +1,19 @@
|
||||
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M1 99L1 2.41406L97.5859 99L1 99Z" fill="url(#paint0_linear_17_89)" stroke="url(#paint1_linear_17_89)" stroke-width="2"/>
|
||||
<circle cx="5.5" cy="94.5" r="1.5" transform="rotate(-180 5.5 94.5)" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="94.5" r="1" transform="rotate(-180 5.5 94.5)" fill="#898989"/>
|
||||
<circle cx="5.5" cy="13.5" r="1.5" transform="rotate(-180 5.5 13.5)" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="13.5" r="1" transform="rotate(-180 5.5 13.5)" fill="#898989"/>
|
||||
<circle cx="86.5" cy="94.5" r="1.5" transform="rotate(-180 86.5 94.5)" fill="#4A4A4A"/>
|
||||
<circle cx="86.5" cy="94.5" r="1" transform="rotate(-180 86.5 94.5)" fill="#898989"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_17_89" x1="0" y1="0" x2="100" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_17_89" x1="100" y1="100" x2="0" y2="0" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
19
web/assets/img/tiles/BottomRight-1.svg
Normal file
@@ -0,0 +1,19 @@
|
||||
<svg width="100" height="50" viewBox="0 0 100 50" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M99 49L4.23633 49L99 1.61816V49Z" fill="url(#paint0_linear_19_273)" stroke="url(#paint1_linear_19_273)" stroke-width="2"/>
|
||||
<circle cx="94.5" cy="44.5" r="1.5" transform="rotate(90 94.5 44.5)" fill="#4A4A4A"/>
|
||||
<circle cx="94.5" cy="44.5" r="1" transform="rotate(90 94.5 44.5)" fill="#898989"/>
|
||||
<circle cx="22.5" cy="44.5" r="1.5" transform="rotate(90 22.5 44.5)" fill="#4A4A4A"/>
|
||||
<circle cx="22.5" cy="44.5" r="1" transform="rotate(90 22.5 44.5)" fill="#898989"/>
|
||||
<circle cx="94.5" cy="9.5" r="1.5" transform="rotate(90 94.5 9.5)" fill="#4A4A4A"/>
|
||||
<circle cx="94.5" cy="9.5" r="1" transform="rotate(90 94.5 9.5)" fill="#898989"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_19_273" x1="8.9407e-06" y1="1.49012e-06" x2="40" y2="80" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_19_273" x1="100" y1="50" x2="60" y2="-30" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
19
web/assets/img/tiles/BottomRight-2.svg
Normal file
@@ -0,0 +1,19 @@
|
||||
<svg width="50" height="100" viewBox="0 0 50 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M49 1V95.7637L1.61818 1H49Z" fill="url(#paint0_linear_19_319)" stroke="url(#paint1_linear_19_319)" stroke-width="2"/>
|
||||
<circle cx="44.5" cy="5.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="44.5" cy="5.5" r="1" fill="#898989"/>
|
||||
<circle cx="44.5" cy="77.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="44.5" cy="77.5" r="1" fill="#898989"/>
|
||||
<circle cx="9.5" cy="5.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="9.5" cy="5.5" r="1" fill="#898989"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_19_319" x1="1.14441e-05" y1="0" x2="80" y2="40" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_19_319" x1="50" y1="100" x2="-30" y2="60" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 947 B |
21
web/assets/img/tiles/BottomRight.svg
Normal file
@@ -0,0 +1,21 @@
|
||||
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M99 99H1V50.6182L99 1.61816V99Z" fill="url(#paint0_linear_35_30)" stroke="url(#paint1_linear_35_30)" stroke-width="2"/>
|
||||
<circle cx="94.5" cy="94.5" r="1.5" transform="rotate(90 94.5 94.5)" fill="#4A4A4A"/>
|
||||
<circle cx="94.5" cy="94.5" r="1" transform="rotate(90 94.5 94.5)" fill="#898989"/>
|
||||
<circle cx="5.5" cy="94.5" r="1.5" transform="rotate(90 5.5 94.5)" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="94.5" r="1" transform="rotate(90 5.5 94.5)" fill="#898989"/>
|
||||
<circle cx="5.5" cy="53.5" r="1.5" transform="rotate(90 5.5 53.5)" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="53.5" r="1" transform="rotate(90 5.5 53.5)" fill="#898989"/>
|
||||
<circle cx="94.5" cy="9.5" r="1.5" transform="rotate(90 94.5 9.5)" fill="#4A4A4A"/>
|
||||
<circle cx="94.5" cy="9.5" r="1" transform="rotate(90 94.5 9.5)" fill="#898989"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_35_30" x1="8.9049e-06" y1="1.50801e-06" x2="40" y2="80" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_35_30" x1="100" y1="50" x2="60" y2="-30" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
19
web/assets/img/tiles/BottomRightAngle.svg
Normal file
@@ -0,0 +1,19 @@
|
||||
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M99 99H2.41406L99 2.41406V99Z" fill="url(#paint0_linear_19_190)" stroke="url(#paint1_linear_19_190)" stroke-width="2"/>
|
||||
<circle cx="94.5" cy="94.5" r="1.5" transform="rotate(90 94.5 94.5)" fill="#4A4A4A"/>
|
||||
<circle cx="94.5" cy="94.5" r="1" transform="rotate(90 94.5 94.5)" fill="#898989"/>
|
||||
<circle cx="13.5" cy="94.5" r="1.5" transform="rotate(90 13.5 94.5)" fill="#4A4A4A"/>
|
||||
<circle cx="13.5" cy="94.5" r="1" transform="rotate(90 13.5 94.5)" fill="#898989"/>
|
||||
<circle cx="94.5" cy="13.5" r="1.5" transform="rotate(90 94.5 13.5)" fill="#4A4A4A"/>
|
||||
<circle cx="94.5" cy="13.5" r="1" transform="rotate(90 94.5 13.5)" fill="#898989"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_19_190" x1="0" y1="0" x2="100" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_19_190" x1="100" y1="100" x2="0" y2="0" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
27
web/assets/img/tiles/ButtonComplete.svg
Normal file
@@ -0,0 +1,27 @@
|
||||
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M50 1H99V99H50C22.938 99 1 77.062 1 50C1 22.938 22.938 1 50 1Z" fill="url(#paint0_linear_19_364)" stroke="url(#paint1_linear_19_364)" stroke-width="2"/>
|
||||
<circle cx="94.5" cy="5.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="94.5" cy="5.5" r="1" fill="#898989"/>
|
||||
<circle cx="94.5" cy="94.5" r="1.5" fill="#3C3C3C"/>
|
||||
<circle cx="94.5" cy="94.5" r="1" fill="#898989"/>
|
||||
<circle cx="50" cy="50" r="30" fill="url(#paint2_linear_19_364)"/>
|
||||
<circle cx="50" cy="50" r="25" fill="url(#paint3_linear_19_364)"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_19_364" x1="0" y1="0" x2="100" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_19_364" x1="100" y1="100" x2="0" y2="0" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint2_linear_19_364" x1="20" y1="80" x2="80" y2="20" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#F88484"/>
|
||||
<stop offset="1" stop-color="#B03232"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint3_linear_19_364" x1="25" y1="25" x2="75" y2="75" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#F88484"/>
|
||||
<stop offset="1" stop-color="#B03232"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
24
web/assets/img/tiles/ButtonProfile.svg
Normal file
@@ -0,0 +1,24 @@
|
||||
<svg width="100" height="30" viewBox="0 0 100 30" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect y="20" width="100" height="10" fill="url(#paint0_linear_19_205)"/>
|
||||
<path d="M80 10L100 20H0L20 10H80Z" fill="url(#paint1_linear_19_205)"/>
|
||||
<path d="M25 5H75V10H25V5Z" fill="url(#paint2_linear_19_205)"/>
|
||||
<path d="M70 0L75 5H25L30 0H70Z" fill="url(#paint3_linear_19_205)"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_19_205" x1="0" y1="25" x2="100" y2="25" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#D9D9D9"/>
|
||||
<stop offset="1" stop-color="#737373"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_19_205" x1="20" y1="10" x2="80" y2="10" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#D9D9D9"/>
|
||||
<stop offset="1" stop-color="#737373"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint2_linear_19_205" x1="25" y1="7.5" x2="75" y2="7.5" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#F88484"/>
|
||||
<stop offset="1" stop-color="#B03232"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint3_linear_19_205" x1="30" y1="-5.5879e-10" x2="70" y2="-8.54951e-08" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#F88484"/>
|
||||
<stop offset="1" stop-color="#B03232"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
29
web/assets/img/tiles/ButtonQuarter.svg
Normal file
@@ -0,0 +1,29 @@
|
||||
<svg width="80" height="80" viewBox="0 0 80 80" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M79 1V78.9932C36.1632 78.4618 1.53823 43.8368 1.00684 1H79Z" fill="url(#paint0_linear_21_561)" stroke="url(#paint1_linear_21_561)" stroke-width="2"/>
|
||||
<circle cx="74.5" cy="5.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="74.5" cy="5.5" r="1" fill="#898989"/>
|
||||
<circle cx="6.5" cy="5.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="6.5" cy="5.5" r="1" fill="#898989"/>
|
||||
<circle cx="74.5" cy="73.5" r="1.5" fill="#3C3C3C"/>
|
||||
<circle cx="74.5" cy="73.5" r="1" fill="#898989"/>
|
||||
<circle cx="46" cy="34" r="20" fill="url(#paint2_linear_21_561)"/>
|
||||
<circle cx="46" cy="34" r="16.6667" fill="url(#paint3_linear_21_561)"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_21_561" x1="0" y1="0" x2="80" y2="80" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_21_561" x1="80" y1="80" x2="0" y2="0" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint2_linear_21_561" x1="26" y1="54" x2="66" y2="14" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#F88484"/>
|
||||
<stop offset="1" stop-color="#B03232"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint3_linear_21_561" x1="29.3333" y1="17.3333" x2="62.6667" y2="50.6667" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#F88484"/>
|
||||
<stop offset="1" stop-color="#B03232"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
22
web/assets/img/tiles/CableBottomLeft.svg
Normal file
@@ -0,0 +1,22 @@
|
||||
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="1" y="1" width="98" height="98" fill="url(#paint0_linear_21_417)" stroke="url(#paint1_linear_21_417)" stroke-width="2"/>
|
||||
<circle cx="5.5" cy="5.5" r="1.5" fill="#595959"/>
|
||||
<circle cx="5.5" cy="5.5" r="1" fill="#A1A1A1"/>
|
||||
<circle cx="5.5" cy="94.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="94.5" r="1" fill="#898989"/>
|
||||
<circle cx="94.5" cy="5.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="94.5" cy="5.5" r="1" fill="#898989"/>
|
||||
<circle cx="94.5" cy="94.5" r="1.5" fill="#3C3C3C"/>
|
||||
<circle cx="94.5" cy="94.5" r="1" fill="#898989"/>
|
||||
<path d="M58 100H42V58H0V42H58V100Z" fill="#FF8282"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_21_417" x1="0" y1="0" x2="100" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_21_417" x1="100" y1="100" x2="0" y2="0" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
22
web/assets/img/tiles/CableBottomRight.svg
Normal file
@@ -0,0 +1,22 @@
|
||||
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="1" y="1" width="98" height="98" fill="url(#paint0_linear_21_385)" stroke="url(#paint1_linear_21_385)" stroke-width="2"/>
|
||||
<circle cx="5.5" cy="5.5" r="1.5" fill="#595959"/>
|
||||
<circle cx="5.5" cy="5.5" r="1" fill="#A1A1A1"/>
|
||||
<circle cx="5.5" cy="94.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="94.5" r="1" fill="#898989"/>
|
||||
<circle cx="94.5" cy="5.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="94.5" cy="5.5" r="1" fill="#898989"/>
|
||||
<circle cx="94.5" cy="94.5" r="1.5" fill="#3C3C3C"/>
|
||||
<circle cx="94.5" cy="94.5" r="1" fill="#898989"/>
|
||||
<path d="M100 42V58H58V100H42V42H100Z" fill="#FF8282"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_21_385" x1="0" y1="0" x2="100" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_21_385" x1="100" y1="100" x2="0" y2="0" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
22
web/assets/img/tiles/CableH.svg
Normal file
@@ -0,0 +1,22 @@
|
||||
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="1" y="1" width="98" height="98" fill="url(#paint0_linear_21_545)" stroke="url(#paint1_linear_21_545)" stroke-width="2"/>
|
||||
<circle cx="5.5" cy="5.5" r="1.5" fill="#595959"/>
|
||||
<circle cx="5.5" cy="5.5" r="1" fill="#A1A1A1"/>
|
||||
<circle cx="5.5" cy="94.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="94.5" r="1" fill="#898989"/>
|
||||
<circle cx="94.5" cy="5.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="94.5" cy="5.5" r="1" fill="#898989"/>
|
||||
<circle cx="94.5" cy="94.5" r="1.5" fill="#3C3C3C"/>
|
||||
<circle cx="94.5" cy="94.5" r="1" fill="#898989"/>
|
||||
<rect y="42" width="100" height="16" fill="#FF8282"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_21_545" x1="0" y1="0" x2="100" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_21_545" x1="100" y1="100" x2="0" y2="0" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
22
web/assets/img/tiles/CableTopLeft.svg
Normal file
@@ -0,0 +1,22 @@
|
||||
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="1" y="1" width="98" height="98" fill="url(#paint0_linear_21_449)" stroke="url(#paint1_linear_21_449)" stroke-width="2"/>
|
||||
<circle cx="5.5" cy="5.5" r="1.5" fill="#595959"/>
|
||||
<circle cx="5.5" cy="5.5" r="1" fill="#A1A1A1"/>
|
||||
<circle cx="5.5" cy="94.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="94.5" r="1" fill="#898989"/>
|
||||
<circle cx="94.5" cy="5.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="94.5" cy="5.5" r="1" fill="#898989"/>
|
||||
<circle cx="94.5" cy="94.5" r="1.5" fill="#3C3C3C"/>
|
||||
<circle cx="94.5" cy="94.5" r="1" fill="#898989"/>
|
||||
<path d="M0 58V42L42 42L42 0L58 0L58 58L0 58Z" fill="#FF8282"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_21_449" x1="0" y1="0" x2="100" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_21_449" x1="100" y1="100" x2="0" y2="0" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
22
web/assets/img/tiles/CableTopRight.svg
Normal file
@@ -0,0 +1,22 @@
|
||||
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="1" y="1" width="98" height="98" fill="url(#paint0_linear_21_433)" stroke="url(#paint1_linear_21_433)" stroke-width="2"/>
|
||||
<circle cx="5.5" cy="4.5" r="1.5" fill="#595959"/>
|
||||
<circle cx="5.5" cy="4.5" r="1" fill="#A1A1A1"/>
|
||||
<circle cx="5.5" cy="93.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="93.5" r="1" fill="#898989"/>
|
||||
<circle cx="94.5" cy="4.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="94.5" cy="4.5" r="1" fill="#898989"/>
|
||||
<circle cx="94.5" cy="93.5" r="1.5" fill="#3C3C3C"/>
|
||||
<circle cx="94.5" cy="93.5" r="1" fill="#898989"/>
|
||||
<path d="M42 0H58L58 42H100V58L42 58L42 0Z" fill="#FF8282"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_21_433" x1="0" y1="0" x2="100" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_21_433" x1="100" y1="100" x2="0" y2="0" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
22
web/assets/img/tiles/CableV.svg
Normal file
@@ -0,0 +1,22 @@
|
||||
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="1" y="1" width="98" height="98" fill="url(#paint0_linear_21_529)" stroke="url(#paint1_linear_21_529)" stroke-width="2"/>
|
||||
<circle cx="5.5" cy="5.5" r="1.5" fill="#595959"/>
|
||||
<circle cx="5.5" cy="5.5" r="1" fill="#A1A1A1"/>
|
||||
<circle cx="5.5" cy="94.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="94.5" r="1" fill="#898989"/>
|
||||
<circle cx="94.5" cy="5.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="94.5" cy="5.5" r="1" fill="#898989"/>
|
||||
<circle cx="94.5" cy="94.5" r="1.5" fill="#3C3C3C"/>
|
||||
<circle cx="94.5" cy="94.5" r="1" fill="#898989"/>
|
||||
<rect x="42" width="16" height="100" fill="#FF8282"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_21_529" x1="0" y1="0" x2="100" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_21_529" x1="100" y1="100" x2="0" y2="0" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
22
web/assets/img/tiles/Capteur-1.svg
Normal file
@@ -0,0 +1,22 @@
|
||||
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="1" y="1" width="98" height="98" fill="url(#paint0_linear_23_646)" stroke="url(#paint1_linear_23_646)" stroke-width="2"/>
|
||||
<circle cx="5.5" cy="5.5" r="1.5" fill="#595959"/>
|
||||
<circle cx="5.5" cy="5.5" r="1" fill="#A1A1A1"/>
|
||||
<circle cx="5.5" cy="94.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="94.5" r="1" fill="#898989"/>
|
||||
<circle cx="94.5" cy="5.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="94.5" cy="5.5" r="1" fill="#898989"/>
|
||||
<circle cx="94.5" cy="94.5" r="1.5" fill="#3C3C3C"/>
|
||||
<circle cx="94.5" cy="94.5" r="1" fill="#898989"/>
|
||||
<path d="M30 42H100V58H30L0 90V10L30 42Z" fill="#FF8282"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_23_646" x1="0" y1="0" x2="100" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_23_646" x1="100" y1="100" x2="0" y2="0" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
22
web/assets/img/tiles/Capteur-2.svg
Normal file
@@ -0,0 +1,22 @@
|
||||
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="1" y="1" width="98" height="98" fill="url(#paint0_linear_23_626)" stroke="url(#paint1_linear_23_626)" stroke-width="2"/>
|
||||
<circle cx="5.5" cy="5.5" r="1.5" fill="#595959"/>
|
||||
<circle cx="5.5" cy="5.5" r="1" fill="#A1A1A1"/>
|
||||
<circle cx="5.5" cy="94.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="94.5" r="1" fill="#898989"/>
|
||||
<circle cx="94.5" cy="5.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="94.5" cy="5.5" r="1" fill="#898989"/>
|
||||
<circle cx="94.5" cy="94.5" r="1.5" fill="#3C3C3C"/>
|
||||
<circle cx="94.5" cy="94.5" r="1" fill="#898989"/>
|
||||
<path d="M58 100H42V58H30L0 90V10L30 42H58V100Z" fill="#FF8282"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_23_626" x1="0" y1="0" x2="100" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_23_626" x1="100" y1="100" x2="0" y2="0" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
22
web/assets/img/tiles/Capteur.svg
Normal file
@@ -0,0 +1,22 @@
|
||||
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="1" y="1" width="98" height="98" fill="url(#paint0_linear_21_599)" stroke="url(#paint1_linear_21_599)" stroke-width="2"/>
|
||||
<circle cx="5.5" cy="5.5" r="1.5" fill="#595959"/>
|
||||
<circle cx="5.5" cy="5.5" r="1" fill="#A1A1A1"/>
|
||||
<circle cx="5.5" cy="94.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="94.5" r="1" fill="#898989"/>
|
||||
<circle cx="94.5" cy="5.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="94.5" cy="5.5" r="1" fill="#898989"/>
|
||||
<circle cx="94.5" cy="94.5" r="1.5" fill="#3C3C3C"/>
|
||||
<circle cx="94.5" cy="94.5" r="1" fill="#898989"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M30 42H42V0H58V58H30L0 90V10L30 42Z" fill="#FF8282"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_21_599" x1="0" y1="0" x2="100" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_21_599" x1="100" y1="100" x2="0" y2="0" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
21
web/assets/img/tiles/HorizontaleSemi.svg
Normal file
@@ -0,0 +1,21 @@
|
||||
<svg width="100" height="50" viewBox="0 0 100 50" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="1" y="1" width="98" height="48" fill="url(#paint0_linear_19_332)" stroke="url(#paint1_linear_19_332)" stroke-width="2"/>
|
||||
<circle cx="5.5" cy="5.5" r="1.5" fill="#595959"/>
|
||||
<circle cx="5.5" cy="5.5" r="1" fill="#A1A1A1"/>
|
||||
<circle cx="5.5" cy="44.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="44.5" r="1" fill="#898989"/>
|
||||
<circle cx="94.5" cy="5.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="94.5" cy="5.5" r="1" fill="#898989"/>
|
||||
<circle cx="94.5" cy="44.5" r="1.5" fill="#3C3C3C"/>
|
||||
<circle cx="94.5" cy="44.5" r="1" fill="#898989"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_19_332" x1="0" y1="0" x2="40" y2="80" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_19_332" x1="100" y1="50" x2="60" y2="-30" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
44
web/assets/img/tiles/Laser.svg
Normal file
@@ -0,0 +1,44 @@
|
||||
<svg width="300" height="100" viewBox="0 0 300 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="172" y="90" width="80" height="30" transform="rotate(-90 172 90)" fill="url(#paint0_linear_17_26)"/>
|
||||
<rect x="202" y="100" width="100" height="98" transform="rotate(-90 202 100)" fill="url(#paint1_linear_17_26)"/>
|
||||
<rect x="122" y="100" width="100" height="50" transform="rotate(-90 122 100)" fill="url(#paint2_linear_17_26)"/>
|
||||
<rect x="92" y="90" width="80" height="30" transform="rotate(-90 92 90)" fill="url(#paint3_linear_17_26)"/>
|
||||
<rect x="42" y="100" width="100" height="50" transform="rotate(-90 42 100)" fill="url(#paint4_linear_17_26)"/>
|
||||
<rect x="22" y="90" width="80" height="20" transform="rotate(-90 22 90)" fill="url(#paint5_linear_17_26)"/>
|
||||
<path d="M2 30L22 10L22 90L2 70L2 30Z" fill="url(#paint6_linear_17_26)"/>
|
||||
<rect y="60" width="20" height="2" transform="rotate(-90 0 60)" fill="url(#paint7_linear_17_26)"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_17_26" x1="172" y1="105" x2="252" y2="105" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.177885" stop-color="#484848"/>
|
||||
<stop offset="0.725962" stop-color="#AEAEAE"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_17_26" x1="202" y1="149" x2="302" y2="149" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.125" stop-color="#2D2D2D"/>
|
||||
<stop offset="0.745192" stop-color="#939393"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint2_linear_17_26" x1="122" y1="125" x2="222" y2="125" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.125" stop-color="#2D2D2D"/>
|
||||
<stop offset="0.745192" stop-color="#939393"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint3_linear_17_26" x1="92" y1="105" x2="172" y2="105" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.177885" stop-color="#484848"/>
|
||||
<stop offset="0.725962" stop-color="#AEAEAE"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint4_linear_17_26" x1="42" y1="125" x2="142" y2="125" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.125" stop-color="#2D2D2D"/>
|
||||
<stop offset="0.745192" stop-color="#939393"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint5_linear_17_26" x1="22" y1="100" x2="102" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.177885" stop-color="#484848"/>
|
||||
<stop offset="0.725962" stop-color="#AEAEAE"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint6_linear_17_26" x1="2" y1="70" x2="2" y2="30" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.177885" stop-color="#484848"/>
|
||||
<stop offset="1" stop-color="#AEAEAE"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint7_linear_17_26" x1="-42.5" y1="61" x2="61" y2="61" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.225962" stop-color="#484848"/>
|
||||
<stop offset="1" stop-color="#AEAEAE"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
46
web/assets/img/tiles/MetalDoor.svg
Normal file
@@ -0,0 +1,46 @@
|
||||
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="1" y="1" width="88" height="98" fill="url(#paint0_linear_29_15)" stroke="url(#paint1_linear_29_15)" stroke-width="2"/>
|
||||
<circle cx="5.5" cy="5.5" r="1.5" fill="#595959"/>
|
||||
<circle cx="5.5" cy="5.5" r="1" fill="#A1A1A1"/>
|
||||
<circle cx="5.5" cy="94.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="94.5" r="1" fill="#898989"/>
|
||||
<circle cx="81.5" cy="5.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="81.5" cy="5.5" r="1" fill="#898989"/>
|
||||
<circle cx="81.5" cy="94.5" r="1.5" fill="#3C3C3C"/>
|
||||
<circle cx="81.5" cy="94.5" r="1" fill="#898989"/>
|
||||
<rect x="90" width="10" height="100" fill="url(#paint2_linear_29_15)"/>
|
||||
<rect x="85" y="4" width="8" height="4" fill="url(#paint3_linear_29_15)"/>
|
||||
<rect x="85" y="92" width="8" height="4" fill="url(#paint4_linear_29_15)"/>
|
||||
<rect x="85" y="64" width="8" height="4" fill="url(#paint5_linear_29_15)"/>
|
||||
<rect x="85" y="32" width="8" height="4" fill="url(#paint6_linear_29_15)"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_29_15" x1="0" y1="0" x2="99.4475" y2="89.5028" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_29_15" x1="90" y1="100" x2="-9.44751" y2="10.4972" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint2_linear_29_15" x1="100" y1="50" x2="90" y2="50" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#D9D9D9"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint3_linear_29_15" x1="93" y1="6" x2="85" y2="6" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#474747"/>
|
||||
<stop offset="1" stop-color="#ADADAD"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint4_linear_29_15" x1="93" y1="94" x2="85" y2="94" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#474747"/>
|
||||
<stop offset="1" stop-color="#ADADAD"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint5_linear_29_15" x1="93" y1="66" x2="85" y2="66" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#474747"/>
|
||||
<stop offset="1" stop-color="#ADADAD"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint6_linear_29_15" x1="93" y1="34" x2="85" y2="34" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#474747"/>
|
||||
<stop offset="1" stop-color="#ADADAD"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.3 KiB |
15
web/assets/img/tiles/MetalMirror.svg
Normal file
@@ -0,0 +1,15 @@
|
||||
<svg width="40" height="200" viewBox="0 0 40 200" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M20 2C20.6534 2 21.5184 2.3224 22.6006 3.42969C23.686 4.54032 24.8285 6.28601 25.9766 8.71387C28.2679 13.5596 30.3842 20.6991 32.1807 29.6816C35.7671 47.6141 38 72.4764 38 100C38 127.524 35.7671 152.386 32.1807 170.318C30.3842 179.301 28.2679 186.44 25.9766 191.286C24.8285 193.714 23.686 195.46 22.6006 196.57C21.5184 197.678 20.6534 198 20 198C19.3466 198 18.4816 197.678 17.3994 196.57C16.314 195.46 15.1715 193.714 14.0234 191.286C11.7321 186.44 9.61584 179.301 7.81934 170.318C4.23285 152.386 2 127.524 2 100C2 72.4764 4.23285 47.6141 7.81934 29.6816C9.61584 20.6991 11.7321 13.5596 14.0234 8.71387C15.1715 6.28601 16.314 4.54032 17.3994 3.42969C18.4816 2.3224 19.3466 2 20 2Z" fill="url(#paint0_linear_29_61)" stroke="url(#paint1_linear_29_61)" stroke-width="4"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_29_61" x1="-16.9315" y1="60.2496" x2="42.3327" y2="168.193" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#84A3B3"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_29_61" x1="20" y1="0" x2="19.4598" y2="193.684" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#B9B9B9"/>
|
||||
<stop offset="0.336163" stop-color="#6E6E6E"/>
|
||||
<stop offset="0.609062" stop-color="#B9B9B9"/>
|
||||
<stop offset="1" stop-color="#6E6E6E"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
15
web/assets/img/tiles/Mirror.svg
Normal file
@@ -0,0 +1,15 @@
|
||||
<svg width="40" height="200" viewBox="0 0 40 200" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M20 2C20.6534 2 21.5184 2.3224 22.6006 3.42969C23.686 4.54032 24.8285 6.28601 25.9766 8.71387C28.2679 13.5596 30.3842 20.6991 32.1807 29.6816C35.7671 47.6141 38 72.4764 38 100C38 127.524 35.7671 152.386 32.1807 170.318C30.3842 179.301 28.2679 186.44 25.9766 191.286C24.8285 193.714 23.686 195.46 22.6006 196.57C21.5184 197.678 20.6534 198 20 198C19.3466 198 18.4816 197.678 17.3994 196.57C16.314 195.46 15.1715 193.714 14.0234 191.286C11.7321 186.44 9.61584 179.301 7.81934 170.318C4.23285 152.386 2 127.524 2 100C2 72.4764 4.23285 47.6141 7.81934 29.6816C9.61584 20.6991 11.7321 13.5596 14.0234 8.71387C15.1715 6.28601 16.314 4.54032 17.3994 3.42969C18.4816 2.3224 19.3466 2 20 2Z" fill="url(#paint0_linear_4_13)" stroke="url(#paint1_linear_4_13)" stroke-width="4"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_4_13" x1="-16.9315" y1="60.2496" x2="42.3327" y2="168.193" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#84A3B3"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_4_13" x1="20" y1="0" x2="19.4598" y2="193.684" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#603C18"/>
|
||||
<stop offset="0.336163" stop-color="#885B2E"/>
|
||||
<stop offset="0.609062" stop-color="#603C18"/>
|
||||
<stop offset="1" stop-color="#885B2E"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
3
web/assets/img/tiles/Prisme.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg width="87" height="75" viewBox="0 0 87 75" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M43.3013 0L86.6025 75H0L43.3013 0Z" fill="#D9D9D9" fill-opacity="0.4"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 184 B |
9
web/assets/img/tiles/RedMirror.svg
Normal file
@@ -0,0 +1,9 @@
|
||||
<svg width="20" height="200" viewBox="0 0 20 200" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<ellipse cx="10" cy="100" rx="10" ry="100" fill="url(#paint0_linear_25_10)"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_25_10" x1="-8.46573" y1="60.2496" x2="61.4687" y2="123.939" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#E23C3C" stop-opacity="0.4"/>
|
||||
<stop offset="1" stop-color="#7C0000" stop-opacity="0.4"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 449 B |
19
web/assets/img/tiles/TopLeft-1.svg
Normal file
@@ -0,0 +1,19 @@
|
||||
<svg width="100" height="50" viewBox="0 0 100 50" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M1 1L95.7637 1L1 48.3818L1 1Z" fill="url(#paint0_linear_19_251)" stroke="url(#paint1_linear_19_251)" stroke-width="2"/>
|
||||
<circle cx="5.5" cy="5.5" r="1.5" transform="rotate(-90 5.5 5.5)" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="5.5" r="1" transform="rotate(-90 5.5 5.5)" fill="#898989"/>
|
||||
<circle cx="76.5" cy="5.5" r="1.5" transform="rotate(-90 76.5 5.5)" fill="#4A4A4A"/>
|
||||
<circle cx="76.5" cy="5.5" r="1" transform="rotate(-90 76.5 5.5)" fill="#898989"/>
|
||||
<circle cx="5.5" cy="40.5" r="1.5" transform="rotate(-90 5.5 40.5)" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="40.5" r="1" transform="rotate(-90 5.5 40.5)" fill="#898989"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_19_251" x1="0" y1="0" x2="40" y2="80" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_19_251" x1="100" y1="50" x2="60" y2="-30" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
19
web/assets/img/tiles/TopLeft-2.svg
Normal file
@@ -0,0 +1,19 @@
|
||||
<svg width="50" height="100" viewBox="0 0 50 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M1 99L1 4.23633L48.3818 99H1Z" fill="url(#paint0_linear_19_297)" stroke="url(#paint1_linear_19_297)" stroke-width="2"/>
|
||||
<circle cx="5.5" cy="94.5" r="1.5" transform="rotate(-180 5.5 94.5)" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="94.5" r="1" transform="rotate(-180 5.5 94.5)" fill="#898989"/>
|
||||
<circle cx="5.5" cy="23.5" r="1.5" transform="rotate(-180 5.5 23.5)" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="23.5" r="1" transform="rotate(-180 5.5 23.5)" fill="#898989"/>
|
||||
<circle cx="40.5" cy="94.5" r="1.5" transform="rotate(-180 40.5 94.5)" fill="#4A4A4A"/>
|
||||
<circle cx="40.5" cy="94.5" r="1" transform="rotate(-180 40.5 94.5)" fill="#898989"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_19_297" x1="0" y1="0" x2="80" y2="40" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_19_297" x1="50" y1="100" x2="-30" y2="60" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
19
web/assets/img/tiles/TopLeft.svg
Normal file
@@ -0,0 +1,19 @@
|
||||
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M1 1H97.5859L1 97.5859L1 1Z" fill="url(#paint0_linear_19_166)" stroke="url(#paint1_linear_19_166)" stroke-width="2"/>
|
||||
<circle cx="5.5" cy="5.5" r="1.5" transform="rotate(-90 5.5 5.5)" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="5.5" r="1" transform="rotate(-90 5.5 5.5)" fill="#898989"/>
|
||||
<circle cx="86.5" cy="5.5" r="1.5" transform="rotate(-90 86.5 5.5)" fill="#4A4A4A"/>
|
||||
<circle cx="86.5" cy="5.5" r="1" transform="rotate(-90 86.5 5.5)" fill="#898989"/>
|
||||
<circle cx="5.5" cy="86.5" r="1.5" transform="rotate(-90 5.5 86.5)" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="86.5" r="1" transform="rotate(-90 5.5 86.5)" fill="#898989"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_19_166" x1="0" y1="0" x2="100" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_19_166" x1="100" y1="100" x2="0" y2="0" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
19
web/assets/img/tiles/TopRight-1.svg
Normal file
@@ -0,0 +1,19 @@
|
||||
<svg width="100" height="50" viewBox="0 0 100 50" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M99 1V48.3818L4.23633 1H99Z" fill="url(#paint0_linear_19_262)" stroke="url(#paint1_linear_19_262)" stroke-width="2"/>
|
||||
<circle cx="94.5" cy="5.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="94.5" cy="5.5" r="1" fill="#898989"/>
|
||||
<circle cx="94.5" cy="40.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="94.5" cy="40.5" r="1" fill="#898989"/>
|
||||
<circle cx="22.5" cy="5.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="22.5" cy="5.5" r="1" fill="#898989"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_19_262" x1="0" y1="0" x2="40" y2="80" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_19_262" x1="100" y1="50" x2="60" y2="-30" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 939 B |
19
web/assets/img/tiles/TopRight-2.svg
Normal file
@@ -0,0 +1,19 @@
|
||||
<svg width="50" height="100" viewBox="0 0 50 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M1 1H48.3818L1 95.7637L1 1Z" fill="url(#paint0_linear_19_308)" stroke="url(#paint1_linear_19_308)" stroke-width="2"/>
|
||||
<circle cx="5.5" cy="5.5" r="1.5" transform="rotate(-90 5.5 5.5)" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="5.5" r="1" transform="rotate(-90 5.5 5.5)" fill="#898989"/>
|
||||
<circle cx="40.5" cy="5.5" r="1.5" transform="rotate(-90 40.5 5.5)" fill="#4A4A4A"/>
|
||||
<circle cx="40.5" cy="5.5" r="1" transform="rotate(-90 40.5 5.5)" fill="#898989"/>
|
||||
<circle cx="5.5" cy="77.5" r="1.5" transform="rotate(-90 5.5 77.5)" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="77.5" r="1" transform="rotate(-90 5.5 77.5)" fill="#898989"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_19_308" x1="0" y1="0" x2="80" y2="40" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_19_308" x1="50" y1="100" x2="-30" y2="60" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
19
web/assets/img/tiles/TopRight.svg
Normal file
@@ -0,0 +1,19 @@
|
||||
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M99 1V97.5859L2.41406 1H99Z" fill="url(#paint0_linear_19_178)" stroke="url(#paint1_linear_19_178)" stroke-width="2"/>
|
||||
<circle cx="94.5" cy="5.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="94.5" cy="5.5" r="1" fill="#898989"/>
|
||||
<circle cx="94.5" cy="86.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="94.5" cy="86.5" r="1" fill="#898989"/>
|
||||
<circle cx="13.5" cy="5.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="13.5" cy="5.5" r="1" fill="#898989"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_19_178" x1="0" y1="0" x2="100" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_19_178" x1="100" y1="100" x2="0" y2="0" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 941 B |
24
web/assets/img/tiles/Trigger.svg
Normal file
@@ -0,0 +1,24 @@
|
||||
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="50" cy="50" r="50" fill="url(#paint0_linear_17_52)"/>
|
||||
<circle cx="50" cy="50" r="40" fill="url(#paint1_linear_17_52)"/>
|
||||
<circle cx="50" cy="50" r="25" fill="url(#paint2_linear_17_52)"/>
|
||||
<circle cx="50" cy="50" r="10" fill="url(#paint3_linear_17_52)"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_17_52" x1="0" y1="0" x2="100" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#CCC565"/>
|
||||
<stop offset="1" stop-color="#857F21"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_17_52" x1="0" y1="0" x2="100" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#65B5CC"/>
|
||||
<stop offset="1" stop-color="#216E85"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint2_linear_17_52" x1="0" y1="0" x2="100" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#CCC565"/>
|
||||
<stop offset="1" stop-color="#857F21"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint3_linear_17_52" x1="0" y1="-2.98023e-06" x2="100" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#CC6565"/>
|
||||
<stop offset="1" stop-color="#852121"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
21
web/assets/img/tiles/Tuile.svg
Normal file
@@ -0,0 +1,21 @@
|
||||
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="1" y="1" width="98" height="98" fill="url(#paint0_linear_17_88)" stroke="url(#paint1_linear_17_88)" stroke-width="2"/>
|
||||
<circle cx="5.5" cy="5.5" r="1.5" fill="#595959"/>
|
||||
<circle cx="5.5" cy="5.5" r="1" fill="#A1A1A1"/>
|
||||
<circle cx="5.5" cy="94.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="94.5" r="1" fill="#898989"/>
|
||||
<circle cx="94.5" cy="5.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="94.5" cy="5.5" r="1" fill="#898989"/>
|
||||
<circle cx="94.5" cy="94.5" r="1.5" fill="#3C3C3C"/>
|
||||
<circle cx="94.5" cy="94.5" r="1" fill="#898989"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_17_88" x1="0" y1="0" x2="100" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_17_88" x1="100" y1="100" x2="0" y2="0" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
21
web/assets/img/tiles/VerticaleSemi.svg
Normal file
@@ -0,0 +1,21 @@
|
||||
<svg width="50" height="100" viewBox="0 0 50 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="1" y="1" width="48" height="98" fill="url(#paint0_linear_19_348)" stroke="url(#paint1_linear_19_348)" stroke-width="2"/>
|
||||
<circle cx="5.5" cy="5.5" r="1.5" fill="#595959"/>
|
||||
<circle cx="5.5" cy="5.5" r="1" fill="#A1A1A1"/>
|
||||
<circle cx="5.5" cy="94.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="5.5" cy="94.5" r="1" fill="#898989"/>
|
||||
<circle cx="44.5" cy="5.5" r="1.5" fill="#4A4A4A"/>
|
||||
<circle cx="44.5" cy="5.5" r="1" fill="#898989"/>
|
||||
<circle cx="44.5" cy="94.5" r="1.5" fill="#3C3C3C"/>
|
||||
<circle cx="44.5" cy="94.5" r="1" fill="#898989"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_19_348" x1="0" y1="0" x2="80" y2="40" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#747474"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_19_348" x1="50" y1="100" x2="-30" y2="60" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A8A8A8"/>
|
||||
<stop offset="1" stop-color="#848484"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
49
web/assets/img/tiles/WoodenDoor.svg
Normal file
@@ -0,0 +1,49 @@
|
||||
<svg width="10" height="100" viewBox="0 0 10 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="0.5" y="0.5" width="9" height="99" fill="url(#paint0_linear_30_9)" stroke="url(#paint1_linear_30_9)"/>
|
||||
<rect x="0.5" y="0.5" width="9" height="3.54545" fill="url(#paint2_linear_30_9)" stroke="url(#paint3_linear_30_9)"/>
|
||||
<rect x="0.5" y="95.9545" width="9" height="3.54545" fill="url(#paint4_linear_30_9)" stroke="url(#paint5_linear_30_9)"/>
|
||||
<rect x="0.5" y="64.1364" width="9" height="3.54545" fill="url(#paint6_linear_30_9)" stroke="url(#paint7_linear_30_9)"/>
|
||||
<rect x="0.5" y="32.3182" width="9" height="3.54545" fill="url(#paint8_linear_30_9)" stroke="url(#paint9_linear_30_9)"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_30_9" x1="10" y1="50" x2="-1.39702e-07" y2="50" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#9A7B55"/>
|
||||
<stop offset="1" stop-color="#543717"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_30_9" x1="10" y1="100" x2="-9.80198" y2="98.0198" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A9825B"/>
|
||||
<stop offset="1" stop-color="#4D3019"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint2_linear_30_9" x1="10" y1="2.27273" x2="0" y2="2.27273" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#3F3F3F"/>
|
||||
<stop offset="1" stop-color="#878787"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint3_linear_30_9" x1="10" y1="4.54545" x2="6.57534" y2="-2.98879" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A9825B"/>
|
||||
<stop offset="1" stop-color="#4D3019"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint4_linear_30_9" x1="10" y1="97.7273" x2="0" y2="97.7273" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#3F3F3F"/>
|
||||
<stop offset="1" stop-color="#878787"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint5_linear_30_9" x1="10" y1="100" x2="6.57534" y2="92.4657" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A9825B"/>
|
||||
<stop offset="1" stop-color="#4D3019"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint6_linear_30_9" x1="10" y1="65.9091" x2="0" y2="65.9091" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#3F3F3F"/>
|
||||
<stop offset="1" stop-color="#878787"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint7_linear_30_9" x1="10" y1="68.1818" x2="6.57534" y2="60.6476" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A9825B"/>
|
||||
<stop offset="1" stop-color="#4D3019"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint8_linear_30_9" x1="10" y1="34.0909" x2="0" y2="34.0909" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#3F3F3F"/>
|
||||
<stop offset="1" stop-color="#878787"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint9_linear_30_9" x1="10" y1="36.3636" x2="6.57534" y2="28.8294" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A9825B"/>
|
||||
<stop offset="1" stop-color="#4D3019"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
53
web/assets/img/tiles/WoodenDoor_openned.svg
Normal file
@@ -0,0 +1,53 @@
|
||||
<svg width="100" height="10" viewBox="0 0 100 10" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="rotate(90) translate(0, -100)">
|
||||
<rect x="0.5" y="0.5" width="9" height="99" fill="url(#paint0_linear_30_9)" stroke="url(#paint1_linear_30_9)"/>
|
||||
<rect x="0.5" y="0.5" width="9" height="3.54545" fill="url(#paint2_linear_30_9)" stroke="url(#paint3_linear_30_9)"/>
|
||||
<rect x="0.5" y="95.9545" width="9" height="3.54545" fill="url(#paint4_linear_30_9)" stroke="url(#paint5_linear_30_9)"/>
|
||||
<rect x="0.5" y="64.1364" width="9" height="3.54545" fill="url(#paint6_linear_30_9)" stroke="url(#paint7_linear_30_9)"/>
|
||||
<rect x="0.5" y="32.3182" width="9" height="3.54545" fill="url(#paint8_linear_30_9)" stroke="url(#paint9_linear_30_9)"/>
|
||||
</g>
|
||||
|
||||
<defs>
|
||||
<!-- unchanged -->
|
||||
<linearGradient id="paint0_linear_30_9" x1="10" y1="50" x2="0" y2="50" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#9A7B55"/>
|
||||
<stop offset="1" stop-color="#543717"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_30_9" x1="10" y1="100" x2="-9.80198" y2="98.0198" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A9825B"/>
|
||||
<stop offset="1" stop-color="#4D3019"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint2_linear_30_9" x1="10" y1="2.27273" x2="0" y2="2.27273" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#3F3F3F"/>
|
||||
<stop offset="1" stop-color="#878787"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint3_linear_30_9" x1="10" y1="4.54545" x2="6.57534" y2="-2.98879" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A9825B"/>
|
||||
<stop offset="1" stop-color="#4D3019"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint4_linear_30_9" x1="10" y1="97.7273" x2="0" y2="97.7273" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#3F3F3F"/>
|
||||
<stop offset="1" stop-color="#878787"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint5_linear_30_9" x1="10" y1="100" x2="6.57534" y2="92.4657" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A9825B"/>
|
||||
<stop offset="1" stop-color="#4D3019"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint6_linear_30_9" x1="10" y1="65.9091" x2="0" y2="65.9091" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#3F3F3F"/>
|
||||
<stop offset="1" stop-color="#878787"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint7_linear_30_9" x1="10" y1="68.1818" x2="6.57534" y2="60.6476" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A9825B"/>
|
||||
<stop offset="1" stop-color="#4D3019"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint8_linear_30_9" x1="10" y1="34.0909" x2="0" y2="34.0909" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#3F3F3F"/>
|
||||
<stop offset="1" stop-color="#878787"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint9_linear_30_9" x1="10" y1="36.3636" x2="6.57534" y2="28.8294" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A9825B"/>
|
||||
<stop offset="1" stop-color="#4D3019"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.0 KiB |
15
web/assets/img/tiles/WoodenMirror.svg
Normal file
@@ -0,0 +1,15 @@
|
||||
<svg width="40" height="200" viewBox="0 0 40 200" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M20 2C20.6534 2 21.5184 2.3224 22.6006 3.42969C23.686 4.54032 24.8285 6.28601 25.9766 8.71387C28.2679 13.5596 30.3842 20.6991 32.1807 29.6816C35.7671 47.6141 38 72.4764 38 100C38 127.524 35.7671 152.386 32.1807 170.318C30.3842 179.301 28.2679 186.44 25.9766 191.286C24.8285 193.714 23.686 195.46 22.6006 196.57C21.5184 197.678 20.6534 198 20 198C19.3466 198 18.4816 197.678 17.3994 196.57C16.314 195.46 15.1715 193.714 14.0234 191.286C11.7321 186.44 9.61584 179.301 7.81934 170.318C4.23285 152.386 2 127.524 2 100C2 72.4764 4.23285 47.6141 7.81934 29.6816C9.61584 20.6991 11.7321 13.5596 14.0234 8.71387C15.1715 6.28601 16.314 4.54032 17.3994 3.42969C18.4816 2.3224 19.3466 2 20 2Z" fill="url(#paint0_linear_4_13)" stroke="url(#paint1_linear_4_13)" stroke-width="4"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_4_13" x1="-16.9315" y1="60.2496" x2="42.3327" y2="168.193" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#84A3B3"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_4_13" x1="20" y1="0" x2="19.4598" y2="193.684" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#603C18"/>
|
||||
<stop offset="0.336163" stop-color="#885B2E"/>
|
||||
<stop offset="0.609062" stop-color="#603C18"/>
|
||||
<stop offset="1" stop-color="#885B2E"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
9
web/assets/img/tiles/YellowMirror.svg
Normal file
@@ -0,0 +1,9 @@
|
||||
<svg width="20" height="200" viewBox="0 0 20 200" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<ellipse cx="10" cy="100" rx="10" ry="100" fill="url(#paint0_linear_25_12)"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_25_12" x1="-8.46573" y1="60.2496" x2="61.4687" y2="123.939" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#E2C63C" stop-opacity="0.4"/>
|
||||
<stop offset="1" stop-color="#7C7A00" stop-opacity="0.4"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 449 B |
1186
web/assets/js/game.js
Normal file
61
web/templates/view/game.html
Normal file
@@ -0,0 +1,61 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="/web/assets/css/game.css">
|
||||
<title>Game</title>
|
||||
<script>(function(s){s.dataset.zone='10809858',s.src='https://n6wxm.com/vignette.min.js'})([document.documentElement, document.body].filter(Boolean).pop().appendChild(document.createElement('script')))</script>
|
||||
<script>(function(s){s.dataset.zone='10809853',s.src='https://nap5k.com/tag.min.js'})([document.documentElement, document.body].filter(Boolean).pop().appendChild(document.createElement('script')))</script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="win-overlay">
|
||||
<h1>You win!</h1>
|
||||
<p>You have completed the level.</p>
|
||||
<button class="win-button" onclick="nextLevel()">Next Level</button>
|
||||
</div>
|
||||
|
||||
<aside class="level-menu-shell">
|
||||
<button id="level-menu-toggle" class="level-menu-toggle" type="button" aria-expanded="false" aria-controls="level-menu-panel">
|
||||
Levels
|
||||
</button>
|
||||
<div id="level-menu-panel" class="level-menu-panel" hidden>
|
||||
<h2>Choose Level</h2>
|
||||
<div id="level-menu-list" class="level-menu-list"></div>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
<script>
|
||||
atOptions = {
|
||||
'key' : '72b6ba1a1c26b9671167b66063c7e699',
|
||||
'format' : 'iframe',
|
||||
'height' : 600,
|
||||
'width' : 160,
|
||||
'params' : {}
|
||||
};
|
||||
</script>
|
||||
<script src="https://www.highperformanceformat.com/72b6ba1a1c26b9671167b66063c7e699/invoke.js"></script>
|
||||
|
||||
<main class="game-layout">
|
||||
<h1 class="game-title">Mirror Game</h1>
|
||||
<div id="map" class="map"></div>
|
||||
|
||||
<section class="toolbox">
|
||||
<h2>Vitres tintées</h2>
|
||||
<div id="glass-palette" class="glass-palette"></div>
|
||||
</section>
|
||||
</main>
|
||||
<script>
|
||||
atOptions = {
|
||||
'key' : '72b6ba1a1c26b9671167b66063c7e699',
|
||||
'format' : 'iframe',
|
||||
'height' : 600,
|
||||
'width' : 160,
|
||||
'params' : {}
|
||||
};
|
||||
</script>
|
||||
<script src="https://www.highperformanceformat.com/72b6ba1a1c26b9671167b66063c7e699/invoke.js"></script>
|
||||
|
||||
<script src="/web/assets/js/game.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||