1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
# Horrible example of how to interface with a C++ engine ... ;-)
{.link: "/usr/lib/libIrrlicht.so".}
{.emit: """
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
""".}
const
irr = "<irrlicht/irrlicht.h>"
type
TDimension2d {.final, header: irr, importc: "dimension2d".} = object
Tvector3df {.final, header: irr, importc: "vector3df".} = object
TColor {.final, header: irr, importc: "SColor".} = object
TIrrlichtDevice {.final, header: irr, importc: "IrrlichtDevice".} = object
TIVideoDriver {.final, header: irr, importc: "IVideoDriver".} = object
TISceneManager {.final, header: irr, importc: "ISceneManager".} = object
TIGUIEnvironment {.final, header: irr, importc: "IGUIEnvironment".} = object
TIAnimatedMesh {.final, header: irr, importc: "IAnimatedMesh".} = object
TIAnimatedMeshSceneNode {.final, header: irr,
importc: "IAnimatedMeshSceneNode".} = object
TITexture {.final, header: irr, importc: "ITexture".} = object
PIrrlichtDevice = ptr TIrrlichtDevice
PIVideoDriver = ptr TIVideoDriver
PISceneManager = ptr TISceneManager
PIGUIEnvironment = ptr TIGUIEnvironment
PIAnimatedMesh = ptr TIAnimatedMesh
PIAnimatedMeshSceneNode = ptr TIAnimatedMeshSceneNode
PITexture = ptr TITexture
proc dimension2d(x, y: cint): TDimension2d {.
header: irr, importc: "dimension2d<u32>".}
proc vector3df(x,y,z: cint): Tvector3df {.
header: irr, importc: "vector3df".}
proc SColor(r,g,b,a: cint): TColor {.
header: irr, importc: "SColor".}
proc createDevice(): PIrrlichtDevice {.
header: irr, importc: "createDevice".}
proc run(device: PIrrlichtDevice): bool {.
header: irr, importcpp: "run".}
proc getVideoDriver(dev: PIrrlichtDevice): PIVideoDriver {.
header: irr, importcpp: "getVideoDriver".}
proc getSceneManager(dev: PIrrlichtDevice): PISceneManager {.
header: irr, importcpp: "getSceneManager".}
proc getGUIEnvironment(dev: PIrrlichtDevice): PIGUIEnvironment {.
header: irr, importcpp: "getGUIEnvironment".}
proc getMesh(smgr: PISceneManager, path: cstring): PIAnimatedMesh {.
header: irr, importcpp: "getMesh".}
proc drawAll(smgr: PISceneManager) {.
header: irr, importcpp: "drawAll".}
proc drawAll(guienv: PIGUIEnvironment) {.
header: irr, importcpp: "drawAll".}
proc drop(dev: PIrrlichtDevice) {.
header: irr, importcpp: "drop".}
proc getTexture(driver: PIVideoDriver, path: cstring): PITexture {.
header: irr, importcpp: "getTexture".}
proc endScene(driver: PIVideoDriver) {.
header: irr, importcpp: "endScene".}
proc beginScene(driver: PIVideoDriver, a, b: bool, c: TColor) {.
header: irr, importcpp: "beginScene".}
proc addAnimatedMeshSceneNode(
smgr: PISceneManager, mesh: PIAnimatedMesh): PIAnimatedMeshSceneNode {.
header: irr, importcpp: "addAnimatedMeshSceneNode".}
proc setMaterialTexture(n: PIAnimatedMeshSceneNode, x: cint, t: PITexture) {.
header: irr, importcpp: "setMaterialTexture".}
proc addCameraSceneNode(smgr: PISceneManager, x: cint, a, b: TVector3df) {.
header: irr, importcpp: "addCameraSceneNode".}
var device = createDevice()
if device == nil: quit "device is nil"
var driver = device.getVideoDriver()
var smgr = device.getSceneManager()
var guienv = device.getGUIEnvironment()
var mesh = smgr.getMesh("/home/andreas/download/irrlicht-1.7.2/media/sydney.md2")
if mesh == nil:
device.drop()
quit "no mesh!"
var node = smgr.addAnimatedMeshSceneNode(mesh)
if node != nil:
#node->setMaterialFlag(EMF_LIGHTING, false)
#node->setMD2Animation(scene::EMAT_STAND)
node.setMaterialTexture(0,
driver.getTexture(
"/home/andreas/download/irrlicht-1.7.2/media/media/sydney.bmp"))
smgr.addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0))
while device.run():
driver.beginScene(true, true, SColor(255,100,101,140))
smgr.drawAll()
guienv.drawAll()
driver.endScene()
device.drop()
|