feat: Add Vector convenience features - indexing, tuple comparison, floor
Implements issue #109 improvements to mcrfpy.Vector: - Sequence protocol: v[0], v[1], v[-1], v[-2], len(v), tuple(v), x,y = v - Tuple comparison: v == (5, 6), v != (1, 2) works bidirectionally - .floor() method: returns new Vector with floored coordinates - .int property: returns (int(floor(x)), int(floor(y))) tuple for dict keys The sequence protocol enables unpacking and iteration, making Vector interoperable with code expecting tuples. The tuple comparison fixes compatibility issues where functions returning Vector broke code expecting tuple comparison (e.g., in Crypt of Sokoban). Closes #109 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
afcb54d9fe
commit
f041a0c8ca
3 changed files with 329 additions and 14 deletions
|
|
@ -45,15 +45,24 @@ public:
|
|||
static PyObject* distance_to(PyVectorObject*, PyObject*);
|
||||
static PyObject* angle(PyVectorObject*, PyObject*);
|
||||
static PyObject* copy(PyVectorObject*, PyObject*);
|
||||
static PyObject* floor(PyVectorObject*, PyObject*);
|
||||
|
||||
// Sequence protocol
|
||||
static Py_ssize_t sequence_length(PyObject*);
|
||||
static PyObject* sequence_item(PyObject*, Py_ssize_t);
|
||||
|
||||
// Additional properties
|
||||
static PyObject* get_int(PyObject*, void*);
|
||||
|
||||
static PyGetSetDef getsetters[];
|
||||
static PyMethodDef methods[];
|
||||
};
|
||||
|
||||
namespace mcrfpydef {
|
||||
// Forward declare the PyNumberMethods structure
|
||||
// Forward declare the PyNumberMethods and PySequenceMethods structures
|
||||
extern PyNumberMethods PyVector_as_number;
|
||||
|
||||
extern PySequenceMethods PyVector_as_sequence;
|
||||
|
||||
static PyTypeObject PyVectorType = {
|
||||
.ob_base = {.ob_base = {.ob_refcnt = 1, .ob_type = NULL}, .ob_size = 0},
|
||||
.tp_name = "mcrfpy.Vector",
|
||||
|
|
@ -61,6 +70,7 @@ namespace mcrfpydef {
|
|||
.tp_itemsize = 0,
|
||||
.tp_repr = PyVector::repr,
|
||||
.tp_as_number = &PyVector_as_number,
|
||||
.tp_as_sequence = &PyVector_as_sequence,
|
||||
.tp_hash = PyVector::hash,
|
||||
.tp_flags = Py_TPFLAGS_DEFAULT,
|
||||
.tp_doc = PyDoc_STR("SFML Vector Object"),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue