#include "precompiled.h" #include "JSConversions.h" #include "Entity.h" #include "ObjectManager.h" #include "scripting/JSInterface_Vector3D.h" // HEntity template<> HEntity* ToNative( JSContext* cx, JSObject* obj ) { CEntity* e = ToNative( cx, obj ); return( &( e->me ) ); } template<> JSObject* ToScript( HEntity* Native ) { return( ToScript( &( **Native ) ) ); } // CBaseEntity* template<> bool ToPrimitive( JSContext* cx, jsval v, CBaseEntity*& Storage ) { if( !JSVAL_IS_OBJECT( v ) ) return( false ); CBaseEntity* Data = (CBaseEntity*)JS_GetInstancePrivate( cx, JSVAL_TO_OBJECT( v ), &CBaseEntity::JSI_class, NULL ); if( !Data ) return( false ); Storage = Data; return( true ); } template<> JSObject* ToScript( CBaseEntity** Native ) { return( ToScript( *Native ) ); } // CObjectEntry* template<> bool ToPrimitive( JSContext* cx, jsval v, CObjectEntry*& Storage ) { CStrW ActorName; if( !ToPrimitive( cx, v, ActorName ) ) return( false ); Storage = g_ObjMan.FindObject( (CStr)ActorName ); return( true ); } template<> jsval ToJSVal( CObjectEntry*& Native ) { if( !Native ) return( ToJSVal( CStrW( L"[No actor]" ) ) ); return( ToJSVal( CStrW( Native->m_Name ) ) ); } // CVector3D template<> CVector3D* ToNative( JSContext* cx, JSObject* obj ) { JSI_Vector3D::Vector3D_Info* v = (JSI_Vector3D::Vector3D_Info*)JS_GetPrivate( cx, obj ); return( v->vector ); } template<> JSObject* ToScript( CVector3D* Native ) { JSObject* Script = JS_NewObject( g_ScriptingHost.GetContext(), &JSI_Vector3D::JSI_class, NULL, NULL ); JS_SetPrivate( g_ScriptingHost.GetContext(), Script, new JSI_Vector3D::Vector3D_Info( *Native ) ); return( Script ); } // CScriptObject template<> jsval ToJSVal( CScriptObject& Native ) { if( Native.Type == CScriptObject::FUNCTION ) return( OBJECT_TO_JSVAL( JS_GetFunctionObject( Native.Function ) ) ); return( JSVAL_NULL ); } template<> bool ToPrimitive( JSContext* cx, jsval v, CScriptObject& Storage ) { Storage.SetJSVal( v ); return( true ); } // i32 template<> jsval ToJSVal( const i32& Native ) { return( INT_TO_JSVAL( Native ) ); } template<> jsval ToJSVal( i32& Native ) { return( INT_TO_JSVAL( Native ) ); } template<> bool ToPrimitive( JSContext* cx, jsval v, i32& Storage ) { try { Storage = g_ScriptingHost.ValueToInt( v ); } catch( PSERROR_Scripting_ConversionFailed ) { return( false ); } return( true ); } // double template<> jsval ToJSVal( const double& Native ) { return( DOUBLE_TO_JSVAL( JS_NewDouble( g_ScriptingHost.getContext(), Native ) ) ); } template<> jsval ToJSVal( double& Native ) { return( DOUBLE_TO_JSVAL( JS_NewDouble( g_ScriptingHost.getContext(), Native ) ) ); } template<> bool ToPrimitive( JSContext* cx, jsval v, double& Storage ) { try { Storage = g_ScriptingHost.ValueToDouble( v ); } catch( PSERROR_Scripting_ConversionFailed ) { return( false ); } return( true ); } // float template<> jsval ToJSVal( const float& Native ) { return( DOUBLE_TO_JSVAL( JS_NewDouble( g_ScriptingHost.getContext(), Native ) ) ); } template<> jsval ToJSVal( float& Native ) { return( DOUBLE_TO_JSVAL( JS_NewDouble( g_ScriptingHost.getContext(), Native ) ) ); } template<> bool ToPrimitive( JSContext* cx, jsval v, float& Storage ) { try { Storage = (float)g_ScriptingHost.ValueToDouble( v ); } catch( PSERROR_Scripting_ConversionFailed ) { return( false ); } return( true ); } // bool template<> jsval ToJSVal( const bool& Native ) { return( BOOLEAN_TO_JSVAL( Native ) ); } template<> jsval ToJSVal( bool& Native ) { return( BOOLEAN_TO_JSVAL( Native ) ); } template<> bool ToPrimitive( JSContext* cx, jsval v, bool& Storage ) { try { Storage = g_ScriptingHost.ValueToBool( v ); } catch( PSERROR_Scripting_ConversionFailed ) { return( false ); } return( true ); } // CStrW template<> bool ToPrimitive( JSContext* cx, jsval v, CStrW& Storage ) { try { Storage = g_ScriptingHost.ValueToUCString( v ); } catch( PSERROR_Scripting_ConversionFailed ) { return( false ); } return( true ); } template<> jsval ToJSVal( const CStrW& Native ) { return( STRING_TO_JSVAL( JS_NewUCStringCopyZ( g_ScriptingHost.GetContext(), Native.c_str() ) ) ); } template<> jsval ToJSVal( CStrW& Native ) { return( STRING_TO_JSVAL( JS_NewUCStringCopyZ( g_ScriptingHost.GetContext(), Native.c_str() ) ) ); } // jsval template<> jsval ToJSVal( const jsval& Native ) { return( Native ); }