forked from dgcor/DGEngine
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTextureLevelLayer.cpp
More file actions
executable file
·69 lines (64 loc) · 1.79 KB
/
Copy pathTextureLevelLayer.cpp
File metadata and controls
executable file
·69 lines (64 loc) · 1.79 KB
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
#include "TextureLevelLayer.h"
#include <cmath>
#include "LevelSurface.h"
#include <SFML/Graphics/Sprite.hpp>
void TextureLevelLayer::update(sf::Time elapsedTime_)
{
if (texture == nullptr ||
parallaxElapsedTime.timeout == sf::Time::Zero ||
parallaxElapsedTime.update(elapsedTime_) == false)
{
return;
}
parallaxFixedSpeedOffset -= parallaxFixedSpeed;
auto size = texture->getSize();
if (parallaxFixedSpeedOffset.x >= (float)size.x)
{
parallaxFixedSpeedOffset.x -= (float)size.x;
}
else if (parallaxFixedSpeedOffset.x <= 0.f)
{
parallaxFixedSpeedOffset.x += (float)size.x;
}
if (parallaxFixedSpeedOffset.y >= (float)size.y)
{
parallaxFixedSpeedOffset.y -= (float)size.y;
}
else if (parallaxFixedSpeedOffset.y <= 0.f)
{
parallaxFixedSpeedOffset.y += (float)size.y;
}
}
void TextureLevelLayer::draw(const LevelSurface& surface) const
{
if (texture == nullptr)
{
return;
}
auto rect = textureRect;
if (rect.left == 0 && rect.top == 0 &&
rect.width == 0 && rect.height == 0)
{
rect.left = (int)surface.visibleRect.left;
rect.top = (int)surface.visibleRect.top;
rect.width = (int)surface.visibleRect.width;
rect.height = (int)surface.visibleRect.height;
auto size = texture->getSize();
if (parallaxSpeed != 0.f)
{
rect.left += (int)(std::round((double)surface.getCenter().x * parallaxSpeed)) % size.x;
rect.top += (int)(std::round((double)surface.getCenter().y * parallaxSpeed)) % size.y;
}
if (parallaxFixedSpeedOffset.x != 0.f)
{
rect.left += (int)std::round(parallaxFixedSpeedOffset.x) % size.x;
}
if (parallaxFixedSpeedOffset.y != 0.f)
{
rect.top += (int)std::round(parallaxFixedSpeedOffset.y) % size.y;
}
}
sf::Sprite sprite(*texture, rect);
sprite.setPosition({ surface.visibleRect.left, surface.visibleRect.top });
surface.draw(sprite);
}