|
|
@ -1,6 +1,6 @@
|
|
|
|
/*
|
|
|
|
/*
|
|
|
|
www.sourceforge.net/projects/dfhack
|
|
|
|
www.sourceforge.net/projects/dfhack
|
|
|
|
Copyright (c) 2009 Petr Mrázek (peterix), Kenneth Ferland (Impaler[WrG]), dorf
|
|
|
|
Copyright (c) 2009 Petr Mrázek (peterix), Kenneth Ferland (Impaler[WrG]), dorf
|
|
|
|
|
|
|
|
|
|
|
|
This software is provided 'as-is', without any express or implied
|
|
|
|
This software is provided 'as-is', without any express or implied
|
|
|
|
warranty. In no event will the authors be held liable for any
|
|
|
|
warranty. In no event will the authors be held liable for any
|
|
|
@ -26,43 +26,45 @@ distribution.
|
|
|
|
#define SIMPLEAPIC_H_INCLUDED
|
|
|
|
#define SIMPLEAPIC_H_INCLUDED
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef LINUX_BUILD
|
|
|
|
#ifdef LINUX_BUILD
|
|
|
|
# ifndef DFHACKAPI
|
|
|
|
# ifndef DFHACKAPI
|
|
|
|
# define DFHACKAPI extern "C"
|
|
|
|
# define DFHACKAPI extern "C"
|
|
|
|
# endif
|
|
|
|
# endif
|
|
|
|
#else
|
|
|
|
#else
|
|
|
|
# ifdef BUILD_DFHACK_LIB
|
|
|
|
# ifdef BUILD_DFHACK_LIB
|
|
|
|
# ifndef DFHACKAPI
|
|
|
|
# ifndef DFHACKAPI
|
|
|
|
# define DFHACKAPI extern "C" __declspec(dllexport)
|
|
|
|
# define DFHACKAPI extern "C" __declspec(dllexport)
|
|
|
|
# endif
|
|
|
|
# endif
|
|
|
|
# else
|
|
|
|
# else
|
|
|
|
# ifndef DFHACKAPI
|
|
|
|
# ifndef DFHACKAPI
|
|
|
|
# define DFHACKAPI extern "C" __declspec(dllimport)
|
|
|
|
# define DFHACKAPI extern "C" __declspec(dllimport)
|
|
|
|
# endif
|
|
|
|
# endif
|
|
|
|
# endif
|
|
|
|
# endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#include <integers.h>
|
|
|
|
#include <integers.h>
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
#ifdef __cplusplus
|
|
|
|
# include <vector>
|
|
|
|
# include <vector>
|
|
|
|
# include <string>
|
|
|
|
# include <string>
|
|
|
|
using namespace std;
|
|
|
|
using namespace std;
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
typedef enum DFHackAPIVectorTypeC {
|
|
|
|
typedef enum DFHackAPIVectorTypeC
|
|
|
|
DFHackAPIVectorTypeC_Normal, // array of struct's
|
|
|
|
{
|
|
|
|
DFHackAPIVectorTypeC_Matgloss, // array of t_matgloss's
|
|
|
|
DFHackAPIVectorTypeC_Normal, // array of struct's
|
|
|
|
DFHackAPIVectorTypeC_Uint16, // array of uint16_t's
|
|
|
|
DFHackAPIVectorTypeC_Matgloss, // array of t_matgloss's
|
|
|
|
DFHackAPIVectorTypeC_Vein, // array of t_vein's
|
|
|
|
DFHackAPIVectorTypeC_Uint16, // array of uint16_t's
|
|
|
|
DFHackAPIVectorTypeC_String, // array of const char *'s
|
|
|
|
DFHackAPIVectorTypeC_Vein, // array of t_vein's
|
|
|
|
DFHackAPIVectorTypeC_Recursive, // array of DFHackAPIVectorC struct's
|
|
|
|
DFHackAPIVectorTypeC_String, // array of const char *'s
|
|
|
|
DFHackAPIVectorTypeC_DWord = 0xffffffff // Unused
|
|
|
|
DFHackAPIVectorTypeC_Recursive, // array of DFHackAPIVectorC struct's
|
|
|
|
|
|
|
|
DFHackAPIVectorTypeC_DWord = 0xffffffff // Unused
|
|
|
|
} DFHackAPIVectorTypeC;
|
|
|
|
} DFHackAPIVectorTypeC;
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct DFHackAPIVectorC {
|
|
|
|
typedef struct DFHackAPIVectorC
|
|
|
|
void *data;
|
|
|
|
{
|
|
|
|
uint32_t length;
|
|
|
|
void *data;
|
|
|
|
DFHackAPIVectorTypeC type;
|
|
|
|
uint32_t length;
|
|
|
|
|
|
|
|
DFHackAPIVectorTypeC type;
|
|
|
|
} DFHackAPIVector;
|
|
|
|
} DFHackAPIVector;
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
#ifdef __cplusplus
|
|
|
@ -73,58 +75,64 @@ typedef char bool;
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
extern "C"
|
|
|
|
|
|
|
|
{
|
|
|
|
#endif // __cplusplus
|
|
|
|
#endif // __cplusplus
|
|
|
|
|
|
|
|
|
|
|
|
// The C interface for vector management
|
|
|
|
// The C interface for vector management
|
|
|
|
DFHACKAPI void DFHackAPIVector_free(DFHackAPIVectorC *vector);
|
|
|
|
DFHACKAPI void DFHackAPIVector_free (DFHackAPIVectorC *vector);
|
|
|
|
|
|
|
|
|
|
|
|
// The C interface to DFHackAPI (for multiple language support)
|
|
|
|
// The C interface to DFHackAPI (for multiple language support)
|
|
|
|
DFHACKAPI DFHackAPIHandle CreateDFHackAPI(const char *path_to_xml);
|
|
|
|
DFHACKAPI DFHackAPIHandle CreateDFHackAPI (const char *path_to_xml);
|
|
|
|
DFHACKAPI void DestroyDFHackAPI(DFHackAPIHandle self);
|
|
|
|
DFHACKAPI void DestroyDFHackAPI (DFHackAPIHandle self);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DFHACKAPI bool DFHackAPI_Attach (DFHackAPIHandle self);
|
|
|
|
|
|
|
|
DFHACKAPI bool DFHackAPI_Detach (DFHackAPIHandle self);
|
|
|
|
|
|
|
|
DFHACKAPI bool DFHackAPI_isAttached (DFHackAPIHandle self);
|
|
|
|
|
|
|
|
|
|
|
|
DFHACKAPI bool DFHackAPI_Attach(DFHackAPIHandle self);
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadStoneMatgloss (DFHackAPIHandle self, DFHackAPIVectorC *output);
|
|
|
|
DFHACKAPI bool DFHackAPI_Detach(DFHackAPIHandle self);
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadWoodMatgloss (DFHackAPIHandle self, DFHackAPIVectorC *output);
|
|
|
|
DFHACKAPI bool DFHackAPI_isAttached(DFHackAPIHandle self);
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadMetalMatgloss (DFHackAPIHandle self, DFHackAPIVectorC *output);
|
|
|
|
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadPlantMatgloss (DFHackAPIHandle self, DFHackAPIVectorC *output);
|
|
|
|
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadCreatureMatgloss (DFHackAPIHandle self, DFHackAPIVectorC *output);
|
|
|
|
|
|
|
|
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadStoneMatgloss(DFHackAPIHandle self, DFHackAPIVectorC *output);
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadGeology (DFHackAPIHandle self, DFHackAPIVectorC *assign);
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadWoodMatgloss (DFHackAPIHandle self, DFHackAPIVectorC *output);
|
|
|
|
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadMetalMatgloss(DFHackAPIHandle self, DFHackAPIVectorC *output);
|
|
|
|
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadPlantMatgloss(DFHackAPIHandle self, DFHackAPIVectorC *output);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadGeology(DFHackAPIHandle self, DFHackAPIVectorC *assign);
|
|
|
|
DFHACKAPI bool DFHackAPI_InitMap (DFHackAPIHandle self);
|
|
|
|
|
|
|
|
DFHACKAPI bool DFHackAPI_DestroyMap (DFHackAPIHandle self);
|
|
|
|
|
|
|
|
DFHACKAPI void DFHackAPI_getSize (DFHackAPIHandle self, uint32_t* x, uint32_t* y, uint32_t* z);
|
|
|
|
|
|
|
|
|
|
|
|
DFHACKAPI bool DFHackAPI_InitMap(DFHackAPIHandle self);
|
|
|
|
DFHACKAPI bool DFHackAPI_isValidBlock (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz);
|
|
|
|
DFHACKAPI bool DFHackAPI_DestroyMap(DFHackAPIHandle self);
|
|
|
|
|
|
|
|
DFHACKAPI void DFHackAPI_getSize(DFHackAPIHandle self, uint32_t* x, uint32_t* y, uint32_t* z);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DFHACKAPI bool DFHackAPI_isValidBlock(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz);
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadTileTypes (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint16_t *buffer);
|
|
|
|
|
|
|
|
DFHACKAPI bool DFHackAPI_WriteTileTypes (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint16_t *buffer);
|
|
|
|
|
|
|
|
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadTileTypes(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint16_t *buffer);
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadDesignations (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer);
|
|
|
|
DFHACKAPI bool DFHackAPI_WriteTileTypes(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint16_t *buffer);
|
|
|
|
DFHACKAPI bool DFHackAPI_WriteDesignations (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer);
|
|
|
|
|
|
|
|
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadDesignations(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer);
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadOccupancy (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer);
|
|
|
|
DFHACKAPI bool DFHackAPI_WriteDesignations (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer);
|
|
|
|
DFHACKAPI bool DFHackAPI_WriteOccupancy (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer);
|
|
|
|
|
|
|
|
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadOccupancy(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer);
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadRegionOffsets (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint8_t *buffer);
|
|
|
|
DFHACKAPI bool DFHackAPI_WriteOccupancy(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadRegionOffsets(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint8_t *buffer);
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadVeins (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, DFHackAPIVectorC * veins);
|
|
|
|
|
|
|
|
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadVeins(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, DFHackAPIVectorC * veins);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DFHACKAPI uint32_t DFHackAPI_InitReadConstructions (DFHackAPIHandle self);
|
|
|
|
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadConstruction (DFHackAPIHandle self, const uint32_t *index, t_construction * construction);
|
|
|
|
|
|
|
|
DFHACKAPI void DFHackAPI_FinishReadConstructions (DFHackAPIHandle self);
|
|
|
|
|
|
|
|
|
|
|
|
DFHACKAPI uint32_t DFHackAPI_InitReadConstructions(DFHackAPIHandle self);
|
|
|
|
DFHACKAPI uint32_t DFHackAPI_InitReadBuildings (DFHackAPIHandle self, DFHackAPIVectorC *v_buildingtypes);
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadConstruction(DFHackAPIHandle self, const uint32_t *index, t_construction * construction);
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadBuilding (DFHackAPIHandle self, const uint32_t *index, t_building * building);
|
|
|
|
DFHACKAPI void DFHackAPI_FinishReadConstructions(DFHackAPIHandle self);
|
|
|
|
DFHACKAPI void DFHackAPI_FinishReadBuildings (DFHackAPIHandle self);
|
|
|
|
|
|
|
|
|
|
|
|
DFHACKAPI uint32_t DFHackAPI_InitReadBuildings(DFHackAPIHandle self, DFHackAPIVectorC *v_buildingtypes);
|
|
|
|
DFHACKAPI uint32_t DFHackAPI_InitReadVegetation (DFHackAPIHandle self);
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadBuilding(DFHackAPIHandle self, const uint32_t *index, t_building * building);
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadVegetation (DFHackAPIHandle self, const uint32_t *index, t_tree_desc * shrubbery);
|
|
|
|
DFHACKAPI void DFHackAPI_FinishReadBuildings(DFHackAPIHandle self);
|
|
|
|
DFHACKAPI void DFHackAPI_FinishReadVegetation (DFHackAPIHandle self);
|
|
|
|
|
|
|
|
|
|
|
|
DFHACKAPI uint32_t DFHackAPI_InitReadVegetation(DFHackAPIHandle self);
|
|
|
|
DFHACKAPI uint32_t DFHackAPI_InitReadCreatures (DFHackAPIHandle self);
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadVegetation(DFHackAPIHandle self, const uint32_t *index, t_tree_desc * shrubbery);
|
|
|
|
DFHACKAPI bool DFHackAPI_ReadCreature (DFHackAPIHandle self, const uint32_t *index, t_creature * furball);
|
|
|
|
DFHACKAPI void DFHackAPI_FinishReadVegetation(DFHackAPIHandle self);
|
|
|
|
DFHACKAPI void DFHackAPI_FinishReadCreatures (DFHackAPIHandle self);
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -132,88 +140,99 @@ DFHACKAPI void DFHackAPI_FinishReadVegetation(DFHackAPIHandle self);
|
|
|
|
|
|
|
|
|
|
|
|
// C++ wrappers for C API that use vectors
|
|
|
|
// C++ wrappers for C API that use vectors
|
|
|
|
#ifdef __cplusplus
|
|
|
|
#ifdef __cplusplus
|
|
|
|
inline bool DFHackAPI_ReadStoneMatgloss(DFHackAPIHandle self, vector<t_matgloss> & output)
|
|
|
|
inline bool DFHackAPI_ReadStoneMatgloss (DFHackAPIHandle self, vector<t_matgloss> & output)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
DFHackAPIVectorC vector;
|
|
|
|
DFHackAPIVectorC vector;
|
|
|
|
bool result = DFHackAPI_ReadStoneMatgloss(self, &vector);
|
|
|
|
bool result = DFHackAPI_ReadStoneMatgloss (self, &vector);
|
|
|
|
uint32_t i;
|
|
|
|
uint32_t i;
|
|
|
|
for (i = 0; i < vector.length; i++)
|
|
|
|
for (i = 0; i < vector.length; i++)
|
|
|
|
output.push_back(((t_matgloss *) vector.data)[i]);
|
|
|
|
output.push_back ( ( (t_matgloss *) vector.data) [i]);
|
|
|
|
DFHackAPIVector_free(&vector);
|
|
|
|
DFHackAPIVector_free (&vector);
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool DFHackAPI_ReadWoodMatgloss (DFHackAPIHandle self, vector<t_matgloss> & output)
|
|
|
|
inline bool DFHackAPI_ReadWoodMatgloss (DFHackAPIHandle self, vector<t_matgloss> & output)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
DFHackAPIVectorC vector;
|
|
|
|
DFHackAPIVectorC vector;
|
|
|
|
bool result = DFHackAPI_ReadWoodMatgloss (self, &vector);
|
|
|
|
bool result = DFHackAPI_ReadWoodMatgloss (self, &vector);
|
|
|
|
uint32_t i;
|
|
|
|
uint32_t i;
|
|
|
|
for (i = 0; i < vector.length; i++)
|
|
|
|
for (i = 0; i < vector.length; i++)
|
|
|
|
output.push_back(((t_matgloss *) vector.data)[i]);
|
|
|
|
output.push_back ( ( (t_matgloss *) vector.data) [i]);
|
|
|
|
DFHackAPIVector_free(&vector);
|
|
|
|
DFHackAPIVector_free (&vector);
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inline bool DFHackAPI_ReadMetalMatgloss (DFHackAPIHandle self, vector<t_matgloss> & output)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
DFHackAPIVectorC vector;
|
|
|
|
|
|
|
|
bool result = DFHackAPI_ReadMetalMatgloss (self, &vector);
|
|
|
|
|
|
|
|
uint32_t i;
|
|
|
|
|
|
|
|
for (i = 0; i < vector.length; i++)
|
|
|
|
|
|
|
|
output.push_back ( ( (t_matgloss *) vector.data) [i]);
|
|
|
|
|
|
|
|
DFHackAPIVector_free (&vector);
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool DFHackAPI_ReadMetalMatgloss(DFHackAPIHandle self, vector<t_matgloss> & output)
|
|
|
|
inline bool DFHackAPI_ReadPlantMatgloss (DFHackAPIHandle self, vector<t_matgloss> & output)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
DFHackAPIVectorC vector;
|
|
|
|
DFHackAPIVectorC vector;
|
|
|
|
bool result = DFHackAPI_ReadMetalMatgloss(self, &vector);
|
|
|
|
bool result = DFHackAPI_ReadPlantMatgloss (self, &vector);
|
|
|
|
uint32_t i;
|
|
|
|
uint32_t i;
|
|
|
|
for (i = 0; i < vector.length; i++)
|
|
|
|
for (i = 0; i < vector.length; i++)
|
|
|
|
output.push_back(((t_matgloss *) vector.data)[i]);
|
|
|
|
output.push_back ( ( (t_matgloss *) vector.data) [i]);
|
|
|
|
DFHackAPIVector_free(&vector);
|
|
|
|
DFHackAPIVector_free (&vector);
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool DFHackAPI_ReadPlantMatgloss(DFHackAPIHandle self, vector<t_matgloss> & output)
|
|
|
|
inline bool DFHackAPI_ReadCreatureMatgloss (DFHackAPIHandle self, vector<t_matgloss> & output)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
DFHackAPIVectorC vector;
|
|
|
|
DFHackAPIVectorC vector;
|
|
|
|
bool result = DFHackAPI_ReadPlantMatgloss(self, &vector);
|
|
|
|
bool result = DFHackAPI_ReadCreatureMatgloss (self, &vector);
|
|
|
|
uint32_t i;
|
|
|
|
uint32_t i;
|
|
|
|
for (i = 0; i < vector.length; i++)
|
|
|
|
for (i = 0; i < vector.length; i++)
|
|
|
|
output.push_back(((t_matgloss *) vector.data)[i]);
|
|
|
|
output.push_back ( ( (t_matgloss *) vector.data) [i]);
|
|
|
|
DFHackAPIVector_free(&vector);
|
|
|
|
DFHackAPIVector_free (&vector);
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool DFHackAPI_ReadGeology(DFHackAPIHandle self, vector< vector<uint16_t> > &assign)
|
|
|
|
inline bool DFHackAPI_ReadGeology (DFHackAPIHandle self, vector< vector<uint16_t> > &assign)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
DFHackAPIVectorC vec;
|
|
|
|
DFHackAPIVectorC vec;
|
|
|
|
bool result = DFHackAPI_ReadGeology(self, &vec);
|
|
|
|
bool result = DFHackAPI_ReadGeology (self, &vec);
|
|
|
|
uint32_t i;
|
|
|
|
uint32_t i;
|
|
|
|
for (i = 0; i < vec.length; i++)
|
|
|
|
for (i = 0; i < vec.length; i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
DFHackAPIVectorC ¤t = ((DFHackAPIVectorC *) vec.data)[i];
|
|
|
|
DFHackAPIVectorC ¤t = ( (DFHackAPIVectorC *) vec.data) [i];
|
|
|
|
vector<uint16_t> fill;
|
|
|
|
vector<uint16_t> fill;
|
|
|
|
uint32_t j;
|
|
|
|
uint32_t j;
|
|
|
|
for (j = 0; j < current.length; j++)
|
|
|
|
for (j = 0; j < current.length; j++)
|
|
|
|
fill.push_back(((uint16_t *) current.data)[j]);
|
|
|
|
fill.push_back ( ( (uint16_t *) current.data) [j]);
|
|
|
|
assign.push_back(fill);
|
|
|
|
assign.push_back (fill);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
DFHackAPIVector_free(&vec);
|
|
|
|
DFHackAPIVector_free (&vec);
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool DFHackAPI_ReadVeins(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, vector <t_vein> & veins)
|
|
|
|
inline bool DFHackAPI_ReadVeins (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, vector <t_vein> & veins)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
DFHackAPIVectorC vector;
|
|
|
|
DFHackAPIVectorC vector;
|
|
|
|
bool result = DFHackAPI_ReadVeins(self, blockx, blocky, blockz, &vector);
|
|
|
|
bool result = DFHackAPI_ReadVeins (self, blockx, blocky, blockz, &vector);
|
|
|
|
uint32_t i;
|
|
|
|
uint32_t i;
|
|
|
|
for (i = 0; i < vector.length; i++)
|
|
|
|
for (i = 0; i < vector.length; i++)
|
|
|
|
veins.push_back(((t_vein *) vector.data)[i]);
|
|
|
|
veins.push_back ( ( (t_vein *) vector.data) [i]);
|
|
|
|
DFHackAPIVector_free(&vector);
|
|
|
|
DFHackAPIVector_free (&vector);
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline uint32_t DFHackAPI_InitReadBuildings(DFHackAPIHandle self, vector <string> &v_buildingtypes)
|
|
|
|
inline uint32_t DFHackAPI_InitReadBuildings (DFHackAPIHandle self, vector <string> &v_buildingtypes)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
DFHackAPIVectorC vector;
|
|
|
|
DFHackAPIVectorC vector;
|
|
|
|
uint32_t result = DFHackAPI_InitReadBuildings(self, &vector);
|
|
|
|
uint32_t result = DFHackAPI_InitReadBuildings (self, &vector);
|
|
|
|
uint32_t i;
|
|
|
|
uint32_t i;
|
|
|
|
for (i = 0; i < vector.length; i++)
|
|
|
|
for (i = 0; i < vector.length; i++)
|
|
|
|
v_buildingtypes.push_back(((const char **) vector.data)[i]);
|
|
|
|
v_buildingtypes.push_back ( ( (const char **) vector.data) [i]);
|
|
|
|
DFHackAPIVector_free(&vector);
|
|
|
|
DFHackAPIVector_free (&vector);
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif // __cplusplus
|
|
|
|
#endif // __cplusplus
|
|
|
|
|
|
|
|
|
|
|
@ -221,64 +240,67 @@ inline uint32_t DFHackAPI_InitReadBuildings(DFHackAPIHandle self, vector <string
|
|
|
|
#ifdef __cplusplus
|
|
|
|
#ifdef __cplusplus
|
|
|
|
class CDFHackAPI
|
|
|
|
class CDFHackAPI
|
|
|
|
{
|
|
|
|
{
|
|
|
|
DFHackAPIHandle handle;
|
|
|
|
DFHackAPIHandle handle;
|
|
|
|
public:
|
|
|
|
public:
|
|
|
|
CDFHackAPI(const string &path_to_xml)
|
|
|
|
CDFHackAPI (const string &path_to_xml)
|
|
|
|
: handle(CreateDFHackAPI(path_to_xml.c_str()))
|
|
|
|
: handle (CreateDFHackAPI (path_to_xml.c_str()))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (handle == NULL)
|
|
|
|
if (handle == NULL)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// TODO: handle failure
|
|
|
|
// TODO: handle failure
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline ~CDFHackAPI()
|
|
|
|
inline ~CDFHackAPI()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
DestroyDFHackAPI(handle);
|
|
|
|
DestroyDFHackAPI (handle);
|
|
|
|
handle = NULL;
|
|
|
|
handle = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool Attach()
|
|
|
|
inline bool Attach()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return DFHackAPI_Attach(handle);
|
|
|
|
return DFHackAPI_Attach (handle);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool Detach()
|
|
|
|
inline bool Detach()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return DFHackAPI_Detach(handle);
|
|
|
|
return DFHackAPI_Detach (handle);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool isAttached()
|
|
|
|
inline bool isAttached()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return DFHackAPI_isAttached(handle);
|
|
|
|
return DFHackAPI_isAttached (handle);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Matgloss. next four methods look very similar. I could use two and move the processing one level up...
|
|
|
|
* Matgloss. next four methods look very similar. I could use two and move the processing one level up...
|
|
|
|
* I'll keep it like this, even with the code duplication as it will hopefully get more features and separate data types later.
|
|
|
|
* I'll keep it like this, even with the code duplication as it will hopefully get more features and separate data types later.
|
|
|
|
* Yay for nebulous plans for a rock survey tool that tracks how much of which metal could be smelted from available resorces
|
|
|
|
* Yay for nebulous plans for a rock survey tool that tracks how much of which metal could be smelted from available resorces
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
inline bool ReadStoneMatgloss(vector<t_matgloss> & output)
|
|
|
|
inline bool ReadStoneMatgloss (vector<t_matgloss> & output)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return DFHackAPI_ReadStoneMatgloss(handle, output);
|
|
|
|
return DFHackAPI_ReadStoneMatgloss (handle, output);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool ReadWoodMatgloss (vector<t_matgloss> & output)
|
|
|
|
inline bool ReadWoodMatgloss (vector<t_matgloss> & output)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return DFHackAPI_ReadWoodMatgloss(handle, output);
|
|
|
|
return DFHackAPI_ReadWoodMatgloss (handle, output);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool ReadMetalMatgloss(vector<t_matgloss> & output)
|
|
|
|
inline bool ReadMetalMatgloss (vector<t_matgloss> & output)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return DFHackAPI_ReadMetalMatgloss(handle, output);
|
|
|
|
return DFHackAPI_ReadMetalMatgloss (handle, output);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool ReadPlantMatgloss(vector<t_matgloss> & output)
|
|
|
|
inline bool ReadPlantMatgloss (vector<t_matgloss> & output)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return DFHackAPI_ReadPlantMatgloss(handle, output);
|
|
|
|
return DFHackAPI_ReadPlantMatgloss (handle, output);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// FIXME: add creatures for all the creature products
|
|
|
|
inline bool ReadCreatureMatgloss (vector<t_matgloss> & output)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
return DFHackAPI_ReadCreatureMatgloss (handle, output);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// read region surroundings, get their vectors of geolayers so we can do translation (or just hand the translation table to the client)
|
|
|
|
// read region surroundings, get their vectors of geolayers so we can do translation (or just hand the translation table to the client)
|
|
|
|
// returns an array of 9 vectors of indices into stone matgloss
|
|
|
|
// returns an array of 9 vectors of indices into stone matgloss
|
|
|
@ -311,129 +333,146 @@ public:
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
inline bool ReadGeology( vector < vector <uint16_t> >& assign )
|
|
|
|
inline bool ReadGeology (vector < vector <uint16_t> >& assign)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return DFHackAPI_ReadGeology(handle, assign);
|
|
|
|
return DFHackAPI_ReadGeology (handle, assign);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
/*
|
|
|
|
* BLOCK DATA
|
|
|
|
* BLOCK DATA
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
/// allocate and read pointers to map blocks
|
|
|
|
/// allocate and read pointers to map blocks
|
|
|
|
inline bool InitMap()
|
|
|
|
inline bool InitMap()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return DFHackAPI_InitMap(handle);
|
|
|
|
return DFHackAPI_InitMap (handle);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// destroy the mapblock cache
|
|
|
|
/// destroy the mapblock cache
|
|
|
|
inline bool DestroyMap()
|
|
|
|
inline bool DestroyMap()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return DFHackAPI_DestroyMap(handle);
|
|
|
|
return DFHackAPI_DestroyMap (handle);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// get size of the map in tiles
|
|
|
|
/// get size of the map in tiles
|
|
|
|
inline void getSize(uint32_t& x, uint32_t& y, uint32_t& z)
|
|
|
|
inline void getSize (uint32_t& x, uint32_t& y, uint32_t& z)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
DFHackAPI_getSize(handle, &x, &y, &z);
|
|
|
|
DFHackAPI_getSize (handle, &x, &y, &z);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Return false/0 on failure, buffer allocated by client app, 256 items long
|
|
|
|
* Return false/0 on failure, buffer allocated by client app, 256 items long
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
inline bool isValidBlock(uint32_t blockx, uint32_t blocky, uint32_t blockz)
|
|
|
|
inline bool isValidBlock (uint32_t blockx, uint32_t blocky, uint32_t blockz)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return DFHackAPI_isValidBlock(handle, blockx, blocky, blockz);
|
|
|
|
return DFHackAPI_isValidBlock (handle, blockx, blocky, blockz);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool ReadTileTypes(uint32_t blockx, uint32_t blocky, uint32_t blockz, uint16_t *buffer) // 256 * sizeof(uint16_t)
|
|
|
|
inline bool ReadTileTypes (uint32_t blockx, uint32_t blocky, uint32_t blockz, uint16_t *buffer) // 256 * sizeof(uint16_t)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return DFHackAPI_ReadTileTypes(handle, blockx, blocky, blockz, buffer);
|
|
|
|
return DFHackAPI_ReadTileTypes (handle, blockx, blocky, blockz, buffer);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool WriteTileTypes(uint32_t blockx, uint32_t blocky, uint32_t blockz, uint16_t *buffer) // 256 * sizeof(uint16_t)
|
|
|
|
inline bool WriteTileTypes (uint32_t blockx, uint32_t blocky, uint32_t blockz, uint16_t *buffer) // 256 * sizeof(uint16_t)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return DFHackAPI_WriteTileTypes(handle, blockx, blocky, blockz, buffer);
|
|
|
|
return DFHackAPI_WriteTileTypes (handle, blockx, blocky, blockz, buffer);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool ReadDesignations(uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer) // 256 * sizeof(uint32_t)
|
|
|
|
inline bool ReadDesignations (uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer) // 256 * sizeof(uint32_t)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return DFHackAPI_ReadDesignations(handle, blockx, blocky, blockz, buffer);
|
|
|
|
return DFHackAPI_ReadDesignations (handle, blockx, blocky, blockz, buffer);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool WriteDesignations (uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer)
|
|
|
|
inline bool WriteDesignations (uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return DFHackAPI_WriteDesignations(handle, blockx, blocky, blockz, buffer);
|
|
|
|
return DFHackAPI_WriteDesignations (handle, blockx, blocky, blockz, buffer);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool ReadOccupancy(uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer) // 256 * sizeof(uint32_t)
|
|
|
|
inline bool ReadOccupancy (uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer) // 256 * sizeof(uint32_t)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return DFHackAPI_ReadOccupancy(handle, blockx, blocky, blockz, buffer);
|
|
|
|
return DFHackAPI_ReadOccupancy (handle, blockx, blocky, blockz, buffer);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool WriteOccupancy(uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer) // 256 * sizeof(uint32_t)
|
|
|
|
inline bool WriteOccupancy (uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer) // 256 * sizeof(uint32_t)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return DFHackAPI_WriteOccupancy(handle, blockx, blocky, blockz, buffer);
|
|
|
|
return DFHackAPI_WriteOccupancy (handle, blockx, blocky, blockz, buffer);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// read region offsets of a block
|
|
|
|
/// read region offsets of a block
|
|
|
|
inline bool ReadRegionOffsets(uint32_t blockx, uint32_t blocky, uint32_t blockz, uint8_t *buffer) // 16 * sizeof(uint8_t)
|
|
|
|
inline bool ReadRegionOffsets (uint32_t blockx, uint32_t blocky, uint32_t blockz, uint8_t *buffer) // 16 * sizeof(uint8_t)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return DFHackAPI_ReadRegionOffsets(handle, blockx, blocky, blockz, buffer);
|
|
|
|
return DFHackAPI_ReadRegionOffsets (handle, blockx, blocky, blockz, buffer);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// read aggregated veins of a block
|
|
|
|
/// read aggregated veins of a block
|
|
|
|
inline bool ReadVeins(uint32_t blockx, uint32_t blocky, uint32_t blockz, vector <t_vein> & veins)
|
|
|
|
inline bool ReadVeins (uint32_t blockx, uint32_t blocky, uint32_t blockz, vector <t_vein> & veins)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return DFHackAPI_ReadVeins(handle, blockx, blocky, blockz, veins);
|
|
|
|
return DFHackAPI_ReadVeins (handle, blockx, blocky, blockz, veins);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Buildings, constructions, plants, all pretty straighforward. InitReadBuildings returns all the building types as a mapping between a numeric values and strings
|
|
|
|
* Buildings, constructions, plants, all pretty straighforward. InitReadBuildings returns all the building types as a mapping between a numeric values and strings
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
inline uint32_t InitReadConstructions()
|
|
|
|
inline uint32_t InitReadConstructions()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return DFHackAPI_InitReadConstructions(handle);
|
|
|
|
return DFHackAPI_InitReadConstructions (handle);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool ReadConstruction(const uint32_t &index, t_construction & construction)
|
|
|
|
inline bool ReadConstruction (const uint32_t &index, t_construction & construction)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return DFHackAPI_ReadConstruction(handle, &index, & construction);
|
|
|
|
return DFHackAPI_ReadConstruction (handle, &index, & construction);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline void FinishReadConstructions()
|
|
|
|
inline void FinishReadConstructions()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
DFHackAPI_FinishReadConstructions(handle);
|
|
|
|
DFHackAPI_FinishReadConstructions (handle);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline uint32_t InitReadBuildings(vector <string> &v_buildingtypes)
|
|
|
|
inline uint32_t InitReadBuildings (vector <string> &v_buildingtypes)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return DFHackAPI_InitReadBuildings(handle, v_buildingtypes);
|
|
|
|
return DFHackAPI_InitReadBuildings (handle, v_buildingtypes);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool ReadBuilding(const uint32_t &index, t_building & building)
|
|
|
|
inline bool ReadBuilding (const uint32_t &index, t_building & building)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return DFHackAPI_ReadBuilding(handle, &index, &building);
|
|
|
|
return DFHackAPI_ReadBuilding (handle, &index, &building);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline void FinishReadBuildings()
|
|
|
|
inline void FinishReadBuildings()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
DFHackAPI_FinishReadBuildings(handle);
|
|
|
|
DFHackAPI_FinishReadBuildings (handle);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline uint32_t InitReadVegetation()
|
|
|
|
inline uint32_t InitReadVegetation()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return DFHackAPI_InitReadVegetation(handle);
|
|
|
|
return DFHackAPI_InitReadVegetation (handle);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool ReadVegetation(const uint32_t &index, t_tree_desc & shrubbery)
|
|
|
|
inline bool ReadVegetation (const uint32_t &index, t_tree_desc & shrubbery)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return DFHackAPI_ReadVegetation(handle, &index, &shrubbery);
|
|
|
|
return DFHackAPI_ReadVegetation (handle, &index, &shrubbery);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline void FinishReadVegetation()
|
|
|
|
inline void FinishReadVegetation()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
DFHackAPI_FinishReadVegetation(handle);
|
|
|
|
DFHackAPI_FinishReadVegetation (handle);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inline uint32_t InitReadCreatures()
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
return DFHackAPI_InitReadCreatures (handle);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inline bool ReadCreature (const uint32_t &index, t_creature & furball)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
return DFHackAPI_ReadCreature (handle, &index, &furball);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inline void FinishReadCreatures()
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
DFHackAPI_FinishReadCreatures (handle);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
};
|
|
|
|
#endif // __cplusplus
|
|
|
|
#endif // __cplusplus
|
|
|
|
|
|
|
|
|
|
|
|