sprite_3d.h
1 #ifndef SPRITE_3D_H
2 #define SPRITE_3D_H
3 
4 #include "scene/3d/visual_instance.h"
5 #include "scene/2d/animated_sprite.h"
6 
7 
8 class SpriteBase3D : public GeometryInstance {
9 
11 public:
12 
13  enum DrawFlags {
14  FLAG_TRANSPARENT,
15  FLAG_SHADED,
16  FLAG_MAX
17 
18  };
19 
20  enum AlphaCutMode {
21  ALPHA_CUT_DISABLED,
22  ALPHA_CUT_DISCARD,
23  ALPHA_CUT_OPAQUE_PREPASS
24  };
25 
26 private:
27 
28 
29  bool color_dirty;
30  Color color_accum;
31 
32  SpriteBase3D *parent_sprite;
33  List<SpriteBase3D*> children;
35 
36  bool centered;
37  Point2 offset;
38 
39  bool hflip;
40  bool vflip;
41 
42 
43  Color modulate;
44  float opacity;
45 
46  Vector3::Axis axis;
47  float pixel_size;
48  AABB aabb;
49 
50  RID immediate;
51 
52  bool flags[FLAG_MAX];
53  AlphaCutMode alpha_cut;
54  bool pending_update;
55  void _im_update();
56 
57 
58  void _propagate_color_changed();
59 
60 protected:
61 
62  Color _get_color_accum();
63  void _notification(int p_what);
64  static void _bind_methods();
65  virtual void _draw()=0;
66  _FORCE_INLINE_ void set_aabb(const AABB& p_aabb) { aabb=p_aabb; }
67  _FORCE_INLINE_ RID& get_immediate() { return immediate; }
68  void _queue_update();
69 public:
70 
71  void set_centered(bool p_center);
72  bool is_centered() const;
73 
74  void set_offset(const Point2& p_offset);
75  Point2 get_offset() const;
76 
77  void set_flip_h(bool p_flip);
78  bool is_flipped_h() const;
79 
80  void set_flip_v(bool p_flip);
81  bool is_flipped_v() const;
82 
83  void set_region(bool p_region);
84  bool is_region() const;
85 
86  void set_region_rect(const Rect2& p_region_rect);
87  Rect2 get_region_rect() const;
88 
89  void set_modulate(const Color& p_color);
90  Color get_modulate() const;
91 
92  void set_opacity(float p_amount);
93  float get_opacity() const;
94 
95  void set_pixel_size(float p_amount);
96  float get_pixel_size() const;
97 
98  void set_axis(Vector3::Axis p_amount);
99  Vector3::Axis get_axis() const;
100 
101  void set_draw_flag(DrawFlags p_flag,bool p_enable);
102  bool get_draw_flag(DrawFlags p_flag) const;
103 
104  void set_alpha_cut_mode(AlphaCutMode p_mode);
105  AlphaCutMode get_alpha_cut_mode() const;
106 
107  virtual Rect2 get_item_rect() const=0;
108 
109  virtual AABB get_aabb() const;
110  virtual DVector<Face3> get_faces(uint32_t p_usage_flags) const;
111 
112  SpriteBase3D();
113  ~SpriteBase3D();
114 };
115 
116 
117 class Sprite3D : public SpriteBase3D {
118 
119  OBJ_TYPE(Sprite3D,SpriteBase3D);
120  Ref<Texture> texture;
121 
122 
123  bool region;
124  Rect2 region_rect;
125 
126  int frame;
127 
128  int vframes;
129  int hframes;
130 protected:
131  virtual void _draw();
132  static void _bind_methods();
133 public:
134 
135 
136 
137  void set_texture(const Ref<Texture>& p_texture);
138  Ref<Texture> get_texture() const;
139 
140  void set_region(bool p_region);
141  bool is_region() const;
142 
143  void set_region_rect(const Rect2& p_region_rect);
144  Rect2 get_region_rect() const;
145 
146  void set_frame(int p_frame);
147  int get_frame() const;
148 
149  void set_vframes(int p_amount);
150  int get_vframes() const;
151 
152  void set_hframes(int p_amount);
153  int get_hframes() const;
154 
155  virtual Rect2 get_item_rect() const;
156 
157  Sprite3D();
158 // ~Sprite3D();
159 };
160 
162 
163  OBJ_TYPE(AnimatedSprite3D,SpriteBase3D);
164  Ref<SpriteFrames> frames;
165 
166 
167  int frame;
168 
169 protected:
170  virtual void _draw();
171  static void _bind_methods();
172 public:
173 
174 
175 
176  void set_sprite_frames(const Ref<SpriteFrames>& p_sprite_frames);
177  Ref<SpriteFrames> get_sprite_frames() const;
178 
179  void set_frame(int p_frame);
180  int get_frame() const;
181 
182 
183  virtual Rect2 get_item_rect() const;
184 
186 // ~AnimatedSprite3D();
187 };
188 
189 VARIANT_ENUM_CAST(SpriteBase3D::DrawFlags);
190 VARIANT_ENUM_CAST(SpriteBase3D::AlphaCutMode);
191 #endif // SPRITE_3D_H
Definition: sprite_3d.h:161
Definition: aabb.h:43
Definition: color.h:37
Definition: math_2d.h:204
Definition: sprite_3d.h:117
Definition: sprite_3d.h:8
Definition: rid.h:47
Definition: math_2d.h:65
Definition: visual_instance.h:84