Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion engine/includes/components/transform.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ class ENGINE_EXPORT Transform : public Component {

mutable mutex m_mutex;

mutable int32_t m_hash;
mutable uint32_t m_hash;
mutable bool m_dirty;

};
Expand Down
3 changes: 0 additions & 3 deletions engine/includes/editor/viewport/handletools.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@ class ENGINE_EXPORT HandleTools {

static float distanceToMesh(const Matrix4 &matrix, const IndexVector &indices, const Vector3Vector &vertices, const Vector2 &screen);

public:
static float s_Sense;

};

#endif // HANDLETOOLS_H
23 changes: 6 additions & 17 deletions engine/includes/resources/material.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,50 +12,39 @@ class ENGINE_EXPORT Material : public Resource {
A_REGISTER(Material, Resource, Resources)

A_PROPERTIES(
A_PROPERTY(bool, doubleSided, Material::doubleSided, Material::setDoubleSided),
A_PROPERTY(int, materialType, Material::materialType, Material::setMaterialType),
A_PROPERTY(int, lightModel, Material::lightModel, Material::setLightModel),
A_PROPERTY(bool, doubleSided, Material::doubleSided, Material::setDoubleSided),
A_PROPERTY(bool, wireframe, Material::wireframe, Material::setWireframe)
)
A_METHODS(
A_METHOD(void, Material::setTexture)
)
A_ENUMS(
A_ENUM(MaterialType,
A_ENUM(Type,
A_VALUE(Surface),
A_VALUE(PostProcess),
A_VALUE(LightFunction)),

A_ENUM(LightModelType,
A_ENUM(LightModel,
A_VALUE(Unlit),
A_VALUE(Lit),
A_VALUE(Subsurface)),

A_ENUM(BlendType,
A_VALUE(Opaque),
A_VALUE(Additive),
A_VALUE(Translucent))
A_VALUE(Subsurface))
)

public:
enum MaterialType {
enum Type {
Surface,
PostProcess,
LightFunction
};

enum LightModelType {
enum LightModel {
Unlit,
Lit,
Subsurface
};

enum BlendType {
Opaque,
Additive,
Translucent
};

enum SurfaceType {
Static,
Skinned,
Expand Down
4 changes: 2 additions & 2 deletions engine/src/components/transform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ void Transform::setParent(Object *parent, int32_t position, bool force) {
\internal
*/
int Transform::hash() const {
return m_hash;
return static_cast<int32_t>(m_hash);
}
/*!
\internal
Expand All @@ -274,7 +274,7 @@ void Transform::cleanDirty() const {
}
m_hash = 16;
for(int i = 0; i < 16; i++) {
m_hash ^= hash_float(m_worldTransform[i]) + 0x9e3779b9 + (m_hash << 6 ) + (m_hash >> 2);
Mathf::hashCombine(m_hash, m_worldTransform[i]);
}
m_dirty = false;
}
4 changes: 3 additions & 1 deletion engine/src/editor/viewport/cameracontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@

#define DT 0.0625f

const float s_Sence = 0.04f;

namespace {
const char *gCamera("Camera");
const char *gPosition("position");
Expand Down Expand Up @@ -384,7 +386,7 @@ void CameraController::drawHelpers(Object &object) {
if(component && component->actor()->isEnabled()) {
component->drawGizmos();
float distance = HandleTools::distanceToPoint(Matrix4(), component->transform()->worldPosition(), Handles::s_Mouse);
if(distance <= HandleTools::s_Sense) {
if(distance <= s_Sence) {
select(object);
}

Expand Down
52 changes: 27 additions & 25 deletions engine/src/editor/viewport/handles.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@

#define CONTROL_SIZE 90.0f

float s_Sense = 0.04f;

Vector4 Handles::s_Normal = Vector4(1.0f, 1.0f, 1.0f, 1.0f);
Vector4 Handles::s_Grey = Vector4(0.3f, 0.3f, 0.3f, 0.6f);
Vector4 Handles::s_Selected = Vector4(1.0f, 1.0f, 0.0f, 1.0f);
Expand Down Expand Up @@ -140,22 +142,22 @@ Vector3 Handles::moveTool(const Vector3 &position, const Quaternion &rotation, b
Matrix4 r(Vector3(), Quaternion(Vector3(0, 1, 0),-90), Vector3(1));

if(!locked) {
if(HandleTools::distanceToPoint(model, Vector3(), s_Mouse) <= HandleTools::s_Sense) {
if(HandleTools::distanceToPoint(model, Vector3(), s_Mouse) <= s_Sense) {
s_Axes = AXIS_X | AXIS_Y | AXIS_Z;
} else if((HandleTools::distanceToMesh(x, s_Move->indices(), s_Move->vertices(), s_Mouse) <= HandleTools::s_Sense) ||
(HandleTools::distanceToMesh(z * r, s_Move->indices(), s_Move->vertices(), s_Mouse) <= HandleTools::s_Sense)) {
} else if((HandleTools::distanceToMesh(x, s_Move->indices(), s_Move->vertices(), s_Mouse) <= s_Sense) ||
(HandleTools::distanceToMesh(z * r, s_Move->indices(), s_Move->vertices(), s_Mouse) <= s_Sense)) {
s_Axes = AXIS_X | AXIS_Z;
} else if((HandleTools::distanceToMesh(y, s_Move->indices(), s_Move->vertices(), s_Mouse) <= HandleTools::s_Sense) ||
(HandleTools::distanceToMesh(x * r, s_Move->indices(), s_Move->vertices(), s_Mouse) <= HandleTools::s_Sense)) {
} else if((HandleTools::distanceToMesh(y, s_Move->indices(), s_Move->vertices(), s_Mouse) <= s_Sense) ||
(HandleTools::distanceToMesh(x * r, s_Move->indices(), s_Move->vertices(), s_Mouse) <= s_Sense)) {
s_Axes = AXIS_Y | AXIS_X;
} else if((HandleTools::distanceToMesh(z, s_Move->indices(), s_Move->vertices(), s_Mouse) <= HandleTools::s_Sense) ||
(HandleTools::distanceToMesh(y * r, s_Move->indices(), s_Move->vertices(), s_Mouse) <= HandleTools::s_Sense)) {
} else if((HandleTools::distanceToMesh(z, s_Move->indices(), s_Move->vertices(), s_Mouse) <= s_Sense) ||
(HandleTools::distanceToMesh(y * r, s_Move->indices(), s_Move->vertices(), s_Mouse) <= s_Sense)) {
s_Axes = AXIS_Z | AXIS_Y;
} else if(HandleTools::distanceToMesh(x, s_Axis->indices(), s_Axis->vertices(), s_Mouse) <= HandleTools::s_Sense) {
} else if(HandleTools::distanceToMesh(x, s_Axis->indices(), s_Axis->vertices(), s_Mouse) <= s_Sense) {
s_Axes = AXIS_X;
} else if(HandleTools::distanceToMesh(y, s_Axis->indices(), s_Axis->vertices(), s_Mouse) <= HandleTools::s_Sense) {
} else if(HandleTools::distanceToMesh(y, s_Axis->indices(), s_Axis->vertices(), s_Mouse) <= s_Sense) {
s_Axes = AXIS_Y;
} else if(HandleTools::distanceToMesh(z, s_Axis->indices(), s_Axis->vertices(), s_Mouse) <= HandleTools::s_Sense) {
} else if(HandleTools::distanceToMesh(z, s_Axis->indices(), s_Axis->vertices(), s_Mouse) <= s_Sense) {
s_Axes = AXIS_Z;
}
}
Expand Down Expand Up @@ -282,16 +284,16 @@ float Handles::rotationTool(const Vector3 &position, const Quaternion &rotation,
float yDist = HandleTools::distanceToMesh(y, a_indices, a_points, s_Mouse);
float zDist = HandleTools::distanceToMesh(z, a_indices, a_points, s_Mouse);

if(xyzDist <= HandleTools::s_Sense) {
if(xyzDist <= s_Sense) {
s_Axes = AXIS_X | AXIS_Y | AXIS_Z;
}
if(xDist <= HandleTools::s_Sense && (xDist < yDist) && (xDist < zDist)) {
if(xDist <= s_Sense && (xDist < yDist) && (xDist < zDist)) {
s_Axes = AXIS_X;
}
if(yDist <= HandleTools::s_Sense && (yDist < xDist) && (yDist < zDist)) {
if(yDist <= s_Sense && (yDist < xDist) && (yDist < zDist)) {
s_Axes = AXIS_Y;
}
if(zDist <= HandleTools::s_Sense && (zDist < xDist) && (zDist < yDist)) {
if(zDist <= s_Sense && (zDist < xDist) && (zDist < yDist)) {
s_Axes = AXIS_Z;
}
}
Expand Down Expand Up @@ -391,22 +393,22 @@ Vector3 Handles::scaleTool(const Vector3 &position, const Quaternion &rotation,
Matrix4 r(Vector3(), Quaternion(Vector3(0, 1, 0),-90), Vector3(1));

if(!locked) {
if(HandleTools::distanceToPoint(model, Vector3(), s_Mouse) <= HandleTools::s_Sense) {
if(HandleTools::distanceToPoint(model, Vector3(), s_Mouse) <= s_Sense) {
s_Axes = AXIS_X | AXIS_Y | AXIS_Z;
} else if((HandleTools::distanceToMesh(x, s_Scale->indices(), s_Scale->vertices(), s_Mouse) <= HandleTools::s_Sense) ||
(HandleTools::distanceToMesh(z * r, s_Scale->indices(), s_Scale->vertices(), s_Mouse) <= HandleTools::s_Sense)) {
} else if((HandleTools::distanceToMesh(x, s_Scale->indices(), s_Scale->vertices(), s_Mouse) <= s_Sense) ||
(HandleTools::distanceToMesh(z * r, s_Scale->indices(), s_Scale->vertices(), s_Mouse) <= s_Sense)) {
s_Axes = AXIS_X | AXIS_Z;
} else if((HandleTools::distanceToMesh(y, s_Scale->indices(), s_Scale->vertices(), s_Mouse) <= HandleTools::s_Sense) ||
(HandleTools::distanceToMesh(x * r, s_Scale->indices(), s_Scale->vertices(), s_Mouse) <= HandleTools::s_Sense)) {
} else if((HandleTools::distanceToMesh(y, s_Scale->indices(), s_Scale->vertices(), s_Mouse) <= s_Sense) ||
(HandleTools::distanceToMesh(x * r, s_Scale->indices(), s_Scale->vertices(), s_Mouse) <= s_Sense)) {
s_Axes = AXIS_Y | AXIS_X;
} else if((HandleTools::distanceToMesh(z, s_Scale->indices(), s_Scale->vertices(), s_Mouse) <= HandleTools::s_Sense) ||
(HandleTools::distanceToMesh(y * r, s_Scale->indices(), s_Scale->vertices(), s_Mouse) <= HandleTools::s_Sense)) {
} else if((HandleTools::distanceToMesh(z, s_Scale->indices(), s_Scale->vertices(), s_Mouse) <= s_Sense) ||
(HandleTools::distanceToMesh(y * r, s_Scale->indices(), s_Scale->vertices(), s_Mouse) <= s_Sense)) {
s_Axes = AXIS_Z | AXIS_Y;
} else if(HandleTools::distanceToMesh(x, s_Axis->indices(), s_Axis->vertices(), s_Mouse) <= HandleTools::s_Sense) {
} else if(HandleTools::distanceToMesh(x, s_Axis->indices(), s_Axis->vertices(), s_Mouse) <= s_Sense) {
s_Axes = AXIS_X;
} else if(HandleTools::distanceToMesh(y, s_Axis->indices(), s_Axis->vertices(), s_Mouse) <= HandleTools::s_Sense) {
} else if(HandleTools::distanceToMesh(y, s_Axis->indices(), s_Axis->vertices(), s_Mouse) <= s_Sense) {
s_Axes = AXIS_Y;
} else if(HandleTools::distanceToMesh(z, s_Axis->indices(), s_Axis->vertices(), s_Mouse) <= HandleTools::s_Sense) {
} else if(HandleTools::distanceToMesh(z, s_Axis->indices(), s_Axis->vertices(), s_Mouse) <= s_Sense) {
s_Axes = AXIS_Z;
}
}
Expand Down Expand Up @@ -567,7 +569,7 @@ Vector3 Handles::rectTool(const Vector3 &position, const Vector3 &box, int &axis
Gizmos::drawBox(model * bl, Vector3(scale * 0.05f), s_zColor);

if(!locked) {
float sence = HandleTools::s_Sense * 0.25f;
float sence = s_Sense * 0.25f;

Handles::s_Axes = 0;
if(HandleTools::distanceToPoint(model, tr, s_Mouse) <= sence) {
Expand Down
2 changes: 0 additions & 2 deletions engine/src/editor/viewport/handletools.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@

#include <float.h>

float HandleTools::s_Sense = 0.02f;

float HandleTools::distanceToPoint(const Matrix4 &matrix, const Vector3 &point, const Vector2 &screen) {
Vector2 ssp = Camera::current()->project(matrix * point);

Expand Down
2 changes: 1 addition & 1 deletion engine/src/resources/mesh.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,7 @@ int Mesh::indexCount(int sub) const {
if(sub < static_cast<int32_t>(m_offsets.size()) - 1) {
return m_offsets[sub+1] - m_offsets[sub];
}
return m_indices.size() - m_offsets[sub];
return m_indices.size() - (m_offsets.empty() ? 0 : m_offsets[sub]);
}
/*!
Recalculates the normals of the Mesh from the triangles and vertices.
Expand Down
Loading