-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstarfield.cpp
74 lines (61 loc) · 1.76 KB
/
starfield.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
68
69
70
71
72
73
74
#define OLC_PGE_APPLICATION
#include "olcPixelGameEngine.h"
class StarField : public olc::PixelGameEngine
{
public:
StarField()
{
sAppName = "StarField";
}
int nStars = 1000;
struct Star {
float fAngle = 0.0f;
float fDistance = 0.0f;
float fSpeed = 0.0f;
olc::Pixel color = olc::WHITE;
};
std::vector<Star> vStars;
olc::vf2d vOrigin;
public:
float Random(float a, float b){
return (b-a) * (float(rand() / float(RAND_MAX))) + a;
}
#define randomRGBNumber Random(0.3f, 1.0f)
bool OnUserCreate() override
{
vStars.resize(nStars);
for(auto& star : vStars){
star.fAngle = Random(0.0f, 2.0f * 3.1459f);
star.fSpeed = Random(10.0f, 100.0f);
star.fDistance = Random(20.0f, 200.0f);
float randomNumber = Random(0.3f, 1.0f);
star.color = olc::PixelF(randomNumber, randomNumber, randomNumber); // use randomRGBNumber instead of randomNumber to make it colorfull ;)
}
vOrigin = { float(ScreenWidth() / 2), static_cast<float>(ScreenHeight()) / 2 };
return true;
}
bool OnUserUpdate(float fElapsedTime) override
{
Clear(olc::BLANK);
for(auto& star : vStars)
{
star.fDistance += star.fSpeed * fElapsedTime * (star.fDistance / 100.0f);
if(star.fDistance > 1000.0f){
star.fAngle = Random(0.0f, 2.0f * 3.1459f);
star.fSpeed = Random(10.0f, 100.0f);
star.fDistance = Random(1.0f, 100.0f);
float randomNumber = Random(0.3f, 1.0f);
star.color = olc::PixelF(randomNumber, randomNumber, randomNumber); // use randomRGBNumber instead of randomNumber to make it colorfull ;)
}
Draw(olc::vf2d(cos(star.fAngle), sin(star.fAngle)) * star.fDistance + vOrigin, star.color * (star.fDistance / 100.0f));
}
return true;
}
};
int main()
{
StarField scene;
if (scene.Construct(256, 240, 3, 3))
scene.Start();
return 0;
}