Skip to content

Commit

Permalink
ECS attempt
Browse files Browse the repository at this point in the history
  • Loading branch information
Pierre Delaunay committed Mar 16, 2024
1 parent 47521ee commit 8ebc96a
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 35 deletions.
35 changes: 21 additions & 14 deletions src/tide/ast_input.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@ void ASTEditor::input(float dt) {
renderer.drawings.clear();
renderer.groups.clear();
renderer.edit_order.clear();
for(auto entity: renderer.entities) {
entity.destruct();
}
renderer.entities.clear();
renderer.cursor = renderer.start;
// renderer.run(module);
};
Expand All @@ -77,24 +81,24 @@ void ASTEditor::input(float dt) {
// this->input_buffer.pop_back();
if (this->index >= 0 && !renderer.edit_order.empty()) {
int idx = renderer.edit_order[this->index];
Group& group = renderer.groups[idx];
Group* group = renderer.groups[idx].get_mut<Group>();

if (group.backspace) {
group.backspace();
if (group->backspace) {
group->backspace();
}
}
});

if (this->index >= 0 && !renderer.edit_order.empty()) {
int idx = renderer.edit_order[this->index];
Group& group = renderer.groups[idx];
Group* group = renderer.groups[idx].get_mut<Group>();

if (io.InputQueueCharacters.Size > 0) {
for (int n = 0; n < io.InputQueueCharacters.Size; n++) {
unsigned int c = (unsigned int)io.InputQueueCharacters[n];
// input_buffer.push_back(c);
if (group.input) {
group.input(c);
if (group->input) {
group->input(c);
}
}
io.InputQueueCharacters.resize(0);
Expand Down Expand Up @@ -137,7 +141,8 @@ void ASTEditor::test() {
};

ImDrawList* drawlist = ImGui::GetWindowDrawList();
for (Group& group: renderer.groups) {
// for (Group* group: renderer.groups)
{

// drawlist->AddRect(group.rectangle.Min, group.rectangle.Max, ImColor(255, 255, 255), 0, 0,
// 1);
Expand All @@ -146,15 +151,17 @@ void ASTEditor::test() {
Group* body = nullptr;
Group* expr = nullptr;
int i = 0;
for (Group& group: renderer.groups) {
if (group.rectangle.Contains(pos)) {
if (group.body != nullptr) {
body = &group;
for (auto entity: renderer.groups) {
Group* group = entity.get_mut<Group>();

if (group->rectangle.Contains(pos)) {
if (group->body != nullptr) {
body = group;
break;
}

if (expr == nullptr) {
expr = &group;
expr = group;

if (ImGui::IsMouseClicked(ImGuiMouseButton_Left)) {
index = expr->edit_id;
Expand Down Expand Up @@ -318,7 +325,7 @@ void ASTEditor::draw(float dt) {
drawlist->AddRectFilled(pos, pos + size, ImColor(0, 0, 0), 0, 0);
}

Group* group = &renderer.groups[k];
Group* group = renderer.groups[k].get_mut<Group>();
ImGui::SetCursorPos(pos);
ImGui::Text("Group %3d (%3d:%2d) -> (%3d:%2d)",
group->id,
Expand All @@ -342,7 +349,7 @@ void ASTEditor::draw(float dt) {
if (renderer.edit_order.size() > 0) {
int idx = renderer.edit_order[clamp(index, 0, int(renderer.edit_order.size()) - 1)];
if (idx >= 0) {
Group* selected = &renderer.groups[clamp(idx, 0, int(renderer.groups.size()) - 1)];
Group* selected = renderer.groups[clamp(idx, 0, int(renderer.groups.size()) - 1)].get_mut<Group>();

drawlist->AddRect(
selected->rectangle.Min, selected->rectangle.Max, ImColor(255, 0, 0), 0, 0, 1);
Expand Down
22 changes: 14 additions & 8 deletions src/tide/ast_render.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,17 @@ void Drawing::input() {
}

Drawing* ASTRender::new_drawing() {
Drawing& drawing = drawings.emplace_back();
drawing.id = drawings.size();
drawing.style = style;
drawing.node = stack[stack.size() - 1];
return &drawing;
flecs::entity entity = get_ecs().entity().add<Drawing>();
entities.push_back(entity);

Drawing* drawing = entity.get_mut<Drawing>();
drawings.push_back(entity);

drawing->id = drawings.size();
drawing->style = style;
drawing->node = stack[stack.size() - 1];

return drawing;
}

Drawing* ASTRender::text(const char* name, ImColor color) {
Expand All @@ -91,9 +97,9 @@ Drawing* ASTRender::text(const char* name, ImColor color) {
}

void ASTRender::draw() {
for (auto& drawing: drawings) {
drawing.input();
drawing.draw();
for (flecs::entity& entity: drawings) {
entity.get_mut<Drawing>()->input();
entity.get_mut<Drawing>()->draw();
}
}

Expand Down
31 changes: 20 additions & 11 deletions src/tide/ast_render.h
Original file line number Diff line number Diff line change
Expand Up @@ -135,18 +135,27 @@ struct ASTRender: public BaseVisitor<ASTRender, false, ASTRenderTrait> {
int _indent = 0;
bool _redraw = false;

flecs::world ecs;
Array<Drawing> drawings;
Array<Group> groups;
Array<Node*> stack;
Array<int> edit_order;

flecs::world& get_ecs() {
static flecs::world ecs;
return ecs;
}
Array<flecs::entity> drawings;
Array<flecs::entity> groups;
Array<Node*> stack;
Array<int> edit_order;
Array<flecs::entity> entities;

Group* new_group() {
Group& grp = groups.emplace_back();
grp.id = int(groups.size());
flecs::entity entity = get_ecs().entity()
.add<Group>();

entities.push_back(entity);

flecs::entity newgrp = ecs.entity(grp.id);
return &grp;
Group* grp = entity.get_mut<Group>();
groups.push_back(entity);
grp->id = int(groups.size());
return grp;
}

Drawing* new_drawing();
Expand Down Expand Up @@ -187,11 +196,11 @@ struct ASTRender: public BaseVisitor<ASTRender, false, ASTRenderTrait> {
Group* group = new_group();
group->node = node;
int new_count = int(drawings.size());
group->rectangle = drawings[old_count].rectangle;
group->rectangle = drawings[old_count].get_mut<Drawing>()->rectangle;
group->edit_id = edit_entry;

for (int i = old_count; i < new_count; i++) {
group->rectangle.Add(drawings[i].rectangle);
group->rectangle.Add(drawings[i].get_mut<Drawing>()->rectangle);
}

edit_order[edit_entry] = group->id - 1;
Expand Down
4 changes: 2 additions & 2 deletions src/tide/ast_render_visitor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,9 @@ LY_ReturnType ASTRender::render_body(Array<StmtNode*> & body, int depth, bool pr
my_group->body = &body;
my_group->edit_id = edit_entry;
int new_count = drawings.size();
my_group->rectangle = drawings[old_count].rectangle;
my_group->rectangle = drawings[old_count].get_mut<Drawing>()->rectangle;
for (int i = old_count; i < new_count; i++) {
my_group->rectangle.Add(drawings[i].rectangle);
my_group->rectangle.Add(drawings[i].get_mut<Drawing>()->rectangle);
}

edit_order[edit_entry] = my_group->id - 1;
Expand Down

0 comments on commit 8ebc96a

Please sign in to comment.