aboutsummaryrefslogtreecommitdiff
path: root/scene/3d/particles.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--scene/3d/particles.h165
1 files changed, 165 insertions, 0 deletions
diff --git a/scene/3d/particles.h b/scene/3d/particles.h
new file mode 100644
index 000000000..40d569d7b
--- /dev/null
+++ b/scene/3d/particles.h
@@ -0,0 +1,165 @@
+/*************************************************************************/
+/* particles.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* http://www.godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+#ifndef VISUALINSTANCEPARTICLES_H
+#define VISUALINSTANCEPARTICLES_H
+
+#include "scene/3d/visual_instance.h"
+#include "scene/resources/material.h"
+#include "scene/main/timer.h"
+#include "rid.h"
+
+/**
+ @author Juan Linietsky <reduzio@gmail.com>
+*/
+
+class Particles : public GeometryInstance {
+public:
+
+ enum Variable {
+ VAR_LIFETIME=VS::PARTICLE_LIFETIME,
+ VAR_SPREAD=VS::PARTICLE_SPREAD,
+ VAR_GRAVITY=VS::PARTICLE_GRAVITY,
+ VAR_LINEAR_VELOCITY=VS::PARTICLE_LINEAR_VELOCITY,
+ VAR_ANGULAR_VELOCITY=VS::PARTICLE_ANGULAR_VELOCITY,
+ VAR_LINEAR_ACCELERATION=VS::PARTICLE_LINEAR_ACCELERATION,
+ VAR_DRAG=VS::PARTICLE_RADIAL_ACCELERATION,
+ VAR_TANGENTIAL_ACCELERATION=VS::PARTICLE_TANGENTIAL_ACCELERATION,
+ VAR_DAMPING=VS::PARTICLE_DAMPING,
+ VAR_INITIAL_SIZE=VS::PARTICLE_INITIAL_SIZE,
+ VAR_FINAL_SIZE=VS::PARTICLE_FINAL_SIZE,
+ VAR_INITIAL_ANGLE=VS::PARTICLE_INITIAL_ANGLE,
+ VAR_HEIGHT=VS::PARTICLE_HEIGHT,
+ VAR_HEIGHT_SPEED_SCALE=VS::PARTICLE_HEIGHT_SPEED_SCALE,
+ VAR_MAX=VS::PARTICLE_VAR_MAX
+ };
+
+private:
+ OBJ_TYPE( Particles, GeometryInstance );
+
+ RID particles;
+
+ int amount;
+ bool emitting;
+ float emit_timeout;
+ AABB visibility_aabb;
+ Vector3 gravity_normal;
+ Vector3 emission_half_extents;
+ bool using_points;
+ float var[VAR_MAX];
+ float var_random[VAR_MAX];
+ bool height_from_velocity;
+ Vector3 emission_base_velocity;
+ bool local_coordinates;
+
+ struct ColorPhase {
+
+ Color color;
+ float pos;
+ };
+
+ virtual bool _can_gizmo_scale() const;
+ virtual RES _get_gizmo_geometry() const;
+
+ int color_phase_count;
+
+ ColorPhase color_phase[4];
+
+ Ref<Material> material;
+
+ Timer* timer;
+ void setup_timer();
+
+protected:
+
+ static void _bind_methods();
+
+public:
+
+
+ AABB get_aabb() const;
+ DVector<Face3> get_faces(uint32_t p_usage_flags) const;
+
+ void set_amount(int p_amount);
+ int get_amount() const;
+
+ void set_emitting(bool p_emitting);
+ bool is_emitting() const;
+
+ void set_visibility_aabb(const AABB& p_aabb);
+ AABB get_visibility_aabb() const;
+
+ void set_emission_half_extents(const Vector3& p_half_extents);
+ Vector3 get_emission_half_extents() const;
+
+ void set_emission_base_velocity(const Vector3& p_base_velocity);
+ Vector3 get_emission_base_velocity() const;
+
+ void set_emission_points(const DVector<Vector3>& p_points);
+ DVector<Vector3> get_emission_points() const;
+
+ void set_gravity_normal(const Vector3& p_normal);
+ Vector3 get_gravity_normal() const;
+
+ void set_variable(Variable p_variable,float p_value);
+ float get_variable(Variable p_variable) const;
+
+ void set_randomness(Variable p_variable,float p_randomness);
+ float get_randomness(Variable p_variable) const;
+
+ void set_color_phases(int p_phases);
+ int get_color_phases() const;
+
+ void set_color_phase_pos(int p_phase, float p_pos);
+ float get_color_phase_pos(int p_phase) const;
+
+ void set_color_phase_color(int p_phase, const Color& p_color);
+ Color get_color_phase_color(int p_phase) const;
+
+ void set_height_from_velocity(bool p_enable);
+ bool has_height_from_velocity() const;
+
+ void set_material(const Ref<Material>& p_material);
+ Ref<Material> get_material() const;
+
+ void set_emit_timeout(float p_timeout);
+ float get_emit_timeout() const;
+
+ void set_use_local_coordinates(bool p_use);
+ bool is_using_local_coordinates() const;
+
+ void start_emitting(float p_time);
+
+
+ Particles();
+ ~Particles();
+
+};
+
+VARIANT_ENUM_CAST( Particles::Variable );
+#endif