Started working on a random flood function for paths to do things like fill rooms with stuff.
This commit is contained in:
parent
e863bfa2fe
commit
ee1e2e5bc5
5 changed files with 46 additions and 10 deletions
17
pathing.cpp
17
pathing.cpp
|
@ -76,6 +76,23 @@ void Pathing::clear_target(const Point &at) {
|
||||||
$input[at.y][at.x] = 1;
|
$input[at.y][at.x] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Pathing::random_flood(const Point from, std::function<void(Point at, int dnum)> cb) {
|
||||||
|
int from_x = from.x;
|
||||||
|
int from_y = from.y;
|
||||||
|
int dnum = $paths[from.y][from.x];
|
||||||
|
cb(from, dnum);
|
||||||
|
|
||||||
|
for(int y = from_y - 1; y <= from_y + 1; y++) {
|
||||||
|
if(y < 0 || y >= int($height)) continue;
|
||||||
|
for(int x = from_x - 1; x <= from_x + 1; x++) {
|
||||||
|
if(x >= 0 && x <= int($width)) {
|
||||||
|
dnum = $paths[y][x];
|
||||||
|
cb({size_t(x), size_t(y)}, dnum);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool Pathing::INVARIANT() {
|
bool Pathing::INVARIANT() {
|
||||||
using dbc::check;
|
using dbc::check;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "point.hpp"
|
#include "point.hpp"
|
||||||
#include "matrix.hpp"
|
#include "matrix.hpp"
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
|
|
||||||
class Pathing {
|
class Pathing {
|
||||||
public:
|
public:
|
||||||
|
@ -22,6 +24,7 @@ public:
|
||||||
Matrix &paths() { return $paths; }
|
Matrix &paths() { return $paths; }
|
||||||
Matrix &input() { return $input; }
|
Matrix &input() { return $input; }
|
||||||
int distance(Point to) { return $paths[to.y][to.x];}
|
int distance(Point to) { return $paths[to.y][to.x];}
|
||||||
|
void random_flood(const Point from, std::function<void(Point at, int dnum)> cb);
|
||||||
|
|
||||||
bool INVARIANT();
|
bool INVARIANT();
|
||||||
};
|
};
|
||||||
|
|
16
status.txt
16
status.txt
|
@ -1,24 +1,22 @@
|
||||||
TODAY'S GOAL:
|
TODAY'S GOAL:
|
||||||
|
|
||||||
|
* Light should flood using the dijkstra map rather than use a box.
|
||||||
|
|
||||||
-1. Learn std::initializer_list by using it.
|
-1. Learn std::initializer_list by using it.
|
||||||
0. \ua3fd causes the character immediately after to vanish. Make a test and solve it.
|
0. \ua3fd causes the character immediately after to vanish. Make a test and solve it.
|
||||||
1. Why do Sliders only have to be kept around forever and can't go in containers like everything else?
|
1. Why do Sliders only have to be kept around forever and can't go in containers like everything else?
|
||||||
2. Why are sliders not selected when I click on them? Is it a hover?
|
|
||||||
3. Why do fonts render blank? Also when I scroll they slowly disappear until there's a column.
|
|
||||||
* \u2738 is missing on the row when in grid but works when clicked.
|
|
||||||
|
|
||||||
|
* Make a for-loop generator thing, and figure out whatever this magic matrix-processing-without-for-loops tech is (that probably doesn't exist).
|
||||||
|
|
||||||
* A designer tool to help find characters for foreground, background, and figure out their colors.
|
"you could make an iterator type that you create with the Matrix & a box - then it iterates though each row/column and updates its x/y values. More code over all but loops like you're doing now could be simpler"
|
||||||
|
|
||||||
* renderer's mouse coordinates are totally wrong. Need to put glyph bounds into the panel and then you can ask if a mouse click is on a panel, and what the _panel's_ coordinates are.
|
|
||||||
|
|
||||||
* Use a vector of strings with 1 char each again.
|
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
|
|
||||||
|
* Hot key for debug view.
|
||||||
|
|
||||||
* Refine the event handling to pass most of them to the gui panels and then I can intercept them.
|
* Refine the event handling to pass most of them to the gui panels and then I can intercept them.
|
||||||
|
|
||||||
* Resolve fmt::format vs std::format.
|
* Resolve fmt::format vs std::format from hirdrac when using clang or gcc latest.
|
||||||
|
|
||||||
* Fix " room should always be found"
|
* Fix " room should always be found"
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#include "dbc.hpp"
|
#include "dbc.hpp"
|
||||||
#include "lights.hpp"
|
#include "lights.hpp"
|
||||||
|
|
||||||
const bool DEBUG_MAP=false;
|
const bool DEBUG_MAP=true;
|
||||||
|
|
||||||
using std::string;
|
using std::string;
|
||||||
using namespace fmt;
|
using namespace fmt;
|
||||||
|
|
|
@ -35,3 +35,21 @@ TEST_CASE("dijkstra algo test", "[pathing]") {
|
||||||
REQUIRE(pathing.$paths == expected);
|
REQUIRE(pathing.$paths == expected);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE("random flood", "[pathing]") {
|
||||||
|
json data = load_test_pathing("./tests/dijkstra.json");
|
||||||
|
auto test = data[0];
|
||||||
|
|
||||||
|
Matrix expected = test["expected"];
|
||||||
|
Matrix walls = test["walls"];
|
||||||
|
|
||||||
|
Pathing pathing(walls[0].size(), walls.size());
|
||||||
|
pathing.$input = test["input"];
|
||||||
|
|
||||||
|
REQUIRE(pathing.INVARIANT());
|
||||||
|
pathing.compute_paths(walls);
|
||||||
|
|
||||||
|
pathing.random_flood({1, 2}, [&](Point at, int dnum) {
|
||||||
|
println("FLOOD: at={},{}, dnum={}", at.x, at.y, dnum);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue