Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ cmake_policy(SET CMP0141 NEW)
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<IF:$<CONFIG:Debug>,EditAndContinue,ProgramDatabase>" CACHE STRING "MSVC debug information format")
project(
NavKit
VERSION 2.13.0
VERSION 2.14.0
DESCRIPTION "An app to create NAVP and AIRG files for use with Hitman: World of Assassination"
LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
Expand Down
2 changes: 1 addition & 1 deletion include/NavKit/NavKitConfig.h
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
#define NavKit_VERSION_MAJOR "2"
#define NavKit_VERSION_MINOR "13"
#define NavKit_VERSION_MINOR "14"
#define NavKit_VERSION_PATCH "0"
1 change: 1 addition & 0 deletions include/NavKit/module/InputHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ class InputHandler {
float moveUp;
float moveDown;

static constexpr int MENU_HEIGHT = 20;
static constexpr int QUIT = 1;
static constexpr float BASE_KEYBOARD_SPEED = 22.0f;
static constexpr float SHIFT_SPEED_MULTIPLIER = 4.0f;
Expand Down
3 changes: 3 additions & 0 deletions include/NavKit/module/Navp.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ class Navp {

static void updateNavMeshBuffers(const NavPower::NavMesh* navMesh, int selectedIndex);

static int getTotalAreaCount(const NavPower::NavMesh* navMesh);
static NavPower::Area& getAreaByIndex(const NavPower::NavMesh* navMesh, int index);

static void updateHitTestBuffers(const NavPower::NavMesh* navMesh);

void renderPfSeedPoints() const;
Expand Down
67 changes: 51 additions & 16 deletions include/NavWeakness/NavPower.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
NavPower.h - v1.2.0
NavPower.h - v2.0.0
A header file for use with NavPower's binary navmesh files.

Licensed under the MIT License
Expand Down Expand Up @@ -149,11 +149,11 @@ namespace NavPower
uint32_t m_kdTreeBytes;
uint32_t m_linkRecordBytes = 0;
uint32_t m_totalBytes;
float m_buildScale = 2.0;
float m_voxSize = 0.1;
float m_radius = 0.2;
float m_stepHeight = 0.3;
float m_height = 1.8; // Human Height
float m_buildScale = 2.0f;
float m_voxSize = 0.1f;
float m_radius = 0.2f;
float m_stepHeight = 0.3f;
float m_height = 1.8f; // Human Height
BBox m_bbox;
Axis m_buildUpAxis = Axis::Z;
// In NAVPs from Hitman WoA the padding isn't just 0x00
Expand Down Expand Up @@ -408,22 +408,19 @@ namespace NavPower
bool compareY(Area& a1, Area& a2);
bool compareZ(Area& a1, Area& a2);

class NavMesh
class NavGraph
{
public:
Binary::Header* m_hdr;
Binary::SectionHeader* m_sectHdr;
Binary::NavSetHeader* m_setHdr;
Binary::NavGraphHeader* m_graphHdr;
Binary::NavGraphHeader* m_hdr;
std::vector<Area> m_areas;
Binary::KDTreeData* m_kdTreeData;
Binary::KDNode* m_rootKDNode;

NavMesh() {};
NavMesh(const char* p_NavMeshPath) { readJson(p_NavMeshPath);};
NavGraph() {};
NavGraph(auto s_NavGraphJson);


NavMesh(uintptr_t p_data, uint32_t p_filesize) { read(p_data, p_filesize); };
NavGraph(uintptr_t p_data) { read(p_data); };

// Build m_areas pointer to index map so the pointers can be replaced with indices (+1) in the JSON file
std::map<Binary::Area*, uint32_t> AreaPointerToIndexMap();
Expand Down Expand Up @@ -451,10 +448,10 @@ namespace NavPower
uint32_t generateKdTree(uintptr_t s_nodePtr, std::vector<Area>& s_areas, std::map<Binary::Area*, uint32_t>& p_AreaPointerToNavGraphOffsetMap);

void writeJson(std::ostream& f);
void readJson(const char* p_NavMeshPath);
void readJson(auto s_NavGraphJson);
void writeBinary(std::ostream& f);

void read(uintptr_t p_data, uint32_t p_filesize);
void read(uintptr_t& p_data);

// This parses the k-d tree and outputs it as a vector of bounding boxes
std::map<uint32_t, std::vector<std::pair<uint32_t, BBox>>> ParseKDTree()
Expand Down Expand Up @@ -507,6 +504,44 @@ namespace NavPower
}
};

class Section
{
public:
Binary::SectionHeader* m_hdr;
Binary::NavSetHeader* m_setHdr;
std::vector<NavGraph> m_aNavGraphs;

Section(){};
Section(uintptr_t& p_data) { read(p_data); };

void read(uintptr_t& p_data);

void readJson(auto p_SectionJson);

void writeJson(std::ofstream& f);

void writeBinary(std::ostream& f);
};

class NavMesh
{
public:
Binary::Header* m_hdr;
std::vector<Section> m_aSections;

NavMesh() {};
NavMesh(const char* p_NavGraphJsonPath);
NavMesh(uintptr_t p_data, uint32_t p_filesize) { read(p_data, p_filesize); };

void read(uintptr_t p_data, uint32_t p_filesize);

void readJson(const char* p_NavGraphJsonPath);

void writeJson(std::ofstream& f);

void writeBinary(std::ostream& f);
};

// This function was made by github.com/OrfeasZ aka NoFaTe
uint32_t CalculateChecksum(void* p_Data, uint32_t p_Size);
} // namespace NavPower
Binary file modified lib/Debug/NavWeakness.dll
Binary file not shown.
Binary file modified lib/Release/NavWeakness.dll
Binary file not shown.
63 changes: 43 additions & 20 deletions src/NavKit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
* SOFTWARE.
*/
#include <SDL.h>
#include <SDL_syswm.h>
#include <cpptrace/from_current.hpp>
#include "../include/NavKit/module/Airg.h"
#include "../include/NavKit/module/Gui.h"
Expand All @@ -34,8 +35,48 @@
#include "../include/NavKit/util/ErrorHandler.h"
#include "../include/NavKit/util/FileUtil.h"
#include "../include/NavKit/util/UpdateChecker.h"
#include <windows.h>

#undef main

void runFrameIteration() {
Renderer::getInstance().renderFrame();
InputHandler::getInstance().hitTest();
Gui::getInstance().drawGui();

SceneExtract::getInstance().finalizeExtractScene();
SceneMesh::getInstance().finalizeSceneMeshBuild();
Navp::getInstance().finalizeBuild();
SceneMesh::getInstance().finalizeLoad();
Airg::getInstance().finalizeSave();
SceneMesh::getInstance().finalizeExtractResources();
Renderer::getInstance().finalizeFrame();
}

bool mainLoopIteration() {
if (InputHandler::getInstance().handleInput() == InputHandler::QUIT) {
return false;
}
runFrameIteration();
return true;
}

static int SDLCALL eventFilter(void* userdata, SDL_Event* event) {
if (event->type == SDL_SYSWMEVENT) {
const SDL_SysWMmsg* wmMsg = event->syswm.msg;
if (wmMsg->subsystem == SDL_SYSWM_WINDOWS) {
if (wmMsg->msg.win.msg == WM_ENTERMENULOOP) {
SetTimer(wmMsg->msg.win.hwnd, 1, 1, nullptr);
} else if (wmMsg->msg.win.msg == WM_EXITMENULOOP) {
KillTimer(wmMsg->msg.win.hwnd, 1);
} else if (wmMsg->msg.win.msg == WM_TIMER) {
runFrameIteration();
}
}
}
return 1;
}

int SDL_main(const int argc, char** argv) {
CPPTRACE_TRY
{
Expand All @@ -49,34 +90,16 @@ int SDL_main(const int argc, char** argv) {
}
renderer.initShaders();
SDL_EventState(SDL_SYSWMEVENT, SDL_ENABLE);
SDL_SetEventFilter(eventFilter, nullptr);

UpdateChecker& updateChecker = UpdateChecker::getInstance();
updateChecker.startUpdateCheck();

SceneExtract& sceneExtract = SceneExtract::getInstance();
Navp& navp = Navp::getInstance();
SceneMesh& obj = SceneMesh::getInstance();
Airg& airg = Airg::getInstance();
InputHandler& inputHandler = InputHandler::getInstance();
Menu::updateMenuState();
Gui& gui = Gui::getInstance();
bool isRunning = true;
Logger::log(NK_INFO, "NavKit initialized.");
while (isRunning) {
if (inputHandler.handleInput() == InputHandler::QUIT) {
isRunning = false;
}
renderer.renderFrame();
inputHandler.hitTest();
gui.drawGui();

sceneExtract.finalizeExtractScene();
obj.finalizeSceneMeshBuild();
navp.finalizeBuild();
obj.finalizeLoad();
airg.finalizeSave();
obj.finalizeExtractResources();
renderer.finalizeFrame();
isRunning = mainLoopIteration();
}

NFD_Quit();
Expand Down
Loading
Loading