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 84 85 86 87 88
|
// Description:
// Starfield with nebulas.
//
// Copyright (C) 2001 Frank Becker
//
// This program is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free Software
// Foundation; either version 2 of the License, or (at your option) any later
// version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details
//
#ifndef _Starfield_hpp_
#define _Starfield_hpp_
#include <Singleton.hpp>
#include <GLBitmapCollection.hpp>
const int NUM_STARS = 300;
const int NUM_NEBULAS = 3;
class Starfield
{
friend class Singleton<Starfield>;
private:
struct Nebula
{
float x;
float y;
float z;
float d;
float r;
float g;
float b;
float sizeX;
float sizeY;
float rot;
float max;
};
struct Star
{
float x;
float y;
float z;
float d;
float r;
float g;
float b;
};
public:
void init( float z);
void update( void);
void draw( bool showStars, bool showNebulas);
void bindTexture( void) { _nebula->bind();}
private:
~Starfield();
Starfield( void);
Starfield( const Starfield&);
Starfield &operator=(const Starfield&);
void pickSize( Nebula &n);
void findMax( Nebula &n);
void pickColor( Nebula &n);
void updatePrevs( void);
GLBitmapCollection *_nebula;
int _nebulaIndex;
float _nebulaHalfWidth;
float _nebulaHalfHeight;
Star _starInfo[ NUM_STARS];
float _prevStarInfoY[ NUM_STARS];
Nebula _nebulaInfo[ NUM_NEBULAS];
float _prevNebulaInfoY[ NUM_NEBULAS];
};
typedef Singleton<Starfield> StarfieldS;
#endif
|