yaze 0.2.0
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
entity.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EDITOR_OVERWORLD_ENTITY_H
2#define YAZE_APP_EDITOR_OVERWORLD_ENTITY_H
3
4#include "imgui/imgui.h"
5
7#include "app/zelda3/common.h"
9
10namespace yaze {
11namespace app {
12namespace editor {
13
14bool IsMouseHoveringOverEntity(const zelda3::GameEntity &entity,
15 ImVec2 canvas_p0, ImVec2 scrolling);
16
17void MoveEntityOnGrid(zelda3::GameEntity *entity, ImVec2 canvas_p0,
18 ImVec2 scrolling, bool free_movement = false);
19
20void HandleEntityDragging(zelda3::GameEntity *entity, ImVec2 canvas_p0,
21 ImVec2 scrolling, bool &is_dragging_entity,
22 zelda3::GameEntity *&dragged_entity,
23 zelda3::GameEntity *&current_entity,
24 bool free_movement = false);
25
27bool DrawOverworldEntrancePopup(zelda3::overworld::OverworldEntrance &entrance);
28
30bool DrawExitEditorPopup(zelda3::overworld::OverworldExit &exit);
31
33
34bool DrawItemEditorPopup(zelda3::overworld::OverworldItem &item);
35
43
44struct SpriteItem {
45 int id;
46 const char *name;
47 static const ImGuiTableSortSpecs *s_current_sort_specs;
48
49 static void SortWithSortSpecs(ImGuiTableSortSpecs *sort_specs,
50 std::vector<SpriteItem> &items) {
52 sort_specs; // Store for access by the compare function.
53 if (items.size() > 1)
54 std::sort(items.begin(), items.end(), SpriteItem::CompareWithSortSpecs);
55 s_current_sort_specs = nullptr;
56 }
57
58 static bool CompareWithSortSpecs(const SpriteItem &a, const SpriteItem &b) {
59 for (int n = 0; n < s_current_sort_specs->SpecsCount; n++) {
60 const ImGuiTableColumnSortSpecs *sort_spec =
61 &s_current_sort_specs->Specs[n];
62 int delta = 0;
63 switch (sort_spec->ColumnUserID) {
65 delta = (a.id - b.id);
66 break;
68 delta = strcmp(a.name + 2, b.name + 2);
69 break;
70 }
71 if (delta != 0)
72 return (sort_spec->SortDirection == ImGuiSortDirection_Ascending)
73 ? delta < 0
74 : delta > 0;
75 }
76 return a.id < b.id; // Fallback
77 }
78};
79
80void DrawSpriteTable(std::function<void(int)> onSpriteSelect);
83
84} // namespace editor
85} // namespace app
86} // namespace yaze
87
88#endif // YAZE_APP_EDITOR_OVERWORLD_ENTITY_H
A class for managing sprites in the overworld and underworld.
Definition sprite.h:285
void DrawSpriteInserterPopup()
Definition entity.cc:429
bool IsMouseHoveringOverEntity(const zelda3::GameEntity &entity, ImVec2 canvas_p0, ImVec2 scrolling)
Definition entity.cc:19
bool DrawEntranceInserterPopup()
Definition entity.cc:103
bool DrawExitEditorPopup(zelda3::overworld::OverworldExit &exit)
Definition entity.cc:179
@ MyItemColumnID_Description
Definition entity.h:41
@ MyItemColumnID_Action
Definition entity.h:39
@ MyItemColumnID_Quantity
Definition entity.h:40
bool DrawOverworldEntrancePopup(zelda3::overworld::OverworldEntrance &entrance)
Definition entity.cc:128
bool DrawSpriteEditorPopup(zelda3::Sprite &sprite)
Definition entity.cc:453
void DrawItemInsertPopup()
Definition entity.cc:311
void DrawExitInserterPopup()
Definition entity.cc:161
void MoveEntityOnGrid(zelda3::GameEntity *entity, ImVec2 canvas_p0, ImVec2 scrolling, bool free_movement)
Definition entity.cc:34
void DrawSpriteTable(std::function< void(int)> onSpriteSelect)
Definition entity.cc:380
void HandleEntityDragging(zelda3::GameEntity *entity, ImVec2 canvas_p0, ImVec2 scrolling, bool &is_dragging_entity, zelda3::GameEntity *&dragged_entity, zelda3::GameEntity *&current_entity, bool free_movement)
Definition entity.cc:54
bool DrawItemEditorPopup(zelda3::overworld::OverworldItem &item)
Definition entity.cc:342
Definition common.cc:21
static const ImGuiTableSortSpecs * s_current_sort_specs
Definition entity.h:47
static bool CompareWithSortSpecs(const SpriteItem &a, const SpriteItem &b)
Definition entity.h:58
static void SortWithSortSpecs(ImGuiTableSortSpecs *sort_specs, std::vector< SpriteItem > &items)
Definition entity.h:49