diff --git a/attribution.txt b/attribution.txt index b00eb79..4debc2c 100644 --- a/attribution.txt +++ b/attribution.txt @@ -11,3 +11,13 @@ Beer by Serhii Smirnov from the Noun Project Caravel by Rahmat Hidayat from the Noun Project question mark by Icon Lauk from the Noun Project Hiking Trail by Weltenraser from the Noun Project +coin by Michele Zamparo from the Noun Project +Carving Tools by Coby Graphics from the Noun Project +Ink by MRK from the Noun Project +deed by Vectors Point from the Noun Project +Diamond by Dika Darma from the Noun Project +Crown by icon 54 from the Noun Project +life by Gregor Cresnar from the Noun Project +Art by Econceptive from the Noun Project +potion by Brianna Reed from the Noun Project +Ancient Egyptian religion by Dabid J. Pascual from the Noun Project diff --git a/questhelper/map/map_renderer.py b/questhelper/map/map_renderer.py index 6c6c01b..37c7258 100644 --- a/questhelper/map/map_renderer.py +++ b/questhelper/map/map_renderer.py @@ -1,8 +1,10 @@ import dataclasses -from map.quest_map import MapEncounter, QuestMap, EncounterType, QuestPath +from map.quest_map import MapEncounter, QuestMap, EncounterType, QuestPath, BattleEncounter -from typing import List, Dict, Optional +from typing import List, Optional + +from map.treasure_hoard import TreasureType, Treasure _ENCOUNTER_ICONS = { EncounterType.BATTLE_REGULAR: 'noun_Battle_3647629_cropped.png', @@ -12,7 +14,7 @@ _ENCOUNTER_ICONS = { EncounterType.TOWN_DOCKS: 'noun_Caravel_2421659_cropped.png', EncounterType.TOWN_MARKET: 'noun_Store_786819_cropped.png', EncounterType.TOWN_LIBRARY: 'noun_Library_3820590_cropped.png', - EncounterType.TOWN_WORKSHOP: 'noun_cogs_442166_cropped.png', + EncounterType.TOWN_WORKSHOP: 'noun_Carving Tools_693475_cropped.png', EncounterType.TOWN_TOWN_HALL: 'noun_brussels town hall_3284349_cropped.png', EncounterType.TOWN_TEMPLE: 'noun_temple_2382601_cropped.png', EncounterType.TOWN_REST: 'noun_Tent_3814999_cropped.png', @@ -27,6 +29,20 @@ _PATH_ICONS = { } +_TREASURE_ICONS = { + TreasureType.GOLD: 'noun_coin_48892_cropped.png', + TreasureType.INK: 'noun_Ink_2509717_cropped.png', + TreasureType.COG: 'noun_cogs_442166_cropped.png', + TreasureType.DEED: 'noun_deed_3309438_cropped.png', + TreasureType.ART_OBJECT: 'noun_Art_3410337_cropped.png', + TreasureType.GEMS: 'noun_Diamond_3820185_cropped.png', + TreasureType.CONSUMABLE: 'noun_potion_34882_cropped.png', + TreasureType.NOBILITY_TITLE: 'noun_Crown_1936588_cropped.png', + TreasureType.LIFE: 'noun_life_3553107_cropped.png', + TreasureType.RELIC: 'noun_Ancient Egyptian religion_248077_cropped.png', +} + + @dataclasses.dataclass(frozen=True) class RenderedElement: description: str @@ -35,6 +51,14 @@ class RenderedElement: y: int w: int h: int + secondary: Optional['SecondaryRenderedElement'] = None + + +@dataclasses.dataclass(frozen=True) +class SecondaryRenderedElement(RenderedElement): + text: str = None + text_x: int = None + text_y: int = None @dataclasses.dataclass(frozen=True) @@ -73,34 +97,46 @@ def render_map(quest_map: QuestMap) -> RenderedMap: return RenderedMap(rendered_encounters, rendered_paths) +_LEFT = 20 +_TOP = 20 _ENCOUNTER_W = 40 _ENCOUNTER_H = 40 _ARROW_W = 40 _ARROW_H = 20 -_PADDING_W = 10 -_PADDING_V = 5 +_PADDING_W = 15 +_PADDING_V = 10 _ENCOUNTER_COLUMN_W = _ENCOUNTER_W + _PADDING_W _PATH_COLUMN_W = _ARROW_W + _PADDING_W _COLUMN_W = _ENCOUNTER_COLUMN_W + _PATH_COLUMN_W _ROW_H = _ENCOUNTER_H + _PADDING_V + _ARROW_H + _PADDING_V +_SECONDARY_W = 24 +_SECONDARY_H = 24 +_SECONDARY_PADDING = 6 + def _render_encounter(r: int, c: int, encounter: MapEncounter) -> Optional[RenderedEncounter]: if encounter.type == EncounterType.INACCESSIBLE: return None icon = f'map/{_ENCOUNTER_ICONS[encounter.type]}' - x = _COLUMN_W * c - y = _ROW_H * r + x = _LEFT + _COLUMN_W * c + y = _TOP + _ROW_H * r w = _ENCOUNTER_W h = _ENCOUNTER_H + if isinstance(encounter, BattleEncounter): + x -= (_SECONDARY_PADDING + _SECONDARY_W) / 2 + secondary = _render_battle_encounter_secondary_info(encounter, x, y, w, h) + else: + secondary = None return RenderedEncounter( description=encounter.description, src=icon, x=x, y=y, w=w, - h=h + h=h, + secondary=secondary ) @@ -109,8 +145,8 @@ def _render_path(r: int, c: int, path: QuestPath) -> Optional[RenderedPath]: return None icon = f'map/{_PATH_ICONS[path]}' - x = _ENCOUNTER_COLUMN_W * ((c + 1) // 2) + _PATH_COLUMN_W * (c // 2) - y = (_ENCOUNTER_H + _PADDING_V) + _ROW_H * r + x = _LEFT + _ENCOUNTER_COLUMN_W * ((c + 1) // 2) + _PATH_COLUMN_W * (c // 2) + y = _TOP + (_ENCOUNTER_H + _PADDING_V) + _ROW_H * r w = _ARROW_W h = _ARROW_H return RenderedPath( @@ -119,5 +155,21 @@ def _render_path(r: int, c: int, path: QuestPath) -> Optional[RenderedPath]: x=x, y=y, w=w, - h=h + h=h, + ) + + +def _render_battle_encounter_secondary_info(encounter: BattleEncounter, x, y, w, h) -> Optional[RenderedElement]: + treasure: Treasure = encounter.treasure_hoard.revealed + return SecondaryRenderedElement( + description=encounter.treasure_hoard.description, + src = f'map/{_TREASURE_ICONS[treasure.treasure_type]}', + x=x + w + _SECONDARY_PADDING, + y=y, + w=_SECONDARY_W, + h=_SECONDARY_H, + secondary=None, + text=treasure.amount, + text_x=x + w + _SECONDARY_PADDING, + text_y=y + _SECONDARY_H ) diff --git a/questhelper/map/static/map/noun_Ancient Egyptian religion_248077.png b/questhelper/map/static/map/noun_Ancient Egyptian religion_248077.png new file mode 100644 index 0000000..c6e559c Binary files /dev/null and b/questhelper/map/static/map/noun_Ancient Egyptian religion_248077.png differ diff --git a/questhelper/map/static/map/noun_Ancient Egyptian religion_248077_cropped.png b/questhelper/map/static/map/noun_Ancient Egyptian religion_248077_cropped.png new file mode 100644 index 0000000..a459a2c Binary files /dev/null and b/questhelper/map/static/map/noun_Ancient Egyptian religion_248077_cropped.png differ diff --git a/questhelper/map/static/map/noun_Art_3410337.png b/questhelper/map/static/map/noun_Art_3410337.png new file mode 100644 index 0000000..849cfbc Binary files /dev/null and b/questhelper/map/static/map/noun_Art_3410337.png differ diff --git a/questhelper/map/static/map/noun_Art_3410337_cropped.png b/questhelper/map/static/map/noun_Art_3410337_cropped.png new file mode 100644 index 0000000..5567938 Binary files /dev/null and b/questhelper/map/static/map/noun_Art_3410337_cropped.png differ diff --git a/questhelper/map/static/map/noun_Carving Tools_693475.png b/questhelper/map/static/map/noun_Carving Tools_693475.png new file mode 100644 index 0000000..bd37aa5 Binary files /dev/null and b/questhelper/map/static/map/noun_Carving Tools_693475.png differ diff --git a/questhelper/map/static/map/noun_Carving Tools_693475_cropped.png b/questhelper/map/static/map/noun_Carving Tools_693475_cropped.png new file mode 100644 index 0000000..1efe134 Binary files /dev/null and b/questhelper/map/static/map/noun_Carving Tools_693475_cropped.png differ diff --git a/questhelper/map/static/map/noun_Crown_1936588.png b/questhelper/map/static/map/noun_Crown_1936588.png new file mode 100644 index 0000000..00ccbc0 Binary files /dev/null and b/questhelper/map/static/map/noun_Crown_1936588.png differ diff --git a/questhelper/map/static/map/noun_Crown_1936588_cropped.png b/questhelper/map/static/map/noun_Crown_1936588_cropped.png new file mode 100644 index 0000000..3ea5973 Binary files /dev/null and b/questhelper/map/static/map/noun_Crown_1936588_cropped.png differ diff --git a/questhelper/map/static/map/noun_Diamond_3820185.png b/questhelper/map/static/map/noun_Diamond_3820185.png new file mode 100644 index 0000000..d48bdaf Binary files /dev/null and b/questhelper/map/static/map/noun_Diamond_3820185.png differ diff --git a/questhelper/map/static/map/noun_Diamond_3820185_cropped.png b/questhelper/map/static/map/noun_Diamond_3820185_cropped.png new file mode 100644 index 0000000..fba6d96 Binary files /dev/null and b/questhelper/map/static/map/noun_Diamond_3820185_cropped.png differ diff --git a/questhelper/map/static/map/noun_Ink_2509717.png b/questhelper/map/static/map/noun_Ink_2509717.png new file mode 100644 index 0000000..4646f6e Binary files /dev/null and b/questhelper/map/static/map/noun_Ink_2509717.png differ diff --git a/questhelper/map/static/map/noun_Ink_2509717_cropped.png b/questhelper/map/static/map/noun_Ink_2509717_cropped.png new file mode 100644 index 0000000..01a5687 Binary files /dev/null and b/questhelper/map/static/map/noun_Ink_2509717_cropped.png differ diff --git a/questhelper/map/static/map/noun_coin_48892.png b/questhelper/map/static/map/noun_coin_48892.png new file mode 100644 index 0000000..7c226d3 Binary files /dev/null and b/questhelper/map/static/map/noun_coin_48892.png differ diff --git a/questhelper/map/static/map/noun_coin_48892_cropped.png b/questhelper/map/static/map/noun_coin_48892_cropped.png new file mode 100644 index 0000000..e14dfc6 Binary files /dev/null and b/questhelper/map/static/map/noun_coin_48892_cropped.png differ diff --git a/questhelper/map/static/map/noun_deed_3309438.png b/questhelper/map/static/map/noun_deed_3309438.png new file mode 100644 index 0000000..f2d3a14 Binary files /dev/null and b/questhelper/map/static/map/noun_deed_3309438.png differ diff --git a/questhelper/map/static/map/noun_deed_3309438_cropped.png b/questhelper/map/static/map/noun_deed_3309438_cropped.png new file mode 100644 index 0000000..6a6a649 Binary files /dev/null and b/questhelper/map/static/map/noun_deed_3309438_cropped.png differ diff --git a/questhelper/map/static/map/noun_life_3553107.png b/questhelper/map/static/map/noun_life_3553107.png new file mode 100644 index 0000000..1097367 Binary files /dev/null and b/questhelper/map/static/map/noun_life_3553107.png differ diff --git a/questhelper/map/static/map/noun_life_3553107_cropped.png b/questhelper/map/static/map/noun_life_3553107_cropped.png new file mode 100644 index 0000000..e2fe13a Binary files /dev/null and b/questhelper/map/static/map/noun_life_3553107_cropped.png differ diff --git a/questhelper/map/static/map/noun_potion_34882.png b/questhelper/map/static/map/noun_potion_34882.png new file mode 100644 index 0000000..11cd1d8 Binary files /dev/null and b/questhelper/map/static/map/noun_potion_34882.png differ diff --git a/questhelper/map/static/map/noun_potion_34882_cropped.png b/questhelper/map/static/map/noun_potion_34882_cropped.png new file mode 100644 index 0000000..2ca4b0b Binary files /dev/null and b/questhelper/map/static/map/noun_potion_34882_cropped.png differ diff --git a/questhelper/map/templates/map/index.html b/questhelper/map/templates/map/index.html index 0ed830f..45a5690 100644 --- a/questhelper/map/templates/map/index.html +++ b/questhelper/map/templates/map/index.html @@ -11,6 +11,19 @@ style="position: absolute; left: {{e.x}}; top: {{e.y}};" width="{{e.w}}" height="{{e.h}}"> + {% if e.secondary %} + {% with s=e.secondary %} + {{s.description}} +
+ {{s.text}} +
+ {% endwith %} + {% endif %} {% endfor %} {% for e in map.paths %}