Explorar o código

Character WIP

Panagiotis Christopoulos Charitos %!s(int64=15) %!d(string=hai) anos
pai
achega
6cf5ed893c

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 409 - 433
build/debug/Makefile


+ 1 - 1
build/debug/gen.cfg.py

@@ -18,4 +18,4 @@ precompiledHeadersFlags = defines__ + " -c -pedantic-errors -pedantic -ansi -Wal
 
 compilerFlags = precompiledHeadersFlags + " -fsingle-precision-constant"
 
-linkerFlags = "-rdynamic -L../../extern/lib-x86-64-linux -Wl,-Bstatic -lBulletSoftBody -lBulletDynamics -lBulletCollision -lLinearMath -lGLEW -lSDL_image -lGLU -lSDL -lboost_system -lboost_filesystem -Wl,-Bdynamic -lGL -ljpeg -lpng -ltiff -pg"
+linkerFlags = "-rdynamic -L../../extern/lib-x86-64-linux -Wl,-Bstatic -lBulletSoftBody -lBulletDynamics -lBulletCollision -lLinearMath -lGLEW -lGLU -lSDL -lboost_system -lboost_filesystem -Wl,-Bdynamic -lGL -ljpeg -lpng -ltiff -lSDL_image -pg"

+ 18 - 10
src/Main.cpp

@@ -9,7 +9,6 @@
 #include "Renderer.h"
 #include "Ui.h"
 #include "App.h"
-#include "Texture.h"
 #include "Mesh.h"
 #include "Light.h"
 #include "collision.h"
@@ -35,7 +34,7 @@
 #include "RendererInitializer.h"
 #include "MainRenderer.h"
 #include "DebugDrawer.h"
-#include <boost/lexical_cast.hpp>
+#include "PhyCharacter.h"
 
 App* app = NULL; ///< The only global var. App constructor sets it
 
@@ -45,6 +44,7 @@ SkelModelNode* imp;
 PointLight* point_lights[10];
 SpotLight* spot_lights[2];
 ParticleEmitter* partEmitter;
+PhyCharacter* character;
 
 
 // Physics
@@ -72,10 +72,10 @@ void initPhysics()
 	groundTransform.setIdentity();
 	groundTransform.setOrigin(Vec3(0,-50, 0));
 
-	new RigidBody(0.0, groundTransform, groundShape, NULL, Physics::CG_MAP, Physics::CG_ALL);
+	new RigidBody(0.0, groundTransform, groundShape, NULL/*, Physics::CG_MAP, Physics::CG_ALL*/);
 
 
-	{
+	/*{
 		btCollisionShape* colShape = new btBoxShape(btVector3(SCALING*1,SCALING*1,SCALING*1));
 
 		float start_x = START_POS_X - ARRAY_SIZE_X/2;
@@ -98,7 +98,7 @@ void initPhysics()
 				}
 			}
 		}
-	}
+	}*/
 }
 
 
@@ -174,7 +174,7 @@ void init()
 	// imp	
 	imp = new SkelModelNode();
 	imp->init("models/imp/imp.smdl");
-	imp->setLocalTransform(Transform(Vec3(0.0, 2.11, 0.0), Mat3(Euler(-M::PI/2, 0.0, 0.0)), 0.7));
+	//imp->setLocalTransform(Transform(Vec3(0.0, 2.11, 0.0), Mat3(Euler(-M::PI/2, 0.0, 0.0)), 0.7));
 	imp->meshNodes[0]->meshSkelCtrl->skelNode->skelAnimCtrl->skelAnim.loadRsrc("models/imp/walk.imp.anim");
 	imp->meshNodes[0]->meshSkelCtrl->skelNode->skelAnimCtrl->step = 0.8;
 
@@ -187,8 +187,8 @@ void init()
 	}*/
 
 	// sponza map
-	MeshNode* node = new MeshNode();
-	node->init("maps/sponza/sponza.mesh");
+	/*MeshNode* node = new MeshNode();
+	node->init("maps/sponza/sponza.mesh");*/
 	//node->setLocalTransform(Transform(Vec3(0.0, -0.0, 0.0), Mat3::getIdentity(), 0.01));
 
 	// particle emitter
@@ -196,6 +196,12 @@ void init()
 	partEmitter->init("asdf");
 	partEmitter->getLocalTransform().setOrigin(Vec3(3.0, 0.0, 0.0));
 
