/* ----------------------------------------------------------------------------- GSFramework Copyright 2001-2013 Emmanuel Julien. All Rights Reserved. ----------------------------------------------------------------------------- */ #include "script_squirrel/legacy/binding_helpers.h" #include "scene3d/mobject.h" using namespace GS::S3D; using namespace GS::Script; static CObjectType object_derived_types[] = { typetag_Item, typetag_Object, typetag_Undefined }; //------------------------------------------------------------------------------ SQInteger ObjectGetLODBias(HSQUIRRELVM vm) { __SQ_RETURNFLOAT(GS::Core::Object::lod_bias) } SQInteger ObjectSetLODBias(HSQUIRRELVM vm) { __SQ_GETSINGLE(__SQ_GETFLOAT(bias)) GS::Core::Object::lod_bias = bias; __SQ_RETURN } //------------------------------------------------------------------------------ //----------------------------------------------- SQInteger ObjectGetItem(HSQUIRRELVM vm) //----------------------------------------------- { __SQ_GETSINGLESAFEPTR(obj, MObject, typetag_Object) __SQ_RETURNSAFEPTR((MItem *)obj, typetag_Item) } //------------------------------------------------------------------------------ #define __SQ_ASSERTRENDERDATA(__I__) if (__I__->render_data.IsNull()) return sq_throwerror(vm, "No render data, have you setup this item render data?"); SQInteger ObjectSetGeometry(HSQUIRRELVM vm) { __SQ_GETSTART(2) __SQ_GETCOBJECTBASE(o, MObject, object_derived_types) __SQ_GETSAFEPTRALLOWNULL(geo, GS::Render::Geometry, typetag_Geometry) __SQ_GETEND __SQ_ASSERTRENDERDATA(o) o->geometry = geo ? geo->name : NULL; o->render_data->geometry = geo; __SQ_RETURN } SQInteger ObjectGetGeometry(HSQUIRRELVM vm) { __SQ_GETSINGLE(__SQ_GETCOBJECTBASE(o, MObject, object_derived_types)) __SQ_ASSERTRENDERDATA(o) __SQ_RETURNSAFEPTR(o->render_data->geometry.c_ptr(), typetag_Geometry) } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ SQInteger ObjectSkinGetItemCount(HSQUIRRELVM vm) { __SQ_GETSINGLE(__SQ_GETCOBJECTBASE(o, MObject, object_derived_types)) __SQ_RETURNINT(o->GetBoneCount()) } SQInteger ObjectSkinGetItem(HSQUIRRELVM vm) { __SQ_GETSTART(2) __SQ_GETCOBJECTBASE(o, MObject, object_derived_types) __SQ_GETINT(n) __SQ_GETEND __SQ_RETURNSAFEPTR(o->GetBone(n) ? o->GetBone(n)->mitem : NULL, typetag_Item) } SQInteger ObjectSkinSetItem(HSQUIRRELVM vm) { __SQ_GETSTART(3) __SQ_GETCOBJECTBASE(o, MObject, object_derived_types) __SQ_GETINT(n) __SQ_GETSAFEPTRALLOWNULL(b, MItem, typetag_Item) __SQ_GETEND o->BindBone(n, b ? b->GetBaseItem() : NULL); __SQ_RETURN } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ SQInteger ObjectSetSkinMotion(HSQUIRRELVM vm) { /* __SQ_GETSTART(6) __SQ_GETSAFEPTR(obj, MObject, typetag_Object) __SQ_GETSTRING(motion_id) __SQ_GETFLOAT(blend) __SQ_GETFLOAT(weight) __SQ_GETFLOAT(t) __SQ_GETBOOL(loop) nHierarchyMotion *mot = (nHierarchyMotion *)obj->skin_motion_list.Find(motion_id); if (obj && mot) SetHierarchyMotion(obj->GetSkin(), mot, blend, weight, t, loop ? true : false); __SQ_GETEND __SQ_RETURN */ __SQ_GETSTART(2) __SQ_GETCOBJECTBASE(o, MObject, object_derived_types) __SQ_GETSTRING(motion_name) // obj->SetSkinMotion(motion_name); __SQ_GETEND __SQ_RETURN } SQInteger ObjectSetSkinMotionClockScale(HSQUIRRELVM vm) { __SQ_GETSTART(2) __SQ_GETCOBJECTBASE(o, MObject, object_derived_types) __SQ_GETFLOAT(scale) __SQ_GETEND return 0; } SQInteger ObjectStopAllSkinMotion(HSQUIRRELVM vm) { __SQ_GETSINGLE(__SQ_GETCOBJECTBASE(o, MObject, object_derived_types)) // if (obj) // StopAllHierarchyMotion(obj->GetSkin()); return 0; } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ void RegisterObjectBinding(HSQUIRRELVM vm) { /*# Topic: Object Type: Object Related: Item #*/ /*# Section: ObjectGeneric Desc: Generic functions #*/ /*# Func: ObjectGetItem Proto: Item:Object Desc: Get object item. #*/ sq_register(vm, ObjectGetItem, "ObjectGetItem", _SC(".x")); /*# Func: ObjectSetGeometry Proto: void:Object,Geometry Desc: Set object geometry. #*/ sq_register(vm, ObjectSetGeometry, "ObjectSetGeometry", _SC(".xx")); /*# Func: ObjectGetGeometry Proto: Geometry:Object Desc: Get geometry object. #*/ sq_register(vm, ObjectGetGeometry, "ObjectGetGeometry", _SC(".x")); /*# Func: ObjectGetLODBias Proto: float: Desc: Get global object geometry lod bias. Note: This value is added to the distance used to select the lod level for a geometry before displaying it. #*/ sq_register(vm, ObjectGetLODBias, "ObjectGetLODBias", _SC(".")); /*# Func: ObjectSetLODBias Proto: void:float bias Desc: Set global object geometry lod bias. Note: This value is added to the distance used to select the lod level for a geometry before displaying it. Example: ObjectSetLODBias(Mtr(10.0)) // Push all geometry LODs back by 10 meters. #*/ sq_register(vm, ObjectSetLODBias, "ObjectSetLODBias", _SC(".n")); /*# Section: ObjectSkin Desc: Skin functions #*/ /*# Func: ObjectSkinGetItemCount Proto: int:Object Desc: Return the number of bone items in the object skin. #*/ sq_register(vm, ObjectSkinGetItemCount, "ObjectSkinGetItemCount", _SC(".x")); /*# Func: ObjectSkinGetItem Proto: Item:Object,int index Desc: Return a bone item from the object skin. #*/ sq_register(vm, ObjectSkinGetItem, "ObjectSkinGetItem", _SC(".xi")); /*# Func: ObjectSkinSetItem Proto: void:Object,int index,Item bone Desc: Set a bone item in the object skin. #*/ sq_register(vm, ObjectSkinSetItem, "ObjectSkinSetItem", _SC(".xix")); /*# Func: ObjectSetSkinMotion Proto: void:Object,string name Desc: Set object skin motion. #*/ sq_register(vm, ObjectSetSkinMotion, "ObjectSetSkinMotion", _SC(".xs")); /*# Func: ObjectSetSkinMotionClockScale Proto: void:Object,float scale Desc: Set current object skin motion clock scale. #*/ sq_register(vm, ObjectSetSkinMotionClockScale, "ObjectSetSkinMotionClockScale", _SC(".xf")); /*# Func: ObjectStopAllSkinMotion Proto: void:Object Desc: Stop all object skin motions. #*/ sq_register(vm, ObjectStopAllSkinMotion, "ObjectStopAllSkinMotion", _SC(".x")); } //------------------------------------------------------------------------------