def ApplyCommonRules(self, mb): # Common function added for getting the "PyObject" of an entity mb.mem_funs('GetPySelf').exclude() ihandleentity = mb.class_('IHandleEntity') # All return values derived from IHandleEntity entity will be returned by value. # This ensures the converter is called testinherit = MatcherTestInheritClass(ihandleentity) decls = mb.calldefs(matchers.custom_matcher_t(testinherit)) decls.call_policies = call_policies.return_value_policy(call_policies.return_by_value) # All CBaseEntity related classes should have a custom call trait self.baseentcls = mb.class_('CBaseEntity' if self.isserver else 'C_BaseEntity') def ent_call_trait(type_): return '%(arg)s ? %(arg)s->GetPyHandle() : boost::python::object()' entclasses = mb.classes(self.TestCBaseEntity) for entcls in entclasses: entcls.custom_call_trait = ent_call_trait # All functions receiving an IHandleEntity argument should be converted def ihandleentity_call_trait(type_): return 'PyEntityFromEntityHandle( %(arg)s )' ihandleentity.custom_call_trait = ihandleentity_call_trait # Anything returning KeyValues should be returned by value so it calls the converter keyvalues = mb.class_('KeyValues') mb.calldefs(matchers.calldef_matcher_t(return_type=pointer_t(declarated_t(keyvalues))), allow_empty=True).call_policies = call_policies.return_value_policy(call_policies.return_by_value) mb.calldefs(matchers.calldef_matcher_t(return_type=pointer_t(const_t(declarated_t(keyvalues)))), allow_empty=True).call_policies = call_policies.return_value_policy(call_policies.return_by_value) # Anything returning a void pointer is excluded by default mb.calldefs(matchers.calldef_matcher_t(return_type=pointer_t(declarated_t(void_t()))), allow_empty=True).exclude() mb.calldefs(matchers.calldef_matcher_t(return_type=pointer_t(const_t(declarated_t(void_t())))), allow_empty=True).exclude()
def ApplyCommonRules(self, mb): # Common function added for getting the "PyObject" of an entity mb.mem_funs('GetPySelf').exclude() ihandleentity = mb.class_('IHandleEntity') # All return values derived from IHandleEntity entity will be returned by value. # This ensures the converter is called testinherit = MatcherTestInheritClass(ihandleentity) decls = mb.calldefs(matchers.custom_matcher_t(testinherit)) decls.call_policies = call_policies.return_value_policy(call_policies.return_by_value) # All CBaseEntity related classes should have a custom call trait self.baseentcls = mb.class_('CBaseEntity' if self.isserver else 'C_BaseEntity') def ent_call_trait(type_): return '%(arg)s ? %(arg)s->GetPyHandle() : boost::python::object()' entclasses = mb.classes(self.TestCBaseEntity) for entcls in entclasses: entcls.custom_call_trait = ent_call_trait # All functions receiving an IHandleEntity argument should be converted def ihandleentity_call_trait(type_): return 'PyEntityFromEntityHandle( %(arg)s )' ihandleentity.custom_call_trait = ihandleentity_call_trait # Anything returning KeyValues should be returned by value so it calls the converter keyvalues = mb.class_('KeyValues') mb.calldefs(matchers.calldef_matcher_t(return_type=pointer_t(declarated_t(keyvalues))), allow_empty=True).call_policies = call_policies.return_value_policy(call_policies.return_by_value) mb.calldefs(matchers.calldef_matcher_t(return_type=pointer_t(const_t(declarated_t(keyvalues)))), allow_empty=True).call_policies = call_policies.return_value_policy(call_policies.return_by_value) # Anything returning a void pointer is excluded by default mb.calldefs(matchers.calldef_matcher_t(return_type=pointer_t(declarated_t(void_t()))), allow_empty=True).exclude() mb.calldefs(matchers.calldef_matcher_t(return_type=pointer_t(const_t(declarated_t(void_t())))), allow_empty=True).exclude()
def Parse(self, mb): if self.settings.branch == 'source2013': self.steamsdkversion = (1, 30) # Exclude everything by default mb.decls().exclude() # Generic steam api call return result mb.typedef('SteamAPICall_t').include() # CSteamID cls = mb.class_('CSteamID') cls.include() constpchararg = pointer_t(const_t(declarated_t(char_t()))) cls.constructors(matchers.calldef_matcher_t(arg_types=[constpchararg, None])).exclude() cls.mem_funs('Render').exclude() cls.mem_funs('SetFromStringStrict').exclude() cls.mem_funs('SetFromString').exclude() # No definition... cls.mem_funs('SetFromSteam2String').exclude() # No definition... cls.mem_funs('BValidExternalSteamID').exclude() # No definition... mb.enum('EResult').include() mb.enum('EDenyReason').include() mb.enum('EUniverse').include() mb.enum('EAccountType').include() mb.enum('ESteamUserStatType').include() mb.enum('EChatEntryType').include() mb.enum('EChatRoomEnterResponse').include() mb.enum('EChatMemberStateChange').include() # Generic API functions mb.free_function('SteamAPI_RunCallbacks').include() # Accessor class client mb.add_registration_code( "bp::scope().attr( \"steamapicontext\" ) = boost::ref(steamapicontext);" ) cls = mb.class_('CSteamAPIContext') cls.include() cls.no_init = True cls.noncopyable = True cls.mem_fun('Init').exclude() cls.mem_fun('Clear').exclude() if self.steamsdkversion > (1, 11): cls.mem_fun('SteamHTTP').exclude() if self.steamsdkversion > (1, 15): cls.mem_fun('SteamScreenshots').exclude() if self.steamsdkversion > (1, 20): cls.mem_fun('SteamUnifiedMessages').exclude() cls.mem_fun('SteamMatchmakingServers').exclude() # Full python class wrapper cls.mem_fun('SteamNetworking').exclude() cls.mem_fun('SteamRemoteStorage').exclude() if self.steamsdkversion > (1, 16): cls.mem_fun('SteamAppList').exclude() cls.mem_fun('SteamController').exclude() cls.mem_fun('SteamMusic').exclude() cls.mem_fun('SteamMusicRemote').exclude() cls.mem_fun('SteamUGC').exclude() cls.mem_fun('SteamHTMLSurface').exclude() cls.mem_funs('SteamApps').call_policies = call_policies.return_internal_reference() cls.mem_funs('SteamFriends').call_policies = call_policies.return_internal_reference() cls.mem_funs('SteamUtils').call_policies = call_policies.return_internal_reference() cls.mem_funs('SteamMatchmaking').call_policies = call_policies.return_internal_reference() cls.mem_funs('SteamMatchmakingServers').call_policies = call_policies.return_internal_reference() cls.mem_funs('SteamUser').call_policies = call_policies.return_internal_reference() cls.mem_funs('SteamUserStats').call_policies = call_policies.return_internal_reference() mb.add_registration_code( "bp::scope().attr( \"QUERY_PORT_NOT_INITIALIZED\" ) = (int)QUERY_PORT_NOT_INITIALIZED;" ) mb.add_registration_code( "bp::scope().attr( \"QUERY_PORT_ERROR\" ) = (int)QUERY_PORT_ERROR;" ) self.ParseSteamApps(mb) self.ParseSteamFriends(mb) # User cls = mb.class_('ISteamUser') cls.include() cls.no_init = True cls.noncopyable = True cls.mem_funs().virtuality = 'not virtual' # Utils cls = mb.class_('ISteamUtils') cls.include() cls.no_init = True cls.noncopyable = True cls.mem_funs().virtuality = 'not virtual' cls.mem_fun('GetImageRGBA').exclude() cls.mem_fun('GetImageSize').exclude() self.ParseMatchmaking(mb) self.ParseUserStats(mb) #mb.class_('ISteamUtils').mem_funs('GetImageSize').add_transformation( FT.output('pnWidth'), FT.output('pnHeight')) #mb.class_('ISteamUtils').mem_funs('GetCSERIPPort').add_transformation( FT.output('unIP'), FT.output('usPort')) if self.isserver: self.ParseServerOnly(mb)
def Parse(self, mb): if self.settings.branch == 'source2013': self.steamsdkversion = (1, 30) # Exclude everything by default mb.decls().exclude() # Generic steam api call return result mb.typedef('SteamAPICall_t').include() # CSteamID cls = mb.class_('CSteamID') cls.include() constpchararg = pointer_t(const_t(declarated_t(char_t()))) cls.constructors( matchers.calldef_matcher_t( arg_types=[constpchararg, None])).exclude() cls.mem_funs('Render').exclude() cls.mem_funs('SetFromStringStrict').exclude() cls.mem_funs('SetFromString').exclude() # No definition... cls.mem_funs('SetFromSteam2String').exclude() # No definition... cls.mem_funs('BValidExternalSteamID').exclude() # No definition... mb.enum('EResult').include() mb.enum('EDenyReason').include() mb.enum('EUniverse').include() mb.enum('EAccountType').include() mb.enum('ESteamUserStatType').include() mb.enum('EChatEntryType').include() mb.enum('EChatRoomEnterResponse').include() mb.enum('EChatMemberStateChange').include() # Generic API functions mb.free_function('SteamAPI_RunCallbacks').include() # Accessor class client mb.add_registration_code( "bp::scope().attr( \"steamapicontext\" ) = boost::ref(steamapicontext);" ) cls = mb.class_('CSteamAPIContext') cls.include() cls.no_init = True cls.noncopyable = True cls.mem_fun('Init').exclude() cls.mem_fun('Clear').exclude() if self.steamsdkversion > (1, 11): cls.mem_fun('SteamHTTP').exclude() if self.steamsdkversion > (1, 15): cls.mem_fun('SteamScreenshots').exclude() if self.steamsdkversion > (1, 20): cls.mem_fun('SteamUnifiedMessages').exclude() cls.mem_fun( 'SteamMatchmakingServers').exclude() # Full python class wrapper cls.mem_fun('SteamNetworking').exclude() cls.mem_fun('SteamRemoteStorage').exclude() if self.steamsdkversion > (1, 16): cls.mem_fun('SteamAppList').exclude() cls.mem_fun('SteamController').exclude() cls.mem_fun('SteamMusic').exclude() cls.mem_fun('SteamMusicRemote').exclude() cls.mem_fun('SteamUGC').exclude() cls.mem_fun('SteamHTMLSurface').exclude() cls.mem_funs( 'SteamApps' ).call_policies = call_policies.return_internal_reference() cls.mem_funs( 'SteamFriends' ).call_policies = call_policies.return_internal_reference() cls.mem_funs( 'SteamUtils' ).call_policies = call_policies.return_internal_reference() cls.mem_funs( 'SteamMatchmaking' ).call_policies = call_policies.return_internal_reference() cls.mem_funs( 'SteamMatchmakingServers' ).call_policies = call_policies.return_internal_reference() cls.mem_funs( 'SteamUser' ).call_policies = call_policies.return_internal_reference() cls.mem_funs( 'SteamUserStats' ).call_policies = call_policies.return_internal_reference() mb.add_registration_code( "bp::scope().attr( \"QUERY_PORT_NOT_INITIALIZED\" ) = (int)QUERY_PORT_NOT_INITIALIZED;" ) mb.add_registration_code( "bp::scope().attr( \"QUERY_PORT_ERROR\" ) = (int)QUERY_PORT_ERROR;" ) self.ParseSteamApps(mb) self.ParseSteamFriends(mb) # User cls = mb.class_('ISteamUser') cls.include() cls.no_init = True cls.noncopyable = True cls.mem_funs().virtuality = 'not virtual' cls.mem_fun('DecompressVoice').exclude() cls.mem_fun('GetAuthSessionTicket').exclude() cls.mem_fun('GetEncryptedAppTicket').exclude() cls.mem_fun('GetVoice').exclude() cls.mem_fun('InitiateGameConnection').exclude() cls.mem_fun('RequestEncryptedAppTicket').exclude() cls.mem_fun('BeginAuthSession').exclude() mb.free_function('PySteamUser_GetAuthSessionTicket').include() mb.free_function('PySteamUser_GetAuthSessionTicket').rename( 'SteamUser_GetAuthSessionTicket') # Utils cls = mb.class_('ISteamUtils') cls.include() cls.no_init = True cls.noncopyable = True cls.mem_funs().virtuality = 'not virtual' cls.mem_fun('GetImageRGBA').exclude() cls.mem_fun('GetImageSize').exclude() cls.mem_fun('GetAPICallResult').exclude() self.ParseMatchmaking(mb) self.ParseUserStats(mb) #mb.class_('ISteamUtils').mem_funs('GetImageSize').add_transformation( FT.output('pnWidth'), FT.output('pnHeight')) #mb.class_('ISteamUtils').mem_funs('GetCSERIPPort').add_transformation( FT.output('unIP'), FT.output('usPort')) if self.isserver: self.ParseServerOnly(mb)
def Parse(self, mb): # Exclude everything by default mb.decls().exclude() # Generic steam api call return result mb.typedef('SteamAPICall_t').include() # CSteamID cls = mb.class_('CSteamID') cls.include() constpchararg = pointer_t(const_t(declarated_t(char_t()))) cls.constructors( matchers.calldef_matcher_t( arg_types=[constpchararg, None])).exclude() cls.mem_funs('Render').exclude() cls.mem_funs('SetFromStringStrict').exclude() cls.mem_funs('SetFromString').exclude() # No definition... cls.mem_funs('SetFromSteam2String').exclude() # No definition... cls.mem_funs('BValidExternalSteamID').exclude() # No definition... mb.enum('EResult').include() mb.enum('EDenyReason').include() mb.enum('EUniverse').include() mb.enum('EAccountType').include() mb.enum('ESteamUserStatType').include() mb.enum('EChatEntryType').include() mb.enum('EChatRoomEnterResponse').include() mb.enum('EChatMemberStateChange').include() # Generic API functions mb.free_function('SteamAPI_RunCallbacks').include() # Accessor class for all mb.add_registration_code( "bp::scope().attr( \"steamapicontext\" ) = boost::ref(steamapicontext);" ) cls = mb.class_('CSteamAPIContext') cls.include() cls.mem_fun('Init').exclude() cls.mem_fun('Clear').exclude() cls.mem_fun('SteamApps').exclude() cls.mem_fun('SteamMatchmakingServers').exclude() cls.mem_fun('SteamHTTP').exclude() cls.mem_fun('SteamScreenshots').exclude() cls.mem_fun('SteamUnifiedMessages').exclude() cls.mem_fun('SteamNetworking').exclude() cls.mem_fun('SteamRemoteStorage').exclude() cls.mem_funs( 'SteamFriends' ).call_policies = call_policies.return_internal_reference() cls.mem_funs( 'SteamUtils' ).call_policies = call_policies.return_internal_reference() cls.mem_funs( 'SteamMatchmaking' ).call_policies = call_policies.return_internal_reference() cls.mem_funs( 'SteamUser' ).call_policies = call_policies.return_internal_reference() cls.mem_funs( 'SteamUserStats' ).call_policies = call_policies.return_internal_reference() mb.add_registration_code( "bp::scope().attr( \"QUERY_PORT_NOT_INITIALIZED\" ) = (int)QUERY_PORT_NOT_INITIALIZED;" ) mb.add_registration_code( "bp::scope().attr( \"QUERY_PORT_ERROR\" ) = (int)QUERY_PORT_ERROR;" ) # Friends cls = mb.class_('ISteamFriends') cls.include() cls.mem_funs().virtuality = 'not virtual' cls.mem_fun('GetFriendGamePlayed').exclude() mb.enum('EFriendRelationship').include() mb.enum('EPersonaState').include() mb.add_registration_code( "bp::scope().attr( \"k_cchPersonaNameMax\" ) = (int)k_cchPersonaNameMax;" ) # User cls = mb.class_('ISteamUser') cls.include() cls.mem_funs().virtuality = 'not virtual' # Utils cls = mb.class_('ISteamUtils') cls.include() cls.mem_funs().virtuality = 'not virtual' cls.mem_fun('GetImageRGBA').exclude() cls.mem_fun('GetImageSize').exclude() self.ParseMatchmaking(mb) self.ParseUserStats(mb)
def Parse(self, mb): mb.decls().exclude() # Get item getitem_wrapper = 'static ::vec_t GetItem( %(cls_name)s const & inst, int i ) {\r\n' + \ ' if( i < 0 || i > %(nitems)s ) {\r\n' + \ ' PyErr_SetString(PyExc_IndexError, "Index out of range" );\r\n' + \ ' throw boost::python::error_already_set();\r\n' + \ ' }\r\n' + \ ' return inst[i];\r\n' + \ '}\r\n' getitem_reg = '%(cls_name)s_exposer.def( "__getitem__", &::%(cls_name)s_wrapper::GetItem );\r\n' # Set item setitem_wrapper = 'static void SetItem( %(cls_name)s & inst, int i, ::vec_t v ) {\r\n' + \ ' if( i < 0 || i > %(nitems)s ) {\r\n' + \ ' PyErr_SetString(PyExc_IndexError, "Index out of range" );\r\n' + \ ' throw boost::python::error_already_set();\r\n' + \ ' }\r\n' + \ ' inst[i] = v;\r\n' + \ '}\r\n' setitem_reg = '%(cls_name)s_exposer.def( "__setitem__", &::%(cls_name)s_wrapper::SetItem );\r\n' # String str_vmatrix_wrapper = 'static boost::python::object Str( VMatrix const & inst ) {\r\n' + \ ' return boost::python::object(VMatToString(inst));\r\n' + \ '}\r\n' str_reg = '%(cls_name)s_exposer.def( "__str__", &::%(cls_name)s_wrapper::Str );\r\n' # Classes cls = mb.class_('Vector') cls.include() cls.mem_opers('=').exclude() # Breaks debug mode and don't really need it cls.add_wrapper_code( getitem_wrapper % {'cls_name' : 'Vector', 'nitems' : '2' } ) cls.add_registration_code( getitem_reg % {'cls_name':'Vector'}, False) cls.add_wrapper_code( setitem_wrapper % {'cls_name' : 'Vector', 'nitems' : '2' } ) cls.add_registration_code( setitem_reg % {'cls_name':'Vector'}, False) cls = mb.class_('Vector2D') cls.include() cls.mem_opers('=').exclude() # Breaks debug mode and don't really need it cls.add_wrapper_code( getitem_wrapper % {'cls_name' : 'Vector2D', 'nitems' : '1' } ) cls.add_registration_code( getitem_reg % {'cls_name':'Vector2D'}, False) cls.add_wrapper_code( setitem_wrapper % {'cls_name' : 'Vector2D', 'nitems' : '1' } ) cls.add_registration_code( setitem_reg % {'cls_name':'Vector2D'}, False) cls = mb.class_('QAngle') cls.include() cls.mem_opers('=').exclude() # Breaks debug mode and don't really need it cls.add_wrapper_code( getitem_wrapper % {'cls_name' : 'QAngle', 'nitems' : '2' } ) cls.add_registration_code( getitem_reg % {'cls_name':'QAngle'}, False) cls.add_wrapper_code( setitem_wrapper % {'cls_name' : 'QAngle', 'nitems' : '2' } ) cls.add_registration_code( setitem_reg % {'cls_name':'QAngle'}, False) cls = mb.class_('Quaternion') cls.include() cls.mem_opers('=').exclude() # Breaks debug mode and don't really need it mb.free_function('QAngleToAngularImpulse').include() mb.free_function('AngularImpulseToQAngle').include() # Call policies mb.mem_funs('AsVector2D').call_policies = call_policies.return_internal_reference() # Transform functions that take pointers as arguments mb.free_functions('SolveInverseQuadraticMonotonic').add_transformation( FT.output('a'), FT.output('b'), FT.output('c') ) mb.free_functions('ComputeTrianglePlane').add_transformation( FT.output('intercept') ) mb.free_functions('CalcSqrDistAndClosestPointOnAABB').add_transformation( FT.output('distSqrOut') ) mb.free_functions('SolveInverseReciprocalQuadratic').add_transformation( FT.output('a'), FT.output('b'), FT.output('c') ) mb.free_functions('SolveQuadratic').add_transformation( FT.output('root1'), FT.output('root2') ) mb.free_functions('SolveInverseQuadratic').add_transformation( FT.output('a'), FT.output('b'), FT.output('c') ) mb.free_functions('QuaternionAxisAngle').add_transformation( FT.output('axis'), FT.output('angle') ) mb.free_functions('RotationDeltaAxisAngle').add_transformation( FT.output('deltaAxis'), FT.output('deltaAngle') ) # Compressed color mb.class_('ColorRGBExp32').include() # cplane_t mb.class_('cplane_t').include() mb.class_('cplane_t').var('pad').exclude() # matrix3x4_t mb.class_('matrix3x4_t').include() mb.class_('matrix3x4_t').mem_opers().exclude() # ----- # Add custom item access functions to the Vector class mb.global_ns.mem_opers('[]').exclude() mb.class_('Vector').add_registration_code( 'def( bp::init< const Vector & >(( bp::arg("vOther") )) )') mb.class_('QAngle').add_registration_code( 'def( bp::init< const QAngle & >(( bp::arg("vOther") )) )') # Vars mb.vars('vec3_origin').include() mb.vars('vec3_angle').include() mb.vars('vec3_invalid').include() mb.vars('nanmask').include() # Mathlib.h functions mb.free_function('RandomAngularImpulse').include() mb.free_functions('VectorMaximum').include() mb.free_functions('VectorMAInline').include() mb.free_functions('VectorMA').include() mb.free_functions('RoundInt').include() mb.free_functions('Q_log2').include() mb.free_functions('SinCos').include() mb.free_functions('TableCos').include() mb.free_functions('TableSin').include() if self.settings.branch == 'swarm': mb.free_functions('IsPowerOfTwo').include() mb.free_functions('SmallestPowerOfTwoGreaterOrEqual').include() mb.free_functions('LargestPowerOfTwoLessThanOrEqual').include() mb.free_functions('FloorDivMod').include() mb.free_functions('GreatestCommonDivisor').include() mb.free_functions('IsDenormal').include() mb.free_functions('MatrixVectors').include() mb.free_functions('VectorRotate').include() mb.free_functions('TransformAnglesToLocalSpace').include() mb.free_functions('MatrixInitialize').include() mb.free_functions('MatrixCopy').include() mb.free_functions('MatrixInvert').include() mb.free_functions('MatricesAreEqual').include() mb.free_functions('MatrixGetColumn').include() mb.free_functions('MatrixSetColumn').include() mb.free_functions('ConcatRotations').include() mb.free_functions('ConcatTransforms').include() mb.free_functions('MatrixMultiply').include() mb.free_function('QuaternionSlerp').include() mb.free_function('QuaternionSlerpNoAlign').include() mb.free_function('QuaternionBlend').include() mb.free_function('QuaternionBlendNoAlign').include() mb.free_function('QuaternionIdentityBlend').include() mb.free_function('QuaternionAngleDiff').include() mb.free_function('QuaternionScale').include() mb.free_function('QuaternionDotProduct').include() mb.free_function('QuaternionConjugate').include() mb.free_function('QuaternionInvert').include() mb.free_function('QuaternionNormalize').include() mb.free_function('QuaternionAdd').include() mb.free_function('QuaternionMult').include() mb.free_functions('QuaternionMatrix').include() mb.free_functions('QuaternionAngles').include() mb.free_functions('AngleQuaternion').include() mb.free_function('QuaternionAxisAngle').include() mb.free_function('AxisAngleQuaternion').include() mb.free_function('BasisToQuaternion').include() mb.free_function('MatrixQuaternion').include() mb.free_functions('MatrixRowDotProduct').include() mb.free_functions('MatrixColumnDotProduct').include() mb.free_functions('anglemod').include() mb.free_functions('RemapVal').include() mb.free_functions('RemapValClamped').include() mb.free_functions('Lerp').include() mb.free_functions('Sqr').include() mb.free_functions('FLerp').include() mb.free_functions('Sign').include() mb.free_functions('ClampArrayBounds').include() mb.free_functions('AngleVectors').include() mb.free_functions('AngleVectors').include() mb.free_functions('AngleVectorsTranspose').include() mb.free_functions('AngleMatrix').include() mb.free_functions('AngleMatrix').include() mb.free_functions('AngleIMatrix').include() mb.free_functions('VectorAngles').include() mb.free_functions('VectorMatrix').include() mb.free_functions('VectorVectors').include() mb.free_functions('SetIdentityMatrix').include() mb.free_functions('SetScaleMatrix').include() mb.free_functions('MatrixBuildRotationAboutAxis').include() mb.free_functions('MatrixTranspose').include() mb.free_functions('MatrixInverseTranspose').include() mb.free_functions('PositionMatrix').include() mb.free_functions('MatrixPosition').include() mb.free_functions('VectorRotate').include() mb.free_functions('VectorIRotate').include() mb.free_functions('MatrixAngles').include() mb.free_functions('VectorCompare').include() mb.free_functions('VectorTransform').include() mb.free_functions('VectorITransform').include() mb.free_functions('BoxOnPlaneSide').include() mb.free_functions('VectorFill').include() mb.free_functions('VectorNegate').include() mb.free_functions('VectorAvg').include() mb.free_functions('BoxOnPlaneSide2').include() mb.free_functions('ClearBounds').include() mb.free_functions('AddPointToBounds').include() mb.free_functions('BuildGammaTable').include() mb.free_functions('TexLightToLinear').include() mb.free_functions('LinearToTexture').include() mb.free_functions('LinearToScreenGamma').include() mb.free_functions('TextureToLinear').include() mb.free_functions('SolveQuadratic').include() mb.free_functions('SolveInverseQuadratic').include() mb.free_functions('SolveInverseQuadraticMonotonic').include() mb.free_functions('SolveInverseReciprocalQuadratic').include() mb.free_functions('VectorYawRotate').include() mb.free_functions('Bias').include() mb.free_functions('Gain').include() mb.free_functions('SmoothCurve').include() mb.free_functions('SmoothCurve_Tweak').include() mb.free_functions('ExponentialDecay').include() mb.free_functions('ExponentialDecay').include() mb.free_functions('ExponentialDecayIntegral').include() mb.free_functions('SimpleSpline').include() mb.free_functions('SimpleSplineRemapVal').include() mb.free_functions('SimpleSplineRemapValClamped').include() mb.free_functions('RoundFloatToInt').include() mb.free_functions('RoundFloatToByte').include() mb.free_functions('RoundFloatToUnsignedLong').include() mb.free_functions('IsIntegralValue').include() mb.free_functions('Float2Int').include() mb.free_functions('Floor2Int').include() mb.free_functions('FastFToC').include() mb.free_functions('ClampToMsec').include() mb.free_functions('Ceil2Int').include() mb.free_functions('GetBarycentricCoords2D').include() mb.free_functions('QuickBoxSphereTest').include() mb.free_functions('QuickBoxIntersectTest').include() mb.free_functions('GammaToLinearFullRange').include() mb.free_functions('LinearToGammaFullRange').include() mb.free_functions('GammaToLinear').include() mb.free_functions('LinearToGamma').include() mb.free_functions('SrgbGammaToLinear').include() mb.free_functions('SrgbLinearToGamma').include() mb.free_functions('X360GammaToLinear').include() mb.free_functions('X360LinearToGamma').include() mb.free_functions('SrgbGammaTo360Gamma').include() mb.free_functions('LinearToVertexLight').include() mb.free_functions('LinearToLightmap').include() mb.free_functions('ColorClamp').include() mb.free_functions('ColorClampTruncate').include() mb.free_functions('Catmull_Rom_Spline').include() mb.free_functions('Catmull_Rom_Spline_Tangent').include() mb.free_functions('Catmull_Rom_Spline_Integral').include() mb.free_functions('Catmull_Rom_Spline_Integral').include() mb.free_functions('Catmull_Rom_Spline_Normalize').include() mb.free_functions('Catmull_Rom_Spline_Integral_Normalize').include() mb.free_functions('Catmull_Rom_Spline_NormalizeX').include() mb.free_functions('Catmull_Rom_Spline_NormalizeX').include() mb.free_functions('Hermite_Spline').include() #mb.free_functions('Hermite_SplineBasis').include() mb.free_functions('Kochanek_Bartels_Spline').include() mb.free_functions('Kochanek_Bartels_Spline_NormalizeX').include() mb.free_functions('Cubic_Spline').include() mb.free_functions('Cubic_Spline_NormalizeX').include() mb.free_functions('BSpline').include() mb.free_functions('BSpline_NormalizeX').include() mb.free_functions('Parabolic_Spline').include() mb.free_functions('Parabolic_Spline_NormalizeX').include() mb.free_functions('QuinticInterpolatingPolynomial').include() #mb.free_functions('GetInterpolationData').include() mb.free_functions('RangeCompressor').include() mb.free_functions('CalcSqrDistanceToAABB').include() mb.free_functions('CalcClosestPointOnAABB').include() mb.free_functions('CalcSqrDistAndClosestPointOnAABB').include() mb.free_functions('CalcDistanceToAABB').include() #mb.free_functions('CalcLineToLineIntersectionSegment').include() # TODO mb.free_functions('Approach').include() mb.free_functions('ApproachAngle').include() mb.free_functions('AngleDiff').include() mb.free_functions('AngleDistance').include() mb.free_functions('AngleNormalize').include() mb.free_functions('AngleNormalizePositive').include() mb.free_functions('AnglesAreEqual').include() mb.free_functions('RotationDeltaAxisAngle').include() mb.free_functions('RotationDelta').include() mb.free_functions('ComputeTrianglePlane').include() mb.free_functions('PolyFromPlane').include() mb.free_functions('ClipPolyToPlane').include() mb.free_functions('ClipPolyToPlane_Precise').include() mb.free_functions('CalcTriangleTangentSpace').include() mb.free_functions('TransformAABB').include() mb.free_functions('ITransformAABB').include() mb.free_functions('RotateAABB').include() mb.free_functions('IRotateAABB').include() mb.free_functions('MatrixTransformPlane').include() mb.free_functions('MatrixITransformPlane').include() mb.free_functions('CeilPow2').include() mb.free_functions('FloorPow2').include() mb.free_functions('RGBtoHSV').include() mb.free_functions('HSVtoRGB').include() # Vector.h functions mb.free_functions('VectorClear').include() mb.free_functions('VectorCopy').include() mb.free_functions('VectorAdd').include() mb.free_functions('VectorSubtract').include() mb.free_functions('VectorMultiply').include() mb.free_functions('VectorDivide').include() mb.free_functions('VectorScale').include() mb.free_functions('VectorMA').include() mb.free_functions('VectorsAreEqual').include() mb.free_functions('ComputeClosestPoint').include() mb.free_functions('VectorAbs').include() mb.free_functions('VectorLength').include() mb.free_functions('DotProduct').include() mb.free_functions('CrossProduct').include() mb.free_functions('VectorMin').include() mb.free_functions('VectorMax').include() mb.free_functions('VectorLerp').include() mb.free_functions('RandomVector').include() mb.free_functions('QAnglesAreEqual').include() #mb.free_functions('QAngleToAngularImpulse').include() #mb.free_functions('AngularImpulseToQAngle').include() mb.free_functions('VectorNormalize').include() mb.free_functions('VectorNormalizeFast').include() # Vector2d.h functions mb.free_functions('Vector2DClear').include() mb.free_functions('Vector2DCopy').include() mb.free_functions('Vector2DAdd').include() mb.free_functions('Vector2DSubtract').include() mb.free_functions('Vector2DMultiply').include() mb.free_functions('Vector2DDivide').include() mb.free_functions('Vector2DMA').include() mb.free_functions('Vector2DMin').include() mb.free_functions('Vector2DMax').include() mb.free_functions('Vector2DLength').include() mb.free_functions('DotProduct2D').include() mb.free_functions('Vector2DLerp').include() mb.free_functions('Vector2DNormalize').include() mb.free_functions('ComputeClosestPoint2D').include() # QAngle functions mb.free_function('RandomAngle').include() # VMatrix cls = mb.class_('VMatrix') cls.include() cls.mem_opers('=').exclude() # Breaks debug mode and don't really need it cls.mem_opers('[]').exclude() cls.mem_funs('Base').exclude() cls.vars('m').exclude() cls.mem_fun('As3x4', matchers.calldef_matcher_t(return_type=reference_t(declarated_t(mb.class_('matrix3x4_t'))))).exclude() cls.mem_fun('GetTranslation', matchers.calldef_matcher_t(return_type=reference_t(declarated_t(mb.class_('Vector'))))).exclude() cls.add_wrapper_code( str_vmatrix_wrapper % {'cls_name':'VMatrix'} ) cls.add_registration_code( str_reg % {'cls_name':'VMatrix'}, False) mb.free_functions('MatrixSetIdentity').include() mb.free_functions('MatrixTranspose').include() mb.free_functions('MatrixCopy').include() mb.free_functions('MatrixMultiply').include() mb.free_functions('MatrixGetColumn').include() mb.free_functions('MatrixSetColumn').include() mb.free_functions('MatrixGetRow').include() mb.free_functions('MatrixSetRow').include() mb.free_functions('MatrixTranslate').include() mb.free_functions('MatrixBuildRotationAboutAxis').include() mb.free_functions('MatrixBuildRotateZ').include() mb.free_functions('MatrixRotate').include() mb.free_functions('MatrixFromAngles').include() mb.free_functions('MatrixToAngles').include() # Exclude if self.settings.branch not in ['swarm', 'source2013']: mb.vars('pfVectorNormalizeFast').exclude() mb.vars('pfVectorNormalize').exclude() mb.vars('pfInvRSquared').exclude() mb.vars('m_flMatVal').exclude() mb.vars('quat_identity').exclude() # <- Does not even exist except for a declaration? # Exclude some functions mb.mem_funs('Base').exclude() # Base gives a pointer to the address of the data. Not very python like. mb.free_functions( 'AllocTempVector' ).exclude() mb.class_('Vector2D').mem_funs('Cross').exclude() # Declaration only? mb.free_function('ConcatRotations').exclude() # Declaration only? # Remove any protected function mb.calldefs( matchers.access_type_matcher_t( 'protected' ) ).exclude() # Remove any function with "float *" values # A lot of functions have two versions (or more), of which one takes "float *" arguments vec_t = mb.typedef('vec_t') excludetypes = [ pointer_t(float_t()), pointer_t(const_t(float_t())), pointer_t(declarated_t(vec_t)), pointer_t(const_t(declarated_t(vec_t))), ] mb.calldefs( calldef_withtypes( excludetypes ) ).exclude() # Silent warnings of generating class wrappers mb.classes().disable_warnings( messages.W1027 ) # Include functions with "float *" parameter. For these functions we should transform the "float *" parameter mb.free_functions('CalcClosestPointOnLine2D').include() mb.free_functions('CalcClosestPointOnLine2D').add_transformation( FT.output('t') ) mb.free_functions('CalcDistanceToLine2D').include() mb.free_functions('CalcDistanceToLine2D').add_transformation( FT.output('t') ) mb.free_functions('CalcDistanceSqrToLine2D').include() mb.free_functions('CalcDistanceSqrToLine2D').add_transformation( FT.output('t') ) mb.free_functions('CalcClosestPointOnLineSegment2D').include() mb.free_functions('CalcClosestPointOnLineSegment2D').add_transformation( FT.output('t') ) mb.free_functions('CalcDistanceToLineSegment2D').include() mb.free_functions('CalcDistanceToLineSegment2D').add_transformation( FT.output('t') ) mb.free_functions('CalcDistanceSqrToLineSegment2D').include() mb.free_functions('CalcDistanceSqrToLineSegment2D').add_transformation( FT.output('t') ) mb.free_functions('CalcClosestPointOnLine').include() mb.free_functions('CalcClosestPointOnLine').add_transformation( FT.output('t') ) mb.free_functions('CalcDistanceToLine').include() mb.free_functions('CalcDistanceToLine').add_transformation( FT.output('t') ) mb.free_functions('CalcDistanceSqrToLine').include() mb.free_functions('CalcDistanceSqrToLine').add_transformation( FT.output('t') ) mb.free_functions('CalcClosestPointOnLineSegment').include() mb.free_functions('CalcClosestPointOnLineSegment').add_transformation( FT.output('t') ) mb.free_functions('CalcDistanceToLineSegment').include() mb.free_functions('CalcDistanceToLineSegment').add_transformation( FT.output('t') ) mb.free_functions('CalcDistanceSqrToLineSegment').include() mb.free_functions('CalcDistanceSqrToLineSegment').add_transformation( FT.output('t') )
def Parse(self, mb): # Exclude everything by default mb.decls().exclude() # Generic steam api call return result mb.typedef('SteamAPICall_t').include() # CSteamID cls = mb.class_('CSteamID') cls.include() constpchararg = pointer_t(const_t(declarated_t(char_t()))) cls.constructors(matchers.calldef_matcher_t(arg_types=[constpchararg, None])).exclude() cls.mem_funs('Render').exclude() cls.mem_funs('SetFromStringStrict').exclude() cls.mem_funs('SetFromString').exclude() # No definition... cls.mem_funs('SetFromSteam2String').exclude() # No definition... cls.mem_funs('BValidExternalSteamID').exclude() # No definition... mb.enum('EResult').include() mb.enum('EDenyReason').include() mb.enum('EUniverse').include() mb.enum('EAccountType').include() mb.enum('ESteamUserStatType').include() mb.enum('EChatEntryType').include() mb.enum('EChatRoomEnterResponse').include() mb.enum('EChatMemberStateChange').include() # Generic API functions mb.free_function('SteamAPI_RunCallbacks').include() # Accessor class for all mb.add_registration_code( "bp::scope().attr( \"steamapicontext\" ) = boost::ref(steamapicontext);" ) cls = mb.class_('CSteamAPIContext') cls.include() cls.mem_fun('Init').exclude() cls.mem_fun('Clear').exclude() cls.mem_fun('SteamApps').exclude() cls.mem_fun('SteamMatchmakingServers').exclude() cls.mem_fun('SteamHTTP').exclude() cls.mem_fun('SteamScreenshots').exclude() cls.mem_fun('SteamUnifiedMessages').exclude() cls.mem_fun('SteamNetworking').exclude() cls.mem_fun('SteamRemoteStorage').exclude() cls.mem_funs('SteamFriends').call_policies = call_policies.return_internal_reference() cls.mem_funs('SteamUtils').call_policies = call_policies.return_internal_reference() cls.mem_funs('SteamMatchmaking').call_policies = call_policies.return_internal_reference() cls.mem_funs('SteamUser').call_policies = call_policies.return_internal_reference() cls.mem_funs('SteamUserStats').call_policies = call_policies.return_internal_reference() mb.add_registration_code( "bp::scope().attr( \"QUERY_PORT_NOT_INITIALIZED\" ) = (int)QUERY_PORT_NOT_INITIALIZED;" ) mb.add_registration_code( "bp::scope().attr( \"QUERY_PORT_ERROR\" ) = (int)QUERY_PORT_ERROR;" ) # Friends cls = mb.class_('ISteamFriends') cls.include() cls.mem_funs().virtuality = 'not virtual' cls.mem_fun('GetFriendGamePlayed').exclude() mb.enum('EFriendRelationship').include() mb.enum('EPersonaState').include() mb.add_registration_code( "bp::scope().attr( \"k_cchPersonaNameMax\" ) = (int)k_cchPersonaNameMax;" ) # User cls = mb.class_('ISteamUser') cls.include() cls.mem_funs().virtuality = 'not virtual' # Utils cls = mb.class_('ISteamUtils') cls.include() cls.mem_funs().virtuality = 'not virtual' cls.mem_fun('GetImageRGBA').exclude() cls.mem_fun('GetImageSize').exclude() self.ParseMatchmaking(mb) self.ParseUserStats(mb) #mb.class_('ISteamUtils').mem_funs('GetImageSize').add_transformation( FT.output('pnWidth'), FT.output('pnHeight')) #mb.class_('ISteamUtils').mem_funs('GetCSERIPPort').add_transformation( FT.output('unIP'), FT.output('usPort'))
def Parse(self, mb): mb.decls().exclude() # Get item getitem_wrapper = 'static ::vec_t GetItem( %(cls_name)s const & inst, int i ) {\r\n' + \ ' if( i < 0 || i > %(nitems)s ) {\r\n' + \ ' PyErr_SetString(PyExc_IndexError, "Index out of range" );\r\n' + \ ' throw boost::python::error_already_set();\r\n' + \ ' }\r\n' + \ ' return inst[i];\r\n' + \ '}\r\n' getitem_reg = '%(cls_name)s_exposer.def( "__getitem__", &::%(cls_name)s_wrapper::GetItem );\r\n' # Set item setitem_wrapper = 'static void SetItem( %(cls_name)s & inst, int i, ::vec_t v ) {\r\n' + \ ' if( i < 0 || i > %(nitems)s ) {\r\n' + \ ' PyErr_SetString(PyExc_IndexError, "Index out of range" );\r\n' + \ ' throw boost::python::error_already_set();\r\n' + \ ' }\r\n' + \ ' inst[i] = v;\r\n' + \ '}\r\n' setitem_reg = '%(cls_name)s_exposer.def( "__setitem__", &::%(cls_name)s_wrapper::SetItem );\r\n' # String str_vmatrix_wrapper = 'static boost::python::object Str( VMatrix const & inst ) {\r\n' + \ ' return boost::python::object(VMatToString(inst));\r\n' + \ '}\r\n' str_reg = '%(cls_name)s_exposer.def( "__str__", &::%(cls_name)s_wrapper::Str );\r\n' # Classes cls = mb.class_('Vector') cls.include() cls.mem_opers( '=').exclude() # Breaks debug mode and don't really need it cls.add_wrapper_code(getitem_wrapper % { 'cls_name': 'Vector', 'nitems': '2' }) cls.add_registration_code(getitem_reg % {'cls_name': 'Vector'}, False) cls.add_wrapper_code(setitem_wrapper % { 'cls_name': 'Vector', 'nitems': '2' }) cls.add_registration_code(setitem_reg % {'cls_name': 'Vector'}, False) cls = mb.class_('Vector2D') cls.include() cls.mem_opers( '=').exclude() # Breaks debug mode and don't really need it cls.add_wrapper_code(getitem_wrapper % { 'cls_name': 'Vector2D', 'nitems': '1' }) cls.add_registration_code(getitem_reg % {'cls_name': 'Vector2D'}, False) cls.add_wrapper_code(setitem_wrapper % { 'cls_name': 'Vector2D', 'nitems': '1' }) cls.add_registration_code(setitem_reg % {'cls_name': 'Vector2D'}, False) cls = mb.class_('QAngle') cls.include() cls.mem_opers( '=').exclude() # Breaks debug mode and don't really need it cls.add_wrapper_code(getitem_wrapper % { 'cls_name': 'QAngle', 'nitems': '2' }) cls.add_registration_code(getitem_reg % {'cls_name': 'QAngle'}, False) cls.add_wrapper_code(setitem_wrapper % { 'cls_name': 'QAngle', 'nitems': '2' }) cls.add_registration_code(setitem_reg % {'cls_name': 'QAngle'}, False) cls = mb.class_('Quaternion') cls.include() cls.mem_opers( '=').exclude() # Breaks debug mode and don't really need it mb.free_function('QAngleToAngularImpulse').include() mb.free_function('AngularImpulseToQAngle').include() # Call policies mb.mem_funs( 'AsVector2D' ).call_policies = call_policies.return_internal_reference() # Transform functions that take pointers as arguments mb.free_functions('SolveInverseQuadraticMonotonic').add_transformation( FT.output('a'), FT.output('b'), FT.output('c')) mb.free_functions('ComputeTrianglePlane').add_transformation( FT.output('intercept')) mb.free_functions( 'CalcSqrDistAndClosestPointOnAABB').add_transformation( FT.output('distSqrOut')) mb.free_functions( 'SolveInverseReciprocalQuadratic').add_transformation( FT.output('a'), FT.output('b'), FT.output('c')) mb.free_functions('SolveQuadratic').add_transformation( FT.output('root1'), FT.output('root2')) mb.free_functions('SolveInverseQuadratic').add_transformation( FT.output('a'), FT.output('b'), FT.output('c')) mb.free_functions('QuaternionAxisAngle').add_transformation( FT.output('axis'), FT.output('angle')) mb.free_functions('RotationDeltaAxisAngle').add_transformation( FT.output('deltaAxis'), FT.output('deltaAngle')) # Compressed color mb.class_('ColorRGBExp32').include() # cplane_t mb.class_('cplane_t').include() mb.class_('cplane_t').var('pad').exclude() # matrix3x4_t mb.class_('matrix3x4_t').include() mb.class_('matrix3x4_t').mem_opers().exclude() # ----- # Add custom item access functions to the Vector class mb.global_ns.mem_opers('[]').exclude() mb.class_('Vector').add_registration_code( 'def( bp::init< const Vector & >(( bp::arg("vOther") )) )') mb.class_('QAngle').add_registration_code( 'def( bp::init< const QAngle & >(( bp::arg("vOther") )) )') # Vars mb.vars('vec3_origin').include() mb.vars('vec3_angle').include() mb.vars('vec3_invalid').include() mb.vars('nanmask').include() # Mathlib.h functions mb.free_function('RandomAngularImpulse').include() mb.free_functions('VectorMaximum').include() mb.free_functions('VectorMAInline').include() mb.free_functions('VectorMA').include() mb.free_functions('RoundInt').include() mb.free_functions('Q_log2').include() mb.free_functions('SinCos').include() mb.free_functions('TableCos').include() mb.free_functions('TableSin').include() if self.settings.branch == 'swarm': mb.free_functions('IsPowerOfTwo').include() mb.free_functions('SmallestPowerOfTwoGreaterOrEqual').include() mb.free_functions('LargestPowerOfTwoLessThanOrEqual').include() mb.free_functions('FloorDivMod').include() mb.free_functions('GreatestCommonDivisor').include() mb.free_functions('IsDenormal').include() mb.free_functions('MatrixVectors').include() mb.free_functions('VectorRotate').include() mb.free_functions('TransformAnglesToLocalSpace').include() mb.free_functions('MatrixInitialize').include() mb.free_functions('MatrixCopy').include() mb.free_functions('MatrixInvert').include() mb.free_functions('MatricesAreEqual').include() mb.free_functions('MatrixGetColumn').include() mb.free_functions('MatrixSetColumn').include() mb.free_functions('ConcatRotations').include() mb.free_functions('ConcatTransforms').include() mb.free_functions('MatrixMultiply').include() mb.free_function('QuaternionSlerp').include() mb.free_function('QuaternionSlerpNoAlign').include() mb.free_function('QuaternionBlend').include() mb.free_function('QuaternionBlendNoAlign').include() mb.free_function('QuaternionIdentityBlend').include() mb.free_function('QuaternionAngleDiff').include() mb.free_function('QuaternionScale').include() mb.free_function('QuaternionDotProduct').include() mb.free_function('QuaternionConjugate').include() mb.free_function('QuaternionInvert').include() mb.free_function('QuaternionNormalize').include() mb.free_function('QuaternionAdd').include() mb.free_function('QuaternionMult').include() mb.free_functions('QuaternionMatrix').include() mb.free_functions('QuaternionAngles').include() mb.free_functions('AngleQuaternion').include() mb.free_function('QuaternionAxisAngle').include() mb.free_function('AxisAngleQuaternion').include() mb.free_function('BasisToQuaternion').include() mb.free_function('MatrixQuaternion').include() mb.free_functions('MatrixRowDotProduct').include() mb.free_functions('MatrixColumnDotProduct').include() mb.free_functions('anglemod').include() mb.free_functions('RemapVal').include() mb.free_functions('RemapValClamped').include() mb.free_functions('Lerp').include() mb.free_functions('Sqr').include() mb.free_functions('FLerp').include() mb.free_functions('Sign').include() mb.free_functions('ClampArrayBounds').include() mb.free_functions('AngleVectors').include() mb.free_functions('AngleVectors').include() mb.free_functions('AngleVectorsTranspose').include() mb.free_functions('AngleMatrix').include() mb.free_functions('AngleMatrix').include() mb.free_functions('AngleIMatrix').include() mb.free_functions('VectorAngles').include() mb.free_functions('VectorMatrix').include() mb.free_functions('VectorVectors').include() mb.free_functions('SetIdentityMatrix').include() mb.free_functions('SetScaleMatrix').include() mb.free_functions('MatrixBuildRotationAboutAxis').include() mb.free_functions('MatrixTranspose').include() mb.free_functions('MatrixInverseTranspose').include() mb.free_functions('PositionMatrix').include() mb.free_functions('MatrixPosition').include() mb.free_functions('VectorRotate').include() mb.free_functions('VectorIRotate').include() mb.free_functions('MatrixAngles').include() mb.free_functions('VectorCompare').include() mb.free_functions('VectorTransform').include() mb.free_functions('VectorITransform').include() mb.free_functions('BoxOnPlaneSide').include() mb.free_functions('VectorFill').include() mb.free_functions('VectorNegate').include() mb.free_functions('VectorAvg').include() mb.free_functions('BoxOnPlaneSide2').include() mb.free_functions('ClearBounds').include() mb.free_functions('AddPointToBounds').include() mb.free_functions('BuildGammaTable').include() mb.free_functions('TexLightToLinear').include() mb.free_functions('LinearToTexture').include() mb.free_functions('LinearToScreenGamma').include() mb.free_functions('TextureToLinear').include() mb.free_functions('SolveQuadratic').include() mb.free_functions('SolveInverseQuadratic').include() mb.free_functions('SolveInverseQuadraticMonotonic').include() mb.free_functions('SolveInverseReciprocalQuadratic').include() mb.free_functions('VectorYawRotate').include() mb.free_functions('Bias').include() mb.free_functions('Gain').include() mb.free_functions('SmoothCurve').include() mb.free_functions('SmoothCurve_Tweak').include() mb.free_functions('ExponentialDecay').include() mb.free_functions('ExponentialDecay').include() mb.free_functions('ExponentialDecayIntegral').include() mb.free_functions('SimpleSpline').include() mb.free_functions('SimpleSplineRemapVal').include() mb.free_functions('SimpleSplineRemapValClamped').include() mb.free_functions('RoundFloatToInt').include() mb.free_functions('RoundFloatToByte').include() mb.free_functions('RoundFloatToUnsignedLong').include() mb.free_functions('IsIntegralValue').include() mb.free_functions('Float2Int').include() mb.free_functions('Floor2Int').include() mb.free_functions('FastFToC').include() mb.free_functions('ClampToMsec').include() mb.free_functions('Ceil2Int').include() mb.free_functions('GetBarycentricCoords2D').include() mb.free_functions('QuickBoxSphereTest').include() mb.free_functions('QuickBoxIntersectTest').include() mb.free_functions('GammaToLinearFullRange').include() mb.free_functions('LinearToGammaFullRange').include() mb.free_functions('GammaToLinear').include() mb.free_functions('LinearToGamma').include() mb.free_functions('SrgbGammaToLinear').include() mb.free_functions('SrgbLinearToGamma').include() mb.free_functions('X360GammaToLinear').include() mb.free_functions('X360LinearToGamma').include() mb.free_functions('SrgbGammaTo360Gamma').include() mb.free_functions('LinearToVertexLight').include() mb.free_functions('LinearToLightmap').include() mb.free_functions('ColorClamp').include() mb.free_functions('ColorClampTruncate').include() mb.free_functions('Catmull_Rom_Spline').include() mb.free_functions('Catmull_Rom_Spline_Tangent').include() mb.free_functions('Catmull_Rom_Spline_Integral').include() mb.free_functions('Catmull_Rom_Spline_Integral').include() mb.free_functions('Catmull_Rom_Spline_Normalize').include() mb.free_functions('Catmull_Rom_Spline_Integral_Normalize').include() mb.free_functions('Catmull_Rom_Spline_NormalizeX').include() mb.free_functions('Catmull_Rom_Spline_NormalizeX').include() mb.free_functions('Hermite_Spline').include() #mb.free_functions('Hermite_SplineBasis').include() mb.free_functions('Kochanek_Bartels_Spline').include() mb.free_functions('Kochanek_Bartels_Spline_NormalizeX').include() mb.free_functions('Cubic_Spline').include() mb.free_functions('Cubic_Spline_NormalizeX').include() mb.free_functions('BSpline').include() mb.free_functions('BSpline_NormalizeX').include() mb.free_functions('Parabolic_Spline').include() mb.free_functions('Parabolic_Spline_NormalizeX').include() mb.free_functions('QuinticInterpolatingPolynomial').include() #mb.free_functions('GetInterpolationData').include() mb.free_functions('RangeCompressor').include() mb.free_functions('CalcSqrDistanceToAABB').include() mb.free_functions('CalcClosestPointOnAABB').include() mb.free_functions('CalcSqrDistAndClosestPointOnAABB').include() mb.free_functions('CalcDistanceToAABB').include() #mb.free_functions('CalcLineToLineIntersectionSegment').include() # TODO mb.free_functions('Approach').include() mb.free_functions('ApproachAngle').include() mb.free_functions('AngleDiff').include() mb.free_functions('AngleDistance').include() mb.free_functions('AngleNormalize').include() mb.free_functions('AngleNormalizePositive').include() mb.free_functions('AnglesAreEqual').include() mb.free_functions('RotationDeltaAxisAngle').include() mb.free_functions('RotationDelta').include() mb.free_functions('ComputeTrianglePlane').include() mb.free_functions('PolyFromPlane').include() mb.free_functions('ClipPolyToPlane').include() mb.free_functions('ClipPolyToPlane_Precise').include() mb.free_functions('CalcTriangleTangentSpace').include() mb.free_functions('TransformAABB').include() mb.free_functions('ITransformAABB').include() mb.free_functions('RotateAABB').include() mb.free_functions('IRotateAABB').include() mb.free_functions('MatrixTransformPlane').include() mb.free_functions('MatrixITransformPlane').include() mb.free_functions('CeilPow2').include() mb.free_functions('FloorPow2').include() mb.free_functions('RGBtoHSV').include() mb.free_functions('HSVtoRGB').include() # Vector.h functions mb.free_functions('VectorClear').include() mb.free_functions('VectorCopy').include() mb.free_functions('VectorAdd').include() mb.free_functions('VectorSubtract').include() mb.free_functions('VectorMultiply').include() mb.free_functions('VectorDivide').include() mb.free_functions('VectorScale').include() mb.free_functions('VectorMA').include() mb.free_functions('VectorsAreEqual').include() mb.free_functions('ComputeClosestPoint').include() mb.free_functions('VectorAbs').include() mb.free_functions('VectorLength').include() mb.free_functions('DotProduct').include() mb.free_functions('CrossProduct').include() mb.free_functions('VectorMin').include() mb.free_functions('VectorMax').include() mb.free_functions('VectorLerp').include() mb.free_functions('RandomVector').include() mb.free_functions('QAnglesAreEqual').include() #mb.free_functions('QAngleToAngularImpulse').include() #mb.free_functions('AngularImpulseToQAngle').include() mb.free_functions('VectorNormalize').include() mb.free_functions('VectorNormalizeFast').include() # Vector2d.h functions mb.free_functions('Vector2DClear').include() mb.free_functions('Vector2DCopy').include() mb.free_functions('Vector2DAdd').include() mb.free_functions('Vector2DSubtract').include() mb.free_functions('Vector2DMultiply').include() mb.free_functions('Vector2DDivide').include() mb.free_functions('Vector2DMA').include() mb.free_functions('Vector2DMin').include() mb.free_functions('Vector2DMax').include() mb.free_functions('Vector2DLength').include() mb.free_functions('DotProduct2D').include() mb.free_functions('Vector2DLerp').include() mb.free_functions('Vector2DNormalize').include() mb.free_functions('ComputeClosestPoint2D').include() # QAngle functions mb.free_function('RandomAngle').include() # VMatrix cls = mb.class_('VMatrix') cls.include() cls.mem_opers( '=').exclude() # Breaks debug mode and don't really need it cls.mem_opers('[]').exclude() cls.mem_funs('Base').exclude() cls.vars('m').exclude() if self.settings.branch == 'swarm': cls.mem_fun( 'As3x4', matchers.calldef_matcher_t(return_type=reference_t( declarated_t(mb.class_('matrix3x4_t'))))).exclude() cls.mem_fun( 'GetTranslation', matchers.calldef_matcher_t(return_type=reference_t( declarated_t(mb.class_('Vector'))))).exclude() cls.add_wrapper_code(str_vmatrix_wrapper % {'cls_name': 'VMatrix'}) cls.add_registration_code(str_reg % {'cls_name': 'VMatrix'}, False) mb.free_functions('MatrixSetIdentity').include() mb.free_functions('MatrixTranspose').include() mb.free_functions('MatrixCopy').include() mb.free_functions('MatrixMultiply').include() mb.free_functions('MatrixGetColumn').include() mb.free_functions('MatrixSetColumn').include() mb.free_functions('MatrixGetRow').include() mb.free_functions('MatrixSetRow').include() mb.free_functions('MatrixTranslate').include() mb.free_functions('MatrixBuildRotationAboutAxis').include() mb.free_functions('MatrixBuildRotateZ').include() mb.free_functions('MatrixRotate').include() mb.free_functions('MatrixFromAngles').include() mb.free_functions('MatrixToAngles').include() # Exclude if self.settings.branch not in ['swarm', 'source2013']: mb.vars('pfVectorNormalizeFast').exclude() mb.vars('pfVectorNormalize').exclude() mb.vars('pfInvRSquared').exclude() mb.vars('m_flMatVal').exclude() mb.vars('quat_identity').exclude( ) # <- Does not even exist except for a declaration? # Exclude some functions mb.mem_funs('Base').exclude( ) # Base gives a pointer to the address of the data. Not very python like. mb.free_functions('AllocTempVector').exclude() mb.class_('Vector2D').mem_funs('Cross').exclude() # Declaration only? mb.free_function('ConcatRotations').exclude() # Declaration only? # Remove any protected function mb.calldefs(matchers.access_type_matcher_t('protected')).exclude() # Remove any function with "float *" values # A lot of functions have two versions (or more), of which one takes "float *" arguments vec_t = mb.typedef('vec_t') excludetypes = [ pointer_t(float_t()), pointer_t(const_t(float_t())), pointer_t(declarated_t(vec_t)), pointer_t(const_t(declarated_t(vec_t))), ] mb.calldefs(calldef_withtypes(excludetypes)).exclude() # Silent warnings of generating class wrappers mb.classes().disable_warnings(messages.W1027) # Include functions with "float *" parameter. For these functions we should transform the "float *" parameter mb.free_functions('CalcClosestPointOnLine2D').include() mb.free_functions('CalcClosestPointOnLine2D').add_transformation( FT.output('t')) mb.free_functions('CalcDistanceToLine2D').include() mb.free_functions('CalcDistanceToLine2D').add_transformation( FT.output('t')) mb.free_functions('CalcDistanceSqrToLine2D').include() mb.free_functions('CalcDistanceSqrToLine2D').add_transformation( FT.output('t')) mb.free_functions('CalcClosestPointOnLineSegment2D').include() mb.free_functions( 'CalcClosestPointOnLineSegment2D').add_transformation( FT.output('t')) mb.free_functions('CalcDistanceToLineSegment2D').include() mb.free_functions('CalcDistanceToLineSegment2D').add_transformation( FT.output('t')) mb.free_functions('CalcDistanceSqrToLineSegment2D').include() mb.free_functions('CalcDistanceSqrToLineSegment2D').add_transformation( FT.output('t')) mb.free_functions('CalcClosestPointOnLine').include() mb.free_functions('CalcClosestPointOnLine').add_transformation( FT.output('t')) mb.free_functions('CalcDistanceToLine').include() mb.free_functions('CalcDistanceToLine').add_transformation( FT.output('t')) mb.free_functions('CalcDistanceSqrToLine').include() mb.free_functions('CalcDistanceSqrToLine').add_transformation( FT.output('t')) mb.free_functions('CalcClosestPointOnLineSegment').include() mb.free_functions('CalcClosestPointOnLineSegment').add_transformation( FT.output('t')) mb.free_functions('CalcDistanceToLineSegment').include() mb.free_functions('CalcDistanceToLineSegment').add_transformation( FT.output('t')) mb.free_functions('CalcDistanceSqrToLineSegment').include() mb.free_functions('CalcDistanceSqrToLineSegment').add_transformation( FT.output('t'))
def Parse(self, mb): mb.decls().exclude() meshcls = mb.class_('CRecastMesh') meshcls.include() meshcls.no_init = True meshcls.calldefs().exclude() meshcls.mem_funs().virtuality = 'not virtual' self.AddProperty(meshcls, 'agentradius', 'GetAgentRadius') self.AddProperty(meshcls, 'agentheight', 'GetAgentHeight') self.AddProperty(meshcls, 'cellsize', 'GetCellSize', 'SetCellSize') self.AddProperty(meshcls, 'cellheight', 'GetCellHeight', 'SetCellHeight') self.AddProperty(meshcls, 'tilesize', 'GetTileSize', 'SetTileSize') cls = mb.class_('CRecastMgr') cls.include() cls.no_init = True cls.calldefs().exclude() cls.mem_funs().virtuality = 'not virtual' cls.mem_fun('Init').include() cls.mem_fun('InitDefaultMeshes').include() cls.mem_fun('InsertMesh').include() cls.mem_fun('Reset').include() cls.mem_fun('Update').include() if self.isserver: cls.mem_fun('Build').include() cls.mem_fun('Save').include() cls.mem_fun('RebuildPartial').include() cls.mem_fun('AddEntRadiusObstacle').include() cls.mem_fun('AddEntBoxObstacle').include() cls.mem_fun('RemoveEntObstacles').include() cls.mem_funs('GetMesh').include() cls.mem_funs( 'GetMesh', matchers.calldef_matcher_t( return_type=pointer_t(declarated_t(meshcls))) ).call_policies = call_policies.return_value_policy( call_policies.reference_existing_object) cls.mem_funs('IsMeshLoaded').include() cls.mem_funs('FindBestMeshNameForRadiusHeight').include() cls.mem_funs('FindBestMeshNameForEntity').include() mb.free_function('RecastMgr').include() mb.free_function( 'RecastMgr').call_policies = call_policies.return_value_policy( call_policies.reference_existing_object) if self.isserver: cls = mb.class_('CMapMesh') cls.include() cls.no_init = True cls.calldefs().exclude() cls.mem_funs().virtuality = 'not virtual' cls.mem_fun('AddEntity').include() cls.mem_fun('AddEntityBBox').include()