summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYuri Sizov <yuris@humnom.net>2023-07-27 15:22:58 +0200
committerYuri Sizov <yuris@humnom.net>2023-07-27 15:22:58 +0200
commit4aae6d3f235dbf3565eca45e025ddb3ecfaadb44 (patch)
tree9ac7d2579df7a4f9f4c411cc892141e3c8e912de
parent08e1a6989749760e6827d12469079459c3c3abba (diff)
parent86117f8cbabd629701a13e147a724215a56e03fb (diff)
downloadredot-engine-4aae6d3f235dbf3565eca45e025ddb3ecfaadb44.tar.gz
Merge pull request #78944 from bgie/particle_mask
Add option to center image when loading particle emission mask
-rw-r--r--editor/plugins/cpu_particles_2d_editor_plugin.cpp16
-rw-r--r--editor/plugins/cpu_particles_2d_editor_plugin.h1
-rw-r--r--editor/plugins/gpu_particles_2d_editor_plugin.cpp18
-rw-r--r--editor/plugins/gpu_particles_2d_editor_plugin.h1
4 files changed, 29 insertions, 7 deletions
diff --git a/editor/plugins/cpu_particles_2d_editor_plugin.cpp b/editor/plugins/cpu_particles_2d_editor_plugin.cpp
index ef00af592f..7be0d6c172 100644
--- a/editor/plugins/cpu_particles_2d_editor_plugin.cpp
+++ b/editor/plugins/cpu_particles_2d_editor_plugin.cpp
@@ -217,11 +217,16 @@ void CPUParticles2DEditorPlugin::_generate_emission_mask() {
}
{
+ Vector2 offset;
+ if (emission_mask_centered->is_pressed()) {
+ offset = Vector2(-s.width * 0.5, -s.height * 0.5);
+ }
+
PackedVector2Array points;
points.resize(valid_positions.size());
Vector2 *pointsw = points.ptrw();
for (int i = 0; i < valid_positions.size(); i += 1) {
- pointsw[i] = valid_positions[i];
+ pointsw[i] = valid_positions[i] + offset;
}
particles->set_emission_points(points);
}
@@ -281,9 +286,14 @@ CPUParticles2DEditorPlugin::CPUParticles2DEditorPlugin() {
emission_mask_mode->add_item(TTR("Solid Pixels"), EMISSION_MODE_SOLID);
emission_mask_mode->add_item(TTR("Border Pixels"), EMISSION_MODE_BORDER);
emission_mask_mode->add_item(TTR("Directed Border Pixels"), EMISSION_MODE_BORDER_DIRECTED);
+ VBoxContainer *optionsvb = memnew(VBoxContainer);
+ emvb->add_margin_child(TTR("Options"), optionsvb);
+ emission_mask_centered = memnew(CheckBox);
+ emission_mask_centered->set_text(TTR("Centered"));
+ optionsvb->add_child(emission_mask_centered);
emission_colors = memnew(CheckBox);
- emission_colors->set_text(TTR("Capture from Pixel"));
- emvb->add_margin_child(TTR("Emission Colors"), emission_colors);
+ emission_colors->set_text(TTR("Capture Colors from Pixel"));
+ optionsvb->add_child(emission_colors);
toolbar->add_child(emission_mask);
diff --git a/editor/plugins/cpu_particles_2d_editor_plugin.h b/editor/plugins/cpu_particles_2d_editor_plugin.h
index cab9fca4d6..ff8e171208 100644
--- a/editor/plugins/cpu_particles_2d_editor_plugin.h
+++ b/editor/plugins/cpu_particles_2d_editor_plugin.h
@@ -69,6 +69,7 @@ class CPUParticles2DEditorPlugin : public EditorPlugin {
ConfirmationDialog *emission_mask = nullptr;
OptionButton *emission_mask_mode = nullptr;
+ CheckBox *emission_mask_centered = nullptr;
CheckBox *emission_colors = nullptr;
String source_emission_file;
diff --git a/editor/plugins/gpu_particles_2d_editor_plugin.cpp b/editor/plugins/gpu_particles_2d_editor_plugin.cpp
index c84475982d..03d3ac1732 100644
--- a/editor/plugins/gpu_particles_2d_editor_plugin.cpp
+++ b/editor/plugins/gpu_particles_2d_editor_plugin.cpp
@@ -293,11 +293,16 @@ void GPUParticles2DEditorPlugin::_generate_emission_mask() {
texdata.resize(w * h * 2 * sizeof(float));
{
+ Vector2 offset;
+ if (emission_mask_centered->is_pressed()) {
+ offset = Vector2(-s.width * 0.5, -s.height * 0.5);
+ }
+
uint8_t *tw = texdata.ptrw();
float *twf = reinterpret_cast<float *>(tw);
for (int i = 0; i < vpc; i++) {
- twf[i * 2 + 0] = valid_positions[i].x;
- twf[i * 2 + 1] = valid_positions[i].y;
+ twf[i * 2 + 0] = valid_positions[i].x + offset.x;
+ twf[i * 2 + 1] = valid_positions[i].y + offset.y;
}
}
@@ -418,9 +423,14 @@ GPUParticles2DEditorPlugin::GPUParticles2DEditorPlugin() {
emission_mask_mode->add_item(TTR("Solid Pixels"), EMISSION_MODE_SOLID);
emission_mask_mode->add_item(TTR("Border Pixels"), EMISSION_MODE_BORDER);
emission_mask_mode->add_item(TTR("Directed Border Pixels"), EMISSION_MODE_BORDER_DIRECTED);
+ VBoxContainer *optionsvb = memnew(VBoxContainer);
+ emvb->add_margin_child(TTR("Options"), optionsvb);
+ emission_mask_centered = memnew(CheckBox);
+ emission_mask_centered->set_text(TTR("Centered"));
+ optionsvb->add_child(emission_mask_centered);
emission_colors = memnew(CheckBox);
- emission_colors->set_text(TTR("Capture from Pixel"));
- emvb->add_margin_child(TTR("Emission Colors"), emission_colors);
+ emission_colors->set_text(TTR("Capture Colors from Pixel"));
+ optionsvb->add_child(emission_colors);
toolbar->add_child(emission_mask);
diff --git a/editor/plugins/gpu_particles_2d_editor_plugin.h b/editor/plugins/gpu_particles_2d_editor_plugin.h
index aa6d166d85..237a005ab7 100644
--- a/editor/plugins/gpu_particles_2d_editor_plugin.h
+++ b/editor/plugins/gpu_particles_2d_editor_plugin.h
@@ -75,6 +75,7 @@ class GPUParticles2DEditorPlugin : public EditorPlugin {
ConfirmationDialog *emission_mask = nullptr;
OptionButton *emission_mask_mode = nullptr;
+ CheckBox *emission_mask_centered = nullptr;
CheckBox *emission_colors = nullptr;
String source_emission_file;