]> git.mxchange.org Git - flightgear.git/blob - src/Time/fg_time.hxx
Updates to material properties so --disable-textures now works, although
[flightgear.git] / src / Time / fg_time.hxx
1 // fg_time.hxx -- data structures and routines for managing time related stuff.
2 //
3 // Written by Curtis Olson, started August 1997.
4 //
5 // Copyright (C) 1997  Curtis L. Olson  - curt@infoplane.com
6 //
7 // This program is free software; you can redistribute it and/or
8 // modify it under the terms of the GNU General Public License as
9 // published by the Free Software Foundation; either version 2 of the
10 // License, or (at your option) any later version.
11 //
12 // This program is distributed in the hope that it will be useful, but
13 // WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 // General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with this program; if not, write to the Free Software
19 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 //
21 // $Id$
22
23
24 #ifndef _FG_TIME_HXX
25 #define _FG_TIME_HXX
26
27
28 #ifndef __cplusplus                                                          
29 # error This library requires C++
30 #endif                                   
31
32
33 #ifdef HAVE_CONFIG_H
34 #  include <config.h>
35 #endif
36
37 #ifdef HAVE_WINDOWS_H
38 #  include <windows.h>
39 #endif
40
41 #include <GL/glut.h>
42
43 #include "Include/compiler.h"
44 #ifdef FG_HAVE_STD_INCLUDES
45 #  include <ctime>
46 #else
47 #  include <time.h>
48 #endif
49
50 #include <FDM/flight.hxx>
51
52
53 // Define a structure containing global time parameters
54 class FGTime {
55
56 private:
57
58     // Unix "calendar" time in seconds
59     time_t cur_time;
60
61     // Break down of GMT time
62     struct tm *gmt;
63
64     // Julian date
65     double jd;
66
67     // modified Julian date
68     double mjd;
69
70     double last_mjd, last_dy;
71     int last_mn, last_yr;
72
73     // side real time at prime meridian
74     double gst;
75
76     // local side real time
77     double lst;
78
79     // the difference between the precise sidereal time algorithm
80     // result and the course result.  course + diff has good accuracy
81     // for the short term
82     double gst_diff;
83
84     // An offset in seconds from the true time.  Allows us to adjust
85     // the effective time of day.
86     long int warp;
87
88     // How much to change the value of warp each iteration.  Allows us
89     // to make time progress faster than normal.
90     long int warp_delta;
91
92     // Paused?
93     bool pause;
94                                      
95     void local_update_sky_and_lighting_params( void );
96
97 public:
98
99     FGTime();
100     ~FGTime();
101
102     inline double getMjd() const { return mjd; };
103     inline double getLst() const { return lst; };
104     inline double getGst() const { return gst; };
105     inline time_t get_cur_time() const { return cur_time; };
106     inline struct tm* getGmt()const { return gmt; };
107     inline bool getPause() const { return pause; };
108   
109     void adjust_warp(int val) { warp += val; };
110     void adjust_warp_delta(int val) { warp_delta += val; };
111     void togglePauseMode() { pause = !pause; }; 
112
113     // Initialize the time dependent variables
114     void init();
115
116     // Update the time dependent variables
117     void update(FGInterface *f);
118
119     void cal_mjd (int mn, double dy, int yr);
120     void utc_gst(); 
121     double sidereal_precise (double lng);
122     double sidereal_course(double lng); 
123     static FGTime *cur_time_params;
124
125     // Some other stuff which were changed to FGTime members on
126     // questionable grounds -:)
127     // time_t get_start_gmt(int year);
128     time_t get_gmt(int year, int month, int day, 
129                    int hour, int minute, int second);
130     char* format_time( const struct tm* p, char* buf );
131     long int fix_up_timezone( long int timezone_orig );
132 };
133
134
135 #endif // _FG_TIME_HXX