sprite.h Source File - ClanLib SDK
Description: sprite.h Source File

sprite.h
1/*
2** ClanLib SDK
3** Copyright (c) 1997-2020 The ClanLib Team
4**
5** This software is provided 'as-is', without any express or implied
6** warranty. In no event will the authors be held liable for any damages
7** arising from the use of this software.
8**
9** Permission is granted to anyone to use this software for any purpose,
10** including commercial applications, and to alter it and redistribute it
11** freely, subject to the following restrictions:
12**
13** 1. The origin of this software must not be misrepresented; you must not
14** claim that you wrote the original software. If you use this software
15** in a product, an acknowledgment in the product documentation would be
16** appreciated but is not required.
17** 2. Altered source versions must be plainly marked as such, and must not be
18** misrepresented as being the original software.
19** 3. This notice may not be removed or altered from any source distribution.
20**
21** Note: Some of the libraries ClanLib may link to may have additional
22** requirements or restrictions.
23**
24** File Author(s):
25**
26** Kenneth Gangstoe
27** Mark Page
28*/
29
30#pragma once
31
32#include <memory>
33#include "../../Core/Math/origin.h"
34#include "../../Core/Signals/signal.h"
35#include "../../Core/IOData/file_system.h"
36#include "../../Core/Resources/resource.h"
37#include "../Render/graphic_context.h"
38#include "../Image/image_import_description.h"
39#include "color.h"
40
41namespace clan
42{
45
46 class Sprite_Impl;
47 class Canvas;
48 class ResourceManager;
49 class Font_Impl;
50 class Subtexture;
51 class XMLResourceDocument;
52
54 class Sprite
55 {
56 public:
57 enum ShowOnFinish
58 {
59 show_blank, show_last_frame, show_first_frame
60 };
61
63 Sprite();
64
69 Sprite(Canvas &canvas, const std::string &fullname, const ImageImportDescription &import_desc = ImageImportDescription());
70
76 Sprite(Canvas &canvas, const std::string &filename, const FileSystem &file_system, const ImageImportDescription &import_desc = ImageImportDescription());
77
83 Sprite(Canvas &canvas, IODevice &file, const std::string &image_type, const ImageImportDescription &import_desc = ImageImportDescription());
84
88 Sprite(Canvas &canvas);
89
90 virtual ~Sprite();
91
97 static Resource<Sprite> resource(Canvas &canvas, const std::string &id, const ResourceManager &resources);
98
100 static Sprite load(Canvas &canvas, const std::string &id, const XMLResourceDocument &doc);
101
103 bool is_null() const { return !impl; }
104 explicit operator bool() const { return bool(impl); }
105
107 void throw_if_null() const;
108
110 Angle get_angle() const;
111
113 Angle get_base_angle() const;
114
116
117 void get_scale(float &x, float &y) const;
118
120
121 float get_alpha() const;
122
124
125 Colorf get_color() const;
126
128 bool get_linear_filter() const;
129
131 void get_alignment(Origin &origin, int &x, int &y) const;
132
134 void get_rotation_hotspot(Origin &origin, int &x, int &y) const;
135
137 int get_current_frame() const;
138
140 int get_frame_count() const;
141
146 int get_frame_delay(int frame) const;
147
149 Point get_frame_offset(int frame) const;
150
152 Size get_frame_size(int frame) const;
153
155 Subtexture get_frame_texture(int frame) const;
156
158 int get_width() const;
159
161 int get_height() const;
162
164 Size get_size() const;
165
167 int get_id() const;
168
170 bool is_play_loop() const;
171
173 bool is_play_backward() const;
174
176 bool is_play_pingpong() const;
177
179
180 ShowOnFinish get_show_on_finish() const;
181
183
185 bool is_finished() const;
186
188 bool is_looping() const;
189
191 bool operator==(const Sprite &other) const
192 {
193 return impl == other.impl;
194 }
195
197 bool operator!=(const Sprite &other) const
198 {
199 return impl != other.impl;
200 }
201
203 bool operator<(const Sprite &other) const
204 {
205 return impl < other.impl;
206 }
207
209 Sprite &operator =(const Sprite &copy);
210
212
213 void set_image_data(const Sprite &image_source);
214
216 Sprite clone() const;
217
224 void draw(
225 Canvas &canvas,
226 float x,
227 float y);
228
229 void draw(
230 Canvas &canvas,
231 int x,
232 int y);
233
234 void draw(
235 Canvas &canvas,
236 const Rectf &src,
237 const Rectf &dest);
238
239 void draw(
240 Canvas &canvas,
241 const Rectf &dest);
242
246 void update(int time_elapsed_ms);
247
249 void set_angle(Angle angle);
250
252 void set_angle_pitch(Angle angle);
253
255 void set_angle_yaw(Angle angle);
256
258 void rotate(Angle angle);
259
261 void rotate_pitch(Angle angle);
262
264 void rotate_yaw(Angle angle);
265
267 void set_base_angle(Angle angle);
268
270
271 void set_scale(float x, float y);
272
274
275 void set_alpha(float alpha);
276
278
279 void set_color(const Colorf &color);
280
284 void set_color(const Color& c) { Colorf color; color.r = c.get_red() / 255.0f; color.g = c.get_green() / 255.0f; color.b = c.get_blue() / 255.0f; color.a = c.get_alpha() / 255.0f; set_color(color); }
285
287 void set_linear_filter(bool linear_filter = true);
288
290 void set_alignment(Origin origin, int x = 0, int y = 0);
291
293 void set_rotation_hotspot(Origin origin, int x = 0, int y = 0);
294
297 void set_frame(unsigned int frame);
298
302 void set_delay(int delay_ms);
303
308 void set_frame_delay(int frame, int delay_ms);
309
311 void set_frame_offset(int frame, Point offset);
312
314 void set_id(int id);
315
317
319 void finish();
320
322 void restart();
323
325 void set_play_loop(bool loop = true);
326
328 void set_play_pingpong(bool pingpong = true);
329
331 void set_play_backward(bool backward = true);
332
334 void set_show_on_finish(Sprite::ShowOnFinish show_on_finish);
335
339 void add_frame(const Texture2D &texture);
340
344 void add_frame(Canvas &canvas, const std::string &fullname, const ImageImportDescription &import_desc = ImageImportDescription());
345
350 void add_frame(Canvas &canvas, IODevice &file, const std::string &image_type, const ImageImportDescription &import_desc = ImageImportDescription());
351
356 void add_frame(Canvas &canvas, const std::string &filename, const FileSystem &file_system, const ImageImportDescription &import_desc = ImageImportDescription());
357
363 void add_frames(const Texture2D &texture, Rect *frames, int num_frames);
364
369 void add_frame(const Texture2D &texture, const Rect &frame);
370
372
380 void add_gridclipped_frames(Canvas &canvas,
381 const Texture2D &texture,
382 int xpos, int ypos,
383 int width, int height,
384 int xarray = 1, int yarray = 1,
385 int array_skipframes = 0,
386 int xspacing = 0, int yspacing = 0);
387
389
398 void add_alphaclipped_frames(Canvas &canvas,
399 const Texture2D &texture,
400 int xpos = 0, int ypos = 0,
401 float trans_limit = 0.05f);
402
404
412 void add_alphaclipped_frames_free(Canvas &canvas,
413 const Texture2D &texture,
414 int xpos = 0, int ypos = 0,
415 float trans_limit = 0.05f);
416
420 Signal<void()> &sig_animation_finished();
421
422 private:
423 std::shared_ptr<Sprite_Impl> impl;
424
425 friend class FontFamily_Impl;
426 };
427
429}
clan::Angle
Angle class.
Definition angle.h:60
clan::Canvas
2D Graphics Canvas
Definition canvas.h:72
clan::Color
Color description class.
Definition color.h:46
clan::Colorf
Floating point color description class (for float).
Definition color.h:799
clan::FileSystem
Virtual File System (VFS).
Definition file_system.h:47
clan::IODevice
I/O Device interface.
Definition iodevice.h:50
clan::ImageImportDescription
Image Import Description Class.
Definition image_import_description.h:48
clan::Point
2D (x,y) point structure - Integer
Definition point.h:62
clan::Rect
2D (left,top,right,bottom) rectangle structure - Integer
Definition rect.h:489
clan::Rectf
2D (left,top,right,bottom) rectangle structure - Float
Definition rect.h:503
clan::ResourceManager
Resource manager.
Definition resource_manager.h:44
clan::Resource
Resource proxy of a specific type.
Definition resource.h:58
clan::Signal
Definition signal.h:105
clan::Size
2D (width,height) size structure - Integer
Definition size.h:171
clan::Sprite
Sprite class.
Definition sprite.h:55
clan::Sprite::set_base_angle
void set_base_angle(Angle angle)
Sets the base angle in degrees - angle added to any rotation set with set_rotate() or rotate().
clan::Sprite::get_linear_filter
bool get_linear_filter() const
Returns true if the sprite uses a linear filter for scaling up and down, false if a nearest-point fil...
clan::Sprite::is_play_backward
bool is_play_backward() const
Returns true if animation is played in from right to left (starts at end).
clan::Sprite::update
void update(int time_elapsed_ms)
Call this function to update the animation.
clan::Sprite::Sprite
Sprite(Canvas &canvas)
Constructs an empty Sprite.
clan::Sprite::load
static Sprite load(Canvas &canvas, const std::string &id, const XMLResourceDocument &doc)
Loads a Sprite from a XML resource definition.
clan::Sprite::set_scale
void set_scale(float x, float y)
Set scale for x and y directions individually.
clan::Sprite::set_angle_yaw
void set_angle_yaw(Angle angle)
Set absolute rotation yaw angle.
clan::Sprite::set_color
void set_color(const Colorf &color)
Sets the color.
clan::Sprite::is_play_loop
bool is_play_loop() const
Returns true if animation is played in loop (more than once).
clan::Sprite::add_frame
void add_frame(Canvas &canvas, const std::string &fullname, const ImageImportDescription &import_desc=ImageImportDescription())
Add frame.
clan::Sprite::Sprite
Sprite(Canvas &canvas, IODevice &file, const std::string &image_type, const ImageImportDescription &import_desc=ImageImportDescription())
Constructs a Sprite.
clan::Sprite::get_current_frame
int get_current_frame() const
Returns current frame in animation. 0 is first frame.
clan::Sprite::rotate
void rotate(Angle angle)
Add angle in degrees to current angle.
clan::Sprite::draw
void draw(Canvas &canvas, int x, int y)
clan::Sprite::add_frame
void add_frame(const Texture2D &texture, const Rect &frame)
Add frame.
clan::Sprite::draw
void draw(Canvas &canvas, const Rectf &src, const Rectf &dest)
clan::Sprite::set_color
void set_color(const Color &c)
Set color.
Definition sprite.h:284
clan::Sprite::set_play_pingpong
void set_play_pingpong(bool pingpong=true)
Set to true if animation should loop, false otherwise.
clan::Sprite::set_rotation_hotspot
void set_rotation_hotspot(Origin origin, int x=0, int y=0)
Sets rotation hotspot.
clan::Sprite::get_angle
Angle get_angle() const
Returns current angle in degrees.
clan::Sprite::is_finished
bool is_finished() const
Returns true if animation is finished.
clan::Sprite::get_frame_texture
Subtexture get_frame_texture(int frame) const
Return the texture of a frame. 0 is first frame.
clan::Sprite::get_frame_count
int get_frame_count() const
Returns number of frames in animation.
clan::Sprite::rotate_pitch
void rotate_pitch(Angle angle)
Add angle in degrees to current pitch angle.
clan::Sprite::set_alpha
void set_alpha(float alpha)
Sets transparency.
clan::Sprite::Sprite
Sprite()
Constructs a null instance.
clan::Sprite::draw
void draw(Canvas &canvas, float x, float y)
Draw sprite on graphic context.
clan::Sprite::Sprite
Sprite(Canvas &canvas, const std::string &filename, const FileSystem &file_system, const ImageImportDescription &import_desc=ImageImportDescription())
Constructs a Sprite.
clan::Sprite::get_id
int get_id() const
Returns the attached id (if exists).
clan::Sprite::get_show_on_finish
ShowOnFinish get_show_on_finish() const
Returns an enum for what is shown when the animation is finished.
clan::Sprite::set_frame_delay
void set_frame_delay(int frame, int delay_ms)
Sets the delay of a specific frame.
clan::Sprite::add_frame
void add_frame(Canvas &canvas, IODevice &file, const std::string &image_type, const ImageImportDescription &import_desc=ImageImportDescription())
Add frame.
clan::Sprite::set_play_loop
void set_play_loop(bool loop=true)
Set to true if animation should loop, false otherwise.
clan::Sprite::add_frame
void add_frame(Canvas &canvas, const std::string &filename, const FileSystem &file_system, const ImageImportDescription &import_desc=ImageImportDescription())
Add frame.
clan::Sprite::get_height
int get_height() const
Return the height of the current frame, shortcut for 'get_frame_size(get_current_frame())....
clan::Sprite::add_alphaclipped_frames_free
void add_alphaclipped_frames_free(Canvas &canvas, const Texture2D &texture, int xpos=0, int ypos=0, float trans_limit=0.05f)
Adds images separated with pure alpha (within trans_limit).
clan::Sprite::add_gridclipped_frames
void add_gridclipped_frames(Canvas &canvas, const Texture2D &texture, int xpos, int ypos, int width, int height, int xarray=1, int yarray=1, int array_skipframes=0, int xspacing=0, int yspacing=0)
Adds images formed in a grid.
clan::Sprite::get_frame_size
Size get_frame_size(int frame) const
Returns the size of a frame. 0 is first frame.
clan::Sprite::get_alpha
float get_alpha() const
Returns current alpha.
clan::Sprite::sig_animation_finished
Signal< void()> & sig_animation_finished()
Sig animation finished.
clan::Sprite::throw_if_null
void throw_if_null() const
Throw an exception if this object is invalid.
clan::Sprite::get_scale
void get_scale(float &x, float &y) const
Returns scale for x and y.
clan::Sprite::set_frame
void set_frame(unsigned int frame)
Sets current animation frame. 0 is first frame.
clan::Sprite::resource
static Resource< Sprite > resource(Canvas &canvas, const std::string &id, const ResourceManager &resources)
Retrieves a Sprite resource from the resource manager.
clan::Sprite::~Sprite
virtual ~Sprite()
clan::Sprite::set_frame_offset
void set_frame_offset(int frame, Point offset)
Sets the translate offset of a specific frame. 0 is first frame.
clan::Sprite::set_image_data
void set_image_data(const Sprite &image_source)
Sets the image data from another sprite, sharing animation state.
clan::Sprite::add_alphaclipped_frames
void add_alphaclipped_frames(Canvas &canvas, const Texture2D &texture, int xpos=0, int ypos=0, float trans_limit=0.05f)
Adds images separated with pure alpha (within trans_limit).
clan::Sprite::set_show_on_finish
void set_show_on_finish(Sprite::ShowOnFinish show_on_finish)
Set what is shown when the animation is finished.
clan::Sprite::Sprite
Sprite(Canvas &canvas, const std::string &fullname, const ImageImportDescription &import_desc=ImageImportDescription())
Constructs a Sprite.
clan::Sprite::operator==
bool operator==(const Sprite &other) const
Equality operator.
Definition sprite.h:191
clan::Sprite::set_angle
void set_angle(Angle angle)
Set absolute rotation angle.
clan::Sprite::get_frame_delay
int get_frame_delay(int frame) const
Returns the delay of a frame.
clan::Sprite::ShowOnFinish
ShowOnFinish
Definition sprite.h:58
clan::Sprite::show_first_frame
@ show_first_frame
Definition sprite.h:59
clan::Sprite::show_blank
@ show_blank
Definition sprite.h:59
clan::Sprite::show_last_frame
@ show_last_frame
Definition sprite.h:59
clan::Sprite::draw
void draw(Canvas &canvas, const Rectf &dest)
clan::Sprite::set_alignment
void set_alignment(Origin origin, int x=0, int y=0)
Sets translation hotspot.
clan::Sprite::get_frame_offset
Point get_frame_offset(int frame) const
Returns the translation offset of a frame. 0 is first frame.
clan::Sprite::finish
void finish()
Finish animation.
clan::Sprite::FontFamily_Impl
friend class FontFamily_Impl
Definition sprite.h:425
clan::Sprite::set_delay
void set_delay(int delay_ms)
Sets the delay for all frames.
clan::Sprite::add_frame
void add_frame(const Texture2D &texture)
Add frame.
clan::Sprite::operator<
bool operator<(const Sprite &other) const
Less than operator.
Definition sprite.h:203
clan::Sprite::is_null
bool is_null() const
Returns true if this object is invalid.
Definition sprite.h:103
clan::Sprite::set_id
void set_id(int id)
Sets an attached id.
clan::Sprite::get_color
Colorf get_color() const
Returns current color.
clan::Sprite::clone
Sprite clone() const
Copies all information from this sprite to another, excluding the graphics that remain shared.
clan::Sprite::is_play_pingpong
bool is_play_pingpong() const
Returns true if animation is played in ping-pong mode.
clan::Sprite::add_frames
void add_frames(const Texture2D &texture, Rect *frames, int num_frames)
Add frames.
clan::Sprite::is_looping
bool is_looping() const
Returns true if animation has looped in the last update cycle.
clan::Sprite::get_base_angle
Angle get_base_angle() const
Returns the base angle in degrees - angle added to any rotation set with set_rotate() or rotate().
clan::Sprite::operator!=
bool operator!=(const Sprite &other) const
Inequality operator.
Definition sprite.h:197
clan::Sprite::set_linear_filter
void set_linear_filter(bool linear_filter=true)
Set to true if a linear filter should be used for scaling up and down, false if a nearest-point filte...
clan::Sprite::get_alignment
void get_alignment(Origin &origin, int &x, int &y) const
Returns translation hot-spot.
clan::Sprite::set_angle_pitch
void set_angle_pitch(Angle angle)
Set absolute rotation pitch angle.
clan::Sprite::get_rotation_hotspot
void get_rotation_hotspot(Origin &origin, int &x, int &y) const
Returns rotation hot-spot.
clan::Sprite::set_play_backward
void set_play_backward(bool backward=true)
Set to true if animation should go backward (start at end).
clan::Sprite::get_width
int get_width() const
Return the width of the current frame, shortcut for 'get_frame_size(get_current_frame())....
clan::Sprite::restart
void restart()
Restart animation.
clan::Sprite::operator=
Sprite & operator=(const Sprite &copy)
Copy assignment operator.
clan::Sprite::get_size
Size get_size() const
Return the size of the current frame, shortcut for 'get_frame_size(get_current_frame())'.
clan::Sprite::rotate_yaw
void rotate_yaw(Angle angle)
Add angle in degrees to current yaw angle.
clan::Subtexture
Sub-texture description.
Definition subtexture.h:45
clan::Texture2D
2D texture object class.
Definition texture_2d.h:41
clan::Vec4::r
Type r
Definition vec4.h:79
clan::XMLResourceDocument
XML Resource Document.
Definition xml_resource_document.h:48
clan::Origin
Origin
Alignment origins.
Definition origin.h:39
clan
Definition clanapp.h:36
clan::StyleValueType::color
@ color
value is an url
clan::StyleValueType::angle
@ angle
value is a color
clan::Key::y
@ y
clan::Key::c
@ c
clan::Key::x
@ x