Merge branch 'master' of https://git.epicsparrow.com/EpicSparrow/SparrowEngine
This commit is contained in:
commit
42fad8816b
@ -7,8 +7,8 @@ SET(VERSION_MINOR 0)
|
|||||||
set(EXTRA_INCLUDES ${PROJECT_SOURCE_DIR}/src)
|
set(EXTRA_INCLUDES ${PROJECT_SOURCE_DIR}/src)
|
||||||
|
|
||||||
# choose source file
|
# 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_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)
|
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)
|
file(GLOB EXEC_SRC_LIST src/test/*.cpp)
|
||||||
|
|
||||||
set(RESOURCES_FILES ${LIB_HEAD_LIST})
|
set(RESOURCES_FILES ${LIB_HEAD_LIST})
|
||||||
|
3
deploy/data/shield.mtl
Normal file
3
deploy/data/shield.mtl
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:1ef4f914e2471329c7941da84fa77f85863f650b75b419bf7448378491ce6d3a
|
||||||
|
size 146
|
3
deploy/data/shield.obj
Normal file
3
deploy/data/shield.obj
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:c99ff29465c92c7620f01977970513c7c384aca192c6375e305c2cdc8a34aa64
|
||||||
|
size 315132
|
3
deploy/data/shield_albedo.jpg
Normal file
3
deploy/data/shield_albedo.jpg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:ca2ba2061f97af05b000b85e8489a7711356efc819f6df4e6058270d1be513f2
|
||||||
|
size 151774
|
3
deploy/data/shield_metallic.jpg
Normal file
3
deploy/data/shield_metallic.jpg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:de71bc2611a54b4957c07f49d0d83d19db5cc54621fdbab674d7ce3dbd74605b
|
||||||
|
size 76948
|
3
deploy/data/shield_normals.jpg
Normal file
3
deploy/data/shield_normals.jpg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:296e0239c71ad95a21756e98ace3d7e9f43e82725a156f6a32b3cecf35ed912e
|
||||||
|
size 164968
|
3
deploy/data/shield_roughness.jpg
Normal file
3
deploy/data/shield_roughness.jpg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:f878621c0b1fe3be1e92a6475d677a6152a222189358803973e48084deffa731
|
||||||
|
size 339069
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:ae7a152959a26719133063e09ea578786d2265c3bcd29ab9743ff6efb3277f2f
|
|
||||||
size 9286
|
|
@ -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}]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:6bad25466e6184902ee2c2ec7d47f8ae112943d3c92fca387a5b41da0b42a2a5
|
|
||||||
size 6976127
|
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:289e65cf6fa41d6c00a62cde57ffb20dbe5f1de6b3e6a3ef4d8a7de8f41524bd
|
|
||||||
size 15007
|
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:25c6e56846639f176e8d9ef756b5df8329cba6cd0117812dc79dfa2892ccf560
|
|
||||||
size 6869334
|
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:f714f443197a22e6f7148004b344f0081f9c7667b85429472d38b9190af43d79
|
|
||||||
size 1822076
|
|
@ -6,7 +6,8 @@
|
|||||||
class DefaultKeysMap : public IKeysMap
|
class DefaultKeysMap : public IKeysMap
|
||||||
{
|
{
|
||||||
public:
|
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,
|
TOGGLE_NOCLIP, TOGGLE_PHYSICS_DEBUG, TOGGLE_CONSOLE,
|
||||||
MOVE_CURSOR_LEFT, MOVE_CURSOR_RIGHT, HISTORY_UP,HISTORY_DOWN, TOGGLE_MOUSE_CURSOR, LEFT_CLICK,
|
MOVE_CURSOR_LEFT, MOVE_CURSOR_RIGHT, HISTORY_UP,HISTORY_DOWN, TOGGLE_MOUSE_CURSOR, LEFT_CLICK,
|
||||||
EXIT_GAME,LAST_DEFAULT_ACTION};
|
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_LEFT,input::KEYBOARD}, sf::Keyboard::Q, IKeysMap::HOLD} );
|
||||||
keys.push_back( {{STRAFE_RIGHT,input::KEYBOARD}, sf::Keyboard::D, 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( {{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( {{JUMP,input::KEYBOARD}, sf::Keyboard::Space, IKeysMap::PRESSED} );
|
||||||
keys.push_back( {{TOGGLE_NOCLIP,input::KEYBOARD}, sf::Keyboard::G, 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} );
|
keys.push_back( {{TOGGLE_PHYSICS_DEBUG,input::KEYBOARD},sf::Keyboard::P, IKeysMap::PRESSED} );
|
||||||
@ -52,7 +55,19 @@ public:
|
|||||||
{EXIT_GAME,input::KEYBOARD}
|
{EXIT_GAME,input::KEYBOARD}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static std::vector<Action> 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<Action> getShellContext()
|
static std::vector<Action> getShellContext()
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
|
28
src/editor/objecteditor.cpp
Normal file
28
src/editor/objecteditor.cpp
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#include "objecteditor.h"
|
||||||
|
|
||||||
|
#include "engine.h"
|
||||||
|
#include "defaultkeysmap.h"
|
||||||
|
|
||||||
|
#include <SparrowInput/input.h>
|
||||||
|
|
||||||
|
#include <SparrowRenderer/trackballcamera.h>
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
20
src/editor/objecteditor.h
Normal file
20
src/editor/objecteditor.h
Normal file
@ -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
|
@ -194,6 +194,7 @@ void Engine::enablePhysicsDebug()
|
|||||||
{
|
{
|
||||||
m_physicsDebugNode = new PhysicsDebugNode();
|
m_physicsDebugNode = new PhysicsDebugNode();
|
||||||
getScene()->addToIndex(m_physicsDebugNode);
|
getScene()->addToIndex(m_physicsDebugNode);
|
||||||
|
getScene()->registerMeshType(m_physicsDebugNode->getGeometryNode()->mesh->getFlags());
|
||||||
getScene()->getPhysics()->setDebugDrawer(m_physicsDebugNode);
|
getScene()->getPhysics()->setDebugDrawer(m_physicsDebugNode);
|
||||||
getScene()->getPhysics()->getDebugDrawer()->setDebugMode(btIDebugDraw::DBG_DrawWireframe);
|
getScene()->getPhysics()->getDebugDrawer()->setDebugMode(btIDebugDraw::DBG_DrawWireframe);
|
||||||
}
|
}
|
||||||
|
@ -28,13 +28,13 @@ btRigidBody* MeshNode::buildStaticCollider()
|
|||||||
btIndexedMesh *bulletMesh = new btIndexedMesh();
|
btIndexedMesh *bulletMesh = new btIndexedMesh();
|
||||||
Mesh *m = m_geometry.mesh;
|
Mesh *m = m_geometry.mesh;
|
||||||
// vertices
|
// vertices
|
||||||
bulletMesh->m_numVertices = m->positions3D.size();
|
bulletMesh->m_numVertices = m->m_positions3D.size();
|
||||||
bulletMesh->m_vertexBase = (unsigned char*)(m->positions3D.data());
|
bulletMesh->m_vertexBase = (unsigned char*)(m->m_positions3D.data());
|
||||||
bulletMesh->m_vertexStride = sizeof(glm::vec3);
|
bulletMesh->m_vertexStride = sizeof(glm::vec3);
|
||||||
bulletMesh->m_vertexType = PHY_FLOAT;
|
bulletMesh->m_vertexType = PHY_FLOAT;
|
||||||
// indices
|
// indices
|
||||||
bulletMesh->m_numTriangles = m->indices.size()/3;
|
bulletMesh->m_numTriangles = m->m_indices.size()/3;
|
||||||
bulletMesh->m_triangleIndexBase = (unsigned char*)(m->indices.data());
|
bulletMesh->m_triangleIndexBase = (unsigned char*)(m->m_indices.data());
|
||||||
bulletMesh->m_triangleIndexStride = 3*sizeof(GLuint);
|
bulletMesh->m_triangleIndexStride = 3*sizeof(GLuint);
|
||||||
bulletMesh->m_indexType = PHY_INTEGER;
|
bulletMesh->m_indexType = PHY_INTEGER;
|
||||||
|
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
#include "SparrowRenderer/mesh.h"
|
#include "SparrowRenderer/mesh.h"
|
||||||
#include "SparrowRenderer/pbrmaterial.h"
|
#include "SparrowRenderer/pbrmaterial.h"
|
||||||
|
|
||||||
|
#include "scene/scenetree.h"
|
||||||
|
|
||||||
PhysicsDebugNode::PhysicsDebugNode() :
|
PhysicsDebugNode::PhysicsDebugNode() :
|
||||||
MeshNode(new Mesh())
|
MeshNode(new Mesh())
|
||||||
{
|
{
|
||||||
@ -37,6 +39,6 @@ void PhysicsDebugNode::flushLines()
|
|||||||
|
|
||||||
void PhysicsDebugNode::clearBuffers()
|
void PhysicsDebugNode::clearBuffers()
|
||||||
{
|
{
|
||||||
m_geometry.mesh->positions3D.clear();
|
m_geometry.mesh->m_positions3D.clear();
|
||||||
m_geometry.mesh->normals.clear();
|
m_geometry.mesh->m_normals.clear();
|
||||||
}
|
}
|
||||||
|
@ -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);
|
|
||||||
}
|
|
@ -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
|
|
@ -13,7 +13,6 @@
|
|||||||
|
|
||||||
#include <scene/scenetree.h>
|
#include <scene/scenetree.h>
|
||||||
#include <scene/textnode.h>
|
#include <scene/textnode.h>
|
||||||
#include <scene/trackballcameranode.h>
|
|
||||||
#include <scene/playercharacternode.h>
|
#include <scene/playercharacternode.h>
|
||||||
#include <scene/lightnode.h>
|
#include <scene/lightnode.h>
|
||||||
#include <scene/graphicalcontainernode.h>
|
#include <scene/graphicalcontainernode.h>
|
||||||
@ -100,7 +99,7 @@ void generateTerrain(SceneTree *scene, btDiscreteDynamicsWorld *world)
|
|||||||
Chunk *chunk = new Chunk(&gen); // ! WARNING ! : chunk pointer is lost and never deleted
|
Chunk *chunk = new Chunk(&gen); // ! WARNING ! : chunk pointer is lost and never deleted
|
||||||
glm::vec3 pos(x, y, z);
|
glm::vec3 pos(x, y, z);
|
||||||
chunk->generate(pos);
|
chunk->generate(pos);
|
||||||
if(chunk->mesh->positions3D.empty())
|
if(chunk->mesh->m_positions3D.empty())
|
||||||
delete chunk;
|
delete chunk;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -13,79 +13,34 @@
|
|||||||
#include "resourcemanager.h"
|
#include "resourcemanager.h"
|
||||||
#include <imgui/imgui.h>
|
#include <imgui/imgui.h>
|
||||||
|
|
||||||
#define PHYSICS_OFFSET 0.01f
|
#define PHYSICS_SHAPES_OFFSET 0.0025f
|
||||||
|
|
||||||
Potator::Potator(PlayerCharacterNode * player,
|
Potator::Potator(PlayerCharacterNode * player,
|
||||||
int cube_action,
|
int shield_action,
|
||||||
int bottle_action,
|
int bottle_action,
|
||||||
int object_action) :
|
int object_action) :
|
||||||
m_player(player),
|
m_player(player),
|
||||||
m_throwCubeAction(cube_action),
|
m_throwShieldAction(shield_action),
|
||||||
m_throwBottleAction(bottle_action),
|
m_throwBottleAction(bottle_action),
|
||||||
m_throwObjectAction(object_action)
|
m_throwObjectAction(object_action)
|
||||||
{
|
{
|
||||||
glm::vec3 cubeDim(1);
|
// creating shield
|
||||||
glm::vec3 s = cubeDim*0.5f;
|
m_shieldMeshes = Loader::loadMesh("shield.obj");
|
||||||
float density = 1.f;
|
for(Mesh* m : m_shieldMeshes)
|
||||||
|
m->initGL();
|
||||||
|
|
||||||
// creating cube
|
btCompoundShape* shieldShape = new btCompoundShape();
|
||||||
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));
|
|
||||||
|
|
||||||
m_cubeMesh->addVertex(glm::vec3(-1*s.x, -1*s.y, -1*s.z),glm::vec3(0, 0, -1),glm::vec2(1, 0));
|
btTransform woodTransform = btTransform::getIdentity();
|
||||||
m_cubeMesh->addVertex(glm::vec3(-1*s.x, 1*s.y, -1*s.z),glm::vec3(0, 0, -1),glm::vec2(1, 1));
|
woodTransform.setRotation(btQuaternion(0, 3.1416f, 0));
|
||||||
m_cubeMesh->addVertex(glm::vec3( 1*s.x, -1*s.y, -1*s.z),glm::vec3(0, 0, -1),glm::vec2(0, 0));
|
shieldShape->addChildShape(woodTransform, new btCylinderShapeZ(btVector3(0.57f + PHYSICS_SHAPES_OFFSET, 0.57f + PHYSICS_SHAPES_OFFSET, 0.03f + PHYSICS_SHAPES_OFFSET)));
|
||||||
m_cubeMesh->addVertex(glm::vec3( 1*s.x, 1*s.y, -1*s.z),glm::vec3(0, 0, -1),glm::vec2(0, 1));
|
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_shieldShape = shieldShape;
|
||||||
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_cubeMesh->addVertex(glm::vec3(-1*s.x, -1*s.y, -1*s.z),glm::vec3(0, -1, 0),glm::vec2(1, 0));
|
m_shieldMass = 0.5f;
|
||||||
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;
|
|
||||||
|
|
||||||
// creating bottle
|
// creating bottle
|
||||||
m_bottleMeshes = Loader::loadMesh("bottle.obj");
|
m_bottleMeshes = Loader::loadMesh("bottle.obj");
|
||||||
@ -93,12 +48,18 @@ Potator::Potator(PlayerCharacterNode * player,
|
|||||||
m->initGL();
|
m->initGL();
|
||||||
|
|
||||||
btCompoundShape* bottleShape = new btCompoundShape();
|
btCompoundShape* bottleShape = new btCompoundShape();
|
||||||
btTransform bottleTransform = btTransform::getIdentity();
|
btTransform ballTransform = btTransform::getIdentity();
|
||||||
bottleTransform.setOrigin(btVector3(0.f, 0.19f, 0.f));
|
ballTransform.setOrigin(btVector3(0.f, 0.098f, 0.f));
|
||||||
bottleShape->addChildShape(bottleTransform, new btConeShape(0.12+PHYSICS_OFFSET, 0.38+PHYSICS_OFFSET));
|
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_bottleShape = bottleShape;
|
||||||
|
|
||||||
m_bottleMass = 0.25f;
|
m_bottleMass = 0.03f;
|
||||||
|
|
||||||
// creating sword :
|
// creating sword :
|
||||||
m_swordMeshes = Loader::loadMesh("sword.obj");
|
m_swordMeshes = Loader::loadMesh("sword.obj");
|
||||||
@ -107,18 +68,18 @@ Potator::Potator(PlayerCharacterNode * player,
|
|||||||
|
|
||||||
btCompoundShape* swordShape = new btCompoundShape();
|
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));
|
swordShape->addChildShape(btTransform::getIdentity(), new btBoxShape(guardBox));
|
||||||
|
|
||||||
btTransform bladeTransform = btTransform::getIdentity();
|
btTransform bladeTransform = btTransform::getIdentity();
|
||||||
bladeTransform.setOrigin(btVector3(0.f, 0.486705f, 0.f));
|
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_swordShape = swordShape;
|
||||||
m_swordMass = 0.5f;
|
m_swordMass = 0.5f;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Potator::throwCube()
|
void Potator::throwShield()
|
||||||
{
|
{
|
||||||
glm::vec3 pos(0, 10, 0);
|
glm::vec3 pos(0, 10, 0);
|
||||||
glm::vec3 dir(0, 1, 0);
|
glm::vec3 dir(0, 1, 0);
|
||||||
@ -129,7 +90,10 @@ void Potator::throwCube()
|
|||||||
}
|
}
|
||||||
float throwForce = 5.f;
|
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()
|
void Potator::throwBottle()
|
||||||
@ -175,15 +139,15 @@ void Potator::update()
|
|||||||
Input *input = getEngine().getInput();
|
Input *input = getEngine().getInput();
|
||||||
for(Action action : input->getActions())
|
for(Action action : input->getActions())
|
||||||
{
|
{
|
||||||
if(action.action == m_throwCubeAction)
|
if(action.action == m_throwShieldAction)
|
||||||
throwCube();
|
throwShield();
|
||||||
else if(action.action == m_throwBottleAction)
|
else if(action.action == m_throwBottleAction)
|
||||||
throwBottle();
|
throwBottle();
|
||||||
else if(action.action == m_throwObjectAction)
|
else if(action.action == m_throwObjectAction)
|
||||||
throwSword();
|
throwSword();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
ImGui::Begin("Potator");
|
ImGui::Begin("Potator");
|
||||||
if(ImGui::Button("Load pack"))
|
if(ImGui::Button("Load pack"))
|
||||||
LoadingThread::get()->loadResourcePack("woodbox");
|
LoadingThread::get()->loadResourcePack("woodbox");
|
||||||
@ -197,4 +161,5 @@ void Potator::update()
|
|||||||
m_scene->registerMeshType(m_cubeMesh->getFlags());
|
m_scene->registerMeshType(m_cubeMesh->getFlags());
|
||||||
}
|
}
|
||||||
ImGui::End();
|
ImGui::End();
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
@ -10,13 +10,13 @@ class Mesh;
|
|||||||
class Potator : public GibGeneratorNode
|
class Potator : public GibGeneratorNode
|
||||||
{
|
{
|
||||||
PlayerCharacterNode *m_player;
|
PlayerCharacterNode *m_player;
|
||||||
int m_throwCubeAction;
|
int m_throwShieldAction;
|
||||||
int m_throwBottleAction;
|
int m_throwBottleAction;
|
||||||
int m_throwObjectAction;
|
int m_throwObjectAction;
|
||||||
|
|
||||||
Mesh* m_cubeMesh;
|
std::vector<Mesh*> m_shieldMeshes;
|
||||||
btCollisionShape* m_cubeShape;
|
btCollisionShape* m_shieldShape;
|
||||||
float m_cubeMass;
|
float m_shieldMass;
|
||||||
|
|
||||||
std::vector<Mesh*> m_bottleMeshes;
|
std::vector<Mesh*> m_bottleMeshes;
|
||||||
btCollisionShape* m_bottleShape;
|
btCollisionShape* m_bottleShape;
|
||||||
@ -26,19 +26,19 @@ class Potator : public GibGeneratorNode
|
|||||||
btCollisionShape* m_swordShape;
|
btCollisionShape* m_swordShape;
|
||||||
float m_swordMass;
|
float m_swordMass;
|
||||||
|
|
||||||
void throwCube();
|
void throwShield();
|
||||||
void throwBottle();
|
void throwBottle();
|
||||||
void throwSword();
|
void throwSword();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Potator(PlayerCharacterNode * player = nullptr,
|
Potator(PlayerCharacterNode * player = nullptr,
|
||||||
int cube_action = NO_ACTION,
|
int shield_action = NO_ACTION,
|
||||||
int sphere_action = NO_ACTION,
|
int sphere_action = NO_ACTION,
|
||||||
int object_action = NO_ACTION);
|
int object_action = NO_ACTION);
|
||||||
|
|
||||||
void setPlayer(PlayerCharacterNode *player) { m_player = player; }
|
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 setSphereThrowingAction(int action) { m_throwBottleAction = action; }
|
||||||
void setObjectThrowingAction(int action) { m_throwObjectAction = action; }
|
void setObjectThrowingAction(int action) { m_throwObjectAction = action; }
|
||||||
|
|
||||||
|
@ -216,7 +216,7 @@ std::vector<Mesh*> 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);
|
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
|
//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);
|
currentMesh->addTriangle(nb_vertices, nb_vertices+1, nb_vertices+2);
|
||||||
for(int i=0; i<3; ++i)
|
for(int i=0; i<3; ++i)
|
||||||
@ -278,7 +278,7 @@ std::vector<Mesh*> Loader::loadMesh(const std::string &filename){
|
|||||||
|
|
||||||
for(std::size_t i=0; i<meshes.size(); ++i)
|
for(std::size_t i=0; i<meshes.size(); ++i)
|
||||||
{
|
{
|
||||||
if(meshes[i]->indices.size() == 0)
|
if(meshes[i]->m_indices.size() == 0)
|
||||||
{
|
{
|
||||||
meshes[i] = meshes.back();
|
meshes[i] = meshes.back();
|
||||||
meshes.pop_back();
|
meshes.pop_back();
|
||||||
@ -287,7 +287,7 @@ std::vector<Mesh*> Loader::loadMesh(const std::string &filename){
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
Mesh* m = meshes[i];
|
Mesh* m = meshes[i];
|
||||||
if(m->normals.empty())
|
if(m->m_normals.empty())
|
||||||
m->computeNormals();
|
m->computeNormals();
|
||||||
if(m->getFlags() & (1 << Mesh::MATERIAL_PBR_NORMAL_MAP))
|
if(m->getFlags() & (1 << Mesh::MATERIAL_PBR_NORMAL_MAP))
|
||||||
m->computeTangents();
|
m->computeTangents();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user