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.10.0
VERSION 2.11.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 "10"
#define NavKit_VERSION_MINOR "11"
#define NavKit_VERSION_PATCH "0"
4 changes: 3 additions & 1 deletion include/NavKit/Resource.h
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@
#define IDC_STATIC_TILING_INFO_MAX_TILES 30336
#define IDC_STATIC_TILING_INFO_MAX_POLYS 30337

#define IDD_OBJ_SETTINGS 30400
#define IDD_SCENE_MESH_SETTINGS 30400
#define IDC_RADIO_MESH_TYPE_ALOC 30401
#define IDC_RADIO_MESH_TYPE_PRIM 30402
#define IDC_CHECK_PRIM_LOD_1 30403
Expand All @@ -149,6 +149,8 @@
#define IDC_CHECK_FILTER_TO_INCLUDE_BOX 30413
#define IDC_CHECK_SKIP_RPKG_EXTRACT 30414
#define IDC_CHECK_SHOW_BLENDER_DEBUG_LOGS 30415
#define IDC_CHECK_EXTRACT_TEXTURE_FILES 30416
#define IDC_CHECK_APPLY_TEXTURES 30417

#define IDD_EXTRACT_NAVP_DIALOG 30500
#define IDC_COMBOBOX_NAVP 30501
Expand Down
4 changes: 2 additions & 2 deletions include/NavKit/adapter/RecastAdapter.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

struct ConvexVolume;