+	// character
+	PhyCharacter::Initializer init;
+	init.sceneNode = imp;
+	init.startTrf = Transform(Vec3(0, 40, 0), Mat3::getIdentity(), 1.0);
+	character = new PhyCharacter(*app->getScene()->getPhysics(), init);
+
 	// crate
 	/*crate = new MeshNode;
 	crate->init("models/crate0/crate0.mesh");
@@ -211,7 +217,7 @@ void init()
 	app->getScene()->skybox.load(skybox_fnames);
 
 
-	//initPhysics();
+	initPhysics();
 
 	INFO("Engine initialization ends (" << App::getTicks()-ticks << ")");
 }
@@ -225,7 +231,6 @@ void mainLoop()
 	INFO("Entering main loop");
 
 	int ticks = App::getTicks();
-	float secs = 0.0;
 	do
 	{
 		float crntTime = App::getTicks() / 1000.0;
@@ -272,6 +277,9 @@ void mainLoop()
 
 		if(I::keys[SDL_SCANCODE_K]) app->getActiveCam()->lookAtPoint(point_lights[0]->getWorldTransform().getOrigin());
 
+		if(I::keys[SDL_SCANCODE_I])
+			character->moveForward(0.1);
+
 
 		if(I::keys[SDL_SCANCODE_O] == 1)
 		{

+ 30 - 0
src/Physics/PhyCharacter.cpp

@@ -59,3 +59,33 @@ PhyCharacter::~PhyCharacter()
 	delete ghostObject;
 	delete motionState;
 }
+
+
+//======================================================================================================================
+// rotate                                                                                                              =
+//======================================================================================================================
+void PhyCharacter::rotate(float angle)
+{
+	btMatrix3x3 rot = ghostObject->getWorldTransform().getBasis();
+	rot *= btMatrix3x3(btQuaternion(btVector3(0, 1, 0), angle));
+	ghostObject->getWorldTransform().setBasis(rot);
+}
+
+
+//======================================================================================================================
+// moveForward                                                                                                         =
+//======================================================================================================================
+void PhyCharacter::moveForward(float distance)
+{
+	btVector3 forward = -ghostObject->getWorldTransform().getBasis().getColumn(2);
+	character->setWalkDirection(forward * distance);
+}
+
+
+//======================================================================================================================
+// jump                                                                                                                =
+//======================================================================================================================
+void PhyCharacter::jump()
+{
+	character->jump();
+}

+ 1 - 1
src/Physics/Physics.cpp

@@ -12,7 +12,7 @@ Physics::Physics():
 {
 	collisionConfiguration = new btDefaultCollisionConfiguration();
 	dispatcher = new	btCollisionDispatcher(collisionConfiguration);
-	broadphase = new btDbvtBroadphase();
+	broadphase = new btAxisSweep3(btVector3(-1000, -1000, -1000), btVector3(1000, 1000, 1000));
 	sol = new btSequentialImpulseConstraintSolver;
 	dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher, broadphase, sol, collisionConfiguration);
 	dynamicsWorld->setGravity(btVector3(0,-10, 0));

+ 1 - 1
src/Physics/Physics.h

@@ -35,7 +35,7 @@ class Physics
 	public:
 		btDefaultCollisionConfiguration* collisionConfiguration;
 		btCollisionDispatcher* dispatcher;
-		btDbvtBroadphase* broadphase;
+		btBroadphaseInterface* broadphase;
 		btSequentialImpulseConstraintSolver* sol;
 		DebugDrawer* debugDrawer;
 

+ 1 - 1
src/Renderer/Dbg.cpp

@@ -28,7 +28,7 @@ Renderer::Dbg::Dbg(Renderer& r_):
 	RenderingStage(r_),
 	showAxisEnabled(false),
 	showLightsEnabled(true),
-	showSkeletonsEnabled(false),
+	showSkeletonsEnabled(true),
 	showCamerasEnabled(true)
 {
 }

+ 2 - 7
src/Scene/SkelNode.cpp

@@ -33,17 +33,12 @@ void SkelNode::render()
 {
 	Renderer::Dbg::setModelMat(Mat4(getWorldTransform()));
 	Renderer::Dbg::setColor(Vec4(1.0, 0.0, 0.0, 1.0));
+	Renderer::Dbg::setModelMat(Mat4(getWorldTransform()));
 
 	Vec<Vec3> positions;
 
 	for(uint i=0; i<skeleton->bones.size(); i++)
 	{
-		positions.push_back(skelAnimCtrl->heads[i]);
-		positions.push_back(skelAnimCtrl->tails[i]);
+		Renderer::Dbg::drawLine(skelAnimCtrl->heads[i], skelAnimCtrl->tails[i], Vec4(1.0));
 	}
-
-	glEnableVertexAttribArray(0);
-	glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, &(positions[0][0]));
-	glDrawArrays(GL_TRIANGLES, 0, positions.size());
-	glDisableVertexAttribArray(0);
 }

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio