bleck, reverting
This commit is contained in:
@@ -1,10 +1,11 @@
|
|||||||
#include "Explorer.h"
|
#include "Explorer.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
Explorer::Explorer(Map* map_) {
|
Explorer::Explorer(Map* map_){
|
||||||
color = sf::Color::Blue;
|
color = sf::Color::Blue;
|
||||||
position = sf::Vector2i(10, 10);
|
position = sf::Vector2i(10, 10);
|
||||||
map = map_;
|
map = map_;
|
||||||
|
pather = new Pather(map_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -24,7 +25,7 @@ bool Explorer::move() {
|
|||||||
// While there are moves for us to take
|
// While there are moves for us to take
|
||||||
if (!movement_stack.empty()) {
|
if (!movement_stack.empty()) {
|
||||||
bool valid = false; // If the next move is valid, collision
|
bool valid = false; // If the next move is valid, collision
|
||||||
int x = movement_stack.top();
|
int x = movement_stack.front();
|
||||||
|
|
||||||
switch (x) {
|
switch (x) {
|
||||||
|
|
||||||
@@ -59,13 +60,13 @@ bool Explorer::move() {
|
|||||||
std::cout << "Path blocked" << std::endl;
|
std::cout << "Path blocked" << std::endl;
|
||||||
// Flush the moves list
|
// Flush the moves list
|
||||||
while(!movement_stack.empty()) {
|
while(!movement_stack.empty()) {
|
||||||
movement_stack.pop();
|
movement_stack.pop_front();
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If everything went well, pop and return true
|
// If everything went well, pop and return true
|
||||||
movement_stack.pop();
|
movement_stack.pop_front();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -74,6 +75,6 @@ bool Explorer::move() {
|
|||||||
|
|
||||||
// A*
|
// A*
|
||||||
bool Explorer::plan(sf::Vector2i destination_) {
|
bool Explorer::plan(sf::Vector2i destination_) {
|
||||||
|
movement_stack = pather->pathTo(position, destination_);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
#include <SFML/Graphics.hpp>
|
#include <SFML/Graphics.hpp>
|
||||||
#include <stack>
|
#include <stack>
|
||||||
#include "Map.h"
|
#include "Map.h"
|
||||||
|
#include "Pather.h"
|
||||||
|
|
||||||
class Explorer {
|
class Explorer {
|
||||||
public:
|
public:
|
||||||
@@ -13,8 +14,9 @@ private:
|
|||||||
sf::Color color;
|
sf::Color color;
|
||||||
sf::Vector2i position;
|
sf::Vector2i position;
|
||||||
Map* map;
|
Map* map;
|
||||||
|
Pather* pather;
|
||||||
|
|
||||||
std::stack<int> movement_stack;
|
std::deque<int> movement_stack;
|
||||||
bool move();
|
bool move();
|
||||||
bool plan(sf::Vector2i destination_);
|
bool plan(sf::Vector2i destination_);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -100,6 +100,10 @@ Pather::Pather(Map* map_) {
|
|||||||
map = map_;
|
map = map_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Pather::Pather() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
Pather::~Pather() {
|
Pather::~Pather() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -107,7 +111,7 @@ sf::Vector2i Pather::getEndNodePosition() {
|
|||||||
return end_node->xy;
|
return end_node->xy;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<int> Pather::pathTo(sf::Vector2i start, sf::Vector2i end) {
|
std::deque<int> Pather::pathTo(sf::Vector2i start, sf::Vector2i end) {
|
||||||
|
|
||||||
// Clear the visited map for erroneous data
|
// Clear the visited map for erroneous data
|
||||||
for (int i = 0; i < Map::CELLS_WIDTH; i++) {
|
for (int i = 0; i < Map::CELLS_WIDTH; i++) {
|
||||||
@@ -129,13 +133,13 @@ std::vector<int> Pather::pathTo(sf::Vector2i start, sf::Vector2i end) {
|
|||||||
openList.emplace(start_node, 0);
|
openList.emplace(start_node, 0);
|
||||||
|
|
||||||
early_exit = false;
|
early_exit = false;
|
||||||
//path_list = Loop();
|
path_list = loop();
|
||||||
|
|
||||||
return path_list;
|
return path_list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::vector<int> Pather::loop() {
|
std::deque<int> Pather::loop() {
|
||||||
while (!openList.empty() && !early_exit) {
|
while (!openList.empty() && !early_exit) {
|
||||||
// Early exit jankyness, need to change this
|
// Early exit jankyness, need to change this
|
||||||
if (closedList.size() > 3000) {
|
if (closedList.size() > 3000) {
|
||||||
@@ -172,17 +176,17 @@ std::vector<int> Pather::loop() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<int> return_path = returnPath();
|
std::deque<int> return_path = returnPath();
|
||||||
if (no_path || return_path.empty()) {
|
if (no_path || return_path.empty()) {
|
||||||
return std::vector<int>(0, 0);
|
|
||||||
std::cout << " no return path " << std::endl;
|
std::cout << " no return path " << std::endl;
|
||||||
|
return return_path;
|
||||||
}
|
}
|
||||||
|
|
||||||
return return_path;
|
return return_path;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<int> Pather::returnPath() {
|
std::deque<int> Pather::returnPath() {
|
||||||
std::vector<int> path;
|
std::deque<int> path;
|
||||||
|
|
||||||
while (active_node != nullptr) {
|
while (active_node != nullptr) {
|
||||||
path.push_back(active_node->cameFrom);
|
path.push_back(active_node->cameFrom);
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ private:
|
|||||||
class Pather {
|
class Pather {
|
||||||
public:
|
public:
|
||||||
Pather(Map* map_);
|
Pather(Map* map_);
|
||||||
|
Pather();
|
||||||
~Pather();
|
~Pather();
|
||||||
|
|
||||||
Map* map;
|
Map* map;
|
||||||
@@ -37,9 +38,9 @@ public:
|
|||||||
std::unordered_map<node*, int> closedList;
|
std::unordered_map<node*, int> closedList;
|
||||||
int visitedMap[App::WINDOW_HEIGHT][App::WINDOW_WIDTH];
|
int visitedMap[App::WINDOW_HEIGHT][App::WINDOW_WIDTH];
|
||||||
|
|
||||||
std::vector<int> pathTo(sf::Vector2i start, sf::Vector2i end);
|
std::deque<int> pathTo(sf::Vector2i start, sf::Vector2i end);
|
||||||
std::vector<int> loop();
|
std::deque<int> loop();
|
||||||
std::vector<int> returnPath();
|
std::deque<int> returnPath();
|
||||||
|
|
||||||
sf::Vector2i getEndNodePosition();
|
sf::Vector2i getEndNodePosition();
|
||||||
|
|
||||||
@@ -51,7 +52,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
std::vector<int> path_list;
|
std::deque<int> path_list;
|
||||||
node* end_node;
|
node* end_node;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#include <SFML/Window.hpp>
|
#include <SFML/Window.hpp>
|
||||||
#include <SFML/Graphics.hpp>
|
#include <SFML/Graphics.hpp>
|
||||||
#include "App.h"
|
#include "App.h"
|
||||||
|
#include "Pather.h"
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user