changes to the menu map
This commit is contained in:
@@ -5,7 +5,10 @@
|
||||
namespace ckitty::terminal {
|
||||
|
||||
MenuMap::MenuMap(int width, int height)
|
||||
: _w(width), _h(height), _grid(size_t(width * height), 0) {
|
||||
: _w(width), _h(height),
|
||||
_cursorX(0), _cursorY(0),
|
||||
_wrapX(false), _wrapY(false),
|
||||
_grid(size_t(width * height), 0) {
|
||||
}
|
||||
|
||||
void MenuMap::set(int x, int y, int id) {
|
||||
@@ -40,7 +43,7 @@ namespace ckitty::terminal {
|
||||
return { get(_cursorX, _cursorY), _cursorX, _cursorY };
|
||||
}
|
||||
|
||||
std::optional<MenuMap::Result> MenuMap::findNext(int dx, int dy) {
|
||||
void MenuMap::findNext(int dx, int dy) {
|
||||
int startX = _cursorX;
|
||||
int startY = _cursorY;
|
||||
int curX = _cursorX;
|
||||
@@ -54,28 +57,28 @@ namespace ckitty::terminal {
|
||||
if (_wrapX) {
|
||||
if (curX < 0) curX = _w - 1;
|
||||
else if (curX >= _w) curX = 0;
|
||||
} else if (curX < 0 || curX >= _w) return std::nullopt;
|
||||
} else if (curX < 0 || curX >= _w) return;
|
||||
|
||||
if (_wrapY) {
|
||||
if (curY < 0) curY = _h - 1;
|
||||
else if (curY >= _h) curY = 0;
|
||||
} else if (curY < 0 || curY >= _h) return std::nullopt;
|
||||
} else if (curY < 0 || curY >= _h) return;
|
||||
|
||||
// Check if we looped back to start (fail condition for wrap)
|
||||
if (curX == startX && curY == startY) return std::nullopt;
|
||||
if (curX == startX && curY == startY) return;
|
||||
|
||||
int val = get(curX, curY);
|
||||
if (val != 0 && val != get(startX, startY)) {
|
||||
_cursorX = curX;
|
||||
_cursorY = curY;
|
||||
return Result{ val, curX, curY };
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::optional<MenuMap::Result> MenuMap::moveUp() { return findNext(0, -1); }
|
||||
std::optional<MenuMap::Result> MenuMap::moveDown() { return findNext(0, 1); }
|
||||
std::optional<MenuMap::Result> MenuMap::moveLeft() { return findNext(-1, 0); }
|
||||
std::optional<MenuMap::Result> MenuMap::moveRight() { return findNext(1, 0); }
|
||||
void MenuMap::moveUp() { findNext(0, -1); }
|
||||
void MenuMap::moveDown() { findNext(0, 1); }
|
||||
void MenuMap::moveLeft() { findNext(-1, 0); }
|
||||
void MenuMap::moveRight() { findNext(1, 0); }
|
||||
|
||||
}
|
||||
@@ -34,19 +34,18 @@ namespace ckitty::terminal {
|
||||
void setWrap(bool x, bool y);
|
||||
|
||||
// Navigation - Returns the new ID if movement was successful
|
||||
std::optional<Result> moveUp();
|
||||
std::optional<Result> moveDown();
|
||||
std::optional<Result> moveLeft();
|
||||
std::optional<Result> moveRight();
|
||||
void moveUp();
|
||||
void moveDown();
|
||||
void moveLeft();
|
||||
void moveRight();
|
||||
|
||||
// Cursor Management
|
||||
void setCursor(int x, int y);
|
||||
Result getCursor() const;
|
||||
|
||||
private:
|
||||
|
||||
// The core search engine
|
||||
std::optional<Result> findNext(int dx, int dy);
|
||||
void findNext(int dx, int dy);
|
||||
};
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user