From a3ec190f61f9394606e41f1b3a7dcf5398f2e98a Mon Sep 17 00:00:00 2001 From: Rtch90 Date: Wed, 1 Feb 2012 23:44:04 +0000 Subject: [PATCH] [Add] Getting to work on pathfinding, my last one was not complete. [Fix] Fixed .gitignore --- .gitignore | 3 ++- Unuk-QT/Unuk-QT.pro | 6 +++-- src/libUnuk/Engine/NPC.h | 31 +++++++++++---------- src/libUnuk/Engine/Pathfinding.cpp | 1 + src/libUnuk/Engine/Pathfinding.h | 43 ++++++++++++++++++++++++++++++ 5 files changed, 65 insertions(+), 19 deletions(-) create mode 100644 src/libUnuk/Engine/Pathfinding.cpp create mode 100644 src/libUnuk/Engine/Pathfinding.h diff --git a/.gitignore b/.gitignore index fe5e9ce..ed57d9f 100644 --- a/.gitignore +++ b/.gitignore @@ -9,10 +9,11 @@ Win32/Unuk/Unuk/Release Win32/Unuk/Unuk/*.user Win32/Unuk/Unuk.ncb Win32/Unuk/Unuk.suo +Bin/Unuk Bin/*.dll *.swp *.o *.exe *.log *Unuk-QT -*Unuk + diff --git a/Unuk-QT/Unuk-QT.pro b/Unuk-QT/Unuk-QT.pro index 9155776..989ecfb 100644 --- a/Unuk-QT/Unuk-QT.pro +++ b/Unuk-QT/Unuk-QT.pro @@ -41,7 +41,8 @@ HEADERS += ../src/Libs/wglext.h \ ../src/libUnuk/UI/EventHistory.h \ ../src/libUnuk/UI/Bar.h \ ../src/libUnuk/System/Vec2.h \ - ../src/libUnuk/System/MathBox.h + ../src/libUnuk/System/MathBox.h \ + ../src/libUnuk/Engine/Pathfinding.h SOURCES += ../src/libUnuk/Engine/WorldManager.cpp \ ../src/libUnuk/Engine/ParticleEmitter.cpp \ ../src/libUnuk/Engine/NPC.cpp \ @@ -73,5 +74,6 @@ SOURCES += ../src/libUnuk/Engine/WorldManager.cpp \ ../src/libUnuk/LevelGen/MapElement.cpp \ ../src/libUnuk/UI/EventHistory.cpp \ ../src/libUnuk/UI/Bar.cpp \ - ../src/libUnuk/System/Vec2.cpp + ../src/libUnuk/System/Vec2.cpp \ + ../src/libUnuk/Engine/Pathfinding.cpp OTHER_FILES += diff --git a/src/libUnuk/Engine/NPC.h b/src/libUnuk/Engine/NPC.h index 0174a51..d381533 100644 --- a/src/libUnuk/Engine/NPC.h +++ b/src/libUnuk/Engine/NPC.h @@ -1,26 +1,25 @@ #pragma once #include "Character.h" -#include "AStar.h" class NPC : public Character { public: - NPC(LevelGen* mapArg); - ~NPC(void); - - void Update(void); + NPC(LevelGen* mapArg); + ~NPC(void); + + void Update(void); protected: - void Move(void); - + void Move(void); + private: - int _moveChangeFrequency; - - int _moveDurationCurrent; - int _moveDurationMin; - int _moveDurationMax; - - bool _moving; - - Timer _moveTimer; + int _moveChangeFrequency; + + int _moveDurationCurrent; + int _moveDurationMin; + int _moveDurationMax; + + bool _moving; + + Timer _moveTimer; }; diff --git a/src/libUnuk/Engine/Pathfinding.cpp b/src/libUnuk/Engine/Pathfinding.cpp new file mode 100644 index 0000000..b2ae6c4 --- /dev/null +++ b/src/libUnuk/Engine/Pathfinding.cpp @@ -0,0 +1 @@ +#include "Pathfinding.h" diff --git a/src/libUnuk/Engine/Pathfinding.h b/src/libUnuk/Engine/Pathfinding.h new file mode 100644 index 0000000..287e561 --- /dev/null +++ b/src/libUnuk/Engine/Pathfinding.h @@ -0,0 +1,43 @@ +#pragma once +#include +#include +#include +#include +#include +#include +using namespace std; + +// Disable warning that debugging information has lines that are truncated. +#ifdef WIN32 +#pragma warning(disable : 4786) +#endif + +// The search class. UserState is the users state space type. +template class AStarSearch { +public: + enum { + SEARCH_STATE_NOT_INITIALISED, + SEARCH_STATE_SEARCHING, + SEARCH_STATE_SUCCEEDED, + SEARCH_STATE_FAILED, + SEARCH_STATE_OUT_OF_MEMORY, + SEARCH_STATE_INVALID + }; + + // A node representing a possible state in the search. + class Node { + public: + // Keep a record of successor nodes. + Node* parent; + // Used to view the search in reverse at the end. + Node* child; + + float g; // Cost of this and it's predecessors. + float h; // Heuristic estimate of the distance of the goal. + float f; // Sum of cost and heuristic. + + Node(void) : parent(0), child(0), g(0.0f), h(0.0f), f(0.0) {} + + UserState _UserState; + }; +};