lookat(_lookat),
move_delta(0)
{
- currenttime = 0;
+ currenttime = 0.0f;
+ if (lookat != nullptr)
+ timestamps.push(Timestamp(0.0f, _lookat->getModelMat(), x, lookat->ySpeed));
+
+ bt_collision_configuration = new btDefaultCollisionConfiguration();
+ bt_dispatcher = new btCollisionDispatcher(bt_collision_configuration);
+
+ btScalar sscene_size = (btScalar)SCENE_SIZE;
+ btVector3 worldAabbMin(-sscene_size, -sscene_size, -sscene_size);
+ btVector3 worldAabbMax(sscene_size, sscene_size, sscene_size);
+
+ bt_broadphase = new bt32BitAxisSweep3(worldAabbMin, worldAabbMax, MAX_OBJECTS, 0, true);
+
+ bt_collision_world = new btCollisionWorld(bt_dispatcher, bt_broadphase, bt_collision_configuration);
}
Scene::~Scene()
{
- for (auto i = SceneObjects.begin(); i != SceneObjects.end(); ++i)
- {
- delete (*i);
- }
-
+ //for (auto i = SceneObjects.begin(); i != SceneObjects.end(); ++i)
+ //{
+ // delete (*i);
+ //}
+ timestamps.empty();
-
+ //Bullet
+ delete bt_collision_world;
+ delete bt_broadphase;
+ delete bt_dispatcher;
+ delete bt_collision_configuration;
+
//if (viewPort != nullptr)
// delete viewPort;
(*i)->update(deltaT);
}
+ bt_collision_world->performDiscreteCollisionDetection();
- for (auto i = SceneObjects.begin(); i != SceneObjects.end(); ++i)
+
+ int numManifolds = bt_collision_world->getDispatcher()->getNumManifolds();
+ //For each contact manifold
+ for (int i = 0; i < numManifolds; i++) {
+ btPersistentManifold* contactManifold = bt_collision_world->getDispatcher()->getManifoldByIndexInternal(i);
+ btCollisionObject* obA = const_cast<btCollisionObject*>(contactManifold->getBody0());
+ btCollisionObject* obB = const_cast<btCollisionObject*>(contactManifold->getBody1());
+ contactManifold->refreshContactPoints(obA->getWorldTransform(), obB->getWorldTransform());
+
+ if (contactManifold->getNumContacts()>0)
- {
+ {
- auto j = i;
- for (j++; j != SceneObjects.end(); ++j)
- {
- SceneObject::checkCollision(*i, *j);
+ ((SceneObject*)obA->getUserPointer())->collides((SceneObject*)obB->getUserPointer(), contactManifold);
+ ((SceneObject*)obB->getUserPointer())->collides((SceneObject*)obA->getUserPointer(), contactManifold);
}
+
+
}
+ //for (auto i = SceneObjects.begin(); i != SceneObjects.end(); ++i)
+ //{
+ // auto j = i;
+ // for (j++; j != SceneObjects.end(); ++j)
+ // {
+ // SceneObject::checkCollision(*i, *j);
+ // }
+ //}
+
}
else
{
float move_delta;
float currenttime;
- std::stack<mat4> PlayerModels;
+ std::stack<Timestamp> timestamps;
++ //std::stack<mat4> PlayerModels;
+ //std::stack<vec3> PlayerDirections;
+
+ //class btDefaultCollisionConfiguration;
+ //class btCollisionDispatcher;
+ //class btDbvtBroadphase;
+ //class btSequentialImpulseConstraintSolver;
+ //class btDiscreteDynamicsWorld;
+
+ //Bullet
+ btCollisionConfiguration* bt_collision_configuration;
+ btCollisionDispatcher* bt_dispatcher;
+ btBroadphaseInterface* bt_broadphase;
+ btCollisionWorld* bt_collision_world;
};
<ClInclude Include="Graphix\ViewPort.h" />
<ClInclude Include="Message.h" />
<ClInclude Include="Scene\Sky.h" />
+ <ClInclude Include="Scene\Timestamp.h" />
</ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\res\bullet3-2.83.4\build3\vs2010\BulletCollision.vcxproj">
+ <Project>{b7c1909f-731f-be49-a926-fadfe6036dce}</Project>
+ <Private>false</Private>
+ <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
+ <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
+ <LinkLibraryDependencies>true</LinkLibraryDependencies>
+ <UseLibraryDependencyInputs>true</UseLibraryDependencyInputs>
+ </ProjectReference>
+ <ProjectReference Include="..\res\bullet3-2.83.4\build3\vs2010\BulletDynamics.vcxproj">
+ <Project>{84f7995b-36f8-cc4a-97be-14f4cd664d9c}</Project>
+ <Private>false</Private>
+ <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
+ <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
+ <LinkLibraryDependencies>true</LinkLibraryDependencies>
+ <UseLibraryDependencyInputs>true</UseLibraryDependencyInputs>
+ </ProjectReference>
+ <ProjectReference Include="..\res\bullet3-2.83.4\build3\vs2010\LinearMath.vcxproj">
+ <Project>{0993e55f-a581-ad41-9a80-9901730a0240}</Project>
+ <Private>false</Private>
+ <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
+ <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
+ <LinkLibraryDependencies>true</LinkLibraryDependencies>
+ <UseLibraryDependencyInputs>true</UseLibraryDependencyInputs>
+ </ProjectReference>
+ </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>