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)
|
||||
|
||||
# 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})
|
||||
|
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
|
||||
{
|
||||
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<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()
|
||||
{
|
||||
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();
|
||||
getScene()->addToIndex(m_physicsDebugNode);
|
||||
getScene()->registerMeshType(m_physicsDebugNode->getGeometryNode()->mesh->getFlags());
|
||||
getScene()->getPhysics()->setDebugDrawer(m_physicsDebugNode);
|
||||
getScene()->getPhysics()->getDebugDrawer()->setDebugMode(btIDebugDraw::DBG_DrawWireframe);
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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/textnode.h>
|
||||
#include <scene/trackballcameranode.h>
|
||||
#include <scene/playercharacternode.h>
|
||||
#include <scene/lightnode.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
|
||||
glm::vec3 pos(x, y, z);
|
||||
chunk->generate(pos);
|
||||
if(chunk->mesh->positions3D.empty())
|
||||
if(chunk->mesh->m_positions3D.empty())
|
||||
delete chunk;
|
||||
else
|
||||
{
|
||||
|
@ -13,79 +13,34 @@
|
||||
#include "resourcemanager.h"
|
||||
#include <imgui/imgui.h>
|
||||
|
||||
#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();
|
||||
*/
|
||||
}
|
||||
|
@ -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<Mesh*> m_shieldMeshes;
|
||||
btCollisionShape* m_shieldShape;
|
||||
float m_shieldMass;
|
||||
|
||||
std::vector<Mesh*> 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; }
|
||||
|
||||
|
@ -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);
|
||||
//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<Mesh*> Loader::loadMesh(const std::string &filename){
|
||||
|
||||
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.pop_back();
|
||||
@ -287,7 +287,7 @@ std::vector<Mesh*> 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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user