PolyCollisionScene.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /*
  2. * PolyCollisionScene.h
  3. * Poly
  4. *
  5. * Created by Ivan Safrin on 6/16/08.
  6. * Copyright 2008 __MyCompanyName__. All rights reserved.
  7. *
  8. */
  9. // @package SceneDynamics
  10. #pragma once
  11. #include "PolyLogger.h"
  12. #include "PolyGlobals.h"
  13. #include "PolyGenericScene.h"
  14. #include "PolyCollisionSceneEntity.h"
  15. #include "btBulletCollisionCommon.h"
  16. #include "PolyVector3.h"
  17. #include <vector>
  18. using std::vector;
  19. namespace Polycode {
  20. struct CollisionResult {
  21. bool collided;
  22. Vector3 colNormal;
  23. float colDist;
  24. bool setOldPosition;
  25. Vector3 newPos;
  26. };
  27. struct RayTestResult {
  28. SceneEntity *entity;
  29. Vector3 normal;
  30. Vector3 position;
  31. };
  32. class _PolyExport CollisionScene : public GenericScene {
  33. public:
  34. CollisionScene();
  35. CollisionScene(bool virtualScene);
  36. virtual ~CollisionScene();
  37. void initCollisionScene();
  38. virtual void Update();
  39. void enableCollision(SceneEntity *entity, bool val);
  40. CollisionSceneEntity *getCollisionEntityByObject(btCollisionObject *collisionObject);
  41. RayTestResult getFirstEntityInRay(const Vector3 &origin, const Vector3 &dest);
  42. CollisionSceneEntity *getCollisionByScreenEntity(SceneEntity *ent);
  43. CollisionResult testCollision(SceneEntity *ent1, SceneEntity *ent2);
  44. CollisionResult testCollisionOnCollisionChild(CollisionSceneEntity *cEnt1, CollisionSceneEntity *cEnt2);
  45. CollisionResult testCollisionOnCollisionChild_Convex(CollisionSceneEntity *cEnt1, CollisionSceneEntity *cEnt2);
  46. CollisionResult testCollisionOnCollisionChild_RayTest(CollisionSceneEntity *cEnt1, CollisionSceneEntity *cEnt2);
  47. Vector3 getCollisionNormalFromCollisionEnts(CollisionSceneEntity *cEnt1, CollisionSceneEntity *cEnt2);
  48. Vector3 getCollisionNormal(SceneEntity *ent1, SceneEntity *ent2);
  49. void applyVelocity(SceneEntity *entity, float x, float y, float z);
  50. void loadCollisionChild(SceneEntity *entity, bool autoCollide=false, int type=0);
  51. void enableGravity(SceneEntity *entity);
  52. void stopTrackingCollision(SceneEntity *entity);
  53. virtual CollisionSceneEntity *addCollisionChild(SceneEntity *newEntity, bool autoCollide=false, int type=0, int group=0);
  54. CollisionSceneEntity *trackCollision(SceneEntity *newEntity, bool autoCollide, int type=0, int group=0);
  55. void adjustForCollision(CollisionSceneEntity *collisionEntity);
  56. protected:
  57. vector<CollisionSceneEntity*> collisionChildren;
  58. btCollisionWorld *world;
  59. };
  60. }