|
|
|
@ -11,27 +11,36 @@ namespace lel { |
|
|
|
|
grid_x(x), |
|
|
|
|
grid_y(y), |
|
|
|
|
grid_w(width), |
|
|
|
|
grid_h(height), |
|
|
|
|
cur(0, 0) |
|
|
|
|
grid_h(height) |
|
|
|
|
{ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Parser::Parser() : cur(0, 0) { } |
|
|
|
|
|
|
|
|
|
void Parser::position(int x, int y, int width, int height) { |
|
|
|
|
grid_x = x; |
|
|
|
|
grid_y = y; |
|
|
|
|
grid_w = width; |
|
|
|
|
grid_h = height; |
|
|
|
|
|
|
|
|
|
// used in GUIs for setting backgrounds
|
|
|
|
|
main = { |
|
|
|
|
.x=grid_x, |
|
|
|
|
.y=grid_y, |
|
|
|
|
.w=grid_w, |
|
|
|
|
.h=grid_h, |
|
|
|
|
.mid_x=std::midpoint(grid_x, grid_x + grid_w), |
|
|
|
|
.mid_y=std::midpoint(grid_y, grid_y + grid_h), |
|
|
|
|
.max_w=grid_w, |
|
|
|
|
.max_h=grid_h |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void Parser::id(std::string name) { |
|
|
|
|
void Parser::id(const std::string& name) { |
|
|
|
|
if(name != "_") { |
|
|
|
|
assert(!cells.contains(name) && "duplicate cell name"); |
|
|
|
|
cells.insert_or_assign(name, cur); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
cur = {cur.col + 1, cur.row}; |
|
|
|
|
cur = {.col=cur.col + 1, .row=cur.row}; |
|
|
|
|
auto& row = grid.back(); |
|
|
|
|
row.push_back(name); |
|
|
|
|
} |
|
|
|
@ -87,15 +96,18 @@ namespace lel { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void Parser::reset() { |
|
|
|
|
cur = {0, 0}; |
|
|
|
|
cur = {.col=0, .row=0}; |
|
|
|
|
main = {.col=0, .row=0}; |
|
|
|
|
grid.clear(); |
|
|
|
|
cells.clear(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
std::optional<std::string> Parser::hit(int x, int y) { |
|
|
|
|
for(auto& [name, cell] : cells) { |
|
|
|
|
if((x >= cell.x && x <= cell.x + cell.w) && |
|
|
|
|
(y >= cell.y && y <= cell.y + cell.h)) { |
|
|
|
|
if(name != "_MAIN" && |
|
|
|
|
(x >= cell.x && x <= cell.x + cell.w) && |
|
|
|
|
(y >= cell.y && y <= cell.y + cell.h)) |
|
|
|
|
{ |
|
|
|
|
return name; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -106,6 +118,7 @@ namespace lel { |
|
|
|
|
Cell center(int width, int height, Cell &parent) { |
|
|
|
|
Cell copy = parent; |
|
|
|
|
|
|
|
|
|
// BUG: could I use std::midpoint here or am I even using this?
|
|
|
|
|
copy.x = parent.mid_x - width / 2; |
|
|
|
|
copy.y = parent.mid_y - height / 2; |
|
|
|
|
copy.w = width; |
|
|
|
|