Tunnel mode: abstract out addRing()
This commit is contained in:
parent
14b92e35af
commit
2cab647bcb
@ -17,6 +17,7 @@ using namespace std;
|
|||||||
#define RING_RADIUS 18
|
#define RING_RADIUS 18
|
||||||
#define BREAKOFF_DIST 80
|
#define BREAKOFF_DIST 80
|
||||||
#define RING_LAYER_DIST 10
|
#define RING_LAYER_DIST 10
|
||||||
|
#define XLATE_RATE 0.02
|
||||||
|
|
||||||
Tunnel::Tunnel()
|
Tunnel::Tunnel()
|
||||||
{
|
{
|
||||||
@ -30,6 +31,11 @@ Tunnel::~Tunnel()
|
|||||||
|
|
||||||
bool Tunnel::expose (GnomeScreensaver & gs)
|
bool Tunnel::expose (GnomeScreensaver & gs)
|
||||||
{
|
{
|
||||||
|
if (m_last_ticks == 0)
|
||||||
|
m_last_ticks = gs.getTicks();
|
||||||
|
uint64_t ticks = gs.getTicks();
|
||||||
|
int elapsed = ticks - m_last_ticks;
|
||||||
|
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
for (list<LBStruct>::const_iterator it = m_logos.begin();
|
for (list<LBStruct>::const_iterator it = m_logos.begin();
|
||||||
@ -47,9 +53,28 @@ bool Tunnel::expose (GnomeScreensaver & gs)
|
|||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_last_ticks = ticks;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Tunnel::addRing()
|
||||||
|
{
|
||||||
|
for (int j = 0; j < N_LOGOS_PER_RING; j++)
|
||||||
|
{
|
||||||
|
float zrot = ((j + m_ring_rot_idx) & 0x3) * 90.0;
|
||||||
|
float trot = j * 360.0 / N_LOGOS_PER_RING;
|
||||||
|
LBStruct lbs = {
|
||||||
|
m_offset,
|
||||||
|
zrot,
|
||||||
|
trot,
|
||||||
|
{0, 0, 1}
|
||||||
|
};
|
||||||
|
m_logos.push_back(lbs);
|
||||||
|
}
|
||||||
|
m_ring_rot_idx++;
|
||||||
|
}
|
||||||
|
|
||||||
bool Tunnel::configure (GnomeScreensaver & gs)
|
bool Tunnel::configure (GnomeScreensaver & gs)
|
||||||
{
|
{
|
||||||
glMatrixMode(GL_PROJECTION);
|
glMatrixMode(GL_PROJECTION);
|
||||||
@ -63,22 +88,15 @@ bool Tunnel::configure (GnomeScreensaver & gs)
|
|||||||
|
|
||||||
glViewport(0, 0, gs.getWidth(), gs.getHeight());
|
glViewport(0, 0, gs.getWidth(), gs.getHeight());
|
||||||
|
|
||||||
for (int i = 0; i < N_INITIAL_LAYERS; i++)
|
for (int i = 0; i <= N_INITIAL_LAYERS; i++)
|
||||||
{
|
{
|
||||||
for (int j = 0; j < N_LOGOS_PER_RING; j++)
|
m_offset = (N_INITIAL_LAYERS - i) * RING_LAYER_DIST,
|
||||||
{
|
addRing();
|
||||||
float zrot = ((j + i) & 0x3) * 90.0;
|
|
||||||
float trot = j * 360.0 / N_LOGOS_PER_RING;
|
|
||||||
LBStruct lbs = {
|
|
||||||
(N_INITIAL_LAYERS - i) * RING_LAYER_DIST,
|
|
||||||
zrot,
|
|
||||||
trot,
|
|
||||||
{0, 0, 1}
|
|
||||||
};
|
|
||||||
m_logos.push_back(lbs);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_offset = 0.0;
|
||||||
|
m_last_ring_offset = 0.0;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,16 +17,19 @@ class Tunnel : public Mode
|
|||||||
bool configure (GnomeScreensaver & gs);
|
bool configure (GnomeScreensaver & gs);
|
||||||
bool update (GnomeScreensaver & gs);
|
bool update (GnomeScreensaver & gs);
|
||||||
typedef struct {
|
typedef struct {
|
||||||
float offset;
|
double offset;
|
||||||
float zrot;
|
float zrot;
|
||||||
float trot;
|
float trot;
|
||||||
float spin_axis[3];
|
float spin_axis[3];
|
||||||
} LBStruct;
|
} LBStruct;
|
||||||
protected:
|
protected:
|
||||||
|
void addRing();
|
||||||
LogoBox m_logobox;
|
LogoBox m_logobox;
|
||||||
uint64_t m_last_ticks;
|
uint64_t m_last_ticks;
|
||||||
std::list<LBStruct> m_logos;
|
std::list<LBStruct> m_logos;
|
||||||
float m_offset;
|
double m_offset;
|
||||||
|
double m_last_ring_offset;
|
||||||
|
unsigned int m_ring_rot_idx;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* TUNNEL_H */
|
#endif /* TUNNEL_H */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user