1
0

BSAPIUnman.cs 86 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029
  1. /*
  2. * Copyright (c) Contributors, http://opensimulator.org/
  3. * See CONTRIBUTORS.TXT for a full list of copyright holders.
  4. *
  5. * Redistribution and use in source and binary forms, with or without
  6. * modification, are permitted provided that the following conditions are met:
  7. * * Redistributions of source code must retain the above copyright
  8. * notice, this list of conditions and the following disclaimer.
  9. * * Redistributions in binary form must reproduce the above copyrightD
  10. * notice, this list of conditions and the following disclaimer in the
  11. * documentation and/or other materials provided with the distribution.
  12. * * Neither the name of the OpenSimulator Project nor the
  13. * names of its contributors may be used to endorse or promote products
  14. * derived from this software without specific prior written permission.
  15. *
  16. * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
  17. * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  18. * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  19. * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
  20. * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  21. * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  22. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  23. * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  24. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  25. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  26. */
  27. using System;
  28. using System.Collections.Generic;
  29. using System.Reflection;
  30. using System.Runtime.InteropServices;
  31. using System.Security;
  32. using System.Text;
  33. using OpenSim.Framework;
  34. using OpenMetaverse;
  35. namespace OpenSim.Region.Physics.BulletSPlugin
  36. {
  37. public sealed class BSAPIUnman : BSAPITemplate
  38. {
  39. private sealed class BulletWorldUnman : BulletWorld
  40. {
  41. public IntPtr ptr;
  42. public BulletWorldUnman(uint id, BSScene physScene, IntPtr xx)
  43. : base(id, physScene)
  44. {
  45. ptr = xx;
  46. }
  47. }
  48. private sealed class BulletBodyUnman : BulletBody
  49. {
  50. public IntPtr ptr;
  51. public BulletBodyUnman(uint id, IntPtr xx)
  52. : base(id)
  53. {
  54. ptr = xx;
  55. }
  56. public override bool HasPhysicalBody
  57. {
  58. get { return ptr != IntPtr.Zero; }
  59. }
  60. public override void Clear()
  61. {
  62. ptr = IntPtr.Zero;
  63. }
  64. public override string AddrString
  65. {
  66. get { return ptr.ToString("X"); }
  67. }
  68. }
  69. private sealed class BulletShapeUnman : BulletShape
  70. {
  71. public IntPtr ptr;
  72. public BulletShapeUnman(IntPtr xx, BSPhysicsShapeType typ)
  73. : base()
  74. {
  75. ptr = xx;
  76. shapeType = typ;
  77. }
  78. public override bool HasPhysicalShape
  79. {
  80. get { return ptr != IntPtr.Zero; }
  81. }
  82. public override void Clear()
  83. {
  84. ptr = IntPtr.Zero;
  85. }
  86. public override BulletShape Clone()
  87. {
  88. return new BulletShapeUnman(ptr, shapeType);
  89. }
  90. public override bool ReferenceSame(BulletShape other)
  91. {
  92. BulletShapeUnman otheru = other as BulletShapeUnman;
  93. return (otheru != null) && (this.ptr == otheru.ptr);
  94. }
  95. public override string AddrString
  96. {
  97. get { return ptr.ToString("X"); }
  98. }
  99. }
  100. private sealed class BulletConstraintUnman : BulletConstraint
  101. {
  102. public BulletConstraintUnman(IntPtr xx) : base()
  103. {
  104. ptr = xx;
  105. }
  106. public IntPtr ptr;
  107. public override void Clear()
  108. {
  109. ptr = IntPtr.Zero;
  110. }
  111. public override bool HasPhysicalConstraint { get { return ptr != IntPtr.Zero; } }
  112. // Used for log messages for a unique display of the memory/object allocated to this instance
  113. public override string AddrString
  114. {
  115. get { return ptr.ToString("X"); }
  116. }
  117. }
  118. // We pin the memory passed between the managed and unmanaged code.
  119. GCHandle m_paramsHandle;
  120. private GCHandle m_collisionArrayPinnedHandle;
  121. private GCHandle m_updateArrayPinnedHandle;
  122. // Handle to the callback used by the unmanaged code to call into the managed code.
  123. // Used for debug logging.
  124. // Need to store the handle in a persistant variable so it won't be freed.
  125. private BSAPICPP.DebugLogCallback m_DebugLogCallbackHandle;
  126. private BSScene PhysicsScene { get; set; }
  127. public override string BulletEngineName { get { return "BulletUnmanaged"; } }
  128. public override string BulletEngineVersion { get; protected set; }
  129. public BSAPIUnman(string paramName, BSScene physScene)
  130. {
  131. PhysicsScene = physScene;
  132. // Do something fancy with the paramName to get the right DLL implementation
  133. // like "Bullet-2.80-OpenCL-Intel" loading the version for Intel based OpenCL implementation, etc.
  134. if (Util.IsWindows())
  135. Util.LoadArchSpecificWindowsDll("BulletSim.dll");
  136. // If not Windows, loading is performed by the
  137. // Mono loader as specified in
  138. // "bin/Physics/OpenSim.Region.Physics.BulletSPlugin.dll.config".
  139. }
  140. // Initialization and simulation
  141. public override BulletWorld Initialize(Vector3 maxPosition, ConfigurationParameters parms,
  142. int maxCollisions, ref CollisionDesc[] collisionArray,
  143. int maxUpdates, ref EntityProperties[] updateArray
  144. )
  145. {
  146. // Pin down the memory that will be used to pass object collisions and updates back from unmanaged code
  147. m_paramsHandle = GCHandle.Alloc(parms, GCHandleType.Pinned);
  148. m_collisionArrayPinnedHandle = GCHandle.Alloc(collisionArray, GCHandleType.Pinned);
  149. m_updateArrayPinnedHandle = GCHandle.Alloc(updateArray, GCHandleType.Pinned);
  150. // If Debug logging level, enable logging from the unmanaged code
  151. m_DebugLogCallbackHandle = null;
  152. if (BSScene.m_log.IsDebugEnabled && PhysicsScene.PhysicsLogging.Enabled)
  153. {
  154. BSScene.m_log.DebugFormat("{0}: Initialize: Setting debug callback for unmanaged code", BSScene.LogHeader);
  155. if (PhysicsScene.PhysicsLogging.Enabled)
  156. // The handle is saved in a variable to make sure it doesn't get freed after this call
  157. m_DebugLogCallbackHandle = new BSAPICPP.DebugLogCallback(BulletLoggerPhysLog);
  158. else
  159. m_DebugLogCallbackHandle = new BSAPICPP.DebugLogCallback(BulletLogger);
  160. }
  161. // Get the version of the DLL
  162. // TODO: this doesn't work yet. Something wrong with marshaling the returned string.
  163. // BulletEngineVersion = BulletSimAPI.GetVersion2();
  164. BulletEngineVersion = "";
  165. // Call the unmanaged code with the buffers and other information
  166. return new BulletWorldUnman(0, PhysicsScene, BSAPICPP.Initialize2(maxPosition, m_paramsHandle.AddrOfPinnedObject(),
  167. maxCollisions, m_collisionArrayPinnedHandle.AddrOfPinnedObject(),
  168. maxUpdates, m_updateArrayPinnedHandle.AddrOfPinnedObject(),
  169. m_DebugLogCallbackHandle));
  170. }
  171. // Called directly from unmanaged code so don't do much
  172. private void BulletLogger(string msg)
  173. {
  174. BSScene.m_log.Debug("[BULLETS UNMANAGED]:" + msg);
  175. }
  176. // Called directly from unmanaged code so don't do much
  177. private void BulletLoggerPhysLog(string msg)
  178. {
  179. PhysicsScene.DetailLog("[BULLETS UNMANAGED]:" + msg);
  180. }
  181. public override int PhysicsStep(BulletWorld world, float timeStep, int maxSubSteps, float fixedTimeStep,
  182. out int updatedEntityCount, out int collidersCount)
  183. {
  184. BulletWorldUnman worldu = world as BulletWorldUnman;
  185. return BSAPICPP.PhysicsStep2(worldu.ptr, timeStep, maxSubSteps, fixedTimeStep, out updatedEntityCount, out collidersCount);
  186. }
  187. public override void Shutdown(BulletWorld world)
  188. {
  189. BulletWorldUnman worldu = world as BulletWorldUnman;
  190. BSAPICPP.Shutdown2(worldu.ptr);
  191. if (m_paramsHandle.IsAllocated)
  192. {
  193. m_paramsHandle.Free();
  194. }
  195. if (m_collisionArrayPinnedHandle.IsAllocated)
  196. {
  197. m_collisionArrayPinnedHandle.Free();
  198. }
  199. if (m_updateArrayPinnedHandle.IsAllocated)
  200. {
  201. m_updateArrayPinnedHandle.Free();
  202. }
  203. }
  204. public override bool PushUpdate(BulletBody obj)
  205. {
  206. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  207. return BSAPICPP.PushUpdate2(bodyu.ptr);
  208. }
  209. public override bool UpdateParameter(BulletWorld world, uint localID, String parm, float value)
  210. {
  211. BulletWorldUnman worldu = world as BulletWorldUnman;
  212. return BSAPICPP.UpdateParameter2(worldu.ptr, localID, parm, value);
  213. }
  214. // =====================================================================================
  215. // Mesh, hull, shape and body creation helper routines
  216. public override BulletShape CreateMeshShape(BulletWorld world,
  217. int indicesCount, int[] indices,
  218. int verticesCount, float[] vertices)
  219. {
  220. BulletWorldUnman worldu = world as BulletWorldUnman;
  221. return new BulletShapeUnman(
  222. BSAPICPP.CreateMeshShape2(worldu.ptr, indicesCount, indices, verticesCount, vertices),
  223. BSPhysicsShapeType.SHAPE_MESH);
  224. }
  225. public override BulletShape CreateGImpactShape(BulletWorld world,
  226. int indicesCount, int[] indices,
  227. int verticesCount, float[] vertices)
  228. {
  229. BulletWorldUnman worldu = world as BulletWorldUnman;
  230. return new BulletShapeUnman(
  231. BSAPICPP.CreateGImpactShape2(worldu.ptr, indicesCount, indices, verticesCount, vertices),
  232. BSPhysicsShapeType.SHAPE_GIMPACT);
  233. }
  234. public override BulletShape CreateHullShape(BulletWorld world, int hullCount, float[] hulls)
  235. {
  236. BulletWorldUnman worldu = world as BulletWorldUnman;
  237. return new BulletShapeUnman(
  238. BSAPICPP.CreateHullShape2(worldu.ptr, hullCount, hulls),
  239. BSPhysicsShapeType.SHAPE_HULL);
  240. }
  241. public override BulletShape BuildHullShapeFromMesh(BulletWorld world, BulletShape meshShape, HACDParams parms)
  242. {
  243. BulletWorldUnman worldu = world as BulletWorldUnman;
  244. BulletShapeUnman shapeu = meshShape as BulletShapeUnman;
  245. return new BulletShapeUnman(
  246. BSAPICPP.BuildHullShapeFromMesh2(worldu.ptr, shapeu.ptr, parms),
  247. BSPhysicsShapeType.SHAPE_HULL);
  248. }
  249. public override BulletShape BuildConvexHullShapeFromMesh(BulletWorld world, BulletShape meshShape)
  250. {
  251. BulletWorldUnman worldu = world as BulletWorldUnman;
  252. BulletShapeUnman shapeu = meshShape as BulletShapeUnman;
  253. return new BulletShapeUnman(
  254. BSAPICPP.BuildConvexHullShapeFromMesh2(worldu.ptr, shapeu.ptr),
  255. BSPhysicsShapeType.SHAPE_CONVEXHULL);
  256. }
  257. public override BulletShape CreateConvexHullShape(BulletWorld world,
  258. int indicesCount, int[] indices,
  259. int verticesCount, float[] vertices)
  260. {
  261. BulletWorldUnman worldu = world as BulletWorldUnman;
  262. return new BulletShapeUnman(
  263. BSAPICPP.CreateConvexHullShape2(worldu.ptr, indicesCount, indices, verticesCount, vertices),
  264. BSPhysicsShapeType.SHAPE_CONVEXHULL);
  265. }
  266. public override BulletShape BuildNativeShape(BulletWorld world, ShapeData shapeData)
  267. {
  268. BulletWorldUnman worldu = world as BulletWorldUnman;
  269. return new BulletShapeUnman(BSAPICPP.BuildNativeShape2(worldu.ptr, shapeData), shapeData.Type);
  270. }
  271. public override bool IsNativeShape(BulletShape shape)
  272. {
  273. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  274. if (shapeu != null && shapeu.HasPhysicalShape)
  275. return BSAPICPP.IsNativeShape2(shapeu.ptr);
  276. return false;
  277. }
  278. public override void SetShapeCollisionMargin(BulletShape shape, float margin)
  279. {
  280. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  281. if (shapeu != null && shapeu.HasPhysicalShape)
  282. BSAPICPP.SetShapeCollisionMargin(shapeu.ptr, margin);
  283. }
  284. public override BulletShape BuildCapsuleShape(BulletWorld world, float radius, float height, Vector3 scale)
  285. {
  286. BulletWorldUnman worldu = world as BulletWorldUnman;
  287. return new BulletShapeUnman(
  288. BSAPICPP.BuildCapsuleShape2(worldu.ptr, radius, height, scale),
  289. BSPhysicsShapeType.SHAPE_CAPSULE);
  290. }
  291. public override BulletShape CreateCompoundShape(BulletWorld world, bool enableDynamicAabbTree)
  292. {
  293. BulletWorldUnman worldu = world as BulletWorldUnman;
  294. return new BulletShapeUnman(
  295. BSAPICPP.CreateCompoundShape2(worldu.ptr, enableDynamicAabbTree),
  296. BSPhysicsShapeType.SHAPE_COMPOUND);
  297. }
  298. public override int GetNumberOfCompoundChildren(BulletShape shape)
  299. {
  300. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  301. if (shapeu != null && shapeu.HasPhysicalShape)
  302. return BSAPICPP.GetNumberOfCompoundChildren2(shapeu.ptr);
  303. return 0;
  304. }
  305. public override void AddChildShapeToCompoundShape(BulletShape shape, BulletShape addShape, Vector3 pos, Quaternion rot)
  306. {
  307. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  308. BulletShapeUnman addShapeu = addShape as BulletShapeUnman;
  309. BSAPICPP.AddChildShapeToCompoundShape2(shapeu.ptr, addShapeu.ptr, pos, rot);
  310. }
  311. public override BulletShape GetChildShapeFromCompoundShapeIndex(BulletShape shape, int indx)
  312. {
  313. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  314. return new BulletShapeUnman(BSAPICPP.GetChildShapeFromCompoundShapeIndex2(shapeu.ptr, indx), BSPhysicsShapeType.SHAPE_UNKNOWN);
  315. }
  316. public override BulletShape RemoveChildShapeFromCompoundShapeIndex(BulletShape shape, int indx)
  317. {
  318. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  319. return new BulletShapeUnman(BSAPICPP.RemoveChildShapeFromCompoundShapeIndex2(shapeu.ptr, indx), BSPhysicsShapeType.SHAPE_UNKNOWN);
  320. }
  321. public override void RemoveChildShapeFromCompoundShape(BulletShape shape, BulletShape removeShape)
  322. {
  323. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  324. BulletShapeUnman removeShapeu = removeShape as BulletShapeUnman;
  325. BSAPICPP.RemoveChildShapeFromCompoundShape2(shapeu.ptr, removeShapeu.ptr);
  326. }
  327. public override void UpdateChildTransform(BulletShape pShape, int childIndex, Vector3 pos, Quaternion rot, bool shouldRecalculateLocalAabb)
  328. {
  329. BulletShapeUnman shapeu = pShape as BulletShapeUnman;
  330. BSAPICPP.UpdateChildTransform2(shapeu.ptr, childIndex, pos, rot, shouldRecalculateLocalAabb);
  331. }
  332. public override void RecalculateCompoundShapeLocalAabb(BulletShape shape)
  333. {
  334. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  335. BSAPICPP.RecalculateCompoundShapeLocalAabb2(shapeu.ptr);
  336. }
  337. public override BulletShape DuplicateCollisionShape(BulletWorld world, BulletShape srcShape, uint id)
  338. {
  339. BulletWorldUnman worldu = world as BulletWorldUnman;
  340. BulletShapeUnman srcShapeu = srcShape as BulletShapeUnman;
  341. return new BulletShapeUnman(BSAPICPP.DuplicateCollisionShape2(worldu.ptr, srcShapeu.ptr, id), srcShape.shapeType);
  342. }
  343. public override bool DeleteCollisionShape(BulletWorld world, BulletShape shape)
  344. {
  345. BulletWorldUnman worldu = world as BulletWorldUnman;
  346. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  347. return BSAPICPP.DeleteCollisionShape2(worldu.ptr, shapeu.ptr);
  348. }
  349. public override CollisionObjectTypes GetBodyType(BulletBody obj)
  350. {
  351. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  352. return (CollisionObjectTypes)BSAPICPP.GetBodyType2(bodyu.ptr);
  353. }
  354. public override BulletBody CreateBodyFromShape(BulletWorld world, BulletShape shape, uint id, Vector3 pos, Quaternion rot)
  355. {
  356. BulletWorldUnman worldu = world as BulletWorldUnman;
  357. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  358. return new BulletBodyUnman(id, BSAPICPP.CreateBodyFromShape2(worldu.ptr, shapeu.ptr, id, pos, rot));
  359. }
  360. public override BulletBody CreateBodyWithDefaultMotionState(BulletShape shape, uint id, Vector3 pos, Quaternion rot)
  361. {
  362. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  363. return new BulletBodyUnman(id, BSAPICPP.CreateBodyWithDefaultMotionState2(shapeu.ptr, id, pos, rot));
  364. }
  365. public override BulletBody CreateGhostFromShape(BulletWorld world, BulletShape shape, uint id, Vector3 pos, Quaternion rot)
  366. {
  367. BulletWorldUnman worldu = world as BulletWorldUnman;
  368. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  369. return new BulletBodyUnman(id, BSAPICPP.CreateGhostFromShape2(worldu.ptr, shapeu.ptr, id, pos, rot));
  370. }
  371. public override void DestroyObject(BulletWorld world, BulletBody obj)
  372. {
  373. BulletWorldUnman worldu = world as BulletWorldUnman;
  374. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  375. BSAPICPP.DestroyObject2(worldu.ptr, bodyu.ptr);
  376. }
  377. // =====================================================================================
  378. // Terrain creation and helper routines
  379. public override BulletShape CreateGroundPlaneShape(uint id, float height, float collisionMargin)
  380. {
  381. return new BulletShapeUnman(BSAPICPP.CreateGroundPlaneShape2(id, height, collisionMargin), BSPhysicsShapeType.SHAPE_GROUNDPLANE);
  382. }
  383. public override BulletShape CreateTerrainShape(uint id, Vector3 size, float minHeight, float maxHeight, float[] heightMap,
  384. float scaleFactor, float collisionMargin)
  385. {
  386. return new BulletShapeUnman(BSAPICPP.CreateTerrainShape2(id, size, minHeight, maxHeight, heightMap, scaleFactor, collisionMargin),
  387. BSPhysicsShapeType.SHAPE_TERRAIN);
  388. }
  389. // =====================================================================================
  390. // Constraint creation and helper routines
  391. public override BulletConstraint Create6DofConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2,
  392. Vector3 frame1loc, Quaternion frame1rot,
  393. Vector3 frame2loc, Quaternion frame2rot,
  394. bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies)
  395. {
  396. BulletWorldUnman worldu = world as BulletWorldUnman;
  397. BulletBodyUnman bodyu1 = obj1 as BulletBodyUnman;
  398. BulletBodyUnman bodyu2 = obj2 as BulletBodyUnman;
  399. return new BulletConstraintUnman(BSAPICPP.Create6DofConstraint2(worldu.ptr, bodyu1.ptr, bodyu2.ptr, frame1loc, frame1rot,
  400. frame2loc, frame2rot, useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies));
  401. }
  402. public override BulletConstraint Create6DofConstraintToPoint(BulletWorld world, BulletBody obj1, BulletBody obj2,
  403. Vector3 joinPoint,
  404. bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies)
  405. {
  406. BulletWorldUnman worldu = world as BulletWorldUnman;
  407. BulletBodyUnman bodyu1 = obj1 as BulletBodyUnman;
  408. BulletBodyUnman bodyu2 = obj2 as BulletBodyUnman;
  409. return new BulletConstraintUnman(BSAPICPP.Create6DofConstraintToPoint2(worldu.ptr, bodyu1.ptr, bodyu2.ptr,
  410. joinPoint, useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies));
  411. }
  412. public override BulletConstraint Create6DofConstraintFixed(BulletWorld world, BulletBody obj1,
  413. Vector3 frameInBloc, Quaternion frameInBrot,
  414. bool useLinearReferenceFrameB, bool disableCollisionsBetweenLinkedBodies)
  415. {
  416. BulletWorldUnman worldu = world as BulletWorldUnman;
  417. BulletBodyUnman bodyu1 = obj1 as BulletBodyUnman;
  418. return new BulletConstraintUnman(BSAPICPP.Create6DofConstraintFixed2(worldu.ptr, bodyu1.ptr,
  419. frameInBloc, frameInBrot, useLinearReferenceFrameB, disableCollisionsBetweenLinkedBodies));
  420. }
  421. public override BulletConstraint Create6DofSpringConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2,
  422. Vector3 frame1loc, Quaternion frame1rot,
  423. Vector3 frame2loc, Quaternion frame2rot,
  424. bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies)
  425. {
  426. BulletWorldUnman worldu = world as BulletWorldUnman;
  427. BulletBodyUnman bodyu1 = obj1 as BulletBodyUnman;
  428. BulletBodyUnman bodyu2 = obj2 as BulletBodyUnman;
  429. return new BulletConstraintUnman(BSAPICPP.Create6DofSpringConstraint2(worldu.ptr, bodyu1.ptr, bodyu2.ptr, frame1loc, frame1rot,
  430. frame2loc, frame2rot, useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies));
  431. }
  432. public override BulletConstraint CreateHingeConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2,
  433. Vector3 pivotinA, Vector3 pivotinB,
  434. Vector3 axisInA, Vector3 axisInB,
  435. bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies)
  436. {
  437. BulletWorldUnman worldu = world as BulletWorldUnman;
  438. BulletBodyUnman bodyu1 = obj1 as BulletBodyUnman;
  439. BulletBodyUnman bodyu2 = obj2 as BulletBodyUnman;
  440. return new BulletConstraintUnman(BSAPICPP.CreateHingeConstraint2(worldu.ptr, bodyu1.ptr, bodyu2.ptr,
  441. pivotinA, pivotinB, axisInA, axisInB, useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies));
  442. }
  443. public override BulletConstraint CreateSliderConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2,
  444. Vector3 frame1loc, Quaternion frame1rot,
  445. Vector3 frame2loc, Quaternion frame2rot,
  446. bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies)
  447. {
  448. BulletWorldUnman worldu = world as BulletWorldUnman;
  449. BulletBodyUnman bodyu1 = obj1 as BulletBodyUnman;
  450. BulletBodyUnman bodyu2 = obj2 as BulletBodyUnman;
  451. return new BulletConstraintUnman(BSAPICPP.CreateSliderConstraint2(worldu.ptr, bodyu1.ptr, bodyu2.ptr, frame1loc, frame1rot,
  452. frame2loc, frame2rot, useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies));
  453. }
  454. public override BulletConstraint CreateConeTwistConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2,
  455. Vector3 frame1loc, Quaternion frame1rot,
  456. Vector3 frame2loc, Quaternion frame2rot,
  457. bool disableCollisionsBetweenLinkedBodies)
  458. {
  459. BulletWorldUnman worldu = world as BulletWorldUnman;
  460. BulletBodyUnman bodyu1 = obj1 as BulletBodyUnman;
  461. BulletBodyUnman bodyu2 = obj2 as BulletBodyUnman;
  462. return new BulletConstraintUnman(BSAPICPP.CreateConeTwistConstraint2(worldu.ptr, bodyu1.ptr, bodyu2.ptr, frame1loc, frame1rot,
  463. frame2loc, frame2rot, disableCollisionsBetweenLinkedBodies));
  464. }
  465. public override BulletConstraint CreateGearConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2,
  466. Vector3 axisInA, Vector3 axisInB,
  467. float ratio, bool disableCollisionsBetweenLinkedBodies)
  468. {
  469. BulletWorldUnman worldu = world as BulletWorldUnman;
  470. BulletBodyUnman bodyu1 = obj1 as BulletBodyUnman;
  471. BulletBodyUnman bodyu2 = obj2 as BulletBodyUnman;
  472. return new BulletConstraintUnman(BSAPICPP.CreateGearConstraint2(worldu.ptr, bodyu1.ptr, bodyu2.ptr, axisInA, axisInB,
  473. ratio, disableCollisionsBetweenLinkedBodies));
  474. }
  475. public override BulletConstraint CreatePoint2PointConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2,
  476. Vector3 pivotInA, Vector3 pivotInB,
  477. bool disableCollisionsBetweenLinkedBodies)
  478. {
  479. BulletWorldUnman worldu = world as BulletWorldUnman;
  480. BulletBodyUnman bodyu1 = obj1 as BulletBodyUnman;
  481. BulletBodyUnman bodyu2 = obj2 as BulletBodyUnman;
  482. return new BulletConstraintUnman(BSAPICPP.CreatePoint2PointConstraint2(worldu.ptr, bodyu1.ptr, bodyu2.ptr, pivotInA, pivotInB,
  483. disableCollisionsBetweenLinkedBodies));
  484. }
  485. public override void SetConstraintEnable(BulletConstraint constrain, float numericTrueFalse)
  486. {
  487. BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
  488. BSAPICPP.SetConstraintEnable2(constrainu.ptr, numericTrueFalse);
  489. }
  490. public override void SetConstraintNumSolverIterations(BulletConstraint constrain, float iterations)
  491. {
  492. BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
  493. BSAPICPP.SetConstraintNumSolverIterations2(constrainu.ptr, iterations);
  494. }
  495. public override bool SetFrames(BulletConstraint constrain,
  496. Vector3 frameA, Quaternion frameArot, Vector3 frameB, Quaternion frameBrot)
  497. {
  498. BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
  499. return BSAPICPP.SetFrames2(constrainu.ptr, frameA, frameArot, frameB, frameBrot);
  500. }
  501. public override bool SetLinearLimits(BulletConstraint constrain, Vector3 low, Vector3 hi)
  502. {
  503. BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
  504. return BSAPICPP.SetLinearLimits2(constrainu.ptr, low, hi);
  505. }
  506. public override bool SetAngularLimits(BulletConstraint constrain, Vector3 low, Vector3 hi)
  507. {
  508. BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
  509. return BSAPICPP.SetAngularLimits2(constrainu.ptr, low, hi);
  510. }
  511. public override bool UseFrameOffset(BulletConstraint constrain, float enable)
  512. {
  513. BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
  514. return BSAPICPP.UseFrameOffset2(constrainu.ptr, enable);
  515. }
  516. public override bool TranslationalLimitMotor(BulletConstraint constrain, float enable, float targetVel, float maxMotorForce)
  517. {
  518. BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
  519. return BSAPICPP.TranslationalLimitMotor2(constrainu.ptr, enable, targetVel, maxMotorForce);
  520. }
  521. public override bool SetBreakingImpulseThreshold(BulletConstraint constrain, float threshold)
  522. {
  523. BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
  524. return BSAPICPP.SetBreakingImpulseThreshold2(constrainu.ptr, threshold);
  525. }
  526. public override bool CalculateTransforms(BulletConstraint constrain)
  527. {
  528. BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
  529. return BSAPICPP.CalculateTransforms2(constrainu.ptr);
  530. }
  531. public override bool SetConstraintParam(BulletConstraint constrain, ConstraintParams paramIndex, float value, ConstraintParamAxis axis)
  532. {
  533. BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
  534. return BSAPICPP.SetConstraintParam2(constrainu.ptr, paramIndex, value, axis);
  535. }
  536. public override bool DestroyConstraint(BulletWorld world, BulletConstraint constrain)
  537. {
  538. BulletWorldUnman worldu = world as BulletWorldUnman;
  539. BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
  540. return BSAPICPP.DestroyConstraint2(worldu.ptr, constrainu.ptr);
  541. }
  542. // =====================================================================================
  543. // btCollisionWorld entries
  544. public override void UpdateSingleAabb(BulletWorld world, BulletBody obj)
  545. {
  546. BulletWorldUnman worldu = world as BulletWorldUnman;
  547. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  548. BSAPICPP.UpdateSingleAabb2(worldu.ptr, bodyu.ptr);
  549. }
  550. public override void UpdateAabbs(BulletWorld world)
  551. {
  552. BulletWorldUnman worldu = world as BulletWorldUnman;
  553. BSAPICPP.UpdateAabbs2(worldu.ptr);
  554. }
  555. public override bool GetForceUpdateAllAabbs(BulletWorld world)
  556. {
  557. BulletWorldUnman worldu = world as BulletWorldUnman;
  558. return BSAPICPP.GetForceUpdateAllAabbs2(worldu.ptr);
  559. }
  560. public override void SetForceUpdateAllAabbs(BulletWorld world, bool force)
  561. {
  562. BulletWorldUnman worldu = world as BulletWorldUnman;
  563. BSAPICPP.SetForceUpdateAllAabbs2(worldu.ptr, force);
  564. }
  565. // =====================================================================================
  566. // btDynamicsWorld entries
  567. public override bool AddObjectToWorld(BulletWorld world, BulletBody obj)
  568. {
  569. BulletWorldUnman worldu = world as BulletWorldUnman;
  570. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  571. // Bullet resets several variables when an object is added to the world.
  572. // Gravity is reset to world default depending on the static/dynamic
  573. // type. Of course, the collision flags in the broadphase proxy are initialized to default.
  574. Vector3 origGrav = BSAPICPP.GetGravity2(bodyu.ptr);
  575. bool ret = BSAPICPP.AddObjectToWorld2(worldu.ptr, bodyu.ptr);
  576. if (ret)
  577. {
  578. BSAPICPP.SetGravity2(bodyu.ptr, origGrav);
  579. obj.ApplyCollisionMask(world.physicsScene);
  580. }
  581. return ret;
  582. }
  583. public override bool RemoveObjectFromWorld(BulletWorld world, BulletBody obj)
  584. {
  585. BulletWorldUnman worldu = world as BulletWorldUnman;
  586. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  587. return BSAPICPP.RemoveObjectFromWorld2(worldu.ptr, bodyu.ptr);
  588. }
  589. public override bool AddConstraintToWorld(BulletWorld world, BulletConstraint constrain, bool disableCollisionsBetweenLinkedObjects)
  590. {
  591. BulletWorldUnman worldu = world as BulletWorldUnman;
  592. BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
  593. return BSAPICPP.AddConstraintToWorld2(worldu.ptr, constrainu.ptr, disableCollisionsBetweenLinkedObjects);
  594. }
  595. public override bool RemoveConstraintFromWorld(BulletWorld world, BulletConstraint constrain)
  596. {
  597. BulletWorldUnman worldu = world as BulletWorldUnman;
  598. BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
  599. return BSAPICPP.RemoveConstraintFromWorld2(worldu.ptr, constrainu.ptr);
  600. }
  601. // =====================================================================================
  602. // btCollisionObject entries
  603. public override Vector3 GetAnisotripicFriction(BulletConstraint constrain)
  604. {
  605. BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
  606. return BSAPICPP.GetAnisotripicFriction2(constrainu.ptr);
  607. }
  608. public override Vector3 SetAnisotripicFriction(BulletConstraint constrain, Vector3 frict)
  609. {
  610. BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
  611. return BSAPICPP.SetAnisotripicFriction2(constrainu.ptr, frict);
  612. }
  613. public override bool HasAnisotripicFriction(BulletConstraint constrain)
  614. {
  615. BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
  616. return BSAPICPP.HasAnisotripicFriction2(constrainu.ptr);
  617. }
  618. public override void SetContactProcessingThreshold(BulletBody obj, float val)
  619. {
  620. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  621. BSAPICPP.SetContactProcessingThreshold2(bodyu.ptr, val);
  622. }
  623. public override float GetContactProcessingThreshold(BulletBody obj)
  624. {
  625. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  626. return BSAPICPP.GetContactProcessingThreshold2(bodyu.ptr);
  627. }
  628. public override bool IsStaticObject(BulletBody obj)
  629. {
  630. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  631. return BSAPICPP.IsStaticObject2(bodyu.ptr);
  632. }
  633. public override bool IsKinematicObject(BulletBody obj)
  634. {
  635. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  636. return BSAPICPP.IsKinematicObject2(bodyu.ptr);
  637. }
  638. public override bool IsStaticOrKinematicObject(BulletBody obj)
  639. {
  640. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  641. return BSAPICPP.IsStaticOrKinematicObject2(bodyu.ptr);
  642. }
  643. public override bool HasContactResponse(BulletBody obj)
  644. {
  645. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  646. return BSAPICPP.HasContactResponse2(bodyu.ptr);
  647. }
  648. public override void SetCollisionShape(BulletWorld world, BulletBody obj, BulletShape shape)
  649. {
  650. BulletWorldUnman worldu = world as BulletWorldUnman;
  651. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  652. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  653. if (worldu != null && bodyu != null)
  654. {
  655. // Special case to allow the caller to zero out the reference to any physical shape
  656. if (shapeu != null)
  657. BSAPICPP.SetCollisionShape2(worldu.ptr, bodyu.ptr, shapeu.ptr);
  658. else
  659. BSAPICPP.SetCollisionShape2(worldu.ptr, bodyu.ptr, IntPtr.Zero);
  660. }
  661. }
  662. public override BulletShape GetCollisionShape(BulletBody obj)
  663. {
  664. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  665. return new BulletShapeUnman(BSAPICPP.GetCollisionShape2(bodyu.ptr), BSPhysicsShapeType.SHAPE_UNKNOWN);
  666. }
  667. public override int GetActivationState(BulletBody obj)
  668. {
  669. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  670. return BSAPICPP.GetActivationState2(bodyu.ptr);
  671. }
  672. public override void SetActivationState(BulletBody obj, int state)
  673. {
  674. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  675. BSAPICPP.SetActivationState2(bodyu.ptr, state);
  676. }
  677. public override void SetDeactivationTime(BulletBody obj, float dtime)
  678. {
  679. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  680. BSAPICPP.SetDeactivationTime2(bodyu.ptr, dtime);
  681. }
  682. public override float GetDeactivationTime(BulletBody obj)
  683. {
  684. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  685. return BSAPICPP.GetDeactivationTime2(bodyu.ptr);
  686. }
  687. public override void ForceActivationState(BulletBody obj, ActivationState state)
  688. {
  689. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  690. BSAPICPP.ForceActivationState2(bodyu.ptr, state);
  691. }
  692. public override void Activate(BulletBody obj, bool forceActivation)
  693. {
  694. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  695. BSAPICPP.Activate2(bodyu.ptr, forceActivation);
  696. }
  697. public override bool IsActive(BulletBody obj)
  698. {
  699. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  700. return BSAPICPP.IsActive2(bodyu.ptr);
  701. }
  702. public override void SetRestitution(BulletBody obj, float val)
  703. {
  704. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  705. BSAPICPP.SetRestitution2(bodyu.ptr, val);
  706. }
  707. public override float GetRestitution(BulletBody obj)
  708. {
  709. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  710. return BSAPICPP.GetRestitution2(bodyu.ptr);
  711. }
  712. public override void SetFriction(BulletBody obj, float val)
  713. {
  714. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  715. BSAPICPP.SetFriction2(bodyu.ptr, val);
  716. }
  717. public override float GetFriction(BulletBody obj)
  718. {
  719. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  720. return BSAPICPP.GetFriction2(bodyu.ptr);
  721. }
  722. public override Vector3 GetPosition(BulletBody obj)
  723. {
  724. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  725. return BSAPICPP.GetPosition2(bodyu.ptr);
  726. }
  727. public override Quaternion GetOrientation(BulletBody obj)
  728. {
  729. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  730. return BSAPICPP.GetOrientation2(bodyu.ptr);
  731. }
  732. public override void SetTranslation(BulletBody obj, Vector3 position, Quaternion rotation)
  733. {
  734. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  735. BSAPICPP.SetTranslation2(bodyu.ptr, position, rotation);
  736. }
  737. /*
  738. public override IntPtr GetBroadphaseHandle(BulletBody obj)
  739. {
  740. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  741. return BSAPICPP.GetBroadphaseHandle2(bodyu.ptr);
  742. }
  743. public override void SetBroadphaseHandle(BulletBody obj, IntPtr handle)
  744. {
  745. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  746. BSAPICPP.SetUserPointer2(bodyu.ptr, handle);
  747. }
  748. */
  749. public override void SetInterpolationLinearVelocity(BulletBody obj, Vector3 vel)
  750. {
  751. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  752. BSAPICPP.SetInterpolationLinearVelocity2(bodyu.ptr, vel);
  753. }
  754. public override void SetInterpolationAngularVelocity(BulletBody obj, Vector3 vel)
  755. {
  756. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  757. BSAPICPP.SetInterpolationAngularVelocity2(bodyu.ptr, vel);
  758. }
  759. public override void SetInterpolationVelocity(BulletBody obj, Vector3 linearVel, Vector3 angularVel)
  760. {
  761. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  762. BSAPICPP.SetInterpolationVelocity2(bodyu.ptr, linearVel, angularVel);
  763. }
  764. public override float GetHitFraction(BulletBody obj)
  765. {
  766. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  767. return BSAPICPP.GetHitFraction2(bodyu.ptr);
  768. }
  769. public override void SetHitFraction(BulletBody obj, float val)
  770. {
  771. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  772. BSAPICPP.SetHitFraction2(bodyu.ptr, val);
  773. }
  774. public override CollisionFlags GetCollisionFlags(BulletBody obj)
  775. {
  776. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  777. return BSAPICPP.GetCollisionFlags2(bodyu.ptr);
  778. }
  779. public override CollisionFlags SetCollisionFlags(BulletBody obj, CollisionFlags flags)
  780. {
  781. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  782. return BSAPICPP.SetCollisionFlags2(bodyu.ptr, flags);
  783. }
  784. public override CollisionFlags AddToCollisionFlags(BulletBody obj, CollisionFlags flags)
  785. {
  786. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  787. return BSAPICPP.AddToCollisionFlags2(bodyu.ptr, flags);
  788. }
  789. public override CollisionFlags RemoveFromCollisionFlags(BulletBody obj, CollisionFlags flags)
  790. {
  791. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  792. return BSAPICPP.RemoveFromCollisionFlags2(bodyu.ptr, flags);
  793. }
  794. public override float GetCcdMotionThreshold(BulletBody obj)
  795. {
  796. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  797. return BSAPICPP.GetCcdMotionThreshold2(bodyu.ptr);
  798. }
  799. public override void SetCcdMotionThreshold(BulletBody obj, float val)
  800. {
  801. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  802. BSAPICPP.SetCcdMotionThreshold2(bodyu.ptr, val);
  803. }
  804. public override float GetCcdSweptSphereRadius(BulletBody obj)
  805. {
  806. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  807. return BSAPICPP.GetCcdSweptSphereRadius2(bodyu.ptr);
  808. }
  809. public override void SetCcdSweptSphereRadius(BulletBody obj, float val)
  810. {
  811. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  812. BSAPICPP.SetCcdSweptSphereRadius2(bodyu.ptr, val);
  813. }
  814. public override IntPtr GetUserPointer(BulletBody obj)
  815. {
  816. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  817. return BSAPICPP.GetUserPointer2(bodyu.ptr);
  818. }
  819. public override void SetUserPointer(BulletBody obj, IntPtr val)
  820. {
  821. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  822. BSAPICPP.SetUserPointer2(bodyu.ptr, val);
  823. }
  824. // =====================================================================================
  825. // btRigidBody entries
  826. public override void ApplyGravity(BulletBody obj)
  827. {
  828. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  829. BSAPICPP.ApplyGravity2(bodyu.ptr);
  830. }
  831. public override void SetGravity(BulletBody obj, Vector3 val)
  832. {
  833. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  834. BSAPICPP.SetGravity2(bodyu.ptr, val);
  835. }
  836. public override Vector3 GetGravity(BulletBody obj)
  837. {
  838. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  839. return BSAPICPP.GetGravity2(bodyu.ptr);
  840. }
  841. public override void SetDamping(BulletBody obj, float lin_damping, float ang_damping)
  842. {
  843. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  844. BSAPICPP.SetDamping2(bodyu.ptr, lin_damping, ang_damping);
  845. }
  846. public override void SetLinearDamping(BulletBody obj, float lin_damping)
  847. {
  848. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  849. BSAPICPP.SetLinearDamping2(bodyu.ptr, lin_damping);
  850. }
  851. public override void SetAngularDamping(BulletBody obj, float ang_damping)
  852. {
  853. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  854. BSAPICPP.SetAngularDamping2(bodyu.ptr, ang_damping);
  855. }
  856. public override float GetLinearDamping(BulletBody obj)
  857. {
  858. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  859. return BSAPICPP.GetLinearDamping2(bodyu.ptr);
  860. }
  861. public override float GetAngularDamping(BulletBody obj)
  862. {
  863. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  864. return BSAPICPP.GetAngularDamping2(bodyu.ptr);
  865. }
  866. public override float GetLinearSleepingThreshold(BulletBody obj)
  867. {
  868. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  869. return BSAPICPP.GetLinearSleepingThreshold2(bodyu.ptr);
  870. }
  871. public override void ApplyDamping(BulletBody obj, float timeStep)
  872. {
  873. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  874. BSAPICPP.ApplyDamping2(bodyu.ptr, timeStep);
  875. }
  876. public override void SetMassProps(BulletBody obj, float mass, Vector3 inertia)
  877. {
  878. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  879. BSAPICPP.SetMassProps2(bodyu.ptr, mass, inertia);
  880. }
  881. public override Vector3 GetLinearFactor(BulletBody obj)
  882. {
  883. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  884. return BSAPICPP.GetLinearFactor2(bodyu.ptr);
  885. }
  886. public override void SetLinearFactor(BulletBody obj, Vector3 factor)
  887. {
  888. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  889. BSAPICPP.SetLinearFactor2(bodyu.ptr, factor);
  890. }
  891. public override void SetCenterOfMassByPosRot(BulletBody obj, Vector3 pos, Quaternion rot)
  892. {
  893. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  894. BSAPICPP.SetCenterOfMassByPosRot2(bodyu.ptr, pos, rot);
  895. }
  896. // Add a force to the object as if its mass is one.
  897. // Deep down in Bullet: m_totalForce += force*m_linearFactor;
  898. public override void ApplyCentralForce(BulletBody obj, Vector3 force)
  899. {
  900. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  901. BSAPICPP.ApplyCentralForce2(bodyu.ptr, force);
  902. }
  903. // Set the force being applied to the object as if its mass is one.
  904. public override void SetObjectForce(BulletBody obj, Vector3 force)
  905. {
  906. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  907. BSAPICPP.SetObjectForce2(bodyu.ptr, force);
  908. }
  909. public override Vector3 GetTotalForce(BulletBody obj)
  910. {
  911. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  912. return BSAPICPP.GetTotalForce2(bodyu.ptr);
  913. }
  914. public override Vector3 GetTotalTorque(BulletBody obj)
  915. {
  916. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  917. return BSAPICPP.GetTotalTorque2(bodyu.ptr);
  918. }
  919. public override Vector3 GetInvInertiaDiagLocal(BulletBody obj)
  920. {
  921. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  922. return BSAPICPP.GetInvInertiaDiagLocal2(bodyu.ptr);
  923. }
  924. public override void SetInvInertiaDiagLocal(BulletBody obj, Vector3 inert)
  925. {
  926. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  927. BSAPICPP.SetInvInertiaDiagLocal2(bodyu.ptr, inert);
  928. }
  929. public override void SetSleepingThresholds(BulletBody obj, float lin_threshold, float ang_threshold)
  930. {
  931. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  932. BSAPICPP.SetSleepingThresholds2(bodyu.ptr, lin_threshold, ang_threshold);
  933. }
  934. // Deep down in Bullet: m_totalTorque += torque*m_angularFactor;
  935. public override void ApplyTorque(BulletBody obj, Vector3 torque)
  936. {
  937. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  938. BSAPICPP.ApplyTorque2(bodyu.ptr, torque);
  939. }
  940. // Apply force at the given point. Will add torque to the object.
  941. // Deep down in Bullet: applyCentralForce(force);
  942. // applyTorque(rel_pos.cross(force*m_linearFactor));
  943. public override void ApplyForce(BulletBody obj, Vector3 force, Vector3 pos)
  944. {
  945. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  946. BSAPICPP.ApplyForce2(bodyu.ptr, force, pos);
  947. }
  948. // Apply impulse to the object. Same as "ApplycentralForce" but force scaled by object's mass.
  949. // Deep down in Bullet: m_linearVelocity += impulse *m_linearFactor * m_inverseMass;
  950. public override void ApplyCentralImpulse(BulletBody obj, Vector3 imp)
  951. {
  952. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  953. BSAPICPP.ApplyCentralImpulse2(bodyu.ptr, imp);
  954. }
  955. // Apply impulse to the object's torque. Force is scaled by object's mass.
  956. // Deep down in Bullet: m_angularVelocity += m_invInertiaTensorWorld * torque * m_angularFactor;
  957. public override void ApplyTorqueImpulse(BulletBody obj, Vector3 imp)
  958. {
  959. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  960. BSAPICPP.ApplyTorqueImpulse2(bodyu.ptr, imp);
  961. }
  962. // Apply impulse at the point given. For is scaled by object's mass and effects both linear and angular forces.
  963. // Deep down in Bullet: applyCentralImpulse(impulse);
  964. // applyTorqueImpulse(rel_pos.cross(impulse*m_linearFactor));
  965. public override void ApplyImpulse(BulletBody obj, Vector3 imp, Vector3 pos)
  966. {
  967. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  968. BSAPICPP.ApplyImpulse2(bodyu.ptr, imp, pos);
  969. }
  970. public override void ClearForces(BulletBody obj)
  971. {
  972. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  973. BSAPICPP.ClearForces2(bodyu.ptr);
  974. }
  975. public override void ClearAllForces(BulletBody obj)
  976. {
  977. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  978. BSAPICPP.ClearAllForces2(bodyu.ptr);
  979. }
  980. public override void UpdateInertiaTensor(BulletBody obj)
  981. {
  982. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  983. BSAPICPP.UpdateInertiaTensor2(bodyu.ptr);
  984. }
  985. public override Vector3 GetLinearVelocity(BulletBody obj)
  986. {
  987. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  988. return BSAPICPP.GetLinearVelocity2(bodyu.ptr);
  989. }
  990. public override Vector3 GetAngularVelocity(BulletBody obj)
  991. {
  992. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  993. return BSAPICPP.GetAngularVelocity2(bodyu.ptr);
  994. }
  995. public override void SetLinearVelocity(BulletBody obj, Vector3 vel)
  996. {
  997. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  998. BSAPICPP.SetLinearVelocity2(bodyu.ptr, vel);
  999. }
  1000. public override void SetAngularVelocity(BulletBody obj, Vector3 angularVelocity)
  1001. {
  1002. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  1003. BSAPICPP.SetAngularVelocity2(bodyu.ptr, angularVelocity);
  1004. }
  1005. public override Vector3 GetVelocityInLocalPoint(BulletBody obj, Vector3 pos)
  1006. {
  1007. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  1008. return BSAPICPP.GetVelocityInLocalPoint2(bodyu.ptr, pos);
  1009. }
  1010. public override void Translate(BulletBody obj, Vector3 trans)
  1011. {
  1012. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  1013. BSAPICPP.Translate2(bodyu.ptr, trans);
  1014. }
  1015. public override void UpdateDeactivation(BulletBody obj, float timeStep)
  1016. {
  1017. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  1018. BSAPICPP.UpdateDeactivation2(bodyu.ptr, timeStep);
  1019. }
  1020. public override bool WantsSleeping(BulletBody obj)
  1021. {
  1022. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  1023. return BSAPICPP.WantsSleeping2(bodyu.ptr);
  1024. }
  1025. public override void SetAngularFactor(BulletBody obj, float factor)
  1026. {
  1027. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  1028. BSAPICPP.SetAngularFactor2(bodyu.ptr, factor);
  1029. }
  1030. public override void SetAngularFactorV(BulletBody obj, Vector3 factor)
  1031. {
  1032. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  1033. BSAPICPP.SetAngularFactorV2(bodyu.ptr, factor);
  1034. }
  1035. public override Vector3 GetAngularFactor(BulletBody obj)
  1036. {
  1037. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  1038. return BSAPICPP.GetAngularFactor2(bodyu.ptr);
  1039. }
  1040. public override bool IsInWorld(BulletWorld world, BulletBody obj)
  1041. {
  1042. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  1043. return BSAPICPP.IsInWorld2(bodyu.ptr);
  1044. }
  1045. public override void AddConstraintRef(BulletBody obj, BulletConstraint constrain)
  1046. {
  1047. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  1048. BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
  1049. BSAPICPP.AddConstraintRef2(bodyu.ptr, constrainu.ptr);
  1050. }
  1051. public override void RemoveConstraintRef(BulletBody obj, BulletConstraint constrain)
  1052. {
  1053. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  1054. BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
  1055. BSAPICPP.RemoveConstraintRef2(bodyu.ptr, constrainu.ptr);
  1056. }
  1057. public override BulletConstraint GetConstraintRef(BulletBody obj, int index)
  1058. {
  1059. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  1060. return new BulletConstraintUnman(BSAPICPP.GetConstraintRef2(bodyu.ptr, index));
  1061. }
  1062. public override int GetNumConstraintRefs(BulletBody obj)
  1063. {
  1064. BulletBodyUnman bodyu = obj as BulletBodyUnman;
  1065. return BSAPICPP.GetNumConstraintRefs2(bodyu.ptr);
  1066. }
  1067. public override bool SetCollisionGroupMask(BulletBody body, uint filter, uint mask)
  1068. {
  1069. BulletBodyUnman bodyu = body as BulletBodyUnman;
  1070. return BSAPICPP.SetCollisionGroupMask2(bodyu.ptr, filter, mask);
  1071. }
  1072. // =====================================================================================
  1073. // btCollisionShape entries
  1074. public override float GetAngularMotionDisc(BulletShape shape)
  1075. {
  1076. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  1077. return BSAPICPP.GetAngularMotionDisc2(shapeu.ptr);
  1078. }
  1079. public override float GetContactBreakingThreshold(BulletShape shape, float defaultFactor)
  1080. {
  1081. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  1082. return BSAPICPP.GetContactBreakingThreshold2(shapeu.ptr, defaultFactor);
  1083. }
  1084. public override bool IsPolyhedral(BulletShape shape)
  1085. {
  1086. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  1087. return BSAPICPP.IsPolyhedral2(shapeu.ptr);
  1088. }
  1089. public override bool IsConvex2d(BulletShape shape)
  1090. {
  1091. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  1092. return BSAPICPP.IsConvex2d2(shapeu.ptr);
  1093. }
  1094. public override bool IsConvex(BulletShape shape)
  1095. {
  1096. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  1097. return BSAPICPP.IsConvex2(shapeu.ptr);
  1098. }
  1099. public override bool IsNonMoving(BulletShape shape)
  1100. {
  1101. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  1102. return BSAPICPP.IsNonMoving2(shapeu.ptr);
  1103. }
  1104. public override bool IsConcave(BulletShape shape)
  1105. {
  1106. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  1107. return BSAPICPP.IsConcave2(shapeu.ptr);
  1108. }
  1109. public override bool IsCompound(BulletShape shape)
  1110. {
  1111. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  1112. return BSAPICPP.IsCompound2(shapeu.ptr);
  1113. }
  1114. public override bool IsSoftBody(BulletShape shape)
  1115. {
  1116. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  1117. return BSAPICPP.IsSoftBody2(shapeu.ptr);
  1118. }
  1119. public override bool IsInfinite(BulletShape shape)
  1120. {
  1121. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  1122. return BSAPICPP.IsInfinite2(shapeu.ptr);
  1123. }
  1124. public override void SetLocalScaling(BulletShape shape, Vector3 scale)
  1125. {
  1126. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  1127. BSAPICPP.SetLocalScaling2(shapeu.ptr, scale);
  1128. }
  1129. public override Vector3 GetLocalScaling(BulletShape shape)
  1130. {
  1131. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  1132. return BSAPICPP.GetLocalScaling2(shapeu.ptr);
  1133. }
  1134. public override Vector3 CalculateLocalInertia(BulletShape shape, float mass)
  1135. {
  1136. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  1137. return BSAPICPP.CalculateLocalInertia2(shapeu.ptr, mass);
  1138. }
  1139. public override int GetShapeType(BulletShape shape)
  1140. {
  1141. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  1142. return BSAPICPP.GetShapeType2(shapeu.ptr);
  1143. }
  1144. public override void SetMargin(BulletShape shape, float val)
  1145. {
  1146. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  1147. BSAPICPP.SetMargin2(shapeu.ptr, val);
  1148. }
  1149. public override float GetMargin(BulletShape shape)
  1150. {
  1151. BulletShapeUnman shapeu = shape as BulletShapeUnman;
  1152. return BSAPICPP.GetMargin2(shapeu.ptr);
  1153. }
  1154. // =====================================================================================
  1155. // Debugging
  1156. public override void DumpRigidBody(BulletWorld world, BulletBody collisionObject)
  1157. {
  1158. BulletWorldUnman worldu = world as BulletWorldUnman;
  1159. BulletBodyUnman bodyu = collisionObject as BulletBodyUnman;
  1160. BSAPICPP.DumpRigidBody2(worldu.ptr, bodyu.ptr);
  1161. }
  1162. public override void DumpCollisionShape(BulletWorld world, BulletShape collisionShape)
  1163. {
  1164. BulletWorldUnman worldu = world as BulletWorldUnman;
  1165. BulletShapeUnman shapeu = collisionShape as BulletShapeUnman;
  1166. BSAPICPP.DumpCollisionShape2(worldu.ptr, shapeu.ptr);
  1167. }
  1168. public override void DumpConstraint(BulletWorld world, BulletConstraint constrain)
  1169. {
  1170. BulletWorldUnman worldu = world as BulletWorldUnman;
  1171. BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
  1172. BSAPICPP.DumpConstraint2(worldu.ptr, constrainu.ptr);
  1173. }
  1174. public override void DumpActivationInfo(BulletWorld world)
  1175. {
  1176. BulletWorldUnman worldu = world as BulletWorldUnman;
  1177. BSAPICPP.DumpActivationInfo2(worldu.ptr);
  1178. }
  1179. public override void DumpAllInfo(BulletWorld world)
  1180. {
  1181. BulletWorldUnman worldu = world as BulletWorldUnman;
  1182. BSAPICPP.DumpAllInfo2(worldu.ptr);
  1183. }
  1184. public override void DumpPhysicsStatistics(BulletWorld world)
  1185. {
  1186. BulletWorldUnman worldu = world as BulletWorldUnman;
  1187. BSAPICPP.DumpPhysicsStatistics2(worldu.ptr);
  1188. }
  1189. public override void ResetBroadphasePool(BulletWorld world)
  1190. {
  1191. BulletWorldUnman worldu = world as BulletWorldUnman;
  1192. BSAPICPP.ResetBroadphasePool(worldu.ptr);
  1193. }
  1194. public override void ResetConstraintSolver(BulletWorld world)
  1195. {
  1196. BulletWorldUnman worldu = world as BulletWorldUnman;
  1197. BSAPICPP.ResetConstraintSolver(worldu.ptr);
  1198. }
  1199. // =====================================================================================
  1200. // =====================================================================================
  1201. // =====================================================================================
  1202. // =====================================================================================
  1203. // =====================================================================================
  1204. // The actual interface to the unmanaged code
  1205. static class BSAPICPP
  1206. {
  1207. // ===============================================================================
  1208. // Link back to the managed code for outputting log messages
  1209. [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
  1210. public delegate void DebugLogCallback([MarshalAs(UnmanagedType.LPStr)]string msg);
  1211. // ===============================================================================
  1212. // Initialization and simulation
  1213. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1214. public static extern IntPtr Initialize2(Vector3 maxPosition, IntPtr parms,
  1215. int maxCollisions, IntPtr collisionArray,
  1216. int maxUpdates, IntPtr updateArray,
  1217. DebugLogCallback logRoutine);
  1218. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1219. public static extern int PhysicsStep2(IntPtr world, float timeStep, int maxSubSteps, float fixedTimeStep,
  1220. out int updatedEntityCount, out int collidersCount);
  1221. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1222. public static extern void Shutdown2(IntPtr sim);
  1223. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1224. public static extern bool PushUpdate2(IntPtr obj);
  1225. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1226. public static extern bool UpdateParameter2(IntPtr world, uint localID, String parm, float value);
  1227. // =====================================================================================
  1228. // Mesh, hull, shape and body creation helper routines
  1229. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1230. public static extern IntPtr CreateMeshShape2(IntPtr world,
  1231. int indicesCount, [MarshalAs(UnmanagedType.LPArray)] int[] indices,
  1232. int verticesCount, [MarshalAs(UnmanagedType.LPArray)] float[] vertices );
  1233. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1234. public static extern IntPtr CreateGImpactShape2(IntPtr world,
  1235. int indicesCount, [MarshalAs(UnmanagedType.LPArray)] int[] indices,
  1236. int verticesCount, [MarshalAs(UnmanagedType.LPArray)] float[] vertices );
  1237. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1238. public static extern IntPtr CreateHullShape2(IntPtr world,
  1239. int hullCount, [MarshalAs(UnmanagedType.LPArray)] float[] hulls);
  1240. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1241. public static extern IntPtr BuildHullShapeFromMesh2(IntPtr world, IntPtr meshShape, HACDParams parms);
  1242. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1243. public static extern IntPtr BuildConvexHullShapeFromMesh2(IntPtr world, IntPtr meshShape);
  1244. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1245. public static extern IntPtr CreateConvexHullShape2(IntPtr world,
  1246. int indicesCount, [MarshalAs(UnmanagedType.LPArray)] int[] indices,
  1247. int verticesCount, [MarshalAs(UnmanagedType.LPArray)] float[] vertices );
  1248. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1249. public static extern IntPtr BuildNativeShape2(IntPtr world, ShapeData shapeData);
  1250. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1251. public static extern bool IsNativeShape2(IntPtr shape);
  1252. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1253. public static extern void SetShapeCollisionMargin(IntPtr shape, float margin);
  1254. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1255. public static extern IntPtr BuildCapsuleShape2(IntPtr world, float radius, float height, Vector3 scale);
  1256. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1257. public static extern IntPtr CreateCompoundShape2(IntPtr sim, bool enableDynamicAabbTree);
  1258. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1259. public static extern int GetNumberOfCompoundChildren2(IntPtr cShape);
  1260. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1261. public static extern void AddChildShapeToCompoundShape2(IntPtr cShape, IntPtr addShape, Vector3 pos, Quaternion rot);
  1262. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1263. public static extern IntPtr GetChildShapeFromCompoundShapeIndex2(IntPtr cShape, int indx);
  1264. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1265. public static extern IntPtr RemoveChildShapeFromCompoundShapeIndex2(IntPtr cShape, int indx);
  1266. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1267. public static extern void RemoveChildShapeFromCompoundShape2(IntPtr cShape, IntPtr removeShape);
  1268. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1269. public static extern void UpdateChildTransform2(IntPtr pShape, int childIndex, Vector3 pos, Quaternion rot, bool shouldRecalculateLocalAabb);
  1270. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1271. public static extern void RecalculateCompoundShapeLocalAabb2(IntPtr cShape);
  1272. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1273. public static extern IntPtr DuplicateCollisionShape2(IntPtr sim, IntPtr srcShape, uint id);
  1274. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1275. public static extern bool DeleteCollisionShape2(IntPtr world, IntPtr shape);
  1276. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1277. public static extern int GetBodyType2(IntPtr obj);
  1278. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1279. public static extern IntPtr CreateBodyFromShape2(IntPtr sim, IntPtr shape, uint id, Vector3 pos, Quaternion rot);
  1280. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1281. public static extern IntPtr CreateBodyWithDefaultMotionState2(IntPtr shape, uint id, Vector3 pos, Quaternion rot);
  1282. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1283. public static extern IntPtr CreateGhostFromShape2(IntPtr sim, IntPtr shape, uint id, Vector3 pos, Quaternion rot);
  1284. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1285. public static extern void DestroyObject2(IntPtr sim, IntPtr obj);
  1286. // =====================================================================================
  1287. // Terrain creation and helper routines
  1288. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1289. public static extern IntPtr CreateGroundPlaneShape2(uint id, float height, float collisionMargin);
  1290. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1291. public static extern IntPtr CreateTerrainShape2(uint id, Vector3 size, float minHeight, float maxHeight,
  1292. [MarshalAs(UnmanagedType.LPArray)] float[] heightMap,
  1293. float scaleFactor, float collisionMargin);
  1294. // =====================================================================================
  1295. // Constraint creation and helper routines
  1296. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1297. public static extern IntPtr Create6DofConstraint2(IntPtr world, IntPtr obj1, IntPtr obj2,
  1298. Vector3 frame1loc, Quaternion frame1rot,
  1299. Vector3 frame2loc, Quaternion frame2rot,
  1300. bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies);
  1301. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1302. public static extern IntPtr Create6DofConstraintToPoint2(IntPtr world, IntPtr obj1, IntPtr obj2,
  1303. Vector3 joinPoint,
  1304. bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies);
  1305. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1306. public static extern IntPtr Create6DofConstraintFixed2(IntPtr world, IntPtr obj1,
  1307. Vector3 frameInBloc, Quaternion frameInBrot,
  1308. bool useLinearReferenceFrameB, bool disableCollisionsBetweenLinkedBodies);
  1309. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1310. public static extern IntPtr Create6DofSpringConstraint2(IntPtr world, IntPtr obj1, IntPtr obj2,
  1311. Vector3 frame1loc, Quaternion frame1rot,
  1312. Vector3 frame2loc, Quaternion frame2rot,
  1313. bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies);
  1314. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1315. public static extern IntPtr CreateHingeConstraint2(IntPtr world, IntPtr obj1, IntPtr obj2,
  1316. Vector3 pivotinA, Vector3 pivotinB,
  1317. Vector3 axisInA, Vector3 axisInB,
  1318. bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies);
  1319. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1320. public static extern IntPtr CreateSliderConstraint2(IntPtr world, IntPtr obj1, IntPtr obj2,
  1321. Vector3 frameInAloc, Quaternion frameInArot,
  1322. Vector3 frameInBloc, Quaternion frameInBrot,
  1323. bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies);
  1324. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1325. public static extern IntPtr CreateConeTwistConstraint2(IntPtr world, IntPtr obj1, IntPtr obj2,
  1326. Vector3 frameInAloc, Quaternion frameInArot,
  1327. Vector3 frameInBloc, Quaternion frameInBrot,
  1328. bool disableCollisionsBetweenLinkedBodies);
  1329. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1330. public static extern IntPtr CreateGearConstraint2(IntPtr world, IntPtr obj1, IntPtr obj2,
  1331. Vector3 axisInA, Vector3 axisInB,
  1332. float ratio, bool disableCollisionsBetweenLinkedBodies);
  1333. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1334. public static extern IntPtr CreatePoint2PointConstraint2(IntPtr world, IntPtr obj1, IntPtr obj2,
  1335. Vector3 pivotInA, Vector3 pivotInB,
  1336. bool disableCollisionsBetweenLinkedBodies);
  1337. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1338. public static extern void SetConstraintEnable2(IntPtr constrain, float numericTrueFalse);
  1339. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1340. public static extern void SetConstraintNumSolverIterations2(IntPtr constrain, float iterations);
  1341. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1342. public static extern bool SetFrames2(IntPtr constrain,
  1343. Vector3 frameA, Quaternion frameArot, Vector3 frameB, Quaternion frameBrot);
  1344. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1345. public static extern bool SetLinearLimits2(IntPtr constrain, Vector3 low, Vector3 hi);
  1346. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1347. public static extern bool SetAngularLimits2(IntPtr constrain, Vector3 low, Vector3 hi);
  1348. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1349. public static extern bool UseFrameOffset2(IntPtr constrain, float enable);
  1350. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1351. public static extern bool TranslationalLimitMotor2(IntPtr constrain, float enable, float targetVel, float maxMotorForce);
  1352. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1353. public static extern bool SetBreakingImpulseThreshold2(IntPtr constrain, float threshold);
  1354. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1355. public static extern bool CalculateTransforms2(IntPtr constrain);
  1356. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1357. public static extern bool SetConstraintParam2(IntPtr constrain, ConstraintParams paramIndex, float value, ConstraintParamAxis axis);
  1358. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1359. public static extern bool DestroyConstraint2(IntPtr world, IntPtr constrain);
  1360. // =====================================================================================
  1361. // btCollisionWorld entries
  1362. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1363. public static extern void UpdateSingleAabb2(IntPtr world, IntPtr obj);
  1364. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1365. public static extern void UpdateAabbs2(IntPtr world);
  1366. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1367. public static extern bool GetForceUpdateAllAabbs2(IntPtr world);
  1368. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1369. public static extern void SetForceUpdateAllAabbs2(IntPtr world, bool force);
  1370. // =====================================================================================
  1371. // btDynamicsWorld entries
  1372. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1373. public static extern bool AddObjectToWorld2(IntPtr world, IntPtr obj);
  1374. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1375. public static extern bool RemoveObjectFromWorld2(IntPtr world, IntPtr obj);
  1376. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1377. public static extern bool AddConstraintToWorld2(IntPtr world, IntPtr constrain, bool disableCollisionsBetweenLinkedObjects);
  1378. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1379. public static extern bool RemoveConstraintFromWorld2(IntPtr world, IntPtr constrain);
  1380. // =====================================================================================
  1381. // btCollisionObject entries
  1382. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1383. public static extern Vector3 GetAnisotripicFriction2(IntPtr constrain);
  1384. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1385. public static extern Vector3 SetAnisotripicFriction2(IntPtr constrain, Vector3 frict);
  1386. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1387. public static extern bool HasAnisotripicFriction2(IntPtr constrain);
  1388. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1389. public static extern void SetContactProcessingThreshold2(IntPtr obj, float val);
  1390. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1391. public static extern float GetContactProcessingThreshold2(IntPtr obj);
  1392. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1393. public static extern bool IsStaticObject2(IntPtr obj);
  1394. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1395. public static extern bool IsKinematicObject2(IntPtr obj);
  1396. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1397. public static extern bool IsStaticOrKinematicObject2(IntPtr obj);
  1398. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1399. public static extern bool HasContactResponse2(IntPtr obj);
  1400. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1401. public static extern void SetCollisionShape2(IntPtr sim, IntPtr obj, IntPtr shape);
  1402. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1403. public static extern IntPtr GetCollisionShape2(IntPtr obj);
  1404. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1405. public static extern int GetActivationState2(IntPtr obj);
  1406. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1407. public static extern void SetActivationState2(IntPtr obj, int state);
  1408. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1409. public static extern void SetDeactivationTime2(IntPtr obj, float dtime);
  1410. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1411. public static extern float GetDeactivationTime2(IntPtr obj);
  1412. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1413. public static extern void ForceActivationState2(IntPtr obj, ActivationState state);
  1414. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1415. public static extern void Activate2(IntPtr obj, bool forceActivation);
  1416. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1417. public static extern bool IsActive2(IntPtr obj);
  1418. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1419. public static extern void SetRestitution2(IntPtr obj, float val);
  1420. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1421. public static extern float GetRestitution2(IntPtr obj);
  1422. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1423. public static extern void SetFriction2(IntPtr obj, float val);
  1424. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1425. public static extern float GetFriction2(IntPtr obj);
  1426. /* Haven't defined the type 'Transform'
  1427. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1428. public static extern Transform GetWorldTransform2(IntPtr obj);
  1429. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1430. public static extern void setWorldTransform2(IntPtr obj, Transform trans);
  1431. */
  1432. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1433. public static extern Vector3 GetPosition2(IntPtr obj);
  1434. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1435. public static extern Quaternion GetOrientation2(IntPtr obj);
  1436. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1437. public static extern void SetTranslation2(IntPtr obj, Vector3 position, Quaternion rotation);
  1438. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1439. public static extern IntPtr GetBroadphaseHandle2(IntPtr obj);
  1440. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1441. public static extern void SetBroadphaseHandle2(IntPtr obj, IntPtr handle);
  1442. /*
  1443. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1444. public static extern Transform GetInterpolationWorldTransform2(IntPtr obj);
  1445. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1446. public static extern void SetInterpolationWorldTransform2(IntPtr obj, Transform trans);
  1447. */
  1448. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1449. public static extern void SetInterpolationLinearVelocity2(IntPtr obj, Vector3 vel);
  1450. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1451. public static extern void SetInterpolationAngularVelocity2(IntPtr obj, Vector3 vel);
  1452. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1453. public static extern void SetInterpolationVelocity2(IntPtr obj, Vector3 linearVel, Vector3 angularVel);
  1454. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1455. public static extern float GetHitFraction2(IntPtr obj);
  1456. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1457. public static extern void SetHitFraction2(IntPtr obj, float val);
  1458. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1459. public static extern CollisionFlags GetCollisionFlags2(IntPtr obj);
  1460. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1461. public static extern CollisionFlags SetCollisionFlags2(IntPtr obj, CollisionFlags flags);
  1462. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1463. public static extern CollisionFlags AddToCollisionFlags2(IntPtr obj, CollisionFlags flags);
  1464. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1465. public static extern CollisionFlags RemoveFromCollisionFlags2(IntPtr obj, CollisionFlags flags);
  1466. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1467. public static extern float GetCcdMotionThreshold2(IntPtr obj);
  1468. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1469. public static extern void SetCcdMotionThreshold2(IntPtr obj, float val);
  1470. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1471. public static extern float GetCcdSweptSphereRadius2(IntPtr obj);
  1472. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1473. public static extern void SetCcdSweptSphereRadius2(IntPtr obj, float val);
  1474. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1475. public static extern IntPtr GetUserPointer2(IntPtr obj);
  1476. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1477. public static extern void SetUserPointer2(IntPtr obj, IntPtr val);
  1478. // =====================================================================================
  1479. // btRigidBody entries
  1480. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1481. public static extern void ApplyGravity2(IntPtr obj);
  1482. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1483. public static extern void SetGravity2(IntPtr obj, Vector3 val);
  1484. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1485. public static extern Vector3 GetGravity2(IntPtr obj);
  1486. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1487. public static extern void SetDamping2(IntPtr obj, float lin_damping, float ang_damping);
  1488. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1489. public static extern void SetLinearDamping2(IntPtr obj, float lin_damping);
  1490. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1491. public static extern void SetAngularDamping2(IntPtr obj, float ang_damping);
  1492. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1493. public static extern float GetLinearDamping2(IntPtr obj);
  1494. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1495. public static extern float GetAngularDamping2(IntPtr obj);
  1496. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1497. public static extern float GetLinearSleepingThreshold2(IntPtr obj);
  1498. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1499. public static extern float GetAngularSleepingThreshold2(IntPtr obj);
  1500. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1501. public static extern void ApplyDamping2(IntPtr obj, float timeStep);
  1502. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1503. public static extern void SetMassProps2(IntPtr obj, float mass, Vector3 inertia);
  1504. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1505. public static extern Vector3 GetLinearFactor2(IntPtr obj);
  1506. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1507. public static extern void SetLinearFactor2(IntPtr obj, Vector3 factor);
  1508. /*
  1509. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1510. public static extern void SetCenterOfMassTransform2(IntPtr obj, Transform trans);
  1511. */
  1512. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1513. public static extern void SetCenterOfMassByPosRot2(IntPtr obj, Vector3 pos, Quaternion rot);
  1514. // Add a force to the object as if its mass is one.
  1515. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1516. public static extern void ApplyCentralForce2(IntPtr obj, Vector3 force);
  1517. // Set the force being applied to the object as if its mass is one.
  1518. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1519. public static extern void SetObjectForce2(IntPtr obj, Vector3 force);
  1520. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1521. public static extern Vector3 GetTotalForce2(IntPtr obj);
  1522. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1523. public static extern Vector3 GetTotalTorque2(IntPtr obj);
  1524. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1525. public static extern Vector3 GetInvInertiaDiagLocal2(IntPtr obj);
  1526. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1527. public static extern void SetInvInertiaDiagLocal2(IntPtr obj, Vector3 inert);
  1528. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1529. public static extern void SetSleepingThresholds2(IntPtr obj, float lin_threshold, float ang_threshold);
  1530. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1531. public static extern void ApplyTorque2(IntPtr obj, Vector3 torque);
  1532. // Apply force at the given point. Will add torque to the object.
  1533. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1534. public static extern void ApplyForce2(IntPtr obj, Vector3 force, Vector3 pos);
  1535. // Apply impulse to the object. Same as "ApplycentralForce" but force scaled by object's mass.
  1536. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1537. public static extern void ApplyCentralImpulse2(IntPtr obj, Vector3 imp);
  1538. // Apply impulse to the object's torque. Force is scaled by object's mass.
  1539. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1540. public static extern void ApplyTorqueImpulse2(IntPtr obj, Vector3 imp);
  1541. // Apply impulse at the point given. For is scaled by object's mass and effects both linear and angular forces.
  1542. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1543. public static extern void ApplyImpulse2(IntPtr obj, Vector3 imp, Vector3 pos);
  1544. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1545. public static extern void ClearForces2(IntPtr obj);
  1546. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1547. public static extern void ClearAllForces2(IntPtr obj);
  1548. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1549. public static extern void UpdateInertiaTensor2(IntPtr obj);
  1550. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1551. public static extern Vector3 GetCenterOfMassPosition2(IntPtr obj);
  1552. /*
  1553. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1554. public static extern Transform GetCenterOfMassTransform2(IntPtr obj);
  1555. */
  1556. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1557. public static extern Vector3 GetLinearVelocity2(IntPtr obj);
  1558. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1559. public static extern Vector3 GetAngularVelocity2(IntPtr obj);
  1560. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1561. public static extern void SetLinearVelocity2(IntPtr obj, Vector3 val);
  1562. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1563. public static extern void SetAngularVelocity2(IntPtr obj, Vector3 angularVelocity);
  1564. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1565. public static extern Vector3 GetVelocityInLocalPoint2(IntPtr obj, Vector3 pos);
  1566. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1567. public static extern void Translate2(IntPtr obj, Vector3 trans);
  1568. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1569. public static extern void UpdateDeactivation2(IntPtr obj, float timeStep);
  1570. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1571. public static extern bool WantsSleeping2(IntPtr obj);
  1572. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1573. public static extern void SetAngularFactor2(IntPtr obj, float factor);
  1574. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1575. public static extern void SetAngularFactorV2(IntPtr obj, Vector3 factor);
  1576. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1577. public static extern Vector3 GetAngularFactor2(IntPtr obj);
  1578. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1579. public static extern bool IsInWorld2(IntPtr obj);
  1580. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1581. public static extern void AddConstraintRef2(IntPtr obj, IntPtr constrain);
  1582. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1583. public static extern void RemoveConstraintRef2(IntPtr obj, IntPtr constrain);
  1584. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1585. public static extern IntPtr GetConstraintRef2(IntPtr obj, int index);
  1586. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1587. public static extern int GetNumConstraintRefs2(IntPtr obj);
  1588. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1589. public static extern bool SetCollisionGroupMask2(IntPtr body, uint filter, uint mask);
  1590. // =====================================================================================
  1591. // btCollisionShape entries
  1592. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1593. public static extern float GetAngularMotionDisc2(IntPtr shape);
  1594. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1595. public static extern float GetContactBreakingThreshold2(IntPtr shape, float defaultFactor);
  1596. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1597. public static extern bool IsPolyhedral2(IntPtr shape);
  1598. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1599. public static extern bool IsConvex2d2(IntPtr shape);
  1600. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1601. public static extern bool IsConvex2(IntPtr shape);
  1602. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1603. public static extern bool IsNonMoving2(IntPtr shape);
  1604. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1605. public static extern bool IsConcave2(IntPtr shape);
  1606. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1607. public static extern bool IsCompound2(IntPtr shape);
  1608. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1609. public static extern bool IsSoftBody2(IntPtr shape);
  1610. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1611. public static extern bool IsInfinite2(IntPtr shape);
  1612. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1613. public static extern void SetLocalScaling2(IntPtr shape, Vector3 scale);
  1614. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1615. public static extern Vector3 GetLocalScaling2(IntPtr shape);
  1616. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1617. public static extern Vector3 CalculateLocalInertia2(IntPtr shape, float mass);
  1618. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1619. public static extern int GetShapeType2(IntPtr shape);
  1620. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1621. public static extern void SetMargin2(IntPtr shape, float val);
  1622. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1623. public static extern float GetMargin2(IntPtr shape);
  1624. // =====================================================================================
  1625. // Debugging
  1626. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1627. public static extern void DumpRigidBody2(IntPtr sim, IntPtr collisionObject);
  1628. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1629. public static extern void DumpCollisionShape2(IntPtr sim, IntPtr collisionShape);
  1630. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1631. public static extern void DumpMapInfo2(IntPtr sim, IntPtr manInfo);
  1632. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1633. public static extern void DumpConstraint2(IntPtr sim, IntPtr constrain);
  1634. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1635. public static extern void DumpActivationInfo2(IntPtr sim);
  1636. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1637. public static extern void DumpAllInfo2(IntPtr sim);
  1638. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1639. public static extern void DumpPhysicsStatistics2(IntPtr sim);
  1640. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1641. public static extern void ResetBroadphasePool(IntPtr sim);
  1642. [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
  1643. public static extern void ResetConstraintSolver(IntPtr sim);
  1644. }
  1645. }
  1646. }