Skip to content
Snippets Groups Projects
Commit 9b71a236 authored by Sebastian Pape's avatar Sebastian Pape
Browse files

Added highlighting of grips for the two helpers

parent bc726b0a
No related branches found
No related tags found
No related merge requests found
......@@ -101,7 +101,7 @@ RotationHelper::RotationHelper(phx::Scene* scene) {
static char deg[] = "000";
float degr = -glm::degrees(angle_horizontal_);
if (degr < 0) degr += 360.0f;
snprintf(deg, sizeof(deg), "%.0f", glm::round(degr));
snprintf(deg, sizeof(deg), "%d", ((int)glm::round(degr) % 360));
text_node_h->SetText(std::string(deg));
});
text_node_h->SetBillboard(true);
......@@ -116,7 +116,7 @@ RotationHelper::RotationHelper(phx::Scene* scene) {
static char deg[] = "000";
float degr = glm::degrees(angle_vertical_);
if (degr < 0) degr += 360.0f;
snprintf(deg, sizeof(deg), "%.0f", glm::round(degr));
snprintf(deg, sizeof(deg), "%d", ((int)glm::round(degr) % 360));
text_node_v->SetText(std::string(deg));
});
text_node_v->SetBillboard(true);
......@@ -195,6 +195,65 @@ RotationHelper::RotationHelper(phx::Scene* scene) {
text_node_v->ManualUpdate();
});
// highlight stuff
vertical_rod_ball_color_ =
vertical_rod_ball_->GetFirstComponent<phx::MaterialHandle>()
->GetMaterial()
->GetAmbientColor();
select_v->SetHover([this](glm::mat4, std::chrono::milliseconds) {
vertical_rod_ball_hovered_ = true;
if (vertical_rod_ball_grabbed_) return;
vertical_rod_ball_->GetFirstComponent<phx::MaterialHandle>()
->GetMaterial()
->SetAmbientColor(
glm::mix(vertical_rod_ball_color_, glm::vec3(1), 0.3f));
});
select_v->SetUnhover([this]() {
vertical_rod_ball_hovered_ = false;
if (vertical_rod_ball_grabbed_) return;
vertical_rod_ball_->GetFirstComponent<phx::MaterialHandle>()
->GetMaterial()
->SetAmbientColor(vertical_rod_ball_color_);
});
select_v->SetGrab([this, select_v](phx::Transform*, glm::mat4 r) {
if (!vertical_rod_ball_hovered_)
select_v->Hover(r, std::chrono::milliseconds());
vertical_rod_ball_grabbed_ = true;
});
select_v->SetRelease([this, select_v]() {
vertical_rod_ball_grabbed_ = false;
if (!vertical_rod_ball_hovered_) select_v->Unhover();
});
horizontal_rod_ball_color_ =
horizontal_rod_ball_->GetFirstComponent<phx::MaterialHandle>()
->GetMaterial()
->GetAmbientColor();
select_h->SetHover([this](glm::mat4, std::chrono::milliseconds) {
horizontal_rod_ball_hovered_ = true;
if (horizontal_rod_ball_grabbed_) return;
horizontal_rod_ball_->GetFirstComponent<phx::MaterialHandle>()
->GetMaterial()
->SetAmbientColor(
glm::mix(horizontal_rod_ball_color_, glm::vec3(1), 0.3f));
});
select_h->SetUnhover([this]() {
horizontal_rod_ball_hovered_ = false;
if (horizontal_rod_ball_grabbed_) return;
horizontal_rod_ball_->GetFirstComponent<phx::MaterialHandle>()
->GetMaterial()
->SetAmbientColor(horizontal_rod_ball_color_);
});
select_h->SetGrab([this, select_h](phx::Transform*, glm::mat4 r) {
if (!horizontal_rod_ball_hovered_)
select_h->Hover(r, std::chrono::milliseconds());
horizontal_rod_ball_grabbed_ = true;
});
select_h->SetRelease([this, select_h]() {
horizontal_rod_ball_grabbed_ = false;
if (!horizontal_rod_ball_hovered_) select_h->Unhover();
});
}
RotationHelper::~RotationHelper() {}
......
......@@ -61,6 +61,13 @@ class RotationHelper {
phx::Entity* root_;
phx::Transform* parent_;
glm::vec3 vertical_rod_ball_color_;
glm::vec3 horizontal_rod_ball_color_;
bool vertical_rod_ball_grabbed_ = false;
bool vertical_rod_ball_hovered_ = false;
bool horizontal_rod_ball_grabbed_ = false;
bool horizontal_rod_ball_hovered_ = false;
float angle_horizontal_ = 0;
float angle_vertical_ = 0;
......
......@@ -126,10 +126,26 @@ TranslationHelper::TranslationHelper(phx::Scene* scene, phx::Engine* engine) {
text_trans->SetParent(x_rod_grip_->GetFirstComponent<phx::Transform>(),
false);
selector_x->SetGrab([this, text_trans](phx::Transform*, glm::mat4) {
// store colors
x_rod_grip_color_ = x_rod_grip_->GetFirstComponent<phx::MaterialHandle>()
->GetMaterial()
->GetAmbientColor();
y_rod_grip_color_ = y_rod_grip_->GetFirstComponent<phx::MaterialHandle>()
->GetMaterial()
->GetAmbientColor();
z_rod_grip_color_ = z_rod_grip_->GetFirstComponent<phx::MaterialHandle>()
->GetMaterial()
->GetAmbientColor();
selector_x->SetGrab(
[this, text_trans, selector_x](phx::Transform*, glm::mat4 r) {
x_grip_start_ = parent_->GetGlobalTranslation().x;
text_trans->SetParent(x_rod_grip_->GetFirstComponent<phx::Transform>(),
false);
if (!x_rod_grip_hovered_)
selector_x->Hover(r, std::chrono::milliseconds());
x_rod_grip_grabbed_ = true;
});
selector_x->SetMove([this, text_node](phx::Transform* t, glm::mat4 r) {
auto pos = glm::vec3(1, 0, 0) * (glm::vec3((t->GetGlobalMatrix() * r)[3]));
......@@ -152,17 +168,25 @@ TranslationHelper::TranslationHelper(phx::Scene* scene, phx::Engine* engine) {
text_node->ManualUpdate();
});
selector_x->SetRelease([this]() {
selector_x->SetRelease([this, selector_x]() {
x_rod_grip_->GetFirstComponent<phx::Transform>()->SetLocalTranslation(
glm::vec3(kGripOffset_, 0, 0));
x_rod_->GetFirstComponent<phx::Transform>()->SetLocalScale(
glm::vec3(kGripOffset_, 1, 1));
x_rod_grip_grabbed_ = false;
if (!x_rod_grip_hovered_) selector_x->Unhover();
});
selector_y->SetGrab([this, text_trans](phx::Transform*, glm::mat4) {
selector_y->SetGrab(
[this, text_trans, selector_y](phx::Transform*, glm::mat4 r) {
y_grip_start_ = parent_->GetGlobalTranslation().y;
text_trans->SetParent(y_rod_grip_->GetFirstComponent<phx::Transform>(),
false);
if (!y_rod_grip_hovered_)
selector_y->Hover(r, std::chrono::milliseconds());
y_rod_grip_grabbed_ = true;
});
selector_y->SetMove([this, text_node](phx::Transform* t, glm::mat4 r) {
auto pos = glm::vec3(0, 1, 0) * (glm::vec3((t->GetGlobalMatrix() * r)[3]));
......@@ -187,17 +211,25 @@ TranslationHelper::TranslationHelper(phx::Scene* scene, phx::Engine* engine) {
text_node->ManualUpdate();
});
selector_y->SetRelease([this]() {
selector_y->SetRelease([this, selector_y]() {
y_rod_grip_->GetFirstComponent<phx::Transform>()->SetLocalTranslation(
glm::vec3(0, kGripOffset_, 0));
y_rod_->GetFirstComponent<phx::Transform>()->SetLocalScale(
glm::vec3(1, kGripOffset_, 1));
y_rod_grip_grabbed_ = false;
if (!y_rod_grip_hovered_) selector_y->Unhover();
});
selector_z->SetGrab([this, text_trans](phx::Transform*, glm::mat4) {
selector_z->SetGrab(
[this, text_trans, selector_z](phx::Transform*, glm::mat4 r) {
z_grip_start_ = parent_->GetGlobalTranslation().z;
text_trans->SetParent(z_rod_grip_->GetFirstComponent<phx::Transform>(),
false);
if (!z_rod_grip_hovered_)
selector_z->Hover(r, std::chrono::milliseconds());
z_rod_grip_grabbed_ = true;
});
selector_z->SetMove([this, text_node](phx::Transform* t, glm::mat4 r) {
auto pos = glm::vec3(0, 0, 1) * (glm::vec3((t->GetGlobalMatrix() * r)[3]));
......@@ -220,11 +252,61 @@ TranslationHelper::TranslationHelper(phx::Scene* scene, phx::Engine* engine) {
text_node->ManualUpdate();
});
selector_z->SetRelease([this]() {
selector_z->SetRelease([this, selector_z]() {
z_rod_grip_->GetFirstComponent<phx::Transform>()->SetLocalTranslation(
glm::vec3(0, 0, kGripOffset_));
z_rod_->GetFirstComponent<phx::Transform>()->SetLocalScale(
glm::vec3(1, 1, kGripOffset_));
z_rod_grip_grabbed_ = false;
if (!z_rod_grip_hovered_) selector_z->Unhover();
});
// highlight stuff
selector_x->SetHover([this](glm::mat4, std::chrono::milliseconds) {
x_rod_grip_hovered_ = true;
if (x_rod_grip_grabbed_) return;
x_rod_grip_->GetFirstComponent<phx::MaterialHandle>()
->GetMaterial()
->SetAmbientColor(glm::mix(x_rod_grip_color_, glm::vec3(1), 0.3f));
});
selector_x->SetUnhover([this]() {
x_rod_grip_hovered_ = false;
if (x_rod_grip_grabbed_) return;
x_rod_grip_->GetFirstComponent<phx::MaterialHandle>()
->GetMaterial()
->SetAmbientColor(x_rod_grip_color_);
});
selector_y->SetHover([this](glm::mat4, std::chrono::milliseconds) {
y_rod_grip_hovered_ = true;
if (y_rod_grip_grabbed_) return;
y_rod_grip_->GetFirstComponent<phx::MaterialHandle>()
->GetMaterial()
->SetAmbientColor(glm::mix(y_rod_grip_color_, glm::vec3(1), 0.3f));
});
selector_y->SetUnhover([this]() {
y_rod_grip_hovered_ = false;
if (y_rod_grip_grabbed_) return;
y_rod_grip_->GetFirstComponent<phx::MaterialHandle>()
->GetMaterial()
->SetAmbientColor(y_rod_grip_color_);
});
selector_z->SetHover([this](glm::mat4, std::chrono::milliseconds) {
z_rod_grip_hovered_ = true;
if (z_rod_grip_grabbed_) return;
z_rod_grip_->GetFirstComponent<phx::MaterialHandle>()
->GetMaterial()
->SetAmbientColor(glm::mix(z_rod_grip_color_, glm::vec3(1), 0.3f));
});
selector_z->SetUnhover([this]() {
z_rod_grip_hovered_ = false;
if (z_rod_grip_grabbed_) return;
z_rod_grip_->GetFirstComponent<phx::MaterialHandle>()
->GetMaterial()
->SetAmbientColor(z_rod_grip_color_);
});
}
......
......@@ -73,6 +73,17 @@ class TranslationHelper {
float y_grip_start_ = 0;
float z_grip_start_ = 0;
// for highlights
glm::vec3 x_rod_grip_color_;
glm::vec3 y_rod_grip_color_;
glm::vec3 z_rod_grip_color_;
bool x_rod_grip_hovered_ = false;
bool y_rod_grip_hovered_ = false;
bool z_rod_grip_hovered_ = false;
bool x_rod_grip_grabbed_ = false;
bool y_rod_grip_grabbed_ = false;
bool z_rod_grip_grabbed_ = false;
phx::Entity* LoadAndInsertMesh(phx::Scene* scene, std::string file,
std::string name);
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment