218 lines
6.4 KiB
C++
218 lines
6.4 KiB
C++
/* -----------------------------------------------------------------------------
|
|
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"));
|
|
}
|
|
//------------------------------------------------------------------------------
|