Mercurial > fife-parpg
view engine/swigwrappers/python/fife.i.templ @ 432:4f2752d45458
This changes the behavior of Camera::resetRenderers(). It will no longer activate all layers for every renderer. This is now up to the clients to do.
It also adds some code to the map loader that will automatically activate the layers in the InstanceRenderer.
Clients that use the any of the renderers will now have to activate the layer they want to use.
Also updated rio_de_hola and the editor to reflect changes. fixes[t:457]
author | prock@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Wed, 24 Feb 2010 20:03:52 +0000 |
parents | 10a5f9e6c03f |
children | a7909cdcdc85 |
line wrap: on
line source
%module(directors="1") fife %include "std_string.i" %include "std_vector.i" %include "std_pair.i" %include "std_list.i" %include "std_map.i" %include "std_set.i" %include "typemaps.i" %include "exception.i" /** * Some materials to understand exception handling: * * Basics about python exceptions: * http://docs.python.org/tut/node10.html * Python exception handling in C APIs * http://docs.python.org/api/exceptions.html * http://docs.python.org/api/exceptionHandling.html * SWIG exception handling * http://www.swig.org/Doc1.3/Customization.html#exception * http://www.swig.org/Doc1.3/SWIGPlus.html#SWIGPlus_exception_specifications * http://www.swig.org/Doc1.3/Python.html#Python_nn36 */ %feature("autodoc", "1"); // 0 == no param types, 1 == show param types namespace std { %template(StringVector) vector<std::string>; %template(UintVector) vector<unsigned int>; %template(IntVector) vector<int>; %template(FloatVector) vector<float>; %template(DoubleVector) vector<double>; %template(BoolVector) vector<bool>; %template(UintUintPair) pair<unsigned int, unsigned int>; %template(UintUintPairVector) vector<std::pair<unsigned int, unsigned int> >; }; %{ #include "util/base/exception.h" static void handleDirectorException() { PyObject* exception = NULL; PyObject* value = NULL; PyObject* traceback = NULL; PyErr_Fetch(&exception, &value, &traceback); PyErr_NormalizeException(&exception, &value, &traceback); if (exception) { PySys_SetObject("last_type", exception); PySys_SetObject("last_value", value); PySys_SetObject("last_traceback", traceback); PyObject* d = PyModule_GetDict (PyImport_AddModule ("__main__")); PyDict_SetItemString(d, "exc_type", exception); PyDict_SetItemString(d, "exc_value", value); PyDict_SetItemString(d, "exc_traceback", traceback ? traceback : Py_None); char buf[1024]; sprintf (buf, "\n\ import traceback\n\ s = \"\"\n\ for filename, line, function, text in traceback.extract_tb(exc_traceback):\n\ s = s + ' File \"%%s\", line %%d, in %%s\\n %%s' %% (filename, line, function, text)\n\ if s[-1] != '\\n': s = s + '\\n'\n\ for l in traceback.format_exception_only(exc_type, exc_value):\n\ s = s + ' ' + l\n\ if s[-1] != '\\n': s = s + '\\n'\n\ print s\n\ "); PyObject* e = PyRun_String(buf, Py_file_input, d, d); if (!e) { PyErr_Print(); } Py_XDECREF(e); Py_XDECREF(d); Py_XDECREF(exception); Py_XDECREF(value); Py_XDECREF(traceback); } } #define _FIFE_EXC_HANDLER(_fife_exc_type, _converted_type) \ catch (FIFE::_fife_exc_type& _e) { \ PyErr_Clear(); \ SWIG_exception(_converted_type, _e.getMessage().c_str()); \ } #define _FIFE_DIRECTOR_EXC_HANDLER() \ catch (Swig::DirectorException &) { \ PyErr_Clear(); \ SWIG_exception(SWIG_RuntimeError, "Catched director exception"); \ } %} %feature("director:except") { if ($$error != NULL) { handleDirectorException(); throw Swig::DirectorMethodException(); } } %exception { try { $$action } _FIFE_DIRECTOR_EXC_HANDLER() _FIFE_EXC_HANDLER(Exception, SWIG_RuntimeError) } $inclusions %include engine/swigwrappers/python/extensions.i.templ