Visual overhaul: theme, illustrations, redesigned screens (0.3.0)
Phase "habillage" of the post-0.1.0 plan. Rendering was reviewed on real screenshots (new tools/screenshot.gd, `make screenshot`), which also caught and fixed map markers overlapping and truncated titles. - Global Godot theme (Atkinson Hyperlegible font, cream/green/gold palette, raised buttons, rounded cards, thick keyboard focus). - Original vector art: forest/marsh backdrops, Plume the owl, stars, exercise-type icons, correct/try-again icons, 10 collection items. - Redesigned world map (markers as cards with icon, title and stars, responsive layout), profile screens, mission intro, exercise host, rule/feedback panels, reward screen and collection grid. - Motion helper (pop-in, fade) honouring an animations setting. - Settings: animations flag; base window 1152x648 with canvas_items. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@@ -19,6 +19,7 @@ Le `Makefile` est le seul point d'entrée pour les opérations système. Tenir c
|
||||
- `make content-review` : régénère `docs/review/content-review.md` à partir de `data/`
|
||||
- `make generate-dictation-audio` : génère l'audio provisoire des dictées (voix neuronale Piper via `.venv`, `ffmpeg` requis sur la machine) dans `assets/audio/dictations/`, sans écraser l'existant (`--force` pour régénérer)
|
||||
- `make export-linux` / `make export-windows` : exports dans `build/`
|
||||
- `make screenshot SCENE=… OUT=… ARGS=…` : capture le rendu réel d'une scène dans une fenêtre (outil de développement, ouvre brièvement une fenêtre)
|
||||
- `make package` : réexporte puis produit les archives distribuables (exécutable unique + licence + crédits + notice) et `SHA256SUMS` dans `dist/`
|
||||
|
||||
## Conventions de code
|
||||
|
||||
@@ -6,7 +6,7 @@ PYRIGHT := $(VENV)/bin/pyright
|
||||
PYTHON := $(VENV)/bin/python3
|
||||
GD_SOURCES := autoload scripts tests
|
||||
|
||||
.PHONY: setup run lint format validate-data test check content-review generate-dictation-audio export-linux export-windows package
|
||||
.PHONY: setup run lint format validate-data test check content-review generate-dictation-audio export-linux export-windows package screenshot
|
||||
|
||||
setup:
|
||||
tools/setup.sh
|
||||
@@ -45,3 +45,8 @@ export-windows:
|
||||
|
||||
package:
|
||||
tools/package.sh
|
||||
|
||||
# Capture d'une scene dans une vraie fenetre (voir tools/screenshot.gd) :
|
||||
# make screenshot SCENE=res://scenes/world/world_map.tscn OUT=/tmp/map.png ARGS="CE2"
|
||||
screenshot:
|
||||
$(GODOT_BIN) --path . -s res://tools/screenshot.gd -- $(SCENE) $(OUT) $(ARGS)
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
# Sources des assets provisoires
|
||||
|
||||
Tous les graphismes et sons actuels sont provisoires, crees pour ce projet, sans asset tiers.
|
||||
Tous les graphismes et sons actuels sont provisoires et crees pour ce projet ; seules la police et les voix de synthese reposent sur des composants tiers libres, listes ci-dessous.
|
||||
|
||||
| Fichier | Origine | Licence |
|
||||
|---|---|---|
|
||||
| `icon.svg` | Forme geometrique simple, creee pour ce projet | AGPL-3.0 (code et assets du depot) |
|
||||
| `fonts/AtkinsonHyperlegible-*.ttf` | Atkinson Hyperlegible, police conçue pour la lisibilité (Braille Institute) | SIL Open Font License 1.1 (`fonts/OFL.txt`) |
|
||||
| `environments/*.svg`, `characters/*.svg`, `interface/*.svg`, `interface/items/*.svg` | Illustrations vectorielles originales créées pour ce projet (décors, hibou Plume, étoiles, pictogrammes, objets de collection) ; provisoires | AGPL-3.0 (code et assets du dépôt) |
|
||||
| `audio/dictations/*.ogg` (toutes les dictees) | Voix de synthese neuronale generee hors ligne avec Piper (modele `fr_FR-siwis-medium`, entraine sur le corpus SIWIS de l'EPFL), via `tools/generate_dictation_audio.py` | MIT (Piper) ; dataset SIWIS en CC-BY 4.0 (attribution requise) ; fichiers generes verses en AGPL-3.0 avec le reste du depot |
|
||||
|
||||
Chaque nouvelle dictee ajoutee a `data/dictations/` doit avoir son audio genere avec `make generate-dictation-audio`, puis une ligne ajoutee ici. Toutes les voix actuelles sont provisoires (`audio_provisional: true` dans la donnee, badge « voix provisoire » affiche a l'enfant) : a remplacer par une vraie voix humaine avant diffusion.
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="256" viewBox="0 0 256 256">
|
||||
<ellipse cx="128" cy="236" rx="70" ry="10" fill="#000" opacity="0.15"/>
|
||||
<path d="M60 70 L78 30 L104 62 Z" fill="#7A5230"/><path d="M196 70 L178 30 L152 62 Z" fill="#7A5230"/>
|
||||
<ellipse cx="128" cy="140" rx="84" ry="92" fill="#8B5E3C"/>
|
||||
<ellipse cx="128" cy="168" rx="52" ry="60" fill="#F7E3B5"/>
|
||||
<g fill="#E8C98A"><path d="M100 150 q10 8 20 0 q10 8 20 0 q10 8 20 0 l0 6 q-10 8 -20 0 q-10 8 -20 0 q-10 8 -20 0z"/>
|
||||
<path d="M104 178 q10 8 20 0 q10 8 20 0 l0 6 q-10 8 -20 0 q-10 8 -20 0z"/></g>
|
||||
<path d="M48 120 C 20 150 24 200 56 214 C 70 190 68 150 60 124 Z" fill="#6F4A2D"/>
|
||||
<path d="M208 120 C 236 150 232 200 200 214 C 186 190 188 150 196 124 Z" fill="#6F4A2D"/>
|
||||
<circle cx="96" cy="104" r="36" fill="#FFFFFF"/><circle cx="160" cy="104" r="36" fill="#FFFFFF"/>
|
||||
<circle cx="96" cy="104" r="36" fill="none" stroke="#E8C98A" stroke-width="6"/>
|
||||
<circle cx="160" cy="104" r="36" fill="none" stroke="#E8C98A" stroke-width="6"/>
|
||||
<circle cx="100" cy="106" r="16" fill="#26324A"/><circle cx="156" cy="106" r="16" fill="#26324A"/>
|
||||
<circle cx="105" cy="100" r="6" fill="#FFFFFF"/><circle cx="161" cy="100" r="6" fill="#FFFFFF"/>
|
||||
<path d="M118 120 L138 120 L128 142 Z" fill="#F28C28"/>
|
||||
<path d="M96 222 l-10 14 h30 z M160 222 l-10 14 h30 z" fill="#F28C28"/>
|
||||
<path d="M70 168 Q128 200 186 168 L186 184 Q128 214 70 184 Z" fill="#3FA34D"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://hokvd25q8sx8"
|
||||
path="res://.godot/imported/owl_plume.svg-5a0c30c1a3ad1c122ff173e9e224403b.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/characters/owl_plume.svg"
|
||||
dest_files=["res://.godot/imported/owl_plume.svg-5a0c30c1a3ad1c122ff173e9e224403b.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,107 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1920" height="1080" viewBox="0 0 1920 1080">
|
||||
<defs><linearGradient id="sky" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#9ED8E6"/><stop offset="0.6" stop-color="#D9F2E4"/><stop offset="1" stop-color="#FFF3C4"/></linearGradient><radialGradient id="halo"><stop offset="0" stop-color="#FFF3B0" stop-opacity="0.9"/><stop offset="1" stop-color="#FFF3B0" stop-opacity="0"/></radialGradient></defs>
|
||||
<rect width="1920" height="1080" fill="url(#sky)"/>
|
||||
<circle cx="1560" cy="210" r="230" fill="url(#halo)"/>
|
||||
<circle cx="1560" cy="210" r="84" fill="#FFE08A"/>
|
||||
<g fill="#FFFFFF" opacity="0.85"><ellipse cx="300" cy="170" rx="110" ry="34"/><ellipse cx="240" cy="182" rx="70" ry="28"/><ellipse cx="370" cy="180" rx="80" ry="28"/></g>
|
||||
<g fill="#FFFFFF" opacity="0.85"><ellipse cx="820" cy="110" rx="77" ry="24"/><ellipse cx="778" cy="118" rx="49" ry="20"/><ellipse cx="869" cy="117" rx="56" ry="20"/></g>
|
||||
<g fill="#FFFFFF" opacity="0.85"><ellipse cx="1180" cy="240" rx="94" ry="29"/><ellipse cx="1129" cy="250" rx="60" ry="24"/><ellipse cx="1240" cy="248" rx="68" ry="24"/></g>
|
||||
<path d="M0 640 C 300 540 520 600 800 560 C 1100 520 1380 600 1920 520 L1920 1080 L0 1080 Z" fill="#A9D8A4"/>
|
||||
<rect x="35" y="565" width="11" height="34" fill="#6B4A2F"/><circle cx="40" cy="525" r="46" fill="#7DC08B"/><circle cx="13" cy="545" r="34" fill="#7DC08B"/><circle cx="67" cy="545" r="34" fill="#7DC08B"/>
|
||||
<rect x="127" y="558" width="12" height="36" fill="#6B4A2F"/><circle cx="133" cy="515" r="49" fill="#7DC08B"/><circle cx="104" cy="536" r="36" fill="#7DC08B"/><circle cx="162" cy="536" r="36" fill="#7DC08B"/>
|
||||
<rect x="240" y="576" width="12" height="37" fill="#6B4A2F"/><circle cx="246" cy="532" r="50" fill="#7DC08B"/><circle cx="217" cy="554" r="37" fill="#7DC08B"/><circle cx="275" cy="554" r="37" fill="#7DC08B"/>
|
||||
<rect x="348" y="591" width="10" height="31" fill="#6B4A2F"/><circle cx="353" cy="554" r="42" fill="#7DC08B"/><circle cx="328" cy="573" r="31" fill="#7DC08B"/><circle cx="378" cy="573" r="31" fill="#7DC08B"/>
|
||||
<rect x="457" y="561" width="11" height="34" fill="#6B4A2F"/><circle cx="462" cy="520" r="47" fill="#7DC08B"/><circle cx="435" cy="540" r="34" fill="#7DC08B"/><circle cx="489" cy="540" r="34" fill="#7DC08B"/>
|
||||
<rect x="591" y="563" width="10" height="31" fill="#6B4A2F"/><circle cx="596" cy="525" r="42" fill="#7DC08B"/><circle cx="571" cy="544" r="31" fill="#7DC08B"/><circle cx="621" cy="544" r="31" fill="#7DC08B"/>
|
||||
<rect x="680" y="591" width="11" height="34" fill="#6B4A2F"/><circle cx="685" cy="550" r="47" fill="#7DC08B"/><circle cx="658" cy="570" r="34" fill="#7DC08B"/><circle cx="712" cy="570" r="34" fill="#7DC08B"/>
|
||||
<rect x="788" y="597" width="9" height="29" fill="#6B4A2F"/><circle cx="793" cy="562" r="40" fill="#7DC08B"/><circle cx="770" cy="579" r="29" fill="#7DC08B"/><circle cx="816" cy="579" r="29" fill="#7DC08B"/>
|
||||
<rect x="908" y="592" width="12" height="38" fill="#6B4A2F"/><circle cx="914" cy="548" r="51" fill="#7DC08B"/><circle cx="884" cy="570" r="38" fill="#7DC08B"/><circle cx="944" cy="570" r="38" fill="#7DC08B"/>
|
||||
<rect x="1041" y="556" width="12" height="36" fill="#6B4A2F"/><circle cx="1047" cy="513" r="50" fill="#7DC08B"/><circle cx="1018" cy="535" r="36" fill="#7DC08B"/><circle cx="1076" cy="535" r="36" fill="#7DC08B"/>
|
||||
<rect x="1152" y="587" width="9" height="28" fill="#6B4A2F"/><circle cx="1157" cy="553" r="38" fill="#7DC08B"/><circle cx="1134" cy="570" r="28" fill="#7DC08B"/><circle cx="1180" cy="570" r="28" fill="#7DC08B"/>
|
||||
<rect x="1238" y="556" width="12" height="36" fill="#6B4A2F"/><circle cx="1244" cy="512" r="49" fill="#7DC08B"/><circle cx="1215" cy="534" r="36" fill="#7DC08B"/><circle cx="1273" cy="534" r="36" fill="#7DC08B"/>
|
||||
<rect x="1343" y="574" width="11" height="34" fill="#6B4A2F"/><circle cx="1348" cy="533" r="46" fill="#7DC08B"/><circle cx="1321" cy="554" r="34" fill="#7DC08B"/><circle cx="1375" cy="554" r="34" fill="#7DC08B"/>
|
||||
<rect x="1454" y="595" width="9" height="29" fill="#6B4A2F"/><circle cx="1459" cy="560" r="40" fill="#7DC08B"/><circle cx="1436" cy="577" r="29" fill="#7DC08B"/><circle cx="1482" cy="577" r="29" fill="#7DC08B"/>
|
||||
<rect x="1590" y="573" width="12" height="36" fill="#6B4A2F"/><circle cx="1596" cy="529" r="49" fill="#7DC08B"/><circle cx="1567" cy="551" r="36" fill="#7DC08B"/><circle cx="1625" cy="551" r="36" fill="#7DC08B"/>
|
||||
<rect x="1675" y="559" width="12" height="37" fill="#6B4A2F"/><circle cx="1681" cy="515" r="50" fill="#7DC08B"/><circle cx="1652" cy="537" r="37" fill="#7DC08B"/><circle cx="1710" cy="537" r="37" fill="#7DC08B"/>
|
||||
<rect x="1811" y="600" width="10" height="30" fill="#6B4A2F"/><circle cx="1816" cy="563" r="41" fill="#7DC08B"/><circle cx="1792" cy="581" r="30" fill="#7DC08B"/><circle cx="1840" cy="581" r="30" fill="#7DC08B"/>
|
||||
<rect x="1907" y="560" width="12" height="36" fill="#6B4A2F"/><circle cx="1913" cy="516" r="49" fill="#7DC08B"/><circle cx="1884" cy="538" r="36" fill="#7DC08B"/><circle cx="1942" cy="538" r="36" fill="#7DC08B"/>
|
||||
<path d="M0 760 C 380 660 700 740 1000 700 C 1340 650 1620 740 1920 680 L1920 1080 L0 1080 Z" fill="#5FAE6C"/>
|
||||
<rect x="32" y="692" width="16" height="52" fill="#6B4A2F"/><circle cx="40" cy="631" r="70" fill="#3F9558"/><circle cx="-1" cy="662" r="52" fill="#3F9558"/><circle cx="81" cy="662" r="52" fill="#3F9558"/>
|
||||
<rect x="161" y="733" width="15" height="46" fill="#6B4A2F"/><circle cx="168" cy="678" r="62" fill="#3F9558"/><circle cx="131" cy="706" r="46" fill="#3F9558"/><circle cx="205" cy="706" r="46" fill="#3F9558"/>
|
||||
<rect x="358" y="732" width="16" height="51" fill="#6B4A2F"/><circle cx="366" cy="671" r="69" fill="#3F9558"/><circle cx="325" cy="701" r="51" fill="#3F9558"/><circle cx="407" cy="701" r="51" fill="#3F9558"/>
|
||||
<rect x="524" y="742" width="15" height="48" fill="#6B4A2F"/><circle cx="532" cy="684" r="65" fill="#3F9558"/><circle cx="494" cy="713" r="48" fill="#3F9558"/><circle cx="570" cy="713" r="48" fill="#3F9558"/>
|
||||
<rect x="695" y="720" width="18" height="57" fill="#6B4A2F"/><circle cx="704" cy="651" r="78" fill="#3F9558"/><circle cx="658" cy="685" r="57" fill="#3F9558"/><circle cx="750" cy="685" r="57" fill="#3F9558"/>
|
||||
<rect x="866" y="716" width="15" height="47" fill="#6B4A2F"/><circle cx="874" cy="659" r="64" fill="#3F9558"/><circle cx="836" cy="687" r="47" fill="#3F9558"/><circle cx="912" cy="687" r="47" fill="#3F9558"/>
|
||||
<rect x="1023" y="745" width="14" height="45" fill="#6B4A2F"/><circle cx="1030" cy="690" r="62" fill="#3F9558"/><circle cx="994" cy="718" r="45" fill="#3F9558"/><circle cx="1066" cy="718" r="45" fill="#3F9558"/>
|
||||
<rect x="1222" y="743" width="15" height="46" fill="#6B4A2F"/><circle cx="1229" cy="687" r="63" fill="#3F9558"/><circle cx="1192" cy="715" r="46" fill="#3F9558"/><circle cx="1266" cy="715" r="46" fill="#3F9558"/>
|
||||
<rect x="1352" y="729" width="15" height="47" fill="#6B4A2F"/><circle cx="1360" cy="672" r="64" fill="#3F9558"/><circle cx="1322" cy="700" r="47" fill="#3F9558"/><circle cx="1398" cy="700" r="47" fill="#3F9558"/>
|
||||
<rect x="1549" y="714" width="18" height="56" fill="#6B4A2F"/><circle cx="1558" cy="647" r="77" fill="#3F9558"/><circle cx="1513" cy="681" r="56" fill="#3F9558"/><circle cx="1603" cy="681" r="56" fill="#3F9558"/>
|
||||
<rect x="1708" y="736" width="16" height="50" fill="#6B4A2F"/><circle cx="1716" cy="677" r="67" fill="#3F9558"/><circle cx="1676" cy="707" r="50" fill="#3F9558"/><circle cx="1756" cy="707" r="50" fill="#3F9558"/>
|
||||
<rect x="1876" y="734" width="14" height="44" fill="#6B4A2F"/><circle cx="1883" cy="682" r="59" fill="#3F9558"/><circle cx="1848" cy="708" r="44" fill="#3F9558"/><circle cx="1918" cy="708" r="44" fill="#3F9558"/>
|
||||
<path d="M0 900 C 400 840 800 920 1200 880 C 1500 850 1750 900 1920 870 L1920 1080 L0 1080 Z" fill="#3C8A4F"/>
|
||||
<rect x="46" y="920" width="29" height="90" fill="#5A3E28"/><circle cx="60" cy="812" r="122" fill="#26704A"/><circle cx="-12" cy="866" r="90" fill="#26704A"/><circle cx="132" cy="866" r="90" fill="#26704A"/>
|
||||
<rect x="218" y="935" width="24" height="75" fill="#5A3E28"/><circle cx="230" cy="845" r="102" fill="#26704A"/><circle cx="170" cy="890" r="75" fill="#26704A"/><circle cx="290" cy="890" r="75" fill="#26704A"/>
|
||||
<rect x="1687" y="928" width="26" height="82" fill="#5A3E28"/><circle cx="1700" cy="828" r="112" fill="#26704A"/><circle cx="1634" cy="878" r="82" fill="#26704A"/><circle cx="1766" cy="878" r="82" fill="#26704A"/>
|
||||
<rect x="1844" y="912" width="31" height="98" fill="#5A3E28"/><circle cx="1860" cy="796" r="133" fill="#26704A"/><circle cx="1782" cy="854" r="98" fill="#26704A"/><circle cx="1938" cy="854" r="98" fill="#26704A"/>
|
||||
<path d="M0 1000 C 500 960 1000 1010 1920 970 L1920 1080 L0 1080 Z" fill="#2E7D45"/>
|
||||
<circle cx="241" cy="1025" r="5" fill="#FFB4E6"/>
|
||||
<circle cx="1550" cy="1003" r="7" fill="#FFD166"/>
|
||||
<circle cx="863" cy="965" r="8" fill="#FF8FA3"/>
|
||||
<circle cx="1173" cy="1061" r="6" fill="#FFFFFF"/>
|
||||
<circle cx="1423" cy="1004" r="8" fill="#FFB4E6"/>
|
||||
<circle cx="1632" cy="1018" r="4" fill="#FF8FA3"/>
|
||||
<circle cx="552" cy="1020" r="4" fill="#FF8FA3"/>
|
||||
<circle cx="1497" cy="1049" r="8" fill="#FFFFFF"/>
|
||||
<circle cx="1395" cy="1065" r="6" fill="#FFB4E6"/>
|
||||
<circle cx="1467" cy="1009" r="4" fill="#FFFFFF"/>
|
||||
<circle cx="945" cy="1005" r="8" fill="#FFD166"/>
|
||||
<circle cx="239" cy="1023" r="5" fill="#FF8FA3"/>
|
||||
<circle cx="1573" cy="996" r="5" fill="#FFD166"/>
|
||||
<circle cx="814" cy="1010" r="4" fill="#FFB4E6"/>
|
||||
<circle cx="340" cy="1017" r="8" fill="#FFB4E6"/>
|
||||
<circle cx="569" cy="977" r="8" fill="#FFB4E6"/>
|
||||
<circle cx="570" cy="1050" r="6" fill="#FFB4E6"/>
|
||||
<circle cx="1398" cy="1008" r="5" fill="#FFD166"/>
|
||||
<circle cx="169" cy="982" r="5" fill="#FFD166"/>
|
||||
<circle cx="1348" cy="989" r="7" fill="#FF8FA3"/>
|
||||
<circle cx="1702" cy="1035" r="6" fill="#FFD166"/>
|
||||
<circle cx="577" cy="960" r="7" fill="#FFD166"/>
|
||||
<circle cx="1094" cy="1007" r="5" fill="#FFFFFF"/>
|
||||
<circle cx="1414" cy="1069" r="7" fill="#FF8FA3"/>
|
||||
<circle cx="1842" cy="1059" r="7" fill="#FFB4E6"/>
|
||||
<circle cx="817" cy="1010" r="7" fill="#FF8FA3"/>
|
||||
<circle cx="1299" cy="1011" r="5" fill="#FF8FA3"/>
|
||||
<circle cx="137" cy="986" r="5" fill="#FFB4E6"/>
|
||||
<circle cx="225" cy="1003" r="4" fill="#FF8FA3"/>
|
||||
<circle cx="0" cy="1032" r="8" fill="#FFD166"/>
|
||||
<circle cx="207" cy="1006" r="4" fill="#FF8FA3"/>
|
||||
<circle cx="1790" cy="986" r="5" fill="#FFB4E6"/>
|
||||
<circle cx="1299" cy="992" r="8" fill="#FFFFFF"/>
|
||||
<circle cx="745" cy="1020" r="4" fill="#FF8FA3"/>
|
||||
<circle cx="1738" cy="1022" r="7" fill="#FFB4E6"/>
|
||||
<circle cx="990" cy="999" r="5" fill="#FF8FA3"/>
|
||||
<circle cx="209" cy="1055" r="6" fill="#FFFFFF"/>
|
||||
<circle cx="980" cy="1066" r="8" fill="#FFD166"/>
|
||||
<circle cx="47" cy="986" r="5" fill="#FFFFFF"/>
|
||||
<circle cx="1413" cy="1029" r="8" fill="#FF8FA3"/>
|
||||
<circle cx="610" cy="1042" r="6" fill="#FF8FA3"/>
|
||||
<circle cx="1061" cy="1006" r="6" fill="#FFD166"/>
|
||||
<circle cx="1580" cy="988" r="5" fill="#FFFFFF"/>
|
||||
<circle cx="1255" cy="1063" r="5" fill="#FFD166"/>
|
||||
<circle cx="1675" cy="1011" r="5" fill="#FFD166"/>
|
||||
<circle cx="1060" cy="1023" r="4" fill="#FFFFFF"/>
|
||||
<circle cx="57" cy="1061" r="7" fill="#FFFFFF"/>
|
||||
<circle cx="530" cy="984" r="7" fill="#FFFFFF"/>
|
||||
<circle cx="1655" cy="1052" r="6" fill="#FFFFFF"/>
|
||||
<circle cx="164" cy="988" r="5" fill="#FF8FA3"/>
|
||||
<circle cx="962" cy="985" r="5" fill="#FFFFFF"/>
|
||||
<circle cx="988" cy="1039" r="7" fill="#FF8FA3"/>
|
||||
<circle cx="1862" cy="1043" r="4" fill="#FFFFFF"/>
|
||||
<circle cx="1709" cy="1044" r="7" fill="#FF8FA3"/>
|
||||
<circle cx="1602" cy="1051" r="7" fill="#FFD166"/>
|
||||
<circle cx="1820" cy="982" r="6" fill="#FFB4E6"/>
|
||||
<circle cx="177" cy="1062" r="7" fill="#FFB4E6"/>
|
||||
<circle cx="822" cy="1055" r="5" fill="#FF8FA3"/>
|
||||
<circle cx="348" cy="976" r="5" fill="#FF8FA3"/>
|
||||
<circle cx="1209" cy="1019" r="8" fill="#FFD166"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bdho8w07lqr4h"
|
||||
path="res://.godot/imported/forest_backdrop.svg-759c497caa0fa1755bebe33bd64b97e2.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environments/forest_backdrop.svg"
|
||||
dest_files=["res://.godot/imported/forest_backdrop.svg-759c497caa0fa1755bebe33bd64b97e2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,130 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1920" height="1080" viewBox="0 0 1920 1080">
|
||||
<defs><linearGradient id="sky" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#2E3C73"/><stop offset="0.55" stop-color="#6F7FC2"/><stop offset="1" stop-color="#F6C9A8"/></linearGradient><linearGradient id="water" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#4A7FB5"/><stop offset="1" stop-color="#1F4E79"/></linearGradient><radialGradient id="moonhalo"><stop offset="0" stop-color="#FFF8D6" stop-opacity="0.8"/><stop offset="1" stop-color="#FFF8D6" stop-opacity="0"/></radialGradient></defs>
|
||||
<rect width="1920" height="1080" fill="url(#sky)"/>
|
||||
<circle cx="1480" cy="200" r="220" fill="url(#moonhalo)"/>
|
||||
<circle cx="1480" cy="200" r="78" fill="#FFF8D6"/>
|
||||
<circle cx="926" cy="286" r="3" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="925" cy="260" r="4" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="388" cy="94" r="4" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="974" cy="322" r="4" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="1624" cy="95" r="2" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="914" cy="155" r="2" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="185" cy="275" r="4" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="1299" cy="21" r="4" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="811" cy="231" r="4" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="1513" cy="315" r="4" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="322" cy="319" r="2" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="1703" cy="270" r="2" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="121" cy="18" r="2" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="1801" cy="123" r="4" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="61" cy="398" r="3" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="668" cy="225" r="4" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="1725" cy="100" r="4" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="478" cy="327" r="3" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="1023" cy="2" r="4" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="174" cy="234" r="4" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="569" cy="208" r="4" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="1908" cy="42" r="4" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="520" cy="161" r="2" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="1050" cy="147" r="2" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="143" cy="288" r="2" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="820" cy="55" r="3" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="791" cy="34" r="2" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="1735" cy="350" r="2" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="437" cy="107" r="2" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="962" cy="192" r="4" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="813" cy="214" r="2" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="1159" cy="322" r="2" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="1594" cy="345" r="3" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="689" cy="44" r="3" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="681" cy="7" r="3" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="1552" cy="60" r="2" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="504" cy="361" r="2" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="22" cy="30" r="3" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="1632" cy="249" r="2" fill="#FFFFFF" opacity="0.8"/>
|
||||
<circle cx="1396" cy="286" r="2" fill="#FFFFFF" opacity="0.8"/>
|
||||
<path d="M0 560 C 400 500 900 560 1300 520 C 1600 490 1800 540 1920 520 L1920 1080 L0 1080 Z" fill="#3E6B74"/>
|
||||
<rect y="600" width="1920" height="480" fill="url(#water)"/>
|
||||
<path d="M0 640 Q 240 630 480 640 T 960 640 T 1440 640 T 1920 640" stroke="#9CC6E8" stroke-width="3" fill="none" opacity="0.35"/>
|
||||
<path d="M0 686 Q 240 676 480 686 T 960 686 T 1440 686 T 1920 686" stroke="#9CC6E8" stroke-width="3" fill="none" opacity="0.35"/>
|
||||
<path d="M0 732 Q 240 722 480 732 T 960 732 T 1440 732 T 1920 732" stroke="#9CC6E8" stroke-width="3" fill="none" opacity="0.35"/>
|
||||
<path d="M0 778 Q 240 768 480 778 T 960 778 T 1440 778 T 1920 778" stroke="#9CC6E8" stroke-width="3" fill="none" opacity="0.35"/>
|
||||
<path d="M0 824 Q 240 814 480 824 T 960 824 T 1440 824 T 1920 824" stroke="#9CC6E8" stroke-width="3" fill="none" opacity="0.35"/>
|
||||
<path d="M0 870 Q 240 860 480 870 T 960 870 T 1440 870 T 1920 870" stroke="#9CC6E8" stroke-width="3" fill="none" opacity="0.35"/>
|
||||
<path d="M0 916 Q 240 906 480 916 T 960 916 T 1440 916 T 1920 916" stroke="#9CC6E8" stroke-width="3" fill="none" opacity="0.35"/>
|
||||
<path d="M0 962 Q 240 952 480 962 T 960 962 T 1440 962 T 1920 962" stroke="#9CC6E8" stroke-width="3" fill="none" opacity="0.35"/>
|
||||
<path d="M0 1008 Q 240 998 480 1008 T 960 1008 T 1440 1008 T 1920 1008" stroke="#9CC6E8" stroke-width="3" fill="none" opacity="0.35"/>
|
||||
<path d="M0 1054 Q 240 1044 480 1054 T 960 1054 T 1440 1054 T 1920 1054" stroke="#9CC6E8" stroke-width="3" fill="none" opacity="0.35"/>
|
||||
<ellipse cx="956" cy="960" rx="82" ry="23" fill="#4FA66A"/><ellipse cx="956" cy="956" rx="57" ry="15" fill="#68C081"/>
|
||||
<ellipse cx="1615" cy="767" rx="96" ry="27" fill="#4FA66A"/><ellipse cx="1615" cy="763" rx="67" ry="17" fill="#68C081"/>
|
||||
<ellipse cx="278" cy="902" rx="96" ry="27" fill="#4FA66A"/><ellipse cx="278" cy="898" rx="67" ry="17" fill="#68C081"/>
|
||||
<ellipse cx="40" cy="838" rx="107" ry="30" fill="#4FA66A"/><ellipse cx="40" cy="834" rx="75" ry="19" fill="#68C081"/>
|
||||
<circle cx="50" cy="824" r="12" fill="#FF9EC4"/><circle cx="50" cy="824" r="5" fill="#FFE08A"/>
|
||||
<ellipse cx="1852" cy="710" rx="83" ry="23" fill="#4FA66A"/><ellipse cx="1852" cy="706" rx="58" ry="15" fill="#68C081"/>
|
||||
<circle cx="1862" cy="696" r="12" fill="#FF9EC4"/><circle cx="1862" cy="696" r="5" fill="#FFE08A"/>
|
||||
<ellipse cx="1789" cy="1008" rx="111" ry="31" fill="#4FA66A"/><ellipse cx="1789" cy="1004" rx="78" ry="20" fill="#68C081"/>
|
||||
<ellipse cx="126" cy="774" rx="83" ry="23" fill="#4FA66A"/><ellipse cx="126" cy="770" rx="58" ry="15" fill="#68C081"/>
|
||||
<circle cx="136" cy="760" r="12" fill="#FF9EC4"/><circle cx="136" cy="760" r="5" fill="#FFE08A"/>
|
||||
<ellipse cx="59" cy="1012" rx="91" ry="25" fill="#4FA66A"/><ellipse cx="59" cy="1008" rx="64" ry="16" fill="#68C081"/>
|
||||
<ellipse cx="830" cy="737" rx="74" ry="21" fill="#4FA66A"/><ellipse cx="830" cy="733" rx="52" ry="13" fill="#68C081"/>
|
||||
<circle cx="840" cy="723" r="12" fill="#FF9EC4"/><circle cx="840" cy="723" r="5" fill="#FFE08A"/>
|
||||
<ellipse cx="1233" cy="1025" rx="85" ry="24" fill="#4FA66A"/><ellipse cx="1233" cy="1021" rx="59" ry="15" fill="#68C081"/>
|
||||
<circle cx="1243" cy="1011" r="12" fill="#FF9EC4"/><circle cx="1243" cy="1011" r="5" fill="#FFE08A"/>
|
||||
<ellipse cx="795" cy="890" rx="109" ry="31" fill="#4FA66A"/><ellipse cx="795" cy="886" rx="76" ry="20" fill="#68C081"/>
|
||||
<circle cx="805" cy="876" r="12" fill="#FF9EC4"/><circle cx="805" cy="876" r="5" fill="#FFE08A"/>
|
||||
<ellipse cx="1242" cy="947" rx="106" ry="30" fill="#4FA66A"/><ellipse cx="1242" cy="943" rx="74" ry="19" fill="#68C081"/>
|
||||
<circle cx="1252" cy="933" r="12" fill="#FF9EC4"/><circle cx="1252" cy="933" r="5" fill="#FFE08A"/>
|
||||
<ellipse cx="830" cy="793" rx="110" ry="31" fill="#4FA66A"/><ellipse cx="830" cy="789" rx="77" ry="20" fill="#68C081"/>
|
||||
<circle cx="840" cy="779" r="12" fill="#FF9EC4"/><circle cx="840" cy="779" r="5" fill="#FFE08A"/>
|
||||
<ellipse cx="507" cy="1012" rx="85" ry="24" fill="#4FA66A"/><ellipse cx="507" cy="1008" rx="59" ry="15" fill="#68C081"/>
|
||||
<path d="M20 1080 C 37 950 60 872 35 820" stroke="#2F6B45" stroke-width="9" fill="none" stroke-linecap="round"/><ellipse cx="16" cy="820" rx="10" ry="30" fill="#7A5230"/>
|
||||
<path d="M56 1080 C 82 920 77 825 74 761" stroke="#2F6B45" stroke-width="9" fill="none" stroke-linecap="round"/><ellipse cx="48" cy="761" rx="10" ry="30" fill="#7A5230"/>
|
||||
<path d="M92 1080 C 65 916 65 818 78 753" stroke="#2F6B45" stroke-width="9" fill="none" stroke-linecap="round"/><ellipse cx="83" cy="753" rx="10" ry="30" fill="#7A5230"/>
|
||||
<path d="M128 1080 C 114 904 118 799 133 729" stroke="#2F6B45" stroke-width="9" fill="none" stroke-linecap="round"/><ellipse cx="126" cy="729" rx="10" ry="30" fill="#7A5230"/>
|
||||
<path d="M164 1080 C 186 916 200 818 175 753" stroke="#2F6B45" stroke-width="9" fill="none" stroke-linecap="round"/><ellipse cx="163" cy="753" rx="10" ry="30" fill="#7A5230"/>
|
||||
<path d="M200 1080 C 181 904 168 798 188 727" stroke="#2F6B45" stroke-width="9" fill="none" stroke-linecap="round"/><ellipse cx="197" cy="727" rx="10" ry="30" fill="#7A5230"/>
|
||||
<path d="M236 1080 C 241 909 274 806 255 738" stroke="#2F6B45" stroke-width="9" fill="none" stroke-linecap="round"/><ellipse cx="228" cy="738" rx="10" ry="30" fill="#7A5230"/>
|
||||
<path d="M272 1080 C 255 934 258 847 253 789" stroke="#2F6B45" stroke-width="9" fill="none" stroke-linecap="round"/><ellipse cx="264" cy="789" rx="10" ry="30" fill="#7A5230"/>
|
||||
<path d="M308 1080 C 304 936 325 850 303 792" stroke="#2F6B45" stroke-width="9" fill="none" stroke-linecap="round"/><ellipse cx="299" cy="792" rx="10" ry="30" fill="#7A5230"/>
|
||||
<path d="M344 1080 C 325 964 340 895 347 849" stroke="#2F6B45" stroke-width="9" fill="none" stroke-linecap="round"/><ellipse cx="350" cy="849" rx="10" ry="30" fill="#7A5230"/>
|
||||
<path d="M380 1080 C 358 897 351 787 383 714" stroke="#2F6B45" stroke-width="9" fill="none" stroke-linecap="round"/><ellipse cx="374" cy="714" rx="10" ry="30" fill="#7A5230"/>
|
||||
<path d="M416 1080 C 407 912 442 812 433 745" stroke="#2F6B45" stroke-width="9" fill="none" stroke-linecap="round"/><ellipse cx="410" cy="745" rx="10" ry="30" fill="#7A5230"/>
|
||||
<path d="M1500 1080 C 1472 894 1462 783 1510 709" stroke="#2F6B45" stroke-width="9" fill="none" stroke-linecap="round"/><ellipse cx="1501" cy="709" rx="10" ry="30" fill="#7A5230"/>
|
||||
<path d="M1536 1080 C 1508 930 1498 841 1554 781" stroke="#2F6B45" stroke-width="9" fill="none" stroke-linecap="round"/><ellipse cx="1546" cy="781" rx="10" ry="30" fill="#7A5230"/>
|
||||
<path d="M1572 1080 C 1572 960 1540 889 1571 841" stroke="#2F6B45" stroke-width="9" fill="none" stroke-linecap="round"/><ellipse cx="1572" cy="841" rx="10" ry="30" fill="#7A5230"/>
|
||||
<path d="M1608 1080 C 1582 953 1577 877 1616 826" stroke="#2F6B45" stroke-width="9" fill="none" stroke-linecap="round"/><ellipse cx="1615" cy="826" rx="10" ry="30" fill="#7A5230"/>
|
||||
<path d="M1644 1080 C 1661 923 1609 829 1632 766" stroke="#2F6B45" stroke-width="9" fill="none" stroke-linecap="round"/><ellipse cx="1644" cy="766" rx="10" ry="30" fill="#7A5230"/>
|
||||
<path d="M1680 1080 C 1655 925 1700 832 1664 770" stroke="#2F6B45" stroke-width="9" fill="none" stroke-linecap="round"/><ellipse cx="1683" cy="770" rx="10" ry="30" fill="#7A5230"/>
|
||||
<path d="M1716 1080 C 1741 966 1739 898 1732 853" stroke="#2F6B45" stroke-width="9" fill="none" stroke-linecap="round"/><ellipse cx="1706" cy="853" rx="10" ry="30" fill="#7A5230"/>
|
||||
<path d="M1752 1080 C 1764 890 1760 777 1756 701" stroke="#2F6B45" stroke-width="9" fill="none" stroke-linecap="round"/><ellipse cx="1760" cy="701" rx="10" ry="30" fill="#7A5230"/>
|
||||
<path d="M1788 1080 C 1796 968 1757 902 1773 857" stroke="#2F6B45" stroke-width="9" fill="none" stroke-linecap="round"/><ellipse cx="1780" cy="857" rx="10" ry="30" fill="#7A5230"/>
|
||||
<path d="M1824 1080 C 1810 956 1837 881 1825 831" stroke="#2F6B45" stroke-width="9" fill="none" stroke-linecap="round"/><ellipse cx="1826" cy="831" rx="10" ry="30" fill="#7A5230"/>
|
||||
<path d="M1860 1080 C 1859 896 1876 786 1869 712" stroke="#2F6B45" stroke-width="9" fill="none" stroke-linecap="round"/><ellipse cx="1867" cy="712" rx="10" ry="30" fill="#7A5230"/>
|
||||
<path d="M1896 1080 C 1899 960 1921 887 1877 839" stroke="#2F6B45" stroke-width="9" fill="none" stroke-linecap="round"/><ellipse cx="1895" cy="839" rx="10" ry="30" fill="#7A5230"/>
|
||||
<circle cx="1231" cy="544" r="4" fill="#FFF28A" opacity="0.85"/>
|
||||
<circle cx="45" cy="617" r="5" fill="#FFF28A" opacity="0.85"/>
|
||||
<circle cx="231" cy="754" r="5" fill="#FFF28A" opacity="0.85"/>
|
||||
<circle cx="1351" cy="971" r="4" fill="#FFF28A" opacity="0.85"/>
|
||||
<circle cx="523" cy="958" r="3" fill="#FFF28A" opacity="0.85"/>
|
||||
<circle cx="753" cy="654" r="3" fill="#FFF28A" opacity="0.85"/>
|
||||
<circle cx="1388" cy="813" r="3" fill="#FFF28A" opacity="0.85"/>
|
||||
<circle cx="1061" cy="586" r="4" fill="#FFF28A" opacity="0.85"/>
|
||||
<circle cx="1351" cy="976" r="4" fill="#FFF28A" opacity="0.85"/>
|
||||
<circle cx="1020" cy="956" r="3" fill="#FFF28A" opacity="0.85"/>
|
||||
<circle cx="669" cy="707" r="5" fill="#FFF28A" opacity="0.85"/>
|
||||
<circle cx="513" cy="601" r="5" fill="#FFF28A" opacity="0.85"/>
|
||||
<circle cx="882" cy="911" r="3" fill="#FFF28A" opacity="0.85"/>
|
||||
<circle cx="1802" cy="609" r="4" fill="#FFF28A" opacity="0.85"/>
|
||||
<circle cx="449" cy="798" r="4" fill="#FFF28A" opacity="0.85"/>
|
||||
<circle cx="429" cy="569" r="3" fill="#FFF28A" opacity="0.85"/>
|
||||
<circle cx="1016" cy="679" r="3" fill="#FFF28A" opacity="0.85"/>
|
||||
<circle cx="1456" cy="532" r="4" fill="#FFF28A" opacity="0.85"/>
|
||||
<circle cx="1683" cy="586" r="3" fill="#FFF28A" opacity="0.85"/>
|
||||
<circle cx="922" cy="741" r="4" fill="#FFF28A" opacity="0.85"/>
|
||||
<circle cx="1895" cy="609" r="4" fill="#FFF28A" opacity="0.85"/>
|
||||
<circle cx="783" cy="820" r="5" fill="#FFF28A" opacity="0.85"/>
|
||||
<circle cx="1011" cy="844" r="4" fill="#FFF28A" opacity="0.85"/>
|
||||
<circle cx="1466" cy="929" r="5" fill="#FFF28A" opacity="0.85"/>
|
||||
<circle cx="926" cy="664" r="3" fill="#FFF28A" opacity="0.85"/>
|
||||
<circle cx="1697" cy="516" r="4" fill="#FFF28A" opacity="0.85"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 13 KiB |
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c3d2gu2fyacvu"
|
||||
path="res://.godot/imported/marsh_backdrop.svg-c7f73bcacccc54a2e0f9099485e3bbba.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environments/marsh_backdrop.svg"
|
||||
dest_files=["res://.godot/imported/marsh_backdrop.svg-c7f73bcacccc54a2e0f9099485e3bbba.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,36 @@
|
||||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://bpcx8adosnev6"
|
||||
path="res://.godot/imported/AtkinsonHyperlegible-Bold.ttf-88b8e4bce39666c760f25dd9a57aebce.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/fonts/AtkinsonHyperlegible-Bold.ttf"
|
||||
dest_files=["res://.godot/imported/AtkinsonHyperlegible-Bold.ttf-88b8e4bce39666c760f25dd9a57aebce.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
modulate_color_glyphs=false
|
||||
hinting=1
|
||||
subpixel_positioning=4
|
||||
keep_rounding_remainders=true
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
||||
@@ -0,0 +1,36 @@
|
||||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://bjb7qwgg76e8t"
|
||||
path="res://.godot/imported/AtkinsonHyperlegible-Regular.ttf-b1b81e810f770645a511deee33c11e03.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/fonts/AtkinsonHyperlegible-Regular.ttf"
|
||||
dest_files=["res://.godot/imported/AtkinsonHyperlegible-Regular.ttf-b1b81e810f770645a511deee33c11e03.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
modulate_color_glyphs=false
|
||||
hinting=1
|
||||
subpixel_positioning=4
|
||||
keep_rounding_remainders=true
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
||||
@@ -0,0 +1,92 @@
|
||||
Copyright 2020 Braille Institute of America, Inc.
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128">
|
||||
<circle cx="64" cy="64" r="60" fill="#2F8040"/>
|
||||
<circle cx="64" cy="64" r="60" fill="none" stroke="#000" stroke-opacity="0.12" stroke-width="4"/>
|
||||
<path d="M32 66 L54 88 L96 40" fill="none" stroke="#FFF" stroke-width="14" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 365 B |
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://qrmkbgkfqrpp"
|
||||
path="res://.godot/imported/icon_correct.svg-fe6bcc61481d18487d38d1ee8d1f1713.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/interface/icon_correct.svg"
|
||||
dest_files=["res://.godot/imported/icon_correct.svg-fe6bcc61481d18487d38d1ee8d1f1713.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128">
|
||||
<circle cx="64" cy="64" r="60" fill="#8E6CD8"/>
|
||||
<circle cx="64" cy="64" r="60" fill="none" stroke="#000" stroke-opacity="0.12" stroke-width="4"/>
|
||||
<g><path d="M26 54 H44 L66 34 V94 L44 74 H26 Z" fill="#FFF"/><g fill="none" stroke="#FFF" stroke-width="7" stroke-linecap="round"><path d="M80 50 Q92 64 80 78"/><path d="M92 38 Q112 64 92 90"/></g></g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 443 B |
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://51fub21m6m3u"
|
||||
path="res://.godot/imported/icon_dictation.svg-2f1dc15bf770641095d391adf607b065.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/interface/icon_dictation.svg"
|
||||
dest_files=["res://.godot/imported/icon_dictation.svg-2f1dc15bf770641095d391adf607b065.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128">
|
||||
<circle cx="64" cy="64" r="60" fill="#9AA3B5"/>
|
||||
<circle cx="64" cy="64" r="60" fill="none" stroke="#000" stroke-opacity="0.12" stroke-width="4"/>
|
||||
<g><rect x="34" y="58" width="60" height="46" rx="10" fill="#FFF"/><path d="M46 58 V46 a18 18 0 0 1 36 0 V58" fill="none" stroke="#FFF" stroke-width="9"/><circle cx="64" cy="80" r="7" fill="#9AA3B5"/></g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 446 B |
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://t3a58bf0b1om"
|
||||
path="res://.godot/imported/icon_locked.svg-4ecadd3abe9f5993cfa09be34ca4c5b6.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/interface/icon_locked.svg"
|
||||
dest_files=["res://.godot/imported/icon_locked.svg-4ecadd3abe9f5993cfa09be34ca4c5b6.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128">
|
||||
<circle cx="64" cy="64" r="60" fill="#4D96FF"/>
|
||||
<circle cx="64" cy="64" r="60" fill="none" stroke="#000" stroke-opacity="0.12" stroke-width="4"/>
|
||||
<g fill="none" stroke="#FFF" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"><path d="M30 46 l8 8 l14 -16"/><path d="M62 46 h38"/><rect x="30" y="72" width="22" height="22" rx="5"/><path d="M62 83 h38"/></g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 465 B |
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://evabcqff8aym"
|
||||
path="res://.godot/imported/icon_multiple_choice.svg-f1deff20f673f35ff192065f87228616.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/interface/icon_multiple_choice.svg"
|
||||
dest_files=["res://.godot/imported/icon_multiple_choice.svg-f1deff20f673f35ff192065f87228616.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128">
|
||||
<circle cx="64" cy="64" r="60" fill="#F28C28"/>
|
||||
<circle cx="64" cy="64" r="60" fill="none" stroke="#000" stroke-opacity="0.12" stroke-width="4"/>
|
||||
<g><path d="M30 92 L82 40 L96 54 L44 106 L28 108 Z" fill="#FFF"/><path d="M86 36 L96 26 L110 40 L100 50 Z" fill="#FFE08A"/><path d="M24 114 H104" stroke="#FFF" stroke-width="7" stroke-linecap="round"/></g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 447 B |
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cxba7g3fgfls4"
|
||||
path="res://.godot/imported/icon_sentence_correction.svg-5ec7eb26565706514d6eb77c1829b1eb.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/interface/icon_sentence_correction.svg"
|
||||
dest_files=["res://.godot/imported/icon_sentence_correction.svg-5ec7eb26565706514d6eb77c1829b1eb.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128">
|
||||
<circle cx="64" cy="64" r="60" fill="#F28C28"/>
|
||||
<circle cx="64" cy="64" r="60" fill="none" stroke="#000" stroke-opacity="0.12" stroke-width="4"/>
|
||||
<path d="M50 48 a16 16 0 1 1 22 14 q-8 4 -8 14" fill="none" stroke="#FFF" stroke-width="12" stroke-linecap="round"/><circle cx="64" cy="98" r="8" fill="#FFF"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 401 B |
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dgxhl6rvvku8f"
|
||||
path="res://.godot/imported/icon_try_again.svg-6c536e074f8e778a026b608a4e19c11e.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/interface/icon_try_again.svg"
|
||||
dest_files=["res://.godot/imported/icon_try_again.svg-6c536e074f8e778a026b608a4e19c11e.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="160" height="160" viewBox="0 0 160 160">
|
||||
<circle cx="80" cy="80" r="74" fill="#FFF1C9"/>
|
||||
<circle cx="80" cy="80" r="74" fill="none" stroke="#E9CF8C" stroke-width="5"/>
|
||||
<g><path d="M34 44 L62 36 L98 46 L126 38 V114 L98 122 L62 112 L34 120 Z" fill="#F7E3B5" stroke="#B88E4A" stroke-width="5" stroke-linejoin="round"/><path d="M62 36 V112 M98 46 V122" stroke="#B88E4A" stroke-width="3"/><path d="M44 100 Q60 70 78 84 T112 60" fill="none" stroke="#E4572E" stroke-width="4" stroke-dasharray="2 8" stroke-linecap="round"/><path d="M106 54 l12 12 M118 54 l-12 12" stroke="#E4572E" stroke-width="6" stroke-linecap="round"/></g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 674 B |
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cmqns71qq7t6r"
|
||||
path="res://.godot/imported/item_carte_ancienne.svg-207f863c1e1fa43cbb234f96b29ce806.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/interface/items/item_carte_ancienne.svg"
|
||||
dest_files=["res://.godot/imported/item_carte_ancienne.svg-207f863c1e1fa43cbb234f96b29ce806.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="160" height="160" viewBox="0 0 160 160">
|
||||
<circle cx="80" cy="80" r="74" fill="#FFF1C9"/>
|
||||
<circle cx="80" cy="80" r="74" fill="none" stroke="#E9CF8C" stroke-width="5"/>
|
||||
<g><circle cx="58" cy="62" r="24" fill="#D5DBE5" stroke="#8D98AD" stroke-width="6"/><circle cx="58" cy="62" r="9" fill="#FFF1C9"/><rect x="74" y="74" width="62" height="14" rx="6" transform="rotate(35 74 74)" fill="#D5DBE5" stroke="#8D98AD" stroke-width="5"/><path d="M104 104 l10 -10 M114 114 l10 -10" stroke="#8D98AD" stroke-width="7" stroke-linecap="round"/></g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 588 B |
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b3i1vdgp734hf"
|
||||
path="res://.godot/imported/item_cle_argentee.svg-7b2fa6b82e4ad27ec9adf3c465385bb3.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/interface/items/item_cle_argentee.svg"
|
||||
dest_files=["res://.godot/imported/item_cle_argentee.svg-7b2fa6b82e4ad27ec9adf3c465385bb3.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="160" height="160" viewBox="0 0 160 160">
|
||||
<circle cx="80" cy="80" r="74" fill="#FFF1C9"/>
|
||||
<circle cx="80" cy="80" r="74" fill="none" stroke="#E9CF8C" stroke-width="5"/>
|
||||
<g><ellipse cx="36" cy="86" rx="16" ry="8" transform="rotate(270 36 86)" fill="#3FA34D"/><ellipse cx="39" cy="76" rx="16" ry="8" transform="rotate(290 39 76)" fill="#5CC26A"/><ellipse cx="46" cy="67" rx="16" ry="8" transform="rotate(310 46 67)" fill="#3FA34D"/><ellipse cx="58" cy="60" rx="16" ry="8" transform="rotate(330 58 60)" fill="#5CC26A"/><ellipse cx="72" cy="56" rx="16" ry="8" transform="rotate(350 72 56)" fill="#3FA34D"/><ellipse cx="88" cy="56" rx="16" ry="8" transform="rotate(370 88 56)" fill="#5CC26A"/><ellipse cx="102" cy="60" rx="16" ry="8" transform="rotate(390 102 60)" fill="#3FA34D"/><ellipse cx="114" cy="67" rx="16" ry="8" transform="rotate(410 114 67)" fill="#5CC26A"/><ellipse cx="121" cy="76" rx="16" ry="8" transform="rotate(430 121 76)" fill="#3FA34D"/><ellipse cx="124" cy="86" rx="16" ry="8" transform="rotate(450 124 86)" fill="#5CC26A"/><circle cx="48" cy="92" r="6" fill="#FF8FA3"/><circle cx="112" cy="92" r="6" fill="#FFC83D"/><circle cx="80" cy="56" r="7" fill="#FF8FA3"/></g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://blxqc6nww8i31"
|
||||
path="res://.godot/imported/item_couronne_feuilles.svg-88412268c71dd68b45cbfbd5d18901db.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/interface/items/item_couronne_feuilles.svg"
|
||||
dest_files=["res://.godot/imported/item_couronne_feuilles.svg-88412268c71dd68b45cbfbd5d18901db.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="160" height="160" viewBox="0 0 160 160">
|
||||
<circle cx="80" cy="80" r="74" fill="#FFF1C9"/>
|
||||
<circle cx="80" cy="80" r="74" fill="none" stroke="#E9CF8C" stroke-width="5"/>
|
||||
<g><path d="M80 28 L114 62 L80 130 L46 62 Z" fill="#6CB8FF" stroke="#2F7DD1" stroke-width="5" stroke-linejoin="round"/><path d="M46 62 H114 M80 28 L66 62 L80 130 L94 62 Z" fill="none" stroke="#2F7DD1" stroke-width="4" stroke-linejoin="round"/><path d="M62 50 l6 -8" stroke="#FFF" stroke-width="5" stroke-linecap="round"/></g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 548 B |
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c41gjir31el76"
|
||||
path="res://.godot/imported/item_cristal_echo.svg-9bcfe1f35f228b0dc193cfe8fdb9e9cc.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/interface/items/item_cristal_echo.svg"
|
||||
dest_files=["res://.godot/imported/item_cristal_echo.svg-9bcfe1f35f228b0dc193cfe8fdb9e9cc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="160" height="160" viewBox="0 0 160 160">
|
||||
<circle cx="80" cy="80" r="74" fill="#FFF1C9"/>
|
||||
<circle cx="80" cy="80" r="74" fill="none" stroke="#E9CF8C" stroke-width="5"/>
|
||||
<g><path d="M80 112 V70" stroke="#3FA34D" stroke-width="7" stroke-linecap="round"/><path d="M80 84 C 60 84 46 70 44 54 C 64 54 78 66 80 84 Z" fill="#5CC26A"/><path d="M80 74 C 98 74 114 60 116 44 C 96 44 82 56 80 74 Z" fill="#3FA34D"/><ellipse cx="80" cy="118" rx="22" ry="14" fill="#7A5230"/><ellipse cx="74" cy="114" rx="8" ry="4" fill="#A47848"/><circle cx="112" cy="116" r="4" fill="#FFE08A"/><circle cx="46" cy="106" r="3" fill="#FFE08A"/></g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 671 B |
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://if3iy4his26n"
|
||||
path="res://.godot/imported/item_graine_magique.svg-5a1d4325cb4a33e8cfed8f37fdcffc2e.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/interface/items/item_graine_magique.svg"
|
||||
dest_files=["res://.godot/imported/item_graine_magique.svg-5a1d4325cb4a33e8cfed8f37fdcffc2e.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="160" height="160" viewBox="0 0 160 160">
|
||||
<circle cx="80" cy="80" r="74" fill="#FFF1C9"/>
|
||||
<circle cx="80" cy="80" r="74" fill="none" stroke="#E9CF8C" stroke-width="5"/>
|
||||
<g><path d="M80 28 V40" stroke="#6B4A2F" stroke-width="6" stroke-linecap="round"/><rect x="56" y="40" width="48" height="12" rx="5" fill="#6B4A2F"/><path d="M60 52 H100 L108 108 H52 Z" fill="#FFE9A8" stroke="#6B4A2F" stroke-width="5" stroke-linejoin="round"/><ellipse cx="80" cy="86" rx="12" ry="16" fill="#FFC83D"/><ellipse cx="80" cy="90" rx="6" ry="9" fill="#FF9F43"/><rect x="48" y="108" width="64" height="12" rx="5" fill="#6B4A2F"/></g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 665 B |
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b3dciddplnk3f"
|
||||
path="res://.godot/imported/item_lanterne_foret.svg-1c8a8cc130821e715510a92740a99b26.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/interface/items/item_lanterne_foret.svg"
|
||||
dest_files=["res://.godot/imported/item_lanterne_foret.svg-1c8a8cc130821e715510a92740a99b26.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="160" height="160" viewBox="0 0 160 160">
|
||||
<circle cx="80" cy="80" r="74" fill="#FFF1C9"/>
|
||||
<circle cx="80" cy="80" r="74" fill="none" stroke="#E9CF8C" stroke-width="5"/>
|
||||
<g><path d="M110 36 C 60 40 40 90 44 126 C 74 116 108 84 110 36 Z" fill="#FFC83D" stroke="#D98E00" stroke-width="5" stroke-linejoin="round"/><path d="M108 40 C 84 66 64 96 46 124" fill="none" stroke="#D98E00" stroke-width="5" stroke-linecap="round"/><path d="M62 100 l-14 6 M74 84 l-14 6 M88 68 l-12 4" stroke="#D98E00" stroke-width="4" stroke-linecap="round"/></g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 588 B |
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://jgnssjhtagj"
|
||||
path="res://.godot/imported/item_plume_doree.svg-74d4e5dc0a7fc3d3e0cddbe4e20a707c.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/interface/items/item_plume_doree.svg"
|
||||
dest_files=["res://.godot/imported/item_plume_doree.svg-74d4e5dc0a7fc3d3e0cddbe4e20a707c.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="160" height="160" viewBox="0 0 160 160">
|
||||
<circle cx="80" cy="80" r="74" fill="#FFF1C9"/>
|
||||
<circle cx="80" cy="80" r="74" fill="none" stroke="#E9CF8C" stroke-width="5"/>
|
||||
<g><path d="M52 40 H108 V72 a28 28 0 0 1 -56 0 Z" fill="#FFC83D" stroke="#D98E00" stroke-width="5"/><path d="M52 48 H36 q-4 22 18 26 M108 48 H124 q4 22 -18 26" fill="none" stroke="#D98E00" stroke-width="6"/><rect x="72" y="100" width="16" height="16" fill="#D98E00"/><rect x="56" y="114" width="48" height="12" rx="4" fill="#B97800"/><circle cx="74" cy="82" r="7" fill="#7A5230"/><path d="M81 82 V56 L96 62" fill="none" stroke="#7A5230" stroke-width="6" stroke-linecap="round"/></g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 705 B |
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cnkon70qvwt8b"
|
||||
path="res://.godot/imported/item_trophee_clairiere.svg-66fdb4230e9bf038b8e39b7d230a04fb.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/interface/items/item_trophee_clairiere.svg"
|
||||
dest_files=["res://.godot/imported/item_trophee_clairiere.svg-66fdb4230e9bf038b8e39b7d230a04fb.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="160" height="160" viewBox="0 0 160 160">
|
||||
<circle cx="80" cy="80" r="74" fill="#FFF1C9"/>
|
||||
<circle cx="80" cy="80" r="74" fill="none" stroke="#E9CF8C" stroke-width="5"/>
|
||||
<g><path d="M52 40 H108 V72 a28 28 0 0 1 -56 0 Z" fill="#FFC83D" stroke="#D98E00" stroke-width="5"/><path d="M52 48 H36 q-4 22 18 26 M108 48 H124 q4 22 -18 26" fill="none" stroke="#D98E00" stroke-width="6"/><rect x="72" y="100" width="16" height="16" fill="#D98E00"/><rect x="56" y="114" width="48" height="12" rx="4" fill="#B97800"/><path d="M62 82 Q80 52 98 82" fill="none" stroke="#7A5230" stroke-width="6" stroke-linecap="round"/><path d="M60 82 H100" stroke="#7A5230" stroke-width="6" stroke-linecap="round"/></g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 741 B |
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://d4s28iicgsxa"
|
||||
path="res://.godot/imported/item_trophee_pont.svg-d54bc3b9c7fe8de96e743f9589ce68f4.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/interface/items/item_trophee_pont.svg"
|
||||
dest_files=["res://.godot/imported/item_trophee_pont.svg-d54bc3b9c7fe8de96e743f9589ce68f4.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="160" height="160" viewBox="0 0 160 160">
|
||||
<circle cx="80" cy="80" r="74" fill="#FFF1C9"/>
|
||||
<circle cx="80" cy="80" r="74" fill="none" stroke="#E9CF8C" stroke-width="5"/>
|
||||
<g><path d="M52 40 H108 V72 a28 28 0 0 1 -56 0 Z" fill="#FFC83D" stroke="#D98E00" stroke-width="5"/><path d="M52 48 H36 q-4 22 18 26 M108 48 H124 q4 22 -18 26" fill="none" stroke="#D98E00" stroke-width="6"/><rect x="72" y="100" width="16" height="16" fill="#D98E00"/><rect x="56" y="114" width="48" height="12" rx="4" fill="#B97800"/><circle cx="80" cy="70" r="7" fill="#FF8FA3"/><circle cx="80" cy="58" r="5" fill="#FFF"/><circle cx="80" cy="82" r="5" fill="#FFF"/><circle cx="68" cy="70" r="5" fill="#FFF"/><circle cx="92" cy="70" r="5" fill="#FFF"/></g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 779 B |
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cyipl7ovnn3tk"
|
||||
path="res://.godot/imported/item_trophee_pre.svg-870342a1466e75042ee4ae0cca1274f3.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/interface/items/item_trophee_pre.svg"
|
||||
dest_files=["res://.godot/imported/item_trophee_pre.svg-870342a1466e75042ee4ae0cca1274f3.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128">
|
||||
<polygon points="64.0,14.0 78.1,48.6 115.4,51.3 86.8,75.4 95.7,111.7 64.0,92.0 32.3,111.7 41.2,75.4 12.6,51.3 49.9,48.6" fill="#EDE6D2" stroke="#B9AD8C" stroke-width="7" stroke-linejoin="round"/>
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 292 B |
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dcdkxabiaebx3"
|
||||
path="res://.godot/imported/star_empty.svg-6e835b3bc52db41523b0c3d2594cd977.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/interface/star_empty.svg"
|
||||
dest_files=["res://.godot/imported/star_empty.svg-6e835b3bc52db41523b0c3d2594cd977.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128">
|
||||
<polygon points="64.0,14.0 78.1,48.6 115.4,51.3 86.8,75.4 95.7,111.7 64.0,92.0 32.3,111.7 41.2,75.4 12.6,51.3 49.9,48.6" fill="#FFC83D" stroke="#D98E00" stroke-width="7" stroke-linejoin="round"/>
|
||||
<polygon points="64.0,38.0 71.6,57.5 92.5,58.7 76.4,72.0 81.6,92.3 64.0,81.0 46.4,92.3 51.6,72.0 35.5,58.7 56.4,57.5" fill="#FFE49A"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 426 B |
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bhcr4bie5exhd"
|
||||
path="res://.godot/imported/star_full.svg-f0f7cbd280c649250320aebf0658d468.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/interface/star_full.svg"
|
||||
dest_files=["res://.godot/imported/star_full.svg-f0f7cbd280c649250320aebf0658d468.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,362 @@
|
||||
[gd_resource type="Theme" load_steps=20 format=3]
|
||||
|
||||
[ext_resource type="FontFile" path="res://assets/fonts/AtkinsonHyperlegible-Regular.ttf" id="font_regular"]
|
||||
[ext_resource type="FontFile" path="res://assets/fonts/AtkinsonHyperlegible-Bold.ttf" id="font_bold"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="btn_normal"]
|
||||
bg_color = Color(0.184, 0.502, 0.251, 1)
|
||||
corner_radius_top_left = 18
|
||||
corner_radius_top_right = 18
|
||||
corner_radius_bottom_right = 18
|
||||
corner_radius_bottom_left = 18
|
||||
border_color = Color(0.122, 0.361, 0.173, 1)
|
||||
border_width_left = 0
|
||||
border_width_top = 0
|
||||
border_width_right = 0
|
||||
border_width_bottom = 6
|
||||
content_margin_left = 24
|
||||
content_margin_top = 10
|
||||
content_margin_right = 24
|
||||
content_margin_bottom = 6
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="btn_hover"]
|
||||
bg_color = Color(0.227, 0.561, 0.298, 1)
|
||||
corner_radius_top_left = 18
|
||||
corner_radius_top_right = 18
|
||||
corner_radius_bottom_right = 18
|
||||
corner_radius_bottom_left = 18
|
||||
border_color = Color(0.122, 0.361, 0.173, 1)
|
||||
border_width_left = 0
|
||||
border_width_top = 0
|
||||
border_width_right = 0
|
||||
border_width_bottom = 6
|
||||
content_margin_left = 24
|
||||
content_margin_top = 10
|
||||
content_margin_right = 24
|
||||
content_margin_bottom = 6
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="btn_pressed"]
|
||||
bg_color = Color(1, 0.784, 0.239, 1)
|
||||
corner_radius_top_left = 18
|
||||
corner_radius_top_right = 18
|
||||
corner_radius_bottom_right = 18
|
||||
corner_radius_bottom_left = 18
|
||||
border_color = Color(0.149, 0.196, 0.290, 1)
|
||||
border_width_left = 4
|
||||
border_width_top = 4
|
||||
border_width_right = 4
|
||||
border_width_bottom = 4
|
||||
content_margin_left = 24
|
||||
content_margin_top = 12
|
||||
content_margin_right = 24
|
||||
content_margin_bottom = 8
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="btn_disabled"]
|
||||
bg_color = Color(0.78, 0.8, 0.78, 1)
|
||||
corner_radius_top_left = 18
|
||||
corner_radius_top_right = 18
|
||||
corner_radius_bottom_right = 18
|
||||
corner_radius_bottom_left = 18
|
||||
border_color = Color(0.66, 0.69, 0.66, 1)
|
||||
border_width_left = 0
|
||||
border_width_top = 0
|
||||
border_width_right = 0
|
||||
border_width_bottom = 6
|
||||
content_margin_left = 24
|
||||
content_margin_top = 10
|
||||
content_margin_right = 24
|
||||
content_margin_bottom = 6
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="btn_focus"]
|
||||
bg_color = Color(0,0,0,0)
|
||||
draw_center = false
|
||||
corner_radius_top_left = 20
|
||||
corner_radius_top_right = 20
|
||||
corner_radius_bottom_right = 20
|
||||
corner_radius_bottom_left = 20
|
||||
border_color = Color(0.184, 0.490, 0.820, 1)
|
||||
border_width_left = 4
|
||||
border_width_top = 4
|
||||
border_width_right = 4
|
||||
border_width_bottom = 4
|
||||
content_margin_left = 0
|
||||
content_margin_top = 0
|
||||
content_margin_right = 0
|
||||
content_margin_bottom = 0
|
||||
expand_margin_left = 3
|
||||
expand_margin_top = 3
|
||||
expand_margin_right = 3
|
||||
expand_margin_bottom = 3
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="sec_normal"]
|
||||
bg_color = Color(0.992, 0.949, 0.816, 1)
|
||||
corner_radius_top_left = 18
|
||||
corner_radius_top_right = 18
|
||||
corner_radius_bottom_right = 18
|
||||
corner_radius_bottom_left = 18
|
||||
border_color = Color(0.898, 0.812, 0.604, 1)
|
||||
border_width_left = 2
|
||||
border_width_top = 2
|
||||
border_width_right = 2
|
||||
border_width_bottom = 6
|
||||
content_margin_left = 20
|
||||
content_margin_top = 8
|
||||
content_margin_right = 20
|
||||
content_margin_bottom = 4
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="sec_hover"]
|
||||
bg_color = Color(1, 0.98, 0.9, 1)
|
||||
corner_radius_top_left = 18
|
||||
corner_radius_top_right = 18
|
||||
corner_radius_bottom_right = 18
|
||||
corner_radius_bottom_left = 18
|
||||
border_color = Color(0.898, 0.812, 0.604, 1)
|
||||
border_width_left = 2
|
||||
border_width_top = 2
|
||||
border_width_right = 2
|
||||
border_width_bottom = 6
|
||||
content_margin_left = 20
|
||||
content_margin_top = 8
|
||||
content_margin_right = 20
|
||||
content_margin_bottom = 4
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="sec_pressed"]
|
||||
bg_color = Color(1, 0.784, 0.239, 1)
|
||||
corner_radius_top_left = 18
|
||||
corner_radius_top_right = 18
|
||||
corner_radius_bottom_right = 18
|
||||
corner_radius_bottom_left = 18
|
||||
border_color = Color(0.149, 0.196, 0.290, 1)
|
||||
border_width_left = 4
|
||||
border_width_top = 4
|
||||
border_width_right = 4
|
||||
border_width_bottom = 4
|
||||
content_margin_left = 20
|
||||
content_margin_top = 10
|
||||
content_margin_right = 20
|
||||
content_margin_bottom = 6
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="card"]
|
||||
bg_color = Color(1, 0.965, 0.878, 1)
|
||||
corner_radius_top_left = 28
|
||||
corner_radius_top_right = 28
|
||||
corner_radius_bottom_right = 28
|
||||
corner_radius_bottom_left = 28
|
||||
border_color = Color(0.898, 0.812, 0.604, 1)
|
||||
border_width_left = 4
|
||||
border_width_top = 4
|
||||
border_width_right = 4
|
||||
border_width_bottom = 4
|
||||
content_margin_left = 20
|
||||
content_margin_top = 16
|
||||
content_margin_right = 20
|
||||
content_margin_bottom = 16
|
||||
shadow_color = Color(0, 0, 0, 0.28)
|
||||
shadow_size = 14
|
||||
shadow_offset = Vector2(0, 6)
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="card_soft"]
|
||||
bg_color = Color(1, 0.965, 0.878, 1)
|
||||
corner_radius_top_left = 20
|
||||
corner_radius_top_right = 20
|
||||
corner_radius_bottom_right = 20
|
||||
corner_radius_bottom_left = 20
|
||||
border_color = Color(0.898, 0.812, 0.604, 1)
|
||||
border_width_left = 3
|
||||
border_width_top = 3
|
||||
border_width_right = 3
|
||||
border_width_bottom = 3
|
||||
content_margin_left = 14
|
||||
content_margin_top = 10
|
||||
content_margin_right = 14
|
||||
content_margin_bottom = 10
|
||||
shadow_color = Color(0, 0, 0, 0.28)
|
||||
shadow_size = 8
|
||||
shadow_offset = Vector2(0, 6)
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="marker_normal"]
|
||||
bg_color = Color(1, 0.965, 0.878, 1)
|
||||
corner_radius_top_left = 22
|
||||
corner_radius_top_right = 22
|
||||
corner_radius_bottom_right = 22
|
||||
corner_radius_bottom_left = 22
|
||||
border_color = Color(0.898, 0.812, 0.604, 1)
|
||||
border_width_left = 3
|
||||
border_width_top = 3
|
||||
border_width_right = 3
|
||||
border_width_bottom = 7
|
||||
content_margin_left = 10
|
||||
content_margin_top = 8
|
||||
content_margin_right = 10
|
||||
content_margin_bottom = 4
|
||||
shadow_color = Color(0, 0, 0, 0.28)
|
||||
shadow_size = 6
|
||||
shadow_offset = Vector2(0, 6)
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="marker_hover"]
|
||||
bg_color = Color(1, 0.99, 0.93, 1)
|
||||
corner_radius_top_left = 22
|
||||
corner_radius_top_right = 22
|
||||
corner_radius_bottom_right = 22
|
||||
corner_radius_bottom_left = 22
|
||||
border_color = Color(0.122, 0.361, 0.173, 1)
|
||||
border_width_left = 3
|
||||
border_width_top = 3
|
||||
border_width_right = 3
|
||||
border_width_bottom = 7
|
||||
content_margin_left = 10
|
||||
content_margin_top = 8
|
||||
content_margin_right = 10
|
||||
content_margin_bottom = 4
|
||||
shadow_color = Color(0, 0, 0, 0.28)
|
||||
shadow_size = 6
|
||||
shadow_offset = Vector2(0, 6)
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="marker_pressed"]
|
||||
bg_color = Color(1, 0.784, 0.239, 1)
|
||||
corner_radius_top_left = 22
|
||||
corner_radius_top_right = 22
|
||||
corner_radius_bottom_right = 22
|
||||
corner_radius_bottom_left = 22
|
||||
border_color = Color(0.149, 0.196, 0.290, 1)
|
||||
border_width_left = 4
|
||||
border_width_top = 4
|
||||
border_width_right = 4
|
||||
border_width_bottom = 4
|
||||
content_margin_left = 10
|
||||
content_margin_top = 10
|
||||
content_margin_right = 10
|
||||
content_margin_bottom = 6
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="edit_normal"]
|
||||
bg_color = Color(1, 1, 1, 1)
|
||||
corner_radius_top_left = 14
|
||||
corner_radius_top_right = 14
|
||||
corner_radius_bottom_right = 14
|
||||
corner_radius_bottom_left = 14
|
||||
border_color = Color(0.75, 0.68, 0.52, 1)
|
||||
border_width_left = 3
|
||||
border_width_top = 3
|
||||
border_width_right = 3
|
||||
border_width_bottom = 3
|
||||
content_margin_left = 16
|
||||
content_margin_top = 10
|
||||
content_margin_right = 16
|
||||
content_margin_bottom = 10
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="edit_focus"]
|
||||
bg_color = Color(1, 1, 1, 1)
|
||||
corner_radius_top_left = 14
|
||||
corner_radius_top_right = 14
|
||||
corner_radius_bottom_right = 14
|
||||
corner_radius_bottom_left = 14
|
||||
border_color = Color(0.184, 0.490, 0.820, 1)
|
||||
border_width_left = 4
|
||||
border_width_top = 4
|
||||
border_width_right = 4
|
||||
border_width_bottom = 4
|
||||
content_margin_left = 16
|
||||
content_margin_top = 10
|
||||
content_margin_right = 16
|
||||
content_margin_bottom = 10
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="window_panel"]
|
||||
bg_color = Color(1, 0.965, 0.878, 1)
|
||||
corner_radius_top_left = 24
|
||||
corner_radius_top_right = 24
|
||||
corner_radius_bottom_right = 24
|
||||
corner_radius_bottom_left = 24
|
||||
border_color = Color(0.898, 0.812, 0.604, 1)
|
||||
border_width_left = 4
|
||||
border_width_top = 4
|
||||
border_width_right = 4
|
||||
border_width_bottom = 4
|
||||
content_margin_left = 20
|
||||
content_margin_top = 16
|
||||
content_margin_right = 20
|
||||
content_margin_bottom = 16
|
||||
shadow_color = Color(0, 0, 0, 0.28)
|
||||
shadow_size = 16
|
||||
shadow_offset = Vector2(0, 6)
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="pill"]
|
||||
bg_color = Color(1, 0.784, 0.239, 0.95)
|
||||
corner_radius_top_left = 30
|
||||
corner_radius_top_right = 30
|
||||
corner_radius_bottom_right = 30
|
||||
corner_radius_bottom_left = 30
|
||||
border_color = Color(0.851, 0.557, 0, 1)
|
||||
border_width_left = 3
|
||||
border_width_top = 3
|
||||
border_width_right = 3
|
||||
border_width_bottom = 3
|
||||
content_margin_left = 16
|
||||
content_margin_top = 6
|
||||
content_margin_right = 16
|
||||
content_margin_bottom = 6
|
||||
|
||||
[resource]
|
||||
default_font = ExtResource("font_regular")
|
||||
default_font_size = 22
|
||||
Label/colors/font_color = Color(0.149, 0.196, 0.290, 1)
|
||||
Label/colors/font_shadow_color = Color(0, 0, 0, 0)
|
||||
Button/colors/font_color = Color(1, 1, 1, 1)
|
||||
Button/colors/font_hover_color = Color(1, 1, 1, 1)
|
||||
Button/colors/font_pressed_color = Color(0.149, 0.196, 0.290, 1)
|
||||
Button/colors/font_focus_color = Color(1, 1, 1, 1)
|
||||
Button/colors/font_disabled_color = Color(0.36, 0.4, 0.36, 1)
|
||||
Button/fonts/font = ExtResource("font_bold")
|
||||
Button/font_sizes/font_size = 22
|
||||
Button/styles/normal = SubResource("btn_normal")
|
||||
Button/styles/hover = SubResource("btn_hover")
|
||||
Button/styles/pressed = SubResource("btn_pressed")
|
||||
Button/styles/disabled = SubResource("btn_disabled")
|
||||
Button/styles/focus = SubResource("btn_focus")
|
||||
SecondaryButton/base_type = &"Button"
|
||||
SecondaryButton/colors/font_color = Color(0.149, 0.196, 0.290, 1)
|
||||
SecondaryButton/colors/font_hover_color = Color(0.149, 0.196, 0.290, 1)
|
||||
SecondaryButton/colors/font_focus_color = Color(0.149, 0.196, 0.290, 1)
|
||||
SecondaryButton/colors/font_pressed_color = Color(0.149, 0.196, 0.290, 1)
|
||||
SecondaryButton/styles/normal = SubResource("sec_normal")
|
||||
SecondaryButton/styles/hover = SubResource("sec_hover")
|
||||
SecondaryButton/styles/pressed = SubResource("sec_pressed")
|
||||
MarkerButton/base_type = &"Button"
|
||||
MarkerButton/colors/font_color = Color(0.149, 0.196, 0.290, 1)
|
||||
MarkerButton/colors/font_hover_color = Color(0.149, 0.196, 0.290, 1)
|
||||
MarkerButton/colors/font_focus_color = Color(0.149, 0.196, 0.290, 1)
|
||||
MarkerButton/colors/font_pressed_color = Color(0.149, 0.196, 0.290, 1)
|
||||
MarkerButton/styles/normal = SubResource("marker_normal")
|
||||
MarkerButton/styles/hover = SubResource("marker_hover")
|
||||
MarkerButton/styles/pressed = SubResource("marker_pressed")
|
||||
PanelContainer/styles/panel = SubResource("card")
|
||||
Panel/styles/panel = SubResource("card")
|
||||
SoftCard/base_type = &"PanelContainer"
|
||||
SoftCard/styles/panel = SubResource("card_soft")
|
||||
Pill/base_type = &"PanelContainer"
|
||||
Pill/styles/panel = SubResource("pill")
|
||||
LineEdit/colors/font_color = Color(0.149, 0.196, 0.290, 1)
|
||||
LineEdit/colors/font_placeholder_color = Color(0.45, 0.48, 0.56, 1)
|
||||
LineEdit/colors/caret_color = Color(0.149, 0.196, 0.290, 1)
|
||||
LineEdit/font_sizes/font_size = 24
|
||||
LineEdit/styles/normal = SubResource("edit_normal")
|
||||
LineEdit/styles/focus = SubResource("edit_focus")
|
||||
HeaderTitle/base_type = &"Label"
|
||||
HeaderTitle/colors/font_color = Color(1, 1, 1, 1)
|
||||
HeaderTitle/colors/font_outline_color = Color(0.122, 0.361, 0.173, 1)
|
||||
HeaderTitle/constants/outline_size = 10
|
||||
HeaderTitle/fonts/font = ExtResource("font_bold")
|
||||
HeaderTitle/font_sizes/font_size = 40
|
||||
CardTitle/base_type = &"Label"
|
||||
CardTitle/fonts/font = ExtResource("font_bold")
|
||||
CardTitle/font_sizes/font_size = 34
|
||||
Emphasis/base_type = &"Label"
|
||||
Emphasis/fonts/font = ExtResource("font_bold")
|
||||
Emphasis/font_sizes/font_size = 24
|
||||
Small/base_type = &"Label"
|
||||
Small/font_sizes/font_size = 17
|
||||
AcceptDialog/styles/panel = SubResource("window_panel")
|
||||
Window/styles/embedded_border = SubResource("window_panel")
|
||||
Window/colors/title_color = Color(0.149, 0.196, 0.290, 1)
|
||||
Window/fonts/title_font = ExtResource("font_bold")
|
||||
Window/font_sizes/title_font_size = 26
|
||||
Window/constants/title_height = 44
|
||||
@@ -1,3 +1,6 @@
|
||||
extends Node
|
||||
## Volume, taille du texte et autres preferences de l'enfant ou de l'adulte.
|
||||
## Logique detaillee a partir de l'etape "Scenes" (voir Ordre de construction).
|
||||
## Pour l'instant : l'interrupteur des animations, lu par Motion. L'ecran de
|
||||
## reglages qui le pilotera vient avec l'espace adulte (docs/specs/decisions.md).
|
||||
|
||||
var animations_enabled := true
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
"profile_create.cancel_button": "Retour",
|
||||
"profile_create.name_required_error": "Choisis un prénom avant de continuer.",
|
||||
"world_map.title": "La forêt des accords",
|
||||
"world_map.guide_hint": "Choisis un lieu pour commencer l'aventure !",
|
||||
"world_map.title_ce2": "Le marais des homophones",
|
||||
"world_map.review_ce1_button": "Revoir le CE1",
|
||||
"world_map.back_to_ce2_button": "Retour au CE2",
|
||||
|
||||
@@ -288,3 +288,19 @@ Ajouts à l'arborescence proposée :
|
||||
**Tests** : scoring, règles de déblocage, mise à jour de sauvegarde, migration v1→v2, validation du schéma, suivi des issues dans `exercise_host`, écran de récompense et collection de bout en bout. **Non vérifié** (sans écran) : rendu et lisibilité des trois lignes des marqueurs, mise en page de l'écran de récompense et de la collection, défilement de la liste.
|
||||
|
||||
**À faire (phases suivantes)** : habillage visuel et illustrations des objets, réglages et espace adulte (dont export/restauration des sauvegardes), son et musique.
|
||||
|
||||
## 31. Phase « Habillage visuel » et navigation (version 0.3.0)
|
||||
|
||||
**Navigation (demande utilisateur)** : bouton « Changer de profil » sur la carte (sauvegarde avant de quitter) ; bouton « Quitter la mission » dans l'hôte d'exercice avec confirmation. Quitter ne rapporte ni étoile ni objet et n'est jamais compté comme un échec ; les tentatives déjà faites restent enregistrées (vraies observations d'apprentissage) et sont sauvegardées.
|
||||
|
||||
**Vérification du rendu** : `tools/screenshot.gd` (`make screenshot`) charge une scène dans une vraie fenêtre et enregistre un PNG, avec actions scriptées (`continue_rule`, `answer:N`, `toggle:N`, `type:…`, `validate`, `outcomes:…`). Il a permis de relire le rendu réel et d'y corriger ce que les tests ne voient pas : marqueurs de la carte qui se chevauchaient (zone de carte plus basse que supposé au point 26), titres tronqués, vignettes de progression vides. Le test d'écart des positions (point 26) reste un garde-fou de données ; le rendu réel passe désormais par ces captures.
|
||||
|
||||
**Système visuel** : thème Godot unique (`assets/interface/theme.tres`, appliqué par `project.godot`) : police Atkinson Hyperlegible (libre, conçue pour la lisibilité ; tous les caractères français vérifiés), palette crème/vert/or, boutons à relief, cartes arrondies, focus clavier bleu épais, variantes de type (`SecondaryButton`, `MarkerButton`, `CardTitle`, `HeaderTitle`, `Pill`...). Fenêtre de base 1152x648 avec étirement `canvas_items`. Réussite/erreur : icône (coche / point d'interrogation) en plus du texte, jamais la couleur seule ; étoiles pleines/vides par la forme.
|
||||
|
||||
**Illustrations** (SVG vectoriels originaux, provisoires, générés par script jetable) : décors forêt (CE1) et marais (CE2) — le décor suit le niveau de la règle —, hibou Plume, étoiles, pictogrammes de types d'exercice, icônes de retour, 10 objets de collection. Résolution par identifiant dans un répertoire fixe (`ItemIcons`), repli sur un cadenas.
|
||||
|
||||
**Écrans refaits** : carte (barre du haut : profil, titre, total d'étoiles, collection ; lieux = cartes avec pictogramme, titre, étoiles ; position fractionnelle étalée sur toute la zone et recalculée au redimensionnement ; Plume en bas), choix et création de profil, introduction de mission (Plume porte le texte narratif, doublon supprimé), hôte d'exercice (décor + carte de contenu, indicateur d'exercice en pastille), panneaux de règle et de retour, récompense (étoiles qui apparaissent, objets débloqués illustrés), collection (grille).
|
||||
|
||||
**Animations** : `Motion` (apparition en rebond, fondu) respecte `SettingsManager.animations_enabled` (cahier des charges §11) ; l'écran de réglages qui le pilotera reste à faire (phase suivante).
|
||||
|
||||
**Non vérifié** : tactile, clavier virtuel, rendu sur d'autres résolutions que 1152x648, animations en mouvement (les captures montrent l'état final), rendu sous Windows.
|
||||
|
||||
@@ -24,6 +24,9 @@ Tout ce qui suit ne peut pas être vérifié sans écran (rendu, mise en page, a
|
||||
|
||||
## Accessibilité et interface
|
||||
|
||||
- Habillage (point 31 de `decisions.md`) : relire chaque écran (profils, carte CE1 et CE2, introduction, règle, les trois types d'exercice, retour juste/faux, récompense, collection) ; le rendu à 1152x648 a été relu sur captures, pas les autres tailles ni le tactile. Redimensionner la fenêtre : les lieux de la carte restent entiers et ne se chevauchent pas.
|
||||
- Navigation : « Changer de profil » sur la carte ramène au choix du profil sans perte ; « Quitter la mission » demande confirmation, ne donne aucune étoile et ramène à la carte.
|
||||
|
||||
- Réussite et erreur ne doivent jamais se distinguer **uniquement** par la couleur (vérifier que le texte du titre du panneau de retour diffère bien : « Bravo ! » vs « Pas tout à fait »).
|
||||
- Taille et contraste du texte à vérifier sur un petit écran et un grand écran (redimensionner la fenêtre pendant que le jeu tourne, vérifier que les boutons restent utilisables et ne se chevauchent pas — conteneurs et ancres, pas de position fixe).
|
||||
- Boutons testés à la souris et au clavier (tabulation / entrée). Le tactile n'a pas pu être testé (pas d'export mobile à ce stade).
|
||||
|
||||
@@ -11,7 +11,7 @@ config_version=5
|
||||
[application]
|
||||
|
||||
config/name="Les Aventuriers des mots"
|
||||
config/version="0.2.0"
|
||||
config/version="0.3.0"
|
||||
run/main_scene="res://scenes/boot/boot.tscn"
|
||||
config/features=PackedStringArray("4.6", "Forward Plus")
|
||||
config/icon="res://icon.svg"
|
||||
@@ -25,3 +25,14 @@ ExerciseEngine="*res://autoload/exercise_engine.gd"
|
||||
SaveManager="*res://autoload/save_manager.gd"
|
||||
AudioManager="*res://autoload/audio_manager.gd"
|
||||
SettingsManager="*res://autoload/settings_manager.gd"
|
||||
|
||||
[display]
|
||||
|
||||
window/size/viewport_width=1152
|
||||
window/size/viewport_height=648
|
||||
window/stretch/mode="canvas_items"
|
||||
window/stretch/aspect="expand"
|
||||
|
||||
[gui]
|
||||
|
||||
theme/custom="res://assets/interface/theme.tres"
|
||||
|
||||
@@ -1,15 +1,23 @@
|
||||
extends Control
|
||||
## Plume, le hibou guide : affiche une remarque ou un indice sous forme de
|
||||
## texte. Portrait provisoire (forme simple, voir assets/CREDITS.md), a
|
||||
## remplacer fichier par fichier sans toucher ce script.
|
||||
## Plume, le hibou guide : affiche une remarque ou un indice dans une bulle.
|
||||
## Illustration vectorielle provisoire (voir assets/CREDITS.md), a remplacer
|
||||
## fichier par fichier sans toucher ce script.
|
||||
|
||||
@onready var _bubble: Control = $HBox/Bubble
|
||||
@onready var _dialogue_label: Label = %DialogueLabel
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
_bubble.visible = _dialogue_label.visible
|
||||
|
||||
|
||||
func say(text: String) -> void:
|
||||
_dialogue_label.text = text
|
||||
_dialogue_label.visible = true
|
||||
_bubble.visible = true
|
||||
Motion.fade_in(_bubble)
|
||||
|
||||
|
||||
func clear() -> void:
|
||||
_dialogue_label.visible = false
|
||||
_bubble.visible = false
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
[gd_scene load_steps=2 format=3]
|
||||
[gd_scene load_steps=3 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/characters/guide_owl.gd" id="1"]
|
||||
[ext_resource type="Texture2D" path="res://assets/characters/owl_plume.svg" id="2"]
|
||||
|
||||
[node name="GuideOwl" type="Control"]
|
||||
layout_mode = 3
|
||||
size_flags_horizontal = 3
|
||||
custom_minimum_size = Vector2(0, 96)
|
||||
custom_minimum_size = Vector2(0, 112)
|
||||
script = ExtResource("1")
|
||||
|
||||
[node name="HBox" type="HBoxContainer" parent="."]
|
||||
layout_mode = 2
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
@@ -17,15 +18,19 @@ grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_constants/separation = 12
|
||||
|
||||
[node name="Portrait" type="ColorRect" parent="HBox"]
|
||||
[node name="Portrait" type="TextureRect" parent="HBox"]
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(80, 80)
|
||||
color = Color(0.56, 0.75, 0.42, 1)
|
||||
custom_minimum_size = Vector2(104, 104)
|
||||
size_flags_vertical = 4
|
||||
texture = ExtResource("2")
|
||||
expand_mode = 1
|
||||
stretch_mode = 5
|
||||
|
||||
[node name="Bubble" type="PanelContainer" parent="HBox"]
|
||||
theme_type_variation = &"SoftCard"
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 1
|
||||
size_flags_vertical = 4
|
||||
|
||||
[node name="DialogueLabel" type="Label" parent="HBox/Bubble"]
|
||||
unique_name_in_owner = true
|
||||
|
||||
@@ -29,6 +29,7 @@ theme_override_constants/separation = 16
|
||||
|
||||
[node name="InstructionLabel" type="Label" parent="Margin/VBox"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"Emphasis"
|
||||
layout_mode = 2
|
||||
autowrap_mode = 2
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ var _pending_outcome := ""
|
||||
@onready var _exercise_container: Control = %ExerciseContainer
|
||||
@onready var _overlay_container: Control = %OverlayContainer
|
||||
@onready var _progress_label: Label = %ProgressLabel
|
||||
@onready var _progress_pill: Control = %ProgressPill
|
||||
@onready var _abandon_button: Button = %AbandonButton
|
||||
@onready var _abandon_confirm_dialog: ConfirmationDialog = %AbandonConfirmDialog
|
||||
|
||||
@@ -64,6 +65,7 @@ func _ready() -> void:
|
||||
_rule = ExerciseEngine.get_rule(_mission["rule_id"])
|
||||
_skill_id = _rule.get("skill", "")
|
||||
_current_difficulty = ProgressManager.next_difficulty_for_skill(_skill_id, 1)
|
||||
$Backdrop.kind = "marsh" if _rule.get("level", "CE1") == "CE2" else "forest"
|
||||
_show_rule_panel()
|
||||
|
||||
|
||||
@@ -114,6 +116,7 @@ func _load_next_exercise() -> void:
|
||||
## peut faire redonner le meme exercice d'une mission a l'autre tentative :
|
||||
## sans ce repere, ca ressemble a un blocage plutot qu'a une progression.
|
||||
func _update_progress_label() -> void:
|
||||
_progress_pill.visible = true
|
||||
_progress_label.text = "%s %d/%d" % [
|
||||
UIText.get_text("exercise_host.progress_label"), _completed_count + 1, MISSION_LENGTH
|
||||
]
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
[gd_scene load_steps=2 format=3]
|
||||
[gd_scene load_steps=3 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/exercises/exercise_host.gd" id="1"]
|
||||
[ext_resource type="PackedScene" path="res://scenes/ui/backdrop.tscn" id="backdrop"]
|
||||
|
||||
[node name="ExerciseHost" type="Control"]
|
||||
layout_mode = 3
|
||||
@@ -11,12 +12,36 @@ grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1")
|
||||
|
||||
[node name="Backdrop" parent="." instance=ExtResource("backdrop")]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="ContentCard" type="Panel" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 24.0
|
||||
offset_top = 64.0
|
||||
offset_right = -24.0
|
||||
offset_bottom = -24.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="ExerciseContainer" type="Control" parent="."]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_top = 48.0
|
||||
offset_left = 40.0
|
||||
offset_top = 76.0
|
||||
offset_right = -40.0
|
||||
offset_bottom = -36.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
@@ -33,7 +58,7 @@ mouse_filter = 2
|
||||
[node name="HeaderBar" type="MarginContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchor_right = 1.0
|
||||
offset_bottom = 48.0
|
||||
offset_bottom = 56.0
|
||||
grow_horizontal = 2
|
||||
theme_override_constants/margin_left = 16
|
||||
theme_override_constants/margin_top = 8
|
||||
@@ -45,16 +70,24 @@ layout_mode = 2
|
||||
|
||||
[node name="AbandonButton" type="Button" parent="HeaderBar/HBox"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"SecondaryButton"
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Spacer" type="Control" parent="HeaderBar/HBox"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="ProgressLabel" type="Label" parent="HeaderBar/HBox"]
|
||||
[node name="ProgressPill" type="PanelContainer" parent="HeaderBar/HBox"]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
theme_type_variation = &"Pill"
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 2
|
||||
|
||||
[node name="ProgressLabel" type="Label" parent="HeaderBar/HBox/ProgressPill"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"Emphasis"
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="AbandonConfirmDialog" type="ConfirmationDialog" parent="."]
|
||||
unique_name_in_owner = true
|
||||
|
||||
@@ -21,7 +21,8 @@ func load_exercise(exercise: Dictionary) -> void:
|
||||
for i in answers.size():
|
||||
var button := Button.new()
|
||||
button.text = answers[i]
|
||||
button.custom_minimum_size = Vector2(0, 56)
|
||||
button.custom_minimum_size = Vector2(0, 64)
|
||||
button.add_theme_font_size_override("font_size", 28)
|
||||
button.pressed.connect(_on_answer_pressed.bind(i))
|
||||
_answers_box.add_child(button)
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ theme_override_constants/separation = 16
|
||||
|
||||
[node name="InstructionLabel" type="Label" parent="Margin/VBox"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"Emphasis"
|
||||
layout_mode = 2
|
||||
autowrap_mode = 2
|
||||
|
||||
@@ -36,7 +37,7 @@ autowrap_mode = 2
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
autowrap_mode = 2
|
||||
theme_override_font_sizes/font_size = 24
|
||||
theme_type_variation = &"CardTitle"
|
||||
|
||||
[node name="AnswersBox" type="VBoxContainer" parent="Margin/VBox"]
|
||||
unique_name_in_owner = true
|
||||
|
||||
@@ -33,6 +33,9 @@ func load_exercise(exercise: Dictionary) -> void:
|
||||
var button := Button.new()
|
||||
button.text = tokens[i]["text"]
|
||||
button.toggle_mode = true
|
||||
button.theme_type_variation = &"SecondaryButton"
|
||||
button.custom_minimum_size = Vector2(0, 60)
|
||||
button.add_theme_font_size_override("font_size", 30)
|
||||
button.toggled.connect(_on_token_toggled.bind(i))
|
||||
_tokens_box.add_child(button)
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ theme_override_constants/separation = 16
|
||||
|
||||
[node name="InstructionLabel" type="Label" parent="Margin/VBox"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"Emphasis"
|
||||
layout_mode = 2
|
||||
autowrap_mode = 2
|
||||
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
[gd_scene load_steps=3 format=3]
|
||||
[gd_scene load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/profiles/profile_create.gd" id="1"]
|
||||
|
||||
[ext_resource type="PackedScene" path="res://scenes/ui/backdrop.tscn" id="backdrop"]
|
||||
|
||||
[sub_resource type="ButtonGroup" id="SchoolLevelGroup"]
|
||||
|
||||
[node name="ProfileCreate" type="Control"]
|
||||
@@ -13,6 +15,14 @@ grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1")
|
||||
|
||||
[node name="Backdrop" parent="." instance=ExtResource("backdrop")]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Margin" type="MarginContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
@@ -25,58 +35,70 @@ theme_override_constants/margin_top = 32
|
||||
theme_override_constants/margin_right = 32
|
||||
theme_override_constants/margin_bottom = 32
|
||||
|
||||
[node name="VBox" type="VBoxContainer" parent="Margin"]
|
||||
[node name="Center" type="CenterContainer" parent="Margin"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 16
|
||||
|
||||
[node name="TitleLabel" type="Label" parent="Margin/VBox"]
|
||||
[node name="Card" type="PanelContainer" parent="Margin/Center"]
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(640, 0)
|
||||
|
||||
[node name="VBox" type="VBoxContainer" parent="Margin/Center/Card"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 14
|
||||
|
||||
[node name="TitleLabel" type="Label" parent="Margin/Center/Card/VBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 32
|
||||
theme_type_variation = &"CardTitle"
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="NameLabel" type="Label" parent="Margin/VBox"]
|
||||
[node name="NameLabel" type="Label" parent="Margin/Center/Card/VBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
|
||||
[node name="NameEdit" type="LineEdit" parent="Margin/VBox"]
|
||||
[node name="NameEdit" type="LineEdit" parent="Margin/Center/Card/VBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(0, 48)
|
||||
|
||||
[node name="ErrorLabel" type="Label" parent="Margin/VBox"]
|
||||
[node name="ErrorLabel" type="Label" parent="Margin/Center/Card/VBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
autowrap_mode = 2
|
||||
|
||||
[node name="LevelLabel" type="Label" parent="Margin/VBox"]
|
||||
[node name="LevelLabel" type="Label" parent="Margin/Center/Card/VBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
|
||||
[node name="LevelBox" type="HBoxContainer" parent="Margin/VBox"]
|
||||
[node name="LevelBox" type="HBoxContainer" parent="Margin/Center/Card/VBox"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 16
|
||||
|
||||
[node name="CE1Button" type="Button" parent="Margin/VBox/LevelBox"]
|
||||
[node name="CE1Button" type="Button" parent="Margin/Center/Card/VBox/LevelBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
custom_minimum_size = Vector2(0, 56)
|
||||
theme_type_variation = &"SecondaryButton"
|
||||
toggle_mode = true
|
||||
button_group = SubResource("SchoolLevelGroup")
|
||||
|
||||
[node name="CE2Button" type="Button" parent="Margin/VBox/LevelBox"]
|
||||
[node name="CE2Button" type="Button" parent="Margin/Center/Card/VBox/LevelBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
custom_minimum_size = Vector2(0, 56)
|
||||
theme_type_variation = &"SecondaryButton"
|
||||
toggle_mode = true
|
||||
button_group = SubResource("SchoolLevelGroup")
|
||||
|
||||
[node name="ConfirmButton" type="Button" parent="Margin/VBox"]
|
||||
[node name="ConfirmButton" type="Button" parent="Margin/Center/Card/VBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(0, 56)
|
||||
|
||||
[node name="CancelButton" type="Button" parent="Margin/VBox"]
|
||||
[node name="CancelButton" type="Button" parent="Margin/Center/Card/VBox"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"SecondaryButton"
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(0, 48)
|
||||
|
||||
@@ -41,14 +41,17 @@ func _refresh_profile_list() -> void:
|
||||
|
||||
func _build_profile_row(summary: Dictionary) -> Control:
|
||||
var row := HBoxContainer.new()
|
||||
row.add_theme_constant_override("separation", 10)
|
||||
|
||||
var select_button := Button.new()
|
||||
select_button.text = "%s (%s)" % [summary["display_name"], summary["school_level"]]
|
||||
select_button.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||||
select_button.custom_minimum_size = Vector2(0, 56)
|
||||
select_button.pressed.connect(_on_profile_selected.bind(summary["profile_id"]))
|
||||
row.add_child(select_button)
|
||||
|
||||
var delete_button := Button.new()
|
||||
delete_button.theme_type_variation = &"SecondaryButton"
|
||||
delete_button.text = UIText.get_text("profile_select.delete_button")
|
||||
delete_button.pressed.connect(_on_delete_requested.bind(summary["profile_id"]))
|
||||
row.add_child(delete_button)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
[gd_scene load_steps=2 format=3]
|
||||
[gd_scene load_steps=3 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/profiles/profile_select.gd" id="1"]
|
||||
[ext_resource type="PackedScene" path="res://scenes/ui/backdrop.tscn" id="backdrop"]
|
||||
|
||||
[node name="ProfileSelect" type="Control"]
|
||||
layout_mode = 3
|
||||
@@ -11,6 +12,14 @@ grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1")
|
||||
|
||||
[node name="Backdrop" parent="." instance=ExtResource("backdrop")]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Margin" type="MarginContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
@@ -23,31 +32,40 @@ theme_override_constants/margin_top = 32
|
||||
theme_override_constants/margin_right = 32
|
||||
theme_override_constants/margin_bottom = 32
|
||||
|
||||
[node name="VBox" type="VBoxContainer" parent="Margin"]
|
||||
[node name="Center" type="CenterContainer" parent="Margin"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Card" type="PanelContainer" parent="Margin/Center"]
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(720, 0)
|
||||
|
||||
[node name="VBox" type="VBoxContainer" parent="Margin/Center/Card"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 16
|
||||
|
||||
[node name="TitleLabel" type="Label" parent="Margin/VBox"]
|
||||
[node name="TitleLabel" type="Label" parent="Margin/Center/Card/VBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 32
|
||||
theme_type_variation = &"CardTitle"
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="Scroll" type="ScrollContainer" parent="Margin/VBox"]
|
||||
[node name="Scroll" type="ScrollContainer" parent="Margin/Center/Card/VBox"]
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(0, 260)
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="ProfileList" type="VBoxContainer" parent="Margin/VBox/Scroll"]
|
||||
[node name="ProfileList" type="VBoxContainer" parent="Margin/Center/Card/VBox/Scroll"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
theme_override_constants/separation = 8
|
||||
|
||||
[node name="EmptyStateLabel" type="Label" parent="Margin/VBox"]
|
||||
[node name="EmptyStateLabel" type="Label" parent="Margin/Center/Card/VBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
autowrap_mode = 2
|
||||
|
||||
[node name="NewProfileButton" type="Button" parent="Margin/VBox"]
|
||||
[node name="NewProfileButton" type="Button" parent="Margin/Center/Card/VBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(0, 56)
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
extends Control
|
||||
## Decor plein ecran derriere un ecran (illustration vectorielle provisoire,
|
||||
## voir assets/CREDITS.md). "forest" pour le CE1, "marsh" pour le CE2.
|
||||
|
||||
const TEXTURES := {
|
||||
"forest": "res://assets/environments/forest_backdrop.svg",
|
||||
"marsh": "res://assets/environments/marsh_backdrop.svg",
|
||||
}
|
||||
|
||||
@export_enum("forest", "marsh") var kind: String = "forest":
|
||||
set(value):
|
||||
kind = value
|
||||
_apply()
|
||||
|
||||
@onready var _picture: TextureRect = $Picture
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
_apply()
|
||||
|
||||
|
||||
func _apply() -> void:
|
||||
if _picture != null:
|
||||
_picture.texture = load(TEXTURES.get(kind, TEXTURES["forest"]))
|
||||
@@ -0,0 +1 @@
|
||||
uid://xc0ialw4cfk0
|
||||
@@ -0,0 +1,24 @@
|
||||
[gd_scene load_steps=2 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/ui/backdrop.gd" id="1"]
|
||||
|
||||
[node name="Backdrop" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
script = ExtResource("1")
|
||||
|
||||
[node name="Picture" type="TextureRect" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
expand_mode = 1
|
||||
stretch_mode = 6
|
||||
@@ -2,9 +2,11 @@ extends Control
|
||||
## Collection d'objets gagnes avec les etoiles. Un objet non debloque reste
|
||||
## mysterieux mais indique comment l'obtenir (jamais de mystere frustrant).
|
||||
|
||||
const ICON_SIZE := 72.0
|
||||
|
||||
@onready var _title_label: Label = %TitleLabel
|
||||
@onready var _progress_label: Label = %ProgressLabel
|
||||
@onready var _items_box: VBoxContainer = %ItemsBox
|
||||
@onready var _items_box: GridContainer = %ItemsBox
|
||||
@onready var _back_button: Button = %BackButton
|
||||
|
||||
|
||||
@@ -26,20 +28,39 @@ func _ready() -> void:
|
||||
)
|
||||
|
||||
|
||||
## Une ligne = pictogramme + texte (le Label s'appelle "TextLabel").
|
||||
func _build_row(item: Dictionary, is_owned: bool) -> Control:
|
||||
var card := PanelContainer.new()
|
||||
card.theme_type_variation = &"SoftCard"
|
||||
card.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||||
|
||||
var row := HBoxContainer.new()
|
||||
row.add_theme_constant_override("separation", 12)
|
||||
card.add_child(row)
|
||||
|
||||
var icon := TextureRect.new()
|
||||
icon.texture = (
|
||||
ItemIcons.texture_for(item["item_id"]) if is_owned else ItemIcons.locked_texture()
|
||||
)
|
||||
icon.custom_minimum_size = Vector2(ICON_SIZE, ICON_SIZE)
|
||||
icon.expand_mode = TextureRect.EXPAND_IGNORE_SIZE
|
||||
icon.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
|
||||
icon.size_flags_vertical = Control.SIZE_SHRINK_CENTER
|
||||
row.add_child(icon)
|
||||
|
||||
var label := Label.new()
|
||||
label.name = "TextLabel"
|
||||
label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
|
||||
label.custom_minimum_size = Vector2(560, 0)
|
||||
label.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||||
label.size_flags_vertical = Control.SIZE_SHRINK_CENTER
|
||||
if is_owned:
|
||||
label.text = (
|
||||
"%s — %s\n%s"
|
||||
% [item["title"], UIText.get_text("collection.owned_marker"), item["description"]]
|
||||
)
|
||||
label.text = "%s\n%s" % [item["title"], item["description"]]
|
||||
else:
|
||||
label.text = (
|
||||
"%s\n%s" % [UIText.get_text("collection.locked_title"), _unlock_hint(item["unlock"])]
|
||||
)
|
||||
return label
|
||||
row.add_child(label)
|
||||
return card
|
||||
|
||||
|
||||
func _unlock_hint(unlock: Dictionary) -> String:
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
[gd_scene load_steps=2 format=3]
|
||||
[gd_scene load_steps=3 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/ui/collection.gd" id="1"]
|
||||
[ext_resource type="PackedScene" path="res://scenes/ui/backdrop.tscn" id="backdrop"]
|
||||
|
||||
[node name="Collection" type="Control"]
|
||||
layout_mode = 3
|
||||
@@ -11,6 +12,14 @@ grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1")
|
||||
|
||||
[node name="Backdrop" parent="." instance=ExtResource("backdrop")]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Margin" type="MarginContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
@@ -18,37 +27,44 @@ anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_constants/margin_left = 24
|
||||
theme_override_constants/margin_left = 40
|
||||
theme_override_constants/margin_top = 24
|
||||
theme_override_constants/margin_right = 24
|
||||
theme_override_constants/margin_right = 40
|
||||
theme_override_constants/margin_bottom = 24
|
||||
|
||||
[node name="VBox" type="VBoxContainer" parent="Margin"]
|
||||
[node name="Card" type="PanelContainer" parent="Margin"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="VBox" type="VBoxContainer" parent="Margin/Card"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 12
|
||||
|
||||
[node name="TitleLabel" type="Label" parent="Margin/VBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 32
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="ProgressLabel" type="Label" parent="Margin/VBox"]
|
||||
[node name="TitleLabel" type="Label" parent="Margin/Card/VBox"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"CardTitle"
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="Scroll" type="ScrollContainer" parent="Margin/VBox"]
|
||||
[node name="ProgressLabel" type="Label" parent="Margin/Card/VBox"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"Emphasis"
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="Scroll" type="ScrollContainer" parent="Margin/Card/VBox"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
horizontal_scroll_mode = 0
|
||||
|
||||
[node name="ItemsBox" type="VBoxContainer" parent="Margin/VBox/Scroll"]
|
||||
[node name="ItemsBox" type="GridContainer" parent="Margin/Card/VBox/Scroll"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
theme_override_constants/separation = 16
|
||||
theme_override_constants/h_separation = 16
|
||||
theme_override_constants/v_separation = 12
|
||||
columns = 2
|
||||
|
||||
[node name="BackButton" type="Button" parent="Margin/VBox"]
|
||||
[node name="BackButton" type="Button" parent="Margin/Card/VBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(0, 56)
|
||||
|
||||
@@ -5,6 +5,10 @@ extends Control
|
||||
|
||||
signal continue_pressed
|
||||
|
||||
const ICON_CORRECT := preload("res://assets/interface/icon_correct.svg")
|
||||
const ICON_TRY_AGAIN := preload("res://assets/interface/icon_try_again.svg")
|
||||
|
||||
@onready var _icon: TextureRect = %Icon
|
||||
@onready var _title_label: Label = %TitleLabel
|
||||
@onready var _hint_box: VBoxContainer = %HintBox
|
||||
@onready var _hint_label: Label = %HintLabel
|
||||
@@ -21,6 +25,8 @@ func _ready() -> void:
|
||||
|
||||
|
||||
func show_result(result: CorrectionResult, support_level: AttemptFlow.SupportLevel) -> void:
|
||||
_icon.texture = ICON_CORRECT if result.is_correct else ICON_TRY_AGAIN
|
||||
Motion.pop_in(_icon)
|
||||
_title_label.text = (
|
||||
UIText.get_text("feedback_panel.correct_title")
|
||||
if result.is_correct
|
||||
|
||||
@@ -31,7 +31,7 @@ grow_vertical = 2
|
||||
|
||||
[node name="Panel" type="PanelContainer" parent="CenterContainer"]
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(480, 0)
|
||||
custom_minimum_size = Vector2(560, 0)
|
||||
|
||||
[node name="Margin" type="MarginContainer" parent="CenterContainer/Panel"]
|
||||
layout_mode = 2
|
||||
@@ -44,10 +44,19 @@ theme_override_constants/margin_bottom = 24
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 12
|
||||
|
||||
[node name="TitleLabel" type="Label" parent="CenterContainer/Panel/Margin/VBox"]
|
||||
[node name="Icon" type="TextureRect" parent="CenterContainer/Panel/Margin/VBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 28
|
||||
custom_minimum_size = Vector2(72, 72)
|
||||
size_flags_horizontal = 4
|
||||
expand_mode = 1
|
||||
stretch_mode = 5
|
||||
|
||||
[node name="TitleLabel" type="Label" parent="CenterContainer/Panel/Margin/VBox"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"CardTitle"
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="HintBox" type="VBoxContainer" parent="CenterContainer/Panel/Margin/VBox"]
|
||||
unique_name_in_owner = true
|
||||
|
||||
@@ -5,23 +5,37 @@ extends Control
|
||||
## au moins une etoile. Sauvegarde groupee ici, en fin de mission
|
||||
## (docs/specs/decisions.md point 7).
|
||||
|
||||
const STAR_FULL := preload("res://assets/interface/star_full.svg")
|
||||
const STAR_EMPTY := preload("res://assets/interface/star_empty.svg")
|
||||
const STAR_SIZE := 88.0
|
||||
const ITEM_SIZE := 72.0
|
||||
|
||||
@onready var _backdrop: Control = %Backdrop
|
||||
@onready var _title_label: Label = %TitleLabel
|
||||
@onready var _stars_row: HBoxContainer = %StarsRow
|
||||
@onready var _stars_label: Label = %StarsLabel
|
||||
@onready var _message_label: Label = %MessageLabel
|
||||
@onready var _record_label: Label = %RecordLabel
|
||||
@onready var _total_label: Label = %TotalLabel
|
||||
@onready var _new_items_box: VBoxContainer = %NewItemsBox
|
||||
@onready var _new_items_label: Label = %NewItemsLabel
|
||||
@onready var _new_items_row: HBoxContainer = %NewItemsRow
|
||||
@onready var _collection_button: Button = %CollectionButton
|
||||
@onready var _continue_button: Button = %ContinueButton
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
var mission := ExerciseEngine.get_mission(GameManager.pending_mission_id)
|
||||
var rule := ExerciseEngine.get_rule(mission.get("rule_id", ""))
|
||||
_backdrop.kind = "marsh" if rule.get("level", "CE1") == "CE2" else "forest"
|
||||
|
||||
var summary := ProgressManager.complete_mission(
|
||||
GameManager.pending_mission_id, GameManager.last_outcomes
|
||||
)
|
||||
ProgressManager.save_now()
|
||||
|
||||
_title_label.text = UIText.get_text("reward_screen.title")
|
||||
_show_stars(summary["stars"])
|
||||
_stars_label.text = (
|
||||
"%s %d/%d"
|
||||
% [UIText.get_text("reward_screen.stars_label"), summary["stars"], MissionScoring.MAX_STARS]
|
||||
@@ -32,17 +46,7 @@ func _ready() -> void:
|
||||
_total_label.text = (
|
||||
"%s %d" % [UIText.get_text("reward_screen.total_label"), summary["total_stars"]]
|
||||
)
|
||||
|
||||
var new_items: Array = summary["new_items"]
|
||||
_new_items_label.visible = not new_items.is_empty()
|
||||
if not new_items.is_empty():
|
||||
var titles: Array[String] = []
|
||||
for item in ExerciseEngine.get_reward_items():
|
||||
if new_items.has(item["item_id"]):
|
||||
titles.append(item["title"])
|
||||
_new_items_label.text = (
|
||||
"%s\n%s" % [UIText.get_text("reward_screen.new_items_label"), "\n".join(titles)]
|
||||
)
|
||||
_show_new_items(summary["new_items"])
|
||||
|
||||
_collection_button.text = UIText.get_text("reward_screen.collection_button")
|
||||
_collection_button.pressed.connect(_on_collection_pressed)
|
||||
@@ -50,6 +54,45 @@ func _ready() -> void:
|
||||
_continue_button.pressed.connect(_on_continue_pressed)
|
||||
|
||||
|
||||
func _show_stars(earned: int) -> void:
|
||||
for i in MissionScoring.MAX_STARS:
|
||||
var star := TextureRect.new()
|
||||
star.texture = STAR_FULL if i < earned else STAR_EMPTY
|
||||
star.custom_minimum_size = Vector2(STAR_SIZE, STAR_SIZE)
|
||||
star.expand_mode = TextureRect.EXPAND_IGNORE_SIZE
|
||||
star.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
|
||||
_stars_row.add_child(star)
|
||||
if i < earned:
|
||||
Motion.pop_in(star, 0.25 + 0.2 * i)
|
||||
|
||||
|
||||
func _show_new_items(new_items: Array) -> void:
|
||||
_new_items_box.visible = not new_items.is_empty()
|
||||
if new_items.is_empty():
|
||||
return
|
||||
_new_items_label.text = UIText.get_text("reward_screen.new_items_label")
|
||||
var index := 0
|
||||
for item in ExerciseEngine.get_reward_items():
|
||||
if not new_items.has(item["item_id"]):
|
||||
continue
|
||||
var holder := VBoxContainer.new()
|
||||
var icon := TextureRect.new()
|
||||
icon.texture = ItemIcons.texture_for(item["item_id"])
|
||||
icon.custom_minimum_size = Vector2(ITEM_SIZE, ITEM_SIZE)
|
||||
icon.expand_mode = TextureRect.EXPAND_IGNORE_SIZE
|
||||
icon.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
|
||||
icon.size_flags_horizontal = Control.SIZE_SHRINK_CENTER
|
||||
holder.add_child(icon)
|
||||
var name_label := Label.new()
|
||||
name_label.text = item["title"]
|
||||
name_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||
name_label.theme_type_variation = &"Small"
|
||||
holder.add_child(name_label)
|
||||
_new_items_row.add_child(holder)
|
||||
Motion.pop_in(holder, 0.8 + 0.15 * index)
|
||||
index += 1
|
||||
|
||||
|
||||
func _on_collection_pressed() -> void:
|
||||
GameManager.pending_mission_id = ""
|
||||
GameManager.goto(GameManager.SCENE_COLLECTION)
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
[gd_scene load_steps=2 format=3]
|
||||
[gd_scene load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/ui/reward_screen.gd" id="1"]
|
||||
[ext_resource type="PackedScene" path="res://scenes/ui/backdrop.tscn" id="backdrop"]
|
||||
[ext_resource type="Texture2D" path="res://assets/characters/owl_plume.svg" id="3"]
|
||||
|
||||
[node name="RewardScreen" type="Control"]
|
||||
layout_mode = 3
|
||||
@@ -11,59 +13,104 @@ grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1")
|
||||
|
||||
[node name="CenterContainer" type="CenterContainer" parent="."]
|
||||
[node name="Backdrop" parent="." instance=ExtResource("backdrop")]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="VBox" type="VBoxContainer" parent="CenterContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 20
|
||||
|
||||
[node name="TitleLabel" type="Label" parent="CenterContainer/VBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 36
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="StarsLabel" type="Label" parent="CenterContainer/VBox"]
|
||||
[node name="Margin" type="MarginContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_constants/margin_left = 32
|
||||
theme_override_constants/margin_top = 24
|
||||
theme_override_constants/margin_right = 32
|
||||
theme_override_constants/margin_bottom = 24
|
||||
|
||||
[node name="Center" type="CenterContainer" parent="Margin"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Card" type="PanelContainer" parent="Margin/Center"]
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(720, 0)
|
||||
|
||||
[node name="VBox" type="VBoxContainer" parent="Margin/Center/Card"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 12
|
||||
|
||||
[node name="TitleLabel" type="Label" parent="Margin/Center/Card/VBox"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"CardTitle"
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="MessageLabel" type="Label" parent="CenterContainer/VBox"]
|
||||
[node name="StarsRow" type="HBoxContainer" parent="Margin/Center/Card/VBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
theme_override_constants/separation = 10
|
||||
|
||||
[node name="StarsLabel" type="Label" parent="Margin/Center/Card/VBox"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"Emphasis"
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="MessageLabel" type="Label" parent="Margin/Center/Card/VBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 1
|
||||
autowrap_mode = 2
|
||||
custom_minimum_size = Vector2(480, 0)
|
||||
|
||||
[node name="RecordLabel" type="Label" parent="CenterContainer/VBox"]
|
||||
[node name="RecordLabel" type="Label" parent="Margin/Center/Card/VBox"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"Emphasis"
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="TotalLabel" type="Label" parent="Margin/Center/Card/VBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="TotalLabel" type="Label" parent="CenterContainer/VBox"]
|
||||
[node name="NewItemsBox" type="VBoxContainer" parent="Margin/Center/Card/VBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 1
|
||||
theme_override_constants/separation = 6
|
||||
|
||||
[node name="NewItemsLabel" type="Label" parent="CenterContainer/VBox"]
|
||||
[node name="NewItemsLabel" type="Label" parent="Margin/Center/Card/VBox/NewItemsBox"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"Emphasis"
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 1
|
||||
autowrap_mode = 2
|
||||
custom_minimum_size = Vector2(480, 0)
|
||||
|
||||
[node name="CollectionButton" type="Button" parent="CenterContainer/VBox"]
|
||||
[node name="NewItemsRow" type="HBoxContainer" parent="Margin/Center/Card/VBox/NewItemsBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(200, 56)
|
||||
alignment = 1
|
||||
theme_override_constants/separation = 16
|
||||
|
||||
[node name="ContinueButton" type="Button" parent="CenterContainer/VBox"]
|
||||
[node name="Buttons" type="HBoxContainer" parent="Margin/Center/Card/VBox"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 16
|
||||
|
||||
[node name="CollectionButton" type="Button" parent="Margin/Center/Card/VBox/Buttons"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"SecondaryButton"
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
custom_minimum_size = Vector2(0, 56)
|
||||
|
||||
[node name="ContinueButton" type="Button" parent="Margin/Center/Card/VBox/Buttons"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(200, 56)
|
||||
size_flags_horizontal = 3
|
||||
custom_minimum_size = Vector2(0, 56)
|
||||
|
||||
@@ -31,7 +31,7 @@ grow_vertical = 2
|
||||
|
||||
[node name="Panel" type="PanelContainer" parent="CenterContainer"]
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(480, 0)
|
||||
custom_minimum_size = Vector2(560, 0)
|
||||
|
||||
[node name="Margin" type="MarginContainer" parent="CenterContainer/Panel"]
|
||||
layout_mode = 2
|
||||
@@ -46,8 +46,9 @@ theme_override_constants/separation = 16
|
||||
|
||||
[node name="TitleLabel" type="Label" parent="CenterContainer/Panel/Margin/VBox"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"CardTitle"
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 28
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="StatementLabel" type="Label" parent="CenterContainer/Panel/Margin/VBox"]
|
||||
unique_name_in_owner = true
|
||||
|
||||
@@ -4,7 +4,6 @@ extends Control
|
||||
## (voir "Points durs" du prompt de lancement, Sens de l'aventure).
|
||||
|
||||
@onready var _title_label: Label = %TitleLabel
|
||||
@onready var _narrative_label: Label = %NarrativeLabel
|
||||
@onready var _guide: Control = %Guide
|
||||
@onready var _start_button: Button = %StartButton
|
||||
@onready var _back_button: Button = %BackButton
|
||||
@@ -13,8 +12,9 @@ extends Control
|
||||
func _ready() -> void:
|
||||
var mission := ExerciseEngine.get_mission(GameManager.pending_mission_id)
|
||||
_title_label.text = mission.get("title", "")
|
||||
_narrative_label.text = mission.get("narrative_context", "")
|
||||
_guide.say(mission.get("narrative_context", ""))
|
||||
var rule := ExerciseEngine.get_rule(mission.get("rule_id", ""))
|
||||
$Backdrop.kind = "marsh" if rule.get("level", "CE1") == "CE2" else "forest"
|
||||
|
||||
_start_button.text = UIText.get_text("mission_intro.start_button")
|
||||
_back_button.text = UIText.get_text("mission_intro.back_button")
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
[gd_scene load_steps=3 format=3]
|
||||
[gd_scene load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/world/mission_intro.gd" id="1"]
|
||||
[ext_resource type="PackedScene" path="res://scenes/characters/guide_owl.tscn" id="2"]
|
||||
[ext_resource type="PackedScene" path="res://scenes/ui/backdrop.tscn" id="backdrop"]
|
||||
|
||||
[node name="MissionIntro" type="Control"]
|
||||
layout_mode = 3
|
||||
@@ -12,6 +13,14 @@ grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1")
|
||||
|
||||
[node name="Backdrop" parent="." instance=ExtResource("backdrop")]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Margin" type="MarginContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
@@ -19,40 +28,45 @@ anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_constants/margin_left = 32
|
||||
theme_override_constants/margin_top = 32
|
||||
theme_override_constants/margin_right = 32
|
||||
theme_override_constants/margin_bottom = 32
|
||||
theme_override_constants/margin_left = 48
|
||||
theme_override_constants/margin_top = 40
|
||||
theme_override_constants/margin_right = 48
|
||||
theme_override_constants/margin_bottom = 40
|
||||
|
||||
[node name="VBox" type="VBoxContainer" parent="Margin"]
|
||||
[node name="Center" type="CenterContainer" parent="Margin"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 16
|
||||
|
||||
[node name="TitleLabel" type="Label" parent="Margin/VBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 32
|
||||
|
||||
[node name="NarrativeLabel" type="Label" parent="Margin/VBox"]
|
||||
[node name="Card" type="PanelContainer" parent="Margin/Center"]
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(760, 0)
|
||||
|
||||
[node name="VBox" type="VBoxContainer" parent="Margin/Center/Card"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 18
|
||||
|
||||
[node name="TitleLabel" type="Label" parent="Margin/Center/Card/VBox"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"CardTitle"
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 1
|
||||
autowrap_mode = 2
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="Guide" type="Control" parent="Margin/VBox" instance=ExtResource("2")]
|
||||
[node name="Guide" type="Control" parent="Margin/Center/Card/VBox" instance=ExtResource("2")]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(0, 150)
|
||||
|
||||
[node name="Buttons" type="HBoxContainer" parent="Margin/VBox"]
|
||||
[node name="Buttons" type="HBoxContainer" parent="Margin/Center/Card/VBox"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 16
|
||||
|
||||
[node name="BackButton" type="Button" parent="Margin/VBox/Buttons"]
|
||||
[node name="BackButton" type="Button" parent="Margin/Center/Card/VBox/Buttons"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"SecondaryButton"
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(0, 56)
|
||||
|
||||
[node name="StartButton" type="Button" parent="Margin/VBox/Buttons"]
|
||||
[node name="StartButton" type="Button" parent="Margin/Center/Card/VBox/Buttons"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
extends Button
|
||||
## Un lieu de la carte : pictogramme du type d'exercice, titre, etoiles
|
||||
## gagnees (pleines/vides : la forme porte l'information, pas la couleur) et
|
||||
## etat de la competence. Scene autonome : la carte la configure et ecoute
|
||||
## `pressed`.
|
||||
|
||||
const STAR_FULL := preload("res://assets/interface/star_full.svg")
|
||||
const STAR_EMPTY := preload("res://assets/interface/star_empty.svg")
|
||||
const TYPE_ICONS := {
|
||||
"multiple_choice": "res://assets/interface/icon_multiple_choice.svg",
|
||||
"sentence_correction": "res://assets/interface/icon_sentence_correction.svg",
|
||||
"dictation": "res://assets/interface/icon_dictation.svg",
|
||||
}
|
||||
const STAR_SIZE := 24.0
|
||||
|
||||
@onready var _type_icon: TextureRect = %TypeIcon
|
||||
@onready var _title_label: Label = %TitleLabel
|
||||
@onready var _stars_row: HBoxContainer = %StarsRow
|
||||
@onready var _status_label: Label = %StatusLabel
|
||||
|
||||
|
||||
func setup(mission: Dictionary, stars: int, max_stars: int, status_text: String) -> void:
|
||||
_title_label.text = mission["title"]
|
||||
_status_label.text = status_text
|
||||
_status_label.visible = not status_text.is_empty()
|
||||
_type_icon.texture = load(TYPE_ICONS.get(mission["exercise_type"], TYPE_ICONS["multiple_choice"]))
|
||||
|
||||
for child in _stars_row.get_children():
|
||||
child.queue_free()
|
||||
for i in max_stars:
|
||||
var star := TextureRect.new()
|
||||
star.texture = STAR_FULL if i < stars else STAR_EMPTY
|
||||
star.custom_minimum_size = Vector2(STAR_SIZE, STAR_SIZE)
|
||||
star.expand_mode = TextureRect.EXPAND_IGNORE_SIZE
|
||||
star.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
|
||||
star.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
_stars_row.add_child(star)
|
||||
@@ -0,0 +1 @@
|
||||
uid://cd6db5ude6pwq
|
||||
@@ -0,0 +1,59 @@
|
||||
[gd_scene load_steps=3 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/world/mission_marker.gd" id="1"]
|
||||
[ext_resource type="Texture2D" path="res://assets/interface/star_empty.svg" id="2"]
|
||||
|
||||
[node name="MissionMarker" type="Button"]
|
||||
theme_type_variation = &"MarkerButton"
|
||||
custom_minimum_size = Vector2(220, 120)
|
||||
script = ExtResource("1")
|
||||
|
||||
[node name="Content" type="VBoxContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
theme_override_constants/separation = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="Header" type="HBoxContainer" parent="Content"]
|
||||
layout_mode = 2
|
||||
mouse_filter = 2
|
||||
theme_override_constants/separation = 8
|
||||
alignment = 1
|
||||
|
||||
[node name="TypeIcon" type="TextureRect" parent="Content/Header"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(36, 36)
|
||||
size_flags_vertical = 4
|
||||
mouse_filter = 2
|
||||
expand_mode = 1
|
||||
stretch_mode = 5
|
||||
|
||||
[node name="TitleLabel" type="Label" parent="Content/Header"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
mouse_filter = 2
|
||||
theme_override_font_sizes/font_size = 18
|
||||
autowrap_mode = 3
|
||||
max_lines_visible = 3
|
||||
text_overrun_behavior = 3
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="StarsRow" type="HBoxContainer" parent="Content"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
mouse_filter = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="StatusLabel" type="Label" parent="Content"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
mouse_filter = 2
|
||||
theme_type_variation = &"Small"
|
||||
horizontal_alignment = 1
|
||||
@@ -3,20 +3,22 @@ extends Control
|
||||
## (cahier des charges §15) se limitait a trois lieux ; le perimetre a ete
|
||||
## etendu (docs/specs/decisions.md, points 25 et 27). La position de chaque
|
||||
## mission vient de data/missions/*.json (fractions 0..1 de la zone de
|
||||
## carte), jamais d'une position fixe en dur dans le script. Un profil CE2
|
||||
## peut basculer sur la carte CE1 pour revoir les notions precedentes.
|
||||
## carte), jamais d'une position fixe en dur dans le script : chaque lieu est
|
||||
## replace quand la zone change de taille. Un profil CE2 peut basculer sur la
|
||||
## carte CE1 pour revoir les notions precedentes.
|
||||
|
||||
const MARKER_HALF_WIDTH := 80.0
|
||||
const MARKER_HALF_HEIGHT := 48.0
|
||||
const MARKER_SCENE := preload("res://scenes/world/mission_marker.tscn")
|
||||
|
||||
var _viewed_level := "CE1"
|
||||
|
||||
@onready var _backdrop: Control = %Backdrop
|
||||
@onready var _title_label: Label = %TitleLabel
|
||||
@onready var _map_area: Control = %MapArea
|
||||
@onready var _level_toggle_button: Button = %LevelToggleButton
|
||||
@onready var _total_stars_label: Label = %TotalStarsLabel
|
||||
@onready var _collection_button: Button = %CollectionButton
|
||||
@onready var _profile_button: Button = %ProfileButton
|
||||
@onready var _guide: Control = %Guide
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
@@ -27,19 +29,19 @@ func _ready() -> void:
|
||||
_collection_button.pressed.connect(_on_collection_pressed)
|
||||
_profile_button.text = UIText.get_text("world_map.change_profile_button")
|
||||
_profile_button.pressed.connect(_on_change_profile_pressed)
|
||||
_map_area.resized.connect(_layout_markers)
|
||||
_guide.say(UIText.get_text("world_map.guide_hint"))
|
||||
_refresh()
|
||||
|
||||
|
||||
func _refresh() -> void:
|
||||
var title_key := "world_map.title_ce2" if _viewed_level == "CE2" else "world_map.title"
|
||||
_title_label.text = UIText.get_text(title_key)
|
||||
var toggle_key := (
|
||||
"world_map.review_ce1_button" if _viewed_level == "CE2" else "world_map.back_to_ce2_button"
|
||||
)
|
||||
_level_toggle_button.text = UIText.get_text(toggle_key)
|
||||
_total_stars_label.text = (
|
||||
"%s %d" % [UIText.get_text("world_map.total_stars_label"), ProgressManager.stars()]
|
||||
var is_ce2 := _viewed_level == "CE2"
|
||||
_backdrop.kind = "marsh" if is_ce2 else "forest"
|
||||
_title_label.text = UIText.get_text("world_map.title_ce2" if is_ce2 else "world_map.title")
|
||||
_level_toggle_button.text = UIText.get_text(
|
||||
"world_map.review_ce1_button" if is_ce2 else "world_map.back_to_ce2_button"
|
||||
)
|
||||
_total_stars_label.text = str(ProgressManager.stars())
|
||||
_populate_missions()
|
||||
|
||||
|
||||
@@ -48,8 +50,64 @@ func _populate_missions() -> void:
|
||||
_map_area.remove_child(child)
|
||||
child.queue_free()
|
||||
|
||||
var index := 0
|
||||
for mission: Dictionary in ExerciseEngine.get_missions_for_level(_viewed_level):
|
||||
_map_area.add_child(_build_marker(mission))
|
||||
var marker: Button = MARKER_SCENE.instantiate()
|
||||
_map_area.add_child(marker)
|
||||
marker.set_meta("map_position", mission["map_position"])
|
||||
marker.setup(
|
||||
mission,
|
||||
ProgressManager.mission_best_stars(mission["mission_id"]),
|
||||
MissionScoring.MAX_STARS,
|
||||
_status_label_for(mission)
|
||||
)
|
||||
marker.pressed.connect(_on_mission_pressed.bind(mission["mission_id"]))
|
||||
Motion.pop_in(marker, 0.04 * index)
|
||||
index += 1
|
||||
_layout_markers()
|
||||
|
||||
|
||||
## Replace chaque lieu selon sa position fractionnelle. Les positions du
|
||||
## niveau affiche sont etalees sur toute la zone (la plus petite colle au
|
||||
## bord, la plus grande au bord oppose) : les lieux restent entierement
|
||||
## visibles et ne se chevauchent pas, quelle que soit la taille de la fenetre.
|
||||
func _layout_markers() -> void:
|
||||
var markers: Array[Control] = []
|
||||
var low := Vector2(INF, INF)
|
||||
var high := Vector2(-INF, -INF)
|
||||
for child in _map_area.get_children():
|
||||
var control := child as Control
|
||||
if control == null or not control.has_meta("map_position"):
|
||||
continue
|
||||
var fraction: Dictionary = control.get_meta("map_position")
|
||||
var point := Vector2(float(fraction["x"]), float(fraction["y"]))
|
||||
low = Vector2(minf(low.x, point.x), minf(low.y, point.y))
|
||||
high = Vector2(maxf(high.x, point.x), maxf(high.y, point.y))
|
||||
markers.append(control)
|
||||
|
||||
for control in markers:
|
||||
var fraction: Dictionary = control.get_meta("map_position")
|
||||
var free_space := _map_area.size - control.size
|
||||
control.position = Vector2(
|
||||
_spread(float(fraction["x"]), low.x, high.x) * maxf(free_space.x, 0.0),
|
||||
_spread(float(fraction["y"]), low.y, high.y) * maxf(free_space.y, 0.0)
|
||||
)
|
||||
|
||||
|
||||
func _spread(value: float, low: float, high: float) -> float:
|
||||
if high - low < 0.0001:
|
||||
return 0.5
|
||||
return (value - low) / (high - low)
|
||||
|
||||
|
||||
func _status_label_for(mission: Dictionary) -> String:
|
||||
var rule: Dictionary = ExerciseEngine.get_rule(mission["rule_id"])
|
||||
var skill_id: String = rule.get("skill", "")
|
||||
var skill_state := ProgressManager.get_skill_state(skill_id)
|
||||
var status: String = skill_state["status"]
|
||||
if status == "decouverte":
|
||||
return ""
|
||||
return UIText.get_text("world_map.status_%s" % status)
|
||||
|
||||
|
||||
## Revient au choix du profil sans rien perdre : la progression est ecrite
|
||||
@@ -68,44 +126,6 @@ func _on_level_toggle_pressed() -> void:
|
||||
_refresh()
|
||||
|
||||
|
||||
func _build_marker(mission: Dictionary) -> Control:
|
||||
var button := Button.new()
|
||||
button.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
|
||||
button.text = (
|
||||
"%s\n%s\n%s %d/%d"
|
||||
% [
|
||||
mission["title"],
|
||||
_status_label_for(mission),
|
||||
UIText.get_text("world_map.mission_stars_label"),
|
||||
ProgressManager.mission_best_stars(mission["mission_id"]),
|
||||
MissionScoring.MAX_STARS,
|
||||
]
|
||||
)
|
||||
|
||||
var map_position: Dictionary = mission["map_position"]
|
||||
var x: float = map_position["x"]
|
||||
var y: float = map_position["y"]
|
||||
button.anchor_left = x
|
||||
button.anchor_right = x
|
||||
button.anchor_top = y
|
||||
button.anchor_bottom = y
|
||||
button.offset_left = -MARKER_HALF_WIDTH
|
||||
button.offset_right = MARKER_HALF_WIDTH
|
||||
button.offset_top = -MARKER_HALF_HEIGHT
|
||||
button.offset_bottom = MARKER_HALF_HEIGHT
|
||||
|
||||
button.pressed.connect(_on_mission_pressed.bind(mission["mission_id"]))
|
||||
return button
|
||||
|
||||
|
||||
func _status_label_for(mission: Dictionary) -> String:
|
||||
var rule: Dictionary = ExerciseEngine.get_rule(mission["rule_id"])
|
||||
var skill_id: String = rule.get("skill", "")
|
||||
var skill_state := ProgressManager.get_skill_state(skill_id)
|
||||
var status: String = skill_state["status"]
|
||||
return UIText.get_text("world_map.status_%s" % status)
|
||||
|
||||
|
||||
func _on_mission_pressed(mission_id: String) -> void:
|
||||
GameManager.pending_mission_id = mission_id
|
||||
GameManager.goto(GameManager.SCENE_MISSION_INTRO)
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
[gd_scene load_steps=3 format=3]
|
||||
[gd_scene load_steps=5 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/world/world_map.gd" id="1"]
|
||||
[ext_resource type="PackedScene" path="res://scenes/characters/guide_owl.tscn" id="2"]
|
||||
[ext_resource type="PackedScene" path="res://scenes/ui/backdrop.tscn" id="backdrop"]
|
||||
[ext_resource type="Texture2D" path="res://assets/interface/star_full.svg" id="3"]
|
||||
|
||||
[node name="WorldMap" type="Control"]
|
||||
layout_mode = 3
|
||||
@@ -12,55 +14,89 @@ grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1")
|
||||
|
||||
[node name="Background" type="ColorRect" parent="."]
|
||||
[node name="Backdrop" parent="." instance=ExtResource("backdrop")]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0.3, 0.52, 0.33, 1)
|
||||
|
||||
[node name="VBox" type="VBoxContainer" parent="."]
|
||||
[node name="Margin" type="MarginContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_constants/margin_left = 20
|
||||
theme_override_constants/margin_top = 14
|
||||
theme_override_constants/margin_right = 20
|
||||
theme_override_constants/margin_bottom = 10
|
||||
|
||||
[node name="VBox" type="VBoxContainer" parent="Margin"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 8
|
||||
|
||||
[node name="TopBar" type="HBoxContainer" parent="Margin/VBox"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 12
|
||||
|
||||
[node name="TitleLabel" type="Label" parent="VBox"]
|
||||
[node name="ProfileButton" type="Button" parent="Margin/VBox/TopBar"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"SecondaryButton"
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 32
|
||||
custom_minimum_size = Vector2(0, 52)
|
||||
|
||||
[node name="TitleLabel" type="Label" parent="Margin/VBox/TopBar"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"HeaderTitle"
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="TotalStarsLabel" type="Label" parent="VBox"]
|
||||
[node name="StarsBadge" type="PanelContainer" parent="Margin/VBox/TopBar"]
|
||||
theme_type_variation = &"Pill"
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Row" type="HBoxContainer" parent="Margin/VBox/TopBar/StarsBadge"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="StarIcon" type="TextureRect" parent="Margin/VBox/TopBar/StarsBadge/Row"]
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(34, 34)
|
||||
size_flags_vertical = 4
|
||||
texture = ExtResource("3")
|
||||
expand_mode = 1
|
||||
stretch_mode = 5
|
||||
|
||||
[node name="TotalStarsLabel" type="Label" parent="Margin/VBox/TopBar/StarsBadge/Row"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"Emphasis"
|
||||
layout_mode = 2
|
||||
|
||||
[node name="CollectionButton" type="Button" parent="Margin/VBox/TopBar"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 1
|
||||
custom_minimum_size = Vector2(0, 52)
|
||||
|
||||
[node name="MapArea" type="Control" parent="VBox"]
|
||||
[node name="MapArea" type="Control" parent="Margin/VBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="LevelToggleButton" type="Button" parent="VBox"]
|
||||
unique_name_in_owner = true
|
||||
[node name="BottomBar" type="HBoxContainer" parent="Margin/VBox"]
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(0, 48)
|
||||
theme_override_constants/separation = 12
|
||||
|
||||
[node name="CollectionButton" type="Button" parent="VBox"]
|
||||
[node name="Guide" type="Control" parent="Margin/VBox/BottomBar" instance=ExtResource("2")]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(0, 48)
|
||||
|
||||
[node name="ProfileButton" type="Button" parent="VBox"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(0, 48)
|
||||
|
||||
[node name="Guide" type="Control" parent="VBox" instance=ExtResource("2")]
|
||||
[node name="LevelToggleButton" type="Button" parent="Margin/VBox/BottomBar"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"SecondaryButton"
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 4
|
||||
custom_minimum_size = Vector2(0, 52)
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
class_name ItemIcons
|
||||
extends RefCounted
|
||||
## Illustration d'un objet de la collection, resolue par identifiant dans un
|
||||
## repertoire fixe (CLAUDE.md : jamais de chemin libre dans les donnees). Un
|
||||
## objet sans illustration retombe sur un cadenas : jamais d'erreur a l'ecran.
|
||||
|
||||
const ITEM_DIR := "res://assets/interface/items"
|
||||
const FALLBACK := "res://assets/interface/icon_locked.svg"
|
||||
const LOCKED := "res://assets/interface/icon_locked.svg"
|
||||
|
||||
|
||||
static func texture_for(item_id: String) -> Texture2D:
|
||||
var path := "%s/%s.svg" % [ITEM_DIR, item_id]
|
||||
if ResourceLoader.exists(path):
|
||||
return load(path)
|
||||
return load(FALLBACK)
|
||||
|
||||
|
||||
static func locked_texture() -> Texture2D:
|
||||
return load(LOCKED)
|
||||
@@ -0,0 +1 @@
|
||||
uid://b4y5au3wsxe00
|
||||
@@ -0,0 +1,26 @@
|
||||
class_name Motion
|
||||
extends RefCounted
|
||||
## Petites animations d'interface (apparition, rebond). Toutes respectent le
|
||||
## reglage d'animations (cahier des charges §11 : possibilite de les
|
||||
## desactiver) : elles ne font alors rien et l'element est affiche tel quel.
|
||||
|
||||
|
||||
## Fait grossir `node` depuis rien avec un leger rebond.
|
||||
static func pop_in(node: Control, delay: float = 0.0) -> void:
|
||||
if not SettingsManager.animations_enabled:
|
||||
return
|
||||
node.scale = Vector2.ZERO
|
||||
await node.get_tree().process_frame
|
||||
node.pivot_offset = node.size / 2.0
|
||||
var tween := node.create_tween()
|
||||
tween.set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT)
|
||||
tween.tween_property(node, "scale", Vector2.ONE, 0.4).set_delay(delay)
|
||||
|
||||
|
||||
## Fait apparaitre `node` en fondu.
|
||||
static func fade_in(node: CanvasItem, duration: float = 0.25) -> void:
|
||||
if not SettingsManager.animations_enabled:
|
||||
return
|
||||
node.modulate.a = 0.0
|
||||
var tween := node.create_tween()
|
||||
tween.tween_property(node, "modulate:a", 1.0, duration)
|
||||
@@ -0,0 +1 @@
|
||||
uid://bjlpq2eeaynf2
|
||||
@@ -0,0 +1 @@
|
||||
uid://bgjhnrqowck7h
|
||||
@@ -83,5 +83,10 @@ func test_collection_lists_owned_and_mysterious_items() -> void:
|
||||
|
||||
var rows := collection.get_node("%ItemsBox").get_children()
|
||||
assert_eq(rows.size(), ExerciseEngine.get_reward_items().size())
|
||||
assert_string_contains((rows[0] as Label).text, "Graine magique")
|
||||
assert_string_contains((rows[1] as Label).text, UIText.get_text("collection.locked_title"))
|
||||
assert_string_contains(
|
||||
(rows[0].find_child("TextLabel", true, false) as Label).text, "Graine magique"
|
||||
)
|
||||
assert_string_contains(
|
||||
(rows[1].find_child("TextLabel", true, false) as Label).text,
|
||||
UIText.get_text("collection.locked_title")
|
||||
)
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
extends SceneTree
|
||||
## Outil de developpement : charge une scene, attend quelques images puis
|
||||
## enregistre le rendu en PNG. Usage (fenetre reelle, pas --headless) :
|
||||
## godot --path . --resolution 1152x648 -s res://tools/screenshot.gd -- \
|
||||
## res://scenes/world/world_map.tscn out.png [CE1|CE2] [mission_id]
|
||||
## Cree un profil temporaire pour que les scenes qui lisent la progression
|
||||
## fonctionnent, puis le supprime.
|
||||
|
||||
|
||||
func _initialize() -> void:
|
||||
var args := OS.get_cmdline_user_args()
|
||||
var scene_path: String = args[0]
|
||||
var out_path: String = args[1]
|
||||
var level: String = args[2] if args.size() > 2 else "CE1"
|
||||
|
||||
var profiles: Node = root.get_node("ProfileManager")
|
||||
var game: Node = root.get_node("GameManager")
|
||||
var profile_id: String = profiles.call("create_profile", "Capture", level)
|
||||
profiles.call("select_profile", profile_id)
|
||||
if args.size() > 3:
|
||||
game.set("pending_mission_id", args[3])
|
||||
|
||||
for arg in args:
|
||||
if arg.begins_with("outcomes:"):
|
||||
var typed: Array[String] = []
|
||||
for part in arg.trim_prefix("outcomes:").split(","):
|
||||
typed.append(part)
|
||||
game.set("last_outcomes", typed)
|
||||
|
||||
var scene: Node = load(scene_path).instantiate()
|
||||
root.add_child(scene)
|
||||
for i in 5:
|
||||
await process_frame
|
||||
# Actions optionnelles sur exercise_host, a partir du 5e argument :
|
||||
# continue_rule | answer:<index> | toggle:<index> | type:<texte> | validate
|
||||
# | continue_feedback
|
||||
for action in args.slice(4):
|
||||
if action.begins_with("outcomes:"):
|
||||
continue
|
||||
await _run_action(scene, action)
|
||||
for i in 5:
|
||||
await process_frame
|
||||
for i in 90:
|
||||
await process_frame
|
||||
var image := root.get_texture().get_image()
|
||||
image.save_png(out_path)
|
||||
profiles.call("delete_profile", profile_id)
|
||||
quit(0)
|
||||
|
||||
|
||||
func _run_action(scene: Node, action: String) -> void:
|
||||
var overlay: Node = scene.get_node("%OverlayContainer")
|
||||
var exercise: Node = scene.get_node("%ExerciseContainer").get_child(0) if scene.get_node("%ExerciseContainer").get_child_count() > 0 else null
|
||||
var parts := action.split(":", true, 1)
|
||||
match parts[0]:
|
||||
"continue_rule":
|
||||
overlay.get_child(0).emit_signal("continued")
|
||||
"answer":
|
||||
exercise.emit_signal("answer_submitted", int(parts[1]))
|
||||
"toggle":
|
||||
exercise.get_node("%TokensBox").get_child(int(parts[1])).emit_signal("toggled", true)
|
||||
"type":
|
||||
var field: LineEdit = (
|
||||
exercise.get_node("%TextEdit")
|
||||
if exercise.has_node("%TextEdit")
|
||||
else exercise.get_node("%CorrectionsBox").get_child(0)
|
||||
)
|
||||
field.text = parts[1]
|
||||
"validate":
|
||||
exercise.get_node("%ValidateButton").emit_signal("pressed")
|
||||
"continue_feedback":
|
||||
overlay.get_child(overlay.get_child_count() - 1).get_node("%ContinueButton").emit_signal("pressed")
|
||||
@@ -0,0 +1 @@
|
||||
uid://su7hm1yepfuw
|
||||