namespace ZPathfinding {
namespace Json {
class Vec3;
class PfBox;
}
Expand Down Expand Up @@ -93,7 +93,7 @@ class RecastAdapter {

std::deque<std::string> &getLogBuffer() const;

void addConvexVolume(ZPathfinding::PfBox &pfBox) const;
void addConvexVolume(Json::PfBox &pfBox) const;

[[nodiscard]] const ConvexVolume *getConvexVolumes() const;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
#pragma once

#include <filesystem>
#include <map>
#include <string>
#include <vector>
#include "../../../extern/simdjson/simdjson.h"

namespace ZPathfinding {
namespace Json {
class Vec3 {
public:
Vec3(): x(0), y(0), z(0) {
Expand Down Expand Up @@ -190,4 +191,53 @@ namespace ZPathfinding {

std::vector<Entity> entities{};
};

class Mati {
public:
Mati() = default;

void readJsonFromMatiFile(simdjson::simdjson_result<simdjson::ondemand::document>& jsonDocument);

void readJsonFromScene(simdjson::ondemand::object jsonDocument);

void writeJson(std::ostream& f) const;

std::string hash;
std::string className;
std::string diffuse;
std::string normal;
std::string specular;
};

class Matis {
public:
Matis() {
}

Matis(simdjson::ondemand::array matisJson);

std::vector<Mati> matis{};
};

class PrimMati {
public:
PrimMati() {

}
std::string primHash;
std::vector<std::string> matiHashes{};
void readJson(simdjson::ondemand::object jsonDocument);

void writeJson(std::ostream& f) const;
};

class PrimMatis {
public:
PrimMatis() {
}

PrimMatis(simdjson::ondemand::array primMatisJson);

std::vector<PrimMati> primMatis{};
};
}
2 changes: 1 addition & 1 deletion include/NavKit/module/Navp.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#include <windows.h>
#include <GL/glew.h>

#include "../model/ZPathfinding.h"
#include "../model/Json.h"

struct Vec3;

Expand Down
15 changes: 11 additions & 4 deletions include/NavKit/module/Obj.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,14 @@
#include <thread>
#include <vector>
#define WIN32_LEAN_AND_MEAN
#include <set>
#include <windows.h>
#include <GL/glew.h>

#include "../../include/NavKit/render/Model.h"
#include "../../include/NavKit/render/Shader.h"
#include "../model/Json.h"

enum MeshType {
ALOC,
PRIM
Expand Down Expand Up @@ -56,18 +59,20 @@ class Obj {
bool errorBuilding;
bool skipExtractingAlocsOrPrims;
bool errorExtracting;
bool extractingAlocsOrPrims;
bool extractingResources;
bool doneExtractingAlocsOrPrims;
std::map<std::string, std::pair<int, int> > objectTriangleRanges;
bool doObjHitTest;
MeshType meshTypeForBuild;
SceneMeshBuildType sceneMeshBuildType;
bool primLods[8];
bool blendFileBuilt;
bool extractTextures;
bool applyTextures;
static HWND hObjDialog;
Model model;

static char *openSetBlenderFileDialog(const char *lastBlenderFile);
static char *openSetBlenderFileDialog();

void loadSettings();

Expand Down Expand Up @@ -137,7 +142,9 @@ class Obj {

std::optional<std::jthread> backgroundWorker;

void finalizeExtractAlocsOrPrims();
void finalizeExtractResources();

bool shouldExtractTextures() const;

void extractAlocsOrPrimsAndStartObjBuild();
void extractResourcesAndStartObjBuild();
};
24 changes: 22 additions & 2 deletions include/NavKit/module/Rpkg.h
Original file line number Diff line number Diff line change
@@ -1,13 +1,28 @@
#pragma once
#include <map>
#include <optional>
#include <set>
#include <string>
#include <thread>
#include <vector>

struct PartitionManager;
struct HashList;

enum ResourceType {
NAVP,
AIRG
AIRG,
TEXT
};

class HashListEntry {
public:
HashListEntry(const std::string& hash, const std::string& ioiString, const std::string& type) :
hash(hash), ioiString(ioiString), type(type) {};

std::string hash;
std::string ioiString;
std::string type;
};

class Rpkg {
Expand All @@ -16,11 +31,16 @@ class Rpkg {

static bool canExtract();

static int extractResourceFromRpkgs(const std::string& hash, ResourceType type);
static int extractResourcesFromRpkgs(const std::vector<std::string>& hashes, ResourceType type);

static int getHashList();

static bool extractionDataInitComplete;
static std::string gameVersion;
static PartitionManager* partitionManager;
static HashList* hashList;
static std::map<std::string, HashListEntry> hashToHashListEntryMap;
static std::map<std::string, HashListEntry> ioiStringToHashListEntryMap;

static std::optional<std::jthread> backgroundWorker;
};
44 changes: 27 additions & 17 deletions include/NavKit/module/Scene.h
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
#pragma once
#include <functional>
#define WIN32_LEAN_AND_MEAN
#include <map>
#include <windows.h>
#include "../model/ZPathfinding.h"
#include "../model/Json.h"

class Scene {
public:
Expand All @@ -18,26 +19,32 @@ class Scene {

void setLastSaveFileName(char *file_name);

void loadScene(const std::string &fileName, const std::function<void()> &callback,
const std::function<void()> &errorCallback);

void saveScene(char *fileName) const;
void saveScene(const std::string& fileName) const;

void handleOpenSceneClicked();

void handleSaveSceneClicked();

void loadMeshes(const std::function<void()> &errorCallback,
simdjson::simdjson_result<simdjson::ondemand::document> &jsonDocument);

void loadPfBoxes(const std::function<void()> &errorCallback,
simdjson::simdjson_result<simdjson::ondemand::document> &jsonDocument);
void loadScene(const std::string &fileName, const std::function<void()> &callback,
const std::function<void()> &errorCallback);

void loadVersion(
simdjson::simdjson_result<simdjson::ondemand::document> &jsonDocument);

void loadMeshes(const std::function<void()> &errorCallback,
simdjson::simdjson_result<simdjson::ondemand::document> &jsonDocument);

void loadPfBoxes(const std::function<void()> &errorCallback,
simdjson::simdjson_result<simdjson::ondemand::document> &jsonDocument);

void loadPfSeedPoints(const std::function<void()> &errorCallback,
simdjson::simdjson_result<simdjson::ondemand::document> &jsonDocument);
simdjson::simdjson_result<simdjson::ondemand::document> &jsonDocument);

void loadMatis(const std::function<void()>& errorCallback,
simdjson::simdjson_result<simdjson::ondemand::document>& jsonDocument);

void loadPrimMatis(const std::function<void()>& errorCallback,
simdjson::simdjson_result<simdjson::ondemand::document>& jsonDocument);

void showSceneDialog();

Expand All @@ -55,20 +62,23 @@ class Scene {
std::string lastLoadSceneFile;
bool sceneLoaded;

std::vector<ZPathfinding::Mesh> meshes;
std::vector<ZPathfinding::Mesh> prims;
ZPathfinding::PfBox includeBox;
std::vector<ZPathfinding::PfBox> exclusionBoxes;
std::vector<ZPathfinding::PfSeedPoint> pfSeedPoints;
std::vector<Json::Mesh> meshes;
std::vector<Json::Mesh> prims;
Json::PfBox includeBox;
std::vector<Json::PfBox> exclusionBoxes;
std::vector<Json::PfSeedPoint> pfSeedPoints;
std::map<std::string, Json::Mati> matis;
std::map<std::string, Json::PrimMati> primMatis;
std::optional<std::jthread> backgroundWorker;
float bBoxPos[3]{};
float bBoxScale[3]{};
bool showBBox;
int version;
static HWND hSceneDialog;

const ZPathfinding::Mesh *findMeshByHashAndIdAndPos(const std::string &hash, const std::string &id, const float *pos) const;
const Json::Mesh *findMeshByHashAndIdAndPos(const std::string &hash, const std::string &id, const float *pos) const;

static inline const std::string OUTPUT_SCENE_FILE_NAME = "output.nav.json";
private:
std::string loadSceneName;
std::string saveSceneName;
Expand Down
4 changes: 2 additions & 2 deletions include/NavKit/util/CommandRunner.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ class CommandRunner {
return instance;
}

void runCommand(std::string command, std::string logFileName, std::function<void()> callback,
std::function<void()> errorCallback);
void runCommand(const std::string& command, const std::string& logFileName, const std::function<void()>& callback,
const std::function<void()>& errorCallback);

bool closing;
int commandsRun;
Expand Down
28 changes: 28 additions & 0 deletions include/navkit-rpkg-lib/navkit-rpkg-lib.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include <ostream>
#include <new>
struct PartitionManager;
struct HashList;

struct EntitiesJson;

Expand Down Expand Up @@ -47,10 +48,37 @@ RustStringList *get_all_resources_hashes_by_type_from_rpkg_files(const Partition
const char *resource_type,
void (*log_callback)(const char*));

HashList *get_hash_list_from_file_or_repo(const char *output_folder,
void (*log_callback)(const char*));

RustStringList *get_all_referenced_hashes_by_hash_from_rpkg_files(const char *resource_hash,
const PartitionManager *partition_manager,
void (*log_callback)(const char*));

char *get_mati_json_by_hash(const char *resource_hash,
const PartitionManager *partition_manager,
void (*log_callback)(const char*));

uint32_t hash_list_get_version(const HashList *list);

RustStringList *hash_list_get_all_hashes(const HashList *list);

char *hash_list_get_path_by_hash(const HashList *list, const char *resource_hash);

char *hash_list_get_hint_by_hash(const HashList *list, const char *resource_hash);

uint32_t hash_list_get_resource_type_by_hash(const HashList *list, const char *resource_hash);

const char *get_string_from_list(RustStringList *list, uintptr_t index);

void free_rust_string_list(RustStringList *ptr);

void free_entities_json(EntitiesJson *ptr);

void free_string(char *ptr);

void free_hash_list(HashList *ptr);

void free_hashset_string(HashSet<String> *ptr);

void free_partition_manager(PartitionManager *ptr);
Expand Down
Binary file modified lib/Debug/navkit_rpkg_lib.dll
Binary file not shown.
Binary file modified lib/Debug/navkit_rpkg_lib.dll.lib
Binary file not shown.
Binary file modified lib/Release/navkit_rpkg_lib.dll
Binary file not shown.
Binary file modified lib/Release/navkit_rpkg_lib.dll.lib
Binary file not shown.
2 changes: 1 addition & 1 deletion src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ set(RECAST_DEMO_SOURCES
set(MODEL_SOURCES
model/ReasoningGrid.cpp
model/VisionData.cpp
model/ZPathfinding.cpp
model/Json.cpp
)
set(MODULE_SOURCES
module/Airg.cpp
Expand Down
2 changes: 1 addition & 1 deletion src/NavKit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ int SDL_main(const int argc, char **argv) {
navp.finalizeBuild();
obj.finalizeLoad();
airg.finalizeSave();
obj.finalizeExtractAlocsOrPrims();
obj.finalizeExtractResources();
renderer.finalizeFrame();
}

Expand Down
Loading