yaze 0.2.2
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 "app/zelda3/common.h"
9#include "imgui/imgui.h"
10
11namespace yaze {
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::OverworldEntrance &entrance);
28
30bool DrawExitEditorPopup(zelda3::OverworldExit &exit);
31
33
34bool DrawItemEditorPopup(zelda3::OverworldItem &item);
35
45
46struct SpriteItem {
47 int id;
48 const char *name;
49 static const ImGuiTableSortSpecs *s_current_sort_specs;
50
51 static void SortWithSortSpecs(ImGuiTableSortSpecs *sort_specs,
52 std::vector<SpriteItem> &items) {
54 sort_specs; // Store for access by the compare function.
55 if (items.size() > 1)
56 std::sort(items.begin(), items.end(), SpriteItem::CompareWithSortSpecs);
57 s_current_sort_specs = nullptr;
58 }
59
60 static bool CompareWithSortSpecs(const SpriteItem &a, const SpriteItem &b) {
61 for (int n = 0; n < s_current_sort_specs->SpecsCount; n++) {
62 const ImGuiTableColumnSortSpecs *sort_spec =
63 &s_current_sort_specs->Specs[n];
64 int delta = 0;
65 switch (sort_spec->ColumnUserID) {
67 delta = (a.id - b.id);
68 break;
70 delta = strcmp(a.name + 2, b.name + 2);
71 break;
72 }
73 if (delta != 0)
74 return (sort_spec->SortDirection == ImGuiSortDirection_Ascending)
75 ? delta < 0
76 : delta > 0;
77 }
78 return a.id < b.id; // Fallback
79 }
80};
81
82void DrawSpriteTable(std::function<void(int)> onSpriteSelect);
85
86} // namespace editor
87} // namespace yaze
88
89#endif // YAZE_APP_EDITOR_OVERWORLD_ENTITY_H
A class for managing sprites in the overworld and underworld.
Definition sprite.h:279
Editors are the view controllers for the application.
void DrawExitInserterPopup()
Definition entity.cc:162
void MoveEntityOnGrid(zelda3::GameEntity *entity, ImVec2 canvas_p0, ImVec2 scrolling, bool free_movement)
Definition entity.cc:36
bool DrawSpriteEditorPopup(zelda3::Sprite &sprite)
Definition entity.cc:458
void DrawItemInsertPopup()
Definition entity.cc:312
bool DrawEntranceInserterPopup()
Definition entity.cc:105
void DrawSpriteInserterPopup()
Definition entity.cc:428
void DrawSpriteTable(std::function< void(int)> onSpriteSelect)
Definition entity.cc:379
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:56
bool DrawOverworldEntrancePopup(zelda3::OverworldEntrance &entrance)
Definition entity.cc:130
bool IsMouseHoveringOverEntity(const zelda3::GameEntity &entity, ImVec2 canvas_p0, ImVec2 scrolling)
Definition entity.cc:21
bool DrawItemEditorPopup(zelda3::OverworldItem &item)
Definition entity.cc:342
SpriteItemColumnID
Column IDs for the sprite table.
Definition entity.h:40
@ SpriteItemColumnID_ID
Definition entity.h:41
@ SpriteItemColumnID_Name
Definition entity.h:42
@ SpriteItemColumnID_Description
Definition entity.h:43
bool DrawExitEditorPopup(zelda3::OverworldExit &exit)
Definition entity.cc:180
Main namespace for the application.
Definition controller.cc:12
static const ImGuiTableSortSpecs * s_current_sort_specs
Definition entity.h:49
static bool CompareWithSortSpecs(const SpriteItem &a, const SpriteItem &b)
Definition entity.h:60
static void SortWithSortSpecs(ImGuiTableSortSpecs *sort_specs, std::vector< SpriteItem > &items)
Definition entity.h:51
const char * name
Definition entity.h:48