Rigs of Rods 2023.09
Soft-body Physics Simulation
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Loading...
Searching...
No Matches
OgreAngelscript.cpp
Go to the documentation of this file.
1/*
2 This source file is part of Rigs of Rods
3 Copyright 2005-2012 Pierre-Michel Ricordel
4 Copyright 2007-2012 Thomas Fischer
5 Copyright 2013-2024 Petr Ohlidal
6
7 For more information, see http://www.rigsofrods.org/
8
9 Rigs of Rods is free software: you can redistribute it and/or modify
10 it under the terms of the GNU General Public License version 3, as
11 published by the Free Software Foundation.
12
13 Rigs of Rods is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with Rigs of Rods. If not, see <http://www.gnu.org/licenses/>.
20*/
21
25
26#include "Application.h"
27#include "ScriptEngine.h"
28#include "ScriptUtils.h"
29
30// AS addons start
31#include "scriptstdstring/scriptstdstring.h"
32#include "scriptmath/scriptmath.h"
33#include "scriptany/scriptany.h"
34#include "scriptarray/scriptarray.h"
35#include "scripthelper/scripthelper.h"
36// AS addons end
37
38#include <OgreRenderOperation.h>
39
40#include <Overlay/OgreOverlaySystem.h>
41#include <Overlay/OgreOverlayManager.h>
42#include <Overlay/OgreOverlay.h>
43#include <Overlay/OgreOverlayContainer.h>
44
45using namespace Ogre;
46using namespace AngelScript;
47using namespace RoR;
48
49// helper/wrapper functions first
50
51/***VECTOR3***/
52static void Vector3DefaultConstructor(Vector3* self)
53{
54 new(self) Vector3();
55}
56
57static void Vector3CopyConstructor(const Vector3& other, Vector3* self)
58{
59 new(self) Vector3(other);
60}
61
62static void Vector3InitConstructor(float x, float y, float z, Vector3* self)
63{
64 new(self) Vector3(x, y, z);
65}
66
67static void Vector3InitConstructorScaler(float s, Vector3* self)
68{
69 new(self) Vector3(s, s, s);
70}
71
72/***VECTOR2***/
73static void Vector2DefaultConstructor(Vector2* self)
74{
75 new(self) Vector2();
76}
77
78static void Vector2CopyConstructor(const Vector2& other, Vector2* self)
79{
80 new(self) Vector2(other);
81}
82
83static void Vector2InitConstructor(float x, float y, Vector2* self)
84{
85 new(self) Vector2(x, y);
86}
87
88static void Vector2InitConstructorScaler(float s, Vector2* self)
89{
90 new(self) Vector2(s, s);
91}
92
93// not used
94static int Vector3Cmp(const Vector3& a, const Vector3& b)
95{
96 // If a is greater than b, then we return a positive number
97 if (a > b)
98 return 1;
99 // If a is smaller than b, then we return a negative number
100 else if (a < b)
101 return -1;
102 // If a is equal to b, then we return zero
103 else if (a == b)
104 return 0;
105 // Now, what are we supposed to return if none of the above is true???
106 else
107 return -2; // definitly not this, this is interpreted as 'smaller than'...
108}
109
110/***RADIAN***/
111static void RadianDefaultConstructor(Radian* self)
112{
113 new(self) Radian();
114}
115
116static void RadianCopyConstructor(const Radian& other, Radian* self)
117{
118 new(self) Radian(other);
119}
120
121static void RadianInitConstructor(float r, Radian* self)
122{
123 new(self) Radian(r);
124}
125
126static int RadianCmp(const Radian& a, const Radian& b)
127{
128 if (a > b)
129 return 1;
130 else if (a < b)
131 return -1;
132 else
133 return 0;
134}
135
136/***DEGREE***/
137static void DegreeDefaultConstructor(Degree* self)
138{
139 new(self) Degree();
140}
141
142static void DegreeCopyConstructor(const Degree& other, Degree* self)
143{
144 new(self) Degree(other);
145}
146
147static void DegreeInitConstructor(float r, Degree* self)
148{
149 new(self) Degree(r);
150}
151
152static int DegreeCmp(const Degree& a, const Degree& b)
153{
154 if (a > b)
155 return 1;
156 else if (a < b)
157 return -1;
158 else
159 return 0;
160}
161
162/***QUATERNION***/
163static void QuaternionDefaultConstructor(Quaternion* self)
164{
165 new(self) Quaternion();
166}
167
168static void QuaternionCopyConstructor(const Quaternion& other, Quaternion* self)
169{
170 new(self) Quaternion(other.w, other.x, other.y, other.z);
171}
172
173static void QuaternionInitConstructor1(const Radian& rfAngle, const Vector3& rkAxis, Quaternion* self)
174{
175 new(self) Quaternion(rfAngle, rkAxis);
176}
177
178static void QuaternionInitConstructor2(float w, float x, float y, float z, Quaternion* self)
179{
180 new(self) Quaternion(w, x, y, z);
181}
182
183static void QuaternionInitConstructor3(const Vector3& xaxis, const Vector3& yaxis, const Vector3& zaxis, Quaternion* self)
184{
185 new(self) Quaternion(xaxis, yaxis, zaxis);
186}
187
188// not used
189static void QuaternionInitConstructor5(float val, Quaternion* self)
190{
191 new(self) Quaternion((Ogre::Real *)&val);
192}
193
194static void QuaternionInitConstructorScaler(float s, Quaternion* self)
195{
196 new(self) Quaternion(s, s, s, s);
197}
198
199/***COLOURVALUE***/
200static void ColourValueDefaultConstructor(ColourValue* self)
201{
202 new(self) ColourValue();
203}
204
205static void ColourValueInitConstructor(float r, float g, float b, float a, ColourValue* self)
206{
207 new(self) ColourValue(r,g,b,a);
208}
209
210static void ColourValueCopyConstructor(const ColourValue& other, ColourValue* self)
211{
212 new(self) ColourValue(other.r, other.g, other.b, other.a);
213}
214
215/***BOX***/
216static void BoxDefaultConstructor(Box* self)
217{
218 new(self) Box();
219}
220
221static void BoxInitConstructor(asUINT l, asUINT t, asUINT r, asUINT b, Box* self)
222{
223 new(self) Box(l, t, r, b);
224}
225
226static void BoxCopyConstructor(const Box& other, Box* self)
227{
228 new(self) Box(other);
229}
230
231static void BoxDestructor(Box* self)
232{
233 (self)->~Box();
234}
235
236static void BoxAssignOperator(const Box& other, Box* self)
237{
238 (self)->operator=(other);
239}
240
241/***TEXTURE***/
242static void TexturePtrDefaultConstructor(TexturePtr* self)
243{
244 new (self) TexturePtr();
245}
246
247static void TexturePtrCopyConstructor(const TexturePtr& other, TexturePtr* self)
248{
249 new (self) TexturePtr(other);
250}
251
252static void TexturePtrDestructor(TexturePtr* self)
253{
254 (self)->~TexturePtr();
255}
256
257static void TexturePtrAssignOperator(const TexturePtr& other, TexturePtr* self)
258{
259 (self)->operator=(other);
260}
261
262static bool TexturePtrIsNull(TexturePtr* self)
263{
264 return !(self)->operator bool();
265}
266
267/***HARDWAREPIXELBUFFER***/
268// NOTE: The `*SharedPtr` is a deprecated alias of `*Ptr` in OGRE 14, but it's not yet present in the version we use.
269static void HardwarePixelBufferPtrDefaultConstructor(HardwarePixelBufferSharedPtr* self)
270{
271 new (self) HardwarePixelBufferSharedPtr();
272}
273
274static void HardwarePixelBufferPtrCopyConstructor(const HardwarePixelBufferSharedPtr& other, HardwarePixelBufferSharedPtr* self)
275{
276 new (self) HardwarePixelBufferSharedPtr(other);
277}
278
279static void HardwarePixelBufferPtrDestructor(HardwarePixelBufferSharedPtr* self)
280{
281 (self)->~HardwarePixelBufferSharedPtr();
282}
283
284static void HardwarePixelBufferPtrAssignOperator(const HardwarePixelBufferSharedPtr& other, HardwarePixelBufferSharedPtr* self)
285{
286 (self)->operator=(other);
287}
288
289/***PIXELBOX***/
290static void PixelBoxDefaultConstructor(PixelBox* self)
291{
292 new (self) PixelBox();
293}
294
295static void PixelBoxCopyConstructor(const PixelBox& other, PixelBox* self)
296{
297 new (self) PixelBox(other);
298}
299
300static void PixelBoxDestructor(PixelBox* self)
301{
302 (self)->~PixelBox();
303}
304
305static void PixelBoxAssignOperator(const PixelBox& other, PixelBox* self)
306{
307 (self)->operator=(other);
308}
309
310/***IMAGE***/
311static void ImageDefaultConstructor(Image* self)
312{
313 new (self) Image();
314}
315
316static void ImageCopyConstructor(const Image& other, Image* self)
317{
318 new (self) Image(other);
319}
320
321static void ImageDestructor(PixelBox* self)
322{
323 (self)->~PixelBox();
324}
325
326static void ImageAssignOperator(const PixelBox& other, PixelBox* self)
327{
328 (self)->operator=(other);
329}
330
331/***MESH***/
333
334static SubMeshArray* MeshPtrGetSubmeshes(const MeshPtr& self)
335{
336 return new SubMeshArray(self->getSubMeshes());
337}
338
339static void MeshPtrDefaultConstructor(MeshPtr* self)
340{
341 new (self) MeshPtr();
342}
343
344static void MeshPtrCopyConstructor(const MeshPtr& other, MeshPtr* self)
345{
346 new (self) MeshPtr(other);
347}
348
349static void MeshPtrDestructor(MeshPtr* self)
350{
351 (self)->~MeshPtr();
352}
353
354static void MeshPtrAssignOperator(const MeshPtr& other, MeshPtr* self)
355{
356 (self)->operator=(other);
357}
358
359static bool MeshPtrIsNull(MeshPtr* self)
360{
361 return !(self)->operator bool();
362}
363
364/***SUBMESH***/
365static AngelScript::CScriptArray* SubMesh__getVertexPositions(SubMesh* self)
366{
367 VertexData* vertData = (self->useSharedVertices) ? self->parent->sharedVertexData : self->vertexData;
368 if (!vertData)
369 {
370 App::GetScriptEngine()->SLOG("SubMesh::__getVertexPositions(): No vertex data found");
371 return nullptr;
372 }
373 const Ogre::VertexElement* posElem = vertData->vertexDeclaration->findElementBySemantic(Ogre::VES_POSITION);
374 if (!posElem)
375 {
376 App::GetScriptEngine()->SLOG("SubMesh::__getVertexPositions(): No POSITION element found");
377 return nullptr;
378 }
379 Ogre::HardwareVertexBufferSharedPtr vbuf = vertData->vertexBufferBinding->getBuffer(posElem->getSource());
380 if (!vbuf)
381 {
382 App::GetScriptEngine()->SLOG("SubMesh::__getVertexPositions(): No vertex buffer found");
383 return nullptr;
384 }
385 AngelScript::asITypeInfo* typeinfo = App::GetScriptEngine()->getEngine()->GetTypeInfoByDecl("array<vector3>");
386 AngelScript::CScriptArray* arr = AngelScript::CScriptArray::Create(typeinfo, vertData->vertexCount);
387 uint8_t* pStart = static_cast<uint8_t*>(vbuf->lock(Ogre::HardwareBuffer::HBL_READ_ONLY));
388 for (size_t i = 0; i < vertData->vertexCount; i++)
389 {
390 uint8_t* pVert = pStart + (i * vertData->vertexDeclaration->getVertexSize(posElem->getSource()));
391 float* pPos = nullptr;
392 posElem->baseVertexPointerToElement(pVert, &pPos);
393 Vector3 pos(*pPos, *(pPos+1), *(pPos+2));
394 arr->SetValue(i, &pos);
395 }
396 vbuf->unlock();
397 return arr;
398}
399
400static AngelScript::CScriptArray* SubMesh__getVertexTexcoords(SubMesh* self, asUINT index)
401{
402 VertexData* vertData = (self->useSharedVertices) ? self->parent->sharedVertexData : self->vertexData;
403 if (!vertData)
404 {
405 App::GetScriptEngine()->SLOG("SubMesh::__getVertexTexcoords(): No vertex data found");
406 return nullptr;
407 }
408 const Ogre::VertexElement* texcoordElem = vertData->vertexDeclaration->findElementBySemantic(Ogre::VES_TEXTURE_COORDINATES, (unsigned short)index);
409 if (!texcoordElem)
410 {
411 App::GetScriptEngine()->SLOG(fmt::format("SubMesh::__getVertexTexcoords(): TEXCOORD element with index {} not found", index));
412 return nullptr;
413 }
414 Ogre::HardwareVertexBufferSharedPtr vbuf = vertData->vertexBufferBinding->getBuffer(texcoordElem->getSource());
415 if (!vbuf)
416 {
417 App::GetScriptEngine()->SLOG("SubMesh::__getVertexTexcoords(): No vertex buffer found");
418 return nullptr;
419 }
420 AngelScript::asITypeInfo* typeinfo = App::GetScriptEngine()->getEngine()->GetTypeInfoByDecl("array<vector2>");
421 AngelScript::CScriptArray* arr = AngelScript::CScriptArray::Create(typeinfo, vertData->vertexCount);
422 uint8_t* pStart = static_cast<uint8_t*>(vbuf->lock(Ogre::HardwareBuffer::HBL_READ_ONLY));
423 const size_t vertSize = vertData->vertexDeclaration->getVertexSize(texcoordElem->getSource());
424 ROR_ASSERT(texcoordElem->getType() == Ogre::VET_FLOAT2);
425 for (size_t i = 0; i < vertData->vertexCount; i++)
426 {
427 uint8_t* pVert = pStart + ((i + vertData->vertexStart) * vertSize);
428 float* pTexcoord = nullptr;
429 texcoordElem->baseVertexPointerToElement(pVert, &pTexcoord);
430 Vector2 texcoord(*pTexcoord, *(pTexcoord+1));
431 arr->SetValue(i, &texcoord);
432 }
433 vbuf->unlock();
434 return arr;
435}
436
437static Ogre::HardwareIndexBuffer::IndexType SubMesh__getIndexType(SubMesh* self)
438{
439 if (!self->indexData)
440 {
441 App::GetScriptEngine()->SLOG("SubMesh::__getIndexType(): No index data found");
442 return Ogre::HardwareIndexBuffer::IT_16BIT;
443 }
444 Ogre::HardwareIndexBufferSharedPtr ibuf = self->indexData->indexBuffer;
445 if (!ibuf)
446 {
447 App::GetScriptEngine()->SLOG("SubMesh::__getIndexType(): No index buffer found");
448 return Ogre::HardwareIndexBuffer::IT_16BIT;
449 }
450 return ibuf->getType();
451}
452
453static AngelScript::CScriptArray* SubMesh__getIndexBufferHelper(Ogre::SubMesh* self, Ogre::HardwareIndexBuffer::IndexType desiredType)
454{
455 if (!self->indexData)
456 {
457 App::GetScriptEngine()->SLOG("SubMesh::__getIndexBufferHelper(): No index data found");
458 return nullptr;
459 }
460 Ogre::HardwareIndexBufferSharedPtr ibuf = self->indexData->indexBuffer;
461 if (!ibuf)
462 {
463 App::GetScriptEngine()->SLOG("SubMesh::__getIndexBufferHelper(): No index buffer found");
464 return nullptr;
465 }
466 if (ibuf->getType() != desiredType)
467 {
468 App::GetScriptEngine()->SLOG("SubMesh::__getIndexBufferHelper(): Index buffer type mismatch");
469 return nullptr;
470 }
471 AngelScript::asITypeInfo* typeinfo = App::GetScriptEngine()->getEngine()->GetTypeInfoByDecl("array<uint16>");
472 AngelScript::CScriptArray* arr = AngelScript::CScriptArray::Create(typeinfo, self->indexData->indexCount);
473 uint8_t* pStart = static_cast<uint8_t*>(ibuf->lock(Ogre::HardwareBuffer::HBL_READ_ONLY));
474 for (size_t i = self->indexData->indexStart; i < self->indexData->indexCount; i++)
475 {
476 uint8_t* pIndex = pStart + (i * ibuf->getIndexSize());
477 if (ibuf->getType() == Ogre::HardwareIndexBuffer::IT_16BIT)
478 {
479 uint16_t index = *reinterpret_cast<uint16_t*>(pIndex);
480 arr->SetValue(i, &index);
481 }
482 else if (ibuf->getType() == Ogre::HardwareIndexBuffer::IT_32BIT)
483 {
484 uint32_t index = *reinterpret_cast<uint32_t*>(pIndex);
485 arr->SetValue(i, &index);
486 }
487 else
488 {
489 App::GetScriptEngine()->SLOG("SubMesh::__getIndexBufferHelper(): Unknown index buffer type");
490 return nullptr;
491 }
492 }
493 ibuf->unlock();
494 return arr;
495}
496
497/***NODE***/
499
500static ChildNodeArray* NodeGetChildren(Ogre::Node* self)
501{
502 return new ChildNodeArray(self->getChildren());
503}
504
505static std::string NodeGetUniqueNameMixin(Ogre::Node* self)
506{
507 // Node names are optional and largely unused by RoR, so always append the memory address (libfmt adds the '0x' prefix)
508 return fmt::format("\"{}\" ({})", self->getName(), static_cast<void*>(self));
509}
510
511/***SCENENODE***/
513
515{
516 return new MovableObjectArray(self->getAttachedObjects());
517}
518
519/***MOVABLEOBJECT***/
520static std::string MovableObjectGetUniqueNameMixin(Ogre::MovableObject* self)
521{
522 // names are optional and largely unused by RoR, so always append the type and memory address (libfmt adds the '0x' prefix)
523 return fmt::format("\"{}\" ({} {})", self->getName(), self->getMovableType(), static_cast<void*>(self));
524}
525
526/***ROOT***/
528
530{
531 return new SceneManagerInstanceDict(self->getSceneManagers());
532}
533
534/***ANIMATIONSTATESET***/
536
538{
539 return new AnimationStateDict(self->getAnimationStates());
540}
541
542/***MATERIAL***/
544
545static TechniqueArray* MaterialPtrGetTechniques(const MaterialPtr& self)
546{
547 return new TechniqueArray(self->getTechniques());
548}
549
550static void MaterialPtrDefaultConstructor(MaterialPtr* self)
551{
552 new (self) MaterialPtr();
553}
554
555static void MaterialPtrCopyConstructor(const MaterialPtr& other, MaterialPtr* self)
556{
557 new (self) MaterialPtr(other);
558}
559
560static void MaterialPtrDestructor(MaterialPtr* self)
561{
562 (self)->~MaterialPtr();
563}
564
565static void MaterialPtrAssignOperator(const MaterialPtr& other, MaterialPtr* self)
566{
567 (self)->operator=(other);
568}
569
570static bool MaterialPtrIsNull(MaterialPtr* self)
571{
572 return !(self)->operator bool();
573}
574
575/***TECHNIQUE***/
577
578static PassArray* TechniqueGetPasses(Technique* self)
579{
580 return new PassArray(self->getPasses());
581}
582
583/***PASS***/
585
587{
588 return new TextureUnitStateArray(self->getTextureUnitStates());
589}
590
591/***SUBENTITY***/
593
595{
596 return new SubEntityArray(self->getSubEntities());
597}
598
599/***TIMER***/
600static void TimerDefaultConstructor(Timer* self)
601{
602 new(self) Timer();
603}
604
605static void TimerDefaultDestructor(Timer* self)
606{
607 self->~Timer();
608}
609
610static void TimerCopyConstructor(const Timer& other, Timer* self)
611{
612 new(self) Timer(other);
613}
614
615static void TimerAssignOperator(const Timer& other, Timer* self)
616{
617 (self)->operator=(other);
618}
619
620/***GPUPROGRAMPARAMETERSPTR***/
621static void GpuProgramParametersPtrDefaultConstructor(GpuProgramParametersPtr* self)
622{
623 new (self) GpuProgramParametersPtr();
624}
625
626static void GpuProgramParametersPtrCopyConstructor(const GpuProgramParametersPtr& other, GpuProgramParametersPtr* self)
627{
628 new (self) GpuProgramParametersPtr(other);
629}
630
631static void GpuProgramParametersPtrDestructor(GpuProgramParametersPtr* self)
632{
633 (self)->~GpuProgramParametersPtr();
634}
635
636static void GpuProgramParametersPtrAssignOperator(const GpuProgramParametersPtr& other, GpuProgramParametersPtr* self)
637{
638 (self)->operator=(other);
639}
640
641static bool GpuProgramParametersPtrIsNull(GpuProgramParametersPtr* self)
642{
643 return !(self)->operator bool();
644}
645
646/***SCENEMANAGER***/
647
648static AngelScript::CScriptArray* SceneManager__getMovableObjectsByType(SceneManager* self, const std::string& typeName)
649{
650 if (!self)
651 {
652 App::GetScriptEngine()->SLOG("SceneManager::__getMovableObjectsByType(): SceneManager is null");
653 return nullptr;
654 }
655
656 try
657 {
658 // Get the iterator
659 SceneManager::MovableObjectIterator it = self->getMovableObjectIterator(typeName);
660
661 // Create script array for MovableObjects
662 AngelScript::asITypeInfo* typeinfo = App::GetScriptEngine()->getEngine()->GetTypeInfoByDecl("array<Ogre::MovableObject@>");
663 if (!typeinfo)
664 {
665 App::GetScriptEngine()->SLOG("SceneManager::__getMovableObjectsByType(): Failed to get array type info");
666 return nullptr;
667 }
668
669 AngelScript::CScriptArray* arr = AngelScript::CScriptArray::Create(typeinfo);
670
671 // Iterate through all movable objects of this type
672 while (it.hasMoreElements())
673 {
674 Ogre::MovableObject* obj = it.getNext();
675 if (obj)
676 {
677 arr->InsertLast(&obj);
678 }
679 }
680
681 return arr;
682 }
683 catch (...)
684 {
685 App::GetScriptEngine()->forwardExceptionAsScriptEvent("SceneManager::__getMovableObjectsByType()");
686 return nullptr;
687 }
688}
689
690// forward declarations, defined below
691void registerOgreVector3(AngelScript::asIScriptEngine* engine);
692void registerOgreVector2(AngelScript::asIScriptEngine* engine);
693void registerOgreRadian(AngelScript::asIScriptEngine* engine);
694void registerOgreDegree(AngelScript::asIScriptEngine* engine);
695void registerOgreQuaternion(AngelScript::asIScriptEngine* engine);
696void registerOgreOverlay(AngelScript::asIScriptEngine* engine);
697void registerOgreColourValue(AngelScript::asIScriptEngine* engine);
698void registerOgreBox(AngelScript::asIScriptEngine* engine);
699
700void registerOgreMovableObject(AngelScript::asIScriptEngine* engine);
701void registerOgreEntity(AngelScript::asIScriptEngine* engine);
702void registerOgreSubEntity(AngelScript::asIScriptEngine* engine);
703void registerOgreNode(AngelScript::asIScriptEngine* engine);
704void registerOgreSceneNode(AngelScript::asIScriptEngine* engine);
705void registerOgreSceneManager(AngelScript::asIScriptEngine* engine);
706void registerOgreRoot(AngelScript::asIScriptEngine* engine);
707void registerOgreAnimationState(AngelScript::asIScriptEngine* engine);
708void registerOgreAnimationStateSet(AngelScript::asIScriptEngine* engine);
709void registerOgreTexture(AngelScript::asIScriptEngine* engine);
710void registerOgreTextureManager(AngelScript::asIScriptEngine* engine);
711void registerOgreManualObject(AngelScript::asIScriptEngine* engine);
712void registerOgreHardwarePixelBuffer(AngelScript::asIScriptEngine* engine);
713void registerOgrePixelBox(AngelScript::asIScriptEngine* engine);
714void registerOgreImage(AngelScript::asIScriptEngine* engine);
715void registerOgreMeshManager(AngelScript::asIScriptEngine* engine);
716void registerOgreMesh(AngelScript::asIScriptEngine* engine);
717void registerOgreSubMesh(AngelScript::asIScriptEngine* engine);
718void registerOgreMaterialManager(AngelScript::asIScriptEngine* engine);
719void registerOgreMaterial(AngelScript::asIScriptEngine* engine);
720void registerOgreTechnique(AngelScript::asIScriptEngine* engine);
721void registerOgrePass(AngelScript::asIScriptEngine* engine);
722void registerOgreTextureUnitState(AngelScript::asIScriptEngine* engine);
723void registerOgreTimer(AngelScript::asIScriptEngine* engine);
724void registerOgreGpuProgramParameters(AngelScript::asIScriptEngine* engine);
725void registerOgreLight(AngelScript::asIScriptEngine* engine);
726
727// main registration method
728void RoR::RegisterOgreObjects(AngelScript::asIScriptEngine* engine)
729{
730 int r;
731
732 // We start by registering some data types, so angelscript knows that they exist
733
734 // Ogre::Degree
735 r = engine->RegisterObjectType("degree", sizeof(Degree), asOBJ_VALUE | asOBJ_POD | asOBJ_APP_CLASS_CA | asOBJ_APP_CLASS_ALLFLOATS);
736 ROR_ASSERT( r >= 0 );
737
738 // Ogre::Radian
739 r = engine->RegisterObjectType("radian", sizeof(Radian), asOBJ_VALUE | asOBJ_POD | asOBJ_APP_CLASS_CA | asOBJ_APP_CLASS_ALLFLOATS);
740 ROR_ASSERT( r >= 0 );
741
742 // Ogre::Vector2
743 r = engine->RegisterObjectType("vector2", sizeof(Vector2), asOBJ_VALUE | asOBJ_POD | asOBJ_APP_CLASS_CA | asOBJ_APP_CLASS_ALLFLOATS);
744 ROR_ASSERT( r >= 0 );
745
746 // Ogre::Vector3
747 r = engine->RegisterObjectType("vector3", sizeof(Vector3), asOBJ_VALUE | asOBJ_POD | asOBJ_APP_CLASS_CA | asOBJ_APP_CLASS_ALLFLOATS);
748 ROR_ASSERT( r >= 0 );
749
750 // Ogre::Quaternion
751 r = engine->RegisterObjectType("quaternion", sizeof(Quaternion), asOBJ_VALUE | asOBJ_POD | asOBJ_APP_CLASS_CA | asOBJ_APP_CLASS_ALLFLOATS);
752 ROR_ASSERT( r >= 0 );
753
754 // Ogre::ColourValue
755 r = engine->RegisterObjectType("color", sizeof(ColourValue), asOBJ_VALUE | asOBJ_POD | asOBJ_APP_CLASS_CA | asOBJ_APP_CLASS_ALLFLOATS);
756 ROR_ASSERT( r >= 0 );
757
758 // Ogre::Box
759 r = engine->RegisterObjectType("box", sizeof(Box), asOBJ_VALUE | asOBJ_POD | asOBJ_APP_CLASS_CA | asOBJ_APP_CLASS_ALLINTS);
760 ROR_ASSERT( r >= 0 );
761
762 // More data types - the low-level scene API, under namespace `Ogre`
763
764 r = engine->SetDefaultNamespace("Ogre"); ROR_ASSERT(r >= 0);
765
766 r = engine->RegisterObjectType("MovableObject", sizeof(MovableObject), asOBJ_REF | asOBJ_NOCOUNT);
767 ROR_ASSERT(r >= 0);
768
769 r = engine->RegisterObjectType("Entity", sizeof(Entity), asOBJ_REF | asOBJ_NOCOUNT);
770 ROR_ASSERT(r >= 0);
771
772 r = engine->RegisterObjectType("SubEntity", sizeof(SubEntity), asOBJ_REF | asOBJ_NOCOUNT);
773 ROR_ASSERT(r >= 0);
774
775 r = engine->RegisterObjectType("Node", sizeof(Node), asOBJ_REF | asOBJ_NOCOUNT);
776 ROR_ASSERT(r >= 0);
777
778 r = engine->RegisterObjectType("SceneNode", sizeof(SceneNode), asOBJ_REF | asOBJ_NOCOUNT);
779 ROR_ASSERT(r >= 0);
780
781 r = engine->RegisterObjectType("SceneManager", sizeof(SceneManager), asOBJ_REF | asOBJ_NOCOUNT);
782 ROR_ASSERT(r >= 0);
783
784 r = engine->RegisterObjectType("Root", sizeof(Root), asOBJ_REF | asOBJ_NOCOUNT);
785 ROR_ASSERT(r >= 0);
786
787 r = engine->RegisterObjectType("AnimationState", sizeof(AnimationState), asOBJ_REF | asOBJ_NOCOUNT);
788 ROR_ASSERT(r >= 0);
789
790 r = engine->RegisterObjectType("AnimationStateSet", sizeof(AnimationStateSet), asOBJ_REF | asOBJ_NOCOUNT);
791 ROR_ASSERT(r >= 0);
792
793 r = engine->RegisterObjectType("TexturePtr", sizeof(TexturePtr), asOBJ_VALUE | asGetTypeTraits<TexturePtr>());
794 ROR_ASSERT(r >= 0);
795
796 r = engine->RegisterObjectType("TextureManager", sizeof(TextureManager), asOBJ_REF | asOBJ_NOCOUNT);
797 ROR_ASSERT(r >= 0);
798
799 r = engine->RegisterObjectType("ManualObject", sizeof(ManualObject), asOBJ_REF | asOBJ_NOCOUNT);
800 ROR_ASSERT(r >= 0);
801
802 r = engine->RegisterObjectType("Image", sizeof(Image), asOBJ_VALUE | asGetTypeTraits<Image>());
803 ROR_ASSERT(r >= 0);
804
805 // NOTE: The `*SharedPtr` is a deprecated alias of `*Ptr` in OGRE 14, but in the version we're using it doesn't exist yet.
806 r = engine->RegisterObjectType("HardwarePixelBufferPtr", sizeof(HardwarePixelBufferSharedPtr), asOBJ_VALUE | asGetTypeTraits<HardwarePixelBufferSharedPtr>());
807 ROR_ASSERT(r >= 0);
808
809 r = engine->RegisterObjectType("PixelBox", sizeof(PixelBox), asOBJ_VALUE | asGetTypeTraits<PixelBox>());
810 ROR_ASSERT(r >= 0);
811
812 r = engine->RegisterObjectType("MeshPtr", sizeof(MeshPtr), asOBJ_VALUE | asGetTypeTraits<MeshPtr>());
813 ROR_ASSERT(r >= 0);
814
815 r = engine->RegisterObjectType("SubMesh", sizeof(SubMesh), asOBJ_REF | asOBJ_NOCOUNT);
816 ROR_ASSERT(r >= 0);
817
818 r = engine->RegisterObjectType("MeshManager", sizeof(TextureManager), asOBJ_REF | asOBJ_NOCOUNT);
819 ROR_ASSERT(r >= 0);
820
821 r = engine->RegisterObjectType("MaterialManager", sizeof(MaterialManager), asOBJ_REF | asOBJ_NOCOUNT);
822 ROR_ASSERT(r >= 0);
823
824 r = engine->RegisterObjectType("MaterialPtr", sizeof(MaterialPtr), asOBJ_VALUE | asGetTypeTraits<MaterialPtr>());
825 ROR_ASSERT(r >= 0);
826
827 r = engine->RegisterObjectType("Technique", sizeof(Technique), asOBJ_REF | asOBJ_NOCOUNT);
828 ROR_ASSERT(r >= 0);
829
830 r = engine->RegisterObjectType("Pass", sizeof(Pass), asOBJ_REF | asOBJ_NOCOUNT);
831 ROR_ASSERT(r >= 0);
832
833 r = engine->RegisterObjectType("TextureUnitState", sizeof(TextureUnitState), asOBJ_REF | asOBJ_NOCOUNT);
834 ROR_ASSERT(r >= 0);
835
836 r = engine->RegisterObjectType("Timer", sizeof(Timer), asOBJ_VALUE | asGetTypeTraits<Timer>());
837 ROR_ASSERT(r >= 0);
838
839 r = engine->RegisterObjectType("GpuProgramParametersPtr", sizeof(GpuProgramParametersPtr), asOBJ_VALUE | asGetTypeTraits<GpuProgramParametersPtr>());
840 ROR_ASSERT(r >= 0);
841
842 r = engine->RegisterObjectType("Light", sizeof(Light), asOBJ_REF | asOBJ_NOCOUNT);
843 ROR_ASSERT(r >= 0);
844
845 // dictionary/array view types, also under namespace `Ogre`
846
847 SceneManagerInstanceDict::RegisterReadonlyScriptDictView(engine, "SceneManagerInstanceDict", "SceneManager");
848 MovableObjectArray::RegisterReadonlyScriptArrayView(engine, "MovableObjectArray", "MovableObject");
849 ChildNodeArray::RegisterReadonlyScriptArrayView(engine, "ChildNodeArray", "Node");
850 AnimationStateDict::RegisterReadonlyScriptDictView(engine, "AnimationStateDict", "AnimationState");
851 SubMeshArray::RegisterReadonlyScriptArrayView(engine, "SubMeshArray", "SubMesh");
852 TechniqueArray::RegisterReadonlyScriptArrayView(engine, "TechniqueArray", "Technique");
853 PassArray::RegisterReadonlyScriptArrayView(engine, "PassArray", "Pass");
854 TextureUnitStateArray::RegisterReadonlyScriptArrayView(engine, "TextureUnitStateArray", "TextureUnitState");
855 SubEntityArray::RegisterReadonlyScriptArrayView(engine, "SubEntityArray", "SubEntity");
856
857 // enums, also under namespace `Ogre`
858
859 r = engine->RegisterEnum("IndexType"); ROR_ASSERT(r >= 0);
860 r = engine->RegisterEnumValue("IndexType", "IT_16BIT", Ogre::HardwareIndexBuffer::IT_16BIT); ROR_ASSERT(r >= 0);
861 r = engine->RegisterEnumValue("IndexType", "IT_32BIT", Ogre::HardwareIndexBuffer::IT_32BIT); ROR_ASSERT(r >= 0);
862
863 r = engine->RegisterEnum("TransformSpace"); ROR_ASSERT(r >= 0);
864 r = engine->RegisterEnumValue("TransformSpace", "TS_LOCAL", Node::TS_LOCAL); ROR_ASSERT(r >= 0); // Transform is relative to the local space
865 r = engine->RegisterEnumValue("TransformSpace", "TS_PARENT", Node::TS_PARENT); ROR_ASSERT(r >= 0); // Transform is relative to the space of the parent node
866 r = engine->RegisterEnumValue("TransformSpace", "TS_WORLD", Node::TS_WORLD); ROR_ASSERT(r >= 0); // Transform is relative to world space
867
868 r = engine->RegisterEnum("RenderOperation"); ROR_ASSERT(r >= 0); // NOTE: `Ogre::RenderOperation` is a wrapper class - the enum is `OperationType`
869 r = engine->RegisterEnumValue("RenderOperation", "OT_POINT_LIST", Ogre::RenderOperation::OT_POINT_LIST); ROR_ASSERT(r >= 0); // A list of points, 1 vertex per point
870 r = engine->RegisterEnumValue("RenderOperation", "OT_LINE_LIST", Ogre::RenderOperation::OT_LINE_LIST); ROR_ASSERT(r >= 0); // A list of lines, 2 vertices per line
871 r = engine->RegisterEnumValue("RenderOperation", "OT_LINE_STRIP", Ogre::RenderOperation::OT_LINE_STRIP); ROR_ASSERT(r >= 0); // A strip of connected lines, 1 vertex per line plus 1 start vertex
872 r = engine->RegisterEnumValue("RenderOperation", "OT_TRIANGLE_LIST", Ogre::RenderOperation::OT_TRIANGLE_LIST); ROR_ASSERT(r >= 0); // A list of triangles, 3 vertices per triangle
873 r = engine->RegisterEnumValue("RenderOperation", "OT_TRIANGLE_STRIP", Ogre::RenderOperation::OT_TRIANGLE_STRIP); ROR_ASSERT(r >= 0);// A strip of triangles, 3 vertices for the first triangle, and 1 per triangle after that
874 r = engine->RegisterEnumValue("RenderOperation", "OT_TRIANGLE_FAN", Ogre::RenderOperation::OT_TRIANGLE_FAN); ROR_ASSERT(r >= 0); // A fan of triangles, 3 vertices for the first triangle, and 1 per triangle after that
875
876 r = engine->RegisterEnum("ImageFilter"); ROR_ASSERT(r >= 0); // Only registering those which are in OGRE14 docs, even though our older version has more
877 r = engine->RegisterEnumValue("ImageFilter", "FILTER_NEAREST", Image::Filter::FILTER_NEAREST); ROR_ASSERT(r >= 0);
878 r = engine->RegisterEnumValue("ImageFilter", "FILTER_LINEAR", Image::Filter::FILTER_LINEAR); ROR_ASSERT(r >= 0);
879 r = engine->RegisterEnumValue("ImageFilter", "FILTER_BILINEAR", Image::Filter::FILTER_BILINEAR); ROR_ASSERT(r >= 0);
880
881 r = engine->RegisterEnum("HardwareBufferLockOptions"); ROR_ASSERT(r >= 0);
882 r = engine->RegisterEnumValue("HardwareBufferLockOptions", "HBL_NORMAL", HardwareBuffer::LockOptions::HBL_NORMAL); ROR_ASSERT(r >= 0);
883 r = engine->RegisterEnumValue("HardwareBufferLockOptions", "HBL_DISCARD", HardwareBuffer::LockOptions::HBL_DISCARD); ROR_ASSERT(r >= 0);
884 r = engine->RegisterEnumValue("HardwareBufferLockOptions", "HBL_READ_ONLY", HardwareBuffer::LockOptions::HBL_READ_ONLY); ROR_ASSERT(r >= 0);
885 r = engine->RegisterEnumValue("HardwareBufferLockOptions", "HBL_NO_OVERWRITE", HardwareBuffer::LockOptions::HBL_NO_OVERWRITE); ROR_ASSERT(r >= 0);
886 r = engine->RegisterEnumValue("HardwareBufferLockOptions", "HBL_WRITE_ONLY", HardwareBuffer::LockOptions::HBL_WRITE_ONLY); ROR_ASSERT(r >= 0);
887
888 r = engine->RegisterEnum("LightTypes"); ROR_ASSERT(r >= 0);
889 r = engine->RegisterEnumValue("LightTypes", "LT_POINT", Light::LT_POINT); ROR_ASSERT(r >= 0);
890 r = engine->RegisterEnumValue("LightTypes", "LT_DIRECTIONAL", Light::LT_DIRECTIONAL); ROR_ASSERT(r >= 0);
891 r = engine->RegisterEnumValue("LightTypes", "LT_SPOTLIGHT", Light::LT_SPOTLIGHT); ROR_ASSERT(r >= 0);
892
893
894 r = engine->SetDefaultNamespace(""); ROR_ASSERT(r >= 0);
895
896 // Now we register the object properties and methods
897
898 registerOgreRadian(engine);
899 registerOgreDegree(engine);
900 registerOgreVector3(engine);
901 registerOgreVector2(engine);
904 registerOgreBox(engine);
905
906 registerOgreNode(engine);
908 registerOgreEntity(engine);
909 registerOgreSubEntity(engine);
910 registerOgreSceneNode(engine);
912 registerOgreRoot(engine);
915 registerOgreTexture(engine);
917 registerOgreOverlay(engine);
920 registerOgrePixelBox(engine);
921 registerOgreImage(engine);
922 registerOgreMesh(engine);
923 registerOgreSubMesh(engine);
925 registerOgreMaterial(engine);
926 registerOgreTechnique(engine);
927 registerOgrePass(engine);
930 registerOgreTimer(engine);
932 registerOgreLight(engine);
933
934 // To estabilish class hierarchy in AngelScript you need to register the reference cast operators opCast and opImplCast.
935
936 // - `SceneNode` derives from `Node`
937 r = engine->RegisterObjectMethod("Ogre::Node", "Ogre::SceneNode@ opCast()", asFUNCTION((ScriptRefCastNoCount<Ogre::Node, Ogre::SceneNode>)), asCALL_CDECL_OBJLAST); assert(r >= 0);
938 r = engine->RegisterObjectMethod("Ogre::SceneNode", "Ogre::Node@ opImplCast()", asFUNCTION((ScriptRefCastNoCount<Ogre::SceneNode, Ogre::Node>)), asCALL_CDECL_OBJLAST); assert(r >= 0);
939 // - `Entity` derives from `MovableObject`
940 r = engine->RegisterObjectMethod("Ogre::MovableObject", "Ogre::Entity@ opCast()", asFUNCTION((ScriptRefCastNoCount<Ogre::MovableObject, Ogre::Entity>)), asCALL_CDECL_OBJLAST); assert(r >= 0);
941 r = engine->RegisterObjectMethod("Ogre::Entity", "Ogre::MovableObject@ opImplCast()", asFUNCTION((ScriptRefCastNoCount<Ogre::Entity, Ogre::MovableObject>)), asCALL_CDECL_OBJLAST); assert(r >= 0);
942 // - `ManualObject` derives from `MovableObject`
943 r = engine->RegisterObjectMethod("Ogre::MovableObject", "Ogre::ManualObject@ opCast()", asFUNCTION((ScriptRefCastNoCount<Ogre::MovableObject, Ogre::ManualObject>)), asCALL_CDECL_OBJLAST); assert(r >= 0);
944 r = engine->RegisterObjectMethod("Ogre::ManualObject", "Ogre::MovableObject@ opImplCast()", asFUNCTION((ScriptRefCastNoCount<Ogre::ManualObject, Ogre::MovableObject>)), asCALL_CDECL_OBJLAST); assert(r >= 0);
945 // - `Light` derives from `MovableObject`
946 r = engine->RegisterObjectMethod("Ogre::MovableObject", "Ogre::Light@ opCast()", asFUNCTION((ScriptRefCastNoCount<Ogre::MovableObject, Ogre::Light>)), asCALL_CDECL_OBJLAST); assert(r >= 0);
947 r = engine->RegisterObjectMethod("Ogre::Light", "Ogre::MovableObject@ opImplCast()", asFUNCTION((ScriptRefCastNoCount<Ogre::Light, Ogre::MovableObject>)), asCALL_CDECL_OBJLAST); assert(r >= 0);
948
949 // Also register the const overloads so the cast works also when the handle is read only
950
951 // - `SceneNode` derives from `Node`
952 r = engine->RegisterObjectMethod("Ogre::Node", "const Ogre::SceneNode@ opCast() const", asFUNCTION((ScriptRefCastNoCount<Ogre::Node, Ogre::SceneNode>)), asCALL_CDECL_OBJLAST); assert(r >= 0);
953 r = engine->RegisterObjectMethod("Ogre::SceneNode", "const Ogre::Node@ opImplCast() const", asFUNCTION((ScriptRefCastNoCount<Ogre::SceneNode, Ogre::Node>)), asCALL_CDECL_OBJLAST); assert(r >= 0);
954 // - `Entity` derives from `MovableObject`
955 r = engine->RegisterObjectMethod("Ogre::MovableObject", "const Ogre::Entity@ opCast() const", asFUNCTION((ScriptRefCastNoCount<Ogre::MovableObject, Ogre::Entity>)), asCALL_CDECL_OBJLAST); assert(r >= 0);
956 r = engine->RegisterObjectMethod("Ogre::Entity", "const Ogre::MovableObject@ opImplCast() const", asFUNCTION((ScriptRefCastNoCount<Ogre::Entity, Ogre::MovableObject>)), asCALL_CDECL_OBJLAST); assert(r >= 0);
957 // - `ManualObject` derives from `MovableObject`
958 r = engine->RegisterObjectMethod("Ogre::MovableObject", "const Ogre::ManualObject@ opCast() const", asFUNCTION((ScriptRefCastNoCount<Ogre::MovableObject, Ogre::ManualObject>)), asCALL_CDECL_OBJLAST); assert(r >= 0);
959 r = engine->RegisterObjectMethod("Ogre::ManualObject", "const Ogre::MovableObject@ opImplCast() const", asFUNCTION((ScriptRefCastNoCount<Ogre::ManualObject, Ogre::MovableObject>)), asCALL_CDECL_OBJLAST); assert(r >= 0);
960 // - `Light` derives from `MovableObject`
961 r = engine->RegisterObjectMethod("Ogre::MovableObject", "const Ogre::Light@ opCast() const", asFUNCTION((ScriptRefCastNoCount<Ogre::MovableObject, Ogre::Light>)), asCALL_CDECL_OBJLAST); assert(r >= 0);
962 r = engine->RegisterObjectMethod("Ogre::Light", "const Ogre::MovableObject@ opImplCast() const", asFUNCTION((ScriptRefCastNoCount<Ogre::Light, Ogre::MovableObject>)), asCALL_CDECL_OBJLAST); assert(r >= 0);
963}
964
965// register Ogre::Vector3
966void registerOgreVector3(AngelScript::asIScriptEngine* engine)
967{
968 int r;
969
970 // Register the object properties
971 r = engine->RegisterObjectProperty("vector3", "float x", offsetof(Ogre::Vector3, x));
972 ROR_ASSERT( r >= 0 );
973 r = engine->RegisterObjectProperty("vector3", "float y", offsetof(Ogre::Vector3, y));
974 ROR_ASSERT( r >= 0 );
975 r = engine->RegisterObjectProperty("vector3", "float z", offsetof(Ogre::Vector3, z));
976 ROR_ASSERT( r >= 0 );
977
978 // Register the object constructors
979 r = engine->RegisterObjectBehaviour("vector3", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(Vector3DefaultConstructor), asCALL_CDECL_OBJLAST);
980 ROR_ASSERT( r >= 0 );
981 r = engine->RegisterObjectBehaviour("vector3", asBEHAVE_CONSTRUCT, "void f(float, float, float)", asFUNCTION(Vector3InitConstructor), asCALL_CDECL_OBJLAST);
982 ROR_ASSERT( r >= 0 );
983 r = engine->RegisterObjectBehaviour("vector3", asBEHAVE_CONSTRUCT, "void f(const vector3 &in)", asFUNCTION(Vector3CopyConstructor), asCALL_CDECL_OBJLAST);
984 ROR_ASSERT( r >= 0 );
985 r = engine->RegisterObjectBehaviour("vector3", asBEHAVE_CONSTRUCT, "void f(float)", asFUNCTION(Vector3InitConstructorScaler), asCALL_CDECL_OBJLAST);
986 ROR_ASSERT( r >= 0 );
987
988 // Register the object operators
989 r = engine->RegisterObjectMethod("vector3", "float opIndex(int) const", asMETHODPR(Vector3, operator[], (size_t) const, float), asCALL_THISCALL);
990 ROR_ASSERT( r >= 0 );
991 r = engine->RegisterObjectMethod("vector3", "vector3 &f(const vector3 &in)", asMETHODPR(Vector3, operator =, (const Vector3 &), Vector3&), asCALL_THISCALL);
992 ROR_ASSERT( r >= 0 );
993 r = engine->RegisterObjectMethod("vector3", "bool opEquals(const vector3 &in) const", asMETHODPR(Vector3, operator==,(const Vector3&) const, bool), asCALL_THISCALL);
994 ROR_ASSERT( r >= 0 );
995
996 r = engine->RegisterObjectMethod("vector3", "vector3 opAdd(const vector3 &in) const", asMETHODPR(Vector3, operator+,(const Vector3&) const, Vector3), asCALL_THISCALL);
997 ROR_ASSERT( r >= 0 );
998 r = engine->RegisterObjectMethod("vector3", "vector3 opSub(const vector3 &in) const", asMETHODPR(Vector3, operator-,(const Vector3&) const, Vector3), asCALL_THISCALL);
999 ROR_ASSERT( r >= 0 );
1000
1001 r = engine->RegisterObjectMethod("vector3", "vector3 opMul(float) const", asMETHODPR(Vector3, operator*,(const float) const, Vector3), asCALL_THISCALL);
1002 ROR_ASSERT( r >= 0 );
1003 r = engine->RegisterObjectMethod("vector3", "vector3 opMul(const vector3 &in) const", asMETHODPR(Vector3, operator*,(const Vector3&) const, Vector3), asCALL_THISCALL);
1004 ROR_ASSERT( r >= 0 );
1005 r = engine->RegisterObjectMethod("vector3", "vector3 opDiv(float) const", asMETHODPR(Vector3, operator/,(const float) const, Vector3), asCALL_THISCALL);
1006 ROR_ASSERT( r >= 0 );
1007 r = engine->RegisterObjectMethod("vector3", "vector3 opDiv(const vector3 &in) const", asMETHODPR(Vector3, operator/,(const Vector3&) const, Vector3), asCALL_THISCALL);
1008 ROR_ASSERT( r >= 0 );
1009
1010 r = engine->RegisterObjectMethod("vector3", "vector3 opAdd() const", asMETHODPR(Vector3, operator+,() const, const Vector3&), asCALL_THISCALL);
1011 ROR_ASSERT( r >= 0 );
1012 r = engine->RegisterObjectMethod("vector3", "vector3 opSub() const", asMETHODPR(Vector3, operator-,() const, Vector3), asCALL_THISCALL);
1013 ROR_ASSERT( r >= 0 );
1014
1015 //r = engine->RegisterObjectMethod("vector3", "vector3 opMul(float, const vector3 &in)", asMETHODPR(Vector3, operator*,(const float, const Vector3&), Vector3), asCALL_THISCALL); ROR_ASSERT( r >= 0 );
1016
1017 r = engine->RegisterObjectMethod("vector3", "vector3 &opAddAssign(const vector3 &in)", asMETHODPR(Vector3,operator+=,(const Vector3 &),Vector3&), asCALL_THISCALL);
1018 ROR_ASSERT( r >= 0 );
1019 r = engine->RegisterObjectMethod("vector3", "vector3 &opAddAssign(float)", asMETHODPR(Vector3,operator+=,(const float),Vector3&), asCALL_THISCALL);
1020 ROR_ASSERT( r >= 0 );
1021
1022 r = engine->RegisterObjectMethod("vector3", "vector3 &opSubAssign(const vector3 &in)", asMETHODPR(Vector3,operator-=,(const Vector3 &),Vector3&), asCALL_THISCALL);
1023 ROR_ASSERT( r >= 0 );
1024 r = engine->RegisterObjectMethod("vector3", "vector3 &opSubAssign(float)", asMETHODPR(Vector3,operator-=,(const float),Vector3&), asCALL_THISCALL);
1025 ROR_ASSERT( r >= 0 );
1026
1027 r = engine->RegisterObjectMethod("vector3", "vector3 &opMulAssign(const vector3 &in)", asMETHODPR(Vector3,operator*=,(const Vector3 &),Vector3&), asCALL_THISCALL);
1028 ROR_ASSERT( r >= 0 );
1029 r = engine->RegisterObjectMethod("vector3", "vector3 &opMulAssign(float)", asMETHODPR(Vector3,operator*=,(const float),Vector3&), asCALL_THISCALL);
1030 ROR_ASSERT( r >= 0 );
1031
1032 //r = engine->RegisterObjectMethod("vector3", "vector3& operator @= ( const vector3& rkVector f( const Vector3& rkVector )", asMETHOD(Ogre::Vector3, f), asCALL_THISCALL); ROR_ASSERT(r>=0);
1033
1034 r = engine->RegisterObjectMethod("vector3", "vector3 &opDivAssign(const vector3 &in)", asMETHODPR(Vector3,operator/=,(const Vector3 &),Vector3&), asCALL_THISCALL);
1035 ROR_ASSERT( r >= 0 );
1036 r = engine->RegisterObjectMethod("vector3", "vector3 &opDivAssign(float)", asMETHODPR(Vector3,operator/=,(const float),Vector3&), asCALL_THISCALL);
1037 ROR_ASSERT( r >= 0 );
1038
1039 // r = engine->RegisterObjectMethod("vector3", "int opCmp(const vector3 &in) const", asFUNCTION(Vector3Cmp), asCALL_CDECL_OBJFIRST); ROR_ASSERT( r >= 0 );
1040
1041 // Register the object methods
1042 // r = engine->RegisterObjectMethod("vector3", "void swap(vector3 &inout)", asMETHOD(Vector3,swap), asCALL_THISCALL); ROR_ASSERT( r >= 0 );
1043
1044 r = engine->RegisterObjectMethod("vector3", "float length() const", asMETHOD(Vector3,length), asCALL_THISCALL);
1045 ROR_ASSERT( r >= 0 );
1046 r = engine->RegisterObjectMethod("vector3", "float squaredLength() const", asMETHOD(Vector3,squaredLength), asCALL_THISCALL);
1047 ROR_ASSERT( r >= 0 );
1048
1049 r = engine->RegisterObjectMethod("vector3", "float distance(const vector3 &in) const", asMETHOD(Vector3,distance), asCALL_THISCALL);
1050 ROR_ASSERT( r >= 0 );
1051 r = engine->RegisterObjectMethod("vector3", "float squaredDistance(const vector3 &in) const", asMETHOD(Vector3,squaredDistance), asCALL_THISCALL);
1052 ROR_ASSERT( r >= 0 );
1053
1054 r = engine->RegisterObjectMethod("vector3", "float dotProduct(const vector3 &in) const", asMETHOD(Vector3,dotProduct), asCALL_THISCALL);
1055 ROR_ASSERT( r >= 0 );
1056 r = engine->RegisterObjectMethod("vector3", "float absDotProduct(const vector3 &in) const", asMETHOD(Vector3,absDotProduct), asCALL_THISCALL);
1057 ROR_ASSERT( r >= 0 );
1058
1059 r = engine->RegisterObjectMethod("vector3", "float normalise()", asMETHOD(Vector3,normalise), asCALL_THISCALL);
1060 ROR_ASSERT( r >= 0 );
1061 r = engine->RegisterObjectMethod("vector3", "float crossProduct(const vector3 &in) const", asMETHOD(Vector3,crossProduct), asCALL_THISCALL);
1062 ROR_ASSERT( r >= 0 );
1063 r = engine->RegisterObjectMethod("vector3", "vector3 midPoint(const vector3 &in) const", asMETHOD(Vector3,midPoint), asCALL_THISCALL);
1064 ROR_ASSERT( r >= 0 );
1065 r = engine->RegisterObjectMethod("vector3", "void makeFloor(const vector3 &in)", asMETHOD(Vector3,makeFloor), asCALL_THISCALL);
1066 ROR_ASSERT( r >= 0 );
1067 r = engine->RegisterObjectMethod("vector3", "void makeCeil(const vector3 &in)", asMETHOD(Vector3,makeCeil), asCALL_THISCALL);
1068 ROR_ASSERT( r >= 0 );
1069 r = engine->RegisterObjectMethod("vector3", "vector3 perpendicular() const", asMETHOD(Vector3,perpendicular), asCALL_THISCALL);
1070 ROR_ASSERT( r >= 0 );
1071 r = engine->RegisterObjectMethod("vector3", "vector3 randomDeviant(const radian &in, const vector3 &in) const", asMETHOD(Vector3,randomDeviant), asCALL_THISCALL);
1072 ROR_ASSERT( r >= 0 );
1073 r = engine->RegisterObjectMethod("vector3", "radian angleBetween(const vector3 &in)", asMETHOD(Vector3,angleBetween), asCALL_THISCALL);
1074 ROR_ASSERT( r >= 0 );
1075 r = engine->RegisterObjectMethod("vector3", "quaternion getRotationTo(const vector3 &in, const vector3 &in) const", asMETHOD(Vector3,getRotationTo), asCALL_THISCALL);
1076 ROR_ASSERT( r >= 0 );
1077 r = engine->RegisterObjectMethod("vector3", "bool isZeroLength() const", asMETHOD(Vector3,isZeroLength), asCALL_THISCALL);
1078 ROR_ASSERT( r >= 0 );
1079 r = engine->RegisterObjectMethod("vector3", "vector3 normalisedCopy() const", asMETHOD(Vector3,normalisedCopy), asCALL_THISCALL);
1080 ROR_ASSERT( r >= 0 );
1081 r = engine->RegisterObjectMethod("vector3", "vector3 reflect(const vector3 &in) const", asMETHOD(Vector3,reflect), asCALL_THISCALL);
1082 ROR_ASSERT( r >= 0 );
1083
1084 r = engine->RegisterObjectMethod("vector3", "bool positionEquals(const vector3 &in, float) const", asMETHOD(Vector3,positionEquals), asCALL_THISCALL);
1085 ROR_ASSERT( r >= 0 );
1086 r = engine->RegisterObjectMethod("vector3", "bool positionCloses(const vector3 &in, float) const", asMETHOD(Vector3,positionCloses), asCALL_THISCALL);
1087 ROR_ASSERT( r >= 0 );
1088 r = engine->RegisterObjectMethod("vector3", "bool directionEquals(const vector3 &in, radian &in) const", asMETHOD(Vector3,directionEquals), asCALL_THISCALL);
1089 ROR_ASSERT( r >= 0 );
1090
1091 r = engine->RegisterObjectMethod("vector3", "bool isNaN() const", asMETHOD(Vector3,isNaN), asCALL_THISCALL);
1092 ROR_ASSERT( r >= 0 );
1093}
1094
1095
1096// register Ogre::Vector2
1097void registerOgreVector2(AngelScript::asIScriptEngine* engine)
1098{
1099 int r;
1100
1101 // Register the object properties
1102 r = engine->RegisterObjectProperty("vector2", "float x", offsetof(Ogre::Vector2, x));
1103 ROR_ASSERT( r >= 0 );
1104 r = engine->RegisterObjectProperty("vector2", "float y", offsetof(Ogre::Vector2, y));
1105 ROR_ASSERT( r >= 0 );
1106
1107 // Register the object constructors
1108 r = engine->RegisterObjectBehaviour("vector2", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(Vector2DefaultConstructor), asCALL_CDECL_OBJLAST);
1109 ROR_ASSERT( r >= 0 );
1110 r = engine->RegisterObjectBehaviour("vector2", asBEHAVE_CONSTRUCT, "void f(float, float)", asFUNCTION(Vector2InitConstructor), asCALL_CDECL_OBJLAST);
1111 ROR_ASSERT( r >= 0 );
1112 r = engine->RegisterObjectBehaviour("vector2", asBEHAVE_CONSTRUCT, "void f(const vector2 &in)", asFUNCTION(Vector2CopyConstructor), asCALL_CDECL_OBJLAST);
1113 ROR_ASSERT( r >= 0 );
1114 r = engine->RegisterObjectBehaviour("vector2", asBEHAVE_CONSTRUCT, "void f(float)", asFUNCTION(Vector2InitConstructorScaler), asCALL_CDECL_OBJLAST);
1115 ROR_ASSERT( r >= 0 );
1116
1117 // Register the object operators
1118 r = engine->RegisterObjectMethod("vector2", "float opIndex(int) const", asMETHODPR(Vector2, operator[], (size_t) const, float), asCALL_THISCALL);
1119 ROR_ASSERT( r >= 0 );
1120 r = engine->RegisterObjectMethod("vector2", "vector2 &f(const vector2 &in)", asMETHODPR(Vector2, operator =, (const Vector2 &), Vector2&), asCALL_THISCALL);
1121 ROR_ASSERT( r >= 0 );
1122 r = engine->RegisterObjectMethod("vector2", "bool opEquals(const vector2 &in) const", asMETHODPR(Vector2, operator==,(const Vector2&) const, bool), asCALL_THISCALL);
1123 ROR_ASSERT( r >= 0 );
1124
1125 r = engine->RegisterObjectMethod("vector2", "vector2 opAdd(const vector2 &in) const", asMETHODPR(Vector2, operator+,(const Vector2&) const, Vector2), asCALL_THISCALL);
1126 ROR_ASSERT( r >= 0 );
1127 r = engine->RegisterObjectMethod("vector2", "vector2 opSub(const vector2 &in) const", asMETHODPR(Vector2, operator-,(const Vector2&) const, Vector2), asCALL_THISCALL);
1128 ROR_ASSERT( r >= 0 );
1129
1130 r = engine->RegisterObjectMethod("vector2", "vector2 opMul(float) const", asMETHODPR(Vector2, operator*,(const float) const, Vector2), asCALL_THISCALL);
1131 ROR_ASSERT( r >= 0 );
1132 r = engine->RegisterObjectMethod("vector2", "vector2 opMul(const vector2 &in) const", asMETHODPR(Vector2, operator*,(const Vector2&) const, Vector2), asCALL_THISCALL);
1133 ROR_ASSERT( r >= 0 );
1134 r = engine->RegisterObjectMethod("vector2", "vector2 opDiv(float) const", asMETHODPR(Vector2, operator/,(const float) const, Vector2), asCALL_THISCALL);
1135 ROR_ASSERT( r >= 0 );
1136 r = engine->RegisterObjectMethod("vector2", "vector2 opDiv(const vector2 &in) const", asMETHODPR(Vector2, operator/,(const Vector2&) const, Vector2), asCALL_THISCALL);
1137 ROR_ASSERT( r >= 0 );
1138
1139 r = engine->RegisterObjectMethod("vector2", "vector2 opAdd() const", asMETHODPR(Vector2, operator+,() const, const Vector2&), asCALL_THISCALL);
1140 ROR_ASSERT( r >= 0 );
1141 r = engine->RegisterObjectMethod("vector2", "vector2 opSub() const", asMETHODPR(Vector2, operator-,() const, Vector2), asCALL_THISCALL);
1142 ROR_ASSERT( r >= 0 );
1143
1144 r = engine->RegisterObjectMethod("vector2", "vector2 &opAddAssign(const vector2 &in)", asMETHODPR(Vector2,operator+=,(const Vector2 &),Vector2&), asCALL_THISCALL);
1145 ROR_ASSERT( r >= 0 );
1146 r = engine->RegisterObjectMethod("vector2", "vector2 &opAddAssign(float)", asMETHODPR(Vector2,operator+=,(const float),Vector2&), asCALL_THISCALL);
1147 ROR_ASSERT( r >= 0 );
1148
1149 r = engine->RegisterObjectMethod("vector2", "vector2 &opSubAssign(const vector2 &in)", asMETHODPR(Vector2,operator-=,(const Vector2 &),Vector2&), asCALL_THISCALL);
1150 ROR_ASSERT( r >= 0 );
1151 r = engine->RegisterObjectMethod("vector2", "vector2 &opSubAssign(float)", asMETHODPR(Vector2,operator-=,(const float),Vector2&), asCALL_THISCALL);
1152 ROR_ASSERT( r >= 0 );
1153
1154 r = engine->RegisterObjectMethod("vector2", "vector2 &opMulAssign(const vector2 &in)", asMETHODPR(Vector2,operator*=,(const Vector2 &),Vector2&), asCALL_THISCALL);
1155 ROR_ASSERT( r >= 0 );
1156 r = engine->RegisterObjectMethod("vector2", "vector2 &opMulAssign(float)", asMETHODPR(Vector2,operator*=,(const float),Vector2&), asCALL_THISCALL);
1157 ROR_ASSERT( r >= 0 );
1158
1159 r = engine->RegisterObjectMethod("vector2", "vector2 &opDivAssign(const vector2 &in)", asMETHODPR(Vector2,operator/=,(const Vector2 &),Vector2&), asCALL_THISCALL);
1160 ROR_ASSERT( r >= 0 );
1161 r = engine->RegisterObjectMethod("vector2", "vector2 &opDivAssign(float)", asMETHODPR(Vector2,operator/=,(const float),Vector2&), asCALL_THISCALL);
1162 ROR_ASSERT( r >= 0 );
1163
1164 // Register the object methods
1165
1166 r = engine->RegisterObjectMethod("vector2", "float length() const", asMETHOD(Vector2,length), asCALL_THISCALL);
1167 ROR_ASSERT( r >= 0 );
1168 r = engine->RegisterObjectMethod("vector2", "float squaredLength() const", asMETHOD(Vector2,squaredLength), asCALL_THISCALL);
1169 ROR_ASSERT( r >= 0 );
1170
1171 r = engine->RegisterObjectMethod("vector2", "float distance(const vector2 &in) const", asMETHOD(Vector2,distance), asCALL_THISCALL);
1172 ROR_ASSERT( r >= 0 );
1173 r = engine->RegisterObjectMethod("vector2", "float squaredDistance(const vector2 &in) const", asMETHOD(Vector2,squaredDistance), asCALL_THISCALL);
1174 ROR_ASSERT( r >= 0 );
1175
1176 r = engine->RegisterObjectMethod("vector2", "float dotProduct(const vector2 &in) const", asMETHOD(Vector2,dotProduct), asCALL_THISCALL);
1177 ROR_ASSERT( r >= 0 );
1178
1179 r = engine->RegisterObjectMethod("vector2", "float normalise()", asMETHOD(Vector2,normalise), asCALL_THISCALL);
1180 ROR_ASSERT( r >= 0 );
1181 r = engine->RegisterObjectMethod("vector2", "float crossProduct(const vector2 &in) const", asMETHOD(Vector2,crossProduct), asCALL_THISCALL);
1182 ROR_ASSERT( r >= 0 );
1183 r = engine->RegisterObjectMethod("vector2", "vector2 midPoint(const vector2 &in) const", asMETHOD(Vector2,midPoint), asCALL_THISCALL);
1184 ROR_ASSERT( r >= 0 );
1185 r = engine->RegisterObjectMethod("vector2", "void makeFloor(const vector2 &in)", asMETHOD(Vector2,makeFloor), asCALL_THISCALL);
1186 ROR_ASSERT( r >= 0 );
1187 r = engine->RegisterObjectMethod("vector2", "void makeCeil(const vector2 &in)", asMETHOD(Vector2,makeCeil), asCALL_THISCALL);
1188 ROR_ASSERT( r >= 0 );
1189 r = engine->RegisterObjectMethod("vector2", "vector2 perpendicular() const", asMETHOD(Vector2,perpendicular), asCALL_THISCALL);
1190 ROR_ASSERT( r >= 0 );
1191 r = engine->RegisterObjectMethod("vector2", "vector2 randomDeviant(const radian &in, const vector2 &in) const", asMETHOD(Vector2,randomDeviant), asCALL_THISCALL);
1192 ROR_ASSERT( r >= 0 );
1193 r = engine->RegisterObjectMethod("vector2", "radian angleBetween(const vector2 &in)", asMETHOD(Vector2,angleBetween), asCALL_THISCALL);
1194 ROR_ASSERT( r >= 0 );
1195 r = engine->RegisterObjectMethod("vector2", "bool isZeroLength() const", asMETHOD(Vector2,isZeroLength), asCALL_THISCALL);
1196 ROR_ASSERT( r >= 0 );
1197 r = engine->RegisterObjectMethod("vector2", "vector2 normalisedCopy() const", asMETHOD(Vector2,normalisedCopy), asCALL_THISCALL);
1198 ROR_ASSERT( r >= 0 );
1199 r = engine->RegisterObjectMethod("vector2", "vector2 reflect(const vector2 &in) const", asMETHOD(Vector2,reflect), asCALL_THISCALL);
1200 ROR_ASSERT( r >= 0 );
1201
1202 r = engine->RegisterObjectMethod("vector2", "bool positionEquals(const vector2 &in, float) const", asMETHOD(Vector2,positionEquals), asCALL_THISCALL);
1203 ROR_ASSERT( r >= 0 );
1204
1205 r = engine->RegisterObjectMethod("vector2", "bool isNaN() const", asMETHOD(Vector2,isNaN), asCALL_THISCALL);
1206 ROR_ASSERT( r >= 0 );
1207}
1208
1209void registerOgreRadian(AngelScript::asIScriptEngine* engine)
1210{
1211 int r;
1212
1213 // Register the object constructors
1214 r = engine->RegisterObjectBehaviour("radian", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(RadianDefaultConstructor), asCALL_CDECL_OBJLAST);
1215 ROR_ASSERT( r >= 0 );
1216 r = engine->RegisterObjectBehaviour("radian", asBEHAVE_CONSTRUCT, "void f(float)", asFUNCTION(RadianInitConstructor), asCALL_CDECL_OBJLAST);
1217 ROR_ASSERT( r >= 0 );
1218 r = engine->RegisterObjectBehaviour("radian", asBEHAVE_CONSTRUCT, "void f(const radian &in)", asFUNCTION(RadianCopyConstructor), asCALL_CDECL_OBJLAST);
1219 ROR_ASSERT( r >= 0 );
1220
1221 // Disabled during port to latest AngelScript because `asBEHAVE_IMPLICIT_VALUE_CAST` is deprecated.
1222 // TODO: Research and restore it ~ only_a_ptr, 08/2017
1223 // // Register other object behaviours
1224 // r = engine->RegisterObjectBehaviour("radian", asBEHAVE_IMPLICIT_VALUE_CAST, "float f() const", asMETHOD(Radian,valueRadians), asCALL_THISCALL);
1225 // ROR_ASSERT( r >= 0 );
1226 // r = engine->RegisterObjectBehaviour("radian", asBEHAVE_IMPLICIT_VALUE_CAST, "double f() const", asMETHOD(Radian,valueRadians), asCALL_THISCALL);
1227 // ROR_ASSERT( r >= 0 );
1228
1229 // Register the object operators
1230 r = engine->RegisterObjectMethod("radian", "radian &opAssign(const radian &in)", asMETHODPR(Radian, operator =, (const Radian &), Radian&), asCALL_THISCALL);
1231 ROR_ASSERT( r >= 0 );
1232 r = engine->RegisterObjectMethod("radian", "radian &opAssign(const float)", asMETHODPR(Radian, operator =, (const float &), Radian&), asCALL_THISCALL);
1233 ROR_ASSERT( r >= 0 );
1234 r = engine->RegisterObjectMethod("radian", "radian &opAssign(const degree &in)", asMETHODPR(Radian, operator =, (const Degree &), Radian&), asCALL_THISCALL);
1235 ROR_ASSERT( r >= 0 );
1236
1237 r = engine->RegisterObjectMethod("radian", "radian opAdd() const", asMETHODPR(Radian, operator+,() const, const Radian&), asCALL_THISCALL);
1238 ROR_ASSERT( r >= 0 );
1239 r = engine->RegisterObjectMethod("radian", "radian opAdd(const radian &in) const", asMETHODPR(Radian, operator+,(const Radian&) const, Radian), asCALL_THISCALL);
1240 ROR_ASSERT( r >= 0 );
1241 r = engine->RegisterObjectMethod("radian", "radian opAdd(const degree &in) const", asMETHODPR(Radian, operator+,(const Degree&) const, Radian), asCALL_THISCALL);
1242 ROR_ASSERT( r >= 0 );
1243
1244 r = engine->RegisterObjectMethod("radian", "radian &opAddAssign(const radian &in)", asMETHODPR(Radian,operator+=,(const Radian &),Radian&), asCALL_THISCALL);
1245 ROR_ASSERT( r >= 0 );
1246 r = engine->RegisterObjectMethod("radian", "radian &opAddAssign(const degree &in)", asMETHODPR(Radian,operator+=,(const Degree &),Radian&), asCALL_THISCALL);
1247 ROR_ASSERT( r >= 0 );
1248
1249 r = engine->RegisterObjectMethod("radian", "radian opSub() const", asMETHODPR(Radian, operator-,() const, Radian), asCALL_THISCALL);
1250 ROR_ASSERT( r >= 0 );
1251 r = engine->RegisterObjectMethod("radian", "radian opSub(const radian &in) const", asMETHODPR(Radian, operator-,(const Radian&) const, Radian), asCALL_THISCALL);
1252 ROR_ASSERT( r >= 0 );
1253 r = engine->RegisterObjectMethod("radian", "radian opSub(const degree &in) const", asMETHODPR(Radian, operator-,(const Degree&) const, Radian), asCALL_THISCALL);
1254 ROR_ASSERT( r >= 0 );
1255
1256 r = engine->RegisterObjectMethod("radian", "radian &opSubAssign(const radian &in)", asMETHODPR(Radian,operator-=,(const Radian &),Radian&), asCALL_THISCALL);
1257 ROR_ASSERT( r >= 0 );
1258 r = engine->RegisterObjectMethod("radian", "radian &opSubAssign(const degree &in)", asMETHODPR(Radian,operator-=,(const Degree &),Radian&), asCALL_THISCALL);
1259 ROR_ASSERT( r >= 0 );
1260
1261 r = engine->RegisterObjectMethod("radian", "radian opMul(float) const", asMETHODPR(Radian, operator*,(float) const, Radian), asCALL_THISCALL);
1262 ROR_ASSERT( r >= 0 );
1263 r = engine->RegisterObjectMethod("radian", "radian opMul(const radian &in) const", asMETHODPR(Radian, operator*,(const Radian&) const, Radian), asCALL_THISCALL);
1264 ROR_ASSERT( r >= 0 );
1265
1266 r = engine->RegisterObjectMethod("radian", "radian &opMulAssign(float)", asMETHODPR(Radian,operator*=,(float),Radian&), asCALL_THISCALL);
1267 ROR_ASSERT( r >= 0 );
1268
1269 r = engine->RegisterObjectMethod("radian", "radian opDiv(float) const", asMETHODPR(Radian, operator/,(float) const, Radian), asCALL_THISCALL);
1270 ROR_ASSERT( r >= 0 );
1271
1272 r = engine->RegisterObjectMethod("radian", "radian &opDivAssign(float)", asMETHODPR(Radian,operator*=,(float),Radian&), asCALL_THISCALL);
1273 ROR_ASSERT( r >= 0 );
1274
1275 r = engine->RegisterObjectMethod("radian", "int opCmp(const radian &in) const", asFUNCTION(RadianCmp), asCALL_CDECL_OBJFIRST);
1276 ROR_ASSERT( r >= 0 );
1277
1278 r = engine->RegisterObjectMethod("radian", "bool opEquals(const radian &in) const", asMETHODPR(Radian, operator==,(const Radian&) const, bool), asCALL_THISCALL);
1279 ROR_ASSERT( r >= 0 );
1280
1281 // Register the object methods
1282 r = engine->RegisterObjectMethod("radian", "float valueDegrees() const", asMETHOD(Radian,valueDegrees), asCALL_THISCALL);
1283 ROR_ASSERT( r >= 0 );
1284 r = engine->RegisterObjectMethod("radian", "float valueRadians() const", asMETHOD(Radian,valueRadians), asCALL_THISCALL);
1285 ROR_ASSERT( r >= 0 );
1286 r = engine->RegisterObjectMethod("radian", "float valueAngleUnits() const", asMETHOD(Radian,valueAngleUnits), asCALL_THISCALL);
1287 ROR_ASSERT( r >= 0 );
1288}
1289
1290void registerOgreDegree(AngelScript::asIScriptEngine* engine)
1291{
1292 int r;
1293
1294 // Register the object constructors
1295 r = engine->RegisterObjectBehaviour("degree", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(DegreeDefaultConstructor), asCALL_CDECL_OBJLAST);
1296 ROR_ASSERT( r >= 0 );
1297 r = engine->RegisterObjectBehaviour("degree", asBEHAVE_CONSTRUCT, "void f(float)", asFUNCTION(DegreeInitConstructor), asCALL_CDECL_OBJLAST);
1298 ROR_ASSERT( r >= 0 );
1299 r = engine->RegisterObjectBehaviour("degree", asBEHAVE_CONSTRUCT, "void f(const degree &in)", asFUNCTION(DegreeCopyConstructor), asCALL_CDECL_OBJLAST);
1300 ROR_ASSERT( r >= 0 );
1301
1302 // Disabled during port to latest AngelScript because `asBEHAVE_IMPLICIT_VALUE_CAST` is deprecated.
1303 // TODO: Research and restore it ~ only_a_ptr, 08/2017
1304 // // Register other object behaviours
1305 // r = engine->RegisterObjectBehaviour("degree", asBEHAVE_IMPLICIT_VALUE_CAST, "float f() const", asMETHOD(Degree,valueDegrees), asCALL_THISCALL);
1306 // ROR_ASSERT( r >= 0 );
1307 // r = engine->RegisterObjectBehaviour("degree", asBEHAVE_IMPLICIT_VALUE_CAST, "double f() const", asMETHOD(Degree,valueDegrees), asCALL_THISCALL);
1308 // ROR_ASSERT( r >= 0 );
1309
1310 // Register the object operators
1311 r = engine->RegisterObjectMethod("degree", "degree &opAssign(const degree &in)", asMETHODPR(Degree, operator =, (const Degree &), Degree&), asCALL_THISCALL);
1312 ROR_ASSERT( r >= 0 );
1313 r = engine->RegisterObjectMethod("degree", "degree &opAssign(float)", asMETHODPR(Degree, operator =, (const float &), Degree&), asCALL_THISCALL);
1314 ROR_ASSERT( r >= 0 );
1315 r = engine->RegisterObjectMethod("degree", "degree &opAssign(const radian &in)", asMETHODPR(Degree, operator =, (const Radian &), Degree&), asCALL_THISCALL);
1316 ROR_ASSERT( r >= 0 );
1317
1318 r = engine->RegisterObjectMethod("degree", "degree opAdd() const", asMETHODPR(Degree, operator+,() const, const Degree&), asCALL_THISCALL);
1319 ROR_ASSERT( r >= 0 );
1320 r = engine->RegisterObjectMethod("degree", "degree opAdd(const degree &in) const", asMETHODPR(Degree, operator+,(const Degree&) const, Degree), asCALL_THISCALL);
1321 ROR_ASSERT( r >= 0 );
1322 r = engine->RegisterObjectMethod("degree", "degree opAdd(const radian &in) const", asMETHODPR(Degree, operator+,(const Radian&) const, Degree), asCALL_THISCALL);
1323 ROR_ASSERT( r >= 0 );
1324
1325 r = engine->RegisterObjectMethod("degree", "degree &opAddAssign(const degree &in)", asMETHODPR(Degree,operator+=,(const Degree &),Degree&), asCALL_THISCALL);
1326 ROR_ASSERT( r >= 0 );
1327 r = engine->RegisterObjectMethod("degree", "degree &opAddAssign(const radian &in)", asMETHODPR(Degree,operator+=,(const Radian &),Degree&), asCALL_THISCALL);
1328 ROR_ASSERT( r >= 0 );
1329
1330 r = engine->RegisterObjectMethod("degree", "degree opSub() const", asMETHODPR(Degree, operator-,() const, Degree), asCALL_THISCALL);
1331 ROR_ASSERT( r >= 0 );
1332 r = engine->RegisterObjectMethod("degree", "degree opSub(const degree &in) const", asMETHODPR(Degree, operator-,(const Degree&) const, Degree), asCALL_THISCALL);
1333 ROR_ASSERT( r >= 0 );
1334 r = engine->RegisterObjectMethod("degree", "degree opSub(const radian &in) const", asMETHODPR(Degree, operator-,(const Radian&) const, Degree), asCALL_THISCALL);
1335 ROR_ASSERT( r >= 0 );
1336
1337 r = engine->RegisterObjectMethod("degree", "degree &opSubAssign(const degree &in)", asMETHODPR(Degree,operator-=,(const Degree &),Degree&), asCALL_THISCALL);
1338 ROR_ASSERT( r >= 0 );
1339 r = engine->RegisterObjectMethod("degree", "degree &opSubAssign(const radian &in)", asMETHODPR(Degree,operator-=,(const Radian &),Degree&), asCALL_THISCALL);
1340 ROR_ASSERT( r >= 0 );
1341
1342 r = engine->RegisterObjectMethod("degree", "degree opMul(float) const", asMETHODPR(Degree, operator*,(float) const, Degree), asCALL_THISCALL);
1343 ROR_ASSERT( r >= 0 );
1344 r = engine->RegisterObjectMethod("degree", "degree opMul(const degree &in) const", asMETHODPR(Degree, operator*,(const Degree&) const, Degree), asCALL_THISCALL);
1345 ROR_ASSERT( r >= 0 );
1346
1347 r = engine->RegisterObjectMethod("degree", "degree &opMulAssign(float)", asMETHODPR(Degree,operator*=,(float),Degree&), asCALL_THISCALL);
1348 ROR_ASSERT( r >= 0 );
1349
1350 r = engine->RegisterObjectMethod("degree", "degree opDiv(float) const", asMETHODPR(Degree, operator/,(float) const, Degree), asCALL_THISCALL);
1351 ROR_ASSERT( r >= 0 );
1352
1353 r = engine->RegisterObjectMethod("degree", "degree &opDivAssign(float)", asMETHODPR(Degree,operator*=,(float),Degree&), asCALL_THISCALL);
1354 ROR_ASSERT( r >= 0 );
1355
1356 r = engine->RegisterObjectMethod("degree", "int opCmp(const degree &in) const", asFUNCTION(DegreeCmp), asCALL_CDECL_OBJFIRST);
1357 ROR_ASSERT( r >= 0 );
1358
1359 r = engine->RegisterObjectMethod("degree", "bool opEquals(const degree &in) const", asMETHODPR(Degree, operator==,(const Degree&) const, bool), asCALL_THISCALL);
1360 ROR_ASSERT( r >= 0 );
1361
1362 // Register the object methods
1363 r = engine->RegisterObjectMethod("degree", "float valueRadians() const", asMETHOD(Degree,valueRadians), asCALL_THISCALL);
1364 ROR_ASSERT( r >= 0 );
1365 r = engine->RegisterObjectMethod("degree", "float valueDegrees() const", asMETHOD(Degree,valueDegrees), asCALL_THISCALL);
1366 ROR_ASSERT( r >= 0 );
1367 r = engine->RegisterObjectMethod("degree", "float valueAngleUnits() const", asMETHOD(Degree,valueAngleUnits), asCALL_THISCALL);
1368 ROR_ASSERT( r >= 0 );
1369}
1370
1371void registerOgreQuaternion(AngelScript::asIScriptEngine* engine)
1372{
1373 int r;
1374
1375 // Register the object properties
1376 r = engine->RegisterObjectProperty("quaternion", "float w", offsetof(Quaternion, w));
1377 ROR_ASSERT( r >= 0 );
1378 r = engine->RegisterObjectProperty("quaternion", "float x", offsetof(Quaternion, x));
1379 ROR_ASSERT( r >= 0 );
1380 r = engine->RegisterObjectProperty("quaternion", "float y", offsetof(Quaternion, y));
1381 ROR_ASSERT( r >= 0 );
1382 r = engine->RegisterObjectProperty("quaternion", "float z", offsetof(Quaternion, z));
1383 ROR_ASSERT( r >= 0 );
1384 // r = engine->RegisterObjectProperty("quaternion", "float ms_fEpsilon", offsetof(Quaternion, ms_fEpsilon)); ROR_ASSERT( r >= 0 );
1385 // r = engine->RegisterObjectProperty("quaternion", "quaternion ZERO", offsetof(Quaternion, ZERO)); ROR_ASSERT( r >= 0 );
1386 // r = engine->RegisterObjectProperty("quaternion", "quaternion IDENTITY", offsetof(Quaternion, IDENTITY)); ROR_ASSERT( r >= 0 );
1387
1388 // Register the object constructors
1389 r = engine->RegisterObjectBehaviour("quaternion", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(QuaternionDefaultConstructor), asCALL_CDECL_OBJLAST);
1390 ROR_ASSERT( r >= 0 );
1391 r = engine->RegisterObjectBehaviour("quaternion", asBEHAVE_CONSTRUCT, "void f(const radian &in, const vector3 &in)", asFUNCTION(QuaternionInitConstructor1), asCALL_CDECL_OBJLAST);
1392 ROR_ASSERT( r >= 0 );
1393 r = engine->RegisterObjectBehaviour("quaternion", asBEHAVE_CONSTRUCT, "void f(float, float, float, float)", asFUNCTION(QuaternionInitConstructor2), asCALL_CDECL_OBJLAST);
1394 ROR_ASSERT( r >= 0 );
1395 r = engine->RegisterObjectBehaviour("quaternion", asBEHAVE_CONSTRUCT, "void f(const vector3 &in, const vector3 &in, const vector3 &in)", asFUNCTION(QuaternionInitConstructor3), asCALL_CDECL_OBJLAST);
1396 ROR_ASSERT( r >= 0 );
1397 r = engine->RegisterObjectBehaviour("quaternion", asBEHAVE_CONSTRUCT, "void f(float)", asFUNCTION(QuaternionInitConstructorScaler), asCALL_CDECL_OBJLAST);
1398 ROR_ASSERT( r >= 0 );
1399 r = engine->RegisterObjectBehaviour("quaternion", asBEHAVE_CONSTRUCT, "void f(const quaternion &in)", asFUNCTION(QuaternionCopyConstructor), asCALL_CDECL_OBJLAST);
1400 ROR_ASSERT( r >= 0 );
1401
1402 // Register the object operators
1403 r = engine->RegisterObjectMethod("quaternion", "float opIndex(int) const", asMETHODPR(Quaternion, operator[], (size_t) const, float), asCALL_THISCALL);
1404 ROR_ASSERT( r >= 0 );
1405 r = engine->RegisterObjectMethod("quaternion", "quaternion &opAssign(const quaternion &in)", asMETHODPR(Quaternion, operator =, (const Quaternion &), Quaternion&), asCALL_THISCALL);
1406 ROR_ASSERT( r >= 0 );
1407 r = engine->RegisterObjectMethod("quaternion", "quaternion opAdd(const quaternion &in) const", asMETHODPR(Quaternion, operator+,(const Quaternion&) const, Quaternion), asCALL_THISCALL);
1408 ROR_ASSERT( r >= 0 );
1409 r = engine->RegisterObjectMethod("quaternion", "quaternion opSub(const quaternion &in) const", asMETHODPR(Quaternion, operator-,(const Quaternion&) const, Quaternion), asCALL_THISCALL);
1410 ROR_ASSERT( r >= 0 );
1411 r = engine->RegisterObjectMethod("quaternion", "quaternion opMul(const quaternion &in) const", asMETHODPR(Quaternion, operator*,(const Quaternion&) const, Quaternion), asCALL_THISCALL);
1412 ROR_ASSERT( r >= 0 );
1413 r = engine->RegisterObjectMethod("quaternion", "quaternion opMul(float) const", asMETHODPR(Quaternion, operator*,(float) const, Quaternion), asCALL_THISCALL);
1414 ROR_ASSERT( r >= 0 );
1415 r = engine->RegisterObjectMethod("quaternion", "quaternion opSub() const", asMETHODPR(Quaternion, operator-,() const, Quaternion), asCALL_THISCALL);
1416 ROR_ASSERT( r >= 0 );
1417 r = engine->RegisterObjectMethod("quaternion", "bool opEquals(const quaternion &in) const", asMETHODPR(Quaternion, operator==,(const Quaternion&) const, bool), asCALL_THISCALL);
1418 ROR_ASSERT( r >= 0 );
1419 r = engine->RegisterObjectMethod("quaternion", "vector3 opMul(const vector3 &in) const", asMETHODPR(Quaternion, operator*,(const Vector3&) const, Vector3), asCALL_THISCALL);
1420 ROR_ASSERT( r >= 0 );
1421
1422 // Register the object methods
1423 r = engine->RegisterObjectMethod("quaternion", "float Dot(const quaternion &in) const", asMETHOD(Quaternion,Dot), asCALL_THISCALL);
1424 ROR_ASSERT( r >= 0 );
1425 r = engine->RegisterObjectMethod("quaternion", "float Norm() const", asMETHOD(Quaternion,Norm), asCALL_THISCALL);
1426 ROR_ASSERT( r >= 0 );
1427 r = engine->RegisterObjectMethod("quaternion", "float normalise()", asMETHOD(Quaternion,normalise), asCALL_THISCALL);
1428 ROR_ASSERT( r >= 0 );
1429 r = engine->RegisterObjectMethod("quaternion", "quaternion Inverse() const", asMETHOD(Quaternion,Inverse), asCALL_THISCALL);
1430 ROR_ASSERT( r >= 0 );
1431 r = engine->RegisterObjectMethod("quaternion", "quaternion UnitInverse() const", asMETHOD(Quaternion,UnitInverse), asCALL_THISCALL);
1432 ROR_ASSERT( r >= 0 );
1433 r = engine->RegisterObjectMethod("quaternion", "quaternion Exp() const", asMETHOD(Quaternion,Exp), asCALL_THISCALL);
1434 ROR_ASSERT( r >= 0 );
1435 r = engine->RegisterObjectMethod("quaternion", "quaternion Log() const", asMETHOD(Quaternion,Log), asCALL_THISCALL);
1436 ROR_ASSERT( r >= 0 );
1437 r = engine->RegisterObjectMethod("quaternion", "radian getRoll(bool reprojectAxis = true) const", asMETHOD(Quaternion,getRoll), asCALL_THISCALL);
1438 ROR_ASSERT( r >= 0 );
1439 r = engine->RegisterObjectMethod("quaternion", "radian getPitch(bool reprojectAxis = true) const", asMETHOD(Quaternion,getPitch), asCALL_THISCALL);
1440 ROR_ASSERT( r >= 0 );
1441 r = engine->RegisterObjectMethod("quaternion", "radian getYaw(bool reprojectAxis = true) const", asMETHOD(Quaternion,getYaw), asCALL_THISCALL);
1442 ROR_ASSERT( r >= 0 );
1443 r = engine->RegisterObjectMethod("quaternion", "bool equals(const quaternion &in, const radian &in) const", asMETHOD(Quaternion,equals), asCALL_THISCALL);
1444 ROR_ASSERT( r >= 0 );
1445 r = engine->RegisterObjectMethod("quaternion", "bool isNaN() const", asMETHOD(Quaternion,isNaN), asCALL_THISCALL);
1446 ROR_ASSERT( r >= 0 );
1447
1448 // Register some static methods
1449 r = engine->RegisterGlobalFunction("quaternion Slerp(float, const quaternion &in, const quaternion &in, bool &in)", asFUNCTIONPR(Quaternion::Slerp,(Real fT, const Quaternion&, const Quaternion&, bool), Quaternion), asCALL_CDECL);
1450 ROR_ASSERT( r >= 0 );
1451 r = engine->RegisterGlobalFunction("quaternion SlerpExtraSpins(float, const quaternion &in, const quaternion &in, int &in)", asFUNCTION(Quaternion::SlerpExtraSpins), asCALL_CDECL);
1452 ROR_ASSERT( r >= 0 );
1453 r = engine->RegisterGlobalFunction("void Intermediate(const quaternion &in, const quaternion &in, const quaternion &in, const quaternion &in, const quaternion &in)", asFUNCTION(Quaternion::Intermediate), asCALL_CDECL);
1454 ROR_ASSERT( r >= 0 );
1455 r = engine->RegisterGlobalFunction("quaternion Squad(float, const quaternion &in, const quaternion &in, const quaternion &in, const quaternion &in, bool &in)", asFUNCTION(Quaternion::Squad), asCALL_CDECL);
1456 ROR_ASSERT( r >= 0 );
1457 r = engine->RegisterGlobalFunction("quaternion nlerp(float, const quaternion &in, const quaternion &in, bool &in)", asFUNCTION(Quaternion::nlerp), asCALL_CDECL);
1458 ROR_ASSERT( r >= 0 );
1459}
1460
1461void registerOgreColourValue(AngelScript::asIScriptEngine* engine)
1462{
1463 int r;
1464
1465 // Register the object properties
1466 r = engine->RegisterObjectProperty("color", "float r", offsetof(ColourValue, r));
1467 ROR_ASSERT( r >= 0 );
1468 r = engine->RegisterObjectProperty("color", "float g", offsetof(ColourValue, g));
1469 ROR_ASSERT( r >= 0 );
1470 r = engine->RegisterObjectProperty("color", "float b", offsetof(ColourValue, b));
1471 ROR_ASSERT( r >= 0 );
1472 r = engine->RegisterObjectProperty("color", "float a", offsetof(ColourValue, a));
1473 ROR_ASSERT( r >= 0 );
1474
1475 // Register the object constructors
1476 r = engine->RegisterObjectBehaviour("color", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(ColourValueDefaultConstructor), asCALL_CDECL_OBJLAST);
1477 ROR_ASSERT( r >= 0 );
1478 r = engine->RegisterObjectBehaviour("color", asBEHAVE_CONSTRUCT, "void f(float r, float g, float b, float a)", asFUNCTION(ColourValueInitConstructor), asCALL_CDECL_OBJLAST);
1479 ROR_ASSERT( r >= 0 );
1480 r = engine->RegisterObjectBehaviour("color", asBEHAVE_CONSTRUCT, "void f(const color &other)", asFUNCTION(QuaternionCopyConstructor), asCALL_CDECL_OBJLAST);
1481}
1482
1483void registerOgreBox(AngelScript::asIScriptEngine* engine)
1484{
1485 int r;
1486
1487 // Register the object properties
1488 r = engine->RegisterObjectProperty("box", "uint left", offsetof(Box, left));
1489 ROR_ASSERT( r >= 0 );
1490 r = engine->RegisterObjectProperty("box", "uint top", offsetof(Box, top));
1491 ROR_ASSERT( r >= 0 );
1492 r = engine->RegisterObjectProperty("box", "uint right", offsetof(Box, right));
1493 ROR_ASSERT( r >= 0 );
1494 r = engine->RegisterObjectProperty("box", "uint bottom", offsetof(Box, bottom));
1495 ROR_ASSERT( r >= 0 );
1496 r = engine->RegisterObjectProperty("box", "uint front", offsetof(Box, front));
1497 ROR_ASSERT( r >= 0 );
1498 r = engine->RegisterObjectProperty("box", "uint back", offsetof(Box, back));
1499 ROR_ASSERT( r >= 0 );
1500
1501 // Register the object constructors
1502 r = engine->RegisterObjectBehaviour("box", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(BoxDefaultConstructor), asCALL_CDECL_OBJLAST);
1503 ROR_ASSERT( r >= 0 );
1504 r = engine->RegisterObjectBehaviour("box", asBEHAVE_CONSTRUCT, "void f(uint32 l, uint32 t, uint32 r, uint32 b)", asFUNCTION(BoxInitConstructor), asCALL_CDECL_OBJLAST);
1505 ROR_ASSERT( r >= 0 );
1506 r = engine->RegisterObjectBehaviour("box", asBEHAVE_CONSTRUCT, "void f(const box &other)", asFUNCTION(BoxCopyConstructor), asCALL_CDECL_OBJLAST);
1507
1508 // Register other behaviors
1509 r = engine->RegisterObjectBehaviour("box", asBEHAVE_DESTRUCT, "void f()", asFUNCTION(BoxDestructor), asCALL_CDECL_OBJLAST);
1510 ROR_ASSERT(r >= 0);
1511 r = engine->RegisterObjectMethod("box", "box& opAssign(const box&in)", asFUNCTION(BoxAssignOperator), asCALL_CDECL_OBJLAST);
1512 ROR_ASSERT(r >= 0);
1513}
1514
1515void registerOgreTexture(AngelScript::asIScriptEngine* engine)
1516{
1517 int r;
1518 r = engine->SetDefaultNamespace("Ogre"); ROR_ASSERT(r >= 0);
1519
1520 r = engine->RegisterObjectBehaviour("TexturePtr", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(TexturePtrDefaultConstructor), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
1521 r = engine->RegisterObjectBehaviour("TexturePtr", asBEHAVE_CONSTRUCT, "void f(const TexturePtr&in)", asFUNCTION(TexturePtrCopyConstructor), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
1522 r = engine->RegisterObjectBehaviour("TexturePtr", asBEHAVE_DESTRUCT, "void f()", asFUNCTION(TexturePtrDestructor), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
1523 r = engine->RegisterObjectMethod("TexturePtr", "TexturePtr& opAssign(const TexturePtr&in)", asFUNCTION(TexturePtrAssignOperator), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
1524 r = engine->RegisterObjectMethod("TexturePtr", "bool isNull()", asFUNCTION(TexturePtrIsNull), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
1525
1526 // Wrappers are inevitable, see https://www.gamedev.net/forums/topic/540419-custom-smartpointers-and-angelscript-/
1527 r = engine->RegisterObjectMethod("TexturePtr", "string getName() const", asFUNCTIONPR([](TexturePtr const& self) {
1528 return self->getName();
1529 }, (TexturePtr const&), Ogre::String), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
1530 r = engine->RegisterObjectMethod("TexturePtr", "uint getWidth()", asFUNCTIONPR([](TexturePtr const& self) {
1531 return (asUINT)self->getWidth();
1532 }, (TexturePtr const&), Ogre::uint32), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
1533 r = engine->RegisterObjectMethod("TexturePtr", "uint getHeight()", asFUNCTIONPR([](TexturePtr const& self) {
1534 return (asUINT)self->getHeight();
1535 }, (TexturePtr const&), Ogre::uint32), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
1536 r = engine->RegisterObjectMethod("TexturePtr", "uint getNumMipmaps()", asFUNCTIONPR([](TexturePtr const& self) {
1537 return (asUINT)self->getNumMipmaps();
1538 }, (TexturePtr const&), Ogre::uint32), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
1539 r = engine->RegisterObjectMethod("TexturePtr", "HardwarePixelBufferPtr getBuffer(uint, uint)", asFUNCTIONPR([](TexturePtr const& self, asUINT face, asUINT mipmap) {
1540 return self->getBuffer(face, mipmap);
1541 }, (TexturePtr const&, asUINT, asUINT), HardwarePixelBufferSharedPtr), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
1542
1543 r = engine->SetDefaultNamespace(""); ROR_ASSERT(r >= 0);
1544}
1545
1546void registerOgreTextureManager(AngelScript::asIScriptEngine * engine)
1547{
1548 int r;
1549 r = engine->SetDefaultNamespace("Ogre"); ROR_ASSERT(r >= 0);
1550
1551 // Convenience wrapper to omit optional parameters
1552 r = engine->RegisterObjectMethod("TextureManager", "TexturePtr load(const string&in file, const string&in rg)", asFUNCTIONPR([](TextureManager& mgr, std::string const& file, std::string const& rg){
1553 try { return mgr.load(file, rg); }
1554 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::TextureManager::load()"); return Ogre::TexturePtr();}
1555 }, (TextureManager& mgr, std::string const& file, std::string const& rg), TexturePtr), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
1556
1557 r = engine->SetDefaultNamespace("Ogre::TextureManager"); ROR_ASSERT(r >= 0);
1558 r = engine->RegisterGlobalFunction("TextureManager& getSingleton()", asFUNCTION(TextureManager::getSingleton), asCALL_CDECL); ROR_ASSERT(r >= 0);
1559
1560 r = engine->SetDefaultNamespace(""); ROR_ASSERT(r >= 0);
1561}
1562
1563template <typename T>
1564void registerOgreMovableObjectBase(AngelScript::asIScriptEngine* engine, const char* obj)
1565{
1566 int r;
1567 r = engine->RegisterObjectMethod(obj, "string __getUniqueName() const", asFUNCTION(MovableObjectGetUniqueNameMixin), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
1568
1569 r = engine->RegisterObjectMethod(obj, "const string& getName() const", asMETHOD(MovableObject, getName), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1570 r = engine->RegisterObjectMethod(obj, "const string& getMovableType() const", asMETHOD(MovableObject, getMovableType), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1571
1572 r = engine->RegisterObjectMethod(obj, "Node@ getParentNode()", asMETHOD(MovableObject, getParentNode), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1573 r = engine->RegisterObjectMethod(obj, "SceneNode@ getParentSceneNode()", asMETHOD(MovableObject, getParentSceneNode), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1574 r = engine->RegisterObjectMethod(obj, "bool isParentTagPoint() const", asMETHOD(MovableObject, isParentTagPoint), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1575 r = engine->RegisterObjectMethod(obj, "bool isAttached() const", asMETHOD(MovableObject, isAttached), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1576 r = engine->RegisterObjectMethod(obj, "void detachFromParent()", asMETHOD(MovableObject, detachFromParent), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1577
1578 r = engine->RegisterObjectMethod(obj, "bool isInScene() const", asMETHOD(MovableObject, isInScene), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1579 r = engine->RegisterObjectMethod(obj, "float getBoundingRadius() const", asMETHOD(MovableObject, getBoundingRadius), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1580
1581 r = engine->RegisterObjectMethod(obj, "void setVisible(bool visible)", asMETHOD(MovableObject, setVisible), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1582 r = engine->RegisterObjectMethod(obj, "bool getVisible() const", asMETHOD(MovableObject, getVisible), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1583 r = engine->RegisterObjectMethod(obj, "bool isVisible() const", asMETHOD(MovableObject, isVisible), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1584
1585 r = engine->RegisterObjectMethod(obj, "void setRenderingDistance(float dist)", asMETHOD(MovableObject, setRenderingDistance), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1586 r = engine->RegisterObjectMethod(obj, "float getRenderingDistance() const", asMETHOD(MovableObject, getRenderingDistance), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1587
1588 r = engine->RegisterObjectMethod(obj, "void setRenderingMinPixelSize(float pixelSize)", asMETHOD(MovableObject, setRenderingMinPixelSize), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1589 r = engine->RegisterObjectMethod(obj, "float getRenderingMinPixelSize() const", asMETHOD(MovableObject, getRenderingMinPixelSize), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1590
1591 r = engine->RegisterObjectMethod(obj, "void setCastShadows(bool enabled)", asMETHOD(MovableObject, setCastShadows), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1592 r = engine->RegisterObjectMethod(obj, "bool getCastShadows() const", asMETHOD(MovableObject, getCastShadows), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1593}
1594
1595void registerOgreMovableObject(AngelScript::asIScriptEngine* engine)
1596{
1597 int r;
1598 r = engine->SetDefaultNamespace("Ogre"); ROR_ASSERT(r >= 0);
1599
1600 registerOgreMovableObjectBase<MovableObject>(engine, "MovableObject");
1601
1602 r = engine->SetDefaultNamespace(""); ROR_ASSERT(r >= 0);
1603}
1604
1605void registerOgreEntity(AngelScript::asIScriptEngine* engine)
1606{
1607 int r;
1608 r = engine->SetDefaultNamespace("Ogre"); ROR_ASSERT(r >= 0);
1609
1610 r = engine->RegisterObjectMethod("Entity", "void setMaterialName(const string &in name, const string &in rg = \"OgreAutodetect\")", asMETHOD(Entity, setMaterialName), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1611 r = engine->RegisterObjectMethod("Entity", "AnimationState @getAnimationState(const string &in) const", asMETHOD(Entity, getAnimationState), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1612 r = engine->RegisterObjectMethod("Entity", "AnimationStateSet @getAllAnimationStates()", asMETHOD(Entity, getAllAnimationStates), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1613 r = engine->RegisterObjectMethod("Entity", "void setDisplaySkeleton(bool)", asMETHOD(Entity, setDisplaySkeleton), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1614 r = engine->RegisterObjectMethod("Entity", "bool getDisplaySkeleton() const", asMETHOD(Entity, getDisplaySkeleton), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1615 r = engine->RegisterObjectMethod("Entity", "uint64 getNumManualLodLevels() const", asMETHOD(Entity, getNumManualLodLevels), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1616 r = engine->RegisterObjectMethod("Entity", "uint16 getCurrentLodIndex()", asMETHOD(Entity, getCurrentLodIndex), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1617 r = engine->RegisterObjectMethod("Entity", "Entity @getManualLodLevel(uint64) const", asMETHOD(Entity, getManualLodLevel), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1618 r = engine->RegisterObjectMethod("Entity", "void setMeshLodBias(float, uint16, uint16)", asMETHOD(Entity, setMeshLodBias), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1619 r = engine->RegisterObjectMethod("Entity", "void setMaterialLodBias(float, uint16, uint16)", asMETHOD(Entity, setMaterialLodBias), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1620 r = engine->RegisterObjectMethod("Entity", "SubEntityArray @getSubEntities() const", asFUNCTION(EntityGetSubEntities), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
1621 r = engine->RegisterObjectMethod("Entity", "const MeshPtr& getMesh() const", asMETHOD(Entity, getMesh), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1622
1623 registerOgreMovableObjectBase<MovableObject>(engine, "Entity");
1624
1625 r = engine->SetDefaultNamespace(""); ROR_ASSERT(r >= 0);
1626}
1627
1628void registerOgreSubEntity(AngelScript::asIScriptEngine* engine)
1629{
1630 int r;
1631 r = engine->SetDefaultNamespace("Ogre"); ROR_ASSERT(r >= 0);
1632
1633 r = engine->RegisterObjectMethod("SubEntity", "const MaterialPtr& getMaterial() const", asMETHOD(SubEntity, getMaterial), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1634 r = engine->RegisterObjectMethod("SubEntity", "void setMaterial(const MaterialPtr&in)", asMETHOD(SubEntity, setMaterial), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1635 r = engine->RegisterObjectMethod("SubEntity", "SubMesh@ getSubMesh()", asMETHOD(SubEntity, getSubMesh), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1636
1637 r = engine->SetDefaultNamespace(""); ROR_ASSERT(r >= 0);
1638}
1639
1640template <typename T>
1641void registerOgreNodeBase(AngelScript::asIScriptEngine* engine, const char* obj)
1642{
1643 int r;
1644 r = engine->SetDefaultNamespace("Ogre"); ROR_ASSERT(r >= 0);
1645
1646 r = engine->RegisterObjectMethod(obj, "const vector3& getPosition() const", asMETHOD(T, getPosition), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1647 r = engine->RegisterObjectMethod(obj, "void setPosition(const vector3 &in)", asMETHODPR(T, setPosition, (const Vector3&), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1648
1649 r = engine->RegisterObjectMethod(obj, "const vector3& getScale() const", asMETHOD(T, getScale), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1650 r = engine->RegisterObjectMethod(obj, "void setScale(const vector3 &in)", asMETHODPR(T, setScale, (const Ogre::Vector3&), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1651
1652 r = engine->RegisterObjectMethod(obj, "const string& getName() const", asMETHOD(T, getName), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1653 r = engine->RegisterObjectMethod(obj, "Node@ getParent()", asMETHOD(T, getParent), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1654
1655 r = engine->RegisterObjectMethod(obj, "const quaternion& getOrientation() const", asMETHOD(T, getOrientation), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1656 r = engine->RegisterObjectMethod(obj, "void setOrientation(const quaternion&in)", asFUNCTIONPR([](T* self, const Ogre::Quaternion& q){
1657 self->setOrientation(q);
1658 }, (T*, const Quaternion&), void), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
1659
1660 r = engine->RegisterObjectMethod(obj, "string __getUniqueName() const", asFUNCTION(NodeGetUniqueNameMixin), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
1661
1662 // Not const because we don't want all elements to be const (this isn't the case with raw pointers in C++).
1663 r = engine->RegisterObjectMethod(obj, "ChildNodeArray@ getChildren()", asFUNCTION(NodeGetChildren), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
1664
1665 r = engine->SetDefaultNamespace(""); ROR_ASSERT(r >= 0);
1666}
1667
1668void registerOgreNode(AngelScript::asIScriptEngine* engine)
1669{
1670 int r;
1671 r = engine->SetDefaultNamespace("Ogre"); ROR_ASSERT(r >= 0);
1672
1673 registerOgreNodeBase<Node>(engine, "Node");
1674
1675 r = engine->SetDefaultNamespace(""); ROR_ASSERT(r >= 0);
1676}
1677
1678void registerOgreSceneNode(AngelScript::asIScriptEngine* engine)
1679{
1680 int r;
1681 r = engine->SetDefaultNamespace("Ogre"); ROR_ASSERT(r >= 0);
1682
1683 r = engine->RegisterObjectMethod("SceneNode", "void attachObject(MovableObject@ obj)", asMETHODPR(SceneNode, attachObject, (MovableObject*), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1684 r = engine->RegisterObjectMethod("SceneNode", "MovableObject@ getAttachedObject(const string& in)", asMETHODPR(SceneNode, getAttachedObject, (const String&), MovableObject*), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1685 r = engine->RegisterObjectMethod("SceneNode", "MovableObject@ detachObject(uint16)", asMETHODPR(SceneNode, detachObject, (uint16), MovableObject*), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1686 r = engine->RegisterObjectMethod("SceneNode", "void detachObject(MovableObject@ obj)", asMETHODPR(SceneNode, detachObject, (MovableObject*), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1687 r = engine->RegisterObjectMethod("SceneNode", "MovableObject@ detachObject(const string& in)", asMETHODPR(SceneNode, detachObject, (const String&), MovableObject*), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1688 r = engine->RegisterObjectMethod("SceneNode", "void detachAllObjects()", asMETHOD(SceneNode, detachAllObjects), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1689 r = engine->RegisterObjectMethod("SceneNode", "bool isInSceneGraph() const", asMETHOD(SceneNode, isInSceneGraph), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1690 r = engine->RegisterObjectMethod("SceneNode", "SceneManager@ getCreator() const", asMETHOD(SceneNode, getCreator), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1691 r = engine->RegisterObjectMethod("SceneNode", "void removeAndDestroyChild(const string& in)", asMETHODPR(SceneNode, removeAndDestroyChild, (const String&), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1692 r = engine->RegisterObjectMethod("SceneNode", "void removeAndDestroyChild(uint16)", asMETHODPR(SceneNode, removeAndDestroyChild, (uint16), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1693 r = engine->RegisterObjectMethod("SceneNode", "void removeAndDestroyChild(SceneNode@)", asMETHODPR(SceneNode, removeAndDestroyChild, (uint16), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1694 r = engine->RegisterObjectMethod("SceneNode", "void removeAndDestroyAllChildren()", asMETHOD(SceneNode, removeAndDestroyAllChildren), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1695 r = engine->RegisterObjectMethod("SceneNode", "void showBoundingBox(bool bShow)", asMETHOD(SceneNode, showBoundingBox), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1696 r = engine->RegisterObjectMethod("SceneNode", "void hideBoundingBox(bool bHide)", asMETHOD(SceneNode, hideBoundingBox), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1697 r = engine->RegisterObjectMethod("SceneNode", "bool getShowBoundingBox() const", asMETHOD(SceneNode, getShowBoundingBox), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1698 r = engine->RegisterObjectMethod("SceneNode", "SceneNode@ createChildSceneNode(const string& in name, const vector3& in translate = vector3(0.f, 0.f, 0.f), const quaternion& in rotate = quaternion())", asMETHODPR(SceneNode, createChildSceneNode, (const String&, const Vector3&, const Quaternion&), SceneNode*), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1699 r = engine->RegisterObjectMethod("SceneNode", "void setFixedYawAxis(bool useFixed, const vector3& in fixedAxis = vector3(0.f, 1.f, 0.f))", asMETHOD(SceneNode, setFixedYawAxis), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1700 r = engine->RegisterObjectMethod("SceneNode", "void yaw(const radian& in angle, TransformSpace relativeTo = Ogre::TS_LOCAL)", asMETHOD(SceneNode, yaw), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1701 r = engine->RegisterObjectMethod("SceneNode", "void setDirection(const vector3& in vec, TransformSpace relativeTo = Ogre::TS_LOCAL, const vector3& in localDirectionVector = vector3(0.f, 0.f, -1.f))", asMETHODPR(SceneNode, setDirection, (const Vector3&, Node::TransformSpace, const Vector3&), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1702 r = engine->RegisterObjectMethod("SceneNode", "SceneNode@ getParentSceneNode() const", asMETHOD(SceneNode, getParentSceneNode), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1703 // Not const because we don't want all elements to be const (this isn't the case with raw pointers in C++).
1704 r = engine->RegisterObjectMethod("SceneNode", "MovableObjectArray@ getAttachedObjects()", asFUNCTION(SceneNodeGetAttachedObjects), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
1705 r = engine->RegisterObjectMethod("SceneNode", "void lookAt(const vector3 &in, TransformSpace, const vector3 &in = vector3(0,0,-1))", asMETHODPR(SceneNode, lookAt, (const Vector3&, Node::TransformSpace, const Vector3&), void), asCALL_THISCALL);
1706 r = engine->RegisterObjectMethod("SceneNode", "void setAutoTracking(bool, SceneNode@, const vector3 &in = vector3(0,0,-1), const vector3 &in = vector3())", asMETHODPR(SceneNode, setAutoTracking, (bool, SceneNode* const, const Vector3&, const Vector3&), void), asCALL_THISCALL);
1707 r = engine->RegisterObjectMethod("SceneNode", "SceneNode@ getAutoTrackTarget()", asMETHODPR(SceneNode, getAutoTrackTarget, (), SceneNode*), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1708 r = engine->RegisterObjectMethod("SceneNode", "const vector3& getAutoTrackOffset()", asMETHODPR(SceneNode, getAutoTrackOffset, (), const Vector3&), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1709 r = engine->RegisterObjectMethod("SceneNode", "const vector3& getAutoTrackLocalDirection()", asMETHODPR(SceneNode, getAutoTrackLocalDirection, (), const Vector3&), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1710 r = engine->RegisterObjectMethod("SceneNode", "SceneNode@ getParentSceneNode()", asMETHODPR(SceneNode, getParentSceneNode, () const, SceneNode*), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1711 r = engine->RegisterObjectMethod("SceneNode", "void setVisible(bool, bool cascade = true)", asMETHODPR(SceneNode, setVisible, (bool, bool), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1712 r = engine->RegisterObjectMethod("SceneNode", "void flipVisibility(bool = true)", asMETHODPR(SceneNode, flipVisibility, (bool), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1713 r = engine->RegisterObjectMethod("SceneNode", "void setDebugDisplayEnabled(bool, bool cascade = true)", asMETHODPR(SceneNode, setDebugDisplayEnabled, (bool, bool), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1714
1715 registerOgreNodeBase<SceneNode>(engine, "SceneNode");
1716
1717 r = engine->SetDefaultNamespace(""); ROR_ASSERT(r >= 0);
1718}
1719
1720void registerOgreSceneManager(AngelScript::asIScriptEngine* engine)
1721{
1722 int r;
1723 r = engine->SetDefaultNamespace("Ogre"); ROR_ASSERT(r >= 0);
1724
1725 r = engine->RegisterObjectMethod("SceneManager", "const string& getName() const", asMETHOD(SceneManager, getName), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1726
1727 r = engine->RegisterObjectMethod("SceneManager", "array<MovableObject@>@ __getMovableObjectsByType(const string&in typeName)", asFUNCTION(SceneManager__getMovableObjectsByType), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
1728
1729 // Entities
1730 r = engine->RegisterObjectMethod("SceneManager", "Entity@ createEntity(const string&in ent_name, const string &in mesh_name, const string &in mesh_rg = \"OgreAutodetect\")", asFUNCTIONPR([](Ogre::SceneManager* self, const std::string& entityName, const std::string& meshName, const std::string& meshRG) -> Ogre::Entity* {
1731 try { return self->createEntity(entityName, meshName, meshRG); }
1732 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::SceneManager::createEntity()"); return nullptr; }
1733 }, (Ogre::SceneManager* , const std::string& , const std::string& , const std::string& ), Ogre::Entity*), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
1734 r = engine->RegisterObjectMethod("SceneManager", "void destroyEntity(Entity@)", asMETHODPR(SceneManager, destroyEntity, (Entity*), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1735 r = engine->RegisterObjectMethod("SceneManager", "void destroyEntity(const string &in)", asMETHODPR(SceneManager, destroyEntity, (const Ogre::String&), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1736
1737 // Scene nodes
1738 r = engine->RegisterObjectMethod("SceneManager", "SceneNode@ getRootSceneNode()", asMETHOD(SceneManager, getRootSceneNode), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1739 r = engine->RegisterObjectMethod("SceneManager", "void destroySceneNode(SceneNode@)", asMETHODPR(SceneManager, destroySceneNode, (SceneNode*), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1740 r = engine->RegisterObjectMethod("SceneManager", "void destroySceneNode(const string &in)", asMETHODPR(SceneManager, destroySceneNode, (const Ogre::String&), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1741
1742 // Ambient light
1743 r = engine->RegisterObjectMethod("SceneManager", "const color& getAmbientLight() const", asMETHOD(SceneManager, getAmbientLight), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1744 r = engine->RegisterObjectMethod("SceneManager", "void setAmbientLight(const color &in)", asMETHODPR(SceneManager, setAmbientLight, (const ColourValue&), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1745
1746 // ManualObject:
1747 r = engine->RegisterObjectMethod("SceneManager", "ManualObject@ createManualObject(const string &in)", asMETHODPR(SceneManager, createManualObject, (const Ogre::String&), Ogre::ManualObject*), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1748 r = engine->RegisterObjectMethod("SceneManager", "ManualObject@ getManualObject(const string &in)", asMETHODPR(SceneManager, getManualObject, (const Ogre::String&) const, Ogre::ManualObject*), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1749 r = engine->RegisterObjectMethod("SceneManager", "ManualObject@ destroyManualObject(const string &in)", asMETHODPR(SceneManager, destroyManualObject, (const Ogre::String&), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1750 r = engine->RegisterObjectMethod("SceneManager", "void destroyManualObject(ManualObject@)", asMETHODPR(SceneManager, destroyManualObject, (Ogre::ManualObject*), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1751
1752 r = engine->SetDefaultNamespace(""); ROR_ASSERT(r >= 0);
1753}
1754
1755void registerOgreRoot(AngelScript::asIScriptEngine* engine)
1756{
1757 int r;
1758 r = engine->SetDefaultNamespace("Ogre"); ROR_ASSERT(r >= 0);
1759
1760 r = engine->RegisterObjectMethod("Root", "SceneManagerInstanceDict@ getSceneManagers()", asFUNCTION(RootGetSceneManagers), asCALL_CDECL_OBJLAST);
1761
1762 r = engine->SetDefaultNamespace("Ogre::Root");
1763 r = engine->RegisterGlobalFunction("Root& getSingleton()", asFUNCTION(Root::getSingleton), asCALL_CDECL);
1764
1765 r = engine->SetDefaultNamespace(""); ROR_ASSERT(r >= 0);
1766}
1767
1768void registerOgreAnimationState(AngelScript::asIScriptEngine* engine)
1769{
1770 int r;
1771 r = engine->SetDefaultNamespace("Ogre"); ROR_ASSERT(r >= 0);
1772
1773 // Register the getters and setters
1774 r = engine->RegisterObjectMethod("AnimationState", "const string& getAnimationName() const", asMETHOD(AnimationState, getAnimationName), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1775 r = engine->RegisterObjectMethod("AnimationState", "float getTimePosition() const", asMETHOD(AnimationState, getTimePosition), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1776 r = engine->RegisterObjectMethod("AnimationState", "void setTimePosition(float)", asMETHOD(AnimationState, setTimePosition), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1777 r = engine->RegisterObjectMethod("AnimationState", "float getLength() const", asMETHOD(AnimationState, getLength), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1778 r = engine->RegisterObjectMethod("AnimationState", "void setLength(float)", asMETHOD(AnimationState, setLength), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1779 r = engine->RegisterObjectMethod("AnimationState", "float getWeight() const", asMETHOD(AnimationState, getWeight), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1780 r = engine->RegisterObjectMethod("AnimationState", "void setWeight(float)", asMETHOD(AnimationState, setWeight), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1781 r = engine->RegisterObjectMethod("AnimationState", "void addTime(float)", asMETHOD(AnimationState, addTime), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1782 r = engine->RegisterObjectMethod("AnimationState", "bool hasEnded() const", asMETHOD(AnimationState, hasEnded), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1783 r = engine->RegisterObjectMethod("AnimationState", "bool getEnabled() const", asMETHOD(AnimationState, getEnabled), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1784 r = engine->RegisterObjectMethod("AnimationState", "void setEnabled(bool)", asMETHOD(AnimationState, setEnabled), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1785 r = engine->RegisterObjectMethod("AnimationState", "void setLoop(bool)", asMETHOD(AnimationState, setLoop), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1786 r = engine->RegisterObjectMethod("AnimationState", "bool getLoop() const", asMETHOD(AnimationState, getLoop), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1787 r = engine->RegisterObjectMethod("AnimationState", "AnimationStateSet@ getParent()", asMETHOD(AnimationState, getParent), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1788 r = engine->RegisterObjectMethod("AnimationState", "void createBlendMask(uint blendMaskSizeHint, float initialWeight = 1.0f)", asMETHOD(AnimationState, createBlendMask), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1789 r = engine->RegisterObjectMethod("AnimationState", "void destroyBlendMask()", asMETHOD(AnimationState, destroyBlendMask), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1790 r = engine->RegisterObjectMethod("AnimationState", "bool hasBlendMask() const", asMETHOD(AnimationState, hasBlendMask), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1791 r = engine->RegisterObjectMethod("AnimationState", "void setBlendMaskEntry(uint boneHandle, float weight)", asMETHOD(AnimationState, setBlendMaskEntry), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1792 r = engine->RegisterObjectMethod("AnimationState", "float getBlendMaskEntry(uint boneHandle)", asMETHOD(AnimationState, getBlendMaskEntry), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1793
1794 r = engine->SetDefaultNamespace(""); ROR_ASSERT(r >= 0);
1795}
1796
1797void registerOgreAnimationStateSet(AngelScript::asIScriptEngine* engine)
1798{
1799 int r;
1800 r = engine->SetDefaultNamespace("Ogre"); ROR_ASSERT(r >= 0);
1801
1802 r = engine->RegisterObjectMethod("AnimationStateSet", "AnimationState@ createAnimationState(const string& in, float, float, float = 1.0f, bool = false)", asMETHOD(AnimationStateSet, createAnimationState), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1803 r = engine->RegisterObjectMethod("AnimationStateSet", "AnimationState@ getAnimationState(const string& in) const", asMETHOD(AnimationStateSet, getAnimationState), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1804 r = engine->RegisterObjectMethod("AnimationStateSet", "bool hasAnimationState(const string& in) const", asMETHOD(AnimationStateSet, hasAnimationState), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1805 r = engine->RegisterObjectMethod("AnimationStateSet", "void removeAnimationState(const string& in)", asMETHOD(AnimationStateSet, removeAnimationState), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1806 r = engine->RegisterObjectMethod("AnimationStateSet", "void removeAllAnimationStates()", asMETHOD(AnimationStateSet, removeAllAnimationStates), asCALL_THISCALL); ROR_ASSERT(r >= 0);
1807 r = engine->RegisterObjectMethod("AnimationStateSet", "AnimationStateDict@ getAnimationStates()", asFUNCTION(AnimationStateSetGetAnimationStates), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
1808
1809 r = engine->SetDefaultNamespace(""); ROR_ASSERT(r >= 0);
1810}
1811
1812AngelScript::CScriptArray* get2DElementsHelper(Ogre::Overlay* self)
1813{
1814 try {
1815 const Ogre::Overlay::OverlayContainerList& ocList = self->get2DElements();
1816 AngelScript::asITypeInfo* typeinfo = App::GetScriptEngine()->getEngine()->GetTypeInfoByDecl("array<Ogre::OverlayElement@>");
1817 AngelScript::CScriptArray* arr = AngelScript::CScriptArray::Create(typeinfo);
1818 for (OverlayContainer* oc: ocList)
1819 {
1820 OverlayElement* elem = static_cast<Ogre::OverlayElement*>(oc);
1821 arr->InsertLast(&elem); // TORN HAIR HERE!! Don't forget to pass ref-types as pointer-to-pointer!!
1822 }
1823 return arr;
1824 }
1825 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::Overlay::get2DElements()"); return (CScriptArray*)nullptr; }
1826}
1827
1828AngelScript::CScriptArray* getElementTemplatesHelper(Ogre::OverlayManager* self)
1829{
1830 try {
1831 auto iterable = self->getTemplateIterator();
1832 // we must cast on the go (unlike get2DElements() this actually returns list of Ogre::OverlayElement*), see ATTENTION! below.
1833 AngelScript::asITypeInfo* typeinfo = App::GetScriptEngine()->getEngine()->GetTypeInfoByDecl("array<Ogre::OverlayElement@>");
1834 AngelScript::CScriptArray* arr = AngelScript::CScriptArray::Create(typeinfo);
1835 for (auto& elem_pair: iterable) {
1836 OverlayElement* elem = static_cast<Ogre::OverlayElement*>(elem_pair.second);
1837 arr->InsertLast(&elem); // TORN HAIR HERE!! Don't forget to pass ref-types as pointer-to-pointer!!
1838 }
1839 return arr; }
1840 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::OverlayManager::getTemplates()"); return (CScriptArray*)nullptr; }
1841}
1842
1843void registerOgreOverlay(AngelScript::asIScriptEngine* engine)
1844{
1845 engine->SetDefaultNamespace("Ogre");
1846
1847 // Register the GuiMetricsMode enum
1848 engine->RegisterEnum("GuiMetricsMode");
1849 engine->RegisterEnumValue("GuiMetricsMode", "GMM_PIXELS", Ogre::GMM_PIXELS);
1850 engine->RegisterEnumValue("GuiMetricsMode", "GMM_RELATIVE", Ogre::GMM_RELATIVE);
1851 engine->RegisterEnumValue("GuiMetricsMode", "GMM_RELATIVE_ASPECT_ADJUSTED", Ogre::GMM_RELATIVE_ASPECT_ADJUSTED);
1852
1853 // Register the GuiHorizontalAlignment enum
1854 engine->RegisterEnum("GuiHorizontalAlignment");
1855 engine->RegisterEnumValue("GuiHorizontalAlignment", "GHA_LEFT", Ogre::GHA_LEFT);
1856 engine->RegisterEnumValue("GuiHorizontalAlignment", "GHA_CENTER", Ogre::GHA_CENTER);
1857 engine->RegisterEnumValue("GuiHorizontalAlignment", "GHA_RIGHT", Ogre::GHA_RIGHT);
1858
1859
1860 // Register the OverlayElement class
1861 // ATTENTION! only instances of `OverlayContainer` (is-a `OverlayElement`) can actually be bound to overlays and retrieved from overlays
1862 // - see `Ogre::Overlay::add2D()`, `Ogre::Overlay::get2DElements()` and APIDOC on `OverlayContainer`.
1863 // This forces us to toss `dynamic_cast<>`s around :(
1864 // (order roughly matches OgreOverlayElement.h)
1865 engine->RegisterObjectType("OverlayElement", 0, asOBJ_REF | asOBJ_NOCOUNT);
1866 engine->RegisterObjectMethod("OverlayElement", "const string& getName() const", asMETHOD(Ogre::OverlayElement, getName), asCALL_THISCALL);
1867 // > visibility
1868 engine->RegisterObjectMethod("OverlayElement", "void show()", asMETHOD(Ogre::OverlayElement, show), asCALL_THISCALL);
1869 engine->RegisterObjectMethod("OverlayElement", "void hide()", asMETHOD(Ogre::OverlayElement, hide), asCALL_THISCALL);
1870 engine->RegisterObjectMethod("OverlayElement", "bool isVisible() const", asMETHOD(Ogre::OverlayElement, isVisible), asCALL_THISCALL);
1871 // > positioning
1872 engine->RegisterObjectMethod("OverlayElement", "void setPosition(float, float)", asMETHOD(Ogre::OverlayElement, setPosition), asCALL_THISCALL);
1873 engine->RegisterObjectMethod("OverlayElement", "void setDimensions(float, float)", asMETHOD(Ogre::OverlayElement, setDimensions), asCALL_THISCALL);
1874 engine->RegisterObjectMethod("OverlayElement", "float getLeft() const", asMETHOD(Ogre::OverlayElement, getLeft), asCALL_THISCALL);
1875 engine->RegisterObjectMethod("OverlayElement", "float getTop() const", asMETHOD(Ogre::OverlayElement, getTop), asCALL_THISCALL);
1876 engine->RegisterObjectMethod("OverlayElement", "float getWidth() const", asMETHOD(Ogre::OverlayElement, getWidth), asCALL_THISCALL);
1877 engine->RegisterObjectMethod("OverlayElement", "float getHeight() const", asMETHOD(Ogre::OverlayElement, getHeight), asCALL_THISCALL);
1878 engine->RegisterObjectMethod("OverlayElement", "void setLeft(float)", asMETHOD(Ogre::OverlayElement, setLeft), asCALL_THISCALL);
1879 engine->RegisterObjectMethod("OverlayElement", "void setTop(float)", asMETHOD(Ogre::OverlayElement, setTop), asCALL_THISCALL);
1880 engine->RegisterObjectMethod("OverlayElement", "void setWidth(float)", asMETHOD(Ogre::OverlayElement, setWidth), asCALL_THISCALL);
1881 engine->RegisterObjectMethod("OverlayElement", "void setHeight(float)", asMETHOD(Ogre::OverlayElement, setHeight), asCALL_THISCALL);
1882 // > material
1883 engine->RegisterObjectMethod("OverlayElement", "const string& getMaterialName() const", asMETHOD(Ogre::OverlayElement, getMaterialName), asCALL_THISCALL);
1884 engine->RegisterObjectMethod("OverlayElement", "void setMaterialName(const string&in, const string&in)", asMETHOD(Ogre::OverlayElement, setMaterialName), asCALL_THISCALL);
1885 // > caption
1886 engine->RegisterObjectMethod("OverlayElement", "void setCaption(const string&in)", asMETHOD(Ogre::OverlayElement, setCaption), asCALL_THISCALL);
1887 engine->RegisterObjectMethod("OverlayElement", "const string& getCaption() const", asMETHOD(Ogre::OverlayElement, getCaption), asCALL_THISCALL);
1888 // > color
1889 engine->RegisterObjectMethod("OverlayElement", "void setColour(const color&in)", asMETHOD(Ogre::OverlayElement, setColour), asCALL_THISCALL);
1890 engine->RegisterObjectMethod("OverlayElement", "const color& getColour() const", asMETHOD(Ogre::OverlayElement, getColour), asCALL_THISCALL);
1891 // > GuiMetricsMode
1892 engine->RegisterObjectMethod("OverlayElement", "GuiMetricsMode getMetricsMode() const", asMETHOD(Ogre::OverlayElement, getMetricsMode), asCALL_THISCALL);
1893 engine->RegisterObjectMethod("OverlayElement", "void setMetricsMode(GuiMetricsMode)", asMETHOD(Ogre::OverlayElement, setMetricsMode), asCALL_THISCALL);
1894 // > GuiHorizontalAlignment
1895 engine->RegisterObjectMethod("OverlayElement", "GuiHorizontalAlignment getHorizontalAlignment() const", asMETHOD(Ogre::OverlayElement, getHorizontalAlignment), asCALL_THISCALL);
1896 engine->RegisterObjectMethod("OverlayElement", "void setHorizontalAlignment(GuiHorizontalAlignment)", asMETHOD(Ogre::OverlayElement, setHorizontalAlignment), asCALL_THISCALL);
1897
1898
1899 // Register the Overlay class
1900 // (order roughly matches OgreOverlay.h)
1901 engine->RegisterObjectType("Overlay", 0, asOBJ_REF | asOBJ_NOCOUNT);
1902 engine->RegisterObjectMethod("Overlay", "const string& getName() const", asMETHOD(Ogre::Overlay, getName), asCALL_THISCALL);
1903 // > z-order
1904 engine->RegisterObjectMethod("Overlay", "void setZOrder(uint16)", asMETHOD(Ogre::Overlay, setZOrder), asCALL_THISCALL);
1905 engine->RegisterObjectMethod("Overlay", "uint16 getZOrder()", asMETHOD(Ogre::Overlay, getZOrder), asCALL_THISCALL);
1906 // > visibility
1907 engine->RegisterObjectMethod("Overlay", "bool isVisible() const", asMETHODPR(Ogre::Overlay, isVisible, () const, bool), asCALL_THISCALL);
1908 engine->RegisterObjectMethod("Overlay", "void show()", asMETHODPR(Ogre::Overlay, show, (), void), asCALL_THISCALL);
1909 engine->RegisterObjectMethod("Overlay", "void hide()", asMETHODPR(Ogre::Overlay, hide, (), void), asCALL_THISCALL);
1910 // > 2D elements
1911 engine->RegisterObjectMethod("Overlay", "void add2D(OverlayElement@)", asFUNCTIONPR([](Ogre::Overlay* self, Ogre::OverlayElement* elem) {
1912 try { self->add2D(dynamic_cast<Ogre::OverlayContainer*>(elem)); }
1913 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::Overlay::add2D()"); } }, (Ogre::Overlay* , Ogre::OverlayElement* ), void), asCALL_CDECL_OBJFIRST);
1914 engine->RegisterObjectMethod("Overlay", "void remove2D(OverlayElement@)", asFUNCTIONPR([](Ogre::Overlay* self, Ogre::OverlayElement* elem) {
1915 try { self->remove2D(dynamic_cast<Ogre::OverlayContainer*>(elem)); }
1916 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::Overlay::remove2D()"); } }, (Ogre::Overlay* , Ogre::OverlayElement* ), void), asCALL_CDECL_OBJFIRST);
1917 // > scrolling
1918 engine->RegisterObjectMethod("Overlay", "void setScroll(float, float)", asMETHOD(Ogre::Overlay, setScroll), asCALL_THISCALL);
1919 engine->RegisterObjectMethod("Overlay", "float getScrollX() const", asMETHOD(Ogre::Overlay, getScrollX), asCALL_THISCALL);
1920 engine->RegisterObjectMethod("Overlay", "float getScrollY() const", asMETHOD(Ogre::Overlay, getScrollY), asCALL_THISCALL);
1921 engine->RegisterObjectMethod("Overlay", "void scroll(float, float)", asMETHOD(Ogre::Overlay, scroll), asCALL_THISCALL);
1922 // > rotating
1923 engine->RegisterObjectMethod("Overlay", "void setRotate(const radian&in)", asMETHOD(Ogre::Overlay, setRotate), asCALL_THISCALL);
1924 engine->RegisterObjectMethod("Overlay", "const radian& getRotate() const", asMETHOD(Ogre::Overlay, getRotate), asCALL_THISCALL);
1925 engine->RegisterObjectMethod("Overlay", "void rotate(const radian&in)", asMETHOD(Ogre::Overlay, rotate), asCALL_THISCALL);
1926 // > scaling
1927 engine->RegisterObjectMethod("Overlay", "void setScale(float, float)", asMETHOD(Ogre::Overlay, setScale), asCALL_THISCALL);
1928 engine->RegisterObjectMethod("Overlay", "float getScaleX() const", asMETHOD(Ogre::Overlay, getScaleX), asCALL_THISCALL);
1929 engine->RegisterObjectMethod("Overlay", "float getScaleY() const", asMETHOD(Ogre::Overlay, getScaleY), asCALL_THISCALL);
1930 // > 2D elements
1931 engine->RegisterObjectMethod("Overlay", "array<OverlayElement@>@ get2DElements()", asFUNCTION(get2DElementsHelper), asCALL_CDECL_OBJFIRST);
1932
1933
1934 // Register the OverlayManager class
1935 // (order roughly matches OgreOverlayManager.h)
1936 engine->RegisterObjectType("OverlayManager", 0, asOBJ_REF | asOBJ_NOCOUNT);
1937 // > overlay management
1938 engine->RegisterObjectMethod("OverlayManager", "Overlay@ create(const string&in)", asFUNCTIONPR([](Ogre::OverlayManager* self, const std::string& name) {
1939 try {return self->create(name);}
1940 catch(...) {App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::OverlayManager::create()"); return (Ogre::Overlay*)nullptr;}}, (Ogre::OverlayManager*, const std::string&), Ogre::Overlay*), asCALL_CDECL_OBJFIRST);
1941 engine->RegisterObjectMethod("OverlayManager", "Overlay@ getByName(const string&in)", asFUNCTIONPR([](Ogre::OverlayManager* self, const std::string& name) {
1942 try {return self->getByName(name);} // Doesn't seem to throw, but just to be sure...
1943 catch(...) {App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::OverlayManager::getByName()"); return (Ogre::Overlay*)nullptr;}}, (Ogre::OverlayManager*, const std::string&), Ogre::Overlay*), asCALL_CDECL_OBJFIRST);
1944 engine->RegisterObjectMethod("OverlayManager", "void destroy(const string&in)", asFUNCTIONPR([](Ogre::OverlayManager* self, const std::string& name) {
1945 try {return self->destroy(name);}
1946 catch(...) {App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::OverlayManager::destroy(string)"); }}, (Ogre::OverlayManager*, const std::string&), void), asCALL_CDECL_OBJFIRST);
1947 engine->RegisterObjectMethod("OverlayManager", "void destroy(Overlay@)", asFUNCTIONPR([](Ogre::OverlayManager* self, Ogre::Overlay* ov) {
1948 try {return self->destroy(ov);}
1949 catch(...) {App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::OverlayManager::destroy(Overlay@)"); }}, (Ogre::OverlayManager*, Ogre::Overlay*), void), asCALL_CDECL_OBJFIRST);
1950 engine->RegisterObjectMethod("OverlayManager", "void destroyAll()", asFUNCTIONPR([](Ogre::OverlayManager* self) {
1951 try {return self->destroyAll();}
1952 catch(...) {App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::OverlayManager::destroyAll()"); }}, (Ogre::OverlayManager*), void), asCALL_CDECL_OBJFIRST);
1953 // NOTE: we have `getOverlays()` instead of `getOverlayIterator()`
1954 engine->RegisterObjectMethod("OverlayManager", "array<Overlay@>@ getOverlays()", asFUNCTIONPR([](Ogre::OverlayManager* self) {
1955 try {auto iterable = self->getOverlayIterator();
1956 return IterableMapToScriptArray(iterable.begin(), iterable.end(), "Ogre::Overlay@"); }
1957 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::OverlayManager::getOverlays()"); return (CScriptArray*)nullptr; } }, (Ogre::OverlayManager*), CScriptArray*), asCALL_CDECL_OBJFIRST);
1958 // > viewport info
1959 engine->RegisterObjectMethod("OverlayManager", "float getViewportHeight() const", asMETHOD(Ogre::OverlayManager, getViewportHeight), asCALL_THISCALL);
1960 engine->RegisterObjectMethod("OverlayManager", "float getViewportWidth() const", asMETHOD(Ogre::OverlayManager, getViewportWidth), asCALL_THISCALL);
1961 // > overlay element management
1962 engine->RegisterObjectMethod("OverlayManager", "OverlayElement@ createOverlayElement(const string&in, const string&in, bool=false)", asFUNCTIONPR([](Ogre::OverlayManager* self, const std::string& type, const std::string& name, bool isTemplate) {
1963 try {return dynamic_cast<Ogre::OverlayElement*>(self->createOverlayElement(type,name,isTemplate));}
1964 catch(...) {App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::OverlayManager::createOverlayElement()"); return (Ogre::OverlayElement*)nullptr;}}, (Ogre::OverlayManager*, const std::string&, const std::string&, bool), Ogre::OverlayElement*), asCALL_CDECL_OBJFIRST);
1965 engine->RegisterObjectMethod("OverlayManager", "OverlayElement@ getOverlayElement(const string&in) const", asFUNCTIONPR([](Ogre::OverlayManager* self, const std::string& name) {
1966 try {return dynamic_cast<Ogre::OverlayElement*>(self->getOverlayElement(name));}
1967 catch(...) {App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::OverlayManager::getOverlayElement()"); return (Ogre::OverlayElement*)nullptr;}}, (Ogre::OverlayManager*, const std::string&), Ogre::OverlayElement*), asCALL_CDECL_OBJFIRST);
1968 engine->RegisterObjectMethod("OverlayManager", "bool hasOverlayElement(const string&in) const", asMETHOD(Ogre::OverlayManager, hasOverlayElement), asCALL_THISCALL);
1969 engine->RegisterObjectMethod("OverlayManager", "void destroyOverlayElement(const string&in, bool isTemplate=false) const", asFUNCTIONPR([](Ogre::OverlayManager* self, const std::string& name, bool isTemplate) {
1970 try { self->destroyOverlayElement(name, isTemplate);}
1971 catch(...) {App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::OverlayManager::destroyOverlayElement(string)"); }}, (Ogre::OverlayManager*, const std::string&, bool), void), asCALL_CDECL_OBJFIRST);
1972 engine->RegisterObjectMethod("OverlayManager", "void destroyOverlayElement(OverlayElement@, bool isTemplate=false) const", asFUNCTIONPR([](Ogre::OverlayManager* self, Ogre::OverlayElement* oe, bool isTemplate) {
1973 try { self->destroyOverlayElement(oe, isTemplate);}
1974 catch(...) {App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::OverlayManager::destroyOverlayElement(OverlayElement@)"); }}, (Ogre::OverlayManager*, Ogre::OverlayElement*, bool), void), asCALL_CDECL_OBJFIRST);
1975 engine->RegisterObjectMethod("OverlayManager", "void destroyAllOverlayElements(bool isTemplate=false) const", asFUNCTIONPR([](Ogre::OverlayManager* self, bool isTemplate) {
1976 try { self->destroyAllOverlayElements(isTemplate);}
1977 catch(...) {App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::OverlayManager::destroyAllOverlayElements()"); }}, (Ogre::OverlayManager*, bool), void), asCALL_CDECL_OBJFIRST);
1978 // > template management
1979 engine->RegisterObjectMethod("OverlayManager", "OverlayElement@ createOverlayElementFromTemplate(const string&in, const string&in, const string&in, bool=false)", asFUNCTIONPR([](Ogre::OverlayManager* self, const std::string& templateName, const std::string& typeName, const std::string& instanceName, bool isTemplate) {
1980 try {return dynamic_cast<Ogre::OverlayElement*>(self->createOverlayElementFromTemplate(templateName, typeName, instanceName, isTemplate));}
1981 catch(...) {App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::OverlayManager::createOverlayElementFromTemplate()"); return (Ogre::OverlayElement*)nullptr;}}, (Ogre::OverlayManager*, const std::string&, const std::string&, const std::string&, bool), Ogre::OverlayElement*), asCALL_CDECL_OBJFIRST);
1982 engine->RegisterObjectMethod("OverlayManager", "OverlayElement@ cloneOverlayElementFromTemplate(const string&in, const string&in)", asFUNCTIONPR([](Ogre::OverlayManager* self, const std::string& templateName, const std::string& instanceName) {
1983 try {return dynamic_cast<Ogre::OverlayElement*>(self->cloneOverlayElementFromTemplate(templateName, instanceName));}
1984 catch(...) {App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::OverlayManager::cloneOverlayElementFromTemplate()"); return (Ogre::OverlayElement*)nullptr;}}, (Ogre::OverlayManager*, const std::string&, const std::string&), Ogre::OverlayElement*), asCALL_CDECL_OBJFIRST);
1985 // NOTE: we have `getTemplates()` instead of `getTemplateIterator()`
1986 engine->RegisterObjectMethod("OverlayManager", "array<OverlayElement@>@ getTemplates()", asFUNCTION(getElementTemplatesHelper), asCALL_CDECL_OBJFIRST);
1987 engine->RegisterObjectMethod("OverlayManager", "bool isTemplate(const string&in)", asFUNCTIONPR([](Ogre::OverlayManager* self, const std::string& name) {
1988 try {return self->isTemplate(name);}
1989 catch(...) {App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::OverlayManager::isTemplate()"); return false;}}, (Ogre::OverlayManager*, const std::string&), bool), asCALL_CDECL_OBJFIRST);
1990
1991
1992 engine->SetDefaultNamespace("Ogre::OverlayManager");
1993 engine->RegisterGlobalFunction("OverlayManager& getSingleton()", asFUNCTION(OverlayManager::getSingleton), asCALL_CDECL);
1994
1995 engine->SetDefaultNamespace("");
1996
1997}
1998
1999void registerOgreManualObject(AngelScript::asIScriptEngine* engine)
2000{
2001 engine->SetDefaultNamespace("Ogre");
2002
2003 // Register the ManualObject class
2004 engine->RegisterObjectType("ManualObject", 0, asOBJ_REF | asOBJ_NOCOUNT);
2005 engine->RegisterObjectMethod("ManualObject", "void begin(const string&in, RenderOperation, const string&in)", asMETHODPR(Ogre::ManualObject, begin, (const String&, Ogre::RenderOperation::OperationType, const String&), void), asCALL_THISCALL);
2006 engine->RegisterObjectMethod("ManualObject", "void beginUpdate()", asMETHOD(Ogre::ManualObject, beginUpdate), asCALL_THISCALL);
2007 engine->RegisterObjectMethod("ManualObject", "void position(const vector3&in)", asMETHODPR(Ogre::ManualObject, position, (const Ogre::Vector3&), void), asCALL_THISCALL);
2008 engine->RegisterObjectMethod("ManualObject", "void normal(const vector3&in)", asMETHODPR(Ogre::ManualObject, normal, (const Ogre::Vector3&), void), asCALL_THISCALL);
2009 engine->RegisterObjectMethod("ManualObject", "void textureCoord(float, float)", asMETHODPR(Ogre::ManualObject, textureCoord, (float, float), void), asCALL_THISCALL);
2010 engine->RegisterObjectMethod("ManualObject", "void textureCoord(const vector2&in)", asMETHODPR(Ogre::ManualObject, textureCoord, (const Ogre::Vector2&), void), asCALL_THISCALL);
2011 engine->RegisterObjectMethod("ManualObject", "void textureCoord(const vector3&in)", asMETHODPR(Ogre::ManualObject, textureCoord, (const Ogre::Vector3&), void), asCALL_THISCALL);
2012 engine->RegisterObjectMethod("ManualObject", "void colour(const color&in)", asMETHODPR(Ogre::ManualObject, colour, (const Ogre::ColourValue&), void), asCALL_THISCALL);
2013 engine->RegisterObjectMethod("ManualObject", "void index(uint32)", asMETHOD(Ogre::ManualObject, index), asCALL_THISCALL);
2014 engine->RegisterObjectMethod("ManualObject", "void end()", asMETHOD(Ogre::ManualObject, end), asCALL_THISCALL);
2015
2016 engine->RegisterObjectMethod("ManualObject", "uint getCurrentVertexCount()", asMETHOD(Ogre::ManualObject, getCurrentVertexCount), asCALL_THISCALL);
2017 engine->RegisterObjectMethod("ManualObject", "void getCurrentIndexCount()", asMETHOD(Ogre::ManualObject, getCurrentIndexCount), asCALL_THISCALL);
2018
2019 engine->RegisterObjectMethod("ManualObject", "MeshPtr convertToMesh(const string&in name, const string&in group = 'General')", asMETHOD(Ogre::ManualObject, convertToMesh), asCALL_THISCALL);
2020
2021 engine->SetDefaultNamespace("");
2022}
2023
2024static PixelBox PIXELBOX_DUMMY = PixelBox(); // for returning as `const&`
2025
2026void registerOgreHardwarePixelBuffer(AngelScript::asIScriptEngine* engine)
2027{
2028 int r;
2029 r = engine->SetDefaultNamespace("Ogre"); ROR_ASSERT(r >= 0);
2030
2031 r = engine->RegisterObjectBehaviour("HardwarePixelBufferPtr", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(HardwarePixelBufferPtrDefaultConstructor), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2032 r = engine->RegisterObjectBehaviour("HardwarePixelBufferPtr", asBEHAVE_CONSTRUCT, "void f(const HardwarePixelBufferPtr&in)", asFUNCTION(HardwarePixelBufferPtrCopyConstructor), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2033 r = engine->RegisterObjectBehaviour("HardwarePixelBufferPtr", asBEHAVE_DESTRUCT, "void f()", asFUNCTION(HardwarePixelBufferPtrDestructor), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2034 r = engine->RegisterObjectMethod("HardwarePixelBufferPtr", "HardwarePixelBufferPtr& opAssign(const HardwarePixelBufferPtr&in)", asFUNCTION(HardwarePixelBufferPtrAssignOperator), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2035
2036 r = engine->RegisterObjectMethod("HardwarePixelBufferPtr", "const PixelBox& getCurrentLock()", asFUNCTIONPR([](HardwarePixelBufferSharedPtr const& self) -> const PixelBox& {
2037 try { return self->getCurrentLock(); }
2038 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::HardwarePixelBuffer::getCurrentLock()"); return PIXELBOX_DUMMY;}
2039 }, (HardwarePixelBufferSharedPtr const&), const PixelBox&), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2040
2041 r = engine->RegisterObjectMethod("HardwarePixelBufferPtr", "const PixelBox& lock(const box& lockbox, HardwareBufferLockOptions opt)", asFUNCTIONPR([](HardwarePixelBufferSharedPtr const& self, const Box& lockbox, HardwareBuffer::LockOptions opt) -> const PixelBox& {
2042 try { return self->lock(lockbox, opt); }
2043 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::HardwarePixelBuffer::lock()"); return PIXELBOX_DUMMY;}
2044 }, (HardwarePixelBufferSharedPtr const&, const Box&, HardwareBuffer::LockOptions), const PixelBox&), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2045
2046 r = engine->RegisterObjectMethod("HardwarePixelBufferPtr", "uint getWidth()", asFUNCTIONPR([](HardwarePixelBufferSharedPtr const& self) -> asUINT {
2047 try { return self->getWidth(); }
2048 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::HardwarePixelBuffer::getWidth()"); return 0;}
2049 }, (HardwarePixelBufferSharedPtr const&), asUINT), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2050
2051 r = engine->RegisterObjectMethod("HardwarePixelBufferPtr", "uint getHeight()", asFUNCTIONPR([](HardwarePixelBufferSharedPtr const& self) -> asUINT {
2052 try { return self->getHeight(); }
2053 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::HardwarePixelBuffer::getHeight()"); return 0;}
2054 }, (HardwarePixelBufferSharedPtr const&), asUINT), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2055
2056 r = engine->RegisterObjectMethod("HardwarePixelBufferPtr", "void blitFromMemory(const PixelBox& src, const box& dst)", asFUNCTIONPR([](HardwarePixelBufferSharedPtr const& self, const PixelBox& src, const Box& dstBox){
2057 try { self->blitFromMemory(src, dstBox); }
2058 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::HardwarePixelBuffer::blitFromMemory()"); }
2059 }, (HardwarePixelBufferSharedPtr const&, const PixelBox&, const Box&), void), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2060
2061 r = engine->RegisterObjectMethod("HardwarePixelBufferPtr", "void blitToMemory(const box& src, const PixelBox& dst)", asFUNCTIONPR([](HardwarePixelBufferSharedPtr const& self, const Box& srcBox, const PixelBox& dst){
2062 try { self->blitToMemory(srcBox, dst); }
2063 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::HardwarePixelBuffer::blitToMemory()"); }
2064 }, (HardwarePixelBufferSharedPtr const&, const Box&, const PixelBox&), void), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2065
2066 r = engine->RegisterObjectMethod("HardwarePixelBufferPtr", "void unlock()", asFUNCTIONPR([](HardwarePixelBufferSharedPtr const& self){
2067 try { self->unlock(); }
2068 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::HardwarePixelBuffer::unlock()"); }
2069 }, (HardwarePixelBufferSharedPtr const&), void), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2070
2071 engine->SetDefaultNamespace("");
2072}
2073
2074void registerOgrePixelBox(AngelScript::asIScriptEngine* engine)
2075{
2076 int r;
2077 r = engine->SetDefaultNamespace("Ogre"); ROR_ASSERT(r >= 0);
2078
2079 r = engine->RegisterObjectBehaviour("PixelBox", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(PixelBoxDefaultConstructor), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2080 r = engine->RegisterObjectBehaviour("PixelBox", asBEHAVE_CONSTRUCT, "void f(const PixelBox&in)", asFUNCTION(PixelBoxCopyConstructor), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2081 r = engine->RegisterObjectBehaviour("PixelBox", asBEHAVE_DESTRUCT, "void f()", asFUNCTION(PixelBoxDestructor), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2082 r = engine->RegisterObjectMethod("PixelBox", "PixelBox& opAssign(const PixelBox&in)", asFUNCTION(PixelBoxAssignOperator), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2083
2084 r = engine->RegisterObjectMethod("PixelBox", "color getColourAt(uint32 x, uint32 y, uint32 z)", asMETHOD(PixelBox, getColourAt), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2085 r = engine->RegisterObjectMethod("PixelBox", "void setColourAt(const color& c, uint32 x, uint32 y, uint32 z)", asMETHOD(PixelBox, setColourAt), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2086
2087 // Inherited methods must have wrappers - see AngelScript doc
2088 r = engine->RegisterObjectMethod("PixelBox", "uint getWidth()", asFUNCTIONPR([](const Ogre::PixelBox& self) -> asUINT {
2089 return self.getWidth();
2090 }, (const Ogre::PixelBox&), asUINT), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2091
2092 r = engine->RegisterObjectMethod("PixelBox", "uint getHeight()", asFUNCTIONPR([](const Ogre::PixelBox& self) -> asUINT {
2093 return self.getHeight();
2094 }, (const Ogre::PixelBox&), asUINT), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2095
2096 r = engine->RegisterObjectMethod("PixelBox", "uint getDepth()", asFUNCTIONPR([](const Ogre::PixelBox& self) -> asUINT {
2097 return self.getDepth();
2098 } , (const Ogre::PixelBox&), asUINT), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2099
2100 r = engine->SetDefaultNamespace(""); ROR_ASSERT(r >= 0);
2101}
2102
2103void registerOgreImage(AngelScript::asIScriptEngine* engine)
2104{
2105 int r;
2106 r = engine->SetDefaultNamespace("Ogre"); ROR_ASSERT(r >= 0);
2107
2108 r = engine->RegisterObjectBehaviour("Image", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(ImageDefaultConstructor), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2109 r = engine->RegisterObjectBehaviour("Image", asBEHAVE_CONSTRUCT, "void f(const Image&in)", asFUNCTION(ImageCopyConstructor), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2110 r = engine->RegisterObjectBehaviour("Image", asBEHAVE_DESTRUCT, "void f()", asFUNCTION(ImageDestructor), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2111 r = engine->RegisterObjectMethod("Image", "Image& opAssign(const Image&in)", asFUNCTION(ImageAssignOperator), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2112
2113 r = engine->RegisterObjectMethod("Image", "color getColourAt(uint32 x, uint32 y, uint32 z)", asMETHOD(Image, getColourAt), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2114 r = engine->RegisterObjectMethod("Image", "void setColourAt(const color& c, uint32 x, uint32 y, uint32 z)", asMETHOD(Image, setColourAt), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2115 r = engine->RegisterObjectMethod("Image", "Image& flipAroundX()", asMETHOD(Ogre::Image, flipAroundX), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2116 r = engine->RegisterObjectMethod("Image", "Image& flipAroundY()", asMETHOD(Ogre::Image, flipAroundY), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2117 r = engine->RegisterObjectMethod("Image", "uint getNumMipmaps()", asMETHOD(Ogre::Image, getNumMipmaps), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2118 r = engine->RegisterObjectMethod("Image", "uint getNumFaces()", asMETHOD(Ogre::Image, getNumFaces), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2119 r = engine->RegisterObjectMethod("Image", "PixelBox getPixelBox(uint face, uint mipmap)", asMETHOD(Ogre::Image, getPixelBox), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2120 r = engine->RegisterObjectMethod("Image", "uint getSize()", asMETHOD(Ogre::Image, getSize), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2121 r = engine->RegisterObjectMethod("Image", "uint getWidth()", asMETHOD(Ogre::Image, getWidth), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2122 r = engine->RegisterObjectMethod("Image", "uint getHeight()", asMETHOD(Ogre::Image, getHeight), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2123 r = engine->RegisterObjectMethod("Image", "void resize(uint16 width, uint16 height, ImageFilter filter)", asMETHOD(Ogre::Image, resize), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2124
2125 r = engine->SetDefaultNamespace(""); ROR_ASSERT(r >= 0);
2126}
2127
2128void registerOgreSubMesh(AngelScript::asIScriptEngine* engine)
2129{
2130 engine->SetDefaultNamespace("Ogre");
2131
2132 // Register the SubMesh class
2133 engine->RegisterObjectMethod("SubMesh", "const string& getMaterialName()", asMETHOD(Ogre::SubMesh, getMaterialName), asCALL_THISCALL);
2134 engine->RegisterObjectMethod("SubMesh", "void setMaterialName(const string&in, const string&in)", asMETHOD(Ogre::SubMesh, setMaterialName), asCALL_THISCALL);
2135
2136 // > Vertex buffer
2137 engine->RegisterObjectMethod("SubMesh", "array<vector3>@ __getVertexPositions()", asFUNCTION(SubMesh__getVertexPositions), asCALL_CDECL_OBJFIRST);
2138 engine->RegisterObjectMethod("SubMesh", "array<vector2>@ __getVertexTexcoords(uint index)", asFUNCTION(SubMesh__getVertexTexcoords), asCALL_CDECL_OBJFIRST);
2139
2140 // > Index buffer
2141 engine->RegisterObjectMethod("SubMesh", "array<uint16>@ __getIndexBuffer16bit()", asFUNCTIONPR([](Ogre::SubMesh* self) {
2142 const Ogre::HardwareIndexBuffer::IndexType desiredType = Ogre::HardwareIndexBuffer::IndexType::IT_16BIT;
2143 if (SubMesh__getIndexType(self) == desiredType) { return SubMesh__getIndexBufferHelper(self, desiredType); }
2144 else { App::GetScriptEngine()->SLOG("SubMesh::__getIndexBuffer16bit(): The buffer format isn't 16bit."); return (CScriptArray*)nullptr; }
2145 }, (Ogre::SubMesh*), CScriptArray*), asCALL_CDECL_OBJFIRST);
2146 engine->RegisterObjectMethod("SubMesh", "array<uint>@ __getIndexBuffer32bit()", asFUNCTIONPR([](Ogre::SubMesh* self) {
2147 const Ogre::HardwareIndexBuffer::IndexType desiredType = Ogre::HardwareIndexBuffer::IndexType::IT_32BIT;
2148 if (SubMesh__getIndexType(self) == desiredType) { return SubMesh__getIndexBufferHelper(self, desiredType); }
2149 else { App::GetScriptEngine()->SLOG("SubMesh::__getIndexBuffer32bit(): The buffer format isn't 32bit."); return (CScriptArray*)nullptr; }
2150 }, (Ogre::SubMesh*), CScriptArray*), asCALL_CDECL_OBJFIRST);
2151 engine->RegisterObjectMethod("SubMesh", "IndexType __getIndexType()", asFUNCTION(SubMesh__getIndexType), asCALL_CDECL_OBJFIRST);
2152
2153 engine->SetDefaultNamespace("");
2154}
2155
2156void registerOgreMesh(AngelScript::asIScriptEngine* engine)
2157{
2158 int r;
2159 r = engine->SetDefaultNamespace("Ogre"); ROR_ASSERT(r >= 0);
2160
2161 r = engine->RegisterObjectBehaviour("MeshPtr", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(MeshPtrDefaultConstructor), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2162 r = engine->RegisterObjectBehaviour("MeshPtr", asBEHAVE_CONSTRUCT, "void f(const MeshPtr&in)", asFUNCTION(MeshPtrCopyConstructor), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2163 r = engine->RegisterObjectBehaviour("MeshPtr", asBEHAVE_DESTRUCT, "void f()", asFUNCTION(MeshPtrDestructor), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2164 r = engine->RegisterObjectMethod("MeshPtr", "MeshPtr& opAssign(const MeshPtr&in)", asFUNCTION(MeshPtrAssignOperator), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2165 r = engine->RegisterObjectMethod("MeshPtr", "bool isNull()", asFUNCTION(MeshPtrIsNull), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2166
2167 // Wrappers are inevitable, see https://www.gamedev.net/forums/topic/540419-custom-smartpointers-and-angelscript-/
2168 r = engine->RegisterObjectMethod("MeshPtr", "SubMeshArray@ getSubMeshes()", asFUNCTION(MeshPtrGetSubmeshes), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2169 r = engine->RegisterObjectMethod("MeshPtr", "string getName()", asFUNCTIONPR([](MeshPtr const& self) {
2170 return self->getName();
2171 }, (MeshPtr const&), Ogre::String), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2172 r = engine->RegisterObjectMethod("MeshPtr", "SubMesh@ createSubMesh(const string&in name)", asFUNCTIONPR([](MeshPtr const& self, const Ogre::String& name) {
2173 return self->createSubMesh(name);
2174 }, (MeshPtr const&, const Ogre::String&), Ogre::SubMesh*), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2175 r = engine->RegisterObjectMethod("MeshPtr", "void destroySubMesh(const string&in name)", asFUNCTIONPR([](MeshPtr const& self, const Ogre::String& name) {
2176 self->createSubMesh(name);
2177 }, (MeshPtr const&, const Ogre::String&), void), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2178
2179 r = engine->SetDefaultNamespace(""); ROR_ASSERT(r >= 0);
2180}
2181
2182void registerOgreMeshManager(AngelScript::asIScriptEngine * engine)
2183{
2184 int r;
2185 r = engine->SetDefaultNamespace("Ogre"); ROR_ASSERT(r >= 0);
2186
2187 r = engine->RegisterObjectMethod("MeshManager", "MeshPtr load(const string&in file, const string&in rg)", asFUNCTIONPR([](MeshManager& mgr, std::string const& file, std::string const& rg){
2188 try { return mgr.load(file, rg); }
2189 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::MeshManager::load()"); return Ogre::MeshPtr();}
2190 }, (MeshManager& mgr, std::string const& file, std::string const& rg), MeshPtr), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2191
2192 r = engine->RegisterObjectMethod("MeshManager", "void remove(const string&in file, const string&in rg)", asFUNCTIONPR([](MeshManager& mgr, std::string const& file, std::string const& rg){
2193 try { mgr.remove(file, rg); }
2194 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::MeshManager::remove()"); }
2195 }, (MeshManager& mgr, std::string const& file, std::string const& rg), void), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2196
2197 r = engine->SetDefaultNamespace("Ogre::MeshManager"); ROR_ASSERT(r >= 0);
2198 r = engine->RegisterGlobalFunction("MeshManager& getSingleton()", asFUNCTION(MeshManager::getSingleton), asCALL_CDECL); ROR_ASSERT(r >= 0);
2199
2200 r = engine->SetDefaultNamespace(""); ROR_ASSERT(r >= 0);
2201}
2202
2203void registerOgreMaterialManager(AngelScript::asIScriptEngine * engine)
2204{
2205 int r;
2206 r = engine->SetDefaultNamespace("Ogre"); ROR_ASSERT(r >= 0);
2207
2208 r = engine->RegisterObjectMethod("MaterialManager", "MaterialPtr getByName(const string&in file, const string&in rg)", asFUNCTIONPR([](MaterialManager& mgr, std::string const& file, std::string const& rg){
2209 try { return mgr.getByName(file, rg); }
2210 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::MaterialManager::getByName()"); return Ogre::MaterialPtr();}
2211 }, (MaterialManager& mgr, std::string const& file, std::string const& rg), MaterialPtr), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2212
2213 r = engine->RegisterObjectMethod("MaterialManager", "void create(const string&in file, const string&in rg)", asFUNCTIONPR([](MaterialManager& mgr, std::string const& file, std::string const& rg){
2214 try { return mgr.create(file, rg); }
2215 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::MaterialManager::create()"); return Ogre::MaterialPtr(); }
2216 }, (MaterialManager& mgr, std::string const& file, std::string const& rg), MaterialPtr), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2217
2218 r = engine->SetDefaultNamespace("Ogre::MaterialManager"); ROR_ASSERT(r >= 0);
2219 r = engine->RegisterGlobalFunction("MaterialManager& getSingleton()", asFUNCTION(MaterialManager::getSingleton), asCALL_CDECL); ROR_ASSERT(r >= 0);
2220
2221 r = engine->SetDefaultNamespace(""); ROR_ASSERT(r >= 0);
2222}
2223
2224void registerOgreMaterial(AngelScript::asIScriptEngine* engine)
2225{
2226 int r;
2227 r = engine->SetDefaultNamespace("Ogre"); ROR_ASSERT(r >= 0);
2228
2229 r = engine->RegisterObjectBehaviour("MaterialPtr", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(MaterialPtrDefaultConstructor), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2230 r = engine->RegisterObjectBehaviour("MaterialPtr", asBEHAVE_CONSTRUCT, "void f(const MaterialPtr&in)", asFUNCTION(MaterialPtrCopyConstructor), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2231 r = engine->RegisterObjectBehaviour("MaterialPtr", asBEHAVE_DESTRUCT, "void f()", asFUNCTION(MaterialPtrDestructor), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2232 r = engine->RegisterObjectMethod("MaterialPtr", "MaterialPtr& opAssign(const MaterialPtr&in)", asFUNCTION(MaterialPtrAssignOperator), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2233 r = engine->RegisterObjectMethod("MaterialPtr", "bool isNull()", asFUNCTION(MaterialPtrIsNull), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2234
2235 // Wrappers are inevitable, see https://www.gamedev.net/forums/topic/540419-custom-smartpointers-and-angelscript-/
2236 r = engine->RegisterObjectMethod("MaterialPtr", "TechniqueArray@ getTechniques()", asFUNCTION(MaterialPtrGetTechniques), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2237
2238 r = engine->RegisterObjectMethod("MaterialPtr", "string getName()", asFUNCTIONPR([](MaterialPtr const& self) {
2239 return self->getName();
2240 }, (MaterialPtr const&), Ogre::String), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2241
2242 r = engine->RegisterObjectMethod("MaterialPtr", "Technique@ createTechnique()", asFUNCTIONPR([](MaterialPtr const& self) {
2243 try { return self->createTechnique(); }
2244 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::Material::createTechnique()"); return (Ogre::Technique*)nullptr;}
2245 }, (MaterialPtr const&), Ogre::Technique*), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2246
2247 r = engine->RegisterObjectMethod("MaterialPtr", "void removeTechnique()", asFUNCTIONPR([](MaterialPtr const& self, uint16_t index) {
2248 try { self->removeTechnique(index); }
2249 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::Material::removeTechnique()"); }
2250 }, (MaterialPtr const&, uint16_t), void), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2251
2252 r = engine->SetDefaultNamespace(""); ROR_ASSERT(r >= 0);
2253}
2254
2255void registerOgreTechnique(AngelScript::asIScriptEngine* engine)
2256{
2257 engine->SetDefaultNamespace("Ogre");
2258
2259 engine->RegisterObjectMethod("Technique", "PassArray @getPasses()", asFUNCTION(TechniqueGetPasses), asCALL_CDECL_OBJFIRST);
2260 engine->RegisterObjectMethod("Technique", "Pass @createPass()", asMETHOD(Ogre::Technique, createPass), asCALL_THISCALL);
2261 engine->RegisterObjectMethod("Technique", "void removePass(uint16 index)", asMETHOD(Ogre::Technique, removePass), asCALL_THISCALL);
2262 engine->RegisterObjectMethod("Technique", "const string& getName() const", asMETHOD(Ogre::Technique, getName), asCALL_THISCALL);
2263
2264 engine->SetDefaultNamespace("");
2265}
2266
2267void registerOgrePass(AngelScript::asIScriptEngine* engine)
2268{
2269 int r = 0;
2270 engine->SetDefaultNamespace("Ogre");
2271
2272 engine->RegisterObjectMethod("Pass", "const string& getName() const", asMETHOD(Ogre::Pass, getName), asCALL_THISCALL);
2273 engine->RegisterObjectMethod("Pass", "TextureUnitStateArray @getTextureUnitStates()", asFUNCTION(PassGetTextureUnitStates), asCALL_CDECL_OBJFIRST);
2274 engine->RegisterObjectMethod("Pass", "void removeTextureUnitState(uint16 index)", asMETHOD(Ogre::Pass, removeTextureUnitState), asCALL_THISCALL);
2275
2276 r = engine->RegisterObjectMethod("Pass", "GpuProgramParametersPtr getVertexProgramParameters()", asFUNCTIONPR([](Ogre::Pass* self) -> Ogre::GpuProgramParametersPtr {
2277 try { return self->getVertexProgramParameters(); }
2278 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::Pass::getVertexProgramParameters()"); return Ogre::GpuProgramParametersPtr(); }
2279 }, (Ogre::Pass*), Ogre::GpuProgramParametersPtr), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2280
2281 r = engine->RegisterObjectMethod("Pass", "GpuProgramParametersPtr getFragmentProgramParameters()", asFUNCTIONPR([](Ogre::Pass* self) -> Ogre::GpuProgramParametersPtr {
2282 try { return self->getFragmentProgramParameters(); }
2283 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::Pass::getFragmentProgramParameters()"); return Ogre::GpuProgramParametersPtr(); }
2284 }, (Ogre::Pass*), Ogre::GpuProgramParametersPtr), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2285
2286 r = engine->RegisterObjectMethod("Pass", "GpuProgramParametersPtr getGeometryProgramParameters()", asFUNCTIONPR([](Ogre::Pass* self) -> Ogre::GpuProgramParametersPtr {
2287 try { return self->getGeometryProgramParameters(); }
2288 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::Pass::getGeometryProgramParameters()"); return Ogre::GpuProgramParametersPtr(); }
2289 }, (Ogre::Pass*), Ogre::GpuProgramParametersPtr), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2290
2291 r = engine->RegisterObjectMethod("Pass", "GpuProgramParametersPtr getTessellationHullProgramParameters()", asFUNCTIONPR([](Ogre::Pass* self) -> Ogre::GpuProgramParametersPtr {
2292 try { return self->getTessellationHullProgramParameters(); }
2293 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::Pass::getTessellationHullProgramParameters()"); return Ogre::GpuProgramParametersPtr(); }
2294 }, (Ogre::Pass*), Ogre::GpuProgramParametersPtr), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2295
2296 r = engine->RegisterObjectMethod("Pass", "GpuProgramParametersPtr getTessellationDomainProgramParameters()", asFUNCTIONPR([](Ogre::Pass* self) -> Ogre::GpuProgramParametersPtr {
2297 try { return self->getTessellationDomainProgramParameters(); }
2298 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::Pass::getTessellationDomainProgramParameters()"); return Ogre::GpuProgramParametersPtr(); }
2299 }, (Ogre::Pass*), Ogre::GpuProgramParametersPtr), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2300
2301 r = engine->RegisterObjectMethod("Pass", "GpuProgramParametersPtr getComputeProgramParameters()", asFUNCTIONPR([](Ogre::Pass* self) -> Ogre::GpuProgramParametersPtr {
2302 try { return self->getComputeProgramParameters(); }
2303 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::Pass::getComputeProgramParameters()"); return Ogre::GpuProgramParametersPtr(); }
2304 }, (Ogre::Pass*), Ogre::GpuProgramParametersPtr), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2305
2306 engine->RegisterObjectMethod("Pass", "void setVertexProgramParameters(GpuProgramParametersPtr)", asMETHOD(Ogre::Pass, setVertexProgramParameters), asCALL_THISCALL);
2307 engine->RegisterObjectMethod("Pass", "void setFragmentProgramParameters(GpuProgramParametersPtr)", asMETHOD(Ogre::Pass, setFragmentProgramParameters), asCALL_THISCALL);
2308 engine->RegisterObjectMethod("Pass", "void setGeometryProgramParameters(GpuProgramParametersPtr)", asMETHOD(Ogre::Pass, setGeometryProgramParameters), asCALL_THISCALL);
2309 engine->RegisterObjectMethod("Pass", "void setTessellationHullProgramParameters(GpuProgramParametersPtr)", asMETHOD(Ogre::Pass, setTessellationHullProgramParameters), asCALL_THISCALL);
2310 engine->RegisterObjectMethod("Pass", "void setTessellationDomainProgramParameters(GpuProgramParametersPtr)", asMETHOD(Ogre::Pass, setTessellationDomainProgramParameters), asCALL_THISCALL);
2311 engine->RegisterObjectMethod("Pass", "void setComputeProgramParameters(GpuProgramParametersPtr)", asMETHOD(Ogre::Pass, setComputeProgramParameters), asCALL_THISCALL);
2312
2313 engine->SetDefaultNamespace("");
2314}
2315
2316void registerOgreTextureUnitState(AngelScript::asIScriptEngine* engine)
2317{
2318 engine->SetDefaultNamespace("Ogre");
2319
2320 engine->RegisterObjectMethod("TextureUnitState", "const string& getName() const", asMETHOD(Ogre::TextureUnitState, getName), asCALL_THISCALL);
2321 engine->RegisterObjectMethod("TextureUnitState", "void setTexture(const TexturePtr&in)", asMETHODPR(Ogre::TextureUnitState, setTexture, (const TexturePtr&), void), asCALL_THISCALL);
2322 engine->RegisterObjectMethod("TextureUnitState", "const TexturePtr& _getTexturePtr() const", asMETHODPR(Ogre::TextureUnitState, _getTexturePtr, (void) const, const TexturePtr&), asCALL_THISCALL);
2323
2324 engine->SetDefaultNamespace("");
2325}
2326
2327void registerOgreTimer(AngelScript::asIScriptEngine* engine)
2328{
2329 int r;
2330 r = engine->SetDefaultNamespace("Ogre"); ROR_ASSERT(r >= 0);
2331
2332 r = engine->RegisterObjectBehaviour("Timer", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(TimerDefaultConstructor), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2333 r = engine->RegisterObjectBehaviour("Timer", asBEHAVE_CONSTRUCT, "void f(const Timer&in)", asFUNCTION(TimerCopyConstructor), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2334 r = engine->RegisterObjectBehaviour("Timer", asBEHAVE_DESTRUCT, "void f()", asFUNCTION(TimerDefaultDestructor), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2335 r = engine->RegisterObjectMethod("Timer", "Timer& opAssign(const Timer&in)", asFUNCTION(TimerAssignOperator), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2336
2337 r = engine->RegisterObjectMethod("Timer", "void reset()", asMETHOD(Timer, reset), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2338 r = engine->RegisterObjectMethod("Timer", "uint getMilliseconds()", asMETHOD(Timer, getMilliseconds), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2339 r = engine->RegisterObjectMethod("Timer", "uint getMicroseconds()", asMETHOD(Timer, getMicroseconds), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2340 r = engine->RegisterObjectMethod("Timer", "uint getMillisecondsCPU()", asMETHOD(Timer, getMillisecondsCPU), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2341 r = engine->RegisterObjectMethod("Timer", "uint getMicrosecondsCPU()", asMETHOD(Timer, getMicrosecondsCPU), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2342
2343 r = engine->SetDefaultNamespace(""); ROR_ASSERT(r >= 0);
2344}
2345
2346void registerOgreGpuProgramParameters(AngelScript::asIScriptEngine* engine)
2347{
2348 int r;
2349
2350 r = engine->SetDefaultNamespace("Ogre"); ROR_ASSERT(r >= 0);
2351
2352 // Note: The `*SharedPtr` is a deprecated alias of `*Ptr` in OGRE 14, but it's not yet present in the version we use.
2353 r = engine->RegisterObjectBehaviour("GpuProgramParametersPtr", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(GpuProgramParametersPtrDefaultConstructor), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2354 r = engine->RegisterObjectBehaviour("GpuProgramParametersPtr", asBEHAVE_CONSTRUCT, "void f(const GpuProgramParametersPtr&in)", asFUNCTION(GpuProgramParametersPtrCopyConstructor), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2355 r = engine->RegisterObjectBehaviour("GpuProgramParametersPtr", asBEHAVE_DESTRUCT, "void f()", asFUNCTION(GpuProgramParametersPtrDestructor), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2356 r = engine->RegisterObjectMethod("GpuProgramParametersPtr", "GpuProgramParametersPtr& opAssign(const GpuProgramParametersPtr&in)", asFUNCTION(GpuProgramParametersPtrAssignOperator), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2357 r = engine->RegisterObjectMethod("GpuProgramParametersPtr", "bool isNull()", asFUNCTION(GpuProgramParametersPtrIsNull), asCALL_CDECL_OBJLAST); ROR_ASSERT(r >= 0);
2358
2359 // Wrappers are inevitable, see https://www.gamedev.net/forums/topic/540419-custom-smartpointers-and-angelscript-/
2360
2361 // > setConstant (scalar)
2362 r = engine->RegisterObjectMethod("GpuProgramParametersPtr", "void setConstant(uint index, float val)", asFUNCTIONPR([](GpuProgramParametersPtr const& self, asUINT index, float val) {
2363 try { self->setConstant(index, val); }
2364 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::GpuProgramParameters::setConstant(uint, float)"); }
2365 }, (GpuProgramParametersPtr const&, asUINT, float), void), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2366 r = engine->RegisterObjectMethod("GpuProgramParametersPtr", "void setConstant(uint index, const vector3& val)", asFUNCTIONPR([](GpuProgramParametersPtr const& self, asUINT index, const Ogre::Vector3& val) {
2367 try { self->setConstant(index, val); }
2368 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::GpuProgramParameters::setConstant(uint, vector3)"); }
2369 }, (GpuProgramParametersPtr const&, asUINT, const Ogre::Vector3&), void), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2370 r = engine->RegisterObjectMethod("GpuProgramParametersPtr", "void setConstant(uint index, const vector2& val)", asFUNCTIONPR([](GpuProgramParametersPtr const& self, asUINT index, const Ogre::Vector2& val) {
2371 try { self->setConstant(index, val); }
2372 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::GpuProgramParameters::setConstant(uint, vector2)"); }
2373 }, (GpuProgramParametersPtr const&, asUINT, const Ogre::Vector2&), void), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2374 r = engine->RegisterObjectMethod("GpuProgramParametersPtr", "void setConstant(uint index, const color& val)", asFUNCTIONPR([](GpuProgramParametersPtr const& self, asUINT index, const Ogre::ColourValue& val) {
2375 try { self->setConstant(index, val); }
2376 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::GpuProgramParameters::setConstant(uint, color)"); }
2377 }, (GpuProgramParametersPtr const&, asUINT, const Ogre::ColourValue&), void), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2378
2379 // > setConstant (vector)
2380 r = engine->RegisterObjectMethod("GpuProgramParametersPtr", "void setConstant(uint index, const array<float>@ vals)", asFUNCTIONPR([](GpuProgramParametersPtr const& self, asUINT index, CScriptArray* vals) {
2381 ROR_ASSERT(vals->GetElementTypeId() == App::GetScriptEngine()->getEngine()->GetTypeIdByDecl("float"));
2382 try { self->setConstant(index, (float*)vals->GetBuffer(), vals->GetSize()); }
2383 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::GpuProgramParameters::setConstant(uint, array<float>)"); }
2384 }, (GpuProgramParametersPtr const&, asUINT, CScriptArray*), void), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2385 r = engine->RegisterObjectMethod("GpuProgramParametersPtr", "void setConstant(uint index, const array<vector3>@ vals)", asFUNCTIONPR([](GpuProgramParametersPtr const& self, asUINT index, CScriptArray* vals) {
2386 ROR_ASSERT(vals->GetElementTypeId() == App::GetScriptEngine()->getEngine()->GetTypeIdByDecl("vector3"));
2387 try { self->setConstant(index, (float*)vals->GetBuffer(), vals->GetSize()*3); }
2388 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::GpuProgramParameters::setConstant(uint, array<vector3>)"); }
2389 }, (GpuProgramParametersPtr const&, asUINT, CScriptArray*), void), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2390 r = engine->RegisterObjectMethod("GpuProgramParametersPtr", "void setConstant(uint index, const array<vector2>@ vals)", asFUNCTIONPR([](GpuProgramParametersPtr const& self, asUINT index, CScriptArray* vals) {
2391 ROR_ASSERT(vals->GetElementTypeId() == App::GetScriptEngine()->getEngine()->GetTypeIdByDecl("vector2"));
2392 try { self->setConstant(index, (float*)vals->GetBuffer(), vals->GetSize()*2); }
2393 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::GpuProgramParameters::setConstant(uint, array<vector2>)"); }
2394 }, (GpuProgramParametersPtr const&, asUINT, CScriptArray*), void), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2395 r = engine->RegisterObjectMethod("GpuProgramParametersPtr", "void setConstant(uint index, const array<color>@ vals)", asFUNCTIONPR([](GpuProgramParametersPtr const& self, asUINT index, CScriptArray* vals) {
2396 ROR_ASSERT(vals->GetElementTypeId() == App::GetScriptEngine()->getEngine()->GetTypeIdByDecl("color"));
2397 try { self->setConstant(index, (float*)vals->GetBuffer(), vals->GetSize()*4); }
2398 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::GpuProgramParameters::setConstant(uint, array<color>)"); }
2399 }, (GpuProgramParametersPtr const&, asUINT, CScriptArray*), void), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2400
2401 // > setNamedConstant (scalar)
2402 r = engine->RegisterObjectMethod("GpuProgramParametersPtr", "void setNamedConstant(const string&in name, float val)", asFUNCTIONPR([](GpuProgramParametersPtr const& self, const std::string& name, float val) {
2403 try { self->setNamedConstant(name, val); }
2404 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::GpuProgramParameters::setNamedConstant(string, float)"); }
2405 }, (GpuProgramParametersPtr const&, const std::string&, float), void), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2406 r = engine->RegisterObjectMethod("GpuProgramParametersPtr", "void setNamedConstant(const string&in name, const vector3& val)", asFUNCTIONPR([](GpuProgramParametersPtr const& self, const std::string& name, const Ogre::Vector3& val) {
2407 try { self->setNamedConstant(name, val); }
2408 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::GpuProgramParameters::setNamedConstant(string, vector3)"); }
2409 }, (GpuProgramParametersPtr const&, const std::string&, const Ogre::Vector3&), void), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2410 r = engine->RegisterObjectMethod("GpuProgramParametersPtr", "void setNamedConstant(const string&in name, const vector2& val)", asFUNCTIONPR([](GpuProgramParametersPtr const& self, const std::string& name, const Ogre::Vector2& val) {
2411 try { self->setNamedConstant(name, val); }
2412 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::GpuProgramParameters::setNamedConstant(string, vector2)"); }
2413 }, (GpuProgramParametersPtr const&, const std::string&, const Ogre::Vector2&), void), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2414 r = engine->RegisterObjectMethod("GpuProgramParametersPtr", "void setNamedConstant(const string&in name, const color& val)", asFUNCTIONPR([](GpuProgramParametersPtr const& self, const std::string& name, const Ogre::ColourValue& val) {
2415 try { self->setNamedConstant(name, val); }
2416 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::GpuProgramParameters::setNamedConstant(string, color)"); }
2417 }, (GpuProgramParametersPtr const&, const std::string&, const Ogre::ColourValue&), void), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2418
2419 // > setNamedConstant (vector)
2420 r = engine->RegisterObjectMethod("GpuProgramParametersPtr", "void setNamedConstant(const string&in name, const array<float>@ vals)", asFUNCTIONPR([](GpuProgramParametersPtr const& self, const std::string& name, CScriptArray* vals) {
2421 ROR_ASSERT(vals->GetElementTypeId() == App::GetScriptEngine()->getEngine()->GetTypeIdByDecl("float"));
2422 try { self->setNamedConstant(name, (float*)vals->GetBuffer(), vals->GetSize()); }
2423 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::GpuProgramParameters::setNamedConstant(string, array<float>)"); }
2424 }, (GpuProgramParametersPtr const&, const std::string&, CScriptArray*), void), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2425 r = engine->RegisterObjectMethod("GpuProgramParametersPtr", "void setNamedConstant(const string&in name, const array<vector3>@ vals)", asFUNCTIONPR([](GpuProgramParametersPtr const& self, const std::string& name, CScriptArray* vals) {
2426 ROR_ASSERT(vals->GetElementTypeId() == App::GetScriptEngine()->getEngine()->GetTypeIdByDecl("vector3"));
2427 try { self->setNamedConstant(name, (float*)vals->GetBuffer(), vals->GetSize()*3); }
2428 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::GpuProgramParameters::setNamedConstant(string, array<vector3>)"); }
2429 }, (GpuProgramParametersPtr const&, const std::string&, CScriptArray*), void), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2430 r = engine->RegisterObjectMethod("GpuProgramParametersPtr", "void setNamedConstant(const string&in name, const array<vector2>@ vals)", asFUNCTIONPR([](GpuProgramParametersPtr const& self, const std::string& name, CScriptArray* vals) {
2431 ROR_ASSERT(vals->GetElementTypeId() == App::GetScriptEngine()->getEngine()->GetTypeIdByDecl("vector2"));
2432 try { self->setNamedConstant(name, (float*)vals->GetBuffer(), vals->GetSize()*2); }
2433 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::GpuProgramParameters::setNamedConstant(string, array<vector2>)"); }
2434 }, (GpuProgramParametersPtr const&, const std::string&, CScriptArray*), void), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2435 r = engine->RegisterObjectMethod("GpuProgramParametersPtr", "void setNamedConstant(const string&in name, const array<color>@ vals)", asFUNCTIONPR([](GpuProgramParametersPtr const& self, const std::string& name, CScriptArray* vals) {
2436 ROR_ASSERT(vals->GetElementTypeId() == App::GetScriptEngine()->getEngine()->GetTypeIdByDecl("color"));
2437 try { self->setNamedConstant(name, (float*)vals->GetBuffer(), vals->GetSize()*4); }
2438 catch (...) { App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::GpuProgramParameters::setNamedConstant(string, array<color>)"); }
2439 }, (GpuProgramParametersPtr const&, const std::string&, CScriptArray*), void), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2440
2441 r = engine->RegisterObjectMethod("GpuProgramParametersPtr", "array<string>@ __getNamedConstants()", asFUNCTIONPR([](GpuProgramParametersPtr const& self) -> CScriptArray* {
2442 try {
2443 std::vector<std::string> keys;
2444 const Ogre::GpuNamedConstants& namedConstants = self->getConstantDefinitions();
2445 for (auto& pair : namedConstants.map)
2446 keys.push_back(pair.first);
2447 return RoR::VectorToScriptArray(keys, "string");
2448 }
2449 catch (...) {
2450 App::GetScriptEngine()->forwardExceptionAsScriptEvent("Ogre::GpuProgramParameters::__getNamedConstants()");
2451 return nullptr; }
2452 }, (GpuProgramParametersPtr const&), CScriptArray*), asCALL_CDECL_OBJFIRST); ROR_ASSERT(r >= 0);
2453
2454
2455 r = engine->SetDefaultNamespace(""); ROR_ASSERT(r >= 0);
2456}
2457
2458void registerOgreLight(AngelScript::asIScriptEngine* engine)
2459{
2460 int r;
2461 r = engine->SetDefaultNamespace("Ogre"); ROR_ASSERT(r >= 0);
2462
2463 // Type control
2464 r = engine->RegisterObjectMethod("Light", "void setType(LightTypes type)", asMETHOD(Ogre::Light, setType), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2465 r = engine->RegisterObjectMethod("Light", "LightTypes getType() const", asMETHOD(Ogre::Light, getType), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2466
2467 // Color
2468 r = engine->RegisterObjectMethod("Light", "void setDiffuseColour(float r, float g, float b)", asMETHODPR(Ogre::Light, setDiffuseColour, (float, float, float), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2469 r = engine->RegisterObjectMethod("Light", "void setDiffuseColour(const color&in)", asMETHODPR(Ogre::Light, setDiffuseColour, (const Ogre::ColourValue&), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2470 r = engine->RegisterObjectMethod("Light", "const color& getDiffuseColour() const", asMETHOD(Ogre::Light, getDiffuseColour), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2471
2472 r = engine->RegisterObjectMethod("Light", "void setSpecularColour(float r, float g, float b)", asMETHODPR(Ogre::Light, setSpecularColour, (float, float, float), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2473 r = engine->RegisterObjectMethod("Light", "void setSpecularColour(const color&in)", asMETHODPR(Ogre::Light, setSpecularColour, (const Ogre::ColourValue&), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2474 r = engine->RegisterObjectMethod("Light", "const color& getSpecularColour() const", asMETHOD(Ogre::Light, getSpecularColour), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2475
2476 // Attenuation
2477 r = engine->RegisterObjectMethod("Light", "void setAttenuation(float range, float constant, float linear, float quadratic)", asMETHOD(Ogre::Light, setAttenuation), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2478 r = engine->RegisterObjectMethod("Light", "float getAttenuationRange() const", asMETHOD(Ogre::Light, getAttenuationRange), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2479 r = engine->RegisterObjectMethod("Light", "float getAttenuationConstant() const", asMETHOD(Ogre::Light, getAttenuationConstant), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2480 r = engine->RegisterObjectMethod("Light", "float getAttenuationLinear() const", asMETHOD(Ogre::Light, getAttenuationLinear), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2481 r = engine->RegisterObjectMethod("Light", "float getAttenuationQuadric() const", asMETHOD(Ogre::Light, getAttenuationQuadric), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2482
2483 // Position & Direction
2484 r = engine->RegisterObjectMethod("Light", "void setPosition(float x, float y, float z)", asMETHODPR(Ogre::Light, setPosition, (float, float, float), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2485 r = engine->RegisterObjectMethod("Light", "void setPosition(const vector3&in)", asMETHODPR(Ogre::Light, setPosition, (const Ogre::Vector3&), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2486 r = engine->RegisterObjectMethod("Light", "const vector3& getPosition() const", asMETHOD(Ogre::Light, getPosition), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2487
2488 r = engine->RegisterObjectMethod("Light", "void setDirection(float x, float y, float z)", asMETHODPR(Ogre::Light, setDirection, (float, float, float), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2489 r = engine->RegisterObjectMethod("Light", "void setDirection(const vector3&in)", asMETHODPR(Ogre::Light, setDirection, (const Ogre::Vector3&), void), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2490 r = engine->RegisterObjectMethod("Light", "const vector3& getDirection() const", asMETHOD(Ogre::Light, getDirection), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2491
2492 // Spotlight parameters
2493 r = engine->RegisterObjectMethod("Light", "void setSpotlightRange(const radian&in innerAngle, const radian&in outerAngle, float falloff = 1.0f)", asMETHOD(Ogre::Light, setSpotlightRange), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2494 r = engine->RegisterObjectMethod("Light", "const radian& getSpotlightInnerAngle() const", asMETHOD(Ogre::Light, getSpotlightInnerAngle), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2495 r = engine->RegisterObjectMethod("Light", "const radian& getSpotlightOuterAngle() const", asMETHOD(Ogre::Light, getSpotlightOuterAngle), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2496 r = engine->RegisterObjectMethod("Light", "float getSpotlightFalloff() const", asMETHOD(Ogre::Light, getSpotlightFalloff), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2497
2498 // Power scale
2499 r = engine->RegisterObjectMethod("Light", "void setPowerScale(float power)", asMETHOD(Ogre::Light, setPowerScale), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2500 r = engine->RegisterObjectMethod("Light", "float getPowerScale() const", asMETHOD(Ogre::Light, getPowerScale), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2501
2502 // Derived direction (useful for attached lights)
2503 r = engine->RegisterObjectMethod("Light", "const vector3& getDerivedPosition() const", asMETHOD(Ogre::Light, getDerivedPosition), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2504 r = engine->RegisterObjectMethod("Light", "const vector3& getDerivedDirection() const", asMETHOD(Ogre::Light, getDerivedDirection), asCALL_THISCALL); ROR_ASSERT(r >= 0);
2505
2506 // Inherit MovableObject methods
2507 registerOgreMovableObjectBase<Ogre::Light>(engine, "Light");
2508
2509 r = engine->SetDefaultNamespace(""); ROR_ASSERT(r >= 0);
2510}
float normalise()
radian getRoll(bool reprojectAxis=true) const
bool isNaN() const
quaternion Exp() const
radian getYaw(bool reprojectAxis=true) const
bool equals(const quaternion &in, const radian &in) const
float Dot(const quaternion &in) const
quaternion Log() const
float Norm() const
quaternion Inverse() const
radian getPitch(bool reprojectAxis=true) const
quaternion UnitInverse() const
Central state/object manager and communications hub.
#define ROR_ASSERT(_EXPR)
Definition Application.h:40
void registerOgrePixelBox(AngelScript::asIScriptEngine *engine)
void registerOgreMeshManager(AngelScript::asIScriptEngine *engine)
void registerOgreMesh(AngelScript::asIScriptEngine *engine)
static SubEntityArray * EntityGetSubEntities(Entity *self)
AngelScript::CScriptArray * get2DElementsHelper(Ogre::Overlay *self)
static void PixelBoxDefaultConstructor(PixelBox *self)
static void ImageDefaultConstructor(Image *self)
static void RadianDefaultConstructor(Radian *self)
static void ColourValueInitConstructor(float r, float g, float b, float a, ColourValue *self)
static void ColourValueDefaultConstructor(ColourValue *self)
static void MeshPtrAssignOperator(const MeshPtr &other, MeshPtr *self)
void registerOgreMaterial(AngelScript::asIScriptEngine *engine)
static void Vector3CopyConstructor(const Vector3 &other, Vector3 *self)
static void GpuProgramParametersPtrAssignOperator(const GpuProgramParametersPtr &other, GpuProgramParametersPtr *self)
static void MaterialPtrDefaultConstructor(MaterialPtr *self)
void registerOgreHardwarePixelBuffer(AngelScript::asIScriptEngine *engine)
static void HardwarePixelBufferPtrDestructor(HardwarePixelBufferSharedPtr *self)
static void Vector2DefaultConstructor(Vector2 *self)
static void ColourValueCopyConstructor(const ColourValue &other, ColourValue *self)
static AngelScript::CScriptArray * SubMesh__getVertexPositions(SubMesh *self)
static bool TexturePtrIsNull(TexturePtr *self)
void registerOgreGpuProgramParameters(AngelScript::asIScriptEngine *engine)
void registerOgreDegree(AngelScript::asIScriptEngine *engine)
void registerOgreAnimationStateSet(AngelScript::asIScriptEngine *engine)
void registerOgreNodeBase(AngelScript::asIScriptEngine *engine, const char *obj)
static void ImageCopyConstructor(const Image &other, Image *self)
static std::string MovableObjectGetUniqueNameMixin(Ogre::MovableObject *self)
static bool MeshPtrIsNull(MeshPtr *self)
static void TexturePtrDefaultConstructor(TexturePtr *self)
void registerOgreBox(AngelScript::asIScriptEngine *engine)
static SubMeshArray * MeshPtrGetSubmeshes(const MeshPtr &self)
static void Vector2InitConstructor(float x, float y, Vector2 *self)
static void QuaternionCopyConstructor(const Quaternion &other, Quaternion *self)
CReadonlyScriptArrayView< Ogre::Technique * > TechniqueArray
static void HardwarePixelBufferPtrDefaultConstructor(HardwarePixelBufferSharedPtr *self)
static void MeshPtrCopyConstructor(const MeshPtr &other, MeshPtr *self)
void registerOgreNode(AngelScript::asIScriptEngine *engine)
static void TimerCopyConstructor(const Timer &other, Timer *self)
CReadonlyScriptArrayView< Ogre::SubMesh * > SubMeshArray
CReadonlyScriptArrayView< Ogre::TextureUnitState * > TextureUnitStateArray
static TechniqueArray * MaterialPtrGetTechniques(const MaterialPtr &self)
void registerOgreTexture(AngelScript::asIScriptEngine *engine)
static void GpuProgramParametersPtrDestructor(GpuProgramParametersPtr *self)
void registerOgreSceneManager(AngelScript::asIScriptEngine *engine)
void registerOgreImage(AngelScript::asIScriptEngine *engine)
static void QuaternionInitConstructor1(const Radian &rfAngle, const Vector3 &rkAxis, Quaternion *self)
static void BoxInitConstructor(asUINT l, asUINT t, asUINT r, asUINT b, Box *self)
static void PixelBoxAssignOperator(const PixelBox &other, PixelBox *self)
CReadonlyScriptArrayView< Ogre::Node * > ChildNodeArray
static void GpuProgramParametersPtrDefaultConstructor(GpuProgramParametersPtr *self)
static void DegreeInitConstructor(float r, Degree *self)
void registerOgreTextureUnitState(AngelScript::asIScriptEngine *engine)
void registerOgreTextureManager(AngelScript::asIScriptEngine *engine)
static void QuaternionInitConstructorScaler(float s, Quaternion *self)
static int DegreeCmp(const Degree &a, const Degree &b)
void registerOgreSubMesh(AngelScript::asIScriptEngine *engine)
void registerOgreMovableObjectBase(AngelScript::asIScriptEngine *engine, const char *obj)
static void TexturePtrCopyConstructor(const TexturePtr &other, TexturePtr *self)
static void BoxDestructor(Box *self)
static void PixelBoxDestructor(PixelBox *self)
void registerOgreMaterialManager(AngelScript::asIScriptEngine *engine)
CReadonlyScriptArrayView< Ogre::Pass * > PassArray
static std::string NodeGetUniqueNameMixin(Ogre::Node *self)
static void MaterialPtrCopyConstructor(const MaterialPtr &other, MaterialPtr *self)
static Ogre::HardwareIndexBuffer::IndexType SubMesh__getIndexType(SubMesh *self)
static void ImageDestructor(PixelBox *self)
void registerOgreEntity(AngelScript::asIScriptEngine *engine)
static bool GpuProgramParametersPtrIsNull(GpuProgramParametersPtr *self)
static void BoxDefaultConstructor(Box *self)
static SceneManagerInstanceDict * RootGetSceneManagers(Root *self)
static void MaterialPtrAssignOperator(const MaterialPtr &other, MaterialPtr *self)
void registerOgreTechnique(AngelScript::asIScriptEngine *engine)
static void RadianInitConstructor(float r, Radian *self)
void registerOgreTimer(AngelScript::asIScriptEngine *engine)
static void MeshPtrDestructor(MeshPtr *self)
static void BoxCopyConstructor(const Box &other, Box *self)
void registerOgreLight(AngelScript::asIScriptEngine *engine)
CReadonlyScriptArrayView< Ogre::MovableObject * > MovableObjectArray
static void HardwarePixelBufferPtrCopyConstructor(const HardwarePixelBufferSharedPtr &other, HardwarePixelBufferSharedPtr *self)
static void ImageAssignOperator(const PixelBox &other, PixelBox *self)
static void HardwarePixelBufferPtrAssignOperator(const HardwarePixelBufferSharedPtr &other, HardwarePixelBufferSharedPtr *self)
static void TimerDefaultDestructor(Timer *self)
static void QuaternionInitConstructor2(float w, float x, float y, float z, Quaternion *self)
static void TimerAssignOperator(const Timer &other, Timer *self)
static void TimerDefaultConstructor(Timer *self)
static AngelScript::CScriptArray * SubMesh__getIndexBufferHelper(Ogre::SubMesh *self, Ogre::HardwareIndexBuffer::IndexType desiredType)
static MovableObjectArray * SceneNodeGetAttachedObjects(SceneNode *self)
static void BoxAssignOperator(const Box &other, Box *self)
static void PixelBoxCopyConstructor(const PixelBox &other, PixelBox *self)
void registerOgreQuaternion(AngelScript::asIScriptEngine *engine)
static void QuaternionDefaultConstructor(Quaternion *self)
static void MeshPtrDefaultConstructor(MeshPtr *self)
static AngelScript::CScriptArray * SubMesh__getVertexTexcoords(SubMesh *self, asUINT index)
static void TexturePtrAssignOperator(const TexturePtr &other, TexturePtr *self)
static void Vector3InitConstructor(float x, float y, float z, Vector3 *self)
AngelScript::CScriptArray * getElementTemplatesHelper(Ogre::OverlayManager *self)
CReadonlyScriptDictView< SceneManager * > SceneManagerInstanceDict
void registerOgreSceneNode(AngelScript::asIScriptEngine *engine)
void registerOgreSubEntity(AngelScript::asIScriptEngine *engine)
static void TexturePtrDestructor(TexturePtr *self)
void registerOgreOverlay(AngelScript::asIScriptEngine *engine)
static void Vector3DefaultConstructor(Vector3 *self)
CReadonlyScriptArrayView< Ogre::SubEntity * > SubEntityArray
static void DegreeCopyConstructor(const Degree &other, Degree *self)
void registerOgreVector2(AngelScript::asIScriptEngine *engine)
static void RadianCopyConstructor(const Radian &other, Radian *self)
static ChildNodeArray * NodeGetChildren(Ogre::Node *self)
static void GpuProgramParametersPtrCopyConstructor(const GpuProgramParametersPtr &other, GpuProgramParametersPtr *self)
static void QuaternionInitConstructor5(float val, Quaternion *self)
static void QuaternionInitConstructor3(const Vector3 &xaxis, const Vector3 &yaxis, const Vector3 &zaxis, Quaternion *self)
void registerOgreVector3(AngelScript::asIScriptEngine *engine)
static AnimationStateDict * AnimationStateSetGetAnimationStates(AnimationStateSet *self)
static void Vector3InitConstructorScaler(float s, Vector3 *self)
static bool MaterialPtrIsNull(MaterialPtr *self)
void registerOgreManualObject(AngelScript::asIScriptEngine *engine)
void registerOgreAnimationState(AngelScript::asIScriptEngine *engine)
static void DegreeDefaultConstructor(Degree *self)
void registerOgrePass(AngelScript::asIScriptEngine *engine)
static void Vector2CopyConstructor(const Vector2 &other, Vector2 *self)
void registerOgreRadian(AngelScript::asIScriptEngine *engine)
static PassArray * TechniqueGetPasses(Technique *self)
static void MaterialPtrDestructor(MaterialPtr *self)
static PixelBox PIXELBOX_DUMMY
void registerOgreColourValue(AngelScript::asIScriptEngine *engine)
CReadonlyScriptDictView< AnimationState * > AnimationStateDict
static void Vector2InitConstructorScaler(float s, Vector2 *self)
static TextureUnitStateArray * PassGetTextureUnitStates(Pass *self)
static int Vector3Cmp(const Vector3 &a, const Vector3 &b)
static int RadianCmp(const Radian &a, const Radian &b)
void registerOgreMovableObject(AngelScript::asIScriptEngine *engine)
void registerOgreRoot(AngelScript::asIScriptEngine *engine)
static AngelScript::CScriptArray * SceneManager__getMovableObjectsByType(SceneManager *self, const std::string &typeName)
static void RegisterReadonlyScriptArrayView(AngelScript::asIScriptEngine *engine, const char *decl, const char *value_decl)
static void RegisterReadonlyScriptDictView(AngelScript::asIScriptEngine *engine, const char *decl, const char *value_decl)
void forwardExceptionAsScriptEvent(const std::string &from)
Forwards useful info from C++ try{}catch{} exceptions to script in the form of game event.
void SLOG(const char *msg)
Replacement of macro.
AngelScript::asIScriptEngine * getEngine()
AngelScript::CScriptArray * VectorToScriptArray(const std::vector< T > &vec, const std::string &decl)
Definition ScriptUtils.h:43
void RegisterOgreObjects(AngelScript::asIScriptEngine *engine)
defined in OgreAngelscript.cpp
AngelScript::CScriptArray * IterableMapToScriptArray(ItorT begin, ItorT end, const std::string &decl)
Definition ScriptUtils.h:79
ScriptEngine * GetScriptEngine()