Path: blob/master/editor/scene/3d/particles_3d_editor_plugin.h
9905 views
/**************************************************************************/1/* particles_3d_editor_plugin.h */2/**************************************************************************/3/* This file is part of: */4/* GODOT ENGINE */5/* https://godotengine.org */6/**************************************************************************/7/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */8/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */9/* */10/* Permission is hereby granted, free of charge, to any person obtaining */11/* a copy of this software and associated documentation files (the */12/* "Software"), to deal in the Software without restriction, including */13/* without limitation the rights to use, copy, modify, merge, publish, */14/* distribute, sublicense, and/or sell copies of the Software, and to */15/* permit persons to whom the Software is furnished to do so, subject to */16/* the following conditions: */17/* */18/* The above copyright notice and this permission notice shall be */19/* included in all copies or substantial portions of the Software. */20/* */21/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */22/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */23/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */24/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */25/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */26/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */27/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */28/**************************************************************************/2930#pragma once3132#include "editor/scene/particles_editor_plugin.h"3334class Particles3DEditorPlugin : public ParticlesEditorPlugin {35GDCLASS(Particles3DEditorPlugin, ParticlesEditorPlugin);3637enum {38MENU_OPTION_GENERATE_AABB = 300,39MENU_OPTION_CREATE_EMISSION_VOLUME_FROM_NODE,40};4142ConfirmationDialog *generate_aabb = nullptr;43SpinBox *generate_seconds = nullptr;4445SceneTreeDialog *emission_tree_dialog = nullptr;46ConfirmationDialog *emission_dialog = nullptr;47SpinBox *emission_amount = nullptr;48OptionButton *emission_fill = nullptr;4950void _generate_aabb();51void _node_selected(const NodePath &p_path);5253protected:54Vector<Face3> geometry;5556virtual void _menu_callback(int p_idx) override;57virtual void _add_menu_options(PopupMenu *p_menu) override;5859bool _generate(Vector<Vector3> &r_points, Vector<Vector3> &r_normals);60virtual bool _can_generate_points() const = 0;61virtual void _generate_emission_points() = 0;6263public:64Particles3DEditorPlugin();65};6667class GPUParticles3DEditorPlugin : public Particles3DEditorPlugin {68GDCLASS(GPUParticles3DEditorPlugin, Particles3DEditorPlugin);6970protected:71Node *_convert_particles() override;7273bool _can_generate_points() const override;74void _generate_emission_points() override;7576public:77GPUParticles3DEditorPlugin();78};7980class CPUParticles3DEditorPlugin : public Particles3DEditorPlugin {81GDCLASS(CPUParticles3DEditorPlugin, Particles3DEditorPlugin);8283protected:84Node *_convert_particles() override;8586bool _can_generate_points() const override { return true; }87void _generate_emission_points() override;8889public:90CPUParticles3DEditorPlugin();91};929394