summaryrefslogtreecommitdiff
path: root/scene/3d/sprite_3d.h
diff options
context:
space:
mode:
Diffstat (limited to 'scene/3d/sprite_3d.h')
-rw-r--r--scene/3d/sprite_3d.h191
1 files changed, 191 insertions, 0 deletions
diff --git a/scene/3d/sprite_3d.h b/scene/3d/sprite_3d.h
new file mode 100644
index 0000000000..1330cd1c30
--- /dev/null
+++ b/scene/3d/sprite_3d.h
@@ -0,0 +1,191 @@
+#ifndef SPRITE_3D_H
+#define SPRITE_3D_H
+
+#include "scene/3d/visual_instance.h"
+#include "scene/2d/animated_sprite.h"
+
+
+class SpriteBase3D : public VisualInstance {
+
+ OBJ_TYPE(SpriteBase3D,VisualInstance);
+public:
+
+ enum DrawFlags {
+ FLAG_TRANSPARENT,
+ FLAG_SHADED,
+ FLAG_MAX
+
+ };
+
+ enum AlphaCutMode {
+ ALPHA_CUT_DISABLED,
+ ALPHA_CUT_DISCARD,
+ ALPHA_CUT_OPAQUE_PREPASS
+ };
+
+private:
+
+
+ bool color_dirty;
+ Color color_accum;
+
+ SpriteBase3D *parent_sprite;
+ List<SpriteBase3D*> children;
+ List<SpriteBase3D*>::Element *pI;
+
+ bool centered;
+ Point2 offset;
+
+ bool hflip;
+ bool vflip;
+
+
+ Color modulate;
+ float opacity;
+
+ Vector3::Axis axis;
+ float pixel_size;
+ AABB aabb;
+
+ RID immediate;
+
+ bool flags[FLAG_MAX];
+ AlphaCutMode alpha_cut;
+ bool pending_update;
+ void _im_update();
+
+
+ void _propagate_color_changed();
+
+protected:
+
+ Color _get_color_accum();
+ void _notification(int p_what);
+ static void _bind_methods();
+ virtual void _draw()=0;
+ _FORCE_INLINE_ void set_aabb(const AABB& p_aabb) { aabb=p_aabb; }
+ _FORCE_INLINE_ RID& get_immediate() { return immediate; }
+ void _queue_update();
+public:
+
+ void set_centered(bool p_center);
+ bool is_centered() const;
+
+ void set_offset(const Point2& p_offset);
+ Point2 get_offset() const;
+
+ void set_flip_h(bool p_flip);
+ bool is_flipped_h() const;
+
+ void set_flip_v(bool p_flip);
+ bool is_flipped_v() const;
+
+ void set_region(bool p_region);
+ bool is_region() const;
+
+ void set_region_rect(const Rect2& p_region_rect);
+ Rect2 get_region_rect() const;
+
+ void set_modulate(const Color& p_color);
+ Color get_modulate() const;
+
+ void set_opacity(float p_amount);
+ float get_opacity() const;
+
+ void set_pixel_size(float p_amount);
+ float get_pixel_size() const;
+
+ void set_axis(Vector3::Axis p_amount);
+ Vector3::Axis get_axis() const;
+
+ void set_draw_flag(DrawFlags p_flag,bool p_enable);
+ bool get_draw_flag(DrawFlags p_flag) const;
+
+ void set_alpha_cut_mode(AlphaCutMode p_mode);
+ AlphaCutMode get_alpha_cut_mode() const;
+
+ virtual Rect2 get_item_rect() const=0;
+
+ virtual AABB get_aabb() const;
+ virtual DVector<Face3> get_faces(uint32_t p_usage_flags) const;
+
+ SpriteBase3D();
+ ~SpriteBase3D();
+};
+
+
+class Sprite3D : public SpriteBase3D {
+
+ OBJ_TYPE(Sprite3D,SpriteBase3D);
+ Ref<Texture> texture;
+
+
+ bool region;
+ Rect2 region_rect;
+
+ int frame;
+
+ int vframes;
+ int hframes;
+protected:
+ virtual void _draw();
+ static void _bind_methods();
+public:
+
+
+
+ void set_texture(const Ref<Texture>& p_texture);
+ Ref<Texture> get_texture() const;
+
+ void set_region(bool p_region);
+ bool is_region() const;
+
+ void set_region_rect(const Rect2& p_region_rect);
+ Rect2 get_region_rect() const;
+
+ void set_frame(int p_frame);
+ int get_frame() const;
+
+ void set_vframes(int p_amount);
+ int get_vframes() const;
+
+ void set_hframes(int p_amount);
+ int get_hframes() const;
+
+ virtual Rect2 get_item_rect() const;
+
+ Sprite3D();
+// ~Sprite3D();
+};
+
+class AnimatedSprite3D : public SpriteBase3D {
+
+ OBJ_TYPE(AnimatedSprite3D,SpriteBase3D);
+ Ref<SpriteFrames> frames;
+
+
+ int frame;
+
+protected:
+ virtual void _draw();
+ static void _bind_methods();
+public:
+
+
+
+ void set_sprite_frames(const Ref<SpriteFrames>& p_sprite_frames);
+ Ref<SpriteFrames> get_sprite_frames() const;
+
+ void set_frame(int p_frame);
+ int get_frame() const;
+
+
+ virtual Rect2 get_item_rect() const;
+
+ AnimatedSprite3D();
+// ~AnimatedSprite3D();
+};
+
+VARIANT_ENUM_CAST(SpriteBase3D::DrawFlags);
+VARIANT_ENUM_CAST(SpriteBase3D::AlphaCutMode);
+#endif // SPRITE_3D_H