got reading/writing working

develop
doomchild 2010-04-15 15:56:13 -05:00
parent f65d4cfb29
commit 3db399504e
1 changed files with 188 additions and 4 deletions

@ -157,6 +157,19 @@ static PyObject* BuildTileTypes40d(DFHack::tiletypes40d& types)
return list; return list;
} }
static void ReverseBuildTileTypes40d(PyObject* list, DFHack::tiletypes40d t_types)
{
PyObject* innerList;
for(int i = 0; i < 16; i++)
{
innerList = PyList_GetItem(list, i);
for(int j = 0; j < 16; j++)
t_types[i][j] = (uint16_t)PyInt_AsLong(PyList_GetItem(innerList, j));
}
}
static PyObject* BuildOccupancies40d(DFHack::occupancies40d& occ) static PyObject* BuildOccupancies40d(DFHack::occupancies40d& occ)
{ {
PyObject *list, *temp, *args; PyObject *list, *temp, *args;
@ -172,6 +185,8 @@ static PyObject* BuildOccupancies40d(DFHack::occupancies40d& occ)
args = Py_BuildValue("(I)", occ[i][j].whole); args = Py_BuildValue("(I)", occ[i][j].whole);
PyList_SET_ITEM(temp, j, PyObject_CallObject(OccupancyFlags_type, args)); PyList_SET_ITEM(temp, j, PyObject_CallObject(OccupancyFlags_type, args));
Py_DECREF(args);
} }
PyList_SET_ITEM(list, i, temp); PyList_SET_ITEM(list, i, temp);
@ -180,6 +195,19 @@ static PyObject* BuildOccupancies40d(DFHack::occupancies40d& occ)
return list; return list;
} }
static void ReverseBuildOccupancies40d(PyObject* list, DFHack::occupancies40d occ)
{
PyObject* innerList;
for(int i = 0; i < 16; i++)
{
innerList = PyList_GetItem(list, i);
for(int j = 0; j < 16; j++)
occ[i][j].whole = (uint32_t)PyInt_AsLong(PyList_GetItem(innerList, j));
}
}
static PyObject* BuildDesignations40d(DFHack::designations40d& des) static PyObject* BuildDesignations40d(DFHack::designations40d& des)
{ {
PyObject *list, *temp, *args; PyObject *list, *temp, *args;
@ -194,7 +222,9 @@ static PyObject* BuildDesignations40d(DFHack::designations40d& des)
{ {
args = Py_BuildValue("(I)", des[i][j].whole); args = Py_BuildValue("(I)", des[i][j].whole);
PyList_SET_ITEM(temp, j, PyObject_CallObject(DesignationFlags_type, args)); PyList_SET_ITEM(temp, j, PyObject_Call(DesignationFlags_type, args, NULL));
Py_DECREF(args);
} }
PyList_SET_ITEM(list, i, temp); PyList_SET_ITEM(list, i, temp);
@ -203,6 +233,19 @@ static PyObject* BuildDesignations40d(DFHack::designations40d& des)
return list; return list;
} }
static void ReverseBuildDesignations40d(PyObject* list, DFHack::designations40d& des)
{
PyObject* innerList;
for(int i = 0; i < 16; i++)
{
innerList = PyList_GetItem(list, i);
for(int j = 0; j < 16; j++)
des[i][j].whole = (uint32_t)PyInt_AsLong(PyList_GET_ITEM(innerList, j));
}
}
static PyObject* BuildBiomeIndices40d(DFHack::biome_indices40d& idx) static PyObject* BuildBiomeIndices40d(DFHack::biome_indices40d& idx)
{ {
PyObject *list; PyObject *list;
@ -215,6 +258,12 @@ static PyObject* BuildBiomeIndices40d(DFHack::biome_indices40d& idx)
return list; return list;
} }
static void ReverseBuildBiomeIndices40d(PyObject* list, DFHack::biome_indices40d bio)
{
for(int i = 0; i < 16; i++)
bio[i] = (uint8_t)PyInt_AsLong(PyList_GetItem(list, i));
}
static PyObject* BuildMapBlock40d(DFHack::mapblock40d& block) static PyObject* BuildMapBlock40d(DFHack::mapblock40d& block)
{ {
PyObject *b_Obj; PyObject *b_Obj;
@ -340,6 +389,21 @@ static PyObject* DF_Map_IsValidBlock(DF_Map* self, PyObject* args)
Py_RETURN_NONE; Py_RETURN_NONE;
} }
static PyObject* DF_Map_GetBlockPtr(DF_Map* self, PyObject* args)
{
uint32_t x, y, z;
if(self->m_Ptr != NULL)
{
if(!PyArg_ParseTuple(args, "III", &x, &y, &z))
return NULL;
return PyInt_FromLong(self->m_Ptr->getBlockPtr(x, y, z));
}
Py_RETURN_NONE;
}
static PyObject* DF_Map_ReadBlock40d(DF_Map* self, PyObject* args) static PyObject* DF_Map_ReadBlock40d(DF_Map* self, PyObject* args)
{ {
uint32_t x, y, z; uint32_t x, y, z;
@ -378,6 +442,29 @@ static PyObject* DF_Map_ReadTileTypes(DF_Map* self, PyObject* args)
Py_RETURN_NONE; Py_RETURN_NONE;
} }
static PyObject* DF_Map_WriteTileTypes(DF_Map* self, PyObject* args)
{
PyObject* tileList;
uint32_t x, y, z;
if(self->m_Ptr != NULL)
{
if(!PyArg_ParseTuple(args, "IIIO", &x, &y, &z, &tileList))
return NULL;
tiletypes40d t_types;
ReverseBuildTileTypes40d(tileList, t_types);
if(self->m_Ptr->WriteTileTypes(x, y, z, &t_types))
Py_RETURN_TRUE;
else
Py_RETURN_FALSE;
}
Py_RETURN_NONE;
}
static PyObject* DF_Map_ReadDesignations(DF_Map* self, PyObject* args) static PyObject* DF_Map_ReadDesignations(DF_Map* self, PyObject* args)
{ {
uint32_t x, y, z; uint32_t x, y, z;
@ -387,7 +474,7 @@ static PyObject* DF_Map_ReadDesignations(DF_Map* self, PyObject* args)
if(!PyArg_ParseTuple(args, "III", &x, &y, &z)) if(!PyArg_ParseTuple(args, "III", &x, &y, &z))
return NULL; return NULL;
designations40d des; DFHack::designations40d des;
if(self->m_Ptr->ReadDesignations(x, y, z, &des)) if(self->m_Ptr->ReadDesignations(x, y, z, &des))
return BuildDesignations40d(des); return BuildDesignations40d(des);
@ -396,6 +483,29 @@ static PyObject* DF_Map_ReadDesignations(DF_Map* self, PyObject* args)
Py_RETURN_NONE; Py_RETURN_NONE;
} }
static PyObject* DF_Map_WriteDesignations(DF_Map* self, PyObject* args)
{
PyObject* desList;
uint32_t x, y, z;
if(self->m_Ptr != NULL)
{
if(!PyArg_ParseTuple(args, "IIIO", &x, &y, &z, &desList))
return NULL;
designations40d des;
ReverseBuildDesignations40d(desList, des);
if(self->m_Ptr->WriteDesignations(x, y, z, &des))
Py_RETURN_TRUE;
else
Py_RETURN_FALSE;
}
Py_RETURN_NONE;
}
static PyObject* DF_Map_ReadOccupancy(DF_Map* self, PyObject* args) static PyObject* DF_Map_ReadOccupancy(DF_Map* self, PyObject* args)
{ {
uint32_t x, y, z; uint32_t x, y, z;
@ -414,6 +524,29 @@ static PyObject* DF_Map_ReadOccupancy(DF_Map* self, PyObject* args)
Py_RETURN_NONE; Py_RETURN_NONE;
} }
static PyObject* DF_Map_WriteOccupancy(DF_Map* self, PyObject* args)
{
PyObject* occList;
uint32_t x, y, z;
if(self->m_Ptr != NULL)
{
if(!PyArg_ParseTuple(args, "IIIO", &x, &y, &z, &occList))
return NULL;
occupancies40d occ;
ReverseBuildOccupancies40d(occList, occ);
if(self->m_Ptr->WriteOccupancy(x, y, z, &occ))
Py_RETURN_TRUE;
else
Py_RETURN_FALSE;
}
Py_RETURN_NONE;
}
static PyObject* DF_Map_ReadDirtyBit(DF_Map* self, PyObject* args) static PyObject* DF_Map_ReadDirtyBit(DF_Map* self, PyObject* args)
{ {
uint32_t x, y, z; uint32_t x, y, z;
@ -435,6 +568,30 @@ static PyObject* DF_Map_ReadDirtyBit(DF_Map* self, PyObject* args)
Py_RETURN_NONE; Py_RETURN_NONE;
} }
static PyObject* DF_Map_WriteDirtyBit(DF_Map* self, PyObject* args)
{
uint32_t x, y, z, b;
bool bit;
if(self->m_Ptr != NULL)
{
if(!PyArg_ParseTuple(args, "IIIi", &x, &y, &z, &b))
return NULL;
if(b != 0)
bit = true;
else
bit = false;
if(self->m_Ptr->WriteDirtyBit(x, y, z, bit))
Py_RETURN_TRUE;
else
Py_RETURN_FALSE;
}
Py_RETURN_NONE;
}
static PyObject* DF_Map_ReadBlockFlags(DF_Map* self, PyObject* args) static PyObject* DF_Map_ReadBlockFlags(DF_Map* self, PyObject* args)
{ {
uint32_t x, y, z; uint32_t x, y, z;
@ -453,6 +610,28 @@ static PyObject* DF_Map_ReadBlockFlags(DF_Map* self, PyObject* args)
Py_RETURN_NONE; Py_RETURN_NONE;
} }
static PyObject* DF_Map_WriteBlockFlags(DF_Map* self, PyObject* args)
{
uint32_t x, y, z, whole;
if(self->m_Ptr != NULL)
{
if(!PyArg_ParseTuple(args, "IIII", &x, &y, &z, &whole))
return NULL;
t_blockflags blockFlags;
blockFlags.whole = whole;
if(self->m_Ptr->WriteBlockFlags(x, y, z, blockFlags))
Py_RETURN_TRUE;
else
Py_RETURN_FALSE;
}
Py_RETURN_NONE;
}
static PyObject* DF_Map_ReadRegionOffsets(DF_Map* self, PyObject* args) static PyObject* DF_Map_ReadRegionOffsets(DF_Map* self, PyObject* args)
{ {
uint32_t x, y, z; uint32_t x, y, z;
@ -478,10 +657,15 @@ static PyMethodDef DF_Map_methods[] =
{"Is_Valid_Block", (PyCFunction)DF_Map_IsValidBlock, METH_VARARGS, ""}, {"Is_Valid_Block", (PyCFunction)DF_Map_IsValidBlock, METH_VARARGS, ""},
{"Read_Block_40d", (PyCFunction)DF_Map_ReadBlock40d, METH_VARARGS, ""}, {"Read_Block_40d", (PyCFunction)DF_Map_ReadBlock40d, METH_VARARGS, ""},
{"Read_Tile_Types", (PyCFunction)DF_Map_ReadTileTypes, METH_VARARGS, ""}, {"Read_Tile_Types", (PyCFunction)DF_Map_ReadTileTypes, METH_VARARGS, ""},
{"Write_Tile_Types", (PyCFunction)DF_Map_WriteTileTypes, METH_VARARGS, ""},
{"Read_Designations", (PyCFunction)DF_Map_ReadDesignations, METH_VARARGS, ""}, {"Read_Designations", (PyCFunction)DF_Map_ReadDesignations, METH_VARARGS, ""},
{"Write_Designations", (PyCFunction)DF_Map_WriteDesignations, METH_VARARGS, ""},
{"Read_Occupancy", (PyCFunction)DF_Map_ReadOccupancy, METH_VARARGS, ""}, {"Read_Occupancy", (PyCFunction)DF_Map_ReadOccupancy, METH_VARARGS, ""},
{"Write_Occupancy", (PyCFunction)DF_Map_WriteOccupancy, METH_VARARGS, ""},
{"Read_Dirty_Bit", (PyCFunction)DF_Map_ReadDirtyBit, METH_VARARGS, ""}, {"Read_Dirty_Bit", (PyCFunction)DF_Map_ReadDirtyBit, METH_VARARGS, ""},
{"Write_Dirty_Bit", (PyCFunction)DF_Map_WriteDirtyBit, METH_VARARGS, ""},
{"Read_Block_Flags", (PyCFunction)DF_Map_ReadBlockFlags, METH_VARARGS, ""}, {"Read_Block_Flags", (PyCFunction)DF_Map_ReadBlockFlags, METH_VARARGS, ""},
{"Write_Block_Flags", (PyCFunction)DF_Map_WriteBlockFlags, METH_VARARGS, ""},
{"Read_Region_Offsets", (PyCFunction)DF_Map_ReadRegionOffsets, METH_VARARGS, ""}, {"Read_Region_Offsets", (PyCFunction)DF_Map_ReadRegionOffsets, METH_VARARGS, ""},
{NULL} //Sentinel {NULL} //Sentinel
}; };
@ -496,7 +680,7 @@ static PyObject* DF_Map_getSize(DF_Map* self, void* closure)
{ {
self->m_Ptr->getSize(x, y, z); self->m_Ptr->getSize(x, y, z);
return PyTuple_Pack(3, x, y, z); return Py_BuildValue("III", x, y, z);
} }
Py_RETURN_NONE; Py_RETURN_NONE;
@ -504,7 +688,7 @@ static PyObject* DF_Map_getSize(DF_Map* self, void* closure)
static PyGetSetDef DF_Map_getterSetters[] = static PyGetSetDef DF_Map_getterSetters[] =
{ {
{"size", (getter)DF_Map_getSize, NULL, "dictionaries", NULL}, {"size", (getter)DF_Map_getSize, NULL, "size", NULL},
{NULL} // Sentinel {NULL} // Sentinel
}; };