Merge pull request #55052 from RPicster/master-particles-visibility-rect
This commit is contained in:
commit
d2ac4bb48e
5 changed files with 43 additions and 4 deletions
|
@ -57,6 +57,27 @@ void GPUParticles2DEditorPlugin::_file_selected(const String &p_file) {
|
||||||
emission_mask->popup_centered();
|
emission_mask->popup_centered();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GPUParticles2DEditorPlugin::_selection_changed() {
|
||||||
|
List<Node *> selected_nodes = editor->get_editor_selection()->get_selected_node_list();
|
||||||
|
|
||||||
|
if (selected_particles.is_empty() && selected_nodes.is_empty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (GPUParticles2D *SP : selected_particles) {
|
||||||
|
SP->set_show_visibility_rect(false);
|
||||||
|
}
|
||||||
|
selected_particles.clear();
|
||||||
|
|
||||||
|
for (Node *P : selected_nodes) {
|
||||||
|
GPUParticles2D *selected_particle = Object::cast_to<GPUParticles2D>(P);
|
||||||
|
if (selected_particle != nullptr) {
|
||||||
|
selected_particle->set_show_visibility_rect(true);
|
||||||
|
selected_particles.push_back(selected_particle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void GPUParticles2DEditorPlugin::_menu_callback(int p_idx) {
|
void GPUParticles2DEditorPlugin::_menu_callback(int p_idx) {
|
||||||
switch (p_idx) {
|
switch (p_idx) {
|
||||||
case MENU_GENERATE_VISIBILITY_RECT: {
|
case MENU_GENERATE_VISIBILITY_RECT: {
|
||||||
|
@ -334,6 +355,7 @@ void GPUParticles2DEditorPlugin::_notification(int p_what) {
|
||||||
menu->get_popup()->connect("id_pressed", callable_mp(this, &GPUParticles2DEditorPlugin::_menu_callback));
|
menu->get_popup()->connect("id_pressed", callable_mp(this, &GPUParticles2DEditorPlugin::_menu_callback));
|
||||||
menu->set_icon(menu->get_theme_icon(SNAME("GPUParticles2D"), SNAME("EditorIcons")));
|
menu->set_icon(menu->get_theme_icon(SNAME("GPUParticles2D"), SNAME("EditorIcons")));
|
||||||
file->connect("file_selected", callable_mp(this, &GPUParticles2DEditorPlugin::_file_selected));
|
file->connect("file_selected", callable_mp(this, &GPUParticles2DEditorPlugin::_file_selected));
|
||||||
|
EditorNode::get_singleton()->get_editor_selection()->connect("selection_changed", callable_mp(this, &GPUParticles2DEditorPlugin::_selection_changed));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,6 +56,7 @@ class GPUParticles2DEditorPlugin : public EditorPlugin {
|
||||||
};
|
};
|
||||||
|
|
||||||
GPUParticles2D *particles;
|
GPUParticles2D *particles;
|
||||||
|
List<GPUParticles2D *> selected_particles;
|
||||||
|
|
||||||
EditorFileDialog *file;
|
EditorFileDialog *file;
|
||||||
EditorNode *editor;
|
EditorNode *editor;
|
||||||
|
@ -79,6 +80,7 @@ class GPUParticles2DEditorPlugin : public EditorPlugin {
|
||||||
void _menu_callback(int p_idx);
|
void _menu_callback(int p_idx);
|
||||||
void _generate_visibility_rect();
|
void _generate_visibility_rect();
|
||||||
void _generate_emission_mask();
|
void _generate_emission_mask();
|
||||||
|
void _selection_changed();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void _notification(int p_what);
|
void _notification(int p_what);
|
||||||
|
|
|
@ -2579,7 +2579,7 @@ void CPUParticles3DGizmoPlugin::redraw(EditorNode3DGizmo *p_gizmo) {
|
||||||
GPUParticles3DGizmoPlugin::GPUParticles3DGizmoPlugin() {
|
GPUParticles3DGizmoPlugin::GPUParticles3DGizmoPlugin() {
|
||||||
Color gizmo_color = EDITOR_DEF("editors/3d_gizmos/gizmo_colors/particles", Color(0.8, 0.7, 0.4));
|
Color gizmo_color = EDITOR_DEF("editors/3d_gizmos/gizmo_colors/particles", Color(0.8, 0.7, 0.4));
|
||||||
create_material("particles_material", gizmo_color);
|
create_material("particles_material", gizmo_color);
|
||||||
gizmo_color.a = 0.1;
|
gizmo_color.a = MAX((gizmo_color.a - 0.2) * 0.02, 0.0);
|
||||||
create_material("particles_solid_material", gizmo_color);
|
create_material("particles_solid_material", gizmo_color);
|
||||||
create_icon_material("particles_icon", Node3DEditor::get_singleton()->get_theme_icon(SNAME("GizmoGPUParticles3D"), SNAME("EditorIcons")));
|
create_icon_material("particles_icon", Node3DEditor::get_singleton()->get_theme_icon(SNAME("GizmoGPUParticles3D"), SNAME("EditorIcons")));
|
||||||
create_handle_material("handles");
|
create_handle_material("handles");
|
||||||
|
|
|
@ -170,6 +170,13 @@ void GPUParticles2D::set_trail_section_subdivisions(int p_subdivisions) {
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef TOOLS_ENABLED
|
||||||
|
void GPUParticles2D::set_show_visibility_rect(bool p_show_visibility_rect) {
|
||||||
|
show_visibility_rect = p_show_visibility_rect;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
bool GPUParticles2D::is_trail_enabled() const {
|
bool GPUParticles2D::is_trail_enabled() const {
|
||||||
return trail_enabled;
|
return trail_enabled;
|
||||||
}
|
}
|
||||||
|
@ -452,7 +459,7 @@ void GPUParticles2D::_notification(int p_what) {
|
||||||
RS::get_singleton()->canvas_item_add_particles(get_canvas_item(), particles, texture_rid);
|
RS::get_singleton()->canvas_item_add_particles(get_canvas_item(), particles, texture_rid);
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
if (Engine::get_singleton()->is_editor_hint() && (this == get_tree()->get_edited_scene_root() || get_tree()->get_edited_scene_root()->is_ancestor_of(this))) {
|
if (show_visibility_rect) {
|
||||||
draw_rect(visibility_rect, Color(0, 0.7, 0.9, 0.4), false);
|
draw_rect(visibility_rect, Color(0, 0.7, 0.9, 0.4), false);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -588,6 +595,9 @@ GPUParticles2D::GPUParticles2D() {
|
||||||
set_speed_scale(1);
|
set_speed_scale(1);
|
||||||
set_fixed_fps(30);
|
set_fixed_fps(30);
|
||||||
set_collision_base_size(collision_base_size);
|
set_collision_base_size(collision_base_size);
|
||||||
|
#ifdef TOOLS_ENABLED
|
||||||
|
show_visibility_rect = false;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
GPUParticles2D::~GPUParticles2D() {
|
GPUParticles2D::~GPUParticles2D() {
|
||||||
|
|
|
@ -58,7 +58,9 @@ private:
|
||||||
bool local_coords;
|
bool local_coords;
|
||||||
int fixed_fps;
|
int fixed_fps;
|
||||||
bool fractional_delta;
|
bool fractional_delta;
|
||||||
|
#ifdef TOOLS_ENABLED
|
||||||
|
bool show_visibility_rect;
|
||||||
|
#endif
|
||||||
Ref<Material> process_material;
|
Ref<Material> process_material;
|
||||||
|
|
||||||
DrawOrder draw_order;
|
DrawOrder draw_order;
|
||||||
|
@ -81,7 +83,6 @@ protected:
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
virtual void _validate_property(PropertyInfo &property) const override;
|
virtual void _validate_property(PropertyInfo &property) const override;
|
||||||
void _notification(int p_what);
|
void _notification(int p_what);
|
||||||
|
|
||||||
void _update_collision_size();
|
void _update_collision_size();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -102,6 +103,10 @@ public:
|
||||||
void set_trail_sections(int p_sections);
|
void set_trail_sections(int p_sections);
|
||||||
void set_trail_section_subdivisions(int p_subdivisions);
|
void set_trail_section_subdivisions(int p_subdivisions);
|
||||||
|
|
||||||
|
#ifdef TOOLS_ENABLED
|
||||||
|
void set_show_visibility_rect(bool p_show_visibility_rect);
|
||||||
|
#endif
|
||||||
|
|
||||||
bool is_emitting() const;
|
bool is_emitting() const;
|
||||||
int get_amount() const;
|
int get_amount() const;
|
||||||
double get_lifetime() const;
|
double get_lifetime() const;
|
||||||
|
|
Loading…
Reference in a new issue