-
Notifications
You must be signed in to change notification settings - Fork 0
/
animation.h
83 lines (62 loc) · 3.42 KB
/
animation.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#ifndef ANIMATION_H_
#define ANIMATION_H_
#include <iostream>
#include <SFML/Graphics.hpp>
#include <vector>
namespace animation
{
class AnimationClip
{
private:
std::vector<sf::Texture*> m_textures; // Спрайты (текстуры) анимации
sf::Sprite* m_currentSprite; // Анимируемый спрайт
long int m_lostTime; // Прошедшее время
int m_current; // Индекс текущей текстуры
std::vector<long int> m_animTimes; // Время смены спрайтов
int m_numberOfSprites; // Количество спрайтов в анимации
float m_animSpeed; // Скорость анимации
bool m_pause; // Состояние анимации (на паузе или нет)
bool m_looped; // Зацикливать анимацию?
void UpdateAnimTimes(); // Обновляет время смены анимации при изменении скорости
public:
// Конструктор
// path - путь к файлу со спрайтами
// sprite - анимируемый спрайт
// rect - характеристика первого спрайта в наборе (координаты верхнего левого угла, ширина и высота)
// countsOfSprites - кол-во спрайтов в анимации
AnimationClip(std::string path, sf::Sprite* sprite, sf::IntRect& rect, int countOfSprites);
// Конструктор по-умолчанию
AnimationClip(sf::Sprite* sprite);
// Конструктор копирования
AnimationClip(const AnimationClip& animClip);
// Оператор присваивания
AnimationClip& operator=(const AnimationClip& animClip);
// Деструктор
~AnimationClip();
// Установка времени смены спрайтов
// time - время смены в миллисекундах после начала анимации
// index - индекс времени (порядковый номер)
bool SetAnimTime(long int time, int index);
// Установка текстуры спрайта
// texture - ссылка на текстуру
// index - индекс текстуры (порядковый номер)
bool SetTexture(sf::Texture& texture, int index);
// Устанавливает кол-во спрайтов в анимации
void SetNumberOfSprites(int value) { m_numberOfSprites = value; }
// Установка скорости анимации
void SetAnimSpeed(float speed) { m_animSpeed = speed; }
// Возвращает кол-во спрайтов в анимации
const int NumberOfSprites() const { return m_numberOfSprites; }
// Возвращает скорость анимации
const float AnimSpeed() const { return m_animSpeed; }
// Обновить анимацию
void Update(int delta);
// Пауза анимации
void Pause(bool pause) { m_pause = pause; }
// Получение текущего спрайта
const sf::Texture* GetTexture(int index) const { return m_textures[index]; }
void SetLoop(bool loop) { m_looped = loop; }
void Restart() { m_current = 0; m_lostTime = 0; }
};
}
#endif // ANIMATION_H_