(Apologies in advance for the title, but it was too good to pass-up).
The primary reason for my cmake work all of this/last week was so the build could
get out of my way and I could experiment on some idea for wrapping
libtcod. While
libtcod-net works, and is good enough for writing magecrawl, I've seen multiple people going through the work of wrapping libtcod for each language they are interested in (python, c#, D, lisp, etc). Other people have been interested in using libtcod with java or other languages, but lack the time or skill to create their own wrapper. I'm also lazy, and if i can automate or reduce my workload, I'm all about it.
SWIG is a program that generates the "glue" layer so higher level languages can call C/C++, doing most of the work for you. It's a powerful program, with terrible documentation. At work, I've used it enough to feel comfortable trying it on libtcod.
After a morning of work, I have a proof of concept.
python:
import libtcod
libtcod.TCODConsole.initRoot(80, 50, "Test - python", False, libtcod.TCOD_RENDERER_SDL)
root = libtcod.TCODConsole.root.fget()
while not libtcod.TCODConsole.isWindowClosed():
root.putChar(10, 10, 64);
root.printLeft(3, 3, libtcod.TCOD_BKGND_SET, "Hello World");
root.flush()
root.checkForKeypress()
c#:
using libtcod;
namespace TestApp
{
class Program
{
static void Main(string[] args)
{
TCODConsole.initRoot(80, 50, "Test - C#", false, TCOD_renderer_t.TCOD_RENDERER_SDL);
TCODConsole.root.setForegroundColor(TCODColor.white);
while (!TCODConsole.isWindowClosed())
{
TCODConsole.root.printLeft(3, 3, TCOD_bkgnd_flag_t.TCOD_BKGND_SET, "Hello World");
TCODConsole.root.putCharEx(10, 10, '@', TCODColor.white, TCODColor.black);
TCODConsole.flush();
TCODConsole.checkForKeypress();
}
}
}
}
There is
a lot of work to be done, but the idea appears to be sound! I'll post more when I get the proof of concept fleshed out more.