diff --git a/CMakeLists.txt b/CMakeLists.txt index 5c31045..5e9916d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,8 +7,8 @@ SET(VERSION_MINOR 0) set(EXTRA_INCLUDES ${PROJECT_SOURCE_DIR}/src) # choose source file -file(GLOB LIB_SRC_LIST src/*.cpp src/tools/*.cpp src/scene/*.cpp src/scene/gui/*.cpp src/sparrowshell/*.cpp) -file(GLOB LIB_HEAD_LIST src/*.h src/tools/*.h src/scene/*.h src/scene/gui/*.h src/sparrowshell/*.h) +file(GLOB LIB_SRC_LIST src/*.cpp src/tools/*.cpp src/scene/*.cpp src/scene/gui/*.cpp src/sparrowshell/*.cpp src/editor/*.cpp) +file(GLOB LIB_HEAD_LIST src/*.h src/tools/*.h src/scene/*.h src/scene/gui/*.h src/sparrowshell/*.h src/editor/*.h) file(GLOB EXEC_SRC_LIST src/test/*.cpp) set(RESOURCES_FILES ${LIB_HEAD_LIST}) diff --git a/deploy/data/shield.mtl b/deploy/data/shield.mtl new file mode 100644 index 0000000..deb14ee --- /dev/null +++ b/deploy/data/shield.mtl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ef4f914e2471329c7941da84fa77f85863f650b75b419bf7448378491ce6d3a +size 146 diff --git a/deploy/data/shield.obj b/deploy/data/shield.obj new file mode 100644 index 0000000..f528434 --- /dev/null +++ b/deploy/data/shield.obj @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c99ff29465c92c7620f01977970513c7c384aca192c6375e305c2cdc8a34aa64 +size 315132 diff --git a/deploy/data/shield_albedo.jpg b/deploy/data/shield_albedo.jpg new file mode 100644 index 0000000..dbba404 --- /dev/null +++ b/deploy/data/shield_albedo.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca2ba2061f97af05b000b85e8489a7711356efc819f6df4e6058270d1be513f2 +size 151774 diff --git a/deploy/data/shield_metallic.jpg b/deploy/data/shield_metallic.jpg new file mode 100644 index 0000000..599dacd --- /dev/null +++ b/deploy/data/shield_metallic.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de71bc2611a54b4957c07f49d0d83d19db5cc54621fdbab674d7ce3dbd74605b +size 76948 diff --git a/deploy/data/shield_normals.jpg b/deploy/data/shield_normals.jpg new file mode 100644 index 0000000..0f4da20 --- /dev/null +++ b/deploy/data/shield_normals.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:296e0239c71ad95a21756e98ace3d7e9f43e82725a156f6a32b3cecf35ed912e +size 164968 diff --git a/deploy/data/shield_roughness.jpg b/deploy/data/shield_roughness.jpg new file mode 100644 index 0000000..c188783 --- /dev/null +++ b/deploy/data/shield_roughness.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f878621c0b1fe3be1e92a6475d677a6152a222189358803973e48084deffa731 +size 339069 diff --git a/deploy/data/woodbox.jpg b/deploy/data/woodbox.jpg deleted file mode 100644 index 3564171..0000000 --- a/deploy/data/woodbox.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ae7a152959a26719133063e09ea578786d2265c3bcd29ab9743ff6efb3277f2f -size 9286 diff --git a/deploy/data/woodbox.pack b/deploy/data/woodbox.pack deleted file mode 100644 index c7eb6ca..0000000 --- a/deploy/data/woodbox.pack +++ /dev/null @@ -1,38 +0,0 @@ -{ - "TextureResource": [ - { - "woodbox albedo", - "woodframe_albedo.png", - 24, - 1, - 1 - } - { - "woodbox roughness", - "woodframe_roughness.png", - 8, - 1, - 1 - } - { - "woodbox metallic", - "woodframe_metallic.png", - 8, - 1, - 1 - } - { - "woodbox normals", - "woodframe_normal.png", - 24, - 1, - 1 - } - ], - "ResourcePack": [ - { - "woodbox", - [{"TextureResource", 0}] - } - ] -} diff --git a/deploy/data/woodframe_albedo.png b/deploy/data/woodframe_albedo.png deleted file mode 100644 index b4d73c6..0000000 --- a/deploy/data/woodframe_albedo.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6bad25466e6184902ee2c2ec7d47f8ae112943d3c92fca387a5b41da0b42a2a5 -size 6976127 diff --git a/deploy/data/woodframe_metallic.png b/deploy/data/woodframe_metallic.png deleted file mode 100644 index 68da9ea..0000000 --- a/deploy/data/woodframe_metallic.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:289e65cf6fa41d6c00a62cde57ffb20dbe5f1de6b3e6a3ef4d8a7de8f41524bd -size 15007 diff --git a/deploy/data/woodframe_normal.png b/deploy/data/woodframe_normal.png deleted file mode 100644 index 984fed4..0000000 --- a/deploy/data/woodframe_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:25c6e56846639f176e8d9ef756b5df8329cba6cd0117812dc79dfa2892ccf560 -size 6869334 diff --git a/deploy/data/woodframe_roughness.png b/deploy/data/woodframe_roughness.png deleted file mode 100644 index 532fb92..0000000 --- a/deploy/data/woodframe_roughness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f714f443197a22e6f7148004b344f0081f9c7667b85429472d38b9190af43d79 -size 1822076 diff --git a/src/defaultkeysmap.h b/src/defaultkeysmap.h index caed570..be6042f 100644 --- a/src/defaultkeysmap.h +++ b/src/defaultkeysmap.h @@ -6,7 +6,8 @@ class DefaultKeysMap : public IKeysMap { public: - enum{MAIN_ACTION, SECONDARY_ACTION, TERTIARY_ACTION, MOVE_FORWARD, MOVE_BACKWARD, STRAFE_LEFT, STRAFE_RIGHT, JUMP,RUN, + enum{MAIN_ACTION, SECONDARY_ACTION, TERTIARY_ACTION, MOVE_FORWARD, MOVE_BACKWARD, STRAFE_LEFT, STRAFE_RIGHT, JUMP, RUN, + MAIN_ACTION_HOLD, SECONDARY_ACTION_HOLD, TOGGLE_NOCLIP, TOGGLE_PHYSICS_DEBUG, TOGGLE_CONSOLE, MOVE_CURSOR_LEFT, MOVE_CURSOR_RIGHT, HISTORY_UP,HISTORY_DOWN, TOGGLE_MOUSE_CURSOR, LEFT_CLICK, EXIT_GAME,LAST_DEFAULT_ACTION}; @@ -20,6 +21,8 @@ public: keys.push_back( {{STRAFE_LEFT,input::KEYBOARD}, sf::Keyboard::Q, IKeysMap::HOLD} ); keys.push_back( {{STRAFE_RIGHT,input::KEYBOARD}, sf::Keyboard::D, IKeysMap::HOLD} ); keys.push_back( {{RUN,input::KEYBOARD}, sf::Keyboard::LShift,IKeysMap::HOLD} ); + keys.push_back( {{MAIN_ACTION_HOLD,input::MOUSE}, sf::Mouse::Left, IKeysMap::HOLD} ); + keys.push_back( {{SECONDARY_ACTION_HOLD,input::MOUSE}, sf::Mouse::Right, IKeysMap::HOLD} ); keys.push_back( {{JUMP,input::KEYBOARD}, sf::Keyboard::Space, IKeysMap::PRESSED} ); keys.push_back( {{TOGGLE_NOCLIP,input::KEYBOARD}, sf::Keyboard::G, IKeysMap::PRESSED} ); keys.push_back( {{TOGGLE_PHYSICS_DEBUG,input::KEYBOARD},sf::Keyboard::P, IKeysMap::PRESSED} ); @@ -52,7 +55,19 @@ public: {EXIT_GAME,input::KEYBOARD} }; } - + + static std::vector getObjectEditorContext() + { + return { + {MAIN_ACTION,input::MOUSE}, + {SECONDARY_ACTION,input::MOUSE}, + {EXIT_GAME,input::KEYBOARD}, + {MAIN_ACTION_HOLD,input::MOUSE}, + {SECONDARY_ACTION_HOLD,input::MOUSE}, + {TOGGLE_CONSOLE,input::KEYBOARD}, + }; + } + static std::vector getShellContext() { return { diff --git a/src/editor/objecteditor.cpp b/src/editor/objecteditor.cpp new file mode 100644 index 0000000..02f2162 --- /dev/null +++ b/src/editor/objecteditor.cpp @@ -0,0 +1,28 @@ +#include "objecteditor.h" + +#include "engine.h" +#include "defaultkeysmap.h" + +#include + +#include + +ObjectEditor::ObjectEditor() : + m_camera(new TrackBallCamera()) +{ + +} + +void ObjectEditor::update() +{ + Input* input = getEngine().getInput(); + glm::vec2 diff = input->getDeltaPosition(); + for(Action action : input->getActions()) + { + if(action.action == DefaultKeysMap::MAIN_ACTION_HOLD) + m_camera->moveCamera(diff.x, diff.y); + else if(action.action == DefaultKeysMap::SECONDARY_ACTION_HOLD) + m_camera->rotateCamera(diff.x, diff.y); + } + m_camera->zoom(input->getDeltaVerticalScroll()*120.f); +} diff --git a/src/editor/objecteditor.h b/src/editor/objecteditor.h new file mode 100644 index 0000000..fbc6db2 --- /dev/null +++ b/src/editor/objecteditor.h @@ -0,0 +1,20 @@ +#ifndef OBJECTEDITOR_H +#define OBJECTEDITOR_H + +#include "scene/cameranode.h" + +class TrackBallCamera; + +class ObjectEditor : public CameraNode +{ + TrackBallCamera* m_camera; + +public: + ObjectEditor(); + + Camera *getCamera() { return (Camera*)m_camera; } + + void update(); +}; + +#endif // OBJECTEDITOR_H diff --git a/src/engine.cpp b/src/engine.cpp index c672f2d..87120fd 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -194,6 +194,7 @@ void Engine::enablePhysicsDebug() { m_physicsDebugNode = new PhysicsDebugNode(); getScene()->addToIndex(m_physicsDebugNode); + getScene()->registerMeshType(m_physicsDebugNode->getGeometryNode()->mesh->getFlags()); getScene()->getPhysics()->setDebugDrawer(m_physicsDebugNode); getScene()->getPhysics()->getDebugDrawer()->setDebugMode(btIDebugDraw::DBG_DrawWireframe); } diff --git a/src/scene/meshnode.cpp b/src/scene/meshnode.cpp index d0dca2a..cd40531 100644 --- a/src/scene/meshnode.cpp +++ b/src/scene/meshnode.cpp @@ -28,13 +28,13 @@ btRigidBody* MeshNode::buildStaticCollider() btIndexedMesh *bulletMesh = new btIndexedMesh(); Mesh *m = m_geometry.mesh; // vertices - bulletMesh->m_numVertices = m->positions3D.size(); - bulletMesh->m_vertexBase = (unsigned char*)(m->positions3D.data()); + bulletMesh->m_numVertices = m->m_positions3D.size(); + bulletMesh->m_vertexBase = (unsigned char*)(m->m_positions3D.data()); bulletMesh->m_vertexStride = sizeof(glm::vec3); bulletMesh->m_vertexType = PHY_FLOAT; // indices - bulletMesh->m_numTriangles = m->indices.size()/3; - bulletMesh->m_triangleIndexBase = (unsigned char*)(m->indices.data()); + bulletMesh->m_numTriangles = m->m_indices.size()/3; + bulletMesh->m_triangleIndexBase = (unsigned char*)(m->m_indices.data()); bulletMesh->m_triangleIndexStride = 3*sizeof(GLuint); bulletMesh->m_indexType = PHY_INTEGER; diff --git a/src/scene/physicsdebugnode.cpp b/src/scene/physicsdebugnode.cpp index e13b50b..707a93b 100644 --- a/src/scene/physicsdebugnode.cpp +++ b/src/scene/physicsdebugnode.cpp @@ -2,6 +2,8 @@ #include "SparrowRenderer/mesh.h" #include "SparrowRenderer/pbrmaterial.h" +#include "scene/scenetree.h" + PhysicsDebugNode::PhysicsDebugNode() : MeshNode(new Mesh()) { @@ -37,6 +39,6 @@ void PhysicsDebugNode::flushLines() void PhysicsDebugNode::clearBuffers() { - m_geometry.mesh->positions3D.clear(); - m_geometry.mesh->normals.clear(); + m_geometry.mesh->m_positions3D.clear(); + m_geometry.mesh->m_normals.clear(); } diff --git a/src/scene/trackballcameranode.cpp b/src/scene/trackballcameranode.cpp deleted file mode 100644 index 3d4cc2b..0000000 --- a/src/scene/trackballcameranode.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include "trackballcameranode.h" - -TrackBallCameraNode::TrackBallCameraNode(Input *input) : - m_input(input), - m_action_move(NO_ACTION), - m_action_rotate(NO_ACTION) -{} - -void TrackBallCameraNode::update() -{ - glm::vec2 diff = m_input->getDeltaPosition(); - for(Action action : m_input->getActions()) - { - if(action.action == m_action_move) - moveCamera(diff.x, diff.y); - else if(action.action == m_action_rotate) - rotateCamera(diff.x, diff.y); - } - zoom(m_input->getDeltaVerticalScroll()*120.f); -} diff --git a/src/scene/trackballcameranode.h b/src/scene/trackballcameranode.h deleted file mode 100644 index fd7fffa..0000000 --- a/src/scene/trackballcameranode.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef TRACKBALLCAMERANODE_H -#define TRACKBALLCAMERANODE_H - -#include "cameranode.h" -#include "SparrowRenderer/trackballcamera.h" -#include "SparrowInput/input.h" - -/** - * @brief The CameraNode class is a scene node that can be used by the renderer - */ -class TrackBallCameraNode : public CameraNode, public TrackBallCamera -{ - Input *m_input; - int m_action_move; - int m_action_rotate; - -public: - TrackBallCameraNode(Input *input); - - void setInputs(int action_move, int action_rotate) - { - m_action_move = action_move; - m_action_rotate = action_rotate; - } - - virtual void update(); - - virtual Camera *getCamera() { return this; } -}; - -#endif // TRACKBALLCAMERANODE_H diff --git a/src/test/main.cpp b/src/test/main.cpp index 252776e..6ff733a 100644 --- a/src/test/main.cpp +++ b/src/test/main.cpp @@ -13,7 +13,6 @@ #include #include -#include #include #include #include @@ -100,7 +99,7 @@ void generateTerrain(SceneTree *scene, btDiscreteDynamicsWorld *world) Chunk *chunk = new Chunk(&gen); // ! WARNING ! : chunk pointer is lost and never deleted glm::vec3 pos(x, y, z); chunk->generate(pos); - if(chunk->mesh->positions3D.empty()) + if(chunk->mesh->m_positions3D.empty()) delete chunk; else { diff --git a/src/test/potator.cpp b/src/test/potator.cpp index 416508a..8d66278 100644 --- a/src/test/potator.cpp +++ b/src/test/potator.cpp @@ -13,79 +13,34 @@ #include "resourcemanager.h" #include -#define PHYSICS_OFFSET 0.01f +#define PHYSICS_SHAPES_OFFSET 0.0025f Potator::Potator(PlayerCharacterNode * player, - int cube_action, + int shield_action, int bottle_action, int object_action) : m_player(player), - m_throwCubeAction(cube_action), + m_throwShieldAction(shield_action), m_throwBottleAction(bottle_action), m_throwObjectAction(object_action) { - glm::vec3 cubeDim(1); - glm::vec3 s = cubeDim*0.5f; - float density = 1.f; + // creating shield + m_shieldMeshes = Loader::loadMesh("shield.obj"); + for(Mesh* m : m_shieldMeshes) + m->initGL(); - // creating cube - m_cubeMesh = new Mesh("woodBox"); - m_cubeMesh->addVertex(glm::vec3(-1*s.x, -1*s.y, 1*s.z),glm::vec3(0, 0, 1),glm::vec2(0, 0)); - m_cubeMesh->addVertex(glm::vec3(-1*s.x, 1*s.y, 1*s.z),glm::vec3(0, 0, 1),glm::vec2(0, 1)); - m_cubeMesh->addVertex(glm::vec3( 1*s.x, -1*s.y, 1*s.z),glm::vec3(0, 0, 1),glm::vec2(1, 0)); - m_cubeMesh->addVertex(glm::vec3( 1*s.x, 1*s.y, 1*s.z),glm::vec3(0, 0, 1),glm::vec2(1, 1)); + btCompoundShape* shieldShape = new btCompoundShape(); - m_cubeMesh->addVertex(glm::vec3(-1*s.x, -1*s.y, -1*s.z),glm::vec3(0, 0, -1),glm::vec2(1, 0)); - m_cubeMesh->addVertex(glm::vec3(-1*s.x, 1*s.y, -1*s.z),glm::vec3(0, 0, -1),glm::vec2(1, 1)); - m_cubeMesh->addVertex(glm::vec3( 1*s.x, -1*s.y, -1*s.z),glm::vec3(0, 0, -1),glm::vec2(0, 0)); - m_cubeMesh->addVertex(glm::vec3( 1*s.x, 1*s.y, -1*s.z),glm::vec3(0, 0, -1),glm::vec2(0, 1)); + btTransform woodTransform = btTransform::getIdentity(); + woodTransform.setRotation(btQuaternion(0, 3.1416f, 0)); + shieldShape->addChildShape(woodTransform, new btCylinderShapeZ(btVector3(0.57f + PHYSICS_SHAPES_OFFSET, 0.57f + PHYSICS_SHAPES_OFFSET, 0.03f + PHYSICS_SHAPES_OFFSET))); + btTransform guardTransform = btTransform::getIdentity(); + guardTransform.setOrigin(btVector3(0.f, 0.f, -0.035f)); + shieldShape->addChildShape(guardTransform, new btSphereShape(0.08 + PHYSICS_SHAPES_OFFSET)); - m_cubeMesh->addVertex(glm::vec3(-1*s.x, 1*s.y, -1*s.z),glm::vec3(0, 1, 0),glm::vec2(0, 0)); - m_cubeMesh->addVertex(glm::vec3(-1*s.x, 1*s.y, 1*s.z),glm::vec3(0, 1, 0),glm::vec2(0, 1)); - m_cubeMesh->addVertex(glm::vec3( 1*s.x, 1*s.y, -1*s.z),glm::vec3(0, 1, 0),glm::vec2(1, 0)); - m_cubeMesh->addVertex(glm::vec3( 1*s.x, 1*s.y, 1*s.z),glm::vec3(0, 1, 0),glm::vec2(1, 1)); + m_shieldShape = shieldShape; - m_cubeMesh->addVertex(glm::vec3(-1*s.x, -1*s.y, -1*s.z),glm::vec3(0, -1, 0),glm::vec2(1, 0)); - m_cubeMesh->addVertex(glm::vec3(-1*s.x, -1*s.y, 1*s.z),glm::vec3(0, -1, 0),glm::vec2(1, 1)); - m_cubeMesh->addVertex(glm::vec3( 1*s.x, -1*s.y, -1*s.z),glm::vec3(0, -1, 0),glm::vec2(0, 0)); - m_cubeMesh->addVertex(glm::vec3( 1*s.x, -1*s.y, 1*s.z),glm::vec3(0, -1, 0),glm::vec2(0, 1)); - - m_cubeMesh->addVertex(glm::vec3( 1*s.x, -1*s.y, 1*s.z),glm::vec3( 1, 0, 0),glm::vec2(0, 0)); - m_cubeMesh->addVertex(glm::vec3( 1*s.x, 1*s.y, 1*s.z),glm::vec3( 1, 0, 0),glm::vec2(0, 1)); - m_cubeMesh->addVertex(glm::vec3( 1*s.x, -1*s.y, -1*s.z),glm::vec3( 1, 0, 0),glm::vec2(1, 0)); - m_cubeMesh->addVertex(glm::vec3( 1*s.x, 1*s.y, -1*s.z),glm::vec3( 1, 0, 0),glm::vec2(1, 1)); - - m_cubeMesh->addVertex(glm::vec3(-1*s.x, -1*s.y, 1*s.z),glm::vec3(-1, 0, 0),glm::vec2(1, 0)); - m_cubeMesh->addVertex(glm::vec3(-1*s.x, 1*s.y, 1*s.z),glm::vec3(-1, 0, 0),glm::vec2(1, 1)); - m_cubeMesh->addVertex(glm::vec3(-1*s.x, -1*s.y, -1*s.z),glm::vec3(-1, 0, 0),glm::vec2(0, 0)); - m_cubeMesh->addVertex(glm::vec3(-1*s.x, 1*s.y, -1*s.z),glm::vec3(-1, 0, 0),glm::vec2(0, 1)); - - for(int id=0; id<24; id+=8) - { - m_cubeMesh->addTriangle(id+0, id+1, id+2); - m_cubeMesh->addTriangle(id+2, id+1, id+3); - m_cubeMesh->addTriangle(id+6, id+5, id+4); - m_cubeMesh->addTriangle(id+7, id+5, id+6); - } - - PBRMaterial *mat = new PBRMaterial(); /* - Image* img = Loader::loadImage("woodframe_albedo.png", 24); - mat->setTexture(PBRMaterial::ALBEDO_SLOT, new Texture(img)); - img = Loader::loadImage("woodframe_metallic.png", 8); - mat->setTexture(PBRMaterial::METALLIC_SLOT, new Texture(img)); - img = Loader::loadImage("woodframe_roughness.png", 8); - mat->setTexture(PBRMaterial::ROUGHNESS_SLOT, new Texture(img)); - img = Loader::loadImage("woodframe_normal.png", 24); - mat->setTexture(PBRMaterial::NORMALS_SLOT, new Texture(img)); */ - - m_cubeMesh->setMaterial(mat); - m_cubeMesh->computeTangents(); - m_cubeMesh->initGL(); - - btVector3 halfExtents(s.x+PHYSICS_OFFSET, s.y+PHYSICS_OFFSET, s.z+PHYSICS_OFFSET); - m_cubeShape = new btBoxShape(halfExtents); - - m_cubeMass = cubeDim.x*cubeDim.y*cubeDim.z*density; + m_shieldMass = 0.5f; // creating bottle m_bottleMeshes = Loader::loadMesh("bottle.obj"); @@ -93,12 +48,18 @@ Potator::Potator(PlayerCharacterNode * player, m->initGL(); btCompoundShape* bottleShape = new btCompoundShape(); - btTransform bottleTransform = btTransform::getIdentity(); - bottleTransform.setOrigin(btVector3(0.f, 0.19f, 0.f)); - bottleShape->addChildShape(bottleTransform, new btConeShape(0.12+PHYSICS_OFFSET, 0.38+PHYSICS_OFFSET)); + btTransform ballTransform = btTransform::getIdentity(); + ballTransform.setOrigin(btVector3(0.f, 0.098f, 0.f)); + bottleShape->addChildShape(ballTransform, new btSphereShape(0.11 + PHYSICS_SHAPES_OFFSET)); + btTransform supportTransform = btTransform::getIdentity(); + supportTransform.setOrigin(btVector3(0.f, 0.025f, 0.f)); + bottleShape->addChildShape(supportTransform, new btCylinderShape(btVector3(0.07f + PHYSICS_SHAPES_OFFSET, 0.04f + PHYSICS_SHAPES_OFFSET, 0.07f + PHYSICS_SHAPES_OFFSET))); + btTransform neckTransform = btTransform::getIdentity(); + neckTransform.setOrigin(btVector3(0.f, 0.26f, 0.f)); + bottleShape->addChildShape(neckTransform, new btCylinderShape(btVector3(0.03f + PHYSICS_SHAPES_OFFSET, 0.08f + PHYSICS_SHAPES_OFFSET, 0.03f + PHYSICS_SHAPES_OFFSET))); m_bottleShape = bottleShape; - m_bottleMass = 0.25f; + m_bottleMass = 0.03f; // creating sword : m_swordMeshes = Loader::loadMesh("sword.obj"); @@ -107,18 +68,18 @@ Potator::Potator(PlayerCharacterNode * player, btCompoundShape* swordShape = new btCompoundShape(); - btVector3 guardBox = btVector3(0.03+PHYSICS_OFFSET, 0.04+PHYSICS_OFFSET, 0.25+PHYSICS_OFFSET); + btVector3 guardBox = btVector3(0.03 + PHYSICS_SHAPES_OFFSET, 0.04 + PHYSICS_SHAPES_OFFSET, 0.25 + PHYSICS_SHAPES_OFFSET); swordShape->addChildShape(btTransform::getIdentity(), new btBoxShape(guardBox)); btTransform bladeTransform = btTransform::getIdentity(); bladeTransform.setOrigin(btVector3(0.f, 0.486705f, 0.f)); - swordShape->addChildShape(bladeTransform, new btConeShape(0.07+PHYSICS_OFFSET, 2.15+PHYSICS_OFFSET)); + swordShape->addChildShape(bladeTransform, new btConeShape(0.07 + PHYSICS_SHAPES_OFFSET, 2.15 + PHYSICS_SHAPES_OFFSET)); m_swordShape = swordShape; m_swordMass = 0.5f; } -void Potator::throwCube() +void Potator::throwShield() { glm::vec3 pos(0, 10, 0); glm::vec3 dir(0, 1, 0); @@ -129,7 +90,10 @@ void Potator::throwCube() } float throwForce = 5.f; - createGib(new MeshNode(m_cubeMesh), m_cubeShape, m_cubeMass, pos, dir*throwForce, 30000); + GraphicalContainerNode *node = new GraphicalContainerNode(); + for(Mesh * m : m_shieldMeshes) + node->addChild(new MeshNode(m)); + createGib(node, m_shieldShape, m_shieldMass, pos, dir*throwForce, 30000); } void Potator::throwBottle() @@ -175,15 +139,15 @@ void Potator::update() Input *input = getEngine().getInput(); for(Action action : input->getActions()) { - if(action.action == m_throwCubeAction) - throwCube(); + if(action.action == m_throwShieldAction) + throwShield(); else if(action.action == m_throwBottleAction) throwBottle(); else if(action.action == m_throwObjectAction) throwSword(); } } - +/* ImGui::Begin("Potator"); if(ImGui::Button("Load pack")) LoadingThread::get()->loadResourcePack("woodbox"); @@ -197,4 +161,5 @@ void Potator::update() m_scene->registerMeshType(m_cubeMesh->getFlags()); } ImGui::End(); + */ } diff --git a/src/test/potator.h b/src/test/potator.h index bbe48a7..d3db63f 100644 --- a/src/test/potator.h +++ b/src/test/potator.h @@ -10,13 +10,13 @@ class Mesh; class Potator : public GibGeneratorNode { PlayerCharacterNode *m_player; - int m_throwCubeAction; + int m_throwShieldAction; int m_throwBottleAction; int m_throwObjectAction; - Mesh* m_cubeMesh; - btCollisionShape* m_cubeShape; - float m_cubeMass; + std::vector m_shieldMeshes; + btCollisionShape* m_shieldShape; + float m_shieldMass; std::vector m_bottleMeshes; btCollisionShape* m_bottleShape; @@ -26,19 +26,19 @@ class Potator : public GibGeneratorNode btCollisionShape* m_swordShape; float m_swordMass; - void throwCube(); + void throwShield(); void throwBottle(); void throwSword(); public: Potator(PlayerCharacterNode * player = nullptr, - int cube_action = NO_ACTION, + int shield_action = NO_ACTION, int sphere_action = NO_ACTION, int object_action = NO_ACTION); void setPlayer(PlayerCharacterNode *player) { m_player = player; } - void setCubeThrowingAction(int action) { m_throwCubeAction = action; } + void setShieldThrowingAction(int action) { m_throwShieldAction = action; } void setSphereThrowingAction(int action) { m_throwBottleAction = action; } void setObjectThrowingAction(int action) { m_throwObjectAction = action; } diff --git a/src/tools/loader.cpp b/src/tools/loader.cpp index 6eedfe9..c4271fb 100644 --- a/src/tools/loader.cpp +++ b/src/tools/loader.cpp @@ -216,7 +216,7 @@ std::vector Loader::loadMesh(const std::string &filename){ std::sscanf(line.c_str(),"f %d/%d/%d %d/%d/%d %d/%d/%d",tab,tab+1,tab+2,tab+3,tab+4,tab+5,tab+6,tab+7,tab+8); //TODO: check sscanf success - int nb_vertices = currentMesh->positions3D.size(); + int nb_vertices = currentMesh->m_positions3D.size(); currentMesh->addTriangle(nb_vertices, nb_vertices+1, nb_vertices+2); for(int i=0; i<3; ++i) @@ -278,7 +278,7 @@ std::vector Loader::loadMesh(const std::string &filename){ for(std::size_t i=0; iindices.size() == 0) + if(meshes[i]->m_indices.size() == 0) { meshes[i] = meshes.back(); meshes.pop_back(); @@ -287,7 +287,7 @@ std::vector Loader::loadMesh(const std::string &filename){ else { Mesh* m = meshes[i]; - if(m->normals.empty()) + if(m->m_normals.empty()) m->computeNormals(); if(m->getFlags() & (1 << Mesh::MATERIAL_PBR_NORMAL_MAP)) m->computeTangents();