diff options
author | Stijn Buys <ingar@osirion.org> | 2007-10-21 15:13:19 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2007-10-21 15:13:19 +0000 |
commit | a96b108a9b74baaa63cb84da212d725808b91d88 (patch) | |
tree | 82b9adc7ab326f1eb8cccf79be6c871da988604f /src | |
parent | f7f66525dcf08015af4f5c1b0eb9d3cec94d886d (diff) |
Initial commit
Diffstat (limited to 'src')
-rw-r--r-- | src/server/Makefile.am | 7 | ||||
-rw-r--r-- | src/server/main.cc | 40 | ||||
-rw-r--r-- | src/server/timer.cc | 37 | ||||
-rw-r--r-- | src/server/timer.h | 40 |
4 files changed, 124 insertions, 0 deletions
diff --git a/src/server/Makefile.am b/src/server/Makefile.am new file mode 100644 index 0000000..20dffcd --- /dev/null +++ b/src/server/Makefile.am @@ -0,0 +1,7 @@ +INCLUDES = -I$(top_srcdir)/src +METASOURCES = AUTO +bin_PROGRAMS = osiriond +osiriond_SOURCES = main.cc timer.cc timer.h +noinst_HEADERS = timer.h +osiriond_LDADD = $(top_builddir)/src/game/libgame.la \ + $(top_builddir)/src/common/libcommon.la diff --git a/src/server/main.cc b/src/server/main.cc new file mode 100644 index 0000000..3ce5197 --- /dev/null +++ b/src/server/main.cc @@ -0,0 +1,40 @@ +/* server/main.cc + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 +*/ + +// C++ headers +#include <iostream> + +// project headers +#include "osirion.h" + +#include "game/game.h" +#include "timer.h" + +void quit(int status) +{ + exit(status); +} + +int main( int argc, char *argv[] ) +{ + const float server_framerate = 1.0f / 20.0f; + std::cout << "The Osirion project " << OSIRION_VERSION << std::endl; + Timer timer; + + // initialize game + game::init(); + timer.mark(); + + while(game::initialized) { + float elapsed = timer.elapsed(); + game::update(elapsed); + timer.sleep(server_framerate - elapsed); + timer.mark(); + } + // shutdown + game::shutdown(); + + quit(0); +} diff --git a/src/server/timer.cc b/src/server/timer.cc new file mode 100644 index 0000000..c8e6975 --- /dev/null +++ b/src/server/timer.cc @@ -0,0 +1,37 @@ +/* server/timer.cc + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 +*/ + +#include "timer.h" +#include <unistd.h> + +Timer::Timer() +{ + gettimeofday(&this->timer_tick, &this->timer_tz); + this->timer_elapsed = 0; +} + +Timer::~Timer() +{ +} + +void Timer::mark() +{ + gettimeofday(&timer_tick, &timer_tz); +} + +float Timer::elapsed() +{ timeval tick; + + gettimeofday(&tick, &timer_tz); + + // calculate elapsed time in 10^-6 seconds + long delta = (tick.tv_sec - timer_tick.tv_sec) * 1000000 + (tick.tv_usec - timer_tick.tv_usec); + return( (float) delta / 1000000); +} + +void Timer::sleep(float seconds) +{ + usleep((useconds_t) seconds*1000000.0f); +} diff --git a/src/server/timer.h b/src/server/timer.h new file mode 100644 index 0000000..63957ee --- /dev/null +++ b/src/server/timer.h @@ -0,0 +1,40 @@ +#ifndef __INCLUDED_TIMER_H__ +#define __INCLUDED_TIMER_H__ + +#include <sys/time.h> + + +/// a timer measures that intervals in seconds +/*! A timer class measures the time elapsed +* between the last two calls to its mark() function. +*/ +class Timer { +public: + /// Constructor + Timer(); + /// Destructor + ~Timer(); + + /// mark the current time as zero + /*! Reset the timer, all subsequent calls too elapsed() will + * use now as a reference + * that must be timed. + */ + void mark(); + + /*! return the time elapsed since the last mark + * @see mark() + */ + float elapsed(); + + /// suspend calling process for a number of seconds + void sleep(float seconds); + +private: + float timer_elapsed; + struct timezone timer_tz; + struct timeval timer_tick; +}; // class Timer + + +#endif // __INCLUDED_TIMER_H__ |