-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathSpriteComponent.cpp
67 lines (49 loc) · 1.59 KB
/
SpriteComponent.cpp
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
#include <memory>
#include "SpriteComponent.h"
#include "TransformComponent.h"
#include "KeyboardController.h"
#include "Sprites.h"
SpriteComponent::SpriteComponent(const char* pathToTexture, std::unique_ptr<Sprite> sprite, int x, int y, int w, int h) {
setSprite(std::move(sprite));
mSprite->setSrcRect(x, y, w, h);
setTexture(pathToTexture);
}
SpriteComponent::SpriteComponent(const char* pathToTexture) {
setTexture(pathToTexture);
}
SpriteComponent::~SpriteComponent() {
SDL_DestroyTexture(mTexture);
}
void SpriteComponent::setTexture(const char* path) {
mTexture = TextureManager::loadSpriteTexture(path);
mPathToTexture = const_cast<char*>(path);
}
void SpriteComponent::init() {
if (mSprite == nullptr) return;
if (!mEntity->hasComponent<TransformComponent>()) {
mEntity->addComponent<TransformComponent>();
}
mSprite->initTransform(&mEntity->getComponent<TransformComponent>());
mSprite->init();
}
void SpriteComponent::update() {
mSprite->update();
SDL_Rect& rDestRect = mSprite->getDestRect();
TransformComponent& rTransform = mSprite->getTransform();
rDestRect.w = rTransform.mWidth;
rDestRect.h = rTransform.mHeight;
rDestRect.x = static_cast<int>(rTransform.mPosition.x);
rDestRect.y = static_cast<int>(rTransform.mPosition.y);
}
void SpriteComponent::draw() {
TextureManager::drawSprite(mTexture, mSprite->getSrcRect(), mSprite->getDestRect());
}
void SpriteComponent::setSprite(std::unique_ptr<Sprite> sprite) {
if (mSprite != nullptr) {
mSprite.reset();
}
mSprite = std::move(sprite);
}
std::unique_ptr<Sprite>& SpriteComponent::getSprite() {
return mSprite;
}