cleaning up for merge
This commit is contained in:
parent
d7228172c4
commit
b114ec3085
|
@ -53,12 +53,21 @@ PyObject* PyInit_mcrfpy()
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// This code runs, but Python segfaults when accessing the UIFrame type.
|
|
||||||
//std::cout << "Adding UIFrame object to module\n";
|
|
||||||
using namespace mcrfpydef;
|
using namespace mcrfpydef;
|
||||||
PyTypeObject* pytypes[] = {&PyColorType, &PyFontType, &PyUICaptionType, &PyTextureType, &PyUISpriteType, &PyUIFrameType, &PyUICollectionType,
|
PyTypeObject* pytypes[] = {
|
||||||
&PyUICollectionIterType, &PyUIGridPointType, &PyUIGridPointStateType, &PyUIEntityType, &PyUIEntityCollectionType,
|
/*SFML exposed types*/
|
||||||
&PyUIEntityCollectionIterType, &PyUIGridType, nullptr};
|
&PyColorType, &PyFontType, &PyTextureType,
|
||||||
|
|
||||||
|
/*UI widgets*/
|
||||||
|
&PyUICaptionType, &PyUISpriteType, &PyUIFrameType, &PyUIEntityType, &PyUIGridType,
|
||||||
|
|
||||||
|
/*game map & perspective data*/
|
||||||
|
&PyUIGridPointType, &PyUIGridPointStateType,
|
||||||
|
|
||||||
|
/*collections & iterators*/
|
||||||
|
&PyUICollectionType, &PyUICollectionIterType,
|
||||||
|
&PyUIEntityCollectionType, &PyUIEntityCollectionIterType,
|
||||||
|
nullptr};
|
||||||
int i = 0;
|
int i = 0;
|
||||||
auto t = pytypes[i];
|
auto t = pytypes[i];
|
||||||
while (t != nullptr)
|
while (t != nullptr)
|
||||||
|
@ -67,26 +76,6 @@ PyObject* PyInit_mcrfpy()
|
||||||
PyModule_AddType(m, t);
|
PyModule_AddType(m, t);
|
||||||
t = pytypes[i++];
|
t = pytypes[i++];
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
PyModule_AddType(m, &mcrfpydef::PyColorType);
|
|
||||||
PyModule_AddType(m, &mcrfpydef::PyFontType);
|
|
||||||
PyModule_AddType(m, &mcrfpydef::PyUICaptionType);
|
|
||||||
PyModule_AddType(m, &mcrfpydef::PyTextureType);
|
|
||||||
PyModule_AddType(m, &mcrfpydef::PyUISpriteType);
|
|
||||||
|
|
||||||
PyModule_AddType(m, &mcrfpydef::PyUIFrameType);
|
|
||||||
PyModule_AddType(m, &mcrfpydef::PyUICollectionType);
|
|
||||||
PyModule_AddType(m, &mcrfpydef::PyUICollectionIterType);
|
|
||||||
|
|
||||||
PyModule_AddType(m, &mcrfpydef::PyUIGridPointType);
|
|
||||||
PyModule_AddType(m, &mcrfpydef::PyUIGridPointStateType);
|
|
||||||
PyModule_AddType(m, &mcrfpydef::PyUIEntityType);
|
|
||||||
PyModule_AddType(m, &mcrfpydef::PyUIEntityCollectionIterType);
|
|
||||||
PyModule_AddType(m, &mcrfpydef::PyUIEntityCollectionType);
|
|
||||||
|
|
||||||
PyModule_AddType(m, &mcrfpydef::PyUIGridType);
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#include "PyTexture.h"
|
#include "PyTexture.h"
|
||||||
using namespace mcrfpydef;
|
|
||||||
|
|
||||||
|
|
||||||
PyTexture::PyTexture(std::string filename, int sprite_w, int sprite_h)
|
PyTexture::PyTexture(std::string filename, int sprite_w, int sprite_h)
|
||||||
|
@ -17,17 +16,6 @@ PyTexture::PyTexture(std::string filename, int sprite_w, int sprite_h)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* // bit misguided here: holding self might prevent the shared_ptr from ever being released.
|
|
||||||
PyTexture::~PyTexture()
|
|
||||||
{
|
|
||||||
if (self != NULL)
|
|
||||||
{
|
|
||||||
(PyTextureObject*)self->data.reset();
|
|
||||||
Py_DECREF(self);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
sf::Sprite PyTexture::sprite(int index, sf::Vector2f pos, sf::Vector2f s)
|
sf::Sprite PyTexture::sprite(int index, sf::Vector2f pos, sf::Vector2f s)
|
||||||
{
|
{
|
||||||
int tx = index % sheet_width, ty = index / sheet_width;
|
int tx = index % sheet_width, ty = index / sheet_width;
|
||||||
|
@ -40,30 +28,21 @@ sf::Sprite PyTexture::sprite(int index, sf::Vector2f pos, sf::Vector2f s)
|
||||||
|
|
||||||
PyObject* PyTexture::pyObject()
|
PyObject* PyTexture::pyObject()
|
||||||
{
|
{
|
||||||
//PyTextureObject* self = (PyTextureObject*)pynew(&mcrfpydef::PyTextureType, NULL, NULL);
|
PyObject* obj = PyType_GenericAlloc(&mcrfpydef::PyTextureType, 0);
|
||||||
std::cout << "tp_alloc (GenericAlloc)" << std::endl;
|
|
||||||
//PyObject* obj = ((&PyTextureType)->tp_alloc(&PyTextureType, 0));
|
|
||||||
//PyObject* obj = pynew(&PyTextureType);
|
|
||||||
PyObject* obj = PyType_GenericAlloc(&PyTextureType, 0);
|
|
||||||
std::cout << "alloc worked" << std::endl;
|
|
||||||
//Py_INCREF(self);
|
|
||||||
try {
|
try {
|
||||||
std::cout << "assign data to self" << std::endl;
|
|
||||||
((PyTextureObject*)obj)->data = shared_from_this();
|
((PyTextureObject*)obj)->data = shared_from_this();
|
||||||
}
|
}
|
||||||
catch (std::bad_weak_ptr& e)
|
catch (std::bad_weak_ptr& e)
|
||||||
{
|
{
|
||||||
std::cout << "Bad weak ptr: shared_from_this() failed" << std::endl;
|
std::cout << "Bad weak ptr: shared_from_this() failed in PyTexture::pyObject(); did you create a PyTexture outside of std::make_shared? enjoy your segfault, soon!" << std::endl;
|
||||||
}
|
}
|
||||||
// TODO - shared_from_this will raise an exception if the object does not have a shared pointer. Constructor should be made private; write a factory function
|
// TODO - shared_from_this will raise an exception if the object does not have a shared pointer. Constructor should be made private; write a factory function
|
||||||
std::cout << "returning PyObject" << std::endl;
|
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
Py_hash_t PyTexture::hash(PyObject* obj)
|
Py_hash_t PyTexture::hash(PyObject* obj)
|
||||||
{
|
{
|
||||||
auto self = (PyTextureObject*)obj;
|
auto self = (PyTextureObject*)obj;
|
||||||
//return static_cast<Py_hash_t>(reinterpret_cast<long>(self->data));
|
|
||||||
return reinterpret_cast<Py_hash_t>(self->data.get());
|
return reinterpret_cast<Py_hash_t>(self->data.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,48 +2,31 @@
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
#include "Python.h"
|
#include "Python.h"
|
||||||
|
|
||||||
|
class PyTexture;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
std::shared_ptr<PyTexture> data;
|
||||||
|
} PyTextureObject;
|
||||||
|
|
||||||
|
class PyTexture : public std::enable_shared_from_this<PyTexture>
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
sf::Texture texture;
|
||||||
|
std::string source;
|
||||||
|
int sheet_width, sheet_height;
|
||||||
|
public:
|
||||||
|
int sprite_width, sprite_height; // just use them read only, OK?
|
||||||
|
PyTexture(std::string filename, int sprite_w, int sprite_h);
|
||||||
|
sf::Sprite sprite(int index, sf::Vector2f pos = sf::Vector2f(0, 0), sf::Vector2f s = sf::Vector2f(1.0, 1.0));
|
||||||
|
|
||||||
|
PyObject* pyObject();
|
||||||
|
static Py_hash_t hash(PyObject*);
|
||||||
|
static int init(PyTextureObject*, PyObject*, PyObject*);
|
||||||
|
static PyObject* pynew(PyTypeObject* type, PyObject* args=NULL, PyObject* kwds=NULL);
|
||||||
|
};
|
||||||
|
|
||||||
namespace mcrfpydef {
|
namespace mcrfpydef {
|
||||||
class PyTexture;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
PyObject_HEAD
|
|
||||||
std::shared_ptr<PyTexture> data;
|
|
||||||
} PyTextureObject;
|
|
||||||
|
|
||||||
class PyTexture : public std::enable_shared_from_this<PyTexture>
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
sf::Texture texture;
|
|
||||||
std::string source;
|
|
||||||
int sheet_width, sheet_height;
|
|
||||||
protected:
|
|
||||||
//PyObject* self = 0;
|
|
||||||
public:
|
|
||||||
int sprite_width, sprite_height; // just use them read only, OK?
|
|
||||||
PyTexture(std::string filename, int sprite_w, int sprite_h);
|
|
||||||
sf::Sprite sprite(int index, sf::Vector2f pos = sf::Vector2f(0, 0), sf::Vector2f s = sf::Vector2f(1.0, 1.0));
|
|
||||||
|
|
||||||
PyObject* pyObject();
|
|
||||||
static Py_hash_t hash(PyObject*);
|
|
||||||
static int init(PyTextureObject*, PyObject*, PyObject*);
|
|
||||||
static PyObject* pynew(PyTypeObject* type, PyObject* args=NULL, PyObject* kwds=NULL);
|
|
||||||
};
|
|
||||||
/*
|
|
||||||
static int PyTexture_init(PyTextureObject* self, PyObject* args, PyObject* kwds)
|
|
||||||
{
|
|
||||||
//std::cout << "Init called\n";
|
|
||||||
static const char* keywords[] = { "filename", "grid_size", "grid_width", "grid_height", nullptr };
|
|
||||||
char* filename;
|
|
||||||
int grid_size, grid_width, grid_height;
|
|
||||||
|
|
||||||
if (!PyArg_ParseTupleAndKeywords(args, kwds, "siii", const_cast<char**>(keywords), &filename, &grid_size, &grid_width, &grid_height))
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
self->data = std::make_shared<PyTexture>(filename, grid_size, grid_size);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
static PyTypeObject PyTextureType = {
|
static PyTypeObject PyTextureType = {
|
||||||
.tp_name = "mcrfpy.Texture",
|
.tp_name = "mcrfpy.Texture",
|
||||||
.tp_basicsize = sizeof(PyTextureObject),
|
.tp_basicsize = sizeof(PyTextureObject),
|
||||||
|
@ -53,12 +36,5 @@ namespace mcrfpydef {
|
||||||
.tp_doc = PyDoc_STR("SFML Texture Object"),
|
.tp_doc = PyDoc_STR("SFML Texture Object"),
|
||||||
.tp_init = (initproc)PyTexture::init,
|
.tp_init = (initproc)PyTexture::init,
|
||||||
.tp_new = PyTexture::pynew,
|
.tp_new = PyTexture::pynew,
|
||||||
/*
|
|
||||||
[](PyTypeObject* type, PyObject* args, PyObject* kwds) -> PyObject*
|
|
||||||
{
|
|
||||||
PyTextureObject* self = (PyTextureObject*)type->tp_alloc(type, 0);
|
|
||||||
return (PyObject*)self;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,8 +2,6 @@
|
||||||
#include "Resources.h"
|
#include "Resources.h"
|
||||||
#include "GameEngine.h"
|
#include "GameEngine.h"
|
||||||
|
|
||||||
using namespace mcrfpydef;
|
|
||||||
|
|
||||||
/* //callability fields & methods
|
/* //callability fields & methods
|
||||||
PyObject* click_callable;
|
PyObject* click_callable;
|
||||||
virtual UIDrawable* click_at(sf::Vector2f point);
|
virtual UIDrawable* click_at(sf::Vector2f point);
|
||||||
|
|
55
src/UI.h
55
src/UI.h
|
@ -8,8 +8,6 @@
|
||||||
#include "PyCallable.h"
|
#include "PyCallable.h"
|
||||||
#include "PyTexture.h"
|
#include "PyTexture.h"
|
||||||
|
|
||||||
using namespace mcrfpydef;
|
|
||||||
|
|
||||||
enum PyObjectsEnum : int
|
enum PyObjectsEnum : int
|
||||||
{
|
{
|
||||||
UIFRAME = 1,
|
UIFRAME = 1,
|
||||||
|
@ -1082,58 +1080,6 @@ static int PyUIDrawable_set_click(PyUIGridObject* self, PyObject* value, void* c
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
* Begin PyTextureType defs
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* // Definition moved to PyTexture.h
|
|
||||||
typedef struct {
|
|
||||||
PyObject_HEAD
|
|
||||||
std::shared_ptr<PyTexture> data;
|
|
||||||
} PyTextureObject;
|
|
||||||
|
|
||||||
|
|
||||||
static int PyTexture_init(PyTextureObject* self, PyObject* args, PyObject* kwds)
|
|
||||||
{
|
|
||||||
//std::cout << "Init called\n";
|
|
||||||
static const char* keywords[] = { "filename", "grid_size", "grid_width", "grid_height", nullptr };
|
|
||||||
char* filename;
|
|
||||||
int grid_size, grid_width, grid_height;
|
|
||||||
|
|
||||||
if (!PyArg_ParseTupleAndKeywords(args, kwds, "siii", const_cast<char**>(keywords), &filename, &grid_size, &grid_width, &grid_height))
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
//sf::Texture t = sf::Texture();
|
|
||||||
//t.loadFromFile((std::string)filename);
|
|
||||||
self->data = std::make_shared<PyTexture>(filename, grid_size, grid_size);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static PyTypeObject PyTextureType = {
|
|
||||||
//PyVarObject_HEAD_INIT(NULL, 0)
|
|
||||||
.tp_name = "mcrfpy.Texture",
|
|
||||||
.tp_basicsize = sizeof(PyTextureObject),
|
|
||||||
.tp_itemsize = 0,
|
|
||||||
.tp_flags = Py_TPFLAGS_DEFAULT,
|
|
||||||
.tp_doc = PyDoc_STR("SFML Texture Object"),
|
|
||||||
.tp_init = (initproc)PyTexture_init,
|
|
||||||
.tp_new = [](PyTypeObject* type, PyObject* args, PyObject* kwds) -> PyObject*
|
|
||||||
{
|
|
||||||
PyTextureObject* self = (PyTextureObject*)type->tp_alloc(type, 0);
|
|
||||||
return (PyObject*)self;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
* End PyTextureType defs
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Begin template generation for PyUISpriteType
|
* Begin template generation for PyUISpriteType
|
||||||
|
@ -1218,7 +1164,6 @@ static int PyUIDrawable_set_click(PyUIGridObject* self, PyObject* value, void* c
|
||||||
|
|
||||||
static PyObject* PyUISprite_get_texture(PyUISpriteObject* self, void* closure)
|
static PyObject* PyUISprite_get_texture(PyUISpriteObject* self, void* closure)
|
||||||
{
|
{
|
||||||
std::cout << "Calling pyObject" << std::endl;
|
|
||||||
return self->data->getTexture()->pyObject();
|
return self->data->getTexture()->pyObject();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue