diff options
249 files changed, 5278 insertions, 4440 deletions
diff --git a/src/SDLMain.h b/src/SDLMain.h index 4683df5..e36ff81 100644 --- a/src/SDLMain.h +++ b/src/SDLMain.h @@ -7,5 +7,6 @@ #import <Cocoa/Cocoa.h> -@interface SDLMain : NSObject +@interface SDLMain : +NSObject @end diff --git a/src/audio/audio.cc b/src/audio/audio.cc index 2192e2f..e1eb0d3 100644 --- a/src/audio/audio.cc +++ b/src/audio/audio.cc @@ -29,7 +29,7 @@ void init() } // create the audio context - audio_context = alcCreateContext(audio_device ,0); + audio_context = alcCreateContext(audio_device , 0); if (!audio_context) { alcCloseDevice(audio_device); @@ -42,11 +42,11 @@ void init() // clear errors alGetError(); - + Buffers::init(); Sources::init(); - + //con_debug << " audio device ^B" << alcGetString(audio_device, ALC_DEFAULT_DEVICE_SPECIFIER) << std::endl; // the "no sound" sound @@ -64,12 +64,12 @@ void reset() Buffers::shutdown(); Buffers::init(); Sources::init(); - + load("ui/nosnd"); load("ui/console"); } -void load (const char *name) +void load(const char *name) { Buffers::load(std::string(name)); } @@ -91,7 +91,7 @@ void shutdown() if (audio_device) { alcCloseDevice(audio_device); audio_device = 0; - } + } } size_t play(const char *name) @@ -101,14 +101,14 @@ size_t play(const char *name) size_t buffer_index = Buffers::load(std::string(name)); - for (size_t i = 0; i < MAXUISOURCES; i++) { + for (size_t i = 0; i < MAXUISOURCES; i++) { ALint srcstate = 0; ALuint source = Sources::source(i); alGetSourcei(source , AL_SOURCE_STATE , &srcstate); if (srcstate != AL_PLAYING) { Buffers::bind(source, buffer_index); - alSourcef(source, AL_PITCH, 1.0); - alSourcef(source, AL_GAIN, 1.0); + alSourcef(source, AL_PITCH, 1.0); + alSourcef(source, AL_GAIN, 1.0); alSourcei(source, AL_SOURCE_RELATIVE, AL_TRUE); ALfloat location[] = {0.0f, 0.0f, 0.0f}; alSourcefv(source, AL_POSITION, location); @@ -121,7 +121,7 @@ size_t play(const char *name) return 0; } -size_t play(size_t source_index, size_t buffer_index, float pitch, float gain) +size_t play(size_t source_index, size_t buffer_index, float pitch, float gain) { if (!audio_context || !buffer_index) return 0; @@ -135,9 +135,9 @@ size_t play(size_t source_index, size_t buffer_index, float pitch, float gain) Buffers::bind(source, buffer_index); alSourcei(source, AL_SOURCE_RELATIVE, AL_FALSE); alSourcef(source, AL_PITCH, pitch); - alSourcef(source, AL_GAIN, gain); + alSourcef(source, AL_GAIN, gain); - alSourcei(source, AL_LOOPING, AL_FALSE); + alSourcei(source, AL_LOOPING, AL_FALSE); alSourceRewind(source); alSourcePlay(source); @@ -161,9 +161,9 @@ size_t loop(size_t source_index, size_t buffer_index, float pitch, float gain) //alSourcef(source, AL_REFERENCE_DISTANCE, 2.0f); // might be the cause of cracks in the sound alSourcei(source, AL_SOURCE_RELATIVE, AL_FALSE); alSourcef(source, AL_PITCH, pitch); - alSourcef(source, AL_GAIN, gain); + alSourcef(source, AL_GAIN, gain); - alSourcei(source, AL_LOOPING, AL_TRUE); + alSourcei(source, AL_LOOPING, AL_TRUE); alSourceRewind(source); alSourcePlay(source); @@ -190,7 +190,7 @@ void update_listener(math::Vector3f const &location, math::Axis const &axis, mat alListenerfv(AL_POSITION, location.ptr()); ALfloat orientation[6]; - for (size_t i =0; i <3; i++) { + for (size_t i = 0; i < 3; i++) { orientation[i] = axis.forward()[i]; orientation[i+3] = axis.up()[i]; } @@ -208,7 +208,7 @@ void update_source(size_t source_index, math::Vector3f const & location, math::V alSourcefv(source, AL_POSITION, location.ptr()); //alSourcefv(source, AL_VELOCITY, velocity.ptr()); alSourcef(source, AL_PITCH, pitch); - alSourcef(source, AL_GAIN, gain); + alSourcef(source, AL_GAIN, gain); } - + } diff --git a/src/audio/audio.h b/src/audio/audio.h index 2849013..72a8fa4 100644 --- a/src/audio/audio.h +++ b/src/audio/audio.h @@ -45,16 +45,16 @@ void load(const char *name); size_t play(const char *name); /// playe a sound from a specific buffer on a specific source -size_t play(size_t source_index, size_t buffer_index, float pitch=1.0f, float gain=1.0f); +size_t play(size_t source_index, size_t buffer_index, float pitch = 1.0f, float gain = 1.0f); /// play a looping sound on a specified source -size_t loop( size_t source_index, const char *name, float pitch=1.0f, float gain=1.0f); +size_t loop(size_t source_index, const char *name, float pitch = 1.0f, float gain = 1.0f); /// play a looping sound from a specified buffer on a specified source size_t loop(size_t source_index, size_t buffer_index, float pitch, float gain); /// update source parameters -void update_source(size_t source_index, math::Vector3f const & location, math::Vector3f const & velocity, float pitch=1.0f, float gain=1.0f); +void update_source(size_t source_index, math::Vector3f const & location, math::Vector3f const & velocity, float pitch = 1.0f, float gain = 1.0f); /// update listener parameters void update_listener(math::Vector3f const &location, math::Axis const &axis, math::Vector3f const & velocity); diff --git a/src/audio/buffers.cc b/src/audio/buffers.cc index 774639e..7bf7eb1 100644 --- a/src/audio/buffers.cc +++ b/src/audio/buffers.cc @@ -11,7 +11,8 @@ #include "audio/wav.h" #include "sys/sys.h" -namespace audio { +namespace audio +{ std::map<std::string, size_t> Buffers::registry; size_t Buffers::index; @@ -19,8 +20,8 @@ ALuint Buffers::buffers[MAXBUFFERS]; void Buffers::init() { - clear(); - + clear(); + alGenBuffers(MAXBUFFERS, buffers); int error; @@ -33,20 +34,20 @@ void Buffers::init() void Buffers::shutdown() { alDeleteBuffers(MAXBUFFERS, buffers); - + int error; if ((error = alGetError()) != AL_NO_ERROR) { con_warn << "Error " << error << " clearing OpenAL buffers!" << std::endl; return; } - + clear(); } void Buffers::clear() { registry.clear(); - memset(buffers,0, sizeof(buffers)); + memset(buffers, 0, sizeof(buffers)); index = 0; } @@ -63,7 +64,7 @@ size_t Buffers::load(std::string name) if (!pcm) { registry[name] = 0; return 0; - } + } if (index == MAXBUFFERS) { con_error << "Buffer limit " << MAXBUFFERS << " exceeded!" << std::endl; @@ -71,7 +72,7 @@ size_t Buffers::load(std::string name) registry[name] = 0; return 0; } - + ALenum format = 0; if (pcm->bitspersample() == 16) { if (pcm->channels() == 1) { @@ -86,10 +87,10 @@ size_t Buffers::load(std::string name) format = AL_FORMAT_STEREO8; }; } - + size_t id = index; alBufferData(buffers[id], format, pcm->data(), pcm->size(), pcm->samplerate()); - if (alGetError()!= AL_NO_ERROR) { + if (alGetError() != AL_NO_ERROR) { con_warn << "Error loading PCM data " << name << std::endl; } diff --git a/src/audio/buffers.h b/src/audio/buffers.h index 2b31089..149c7f7 100644 --- a/src/audio/buffers.h +++ b/src/audio/buffers.h @@ -11,22 +11,24 @@ #ifdef _OSX #include "OpenAL/al.h" -#include "OpenAL/alc.h" +#include "OpenAL/alc.h" #else -#include "AL/al.h" +#include "AL/al.h" #include "AL/alc.h" #endif #include <string> #include <map> -namespace audio { +namespace audio +{ const size_t MAXBUFFERS = 128; /// OpenAL buffers wrapper class -class Buffers { +class Buffers +{ public: static void init(); static void shutdown(); diff --git a/src/audio/pcm.cc b/src/audio/pcm.cc index 7a3f767..dacb23c 100644 --- a/src/audio/pcm.cc +++ b/src/audio/pcm.cc @@ -10,7 +10,8 @@ #include "audio/pcm.h" #include "audio/wav.h" -namespace audio { +namespace audio +{ PCM::PCM(unsigned int samplerate, unsigned int bitspersample, unsigned int channels, size_t size) { diff --git a/src/audio/pcm.h b/src/audio/pcm.h index dc8eb16..8df44e8 100644 --- a/src/audio/pcm.h +++ b/src/audio/pcm.h @@ -9,10 +9,12 @@ #include <string> -namespace audio { +namespace audio +{ /// class to hold PCM audio data -class PCM { +class PCM +{ public: PCM(unsigned int samplerate, unsigned int samplesize, unsigned int channels, size_t size); @@ -21,22 +23,34 @@ public: void clear(); /// pointer to the raw pcm data - inline unsigned char *data() { return pcm_data; } + inline unsigned char *data() { + return pcm_data; + } /// index into the raw pcm data - inline unsigned char *operator[](size_t index) { return &pcm_data[index]; } + inline unsigned char *operator[](size_t index) { + return &pcm_data[index]; + } /// size in bytes - inline size_t size() { return pcm_size; } + inline size_t size() { + return pcm_size; + } /// samplerate in samples per second - inline unsigned int samplerate() const { return pcm_samplerate; } + inline unsigned int samplerate() const { + return pcm_samplerate; + } /// number of bits per sample - inline unsigned int bitspersample() const { return pcm_bitspersample; } + inline unsigned int bitspersample() const { + return pcm_bitspersample; + } /// number of channels - inline unsigned int channels() const { return pcm_channels; } + inline unsigned int channels() const { + return pcm_channels; + } private: unsigned char *pcm_data; diff --git a/src/audio/sources.cc b/src/audio/sources.cc index 2ec0e26..241332b 100644 --- a/src/audio/sources.cc +++ b/src/audio/sources.cc @@ -19,7 +19,7 @@ void Sources::init() { int error; clear(); - + alGenSources(MAXSOURCES, sources); if ((error = alGetError()) != AL_NO_ERROR) { @@ -33,7 +33,7 @@ void Sources::init() } // reserve ui sound sources - for (size_t i=0; i < MAXUISOURCES; i++) { + for (size_t i = 0; i < MAXUISOURCES; i++) { source_available[i] = false; } } @@ -41,7 +41,7 @@ void Sources::init() void Sources::shutdown() { // stop all sources - for (size_t index= 0; index < MAXSOURCES; index++) { + for (size_t index = 0; index < MAXSOURCES; index++) { alSourceRewind(sources[index]); } @@ -51,21 +51,21 @@ void Sources::shutdown() void Sources::clear() { - memset(sources,0, sizeof(sources)); + memset(sources, 0, sizeof(sources)); // all sources are available for use - for (size_t i=0; i < MAXSOURCES; i++) { + for (size_t i = 0; i < MAXSOURCES; i++) { source_available[i] = false; } } size_t Sources::get() { - for (size_t i= MAXUISOURCES; i < MAXSOURCES; i++) { + for (size_t i = MAXUISOURCES; i < MAXSOURCES; i++) { if (source_available[i]) { source_available[i] = false; - alSourcef(sources[i], AL_PITCH, 1.0); - alSourcef(sources[i], AL_GAIN, 0.0); + alSourcef(sources[i], AL_PITCH, 1.0); + alSourcef(sources[i], AL_GAIN, 0.0); //con_debug << "reserved source " << i << std::endl; return i; } @@ -75,7 +75,7 @@ size_t Sources::get() void Sources::remove(size_t index) { - if ( (index < MAXUISOURCES ) || (MAXSOURCES <= index)) + if ((index < MAXUISOURCES) || (MAXSOURCES <= index)) return; source_available[index] = true; diff --git a/src/audio/sources.h b/src/audio/sources.h index c9e38e2..6292ff6 100644 --- a/src/audio/sources.h +++ b/src/audio/sources.h @@ -11,29 +11,35 @@ #ifdef _OSX #include "OpenAL/al.h" -#include "OpenAL/alc.h" +#include "OpenAL/alc.h" #else -#include "AL/al.h" +#include "AL/al.h" #include "AL/alc.h" #endif #include <string> #include <map> -namespace audio { +namespace audio +{ const size_t MAXSOURCES = 32; const size_t MAXUISOURCES = 4; /// OpenAL sources wrapper class -class Sources { +class Sources +{ public: static void init(); static void shutdown(); - static inline bool available(size_t index) { return source_available[index]; } + static inline bool available(size_t index) { + return source_available[index]; + } - static inline ALuint source(size_t index) { return sources[index]; } + static inline ALuint source(size_t index) { + return sources[index]; + } static size_t get(); static void remove(size_t index); diff --git a/src/audio/wav.cc b/src/audio/wav.cc index 178f199..b6ca710 100644 --- a/src/audio/wav.cc +++ b/src/audio/wav.cc @@ -5,7 +5,7 @@ */ /* -see +see http://ccrma.stanford.edu/CCRMA/Courses/422/projects/WaveFormat/ */ @@ -19,7 +19,8 @@ http://ccrma.stanford.edu/CCRMA/Courses/422/projects/WaveFormat/ #include "filesystem/filesystem.h" #include "sys/sys.h" -namespace audio { +namespace audio +{ PCM *Wav::load(std::string const & name) { @@ -29,7 +30,7 @@ PCM *Wav::load(std::string const & name) std::string filename("sounds/"); filename.append(name); filename.append(".wav"); - + filesystem::File *wav_file = filesystem::open(filename.c_str()); if (!wav_file) { con_warn << "Could not open " << filename << std::endl; @@ -52,7 +53,7 @@ PCM *Wav::load(std::string const & name) } // format WAVE - if (strncmp((char *)header+8, "WAVE", 4) != 0) { + if (strncmp((char *)header + 8, "WAVE", 4) != 0) { con_warn << "Error reading " << filename << ": invalid WAVE header!" << std::endl; filesystem::close(wav_file); return 0; @@ -61,7 +62,7 @@ PCM *Wav::load(std::string const & name) // file size //size_t chunksize = header[4] + (header[5] << 8) + (header[6] << 16) + (header[7] << 24); - if (strncmp((char *)header+12, "fmt ", 4) != 0) { + if (strncmp((char *)header + 12, "fmt ", 4) != 0) { con_warn << "Error reading " << filename << ": invalid format header!" << std::endl; filesystem::close(wav_file); return 0; @@ -78,7 +79,7 @@ PCM *Wav::load(std::string const & name) } unsigned int channels = header[22] + (header[23] << 8); - if ((channels < 1) || (channels >2)) { + if ((channels < 1) || (channels > 2)) { con_warn << "Error reading " << filename << ": invalid number of channels!" << std::endl; filesystem::close(wav_file); return 0; @@ -89,7 +90,7 @@ PCM *Wav::load(std::string const & name) //size_t blockalign = header[32] + (header[33] << 8); size_t bitspersample = header[34] + (header[35] << 8); - if (strncmp((char *)header + 36, "data", 4) !=0) { + if (strncmp((char *)header + 36, "data", 4) != 0) { con_warn << "Error reading " << filename << ": invalid data header!" << std::endl; filesystem::close(wav_file); return 0; @@ -109,8 +110,8 @@ PCM *Wav::load(std::string const & name) con_warn << "Error reading " << filename << ": file truncated!" << std::endl; } - con_debug << " " << filename << " " << pcm->samplerate()<< "Hz " << pcm->bitspersample() << "bit " << - pcm->channels() << " chan " << pcm->size() << " bytes" << std::endl; + con_debug << " " << filename << " " << pcm->samplerate() << "Hz " << pcm->bitspersample() << "bit " << + pcm->channels() << " chan " << pcm->size() << " bytes" << std::endl; filesystem::close(wav_file); return pcm; diff --git a/src/audio/wav.h b/src/audio/wav.h index a94b6fb..2513b48 100644 --- a/src/audio/wav.h +++ b/src/audio/wav.h @@ -9,10 +9,12 @@ #include "audio/pcm.h" -namespace audio { +namespace audio +{ /// class to read microsoft PCM wav files -class Wav { +class Wav +{ public: static PCM *load(std::string const & name); }; diff --git a/src/auxiliary/functions.cc b/src/auxiliary/functions.cc index 8cefbc5..5dbc012 100644 --- a/src/auxiliary/functions.cc +++ b/src/auxiliary/functions.cc @@ -13,7 +13,7 @@ const std::string plural(const char * word, size_t n) { std::string p(word); - if (n != 1) + if (n != 1) p += 's'; return p; } @@ -96,40 +96,40 @@ const std::string text_strip_lowercase(const std::string &text) return r; } -const std::string pad_left(const std::string &text,size_t n) +const std::string pad_left(const std::string &text, size_t n) { size_t l = text_length(text); if (n <= l) return text; std::string s; - s.assign(n-l, ' '); + s.assign(n - l, ' '); s.append(text); return s; } -const std::string pad_right(const std::string &text,size_t n) +const std::string pad_right(const std::string &text, size_t n) { size_t l = text_length(text); if (n <= l) return text; std::string s(text); - s.append(n-l, ' '); + s.append(n - l, ' '); return s; } void to_lowercase(std::string &text) { - for (std::string::iterator i = text.begin(); i != text.end(); ++i) - (*i) = tolower(*i); + for (std::string::iterator i = text.begin(); i != text.end(); ++i) + (*i) = tolower(*i); } const std::string lowercase(const std::string &text) { std::string t; - for (std::string::const_iterator i = text.begin(); i != text.end(); ++i) - t += tolower(*i); + for (std::string::const_iterator i = text.begin(); i != text.end(); ++i) + t += tolower(*i); return t; } @@ -139,7 +139,7 @@ void trim(std::string &text) text.erase(0, 1); } while (text.size() && text[text.size()-1] == ' ') { - text.erase(text.size()-1, 1); + text.erase(text.size() - 1, 1); } } diff --git a/src/auxiliary/functions.h b/src/auxiliary/functions.h index d5b590d..aeaa201 100644 --- a/src/auxiliary/functions.h +++ b/src/auxiliary/functions.h @@ -18,18 +18,33 @@ namespace aux const std::string plural(const char * word, size_t n); /// append an "s" to a word, depending on the amount -inline const std::string plural(const std::string & word, size_t n) { return plural(word.c_str(), n); } +inline const std::string plural(const std::string & word, size_t n) +{ + return plural(word.c_str(), n); +} /// prepend the "a" or "an" article to a word const std::string article(const char * word); -inline const std::string article(const std::string & word) { return article(word.c_str()); } +inline const std::string article(const std::string & word) +{ + return article(word.c_str()); +} -inline bool is_base_color_code(char const *c) { return ((*c == '^') && (*(c+1) >= '0') && (*(c+1) <= '7')); } +inline bool is_base_color_code(char const *c) +{ + return ((*c == '^') && (*(c + 1) >= '0') && (*(c + 1) <= '7')); +} -inline bool is_core_color_code(char const *c) { return ((*c == '^') && (*(c+1) >= 'A') && (*(c+1) <= 'Z')); } +inline bool is_core_color_code(char const *c) +{ + return ((*c == '^') && (*(c + 1) >= 'A') && (*(c + 1) <= 'Z')); +} -inline bool is_color_code(char const *c) { return (is_base_color_code(c) || is_core_color_code(c)); } +inline bool is_color_code(char const *c) +{ + return (is_base_color_code(c) || is_core_color_code(c)); +} /// length of a string, excluding color codes size_t text_length(const std::string &text); diff --git a/src/client/action.cc b/src/client/action.cc index b86476e..7c7a34c 100644 --- a/src/client/action.cc +++ b/src/client/action.cc @@ -21,7 +21,8 @@ Action::~Action() { } -void Action::set_info(const char *info) { +void Action::set_info(const char *info) +{ if (info) action_info.assign(info); else diff --git a/src/client/action.h b/src/client/action.h index c7086c8..778c40d 100644 --- a/src/client/action.h +++ b/src/client/action.h @@ -9,26 +9,33 @@ #include <string> -namespace client { +namespace client +{ /// an Action that can be bound to a key class Action { public: /// actions - enum Identifier {None=0}; + enum Identifier {None = 0}; /// define a new action Action(const char *name, Identifier action, const char *info = 0); ~Action(); - + /// name of the Action - inline std::string const & name() const { return action_name; } + inline std::string const & name() const { + return action_name; + } /// Action Identifier - inline Identifier id() const { return action_id; } + inline Identifier id() const { + return action_id; + } - inline std::string const & info() const { return action_info; } + inline std::string const & info() const { + return action_info; + } /// set info void set_info(const char *info); diff --git a/src/client/buymenu.cc b/src/client/buymenu.cc index 8c69a7a..d12f23e 100644 --- a/src/client/buymenu.cc +++ b/src/client/buymenu.cc @@ -16,9 +16,9 @@ namespace client BuyMenu::BuyMenu(ui::Widget *parent, const char * label) : ui::Window(parent) { set_border(false); - set_background(true); + set_background(true); - if (label) + if (label) set_label(label); else set_label("buymenu"); @@ -34,7 +34,7 @@ BuyMenu::BuyMenu(ui::Widget *parent, const char * label) : ui::Window(parent) menu_modelview->set_background(false); menu_modelview->set_border(false); - menu_closebutton = new ui::Button(menu_modelpane, "Close","view hide"); + menu_closebutton = new ui::Button(menu_modelpane, "Close", "view hide"); // text pane (right) menu_textpane = new ui::Window(this); @@ -48,7 +48,7 @@ BuyMenu::BuyMenu(ui::Widget *parent, const char * label) : ui::Window(parent) menu_namelabel->set_border(false); menu_namelabel->set_font(ui::root()->font_large()); menu_namelabel->set_alignment(ui::AlignCenter); - + menu_scrollpane = new ui::ScrollPane(menu_textpane, menu_infotext); menu_scrollpane->set_background(false); menu_scrollpane->set_border(false); @@ -83,7 +83,7 @@ void BuyMenu::set_item(std::string const & itemtype, std::string const & itemnam menu_namelabel->set_text(0); menu_modelview->set_modelname(0); - core::Info *info = core::game()->info(itemtype+'/'+itemname); + core::Info *info = core::game()->info(itemtype + '/' + itemname); if (info) { menu_namelabel->set_text(info->name()); menu_modelview->set_modelname(info->modelname()); @@ -111,10 +111,10 @@ void BuyMenu::resize() menu_modelpane->set_location(smallmargin, smallmargin * 2.0f); menu_closebutton->set_size(ui::UI::elementsize); - menu_closebutton->set_location((menu_modelpane->width() - menu_closebutton->width()) * 0.5f, - menu_modelpane->height() - menu_closebutton->height() - ui::UI::elementsize.height() * 0.5f); + menu_closebutton->set_location((menu_modelpane->width() - menu_closebutton->width()) * 0.5f, + menu_modelpane->height() - menu_closebutton->height() - ui::UI::elementsize.height() * 0.5f); - menu_modelview->set_size(menu_modelpane->width()-8, menu_modelpane->width()-8); + menu_modelview->set_size(menu_modelpane->width() - 8, menu_modelpane->width() - 8); menu_modelview->set_location(4, 4); // reposition text pane (right) @@ -122,13 +122,13 @@ void BuyMenu::resize() menu_textpane->set_location(smallmargin * 2.0f + menu_modelpane->width(), smallmargin * 2.0f); menu_buybutton->set_size(ui::UI::elementsize); - menu_buybutton->set_location((menu_textpane->width() - menu_buybutton->width()) * 0.5f, - menu_textpane->height() - menu_buybutton->height() - ui::UI::elementsize.height() * 0.5f); + menu_buybutton->set_location((menu_textpane->width() - menu_buybutton->width()) * 0.5f, + menu_textpane->height() - menu_buybutton->height() - ui::UI::elementsize.height() * 0.5f); menu_namelabel->set_size(menu_textpane->width(), menu_namelabel->font()->height() * 2.0f); menu_namelabel->set_location(0, 4); - menu_scrollpane->set_size(menu_textpane->width() - 8, menu_buybutton->top() - menu_namelabel->bottom() - 8 ); + menu_scrollpane->set_size(menu_textpane->width() - 8, menu_buybutton->top() - menu_namelabel->bottom() - 8); menu_scrollpane->set_location(4, menu_namelabel->bottom() + 4); } @@ -142,14 +142,14 @@ void BuyMenu::draw() bool BuyMenu::on_keypress(const int key, const unsigned int modifier) { - switch( key ) { - - case SDLK_ESCAPE: - this->hide(); - return true; - break; - default: - break; + switch (key) { + + case SDLK_ESCAPE: + this->hide(); + return true; + break; + default: + break; } return Window::on_keypress(key, modifier); diff --git a/src/client/buymenu.h b/src/client/buymenu.h index 6a1a651..f624ec3 100644 --- a/src/client/buymenu.h +++ b/src/client/buymenu.h @@ -1,7 +1,7 @@ /* client/buymenu.h - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_CLIENT_BUYMENU_H__ diff --git a/src/client/chat.cc b/src/client/chat.cc index 137e6b1..5eb1922 100644 --- a/src/client/chat.cc +++ b/src/client/chat.cc @@ -1,7 +1,7 @@ /* client/chat.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 + 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 "auxiliary/functions.h" @@ -11,7 +11,8 @@ #include "sys/sys.h" #include "ui/ui.h" -namespace client { +namespace client +{ const size_t DEFAULT_CHAT_LOG_SIZE = 2048; const size_t DEFAULT_CHAT_HISTO_SIZE = 512; @@ -69,7 +70,7 @@ void Chat::show() history_pos = history.rbegin(); (*history_pos).clear(); - chat_input->set_text((*history_pos)); + chat_input->set_text((*history_pos)); chat_scrollpane->set_scroll(0); } @@ -89,67 +90,67 @@ bool Chat::on_keypress(const int key, const unsigned int modifier) History::reverse_iterator upit; - switch( key ) { - case SDLK_ESCAPE: - if (visible()) { - hide(); + switch (key) { + case SDLK_ESCAPE: + if (visible()) { + hide(); + return true; + } else { + return false; + } + case SDLK_RETURN: + if (chat_input->text().size()) { + // store input into history + while (history.size() >= DEFAULT_CHAT_HISTO_SIZE) { + history.pop_front(); + } + + if (chat_input->text().c_str()[0] == '/' || chat_input->text().c_str()[0] == '\\') { + core::cmd() << &chat_input->text().c_str()[1] << std::endl; + } else { + core::cmd() << "say " << chat_input->text() << std::endl; + } + (*history.rbegin()) = chat_input->text(); + + history.push_back(""); + history_pos = history.rbegin(); + chat_input->set_text((*history_pos)); + + if (chat_small) + hide(); + } else { + hide(); + } return true; - } else { - return false; - } - case SDLK_RETURN: - if (chat_input->text().size()) { - // store input into history - while (history.size() >= DEFAULT_CHAT_HISTO_SIZE) { - history.pop_front(); + break; + + case SDLK_UP: + upit = history_pos; + ++upit; + if (upit != history.rend()) { + history_pos = upit; + chat_input->set_text((*history_pos)); } + return true; + break; - if (chat_input->text().c_str()[0] == '/' || chat_input->text().c_str()[0] == '\\') { - core::cmd() << &chat_input->text().c_str()[1] << std::endl; - } else { - core::cmd() << "say " << chat_input->text() << std::endl; + case SDLK_DOWN: + if (history_pos != history.rbegin()) { + --history_pos; + chat_input->set_text((*history_pos)); } - (*history.rbegin()) = chat_input->text(); + return true; + break; - history.push_back(""); - history_pos = history.rbegin(); - chat_input->set_text((*history_pos)); + case SDLK_PAGEUP: + chat_scrollpane->inc_scroll(scroll_offset); + return true; + break; - if (chat_small) - hide(); - } else { - hide(); - } - return true; - break; - - case SDLK_UP: - upit = history_pos; - ++upit; - if (upit != history.rend()) { - history_pos = upit; - chat_input->set_text((*history_pos)); - } - return true; - break; - - case SDLK_DOWN: - if (history_pos != history.rbegin()) { - --history_pos; - chat_input->set_text((*history_pos)); - } - return true; - break; - - case SDLK_PAGEUP: - chat_scrollpane->inc_scroll(scroll_offset); - return true; - break; - - case SDLK_PAGEDOWN: - chat_scrollpane->dec_scroll(scroll_offset); - return true; - break; + case SDLK_PAGEDOWN: + chat_scrollpane->dec_scroll(scroll_offset); + return true; + break; } return false; @@ -169,7 +170,7 @@ void Chat::event_draw() hide(); return; } - + if (chat_small) { chat_scrollpane->hide(); } else { @@ -183,12 +184,12 @@ void Chat::resize() const float margin = 8.0f; math::Vector2f s(size()); - s[0] -= margin*2; - s[1] -= margin*2; + s[0] -= margin * 2; + s[1] -= margin * 2; chat_scrollpane->set_location(margin, margin); chat_scrollpane->set_size(s.width(), s.height() - font()->height() *1.5f); - + chat_input->set_location(margin, height() - font()->height() - margin); chat_input->set_size(s.width(), font()->height()); } diff --git a/src/client/chat.h b/src/client/chat.h index b7e1691..41837c5 100644 --- a/src/client/chat.h +++ b/src/client/chat.h @@ -1,7 +1,7 @@ /* client/chat.h - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_CLIENT_CHAT_H__ @@ -14,7 +14,8 @@ #include "ui/scrollpane.h" #include "ui/window.h" -namespace client { +namespace client +{ class Chat : public ui::Window { @@ -26,19 +27,21 @@ public: void toggle(); void event_text(const std::string & text); - - inline bool small_view() const { return chat_small; } - - void set_small_view(bool small_view=true); + + inline bool small_view() const { + return chat_small; + } + + void set_small_view(bool small_view = true); void clear(); protected: virtual void event_draw(); virtual void resize(); - + virtual bool on_keypress(const int key, const unsigned int modifier); - + private: bool chat_small; @@ -46,9 +49,9 @@ private: ui::Text chat_log; ui::ScrollPane *chat_scrollpane; ui::InputBox *chat_input; - + typedef std::deque<std::string> History; - + History history; History::reverse_iterator history_pos; }; diff --git a/src/client/client.cc b/src/client/client.cc index 1fa2796..6a50743 100644 --- a/src/client/client.cc +++ b/src/client/client.cc @@ -1,7 +1,7 @@ /* client/client.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 + 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 <SDL/SDL.h> @@ -22,7 +22,7 @@ #include "render/render.h" #include "ui/ui.h" -namespace client +namespace client { core::Cvar *cl_framerate = 0; @@ -42,7 +42,7 @@ void run(int count, char **arguments) { std::cout << core::name() << " " << core::version() << std::endl; - for (int i =0; i < count; i++) + for (int i = 0; i < count; i++) std::cout << arguments[i] << " "; std::cout << std::endl; @@ -104,7 +104,7 @@ void Client::init(int count, char **arguments) // initialize audio audio::init(); - + // add engine functions core::Func *func = 0; @@ -116,19 +116,19 @@ void Client::init(int count, char **arguments) func = core::Func::add("list_ui", func_list_ui); func->set_info("list user interface widgets"); - + func = core::Func::add("list_menu", func_list_menu); func->set_info("list available menus"); - + func = core::Func::add("ui", func_ui); func->set_info("[command] user interface functions"); - + func = core::Func::add("ui_restart", func_ui_restart); func->set_info("reload user interface files"); func = core::Func::add("ui_console", func_ui_console); func->set_info("toggle console"); - + func = core::Func::add("ui_chat", Client::func_ui_chat); func->set_info("toggle chat window"); @@ -160,14 +160,14 @@ void Client::run() // default framerate 125fps, 8 milliseconds Uint32 client_frame_lenght = 8; - + Uint32 client_current_timestamp = 0; Uint32 client_previous_timestamp = 0; - + while (true) { // current time in microseconds client_current_timestamp = SDL_GetTicks(); - + // calculate the desired frame length if (cl_framerate->value() < 0) { (*cl_framerate) = 0.0f; @@ -180,12 +180,12 @@ void Client::run() } else { client_frame_lenght = 0; } - + // only advance per microsecond frame Uint32 d = client_current_timestamp - client_previous_timestamp; if ((d > 0)) { if (d >= client_frame_lenght) { - frame(client_current_timestamp); + frame(client_current_timestamp); client_previous_timestamp = client_current_timestamp; } else { SDL_Delay(client_frame_lenght - d); @@ -222,7 +222,7 @@ void Client::frame(unsigned long timestamp) if (!core::game()->interactive()) { ui::root()->show_menu("main"); - // show the join menu when player does not control an entity + // show the join menu when player does not control an entity } else if (core::game()->time() && !core::localcontrol()) { ui::root()->show_menu("join"); } @@ -231,13 +231,13 @@ void Client::frame(unsigned long timestamp) // hide join menu if (ui::root()->active()->label().compare("join") == 0) { - ui::root()->hide_menu(); + ui::root()->hide_menu(); } } } video::frame((float)(timestamp - previous_timestamp) / 1000.0f); - + previous_timestamp = timestamp; } @@ -248,7 +248,7 @@ void Client::shutdown() if (connected()) disconnect(); core::Func::remove("r_restart"); - core::Func::remove("snd_restart"); + core::Func::remove("snd_restart"); core::Func::remove("list_menu"); core::Func::remove("list_ui"); core::Func::remove("ui"); @@ -302,7 +302,7 @@ void Client::notify_zonechange() { video::set_loader_message(); video::frame_loader(); - + // unload entity sounds for (core::Entity::Registry::iterator it = core::Entity::registry().begin(); it != core::Entity::registry().end(); it++) { core::Entity *entity = (*it).second; @@ -333,7 +333,7 @@ void Client::notify_message(const std::string &message) void Client::notify_message(const core::Message::Channel channel, const std::string &message) { - switch(channel) { + switch (channel) { case core::Message::Info: // Info message break; @@ -363,7 +363,8 @@ void Client::notify_message(const core::Message::Channel channel, const std::str con_print << message << std::endl; } -void Client::notify_loader(const std::string &message) { +void Client::notify_loader(const std::string &message) +{ video::set_loader_message(message.c_str()); } @@ -436,7 +437,7 @@ void Client::func_ui(std::string const &args) con_warn << "User Interface not available!" << std::endl; return; } - + if (!args.size()) { func_ui_help(); return; @@ -445,7 +446,7 @@ void Client::func_ui(std::string const &args) std::string command; argstr >> command; aux::to_label(command); - + if (command.compare("help") == 0) { func_ui_help(); } else if (command.compare("debug") == 0) { @@ -517,7 +518,7 @@ void Client::func_menu(std::string const &args) con_warn << "User Interface not available!" << std::endl; return; } - + if (!args.size()) { con_print << "^Bmenu functions" << std::endl; con_print << " menu help show this help" << std::endl; @@ -533,21 +534,21 @@ void Client::func_menu(std::string const &args) std::stringstream argstr(args); std::string command; argstr >> command; - + aux::to_label(command); - + if (command.compare("hide") == 0) { ui::root()->hide_menu(); - + } else if (command.compare("close") == 0) { ui::root()->hide_menu(); - + } else if (command.compare("back") == 0) { ui::root()->previous_menu(); - + } else if (command.compare("previous") == 0) { ui::root()->previous_menu(); - + } else if (command.compare("list") == 0) { ui::root()->list_menus(); diff --git a/src/client/client.h b/src/client/client.h index dbb2c44..fd762c6 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -1,7 +1,7 @@ /* client/client.h - This file is part of the Osirion project and is distributed under - the terms and conditions of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_CLIENT_H__ @@ -16,7 +16,8 @@ #include "render/renderext.h" /// client part of the engine -namespace client { +namespace client +{ /// run the client application void run(int count, char **arguments); @@ -62,7 +63,9 @@ public: virtual void notify_disconnect(); /// the main client widget - inline WorldView *worldview() { return client_worldview; } + inline WorldView *worldview() { + return client_worldview; + } protected: /// run a client frame @@ -95,14 +98,20 @@ private: Client *client(); -inline ClientExt *ext_client(core::Entity *entity) - { return static_cast<ClientExt *>(entity->extension(core::Extension::Client)); } +inline ClientExt *ext_client(core::Entity *entity) +{ + return static_cast<ClientExt *>(entity->extension(core::Extension::Client)); +} -inline SoundExt *ext_sound(core::Entity *entity) - { return static_cast<SoundExt *>(entity->extension(core::Extension::Sound)); } +inline SoundExt *ext_sound(core::Entity *entity) +{ + return static_cast<SoundExt *>(entity->extension(core::Extension::Sound)); +} -inline render::RenderExt *ext_render(core::Entity *entity) - { return static_cast<render::RenderExt *>(entity->extension(core::Extension::Render)); } +inline render::RenderExt *ext_render(core::Entity *entity) +{ + return static_cast<render::RenderExt *>(entity->extension(core::Extension::Render)); +} } diff --git a/src/client/clientext.h b/src/client/clientext.h index d76546d..123c4c0 100644 --- a/src/client/clientext.h +++ b/src/client/clientext.h @@ -13,7 +13,8 @@ namespace client { /// the client extension of an entity -class ClientExt :public core::Extension { +class ClientExt : public core::Extension +{ public: ClientExt(core::Entity *entity); ~ClientExt(); @@ -21,7 +22,7 @@ public: virtual void frame(float elapsed); private: - + }; } // namespace client diff --git a/src/client/entitymenu.cc b/src/client/entitymenu.cc index 59c922c..d0fccef 100644 --- a/src/client/entitymenu.cc +++ b/src/client/entitymenu.cc @@ -15,7 +15,7 @@ namespace client EntityMenu::EntityMenu(ui::Widget *parent, const char * label) : ui::Window(parent) { set_border(false); - set_background(false); + set_background(false); if (label) set_label(label); else @@ -58,9 +58,9 @@ void EntityMenu::generate(core::Entity *entity, const char *menulabel) menu_generated_menu.assign(menulabel); if (!menu_generated_menu.size()) return; - + //con_debug << "generating menu " << entity->label() << " " << menulabel << std::endl; - + clear(); menu_container = new Container(this); @@ -70,7 +70,7 @@ void EntityMenu::generate(core::Entity *entity, const char *menulabel) menudescr = (*it); } } - + if (!menudescr) { menu_container->event_resize(); resize(); @@ -100,36 +100,36 @@ void EntityMenu::generate(core::Entity *entity, const char *menulabel) if (c == '"') { quote = !quote; result += c; - + } else if (c == ';') { if (quote) { current += c; - + } else if (current.size()) { if (buttondescr->command_type() == core::ButtonDescription::CommandGame) { if (result.size()) { result += ';'; } - + result.append("remote "); result.append(current); - + } else if (buttondescr->command_type() == core::ButtonDescription::CommandMenu) { if (result.size()) { result += ';'; } - + result.append("view "); result.append(current); } current.clear(); } - + } else { current += c; } - + i++; } @@ -174,21 +174,21 @@ void EntityMenu::generate(core::Entity *entity, const char *menulabel) bool EntityMenu::on_keypress(const int key, const unsigned int modifier) { - switch( key ) { - - case SDLK_ESCAPE: - if (visible()) { - if (menu_generated_menu.compare("main") != 0) { - generate(menu_generated_entity, "main"); - } else { - this->hide(); - ui::root()->show_menu("game"); + switch (key) { + + case SDLK_ESCAPE: + if (visible()) { + if (menu_generated_menu.compare("main") != 0) { + generate(menu_generated_entity, "main"); + } else { + this->hide(); + ui::root()->show_menu("game"); + } + return true; } - return true; - } - break; - default: - break; + break; + default: + break; } return Window::on_keypress(key, modifier); diff --git a/src/client/entitymenu.h b/src/client/entitymenu.h index db69867..0285879 100644 --- a/src/client/entitymenu.h +++ b/src/client/entitymenu.h @@ -26,13 +26,17 @@ public: /* ---- inspectors ----------------------------------------- */ /// entity the current menu was generated for - inline core::Entity *generated_entity() { return menu_generated_entity; } + inline core::Entity *generated_entity() { + return menu_generated_entity; + } /// the current generated menu - inline const std::string & generated_menu() const { return menu_generated_menu; } + inline const std::string & generated_menu() const { + return menu_generated_menu; + } /* ---- mutators ------------------------------------------- */ - + /// generate a menu from menu descriptions void generate(core::Entity *entity, const char *menulabel); diff --git a/src/client/hud.cc b/src/client/hud.cc index 662bbe8..b7e2c43 100644 --- a/src/client/hud.cc +++ b/src/client/hud.cc @@ -1,7 +1,7 @@ /* client/hud.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 + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 */ @@ -13,7 +13,7 @@ #include "render/renderext.h" #include "ui/ui.h" -namespace client +namespace client { HUD::HUD(ui::Widget *parent) : Widget(parent) @@ -30,7 +30,7 @@ HUD::HUD(ui::Widget *parent) : Widget(parent) */ hud_center = new ui::Bitmap(this, "pointers/center"); hud_center->set_color(palette()->pointer()); - + } void HUD::resize() @@ -50,11 +50,11 @@ void HUD::draw_offscreen_target(core::Entity *entity, bool is_active_target) float cx = 0; float cy = 0; - if ( target.y() * target.y() + target.z() * target.z() < 0.0001 ) { + if (target.y() * target.y() + target.z() * target.z() < 0.0001) { // X - bound, behind (front is visible) cx = 0.0f; cy = -0.5f; - + } else if (fabs(target.y()) > fabs(target.z())) { // Y-bound cx = math::sgnf(target.y()) * 0.5f; @@ -67,18 +67,18 @@ void HUD::draw_offscreen_target(core::Entity *entity, bool is_active_target) const float r = 16; const float margin = 24; - cx = (0.5f - cx) * ((float) render::State::width() - margin*2); + cx = (0.5f - cx) * ((float) render::State::width() - margin * 2); cx += margin; - cy = (0.5f - cy) * ((float) render::State::height() - margin*2); + cy = (0.5f - cy) * ((float) render::State::height() - margin * 2); cy += margin; gl::disable(GL_TEXTURE_2D); gl::color(0, 0, 0, 1); gl::begin(gl::LineLoop); - glVertex3f(cx+r, cy+2, 0); - glVertex3f(cx, cy+r+2, 0); - glVertex3f(cx-r, cy+2, 0); - glVertex3f(cx, cy-r+2, 0); + glVertex3f(cx + r, cy + 2, 0); + glVertex3f(cx, cy + r + 2, 0); + glVertex3f(cx - r, cy + 2, 0); + glVertex3f(cx, cy - r + 2, 0); gl::end(); if (entity == core::localplayer()->mission_target()) { @@ -90,10 +90,10 @@ void HUD::draw_offscreen_target(core::Entity *entity, bool is_active_target) } gl::begin(gl::LineLoop); - glVertex3f(cx+r, cy, 0); - glVertex3f(cx, cy+r, 0); - glVertex3f(cx-r, cy, 0); - glVertex3f(cx, cy-r, 0); + glVertex3f(cx + r, cy, 0); + glVertex3f(cx, cy + r, 0); + glVertex3f(cx - r, cy, 0); + glVertex3f(cx, cy - r, 0); gl::end(); gl::enable(GL_TEXTURE_2D); } @@ -108,7 +108,7 @@ void HUD::draw_target(core::Entity *entity, bool is_active_target) // don't draw target if it is outside the visible cone Vector3f target(entity->location() - render::Camera::eye()); - if (math::dotproduct(render::Camera::axis().forward(), Vector3f::normalized(target)) < 0.75 ) { + if (math::dotproduct(render::Camera::axis().forward(), Vector3f::normalized(target)) < 0.75) { draw_offscreen_target(entity, is_active_target); return; } @@ -123,7 +123,7 @@ void HUD::draw_target(core::Entity *entity, bool is_active_target) float cx = render::State::width() * (0.5 - center.y()); float cy = render::State::height() * (0.5 - center.z() * render::State::aspect()); - if ((cx < 0 ) || (cy < 0) || (cx > render::State::width()) || (cy > render::State::height())) { + if ((cx < 0) || (cy < 0) || (cx > render::State::width()) || (cy > render::State::height())) { draw_offscreen_target(entity, is_active_target); return; } @@ -136,18 +136,18 @@ void HUD::draw_target(core::Entity *entity, bool is_active_target) // outer square shadow gl::color(0, 0, 0, 1); gl::begin(gl::LineLoop); - gl::vertex(cx+r, cy+2); - gl::vertex(cx, cy+r+2); - gl::vertex(cx-r, cy+2); - gl::vertex(cx, cy-r+2); + gl::vertex(cx + r, cy + 2); + gl::vertex(cx, cy + r + 2); + gl::vertex(cx - r, cy + 2); + gl::vertex(cx, cy - r + 2); gl::end(); if ((entity->flags() & core::Entity::Dockable) == core::Entity::Dockable) { gl::begin(gl::LineLoop); - gl::vertex(cx+ (r*0.25f), cy+2); - gl::vertex(cx, cy+(r*0.25f)+2); - gl::vertex(cx-(r*0.25f), cy+2); - gl::vertex(cx, cy-(r*0.25f)+2); + gl::vertex(cx + (r*0.25f), cy + 2); + gl::vertex(cx, cy + (r*0.25f) + 2); + gl::vertex(cx - (r*0.25f), cy + 2); + gl::vertex(cx, cy - (r*0.25f) + 2); gl::end(); } @@ -161,28 +161,28 @@ void HUD::draw_target(core::Entity *entity, bool is_active_target) // outer square0 gl::begin(gl::LineLoop); - gl::vertex(cx+r, cy); - gl::vertex(cx, cy+r); - gl::vertex(cx-r, cy); - gl::vertex(cx, cy-r); + gl::vertex(cx + r, cy); + gl::vertex(cx, cy + r); + gl::vertex(cx - r, cy); + gl::vertex(cx, cy - r); gl::end(); - + if ((entity->flags() & core::Entity::Dockable) == core::Entity::Dockable) { gl::begin(gl::LineLoop); - gl::vertex(cx+(r*0.25f), cy); - gl::vertex(cx, cy+(r*0.25f)); - gl::vertex(cx-(r*0.25f), cy); - gl::vertex(cx, cy-(r*0.25f)); + gl::vertex(cx + (r*0.25f), cy); + gl::vertex(cx, cy + (r*0.25f)); + gl::vertex(cx - (r*0.25f), cy); + gl::vertex(cx, cy - (r*0.25f)); gl::end(); } - + gl::enable(GL_TEXTURE_2D); if (is_active_target) { // entity name and distance std::stringstream strdistance; float d = math::distance(core::localcontrol()->location(), entity->location()) - entity->radius() - core::localcontrol()->radius(); - if (d > 0 ) { + if (d > 0) { if (d > 100.0f) { strdistance << roundf(d * 0.1f) << "km"; } else { @@ -197,8 +197,8 @@ void HUD::draw_target(core::Entity *entity, bool is_active_target) const core::EntityControlable *ec = static_cast<core::EntityControlable *>(entity); if (ec->owner()) { render::Text::setcolor('B'); - render::Text::draw(cx-aux::text_length(entity->name()) * render::Text::fontwidth()*0.5f, - cy-r-4-2*render::Text::fontheight(), ec->owner()->name()); + render::Text::draw(cx - aux::text_length(entity->name()) * render::Text::fontwidth()*0.5f, + cy - r - 4 - 2*render::Text::fontheight(), ec->owner()->name()); } render::Text::setcolor('B'); @@ -209,24 +209,24 @@ void HUD::draw_target(core::Entity *entity, bool is_active_target) render::Text::setcolor('N'); } - render::Text::draw(cx-aux::text_length(entity->name()) * render::Text::fontwidth()*0.5f, - cy-r-4-render::Text::fontheight(), entity->name()); + render::Text::draw(cx - aux::text_length(entity->name()) * render::Text::fontwidth()*0.5f, + cy - r - 4 - render::Text::fontheight(), entity->name()); render::Text::draw(cx - aux::text_length(strdistance.str()) * render::Text::fontwidth() * 0.5f, - cy+r+4, strdistance); + cy + r + 4, strdistance); } } bool HUD::on_keypress(const int key, const unsigned int modifier) { - switch( key ) { - case SDLK_ESCAPE: - if (targets::current()) { - targets::reset(); - } else { - ui::root()->show_menu("game"); - } - return true; + switch (key) { + case SDLK_ESCAPE: + if (targets::current()) { + targets::reset(); + } else { + ui::root()->show_menu("game"); + } + return true; } return false; @@ -238,21 +238,21 @@ void HUD::draw() std::stringstream status; if (core::localcontrol() && (input::mouse_control || input::joystick_control) && - (render::Camera::mode() == render::Camera::Cockpit || render::Camera::mode() == render::Camera::Track)) { + (render::Camera::mode() == render::Camera::Cockpit || render::Camera::mode() == render::Camera::Track)) { hud_center->set_visible(true); } else { hud_center->set_visible(false); } - + gl::enable(GL_TEXTURE_2D); Text::setfont("gui", 12, 18); Text::setcolor('N'); //set normal color - + core::Zone *zone = core::localcontrol()->zone(); // draw HUD targets - for (core::Zone::Content::iterator it=zone->content().begin(); it != zone->content().end(); it++) { + for (core::Zone::Content::iterator it = zone->content().begin(); it != zone->content().end(); it++) { core::Entity *entity = (*it); if (entity == targets::current()) { @@ -261,11 +261,12 @@ void HUD::draw() } else if (entity == core::localplayer()->mission_target()) { draw_target(entity, false); - } else if ((entity->type() == core::Entity::Controlable) && (targets::is_valid_hud_target(entity))){ + } else if ((entity->type() == core::Entity::Controlable) && (targets::is_valid_hud_target(entity))) { draw_target(entity, false); } } + /* unsigned int state = core::localcontrol()->state(); if (state) { std::stringstream statestr; @@ -275,13 +276,14 @@ void HUD::draw() } else if (state == core::Entity::Impulse) { //statestr << "^FKinetic impulse"; } else if (state == core::Entity::JumpInitiate) { - statestr << "^FInitializing hyperspace jump drive "<< core::localcontrol()->timer(); + statestr << "^FInitializing hyperspace jump drive " << core::localcontrol()->timer(); } else if (state == core::Entity::Jump) { statestr << "^FJumping..."; } - Text::draw(4, render::State::height() - Text::fontheight()*3-4, statestr); + Text::draw(4, render::State::height() - Text::fontheight()*3 - 4, statestr); } + */ core::Entity *target = targets::current(); std::stringstream strdistance; @@ -290,10 +292,10 @@ void HUD::draw() std::stringstream strtarget; strtarget << "^B" << target->name() << "\n^B"; - float d = math::distance(core::localcontrol()->location(), target->location()) - - target->radius() - core::localcontrol()->radius(); + float d = math::distance(core::localcontrol()->location(), target->location()) + - target->radius() - core::localcontrol()->radius(); - if (d > 0 ) { + if (d > 0) { strtarget << "^Ndist:^B "; if (d > 100.0f) { strtarget << roundf(d * 0.1f) << "km"; @@ -303,7 +305,7 @@ void HUD::draw() if (core::localcontrol()->speed() > 0.1f) { strtarget << "^N eta:^B "; - float eta = floorf(d / core::localcontrol()->speed() ); + float eta = floorf(d / core::localcontrol()->speed()); if (eta > 60.0f) { float etamin = floorf(eta / 60.0f); strtarget << etamin << "min "; @@ -315,13 +317,13 @@ void HUD::draw() strtarget << " --"; } strtarget << '\n'; - Text::draw(width() - 4-Text::fontwidth()*30, height() - Text::fontheight()*2 -4, strtarget); + Text::draw(width() - 4 - Text::fontwidth()*30, height() - Text::fontheight()*2 - 4, strtarget); } - // draw player info + // draw player info std::stringstream playerinfostr; - playerinfostr <<"^B" << core::localcontrol()->name() << '\n' << "^Ncredits: " << core::localplayer()->credits(); - Text::draw(width() - 4-Text::fontwidth()*52, height() - Text::fontheight()*2 -4, playerinfostr); + playerinfostr << "^B" << core::localcontrol()->name() << '\n' << "^Ncredits: " << core::localplayer()->credits(); + Text::draw(width() - 4 - Text::fontwidth()*52, height() - Text::fontheight()*2 - 4, playerinfostr); Textures::bind("bitmaps/hud/thruster_base"); // 316 x 32 bitmap gl::color(1, 1, 1, 1); @@ -342,14 +344,23 @@ void HUD::draw() gl::end(); float u = core::localcontrol()->thrust(); - if (core::localcontrol()->state() == core::Entity::Impulse) { - u = 1.0; + + if (core::localcontrol()->state() != core::Entity::Normal) { + + if ((core::localcontrol()->state() == core::Entity::Docked ) || (core::localcontrol()->state() == core::Entity::NoPower )) { + u = 0.0f; + } else { + + u = 1.0f; + } } - if (( u > 0) || (core::localcontrol()->state() == core::Entity::Impulse)) { + if ((u > 0) || (core::localcontrol()->state() == core::Entity::Impulse)) { - if (core::localcontrol()->state() == core::Entity::Impulse) { + if ((core::localcontrol()->state() == core::Entity::Impulse) || (core::localcontrol()->state() == core::Entity::ImpulseInitiate)) { gl::color(0, .8, 0); + } else if ((core::localcontrol()->state() == core::Entity::Jump) || (core::localcontrol()->state() == core::Entity::JumpInitiate)) { + gl::color(0.8f, 0.0f, 0.0f); } else { float d = math::absf(input::local_thrust - u); if (d > 0.1) { @@ -379,11 +390,11 @@ void HUD::draw() std::stringstream speedstr; speedstr << "^B" << roundf(core::localcontrol()->speed() * 100.0f); - Text::draw( 316+4+10, height() - 6 -16 - render::Text::fontwidth() /2, speedstr); + Text::draw(316 + 4 + 10, height() - 6 - 16 - render::Text::fontwidth() / 2, speedstr); Text::setfont("gui", 12, 18); Text::setcolor('N'); //set normal color - + gl::disable(GL_TEXTURE_2D); } diff --git a/src/client/hud.h b/src/client/hud.h index d89450f..bda6ea1 100644 --- a/src/client/hud.h +++ b/src/client/hud.h @@ -1,7 +1,7 @@ /* client/hud.h - This file is part of the Osirion project and is distributed under - the terms and conditions of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_CLIENT_HUD_H__ @@ -12,7 +12,7 @@ #include "ui/toolbar.h" #include "ui/widget.h" -namespace client +namespace client { /// widget that contains HUD elements @@ -21,10 +21,11 @@ namespace client * that are only visible if the client is connected * and the core is running an interactive module **/ -class HUD : public ui::Widget { +class HUD : public ui::Widget +{ public: /// create a new HUD widget - HUD(ui::Widget *parent=0); + HUD(ui::Widget *parent = 0); protected: /// draw hud elements diff --git a/src/client/infowidget.cc b/src/client/infowidget.cc index b30dfd7..da4103f 100644 --- a/src/client/infowidget.cc +++ b/src/client/infowidget.cc @@ -1,7 +1,7 @@ /* client/infowidget.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 + 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 <iostream> @@ -28,7 +28,7 @@ namespace client void time_to_stream(std::stringstream &str, float time) { int minutes = (int) floorf(time / 60.0f); - int seconds = (int) floorf( time - (float) minutes* 60.0f); + int seconds = (int) floorf(time - (float) minutes * 60.0f); str << std::setfill(' ') << std::setw(4) << minutes << ":" << std::setfill('0') << std::setw(2) << seconds; } @@ -58,19 +58,19 @@ void DevInfoWidget::draw() if (core::localcontrol()) { textstream << std::fixed << std::setprecision(2) - << "^Nx ^B" << core::localcontrol()->location().x() << " " - << "^Ny ^B" << core::localcontrol()->location().y() << " " - << "^Nz ^B" << core::localcontrol()->location().z() << '\n'; + << "^Nx ^B" << core::localcontrol()->location().x() << " " + << "^Ny ^B" << core::localcontrol()->location().y() << " " + << "^Nz ^B" << core::localcontrol()->location().z() << '\n'; textstream << "^Nthurst ^B" << core::localcontrol()->thrust() << " " - << "^Nspeed ^B" << core::localcontrol()->speed() << '\n'; - + << "^Nspeed ^B" << core::localcontrol()->speed() << '\n'; + if (target) { d = math::distance(core::localcontrol()->location(), target->location()) - target->radius() - core::localcontrol()->radius(); textstream << "^Ndist ^B" << d << '\n'; } } - + ui::paint::color(palette()->foreground()); ui::paint::text(global_location(), size(), font(), textstream); } @@ -84,7 +84,7 @@ StatsInfoWidget::StatsInfoWidget(ui::Widget *parent) : ui::Widget(parent) set_background(false); // clear counters - for (size_t i =0; i < fps_counter_size; i++) + for (size_t i = 0; i < fps_counter_size; i++) fps_counter_time[i] = 0.0f; for (size_t i = 0; i < net_counter_size; i++) @@ -98,9 +98,9 @@ void StatsInfoWidget::draw() { // average fps fps_counter_time[fps_counter_index] = core::application()->time(); - fps_counter_index = (fps_counter_index + 1 ) % fps_counter_size; + fps_counter_index = (fps_counter_index + 1) % fps_counter_size; float min_time = core::application()->time(); - for (size_t i=0; i < fps_counter_size; i++) + for (size_t i = 0; i < fps_counter_size; i++) if (fps_counter_time[i] < min_time) min_time = fps_counter_time[i]; float fps = 0.0f; @@ -135,7 +135,7 @@ void StatsInfoWidget::draw() float d = net_counter_time[index_max] - net_counter_time[index_min]; if (d > 0) { float traffic = net_counter_traffic[index_max] - net_counter_traffic[index_min]; - textstream << "^Nnet ^B" << std::setw(6) << roundf( (float) traffic / d ) << "\n"; + textstream << "^Nnet ^B" << std::setw(6) << roundf((float) traffic / d) << "\n"; } } } @@ -157,7 +157,7 @@ void KeyInfoWidget::draw() { std::string label; ui::paint::color(palette()->highlight()); - + Key::Modifier mod = input::modifier(); if (mod != Key::None) { if (mod == Key::Shift) @@ -168,7 +168,7 @@ void KeyInfoWidget::draw() label.assign("alt+"); } - if(input::last_key_pressed()) { + if (input::last_key_pressed()) { label.append(input::last_key_pressed()->name()); } diff --git a/src/client/infowidget.h b/src/client/infowidget.h index 2cea366..48d1c9a 100644 --- a/src/client/infowidget.h +++ b/src/client/infowidget.h @@ -1,7 +1,7 @@ /* client/infowidget.h - This file is part of the Osirion project and is distributed under - the terms and conditions of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_CLIENT_INFOWIDGET_H__ @@ -33,7 +33,7 @@ class StatsInfoWidget : public ui::Widget { public: /// default constructor - StatsInfoWidget(ui::Widget *parent=0); + StatsInfoWidget(ui::Widget *parent = 0); protected: /// draw engine statistics @@ -53,7 +53,7 @@ class KeyInfoWidget : public ui::Widget { public: // default constructor - KeyInfoWidget(ui::Widget *parent=0); + KeyInfoWidget(ui::Widget *parent = 0); protected: // draw keypress events diff --git a/src/client/input.cc b/src/client/input.cc index 8b49604..790af91 100644 --- a/src/client/input.cc +++ b/src/client/input.cc @@ -82,15 +82,18 @@ float joystick_lastmoved = 0; const float thruster_offset = 0.05f; -int mouse_position_x() { +int mouse_position_x() +{ return mouse_x; } -int mouse_position_y() { +int mouse_position_y() +{ return mouse_y; } -Key *last_key_pressed() { +Key *last_key_pressed() +{ return last_key; } @@ -130,6 +133,9 @@ void func_ui_control(std::string const &args) render::Camera::set_direction(0.0f); render::Camera::set_pitch(0.0f); } + + con_debug << "mouse control is " << ((input_mousecontrol->value()) ? "on" : "off") << std::endl; + audio::play("ui/control"); } @@ -193,7 +199,7 @@ void func_list_binds(std::string const &args) aux::to_lowercase(keyname); keyboard->bind(keyname, ""); } else { - keyboard->list_binds(); + keyboard->list_binds(); } } else { con_warn << "Keyboard handler not installed!" << std::endl; @@ -207,8 +213,8 @@ void func_bind(std::string const &args) std::string keyname; if (argstr >> keyname) { aux::to_lowercase(keyname); - if (args.size() > keyname.size()+1) { - keyboard->bind(keyname, args.substr(keyname.size()+1)); + if (args.size() > keyname.size() + 1) { + keyboard->bind(keyname, args.substr(keyname.size() + 1)); } else { keyboard->bind(keyname, ""); } @@ -249,7 +255,7 @@ void init() keyboard = new Keyboard(); - SDL_ShowCursor(SDL_DISABLE); + SDL_ShowCursor(SDL_DISABLE); SDL_WM_GrabInput(SDL_GRAB_ON); // SDL_EnableUNICODE(1); @@ -268,7 +274,7 @@ void init() input_mousedelay->set_info("[int] mouse click time-out in milliseconds"); core::Func *func = 0; - func = core::Func::add("ui_control",func_ui_control); + func = core::Func::add("ui_control", func_ui_control); func->set_info("toggle mouse control"); func = core::Func::add("list_joystick", func_list_joystick); @@ -280,7 +286,7 @@ void init() func = core::Func::add("list_keys", func_list_keys); func->set_info("list key names"); - func = core::Func::add("list_binds",func_list_binds); + func = core::Func::add("list_binds", func_list_binds); func->set_info("list keyb binds"); func = core::Func::add("bind", (core::FuncPtr) func_bind); @@ -319,17 +325,17 @@ void shutdown() core::Func::remove("unbindall"); core::Func::remove("screenshot"); - + core::Func::remove("ui_control"); core::Func::remove("ui_view"); - + if (keyboard) { keyboard->save_binds(); delete keyboard; keyboard = 0; } - SDL_ShowCursor(SDL_ENABLE); + SDL_ShowCursor(SDL_ENABLE); SDL_WM_GrabInput(SDL_GRAB_OFF); // SDL_DisableUNICODE(0); @@ -340,11 +346,11 @@ void action_press(Key const *key, std::string const &action) /* -- thruster ------------------------------------ */ if (action.compare("+thrustup") == 0) { local_thrust += thruster_offset; - + } else if (action.compare("+thrustdown") == 0) { local_thrust -= 2.0f * thruster_offset; - + /* -- mouse control ------------------------------- */ } else if (action.compare("+control") == 0) { if (!mouse_control_override) { @@ -384,7 +390,7 @@ void action_press(Key const *key, std::string const &action) local_afterburner = -1.0f; /* -- camera control ------------------------------ */ - + } else if (action.compare("+zoomin") == 0) { render::Camera::set_zoom(-0.1f); @@ -392,16 +398,16 @@ void action_press(Key const *key, std::string const &action) render::Camera::set_zoom(+0.1f); } else if (action.compare("+camleft") == 0) { - render::Camera::set_direction( math::min(key->pressed() - core::application()->time(), 1.0f) ); + render::Camera::set_direction(math::min(key->pressed() - core::application()->time(), 1.0f)); } else if (action.compare("+camright") == 0) { - render::Camera::set_direction(-math::min(key->pressed() - core::application()->time(),1.0f)); + render::Camera::set_direction(-math::min(key->pressed() - core::application()->time(), 1.0f)); } else if (action.compare("+camup") == 0) { - render::Camera::set_pitch(math::min(key->pressed() - core::application()->time(),1.0f)); + render::Camera::set_pitch(math::min(key->pressed() - core::application()->time(), 1.0f)); } else if (action.compare("+camdown") == 0) { - render::Camera::set_pitch(-math::min(key->pressed() - core::application()->time(),1.0f)); + render::Camera::set_pitch(-math::min(key->pressed() - core::application()->time(), 1.0f)); } else con_warn << "Unknown action " << action << std::endl; } @@ -410,23 +416,23 @@ void action_release(Key *key, std::string const &action) { /* -- thruster ------------------------------------ */ if (action.compare("+thrustup") == 0) { - + } else if (action.compare("+thrustdown") == 0) { - + /* -- mouse control ------------------------------- */ } else if (action.compare("+control") == 0) { if (mouse_control_override) { mouse_control_override = false; mouse_control_override_time = 0; - - if (!input_mousecontrol->value() || (joystick_control && mouse_control && - (render::Camera::mode() == render::Camera::Track || render::Camera::mode() == render::Camera::Cockpit))) { + + if (!input_mousecontrol->value() || (joystick_control && mouse_control && + (render::Camera::mode() == render::Camera::Track || render::Camera::mode() == render::Camera::Cockpit))) { local_direction = 0.0f; local_pitch = 0.0f; local_roll = 0.0f; - + render::Camera::set_direction(0.0f); render::Camera::set_pitch(0.0f); } @@ -463,7 +469,7 @@ void action_release(Key *key, std::string const &action) } else if (action.compare("+reverse") == 0) { local_afterburner = 0.0f; - /* -- camera control ------------------------------ */ + /* -- camera control ------------------------------ */ } else if (action.compare("+camleft") == 0) { render::Camera::set_direction(0.0f); @@ -478,12 +484,13 @@ void action_release(Key *key, std::string const &action) } } -Key::Modifier modifier() { - if ((keyboard_modifiers & Key::Shift) > 0 ) +Key::Modifier modifier() +{ + if ((keyboard_modifiers & Key::Shift) > 0) return Key::Shift; - else if ((keyboard_modifiers & Key::Ctrl) > 0 ) + else if ((keyboard_modifiers & Key::Ctrl) > 0) return Key::Ctrl; - else if ((keyboard_modifiers & Key::Alt) > 0 ) + else if ((keyboard_modifiers & Key::Alt) > 0) return Key::Alt; else return Key::None; @@ -514,7 +521,7 @@ void key_pressed(Key *key) render::Camera::set_direction(0.0f); render::Camera::set_pitch(0.0f); } - + if (ui::root()->input_key(true, Keyboard::translate_keysym(key->sym(), keyboard_modifiers), keyboard_modifiers)) { return; @@ -525,7 +532,7 @@ void key_pressed(Key *key) if (c == '@') { // target bind if (targets::current_id()) - core::cmd() << key->bind(modifier()) << " " << targets::current_id() <<"\n"; + core::cmd() << key->bind(modifier()) << " " << targets::current_id() << "\n"; } else if (c == '+') { // action bind action_press(key, key->bind(modifier())); @@ -550,13 +557,13 @@ void key_released(Key *key) if (core::application()->connected() && core::localcontrol()) { - // FIXME mouse release selection should be handled inside the hud - if ((key->sym() == 512 + SDL_BUTTON_LEFT) && targets::hover() && (key->waspressed() <= (input_mousedelay->value()/1000.0f) ) ) { + // FIXME mouse release selection should be handled inside the hud + if ((key->sym() == 512 + SDL_BUTTON_LEFT) && targets::hover() && (key->waspressed() <= (input_mousedelay->value() / 1000.0f))) { // hovering target selected targets::select_target(targets::hover()); - } - - + } + + // the release event must still be processed as usual char c = 0; c = key->bind(Key::None).c_str()[0]; @@ -585,7 +592,7 @@ void key_released(Key *key) void axis_event(int axis, int value) { // value is in range -32768 to 32767 - switch(axis) { + switch (axis) { case 0: // direction if (value >= 0) { local_direction = (float) value / 32767.0f; @@ -702,7 +709,7 @@ void frame() video::resize(event.resize.w, event.resize.h); break; - case SDL_MOUSEMOTION: + case SDL_MOUSEMOTION: mouse_x = event.motion.x; mouse_y = event.motion.y; mouse_moved = true; @@ -750,8 +757,8 @@ void frame() core::application()->shutdown(); return; break; - } - + } + if (key) { if (pressed) { key_pressed(key); @@ -772,7 +779,7 @@ void frame() delay = input_keydelay->value(); math::clamp(delay, 50.0f, 500.0f); } - + float repeat = 35.0f; // key repeat time-out in milliseconds if (input_keyrepeat) { repeat = input_keyrepeat->value(); @@ -783,14 +790,14 @@ void frame() (*input_keydelay) = delay; if (input_keyrepeat) (*input_keyrepeat) = repeat; - + repeat /= 1000.0f; delay /= 1000.0f; - + for (Keyboard::iterator it = keyboard->begin(); it != keyboard->end(); it++) { key = (*it).second; - if (key && (key->sym() < 512) && key->pressed()) { - if ((key->pressed()+delay < core::application()->time()) && (key->lastpressed()+repeat < core::application()->time())) { + if (key && (key->sym() < 512) && key->pressed()) { + if ((key->pressed() + delay < core::application()->time()) && (key->lastpressed() + repeat < core::application()->time())) { key->key_lastpressed = core::application()->time(); key_pressed(key); } @@ -803,7 +810,7 @@ void frame() if (core::application()->connected() && core::localcontrol()) { mouse_control = ui::console()->hidden() && !ui::root()->active() && ((input_mousecontrol->value() > 0) || (mouse_control_override && (mouse_control_override_time + (input_mousedelay->value() / 1000.0f) < core::application()->time()))); - + if (mouse_control && joystick_control && ((render::Camera::mode() == render::Camera::Track) || (render::Camera::mode() == render::Camera::Cockpit))) { if (!(mouse_control_override && (mouse_control_override_time + (input_mousedelay->value() / 1000.0f) < core::application()->time()))) { mouse_control = false; @@ -817,30 +824,30 @@ void frame() // direction int l = mouse_x - (render::State::width() >> 1); - - if (abs(l) < ( deadzone_size >> 1 )) { + + if (abs(l) < (deadzone_size >> 1)) { // dead zone mouse_direction = 0; } else { l = (mouse_x - deadzone_size) - ((render::State::width() - deadzone_size) >> 1); - mouse_direction = float (-l) / (float) ((render::State::width() - deadzone_size) >> 1); + mouse_direction = float(-l) / (float)((render::State::width() - deadzone_size) >> 1); mouse_deadzone = false; } // pitch int h = mouse_y - (render::State::height() >> 1); - if (abs(h) < ( deadzone_size >> 1 )) { + if (abs(h) < (deadzone_size >> 1)) { // dead zone mouse_pitch = 0; } else { h = (mouse_y - deadzone_size) - ((render::State::height() - deadzone_size) >> 1); - mouse_pitch = float (-h) / (float) ((render::State::height() - deadzone_size) >> 1); + mouse_pitch = float(-h) / (float)((render::State::height() - deadzone_size) >> 1); mouse_deadzone = false; } if ((render::Camera::mode() == render::Camera::Track) || (render::Camera::mode() == render::Camera::Cockpit)) { - + //local_direction = mouse_direction * math::absf(mouse_direction); //local_pitch = mouse_pitch * math::absf(mouse_pitch); local_direction = mouse_direction; @@ -848,10 +855,10 @@ void frame() } else if (render::Camera::mode() == render::Camera::Free) { // squared values to smoothen camera movement - render::Camera::set_direction( -mouse_direction * math::absf(mouse_direction)); + render::Camera::set_direction(-mouse_direction * math::absf(mouse_direction)); render::Camera::set_pitch(-mouse_pitch * math::absf(mouse_pitch)); } - + } math::clamp(local_direction, -1.0f, 1.0f); @@ -866,7 +873,7 @@ void frame() core::localcontrol()->set_thrust(local_thrust); core::localcontrol()->set_direction(local_direction); - core::localcontrol()->set_pitch(local_pitch / render::State::aspect() ); + core::localcontrol()->set_pitch(local_pitch / render::State::aspect()); core::localcontrol()->set_roll(local_roll); core::localcontrol()->set_strafe(local_strafe); core::localcontrol()->set_afterburner(local_afterburner); diff --git a/src/client/joystick.cc b/src/client/joystick.cc index 486542e..c8f7f9d 100644 --- a/src/client/joystick.cc +++ b/src/client/joystick.cc @@ -24,13 +24,13 @@ void Joystick::init() int nbjoysticks = SDL_NumJoysticks(); if (nbjoysticks) { - for (int i=0; i < nbjoysticks; i++) { + for (int i = 0; i < nbjoysticks; i++) { SDL_Joystick *joystick = SDL_JoystickOpen(i); if (joystick) { - con_print << " joystick " << i+1 << ": " << - SDL_JoystickName(i) << " " << - SDL_JoystickNumAxes(joystick) << " axes " << - SDL_JoystickNumButtons(joystick) << " buttons " << std::endl; + con_print << " joystick " << i + 1 << ": " << + SDL_JoystickName(i) << " " << + SDL_JoystickNumAxes(joystick) << " axes " << + SDL_JoystickNumButtons(joystick) << " buttons " << std::endl; SDL_JoystickClose(joystick); } @@ -69,13 +69,13 @@ void Joystick::list() */ int nbjoysticks = SDL_NumJoysticks(); if (nbjoysticks) { - for (int i=0; i < nbjoysticks; i++) { + for (int i = 0; i < nbjoysticks; i++) { SDL_Joystick *joystick = SDL_JoystickOpen(i); if (joystick) { - con_print << " joystick " << i+1 << ": " << - SDL_JoystickName(i) << " " << - SDL_JoystickNumAxes(joystick) << " axes " << - SDL_JoystickNumButtons(joystick) << " buttons " << std::endl; + con_print << " joystick " << i + 1 << ": " << + SDL_JoystickName(i) << " " << + SDL_JoystickNumAxes(joystick) << " axes " << + SDL_JoystickNumButtons(joystick) << " buttons " << std::endl; SDL_JoystickClose(joystick); } @@ -89,11 +89,11 @@ void Joystick::list() (*input_joystick) = (float) current_joystick_number; if (current_joystick_number) { - current_joystick = SDL_JoystickOpen(current_joystick_number -1); + current_joystick = SDL_JoystickOpen(current_joystick_number - 1); } if (current_joystick) { - con_debug << " using joystick " << SDL_JoystickName(current_joystick_number -1) << std::endl; + con_debug << " using joystick " << SDL_JoystickName(current_joystick_number - 1) << std::endl; SDL_JoystickEventState(SDL_ENABLE); } } @@ -105,14 +105,13 @@ bool Joystick::is_enabled() void Joystick::frame() { - if (current_joystick_number != (int) input_joystick->value()) - { + if (current_joystick_number != (int) input_joystick->value()) { if (current_joystick) { SDL_JoystickEventState(SDL_IGNORE); SDL_JoystickClose(current_joystick); current_joystick = 0; } - + current_joystick_number = (int) input_joystick->value(); if ((current_joystick_number < 1) || (current_joystick_number > SDL_NumJoysticks())) { current_joystick_number = 0; @@ -120,11 +119,11 @@ void Joystick::frame() (*input_joystick) = (float) current_joystick_number; if (current_joystick_number) { - current_joystick = SDL_JoystickOpen(current_joystick_number -1); + current_joystick = SDL_JoystickOpen(current_joystick_number - 1); } if (current_joystick) { - con_debug << " using joystick " << SDL_JoystickName(current_joystick_number -1) << std::endl; + con_debug << " using joystick " << SDL_JoystickName(current_joystick_number - 1) << std::endl; SDL_JoystickEventState(SDL_ENABLE); } } diff --git a/src/client/joystick.h b/src/client/joystick.h index a21e24e..9b1925d 100644 --- a/src/client/joystick.h +++ b/src/client/joystick.h @@ -10,7 +10,7 @@ namespace client { -class Joystick +class Joystick { public: static void init(); diff --git a/src/client/key.cc b/src/client/key.cc index c2da4a7..c25fa2b 100644 --- a/src/client/key.cc +++ b/src/client/key.cc @@ -7,7 +7,8 @@ #include "auxiliary/functions.h" #include "client/key.h" -namespace client { +namespace client +{ Key::Key(const char *name, int keysym, char ascii, const char *bind) { diff --git a/src/client/key.h b/src/client/key.h index 06e0587..3bb3e2b 100644 --- a/src/client/key.h +++ b/src/client/key.h @@ -11,7 +11,8 @@ #include <string> -namespace client { +namespace client +{ /// a pressable key /** @@ -22,11 +23,11 @@ class Key { public: /// define a new key - Key(const char *name, int keysym, char ascii=0, const char *bind=0); + Key(const char *name, int keysym, char ascii = 0, const char *bind = 0); ~Key(); - + /// key modifiers - enum Modifier { None=0, Shift=KMOD_LSHIFT+KMOD_RSHIFT, Ctrl=KMOD_LCTRL + KMOD_RCTRL, Alt=KMOD_LALT+KMOD_RALT }; + enum Modifier { None = 0, Shift = KMOD_LSHIFT + KMOD_RSHIFT, Ctrl = KMOD_LCTRL + KMOD_RCTRL, Alt = KMOD_LALT + KMOD_RALT }; /// clear all binds void clear(); @@ -41,19 +42,31 @@ public: std::string const & bind(Modifier mod) const; /// first time the key was pressed since previous release - inline float pressed() const { return key_pressed; } + inline float pressed() const { + return key_pressed; + } /// last time the key was pressed (includes repeats) - inline float lastpressed() const { return key_lastpressed; } + inline float lastpressed() const { + return key_lastpressed; + } /// time the key was pressed when it is released - inline float waspressed() const { return key_waspressed; } - - inline std::string const & name() const { return key_name; } + inline float waspressed() const { + return key_waspressed; + } + + inline std::string const & name() const { + return key_name; + } - inline char ascii() const { return key_ascii; } + inline char ascii() const { + return key_ascii; + } - inline int sym() const { return key_sym; } + inline int sym() const { + return key_sym; + } float key_pressed; float key_lastpressed; diff --git a/src/client/keyboard.cc b/src/client/keyboard.cc index 23e6634..bf08db1 100644 --- a/src/client/keyboard.cc +++ b/src/client/keyboard.cc @@ -31,7 +31,7 @@ Keyboard::Keyboard() // ------------------ ACTIONS // FIXME actions should be state keys and not use key repeat - + add_action("+left", Action::None, "rotate left"); add_action("+right", Action::None, "rotate right"); add_action("+up", Action::None, "rotate up"); @@ -253,12 +253,12 @@ Keyboard::~Keyboard() { // clear key map for (iterator it = begin(); it != end(); it++) - delete (*it).second; + delete(*it).second; keys.clear(); - + // clear action list - for(std::list<Action *>::iterator ait = actions.begin(); ait != actions.end(); ait++) - delete (*ait); + for (std::list<Action *>::iterator ait = actions.begin(); ait != actions.end(); ait++) + delete(*ait); actions.clear(); } @@ -317,7 +317,7 @@ void Keyboard::load_binds() con_print << " reading keyboard binds from " << filename << std::endl; char line[MAXCMDSIZE]; - while (ifs.getline(line, MAXCMDSIZE-1)) { + while (ifs.getline(line, MAXCMDSIZE - 1)) { if (line[0] && line[0] != '#' && line[0] != ';') core::cmd() << line << '\n'; } @@ -383,7 +383,7 @@ void Keyboard::bind(std::string const &name, const std::string str) { Key::Modifier modifier = Key::None; std::string keyname(name); - + if ((keyname.size() > 6) && (keyname.substr(0, 6).compare("shift+") == 0)) { keyname.erase(0, 6); modifier = Key::Shift; @@ -393,7 +393,7 @@ void Keyboard::bind(std::string const &name, const std::string str) } else if ((keyname.size() > 4) && (keyname.substr(0, 4).compare("alt+") == 0)) { keyname.erase(0, 4); modifier = Key::Alt; - + } else if ((keyname.size() > 6) && (keyname.substr(keyname.size() - 6, 6).compare("+shift") == 0)) { keyname.erase(keyname.size() - 6, 6); modifier = Key::Shift; @@ -401,10 +401,10 @@ void Keyboard::bind(std::string const &name, const std::string str) keyname.erase(keyname.size() - 5, 5); modifier = Key::Ctrl; } else if ((keyname.size() > 4) && (keyname.substr(keyname.size() - 4, 4).compare("+alt") == 0)) { - keyname.erase(0, keyname.size() -46); + keyname.erase(0, keyname.size() - 46); modifier = Key::Alt; } - + Key *key = find(keyname); if (key) { if (str.size()) @@ -425,10 +425,10 @@ void Keyboard::bind(std::string const &name, const std::string str) } void Keyboard::unbind(std::string const &name) -{ +{ Key::Modifier modifier = Key::None; std::string keyname(name); - + if ((keyname.size() > 6) && (keyname.substr(0, 6).compare("shift+") == 0)) { keyname.erase(0, 6); modifier = Key::Shift; @@ -438,7 +438,7 @@ void Keyboard::unbind(std::string const &name) } else if ((keyname.size() > 4) && (keyname.substr(0, 4).compare("alt+") == 0)) { keyname.erase(0, 4); modifier = Key::Alt; - + } else if ((keyname.size() > 6) && (keyname.substr(keyname.size() - 6, 6).compare("+shift") == 0)) { keyname.erase(keyname.size() - 6, 6); modifier = Key::Shift; @@ -446,7 +446,7 @@ void Keyboard::unbind(std::string const &name) keyname.erase(keyname.size() - 5, 5); modifier = Key::Ctrl; } else if ((keyname.size() > 4) && (keyname.substr(keyname.size() - 4, 4).compare("+alt") == 0)) { - keyname.erase(0, keyname.size() -46); + keyname.erase(0, keyname.size() - 46); modifier = Key::Alt; } @@ -498,7 +498,7 @@ void Keyboard::list_keys() void Keyboard::list_binds() { - size_t n =0; + size_t n = 0; for (iterator it = begin(); it != end(); it++) { if ((*it).second->bind(Key::None).size()) { con_print << " " << aux::pad_right((*it).second->name(), 6) << " " << (*it).second->bind(Key::None) << std::endl; @@ -719,7 +719,7 @@ void setkeyboardmode(bool input) SDL_EnableKeyRepeat(250, SDL_DEFAULT_REPEAT_INTERVAL); else SDL_EnableKeyRepeat(10, SDL_DEFAULT_REPEAT_INTERVAL); - + } */ } // namespace client diff --git a/src/client/keyboard.h b/src/client/keyboard.h index f63bce1..f533838 100644 --- a/src/client/keyboard.h +++ b/src/client/keyboard.h @@ -16,7 +16,8 @@ #include "client/action.h" #include "client/key.h" -namespace client { +namespace client +{ class Keyboard { @@ -65,15 +66,19 @@ public: typedef std::map<unsigned int, Key *>::iterator iterator; - inline iterator begin() { return keys.begin(); } - - inline iterator end() { return keys.end(); } + inline iterator begin() { + return keys.begin(); + } + + inline iterator end() { + return keys.end(); + } /// convert SDL_keysym to a keystroke static unsigned int translate_keysym(int keysym, int modifier); private: - Key *add_key(const char *name, const unsigned int keysym, const char ascii=0, const char *bind=0); + Key *add_key(const char *name, const unsigned int keysym, const char ascii = 0, const char *bind = 0); Action *add_action(const char *name, Action::Identifier action, const char *info = 0); diff --git a/src/client/map.cc b/src/client/map.cc index aca5e97..7a6fedc 100644 --- a/src/client/map.cc +++ b/src/client/map.cc @@ -1,8 +1,8 @@ /* client/map.cc - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #include "audio/audio.h" @@ -16,7 +16,8 @@ #include "render/textures.h" #include "render/text.h" -namespace client { +namespace client +{ Map::Map(ui::Widget *parent) : ui::Window(parent) { @@ -72,7 +73,7 @@ void Map::draw() const float margin = font()->width() * 2.0f; const float s = ui::UI::elementsize.width() * 2.0f; const float blue = 0.8f; - const float gridsize=16; + const float gridsize = 16; core::Entity *entity; const core::Entity *current_target = map_target; @@ -87,10 +88,10 @@ void Map::draw() v[1] += (height() - s - 2.0f * margin) * 0.5f; map_hover = 0; - gl::color(0,0,blue); + gl::color(0, 0, blue); gl::begin(gl::Lines); - for (int i=0; i <= gridsize; i++) { + for (int i = 0; i <= gridsize; i++) { gl::vertex(v.x(), v.y() + s / gridsize * i); gl::vertex(v.x() + s, v.y() + s / gridsize * i); @@ -102,7 +103,7 @@ void Map::draw() const size_t texture_entity = render::Textures::load("bitmaps/icons/entity_default"); const size_t texture_globe = render::Textures::load("bitmaps/icons/entity_globe"); const size_t texture_bright = render::Textures::load("bitmaps/icons/entity_bright"); - + size_t texture_current = render::Textures::bind(texture_entity); v[0] += s * 0.5f; @@ -140,7 +141,7 @@ void Map::draw() if (core::application()->time() - floorf(core::application()->time()) < 0.5f) { draw_icon = false; } - } + } } if (draw_icon) { @@ -165,7 +166,7 @@ void Map::draw() gl::begin(gl::Quads); } } - + if (entity == core::localplayer()->mission_target()) { color.assign(palette()->mission()); } else { @@ -176,55 +177,55 @@ void Map::draw() gl::color(color); glTexCoord2f(0.0f, 0.0f); gl::vertex(l.x() - r, l.y() - r); - + glTexCoord2f(1.0f, 0.0f); gl::vertex(l.x() + r, l.y() - r); - + glTexCoord2f(1.0f, 1.0f); gl::vertex(l.x() + r, l.y() + r); - + glTexCoord2f(0.0f, 1.0f); gl::vertex(l.x() - r, l.y() + r); } - - } + + } // draw localcontrol icon entity = core::localcontrol(); //if (core::localcontrol()->state() != core::Entity::Docked) { - l.assign(v); - l[0] -= s / scale * entity->location().y(); - l[1] -= s / scale * entity->location().x(); - if (core::application()->time() - floorf(core::application()->time()) < 0.5f) { - if (texture_current != texture_entity) { - gl::end(); - texture_current = render::Textures::bind(texture_entity); - gl::begin(gl::Quads); - } - - math::Color color(entity->color()); - color.a = 1.0f; - gl::color(color); - glTexCoord2f(0.0f, 0.0f); - gl::vertex(l.x() - r, l.y() - r); - - glTexCoord2f(1.0f, 0.0f); - gl::vertex(l.x() + r, l.y() - r); - - glTexCoord2f(1.0f, 1.0f); - gl::vertex(l.x() + r, l.y() + r); - - glTexCoord2f(0.0f, 1.0f); - gl::vertex(l.x() - r, l.y() + r); + l.assign(v); + l[0] -= s / scale * entity->location().y(); + l[1] -= s / scale * entity->location().x(); + if (core::application()->time() - floorf(core::application()->time()) < 0.5f) { + if (texture_current != texture_entity) { + gl::end(); + texture_current = render::Textures::bind(texture_entity); + gl::begin(gl::Quads); } + + math::Color color(entity->color()); + color.a = 1.0f; + gl::color(color); + glTexCoord2f(0.0f, 0.0f); + gl::vertex(l.x() - r, l.y() - r); + + glTexCoord2f(1.0f, 0.0f); + gl::vertex(l.x() + r, l.y() - r); + + glTexCoord2f(1.0f, 1.0f); + gl::vertex(l.x() + r, l.y() + r); + + glTexCoord2f(0.0f, 1.0f); + gl::vertex(l.x() - r, l.y() + r); + } //} gl::end(); gl::disable(GL_TEXTURE_2D); if (map_target) { - map_targetlabel->set_size(width() - s - margin * 3.0f, map_targetlabel->font()->height() * 2.0f ); + map_targetlabel->set_size(width() - s - margin * 3.0f, map_targetlabel->font()->height() * 2.0f); map_targetlabel->set_location(s + margin * 2.0f, 4); map_targetlabel->set_text(map_target->name()); map_targetlabel->show(); @@ -234,7 +235,7 @@ void Map::draw() } bool Map::on_keypress(const int key, const unsigned int modifier) -{ +{ if (key == 512 + SDL_BUTTON_LEFT) { if (hover()) { core::Entity *target = core::localplayer()->zone()->find_entity(hover()); diff --git a/src/client/map.h b/src/client/map.h index a3d8709..1fc1547 100644 --- a/src/client/map.h +++ b/src/client/map.h @@ -1,7 +1,7 @@ /* client/map.h - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_CLIENT_MAP_H__ @@ -11,7 +11,8 @@ #include "ui/label.h" #include "core/entity.h" -namespace client { +namespace client +{ class Map : public ui::Window { @@ -19,7 +20,9 @@ public: Map(ui::Widget *parent = 0); virtual ~Map(); - inline unsigned int hover() const { return map_hover; } + inline unsigned int hover() const { + return map_hover; + } /// toggle the map window void toggle(); diff --git a/src/client/notifications.cc b/src/client/notifications.cc index 062aacb..90c5e3e 100644 --- a/src/client/notifications.cc +++ b/src/client/notifications.cc @@ -1,7 +1,7 @@ /* client/notifications.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 + 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 "client/notifications.h" @@ -48,7 +48,7 @@ void Notifications::event_text(const std::string & text) void Notifications::draw() { Timestamps::iterator t = notify_timestamp.begin(); - while ( (t != notify_timestamp.end()) && ( core::application()->timestamp() > (*t) + NOTIFY_TIMEOUT )) { + while ((t != notify_timestamp.end()) && (core::application()->timestamp() > (*t) + NOTIFY_TIMEOUT)) { notify_log.pop_front(); notify_timestamp.pop_front(); @@ -58,11 +58,11 @@ void Notifications::draw() const float margin = ui::UI::elementmargin; math::Vector2f s(size()); - s[0] -= margin*2; - s[1] -= margin*2; + s[0] -= margin * 2; + s[1] -= margin * 2; notify_scrollpane->set_location(margin, margin); - notify_scrollpane->set_size(s.x(), s.y() ); + notify_scrollpane->set_size(s.x(), s.y()); } diff --git a/src/client/notifications.h b/src/client/notifications.h index db3dd3e..3d596bd 100644 --- a/src/client/notifications.h +++ b/src/client/notifications.h @@ -1,7 +1,7 @@ /* client/notifications.h - This file is part of the Osirion project and is distributed under - the terms and conditions of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_CLIENT_NOTIFICATIONS_H__ @@ -27,7 +27,7 @@ public: protected: /// draw notifications void draw(); - + private: typedef std::deque<unsigned long> Timestamps; diff --git a/src/client/playerview.cc b/src/client/playerview.cc index 889e4d4..7ec8031 100644 --- a/src/client/playerview.cc +++ b/src/client/playerview.cc @@ -1,7 +1,7 @@ /* client/playerview.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 + 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 <string> @@ -11,7 +11,8 @@ #include "client/playerview.h" #include "ui/ui.h" -namespace client { +namespace client +{ PlayerView::PlayerView(ui::Widget *parent) : ui::Widget(parent) { @@ -60,9 +61,9 @@ void PlayerView::event_text(const std::string & text) void PlayerView::toggle_map() { - + if (!map()->visible()) { - if(chat()->visible() && !chat()->small_view()) + if (chat()->visible() && !chat()->small_view()) chat()->hide(); if (view_entitymenu->visible()) @@ -80,9 +81,9 @@ void PlayerView::toggle_map() void PlayerView::toggle_chat() { if (!chat()->visible()) { - if(map()->visible()) + if (map()->visible()) map()->hide(); - + if (view_entitymenu->visible()) view_entitymenu->hide(); } @@ -132,7 +133,7 @@ void PlayerView::show_menu(const std::string & args) } else if (label.compare("hide") == 0) { view_buymenu->hide(); view_entitymenu->hide(); - + } else { view_entitymenu->generate(core::localplayer()->view(), label.c_str()); view_entitymenu->show(); @@ -154,7 +155,7 @@ void PlayerView::resize() view_buymenu->event_resize(); // set hud geometry - view_hud->set_geometry(0,0, width(), height()); + view_hud->set_geometry(0, 0, width(), height()); view_hud->event_resize(); // reposition map @@ -167,7 +168,7 @@ void PlayerView::resize() // reposition labels //label_viewname->set_size(ui::UI::elementsize.width() * 1.5f, ui::UI::elementsize.height()); //label_viewname->set_location(smallmargin, smallmargin * 0.5f); - + label_viewname->set_size(ui::UI::elementsize.width() * 1.5f, ui::UI::elementsize.height()); label_viewname->set_location(width() - label_viewname->width() - smallmargin, height() - label_viewname->height() - smallmargin * 0.5f); } @@ -185,10 +186,10 @@ void PlayerView::draw() if (core::localplayer()->view()->menus().size()) { // entity with menus - + if (map()->visible()) { label_viewname->set_text(core::localplayer()->zone()->name()); - } else { + } else { label_viewname->set_text(core::localplayer()->view()->name()); } @@ -200,9 +201,9 @@ void PlayerView::draw() map()->hide(); chat()->hide(); audio::play("ui/menu"); - - } else if (!view_entitymenu->visible() && !view_buymenu->visible() && - !map()->visible() && (!chat()->visible() || chat()->small_view()) ) { + + } else if (!view_entitymenu->visible() && !view_buymenu->visible() && + !map()->visible() && (!chat()->visible() || chat()->small_view())) { // show the menu if there's no other window open view_entitymenu->show(); @@ -226,7 +227,7 @@ void PlayerView::draw() } if (view_entitymenu->generated_entity()) { - view_entitymenu->generate(0,0); + view_entitymenu->generate(0, 0); } if (view_buymenu->visible()) { @@ -247,7 +248,7 @@ void PlayerView::draw() view_hud->show(); } - // reposition chat widget + // reposition chat widget if (view_chat->small_view()) { view_chat->set_size(width() - smallmargin * 2, font()->height() * 2); view_chat->set_location(smallmargin, height() - smallmargin *2 - view_chat->height()); diff --git a/src/client/playerview.h b/src/client/playerview.h index d72b78b..300e9e5 100644 --- a/src/client/playerview.h +++ b/src/client/playerview.h @@ -1,7 +1,7 @@ /* client/playerview.h - This file is part of the Osirion project and is distributed under - the terms and conditions of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_CLIENT_PLAYERVIEW_H__ @@ -17,7 +17,8 @@ #include "ui/widget.h" #include "ui/label.h" -namespace client { +namespace client +{ /// the player's view when joined class PlayerView : public ui::Widget @@ -42,11 +43,21 @@ public: /// show entity menus void show_menu(const std::string & label); - inline HUD *hud() { return view_hud; } - inline Map *map() { return view_map; } - inline Chat *chat() { return view_chat; } - inline Notifications *notify() { return view_notify; } - inline EntityMenu *menu() { return view_entitymenu; } + inline HUD *hud() { + return view_hud; + } + inline Map *map() { + return view_map; + } + inline Chat *chat() { + return view_chat; + } + inline Notifications *notify() { + return view_notify; + } + inline EntityMenu *menu() { + return view_entitymenu; + } protected: virtual void draw(); diff --git a/src/client/soundext.cc b/src/client/soundext.cc index 40b9417..1ea0c94 100644 --- a/src/client/soundext.cc +++ b/src/client/soundext.cc @@ -35,18 +35,17 @@ SoundExt::SoundExt(core::Entity *entity) : core::Extension(core::Extension::Soun state_engineeventsource = 0; // load engine sound - if (entity->type() == core::Entity::Controlable) - { + if (entity->type() == core::Entity::Controlable) { core::EntityControlable *entityco = static_cast<core::EntityControlable *>(entity); unsigned int enginesoundset = 0; unsigned int impulsesoundset = 0; - + if (entityco->model()) { enginesoundset = entityco->model()->enginesound(); impulsesoundset = entityco->model()->impulsesound(); } - - + + std::stringstream soundname; soundname << "engines/loop" << std::setfill('0') << std::setw(2) << enginesoundset; state_thusterloopbuffer = audio::Buffers::load(soundname.str()); @@ -91,60 +90,59 @@ void SoundExt::clear() void SoundExt::frame(float elapsed) { - if (entity()->type() == core::Entity::Controlable) - { + if (entity()->type() == core::Entity::Controlable) { core::EntityControlable *entity = static_cast<core::EntityControlable *>(this->entity()); - + float speed = entity->speed(); float pitch = 1.0f; float gain = 0.0; - float r = ( entity->model() ? entity->model()->maxbbox().x() : entity->radius()); + float r = (entity->model() ? entity->model()->maxbbox().x() : entity->radius()); if (entity->state() == core::Entity::Impulse) { pitch = 1.0f; gain = 1.0f; - } else if (entity->thrust() > 0 ) { + } else if (entity->thrust() > 0) { pitch = 0.2f + entity->thrust() * 0.8f; gain = 0.8f; - } - - if (entity->state() == core::Entity::ImpulseInitiate ) { - + } + + if (entity->state() == core::Entity::ImpulseInitiate) { + if (state_engineeventbuffer != state_impulsestartbuffer) { audio::update_source(state_engineeventsource, - entity->location() - entity->axis().forward() * r , - entity->axis().forward() * speed); - + entity->location() - entity->axis().forward() * r , + entity->axis().forward() * speed); + state_engineeventbuffer = audio::play(state_engineeventsource, state_impulsestartbuffer); } } else if (entity->state() == core::Entity::Impulse) { - + state_engineeventbuffer = state_impulseloopbuffer; - + if (state_engineloopbuffer != state_impulseloopbuffer) { state_engineloopbuffer = audio::loop(state_engineloopsource, state_impulseloopbuffer, pitch, 0); } pitch = 1.0f; } else { - - if (state_engineeventbuffer == state_impulseloopbuffer) { + + if (state_engineeventbuffer == state_impulseloopbuffer) { audio::update_source(state_engineeventsource, - entity->location() - entity->axis().forward() * r , - entity->axis().forward() * speed); + entity->location() - entity->axis().forward() * r , + entity->axis().forward() * speed); state_engineeventbuffer = audio::play(state_engineeventsource, state_impulsestopbuffer); } state_engineeventbuffer = 0; - + if (state_engineloopbuffer != state_thusterloopbuffer) { state_engineloopbuffer = audio::loop(state_engineloopsource, state_thusterloopbuffer, pitch, 0); } } - + audio::update_source(state_engineloopsource, - entity->location() - entity->axis().forward() * r , entity->axis().forward() * speed, pitch, gain); - + entity->location() - entity->axis().forward() * r , entity->axis().forward() * speed, pitch, gain); + audio::update_source(state_engineeventsource, - entity->location() - entity->axis().forward() * r , entity->axis().forward() * speed); + entity->location() - entity->axis().forward() * r , entity->axis().forward() * speed); } } diff --git a/src/client/soundext.h b/src/client/soundext.h index d2028dd..a99cee0 100644 --- a/src/client/soundext.h +++ b/src/client/soundext.h @@ -13,7 +13,8 @@ namespace client { /// the sound extension of an entity -class SoundExt :public core::Extension { +class SoundExt : public core::Extension +{ public: SoundExt(core::Entity *Entity); ~SoundExt(); @@ -43,7 +44,7 @@ private: }; } - //namespace client - // +//namespace client +// #endif // __INCLUDED_CLIENT_CLIENTEXT_H__ diff --git a/src/client/targeticonbutton.cc b/src/client/targeticonbutton.cc index cd3716f..8bd3b1a 100644 --- a/src/client/targeticonbutton.cc +++ b/src/client/targeticonbutton.cc @@ -9,7 +9,8 @@ #include "client/targets.h" #include "core/commandbuffer.h" -namespace client { +namespace client +{ TargetIconButton::TargetIconButton(Widget *parent, const char *icon, const char *command, unsigned int flags) : IconButton(parent, icon, command) { @@ -18,7 +19,7 @@ TargetIconButton::TargetIconButton(Widget *parent, const char *icon, const char } bool TargetIconButton::on_keypress(const int key, const unsigned int modifier) -{ +{ if (key == 512 + SDL_BUTTON_LEFT) { if (enabled() && command().size() && targets::current()) { core::cmd() << "@" << command() << " " << targets::current_id() << std::endl; diff --git a/src/client/targeticonbutton.h b/src/client/targeticonbutton.h index a08c5c9..9907f95 100644 --- a/src/client/targeticonbutton.h +++ b/src/client/targeticonbutton.h @@ -9,9 +9,11 @@ #include "ui/iconbutton.h" -namespace client { +namespace client +{ -class TargetIconButton : public ui::IconButton { +class TargetIconButton : public ui::IconButton +{ public: /// special icon button that sends target '@' commands. diff --git a/src/client/targets.cc b/src/client/targets.cc index e478d84..cd3db41 100644 --- a/src/client/targets.cc +++ b/src/client/targets.cc @@ -1,7 +1,7 @@ /* client/targets.cc - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #include <iostream> @@ -28,9 +28,11 @@ #include "render/camera.h" #include "render/state.h" -namespace client { +namespace client +{ -namespace targets { +namespace targets +{ const float TARGETBOXRADIUS = 0.025f; unsigned int current_target_id = 0; @@ -157,7 +159,7 @@ void func_target_next(std::string const &args) } else { current_target = 0; current_target_id = 0; - + } } @@ -222,22 +224,22 @@ void func_target_center(std::string const &args) { if (!core::localcontrol()) return; - + // this is essentialy the hover algorithm with the cursor in the center core::Entity *new_target = 0; math::Vector3f center = render::Camera::eye() + render::Camera::axis().forward() * (render::FRUSTUMFRONT + 0.001); float smallest_d = -1; - for (core::Zone::Content::iterator it=core::localcontrol()->zone()->content().begin(); it != core::localcontrol()->zone()->content().end(); it++) { + for (core::Zone::Content::iterator it = core::localcontrol()->zone()->content().begin(); it != core::localcontrol()->zone()->content().end(); it++) { core::Entity *entity = (*it); math::Vector3f v(entity->location() - render::Camera::eye()); v.normalize(); - if (is_valid_hud_target(entity) && math::dotproduct(render::Camera::axis().forward(), v) > 0.85 ) { + if (is_valid_hud_target(entity) && math::dotproduct(render::Camera::axis().forward(), v) > 0.85) { // calculate the distance from entity location to the line [eye - cursor] - float d = math::Vector3f::length(math::crossproduct( (center - render::Camera::eye()) , (render::Camera::eye() - entity->location()))) / math::Vector3f::length(center - render::Camera::eye()); + float d = math::Vector3f::length(math::crossproduct((center - render::Camera::eye()) , (render::Camera::eye() - entity->location()))) / math::Vector3f::length(center - render::Camera::eye()); // the entity closer to the center beam if (smallest_d < 0 || d < smallest_d) { @@ -256,7 +258,7 @@ void reset() current_target = 0; current_target_id = 0; current_hover = 0; - + } void init() @@ -296,7 +298,7 @@ void render_listener_sound() if (!(snd_engines && snd_engines->value())) return; - math::Vector3f velocity(0, 0 ,0); + math::Vector3f velocity(0, 0 , 0); if (core::localcontrol()) { velocity.assign(core::localcontrol()->axis().forward() * core::localcontrol()->speed()); } @@ -308,13 +310,13 @@ void render_entity_sound(core::Entity *entity) { if (!(snd_engines && snd_engines->value())) { if (ext_sound(entity)) - delete ext_sound(entity); + delete ext_sound(entity); return; } if (!ext_render(entity) || (ext_render(entity) && !ext_render(entity)->visible())) { if (ext_sound(entity)) - delete ext_sound(entity); + delete ext_sound(entity); return; } else { if (!ext_sound(entity)) { @@ -354,18 +356,18 @@ void frame() x = 0; y = 0; } else { - x = (float)(input::mouse_position_x() - render::State::width() /2) / (float)render::State::width(); - y = (float)(input::mouse_position_y() - render::State::height() /2) / (float)render::State::height() / render::State::aspect(); + x = (float)(input::mouse_position_x() - render::State::width() / 2) / (float)render::State::width(); + y = (float)(input::mouse_position_y() - render::State::height() / 2) / (float)render::State::height() / render::State::aspect(); } Vector3f cursor = render::Camera::eye() + render::Camera::axis().forward() * (render::FRUSTUMFRONT + 0.001); cursor -= render::Camera::axis().left() * x; cursor -= render::Camera::axis().up() * y; - math::Vector3f center = render::Camera::eye() + (render::Camera::axis().forward() * (render::FRUSTUMFRONT +0.001f)); - for (core::Zone::Content::iterator it=zone->content().begin(); it != zone->content().end(); it++) { + math::Vector3f center = render::Camera::eye() + (render::Camera::axis().forward() * (render::FRUSTUMFRONT + 0.001f)); + for (core::Zone::Content::iterator it = zone->content().begin(); it != zone->content().end(); it++) { core::Entity *entity = (*it); - + // render entity sound if (entity->type() == core::Entity::Controlable) { render_entity_sound(entity); @@ -377,24 +379,24 @@ void frame() if (entity->id() == current_target_id) { current_target = entity; } - + // check if the mouse is hovering the entity Vector3f v(entity->location() - render::Camera::eye()); v.normalize(); - if (math::dotproduct(render::Camera::axis().forward(), v) > 0.75 ) { + if (math::dotproduct(render::Camera::axis().forward(), v) > 0.75) { // calculate the distance from entity location to the line [eye - cursor] - float d = math::Vector3f::length(math::crossproduct( (cursor - render::Camera::eye()) , (render::Camera::eye() - entity->location()))) / math::Vector3f::length(cursor - render::Camera::eye()); - + float d = math::Vector3f::length(math::crossproduct((cursor - render::Camera::eye()) , (render::Camera::eye() - entity->location()))) / math::Vector3f::length(cursor - render::Camera::eye()); + float r = entity->radius() * 0.5f; if (ext_render(entity)->distance() > 512.0f) - math::clamp(r, 8.0f,r); + math::clamp(r, 8.0f, r); else if (ext_render(entity)->distance() > 256.0f) - math::clamp(r, 4.0f,r); + math::clamp(r, 4.0f, r); else if (ext_render(entity)->distance() > 128.0f) - math::clamp(r, 2.0f,r); + math::clamp(r, 2.0f, r); // if the cursor-beam hits the entity sphere if (d < r) { @@ -406,7 +408,7 @@ void frame() } } - + } } @@ -415,7 +417,7 @@ void frame() } else { current_target_id = current_target->id(); - + } } diff --git a/src/client/targets.h b/src/client/targets.h index d421300..9bfa87d 100644 --- a/src/client/targets.h +++ b/src/client/targets.h @@ -1,7 +1,7 @@ /* client/targets.h - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_CLIENT_TARGETS_H__ @@ -12,9 +12,11 @@ #include "render/gl.h" #include "render/text.h" -namespace client { +namespace client +{ -namespace targets { +namespace targets +{ void init(); diff --git a/src/client/trademenu.cc b/src/client/trademenu.cc index 9db1299..dcab2f1 100644 --- a/src/client/trademenu.cc +++ b/src/client/trademenu.cc @@ -16,7 +16,7 @@ TradeMenu::TradeMenu(ui::Widget *parent, const char * label) : ui::Window(parent { set_border(false); set_background(false); - if (label) + if (label) set_label(label); else set_label("trademenu"); diff --git a/src/client/trademenu.h b/src/client/trademenu.h index feb91f4..baf3544 100644 --- a/src/client/trademenu.h +++ b/src/client/trademenu.h @@ -1,7 +1,7 @@ /* client/trademenu.h - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_CLIENT_TRADEMENU_H__ diff --git a/src/client/video.cc b/src/client/video.cc index 4ad1c97..9e9d553 100644 --- a/src/client/video.cc +++ b/src/client/video.cc @@ -1,7 +1,7 @@ /* client/video.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 + 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 "client/video.h" @@ -21,7 +21,8 @@ using namespace render; -namespace client { +namespace client +{ /* -- engine variables --------------------------------------------- */ @@ -34,7 +35,8 @@ core::Cvar *draw_stats = 0; core::Cvar *draw_devinfo = 0; core::Cvar *draw_keypress = 0; -namespace video { +namespace video +{ float fullscreen = 0; @@ -53,7 +55,7 @@ const int height_default = 768; std::string loader_message; bool is_loading = false; -bool init() +bool init() { con_print << "^BInitializing video..." << std::endl; @@ -79,7 +81,7 @@ bool init() draw_ui = core::Cvar::get("draw_ui", "1", core::Cvar::Archive); draw_ui->set_info("[bool] draw the user interface"); - if( SDL_InitSubSystem(SDL_INIT_VIDEO) < 0 ) { + if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0) { con_error << "SDL_InitSubSystem() failed: " << SDL_GetError() << std::endl; return false; } @@ -97,12 +99,12 @@ bool init() if (image) { Uint32 colorkey = SDL_MapRGB(image->format, 255, 0, 255); SDL_SetColorKey(image, SDL_SRCCOLORKEY, colorkey); - SDL_WM_SetIcon(image,NULL); + SDL_WM_SetIcon(image, NULL); } } const SDL_VideoInfo* sdl_videoinfo = SDL_GetVideoInfo(); - if( !sdl_videoinfo) { + if (!sdl_videoinfo) { con_error << "SDL_GetVideoInfo() failed: " << SDL_GetError() << std::endl; return false; } @@ -115,25 +117,25 @@ bool init() bpp = sdl_videoinfo->vfmt->BitsPerPixel; if (bpp == 32) { - SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 8); - SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 8); - SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 8); - SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); } else if (bpp == 24) { - SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 6); - SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 6); - SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 6); - SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 6); + SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 6); + SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 6); + SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 6); + SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 6); } else if (bpp == 16) { - SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 4); - SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 4); - SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 4); - SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 4); + SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 4); + SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 4); + SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 4); + SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 4); } else { con_warn << "Display depth " << bpp << " is not supported!" << std::endl; } - SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1); + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); fullscreen = r_fullscreen->value(); if (r_fullscreen->value()) { @@ -145,12 +147,12 @@ bool init() #endif } - if(!SDL_SetVideoMode(width, height, bpp, flags )) { + if (!SDL_SetVideoMode(width, height, bpp, flags)) { con_warn << "Failed to set video mode " << width << "x" << height << "x" << bpp << "bpp" << std::endl; if (width_prev && height_prev) { width = width_prev; height = height_prev; - if(!SDL_SetVideoMode(width, height, bpp, flags )) { + if (!SDL_SetVideoMode(width, height, bpp, flags)) { con_error << "Failed to restore video mode " << width << "x" << height << "x" << bpp << "bpp" << std::endl; return false; } @@ -163,11 +165,11 @@ bool init() int red, green, blue, alpha, depth; - SDL_GL_GetAttribute( SDL_GL_RED_SIZE, &red); - SDL_GL_GetAttribute( SDL_GL_GREEN_SIZE, &green); - SDL_GL_GetAttribute( SDL_GL_RED_SIZE, &blue); - SDL_GL_GetAttribute( SDL_GL_ALPHA_SIZE, &alpha); - SDL_GL_GetAttribute( SDL_GL_DEPTH_SIZE, &depth); + SDL_GL_GetAttribute(SDL_GL_RED_SIZE, &red); + SDL_GL_GetAttribute(SDL_GL_GREEN_SIZE, &green); + SDL_GL_GetAttribute(SDL_GL_RED_SIZE, &blue); + SDL_GL_GetAttribute(SDL_GL_ALPHA_SIZE, &alpha); + SDL_GL_GetAttribute(SDL_GL_DEPTH_SIZE, &depth); con_debug << " visual r: " << red << " g: " << green << " blue: " << blue << " alpha: " << alpha << " depth: " << depth << std::endl; @@ -198,7 +200,7 @@ bool init() // apply render options ui::root()->apply_render_options(); - + // initialize target drawer targets::init(); @@ -222,8 +224,8 @@ void resize(int w, int h) if (w < 320) w = 320; if (h < 200) h = 200; - - if (SDL_SetVideoMode(w, h, bpp, flags )) { + + if (SDL_SetVideoMode(w, h, bpp, flags)) { render::resize(w, h); ui::root()->set_size(w, h); ui::root()->event_resize(); @@ -247,7 +249,7 @@ void set_cursor() if (ui::console()->visible()) { ui::root()->set_pointer(); - } else if(core::localplayer()->view() || ui::root()->active()) { + } else if (core::localplayer()->view() || ui::root()->active()) { ui::root()->set_pointer("pointer"); @@ -268,7 +270,7 @@ void set_cursor() ui::root()->set_pointer("target", ui::Palette::Active, true); if (input::joystick_lastmoved_time() > input::mouse_lastmoved_time()) { - ui::root()->input_mouse(render::State::width()/2, render::State::height() /2); + ui::root()->input_mouse(render::State::width() / 2, render::State::height() / 2); } } else if (input::mouse_control) { @@ -276,11 +278,11 @@ void set_cursor() ui::root()->set_pointer("control", ui::Palette::Pointer); if (input::mouse_deadzone) { - ui::root()->input_mouse(render::State::width()/2, render::State::height() /2); + ui::root()->input_mouse(render::State::width() / 2, render::State::height() / 2); } - } else if ((input::joystick_lastmoved_time() > input::mouse_lastmoved_time()) && - (render::Camera::mode() == render::Camera::Cockpit || render::Camera::mode() == render::Camera::Track)) { + } else if ((input::joystick_lastmoved_time() > input::mouse_lastmoved_time()) && + (render::Camera::mode() == render::Camera::Cockpit || render::Camera::mode() == render::Camera::Track)) { ui::root()->set_pointer(); @@ -293,7 +295,7 @@ void set_cursor() void set_loader_message(const std::string message) { loader_message.assign(message); - + if (is_loading) frame_loader(); } @@ -304,7 +306,7 @@ void set_loader_message(const char *message) loader_message.assign(message); else loader_message.clear(); - + if (is_loading) frame_loader(); } @@ -312,7 +314,7 @@ void set_loader_message(const char *message) void draw_loader() { render::Camera::ortho(); - + gl::enable(GL_BLEND); gl::color(1.0f, 1.0f, 1.0f, 1.0f); @@ -322,7 +324,7 @@ void draw_loader() if (loader_message.size()) { using render::Text; - gl::enable(GL_TEXTURE_2D); + gl::enable(GL_TEXTURE_2D); Text::setfont("gui", 12, 18); Text::setcolor('N'); //set normal color Text::draw(Text::fontwidth(), Text::fontheight(), loader_message); @@ -330,7 +332,7 @@ void draw_loader() } gl::disable(GL_BLEND); - + is_loading = true; } @@ -338,9 +340,9 @@ void frame_loader() { // Clear the color and depth buffers. gl::clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - + draw_loader(); - + SDL_GL_SwapBuffers(); } @@ -351,15 +353,15 @@ void frame(float elapsed) restart(); using namespace render; - + is_loading = false; - + // Clear the color and depth buffers. gl::clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); render::Stats::clear(); if (core::application()->connected()) { - + if (core::game()->time() && core::localplayer()->zone()) { render::Camera::frame(elapsed); render::Camera::frustum(); @@ -372,12 +374,12 @@ void frame(float elapsed) render::Camera::ortho(); client()->worldview()->show(); - + } else { draw_loader(); client()->worldview()->hide(); } - + } else { client()->worldview()->hide(); render::Camera::ortho(); @@ -398,17 +400,17 @@ void frame(float elapsed) ui::console()->event_draw(); } - + gl::disable(GL_TEXTURE_2D); gl::disable(GL_BLEND); - + SDL_GL_SwapBuffers(); } void shutdown() { con_print << "^BShutting down video..." << std::endl; - + targets::shutdown(); render::shutdown(); diff --git a/src/client/video.h b/src/client/video.h index 978a876..93c3ce0 100644 --- a/src/client/video.h +++ b/src/client/video.h @@ -1,7 +1,7 @@ /* client/video.h - This file is part of the Osirion project and is distributed under - the terms and conditions of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_CLIENT_VIDEO_H__ @@ -9,40 +9,41 @@ #include "core/cvar.h" -namespace client { +namespace client +{ /// the video subsystem -namespace video +namespace video { - /// initialize the video subsystem - bool init(); - - /// shutdown the video subsystem - void shutdown(); - - /// re-initialize the video subsystems - /** the restart functions performs a full shutdown - * and re-initializes the video subsystem - */ - void restart(); - - /// application window resize event in windowed mode - void resize(int w, int h); - - /// draw the next client video frame - void frame(float elapsed); - - /// draw the loader screen - void frame_loader(); - - /// update the loader screen message - void set_loader_message(const std::string message); - - /// update the loader screen message - void set_loader_message(const char *message = 0); - - /// set the window caption - void set_caption(); +/// initialize the video subsystem +bool init(); + +/// shutdown the video subsystem +void shutdown(); + +/// re-initialize the video subsystems +/** the restart functions performs a full shutdown + * and re-initializes the video subsystem + */ +void restart(); + +/// application window resize event in windowed mode +void resize(int w, int h); + +/// draw the next client video frame +void frame(float elapsed); + +/// draw the loader screen +void frame_loader(); + +/// update the loader screen message +void set_loader_message(const std::string message); + +/// update the loader screen message +void set_loader_message(const char *message = 0); + +/// set the window caption +void set_caption(); } // namespace video diff --git a/src/client/worldview.cc b/src/client/worldview.cc index 7f13f45..c4f932b 100644 --- a/src/client/worldview.cc +++ b/src/client/worldview.cc @@ -1,7 +1,7 @@ /* client/worldview.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 + 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 "core/application.h" @@ -10,7 +10,8 @@ #include "client/video.h" #include "ui/ui.h" -namespace client { +namespace client +{ WorldView::WorldView(ui::Widget *parent) : ui::Widget(parent) { @@ -55,29 +56,29 @@ void WorldView::resize() // reposition devinfo widget view_devinfo->set_size(font()->width()*32, font()->height()*5); view_devinfo->set_location(smallmargin, smallmargin); - + // reposition stats widget - view_statsinfo->set_size(font()->width()*12, font()->height()*5); + view_statsinfo->set_size(font()->width()*12, font()->height()*5); view_statsinfo->set_location(width() - view_statsinfo->width() - smallmargin, smallmargin); // reposition keypress widget - view_keyinfo->set_size(font()->width()*12, font()->height()*1); + view_keyinfo->set_size(font()->width()*12, font()->height()*1); view_keyinfo->set_location(width() - view_keyinfo->width() - smallmargin, - height() - view_keyinfo->height() - smallmargin); + height() - view_keyinfo->height() - smallmargin); // icons const float icon_margin = 4.0f; const float icon_size = 48.0f; const float icon_count = 6; - const float l = (width() -((icon_count +1) * icon_margin) - (icon_count * icon_size)) * 0.5f; - + const float l = (width() - ((icon_count + 1) * icon_margin) - (icon_count * icon_size)) * 0.5f; + view_menubutton->set_geometry(l, icon_margin, icon_size, icon_size); // spacer - view_dockbutton->set_geometry( l + 2.0f * (icon_margin + icon_size), icon_margin, icon_size, icon_size); - view_launchbutton->set_geometry( l + 2.0f * (icon_margin + icon_size), icon_margin, icon_size, icon_size); + view_dockbutton->set_geometry(l + 2.0f *(icon_margin + icon_size), icon_margin, icon_size, icon_size); + view_launchbutton->set_geometry(l + 2.0f *(icon_margin + icon_size), icon_margin, icon_size, icon_size); // spacer - view_chatbutton->set_geometry( l + 4.0f * (icon_margin + icon_size), icon_margin, icon_size, icon_size); - view_mapbutton->set_geometry( l + 5.0f * (icon_margin + icon_size), icon_margin, icon_size, icon_size); + view_chatbutton->set_geometry(l + 4.0f *(icon_margin + icon_size), icon_margin, icon_size, icon_size); + view_mapbutton->set_geometry(l + 5.0f *(icon_margin + icon_size), icon_margin, icon_size, icon_size); } void WorldView::clear() @@ -98,8 +99,8 @@ void WorldView::draw() view_devinfo->set_visible(draw_devinfo->value() ? true : false); view_statsinfo->set_visible(draw_stats->value() ? true : false); view_keyinfo->set_visible(draw_keypress->value() ? true : false); - - if (ui::root()->active() || !core::game()->interactive() || !core::localcontrol() || (core::localplayer()->view() && !core::localplayer()->view()->menus().size()) ) { + + if (ui::root()->active() || !core::game()->interactive() || !core::localcontrol() || (core::localplayer()->view() && !core::localplayer()->view()->menus().size())) { view_playerview->hide(); view_menubutton->hide(); view_dockbutton->hide(); diff --git a/src/client/worldview.h b/src/client/worldview.h index e42ac86..11473f8 100644 --- a/src/client/worldview.h +++ b/src/client/worldview.h @@ -1,7 +1,7 @@ /* client/worldview.h - This file is part of the Osirion project and is distributed under - the terms and conditions of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_CLIENT_WORLDVIEW_H__ @@ -12,7 +12,8 @@ #include "client/infowidget.h" #include "ui/iconbutton.h" -namespace client { +namespace client +{ /// the world view when connected class WorldView : public ui::Widget @@ -25,7 +26,9 @@ public: void event_text(const std::string & text); - inline PlayerView *playerview() { return view_playerview; } + inline PlayerView *playerview() { + return view_playerview; + } protected: virtual void draw(); diff --git a/src/core/application.cc b/src/core/application.cc index 4132c33..1d7ded2 100644 --- a/src/core/application.cc +++ b/src/core/application.cc @@ -58,7 +58,7 @@ extern "C" void signal_handler(int signum) break; } } -#endif +#endif /* ---- class Application ------------------------------------------ */ @@ -84,7 +84,7 @@ Application::Application() sys::signal(SIGWINCH, signal_handler); #endif #endif - + } Application::~Application() @@ -96,7 +96,7 @@ void Application::init(int count, char **arguments) { con_print << "^BInitializing core...\n"; con_debug << " debug messages enabled\n"; - + filesystem::init(arguments[0], "base", ""); Loader::load("base"); @@ -162,7 +162,7 @@ void Application::init(int count, char **arguments) // Initialize win32 socket library WSADATA wsa_data; WORD wsa_version = MAKEWORD(2, 0); - if (WSAStartup(wsa_version, &wsa_data) != 0 ) { + if (WSAStartup(wsa_version, &wsa_data) != 0) { con_warn << "Could not initialize socket library!" << std::endl; } #endif @@ -175,7 +175,7 @@ void Application::init(int count, char **arguments) func = Func::add("quit", Application::func_quit); func->set_info("exit the application"); - + func = Func::add("load", Application::func_load); func->set_info("[string] load a game module"); @@ -218,7 +218,7 @@ void Application::shutdown() Func::remove("say"); Func::remove("help"); Func::remove("quit"); - + Func::remove("connect"); Func::remove("disconnect"); Func::remove("load"); @@ -268,7 +268,7 @@ void Application::connect(std::string const &host) if (application_game) { disconnect(); } - + if (host.size()) { notify_connect(); application_game = new GameConnection(host); @@ -282,7 +282,7 @@ void Application::connect(std::string const &host) application_game = new GameServer(); if (application_game->running()) { - con_print << "^BConnected to local game.\n"; + con_print << "^BConnected to local game.\n"; } else { delete application_game; application_game = 0; @@ -293,7 +293,7 @@ void Application::connect(std::string const &host) void Application::disconnect() { - if(application_game) { + if (application_game) { delete application_game; application_game = 0; notify_disconnect(); @@ -310,11 +310,11 @@ void Application::frame(unsigned long timestamp) if (!connected()) return; - - // run a game interface frame + + // run a game interface frame application_game->frame(timestamp); - - if (!application_game->running()) + + if (!application_game->running()) disconnect(); } @@ -345,7 +345,7 @@ void Application::save_config() for (Cvar::Registry::iterator it = Cvar::registry().begin(); it != Cvar::registry().end(); it++) { if (((*it).second->flags() & Cvar::Archive) == Cvar::Archive) { ofs << "# " << (*it).first << " " << (*it).second->info() << std::endl; - ofs << "set " << (*it).first << " " << (*it).second->str() << std::endl; + ofs << "set " << (*it).first << " " << (*it).second->str() << std::endl; ofs << std::endl; } } @@ -369,18 +369,18 @@ void Application::load_config() con_print << " reading configuration from " << filename << std::endl; char line[MAXCMDSIZE]; - while (ifs.getline(line, MAXCMDSIZE-1)) { + while (ifs.getline(line, MAXCMDSIZE - 1)) { if (line[0] && line[0] != '#' && line[0] != ';') cmd() << line << '\n'; } - + // execute commands in the buffer CommandBuffer::exec(); } void Application::load_autoexec() { - if (Cvar::sv_dedicated->value()) + if (Cvar::sv_dedicated->value()) return; std::string filename(filesystem::writedir()); @@ -391,12 +391,12 @@ void Application::load_autoexec() con_warn << "Could not read " << filename << std::endl; std::ofstream ofs(filename.c_str()); - + if (!ofs.is_open()) { con_warn << "Could not write " << filename << std::endl; return; } - + ofs << "# autoexec.cfg - osirion client custom settings" << std::endl; ofs << "# put your custom settings here" << std::endl; ofs.close(); @@ -405,13 +405,13 @@ void Application::load_autoexec() } else { con_print << " reading configuration from " << filename << std::endl; - + char line[MAXCMDSIZE]; - while (ifs.getline(line, MAXCMDSIZE-1)) { + while (ifs.getline(line, MAXCMDSIZE - 1)) { if (line[0] && line[0] != '#' && line[0] != ';') cmd() << line << '\n'; } - + CommandBuffer::exec(); } } @@ -421,9 +421,9 @@ void Application::load_commandline(int count, char **arguments) if (count < 2) return; - for (int i=1; i < count; i++) { + for (int i = 1; i < count; i++) { if (arguments[i][0] == '+') { - if (i >1) + if (i > 1) cmd() << '\n'; if (arguments[i][1]) @@ -535,7 +535,7 @@ void Application::func_rcon(std::string const &args) if (rconpassword && rconpassword->str().size()) { connection()->rcon(args); } else { - con_warn << "rconpassword not set!" << std::endl; + con_warn << "rconpassword not set!" << std::endl; } } else if (server()) { cmd() << args << "\n"; diff --git a/src/core/application.h b/src/core/application.h index b2d8467..fbaba9d 100644 --- a/src/core/application.h +++ b/src/core/application.h @@ -24,36 +24,44 @@ class Application public: /// default constructor Application(); - + /// default destructor virtual ~Application(); - -/*----- inspectors ----------------------------------------------- */ + + /*----- inspectors ----------------------------------------------- */ /// the current application time, in microseconds - inline unsigned long timestamp() const { return application_timestamp; } - + inline unsigned long timestamp() const { + return application_timestamp; + } + /// the current application time, in seconds - float time() const { return ((float)(timestamp()) / 1000.0f); } + float time() const { + return ((float)(timestamp()) / 1000.0f); + } /// true if the core is connected to a running game interface - inline bool connected() const { return (application_game && application_game->running()); } + inline bool connected() const { + return (application_game && application_game->running()); + } /// return the game interface, returns 0 if the application is not connected to a game - inline GameInterface *game() { return application_game; } + inline GameInterface *game() { + return application_game; + } -/*----- mutators ------------------------------------------------- */ + /*----- mutators ------------------------------------------------- */ /// start the server or connect to remote host void connect(std::string const &host); - + /// disconnect from the game module void disconnect(); /// load a module bool load(std::string const &module_name); -/*----- virtual mutators ------------------------------------------ */ + /*----- virtual mutators ------------------------------------------ */ /// initialize the application virtual void init(int count, char **arguments); @@ -64,7 +72,7 @@ public: /// quit the application without proper shutdown virtual void quit(int status); -/*----- notifications --------------------------------------------- */ + /*----- notifications --------------------------------------------- */ /// sound notifications from the core to the application virtual void notify_sound(const char * name); @@ -85,7 +93,9 @@ public: virtual void notify_zonechange(); /// a pointer to the current application instance - static inline Application *instance() { return application_instance; } + static inline Application *instance() { + return application_instance; + } protected: /// run a core frame @@ -96,7 +106,7 @@ protected: /// load exra config void load_autoexec(); - + /// save cvar config void save_config(); @@ -125,13 +135,22 @@ private: }; /// pointer to the application -inline Application *application() { return Application::instance(); } +inline Application *application() +{ + return Application::instance(); +} /// pointer to the console -inline sys::ConsoleInterface *console() { return sys::ConsoleInterface::instance(); } +inline sys::ConsoleInterface *console() +{ + return sys::ConsoleInterface::instance(); +} /// pointer to the game interface -inline GameInterface *game() { return Application::instance()->game(); } +inline GameInterface *game() +{ + return Application::instance()->game(); +} } diff --git a/src/core/commandbuffer.cc b/src/core/commandbuffer.cc index fbb9cfd..eb13382 100644 --- a/src/core/commandbuffer.cc +++ b/src/core/commandbuffer.cc @@ -37,7 +37,7 @@ void func_print_file(std::string const &args) std::istringstream argstream(args); std::string filename; if (!(argstream >> filename)) - return; + return; CommandBuffer::print_file(filename); } @@ -155,7 +155,7 @@ void func_toggle(std::string const &args) if (cvar->flags() && Cvar::Info) { localplayer()->set_dirty(); } - + con_debug << " " << cvar->name() << " " << cvar->str() << "\n"; } @@ -164,16 +164,16 @@ void func_exec(std::string const &args) std::istringstream argstream(args); std::string filename; if (!(argstream >> filename)) - return; + return; - CommandBuffer::exec_file(filename); + CommandBuffer::exec_file(filename); } void func_remote(std::string const &args) { if (connection()) { if ((args[0] == '\\') || (args[0] == '/')) { - connection()->forward(args.substr(1, args.size()-1)); + connection()->forward(args.substr(1, args.size() - 1)); } else { connection()->forward(args); } @@ -256,11 +256,11 @@ void CommandBuffer::exec(std::string const &cmdline) std::istringstream cmdstream(cmdline); std::string command; - + if (!(cmdstream >> command)) return; - - aux::to_lowercase(command); + + aux::to_lowercase(command); //con_debug << "Executing '" << cmdline << "'\n"; if ((command[0] == '\\') || (command[0] == '/')) { @@ -294,7 +294,7 @@ void CommandBuffer::exec(std::string const &cmdline) } f->exec(game()->localplayer(), args); } - } + } } else { // regular function std::string args; @@ -307,13 +307,13 @@ void CommandBuffer::exec(std::string const &cmdline) } return; } - + // is it a cvar Cvar *cvar = Cvar::find(command); if (cvar) { // cvar exists std::string value; - if (((cvar->flags() & Cvar::ReadOnly) == 0) && (cmdstream >> value)) { + if (((cvar->flags() & Cvar::ReadOnly) == 0) && (cmdstream >> value)) { // we're setting a new value char c; while (cmdstream.get(c)) @@ -324,15 +324,15 @@ void CommandBuffer::exec(std::string const &cmdline) localplayer()->set_dirty(); } } - + con_print << " " << command << " " << cvar->str() << " ^N" << cvar->info() << "\n"; return; } - + // this gets forwarded to the server if (connection()) { if ((cmdline[0] == '\\') || (cmdline[0] == '/')) { - connection()->forward(cmdline.substr(1, cmdline.size()-1)); + connection()->forward(cmdline.substr(1, cmdline.size() - 1)); } else { connection()->forward(cmdline); } @@ -345,13 +345,13 @@ void CommandBuffer::exec() { if (cmdbuf.eof()) return; - + std::string line; char c; bool quote = false; - while ( core::cmd().read(&c , 1) && c) { - if ( c =='\n') { + while (core::cmd().read(&c , 1) && c) { + if (c == '\n') { exec(line); line.clear(); } else if (c == '"') { @@ -360,13 +360,13 @@ void CommandBuffer::exec() exec(line); line.clear(); } else { - line +=c; + line += c; } } if (line.size()) exec(line); - + cmdbuf.clear(); } @@ -389,7 +389,7 @@ void CommandBuffer::complete(std::string &input, size_t &pos) //con_print << " " << (*f).first << "\n"; } } - + // search cvar registry for matches for (Cvar::Registry::iterator c = Cvar::registry().begin(); c != Cvar::registry().end(); c++) { if (partial == (*c).first.substr(0, partial.size())) { @@ -397,17 +397,17 @@ void CommandBuffer::complete(std::string &input, size_t &pos) //con_print << " " << (*c).first << "\n"; } } - + if (!match.size()) return; - + std::string maxmatch(*match.begin()); - + if (match.size() > 1) { std::list<std::string>::iterator l; - for (l = match.begin(); l !=match.end(); l++) { + for (l = match.begin(); l != match.end(); l++) { if (maxmatch.size()) { - size_t i =0; + size_t i = 0; while ((i < maxmatch.size() && i < (*l).size()) && (maxmatch[i] == (*l)[i])) { i++; } @@ -417,70 +417,70 @@ void CommandBuffer::complete(std::string &input, size_t &pos) con_print << " " << (*l) << "\n"; } con_print << match.size() << " matches\n"; - + } - + if (maxmatch.size() > partial.size()) { - if (match.size()==1) maxmatch += ' '; + if (match.size() == 1) maxmatch += ' '; input.replace(start, pos, maxmatch); pos = maxmatch.size(); } - + } void CommandBuffer::exec_file(std::string const & filename) { - filesystem::File *f = filesystem::open(filename.c_str()); - if (!f) { - con_warn << "Could not open " << filename << std::endl; - return; - } + filesystem::File *f = filesystem::open(filename.c_str()); + if (!f) { + con_warn << "Could not open " << filename << std::endl; + return; + } - std::string fn = f->path(); - fn.append(f->name()); - filesystem::close(f); + std::string fn = f->path(); + fn.append(f->name()); + filesystem::close(f); std::ifstream ifs; ifs.open(fn.c_str()); - if (!ifs.is_open()) { - con_warn << "Could not stream " << fn << "!\n"; - return; - } + if (!ifs.is_open()) { + con_warn << "Could not stream " << fn << "!\n"; + return; + } con_print << "Executing " << fn.c_str() << std::endl; char line[MAXCMDSIZE]; - while (ifs.getline(line, MAXCMDSIZE-1)) { - if (line[0] && line[0] != '#' && line[0] != ';') + while (ifs.getline(line, MAXCMDSIZE - 1)) { + if (line[0] && line[0] != '#' && line[0] != ';') exec(std::string(line)); - } + } ifs.close(); } void CommandBuffer::print_file(std::string const & filename) { - filesystem::File *f = filesystem::open(filename.c_str()); - if (!f) { - con_warn << "Could not open " << filename << std::endl; - return; - } + filesystem::File *f = filesystem::open(filename.c_str()); + if (!f) { + con_warn << "Could not open " << filename << std::endl; + return; + } - std::string fn = f->path(); - fn.append(f->name()); - filesystem::close(f); + std::string fn = f->path(); + fn.append(f->name()); + filesystem::close(f); std::ifstream ifs; ifs.open(fn.c_str()); - if (!ifs.is_open()) { - con_warn << "Could not stream " << fn << "!\n"; - return; - } + if (!ifs.is_open()) { + con_warn << "Could not stream " << fn << "!\n"; + return; + } char line[MAXCMDSIZE]; - while (ifs.getline(line, MAXCMDSIZE-1)) { + while (ifs.getline(line, MAXCMDSIZE - 1)) { con_print << line << "\n"; - } + } ifs.close(); } diff --git a/src/core/commandbuffer.h b/src/core/commandbuffer.h index 9cd919b..c8024ba 100644 --- a/src/core/commandbuffer.h +++ b/src/core/commandbuffer.h @@ -48,7 +48,10 @@ private: }; /// the global command buffer -inline std::stringstream & cmd() { return CommandBuffer::cmdbuf; } +inline std::stringstream & cmd() +{ + return CommandBuffer::cmdbuf; +} } diff --git a/src/core/cvar.cc b/src/core/cvar.cc index 1732d1a..6b4302d 100644 --- a/src/core/cvar.cc +++ b/src/core/cvar.cc @@ -163,8 +163,8 @@ void Cvar::list() if (((*it).second->flags() & Archive) == Archive) typeindicator += 'A'; else - typeindicator += ' '; - + typeindicator += ' '; + if (((*it).second->flags() & Game) == Game) typeindicator += 'G'; else @@ -175,8 +175,8 @@ void Cvar::list() else typeindicator += ' '; - con_print << " " << typeindicator << - " " << (*it).first << " " << (*it).second->str() << " ^N" << (*it).second->info() << std::endl; + con_print << " " << typeindicator << + " " << (*it).first << " " << (*it).second->str() << " ^N" << (*it).second->info() << std::endl; } con_print << cvar_registry.size() << " registered variables" << std::endl; } diff --git a/src/core/cvar.h b/src/core/cvar.h index 4c3d942..3d7b246 100644 --- a/src/core/cvar.h +++ b/src/core/cvar.h @@ -28,34 +28,44 @@ public: * Game a cvar with this flag is only valid when a game is loaded * Info a cvar that updates player info */ - enum Flags {Archive=1, ReadOnly=2, Game=4, Info=8}; - + enum Flags {Archive = 1, ReadOnly = 2, Game = 4, Info = 8}; + /// create a new variable Cvar(const char* name, const unsigned int flags = 0); -/*----- inspectors ------------------------------------------------ */ + /*----- inspectors ------------------------------------------------ */ /// returns the name of the variable - inline const std::string& name() const { return cvar_name; } + inline const std::string& name() const { + return cvar_name; + } /// returns the info of the variable - inline const std::string& info() const { return cvar_info; } + inline const std::string& info() const { + return cvar_info; + } /// returns the flags of the variable - inline const unsigned int flags() const { return cvar_flags; } + inline const unsigned int flags() const { + return cvar_flags; + } /// returns the float value of the variable - inline const float value() const { return cvar_value; } + inline const float value() const { + return cvar_value; + } /// returns the string value of the variable - inline const std::string& str() const { return cvar_str; } + inline const std::string& str() const { + return cvar_str; + } -/*----- mutators -------------------------------------------------- */ + /*----- mutators -------------------------------------------------- */ /// set the info string void set_info(const char* info); - /// char * assignment operator + /// char * assignment operator Cvar &operator=(const char* other); /// std::string assignment operator @@ -64,40 +74,40 @@ public: /// float assignment operator Cvar &operator=(const float other); -/* ---- Static functions for the Cvar registry -------------------- */ + /* ---- Static functions for the Cvar registry -------------------- */ /// type definition for the Cvar registry typedef std::map<std::string, Cvar*> Registry; - + /** * @brief get a cvar value from the registry * If the a cvar with the given name already exists in the registry, - * its value will not be changed. If the cvar does not exist, - * it will be created - */ - static Cvar* get(const char* name, const char* value, const unsigned int flags=0); + * its value will not be changed. If the cvar does not exist, + * it will be created + */ + static Cvar* get(const char* name, const char* value, const unsigned int flags = 0); /** * @brief get a cvar value from the registry * If the a cvar with the given name already exists in the registry, - * its value will not be changed. If the cvar does not exist, - * it will be created - */ - static Cvar* get(const char* name, const float value, const unsigned int flags=0); + * its value will not be changed. If the cvar does not exist, + * it will be created + */ + static Cvar* get(const char* name, const float value, const unsigned int flags = 0); /** * @brief set a cvar value * If the a cvar with the given name already exists in the registry, - * its value will be replaced - */ - static Cvar* set(const char* name, const char* value, const unsigned int flags=0); + * its value will be replaced + */ + static Cvar* set(const char* name, const char* value, const unsigned int flags = 0); /** * @brief set a cvar value * If the a cvar with the given name already exists in the registry, - * its value will be replaced - */ - static Cvar* set(const char* name, float value, const unsigned int flags=0); + * its value will be replaced + */ + static Cvar* set(const char* name, float value, const unsigned int flags = 0); /// search for a named cvar, returns 0 if not found static Cvar* find(const std::string& name); @@ -115,7 +125,9 @@ public: static void list(); /// the cvar registry - static inline Registry & registry() { return cvar_registry; } + static inline Registry & registry() { + return cvar_registry; + } static Cvar *sv_dedicated; // dedicated server static Cvar *sv_private; // client with private server diff --git a/src/core/descriptions.cc b/src/core/descriptions.cc index 8c0f4ee..307cc87 100644 --- a/src/core/descriptions.cc +++ b/src/core/descriptions.cc @@ -8,7 +8,8 @@ #include "auxiliary/functions.h" #include "sys/sys.h" -namespace core { +namespace core +{ /* ---- class ButtonDescription ------------------------------------ */ @@ -55,7 +56,7 @@ MenuDescription::MenuDescription() MenuDescription::~MenuDescription() { for (Buttons::iterator it = buttons().begin(); it != buttons().end(); it++) { - delete (*it); + delete(*it); } buttons().clear(); @@ -82,16 +83,16 @@ void MenuDescription::add_button(ButtonDescription *button) void Descriptions::serialize(MenuDescription *menu, std::ostream & os) { os << menu->label() << " " - << "\"" << menu->text() << "\" " - << menu->buttons().size() << " "; - + << "\"" << menu->text() << "\" " + << menu->buttons().size() << " "; + for (MenuDescription::Buttons::iterator it = menu-> buttons().begin(); it != menu->buttons().end(); it++) { ButtonDescription *button = (*it); os << "\"" << button->text() << "\" " - << button->alignment() << " " - << button->command_type() << " " - << "\"" << button->command() << "\" " - << "\"" << button->modelname() << "\" "; + << button->alignment() << " " + << button->command_type() << " " + << "\"" << button->command() << "\" " + << "\"" << button->modelname() << "\" "; } } @@ -111,8 +112,8 @@ MenuDescription * Descriptions::receive(std::istream &is) // menu text n.clear(); - while ( (is.get(c)) && (c != '"')); - while ( (is.get(c)) && (c != '"')) + while ((is.get(c)) && (c != '"')); + while ((is.get(c)) && (c != '"')) n += c; if (n.size()) @@ -120,12 +121,12 @@ MenuDescription * Descriptions::receive(std::istream &is) // menu buttons is >> nb; - for (size_t i=0; i < nb; i++) { + for (size_t i = 0; i < nb; i++) { ButtonDescription *button = new ButtonDescription(); // button text n.clear(); - while ( (is.get(c)) && (c != '"')); - while ( (is.get(c)) && (c != '"')) + while ((is.get(c)) && (c != '"')); + while ((is.get(c)) && (c != '"')) n += c; if (n.size()) button->set_text(n); @@ -144,8 +145,8 @@ MenuDescription * Descriptions::receive(std::istream &is) // button command n.clear(); - while ( (is.get(c)) && (c != '"')); - while ( (is.get(c)) && (c != '"')) + while ((is.get(c)) && (c != '"')); + while ((is.get(c)) && (c != '"')) n += c; if (n.size()) { @@ -158,8 +159,8 @@ MenuDescription * Descriptions::receive(std::istream &is) // button modelname n.clear(); - while ( (is.get(c)) && (c != '"')); - while ( (is.get(c)) && (c != '"')) + while ((is.get(c)) && (c != '"')); + while ((is.get(c)) && (c != '"')) n += c; if (n.size()) button->set_modelname(n); @@ -167,7 +168,7 @@ MenuDescription * Descriptions::receive(std::istream &is) } return menu; - + } bool Descriptions::load_entity_menus(core::Entity *entity, const std::string &menufilename) @@ -180,11 +181,11 @@ bool Descriptions::load_entity_menus(core::Entity *entity, const std::string &me } con_debug << " " << inifile.name() << std::endl; - + std::string strval; MenuDescription *menu = 0; ButtonDescription *button = 0; - + while (inifile.getline()) { if (inifile.got_section()) { @@ -216,14 +217,14 @@ bool Descriptions::load_entity_menus(core::Entity *entity, const std::string &me } } else if (inifile.in_section("button")) { - + if (!button) { continue; } else if (inifile.got_key_string("text", strval)) { aux::strip_quotes(strval); button->set_text(strval); } else if (inifile.got_key_string("command", strval)) { - for (size_t i =0; i <= strval.size(); i++) { + for (size_t i = 0; i <= strval.size(); i++) { if (strval[i] == ',') strval[i] = ';'; } aux::strip_quotes(strval); diff --git a/src/core/descriptions.h b/src/core/descriptions.h index dec7896..2b4b1e0 100644 --- a/src/core/descriptions.h +++ b/src/core/descriptions.h @@ -11,7 +11,8 @@ #include <list> #include <iostream> -namespace core { +namespace core +{ class ButtonDescription; class MenuDescription; } @@ -20,38 +21,51 @@ class MenuDescription; #include "model/model.h" #include "filesystem/inifile.h" -namespace core { +namespace core +{ /// description of a menu button class ButtonDescription { public: - enum Align {Center=0, Left=1, Right=2}; + enum Align {Center = 0, Left = 1, Right = 2}; - enum CommandType {CommandNone=0, CommandGame=1, CommandMenu=2}; + enum CommandType {CommandNone = 0, CommandGame = 1, CommandMenu = 2}; ButtonDescription(); ~ButtonDescription(); - + /* -- inspectors ------------------------------------------- */ /// button text - inline const std::string & text() const { return button_text; } + inline const std::string & text() const { + return button_text; + } /// button command type - inline const CommandType command_type() const {return button_commandtype; } + inline const CommandType command_type() const { + return button_commandtype; + } /// button command - inline const std::string & command() const { return button_command; } + inline const std::string & command() const { + return button_command; + } /// button info view model name - inline const std::string & modelname() const { return button_modelname; } + inline const std::string & modelname() const { + return button_modelname; + } /// button info view model - inline const model::Model *model() { return button_model; } - + inline const model::Model *model() { + return button_model; + } + /// button text alignment - inline Align alignment() const { return button_align; } + inline Align alignment() const { + return button_align; + } /* -- mutators -------------------------------------------- */ @@ -88,13 +102,19 @@ public: /* -- inspectors ------------------------------------------- */ /// menu label - inline const std::string & label() const { return menu_label; } + inline const std::string & label() const { + return menu_label; + } /// menu text - inline const std::string & text() const { return menu_text; } + inline const std::string & text() const { + return menu_text; + } /// menu buttons - inline Buttons &buttons() { return menu_buttons; } + inline Buttons &buttons() { + return menu_buttons; + } /* -- mutators -------------------------------------------- */ @@ -110,13 +130,14 @@ public: private: std::string menu_label; std::string menu_text; - + Buttons menu_buttons; }; /// descriptions loader class -class Descriptions { +class Descriptions +{ public: /// read entity menus from ini file static bool load_entity_menus(core::Entity *entity, const std::string &menufilename); diff --git a/src/core/entity.cc b/src/core/entity.cc index 0ead5f4..ce313e6 100644 --- a/src/core/entity.cc +++ b/src/core/entity.cc @@ -78,9 +78,9 @@ void Entity::list() std::string typeindicator; Entity *entity = (*it).second; con_print << " id " << std::setw(4) << entity->id() - << " type " << std::setw(4) << entity->type() - << ":" << std::setw(4) << entity->moduletype() - << " " << entity->label() << std::endl; + << " type " << std::setw(4) << entity->type() + << ":" << std::setw(4) << entity->moduletype() + << " " << entity->label() << std::endl; } con_print << entity_registry.size() << " registered entities" << std::endl; } @@ -88,21 +88,21 @@ void Entity::list() /* ---- class Entity ----------------------------------------------- */ Entity::Entity(const unsigned int flags) : - entity_location(0.0f, 0.0f, 0.0f), - entity_color(1.0f, 1.0f, 1.0f, 1.0f), - entity_color_second(1.0f, 1.0f, 1.0f, 1.0f) + entity_location(0.0f, 0.0f, 0.0f), + entity_color(1.0f, 1.0f, 1.0f, 1.0f), + entity_color_second(1.0f, 1.0f, 1.0f, 1.0f) { entity_id = 0; entity_flags = flags; entity_moduletypeid = 0; entity_speed = 0.0f; - + entity_radius = 0.5f; entity_shape = Diamond; - + entity_created = true; - entity_destroyed = false; + entity_destroyed = false; entity_dirty = false; entity_model = 0; @@ -133,25 +133,25 @@ Entity::Entity(std::istream & is) entity_created = true; entity_destroyed = false; - + memset(entity_extension, 0, sizeof(entity_extension)); } Entity::~Entity() { // delete extensions - for (size_t i =0; i < 4; i++) { + for (size_t i = 0; i < 4; i++) { if (entity_extension[i]) delete entity_extension[i]; - entity_extension[i] = 0; + entity_extension[i] = 0; } // delete entity menus for (Menus::iterator it = menus().begin(); it != menus().end(); it++) { - delete (*it); + delete(*it); } menus().clear(); - + if (entity_zone) entity_zone->remove(this); } @@ -234,19 +234,19 @@ void Entity::set_modelname(const std::string &modelname) void Entity::serialize_server_create(std::ostream & os) const { os << moduletype() << " " - << flags() << " " - << (visible() ? 1 : 0) << " " - << (zone() ? zone()->id() : 0) << " " - << std::setprecision(8) << entity_location << " " - << color() << " " - << color_second() << " " - << shape() << " " - << radius() << " " - << std::setprecision(8) << entity_axis.forward() << " " - << std::setprecision(8) << entity_axis.left() << " " - << "\"" << entity_label << "\" " - << "\"" << entity_name << "\" " - << "\"" << (entity_model ? entity_model->name() : "") << "\" "; + << flags() << " " + << (visible() ? 1 : 0) << " " + << (zone() ? zone()->id() : 0) << " " + << std::setprecision(8) << entity_location << " " + << color() << " " + << color_second() << " " + << shape() << " " + << radius() << " " + << std::setprecision(8) << entity_axis.forward() << " " + << std::setprecision(8) << entity_axis.left() << " " + << "\"" << entity_label << "\" " + << "\"" << entity_name << "\" " + << "\"" << (entity_model ? entity_model->name() : "") << "\" "; } void Entity::receive_server_create(std::istream &is) @@ -271,12 +271,12 @@ void Entity::receive_server_create(std::istream &is) if (entity_zone && !zo) { con_warn << "Received entity " << entity_id << " for unknown zone " << zo << "!" << std::endl; } - + is >> entity_location; is >> entity_color; is >> entity_color_second; - - is >> s; // shape + + is >> s; // shape entity_shape = (Shape) s; is >> entity_radius; @@ -289,23 +289,23 @@ void Entity::receive_server_create(std::istream &is) char c; // read label - while ( (is.get(c)) && (c != '"')); - while ( (is.get(c)) && (c != '"')) - n += c; + while ((is.get(c)) && (c != '"')); + while ((is.get(c)) && (c != '"')) + n += c; entity_label = n; n.clear(); // read name - while ( (is.get(c)) && (c != '"')); - while ( (is.get(c)) && (c != '"')) - n += c; + while ((is.get(c)) && (c != '"')); + while ((is.get(c)) && (c != '"')) + n += c; entity_name = n; n.clear(); // read model name - while ( (is.get(c)) && (c != '"')); - while ( (is.get(c)) && (c != '"')) - n += c; + while ((is.get(c)) && (c != '"')); + while ((is.get(c)) && (c != '"')) + n += c; set_modelname(n); entity_dirty = false; @@ -354,21 +354,21 @@ void Entity::remove_menu(std::string const &label) for (Menus::iterator it = menus().begin(); it != menus().end(); it++) { if (label.compare((*it)->label()) == 0) menus().erase(it); - return; + return; } } /* ---- class EntityDynamic ---------------------------------------- */ EntityDynamic::EntityDynamic(unsigned int flags) : - Entity(flags) + Entity(flags) { entity_state = Normal; entity_timer = 0; } EntityDynamic::EntityDynamic(std::istream & is) : - Entity(is) + Entity(is) { entity_state = Normal; entity_timer = 0; @@ -403,10 +403,10 @@ void EntityDynamic::serialize_server_create(std::ostream & os) const { Entity::serialize_server_create(os); os << roundf(entity_speed * 100.0f) << " " - << entity_state << " "; + << entity_state << " "; if (entity_state != Normal) { - os << entity_timer << " "; + os << entity_timer << " "; } } @@ -434,7 +434,7 @@ void EntityDynamic::receive_client_update(std::istream &is) void EntityDynamic::serialize_server_update(std::ostream & os) const { - os << (visible() ? 1 : 0 ) << " "; + os << (visible() ? 1 : 0) << " "; if (visible()) { os << std::setprecision(8) << location() << " " @@ -442,7 +442,7 @@ void EntityDynamic::serialize_server_update(std::ostream & os) const << axis().left() << " " << roundf(entity_speed * 100.0f) << " " << entity_state << " "; - + if (entity_state != Normal) { os << entity_timer << " "; } @@ -463,7 +463,7 @@ void EntityDynamic::receive_server_update(std::istream &is) is >> entity_speed; entity_speed /= 100.0f; is >> entity_state; - + if (entity_state != Normal) { is >> entity_timer; } else { @@ -477,7 +477,7 @@ void EntityDynamic::receive_server_update(std::istream &is) /*----- EntityControlable ------------------------------------------ */ EntityControlable::EntityControlable(Player *owner, unsigned int flags) : - EntityDynamic(flags) + EntityDynamic(flags) { entity_thrust = 0; entity_movement = 0; @@ -495,7 +495,7 @@ EntityControlable::EntityControlable(Player *owner, unsigned int flags) : } EntityControlable::EntityControlable(std::istream & is) : - EntityDynamic(is) + EntityDynamic(is) { entity_thrust = 0; entity_movement = 0; @@ -521,7 +521,7 @@ void EntityControlable::serialize_server_create(std::ostream & os) const { EntityDynamic::serialize_server_create(os); os << roundf(entity_thrust*100.0f) << " " - << ( entity_owner ? entity_owner->id() : 0) << " "; + << (entity_owner ? entity_owner->id() : 0) << " "; } void EntityControlable::receive_server_create(std::istream &is) @@ -532,16 +532,16 @@ void EntityControlable::receive_server_create(std::istream &is) entity_thrust /= 100.0f; entity_owner = 0; - + int owner_id = 0; is >> owner_id; if (owner_id) { - for (GameInterface::Players::iterator pit = game()->players().begin(); pit != game()->players().end(); pit++ ) { + for (GameInterface::Players::iterator pit = game()->players().begin(); pit != game()->players().end(); pit++) { Player *player = (*pit); if (player->id() == owner_id) { player->add_asset(this); entity_owner = player; - + } } @@ -666,7 +666,7 @@ void EntityControlable::set_afterburner(float afterburner) /*----- EntityGlobe ------------------------------------------------ */ EntityGlobe::EntityGlobe(unsigned int flags) : - Entity(flags) + Entity(flags) { render_texture = 0; entity_rotationspeed = 0; @@ -674,7 +674,7 @@ EntityGlobe::EntityGlobe(unsigned int flags) : } EntityGlobe::EntityGlobe(std::istream & is) : - Entity(is) + Entity(is) { render_texture = 0; entity_rotationspeed = 0; @@ -699,9 +699,9 @@ void EntityGlobe::receive_server_create(std::istream &is) std::string n; char c; - while ( (is.get(c)) && (c != '"')); - while ( (is.get(c)) && (c != '"')) - n += c; + while ((is.get(c)) && (c != '"')); + while ((is.get(c)) && (c != '"')) + n += c; entity_texture = n; n.clear(); diff --git a/src/core/entity.h b/src/core/entity.h index 3002219..92cb5ab 100644 --- a/src/core/entity.h +++ b/src/core/entity.h @@ -39,16 +39,16 @@ class Entity public: /// Entity flags - enum Flags {Static=1, Solid=2, Bright=4, Dockable=8, ShowOnMap=16}; + enum Flags {Static = 1, Solid = 2, Bright = 4, Dockable = 8, ShowOnMap = 16}; /// Entity type constants - enum Type {Default=0, Dynamic=1, Controlable=2, Globe=3}; + enum Type {Default = 0, Dynamic = 1, Controlable = 2, Globe = 3}; /// Entity shape constants - enum Shape {Diamond=0, Sphere=1, Cube=2, Axis=3}; + enum Shape {Diamond = 0, Sphere = 1, Cube = 2, Axis = 3}; /// EntityDynamic State constants - enum State {Normal=0, NoPower=1, ImpulseInitiate=2, Impulse=3, JumpInitiate=4, Jump=5, Docked=6, Destroyed=7}; + enum State {Normal = 0, NoPower = 1, ImpulseInitiate = 2, Impulse = 3, JumpInitiate = 4, Jump = 5, Docked = 6, Destroyed = 7}; /// entity menus collection typedef typedef std::list<MenuDescription *> Menus; @@ -62,76 +62,122 @@ public: /// destroy an entity virtual ~Entity(); -/*----- inspectors ------------------------------------------------ */ - + /*----- inspectors ------------------------------------------------ */ + /// entity id - inline const unsigned int id() const { return entity_id; } - + inline const unsigned int id() const { + return entity_id; + } + /// module type id - inline const unsigned int moduletype() const { return entity_moduletypeid; } + inline const unsigned int moduletype() const { + return entity_moduletypeid; + } /// core type id - virtual inline const unsigned int type() const { return Default; } + virtual inline const unsigned int type() const { + return Default; + } /// entity flags - inline const unsigned int flags() const { return entity_flags; } + inline const unsigned int flags() const { + return entity_flags; + } /// returns true of a flag is set - inline const bool flag_is_set(const Flags flag) const { return ((entity_flags & (unsigned int)flag) == (unsigned int)flag); } + inline const bool flag_is_set(const Flags flag) const { + return ((entity_flags & (unsigned int)flag) == (unsigned int)flag); + } /// entity label (can not contain double quotes ") - inline const std::string& label() const { return entity_label; } + inline const std::string& label() const { + return entity_label; + } /// entity name (can not contain double qoutes ") - inline const std::string & name() const { return entity_name; } + inline const std::string & name() const { + return entity_name; + } /// pointer to the model, is used client-side - inline model::Model * model() { return entity_model; } + inline model::Model * model() { + return entity_model; + } /// modelname - inline const std::string & modelname() const { return entity_modelname; } + inline const std::string & modelname() const { + return entity_modelname; + } /// pointer to the zone the entity belongs to - inline Zone *zone() const { return entity_zone; } + inline Zone *zone() const { + return entity_zone; + } /// the zone the entity left in case of a zone change - inline Zone *oldzone() const { return entity_oldzone; } + inline Zone *oldzone() const { + return entity_oldzone; + } /// dirty flag - inline bool dirty() const { return entity_dirty; } + inline bool dirty() const { + return entity_dirty; + } /// entity location - inline const math::Vector3f& location() const { return entity_location; } + inline const math::Vector3f& location() const { + return entity_location; + } /// local coordinate system of the entity - inline const math::Axis& axis() const { return entity_axis; } - + inline const math::Axis& axis() const { + return entity_axis; + } + /// primary color of the entity - inline const math::Color& color() const { return entity_color; } + inline const math::Color& color() const { + return entity_color; + } /// secondary - inline const math::Color& color_second() const { return entity_color_second; } + inline const math::Color& color_second() const { + return entity_color_second; + } /// base shape of the entity - inline const Shape shape() const { return entity_shape; } + inline const Shape shape() const { + return entity_shape; + } /// base radius of the entity - inline const float radius() const { return entity_radius; } + inline const float radius() const { + return entity_radius; + } /// current speed of the entity in game units per second - inline const float speed() const { return entity_speed; } + inline const float speed() const { + return entity_speed; + } /// indicates a server-side entity - inline const bool serverside() const { return entity_serverside; } + inline const bool serverside() const { + return entity_serverside; + } /// general visibility - inline const bool visible() const { return entity_visible; } + inline const bool visible() const { + return entity_visible; + } /// entity menus - inline Menus &menus() { return entity_menus; } + inline Menus &menus() { + return entity_menus; + } /// extensions - inline Extension *extension(size_t type) const { return entity_extension[type]; } + inline Extension *extension(size_t type) const { + return entity_extension[type]; + } /// find a menu MenuDescription *find_menu(const std::string &label); @@ -140,13 +186,19 @@ public: /* ---- mutators -------------------------------------------------- */ /// assign entity color - inline void set_color(const math::Color &color) { entity_color.assign(color); } + inline void set_color(const math::Color &color) { + entity_color.assign(color); + } /// assign entity secondary color - inline void set_color_second(const math::Color &color) { entity_color_second.assign(color); } + inline void set_color_second(const math::Color &color) { + entity_color_second.assign(color); + } /// set dirty flag - inline void set_dirty(const bool dirty = true) { entity_dirty = dirty; } + inline void set_dirty(const bool dirty = true) { + entity_dirty = dirty; + } /// mark the entity as destroyed virtual void die(); @@ -178,10 +230,14 @@ public: void set_name(const std::string &name); /// set visibility - inline void set_visible(const bool visible = true) { entity_visible = visible; } + inline void set_visible(const bool visible = true) { + entity_visible = visible; + } /// set as server-side entity - inline void set_serverside(const bool serverside = true) { entity_serverside = serverside; } + inline void set_serverside(const bool serverside = true) { + entity_serverside = serverside; + } /// set the model name and load the model void set_modelname(const std:: string &model); @@ -190,7 +246,9 @@ public: void set_model(model::Model *model); /// set entity radius - inline void set_radius(const float radius) { entity_radius = radius; } + inline void set_radius(const float radius) { + entity_radius = radius; + } /* ---- actors ---------------------------------------------------- */ @@ -198,10 +256,14 @@ public: virtual void dock(core::Entity *entity); /// set flags - inline void set_flag(Flags flag) { entity_flags |= flag; } + inline void set_flag(Flags flag) { + entity_flags |= flag; + } /// unset flags - inline void unset_flag(Flags flag) { entity_flags &= ~flag; } + inline void unset_flag(Flags flag) { + entity_flags &= ~flag; + } /// add an entity menu void add_menu(MenuDescription *menu); @@ -215,23 +277,31 @@ public: /** * @brief mutable reference to the location */ - inline math::Vector3f& get_location() { return entity_location; } + inline math::Vector3f& get_location() { + return entity_location; + } /** * @brief mutable reference to the axis */ - inline math::Axis& get_axis() { return entity_axis; } + inline math::Axis& get_axis() { + return entity_axis; + } /** * @brief mutable reference to the primary color */ - inline math::Color& get_color() { return entity_color; } + inline math::Color& get_color() { + return entity_color; + } /** * @brief mutable reference to the secondary color */ - inline math::Color& get_color_second() { return entity_color_second; } + inline math::Color& get_color_second() { + return entity_color_second; + } /* ---- deserializers -------------------------------------- */ @@ -257,7 +327,7 @@ public: /* ---- static --------------------------------------------- */ - + /// type definition for the entity registry typedef std::map<unsigned int, Entity*> Registry; @@ -274,13 +344,15 @@ public: static void list(); /// the entity registry - static inline Registry & registry() { return entity_registry; } + static inline Registry & registry() { + return entity_registry; + } /* entity_ variables can be set by the module */ /// speed of the entity - float entity_speed; - Shape entity_shape; + float entity_speed; + Shape entity_shape; unsigned int entity_moduletypeid; bool entity_created; @@ -321,7 +393,7 @@ private: Extension* entity_extension[4]; - static Registry entity_registry; + static Registry entity_registry; static size_t entity_nextid; static void add(Entity *ent); @@ -340,17 +412,23 @@ public: virtual ~EntityDynamic(); -/*----- inspectors ------------------------------------------------ */ + /*----- inspectors ------------------------------------------------ */ /// core type id - virtual inline const unsigned int type() const { return Entity::Dynamic; } + virtual inline const unsigned int type() const { + return Entity::Dynamic; + } /// event state - inline const int state() const { return entity_state; } + inline const int state() const { + return entity_state; + } /// event state timer - inline const float timer() const { return entity_timer; } + inline const float timer() const { + return entity_timer; + } -/*----- serializers ----------------------------------------------- */ + /*----- serializers ----------------------------------------------- */ /// serialize the entity to a stream virtual void serialize_server_create(std::ostream & os) const; @@ -361,7 +439,7 @@ public: /// serialize a server-to-client update on a stream virtual void serialize_server_update(std::ostream & os) const; -/*----- mutators -------------------------------------------------- */ + /*----- mutators -------------------------------------------------- */ /// receive a client-to-server update from a stream virtual void receive_client_update(std::istream &is); @@ -398,24 +476,32 @@ public: /// create a controlable entity from stream data EntityControlable(std::istream & is); - + virtual ~EntityControlable(); -/*----- inspectors ------------------------------------------------ */ + /*----- inspectors ------------------------------------------------ */ /// core type id - virtual inline const unsigned int type() const { return Entity::Controlable; } + virtual inline const unsigned int type() const { + return Entity::Controlable; + } /// owner of this entity - inline Player *owner() const { return entity_owner; } + inline Player *owner() const { + return entity_owner; + } /// thrust - inline float thrust() const { return entity_thrust; } + inline float thrust() const { + return entity_thrust; + } /// movement indicator - inline float movement() const { return entity_movement; } + inline float movement() const { + return entity_movement; + } -/*----- serializers ----------------------------------------------- */ + /*----- serializers ----------------------------------------------- */ /// serialize the entity to a stream virtual void serialize_server_create(std::ostream & os) const; @@ -426,7 +512,7 @@ public: /// serialize a server-to-client update on a stream virtual void serialize_server_update(std::ostream & os) const; -/*----- mutators -------------------------------------------------- */ + /*----- mutators -------------------------------------------------- */ /// receive a client-to-server update from a stream virtual void receive_client_update(std::istream &is); @@ -442,7 +528,7 @@ public: /// set the target direction void set_direction(float direction); - + /// set the target pitch void set_pitch(float pitch); @@ -494,7 +580,7 @@ private: }; /// a Globe entity -class EntityGlobe : public Entity +class EntityGlobe : public Entity { public: EntityGlobe(const unsigned int flags = 0); @@ -502,14 +588,18 @@ public: virtual ~EntityGlobe(); -/*----- inspectors ----------------------------------------------- */ + /*----- inspectors ----------------------------------------------- */ /// texture name - inline const std::string &texture() const { return entity_texture; } + inline const std::string &texture() const { + return entity_texture; + } /// rotation speed in degrees per second - inline float rotationspeed() const { return entity_rotationspeed; } + inline float rotationspeed() const { + return entity_rotationspeed; + } -/*----- serializers ----------------------------------------------- */ + /*----- serializers ----------------------------------------------- */ /// serialize the entity to a stream virtual void serialize_server_create(std::ostream & os) const; @@ -517,10 +607,12 @@ public: /// receive a server-to-client create from a stream virtual void receive_server_create(std::istream &is); -/*----- inspectors ------------------------------------------------ */ + /*----- inspectors ------------------------------------------------ */ /// core type id - virtual inline const unsigned int type() const { return Entity::Globe; } + virtual inline const unsigned int type() const { + return Entity::Globe; + } std::string entity_texture; diff --git a/src/core/extension.h b/src/core/extension.h index 0b9ecad..91ba906 100644 --- a/src/core/extension.h +++ b/src/core/extension.h @@ -7,23 +7,30 @@ #ifndef __INCLUDED_CORE_EXTENSION_H__ #define __INCLUDED_CORE_EXTENSION_H__ -namespace core { - class Extension; +namespace core +{ +class Extension; } #include "core/entity.h" -namespace core { +namespace core +{ /// a abstract base class for entity extensions -class Extension { +class Extension +{ public: /// extension types - enum Type { Client=0, Render=1, Sound=2, Game=3 }; + enum Type { Client = 0, Render = 1, Sound = 2, Game = 3 }; - inline Type type() const { return extension_type; } + inline Type type() const { + return extension_type; + } - inline Entity *entity() { return extension_entity; } + inline Entity *entity() { + return extension_entity; + } Extension(Type type, Entity *entity); virtual ~Extension(); @@ -33,7 +40,7 @@ public: private: Type extension_type; Entity *extension_entity; - + }; } // namespace core diff --git a/src/core/func.cc b/src/core/func.cc index 42c46c8..be5aca3 100644 --- a/src/core/func.cc +++ b/src/core/func.cc @@ -66,8 +66,8 @@ Func *Func::add(const char *name, TargetFuncPtr targetfunctionptr) void Func::remove(const char *name) { std::map<std::string, Func *>::iterator it = func_registry.find(std::string(name)); - if (it != func_registry.end()) { - delete (*it).second; + if (it != func_registry.end()) { + delete(*it).second; func_registry.erase(it); //con_debug << "Function '" << name << "' unregistered." << std::endl; } @@ -76,11 +76,11 @@ void Func::remove(const char *name) void Func::remove(const std::string &name) { std::map<std::string, Func *>::iterator it = func_registry.find(name); - if (it != func_registry.end()) { - delete (*it).second; - func_registry.erase(it); + if (it != func_registry.end()) { + delete(*it).second; + func_registry.erase(it); //con_debug << "Function '" << name << "' unregistered." << std::endl; - } + } } @@ -104,7 +104,7 @@ void Func::list() typeindicator += 'G'; else typeindicator += ' '; - if (((*it).second->flags() & Shared) == Shared) + if (((*it).second->flags() & Shared) == Shared) typeindicator += 'S'; else typeindicator += ' '; @@ -150,12 +150,12 @@ void Func::exec(std::string const &args) FuncPtr function = (FuncPtr) func_ptr; function(args); } - + void Func::exec(Player *player, std::string const &args) { if (!(flags() & Game)) return; - + GameFuncPtr gamefunction = (GameFuncPtr) func_ptr; gamefunction(player, args); } diff --git a/src/core/func.h b/src/core/func.h index eacd47e..f42eff7 100644 --- a/src/core/func.h +++ b/src/core/func.h @@ -27,49 +27,55 @@ typedef void(* GameFuncPtr)(Player *player, std::string const &args); typedef void(* TargetFuncPtr)(Player *player, Entity *entity); /// a function pointer encapsulation class -class Func +class Func { public: /// function flags - enum Flags {Game=1, Shared=2, Target=4}; - + enum Flags {Game = 1, Shared = 2, Target = 4}; + /// create a new function Func(char const * name, void *ptr, unsigned int flags = 0); - + ~Func(); -/*----- inspectors ------------------------------------------------ */ + /*----- inspectors ------------------------------------------------ */ /// returns the fucuntion flags - inline unsigned int flags() const { return func_flags; } + inline unsigned int flags() const { + return func_flags; + } /// returns the name of the function - inline std::string const &name() const { return func_name; } + inline std::string const &name() const { + return func_name; + } /// returns the info of the function - inline std::string const &info() { return func_info; } + inline std::string const &info() { + return func_info; + } + + /*----- mutators -------------------------------------------------- */ -/*----- mutators -------------------------------------------------- */ - /// set the info string void set_info(const char *); /// execute the function if the Game flag is not set void exec(std::string const &args); - + /// execute the function if the Game flag is set void exec(Player *player, std::string const &args); /// execute the function if the Target flag is set void exec(Player *player, Entity *entity); -/* ---- Static functions for the Func registry -------------------- */ + /* ---- Static functions for the Func registry -------------------- */ /// type definition typedef std::map<std::string, Func*> Registry; /// add a function to the registry - static Func *add(const char *name, FuncPtr functionptr, bool shared=false); + static Func *add(const char *name, FuncPtr functionptr, bool shared = false); /// add a game function to the registry and set the Game flag static Func *add(const char *name, GameFuncPtr functionptr); @@ -90,7 +96,9 @@ public: static void list(); /// the function registry - static inline Registry & registry() { return func_registry; } + static inline Registry & registry() { + return func_registry; + } private: std::string func_name; diff --git a/src/core/gameconnection.cc b/src/core/gameconnection.cc index 65126e3..b615b5f 100644 --- a/src/core/gameconnection.cc +++ b/src/core/gameconnection.cc @@ -31,7 +31,7 @@ GameConnection::GameConnection(std::string const &connectionstr) size_t found = host.find(':'); if (found != std::string::npos) { - std::istringstream str(host.substr(found+1)); + std::istringstream str(host.substr(found + 1)); if (str >> port) { host.erase(found, std::string::npos); } else { @@ -82,7 +82,7 @@ unsigned long GameConnection::timestamp() const float GameConnection::time() const { - return ((float)(connection_timestamp) / 1000.0f); + return ((float)(connection_timestamp) / 1000.0f); } bool GameConnection::interactive() const @@ -165,18 +165,18 @@ void GameConnection::frame(unsigned long timestamp) connection_network->frame(); float f = 0; - if (core::Cvar::net_framerate->value()) { + if (core::Cvar::net_framerate->value()) { f = 1000.0f / core::Cvar::net_framerate->value(); if (connection_netframe + f > timestamp) { return; } - } + } connection_netframe = timestamp; if (connection_network->state() == NetConnection::Connected) { - if(localcontrol() && localcontrol()->dirty()) { + if (localcontrol() && localcontrol()->dirty()) { connection_network->send_clientupdate(localcontrol()); localcontrol()->set_dirty(false); @@ -184,7 +184,7 @@ void GameConnection::frame(unsigned long timestamp) if (localplayer()->dirty()) { connection_network->send_playerinfo(); - + } } diff --git a/src/core/gameconnection.h b/src/core/gameconnection.h index 22af910..52885f4 100644 --- a/src/core/gameconnection.h +++ b/src/core/gameconnection.h @@ -20,13 +20,17 @@ public: GameConnection(std::string const &connectionstr); virtual ~GameConnection(); -/*----- inspectors ------------------------------------------------ */ + /*----- inspectors ------------------------------------------------ */ /// returns true if the game connection can run a time frime - inline bool running() const { return connection_running; } + inline bool running() const { + return connection_running; + } /// returns true if the game connection can not run a time frime - inline bool error() const { return !connection_running; } + inline bool error() const { + return !connection_running; + } /// returns true if the game is running an interactive module virtual bool interactive() const; @@ -37,7 +41,7 @@ public: /// return the current game time virtual unsigned long timestamp() const; -/*----- mutators -------------------------------------------------- */ + /*----- mutators -------------------------------------------------- */ /// run a game connection time frame void frame(unsigned long timestamp); @@ -57,10 +61,12 @@ public: /// returns an info record Info *info(const std::string &label); -/*----- static ---------------------------------------------------- */ - + /*----- static ---------------------------------------------------- */ + /// return the current game connection - static inline GameConnection *instance() { return connection_instance; } + static inline GameConnection *instance() { + return connection_instance; + } protected: /// abort runing @@ -72,10 +78,13 @@ private: unsigned long connection_netframe; // last network frame timestamp NetConnection *connection_network; - static GameConnection *connection_instance; + static GameConnection *connection_instance; }; -inline GameConnection *connection() { return GameConnection::instance(); } +inline GameConnection *connection() +{ + return GameConnection::instance(); +} } diff --git a/src/core/gameinterface.cc b/src/core/gameinterface.cc index ce011dd..272c349 100644 --- a/src/core/gameinterface.cc +++ b/src/core/gameinterface.cc @@ -25,7 +25,7 @@ namespace core void func_list_players(std::string const &args) { - + if (args.size()) { Player *player = game()->find_player(args); if (!player) { @@ -44,22 +44,22 @@ const float MIN_DELTA = 10e-10; Player GameInterface::game_localplayer; EntityControlable *localcontrol() -{ +{ if (game()->localplayer()) return game()->localplayer()->control(); else return 0; - + } Player *localplayer() -{ +{ return game()->localplayer(); } GameInterface::GameInterface() { clear(); - + game_localplayer.clear(); if (Cvar::sv_dedicated->value()) { game_localplayer.player_name.assign("Console"); @@ -107,7 +107,7 @@ void GameInterface::clear() // remove all entities for (Entity::Registry::iterator it = Entity::registry().begin(); it != Entity::registry().end(); it++) { - delete (*it).second; + delete(*it).second; } Entity::registry().clear(); @@ -121,8 +121,8 @@ void GameInterface::clear() // remove all game functions for (Func::Registry::iterator it = Func::registry().begin(); it != Func::registry().end();) { - if ( ((*it).second->flags() & Func::Game) == Func::Game) { - delete (*it).second; + if (((*it).second->flags() & Func::Game) == Func::Game) { + delete(*it).second; Func::registry().erase(it++); } else { ++it; @@ -130,9 +130,9 @@ void GameInterface::clear() } // remove all game cvars - for (Cvar::Registry::iterator it = Cvar::registry().begin(); it != Cvar::registry().end(); ) { - if ( ((*it).second->flags() & Cvar::Game) == Cvar::Game) { - delete (*it).second; + for (Cvar::Registry::iterator it = Cvar::registry().begin(); it != Cvar::registry().end();) { + if (((*it).second->flags() & Cvar::Game) == Cvar::Game) { + delete(*it).second; Cvar::registry().erase(it++); } else { ++it; @@ -194,10 +194,10 @@ void GameInterface::list_players() for (Players::iterator it = game_players.begin(); it != game_players.end(); it++) { const Player *player = (*it); con_print << " " - << aux::pad_left(player->name(), 24) << "^N " - << "id^B" << setw(4) << player->id() << " " - << "ping^B" << setw(4) << player->ping() << "^N " - << "level^B" << setw(4) << player->level() << "^N"; + << aux::pad_left(player->name(), 24) << "^N " + << "id^B" << setw(4) << player->id() << " " + << "ping^B" << setw(4) << player->ping() << "^N " + << "level^B" << setw(4) << player->level() << "^N"; if (player->zone()) con_print << aux::pad_left(player->zone()->name(), 24) << "^N"; diff --git a/src/core/gameinterface.h b/src/core/gameinterface.h index dbb235e..44b4230 100644 --- a/src/core/gameinterface.h +++ b/src/core/gameinterface.h @@ -27,22 +27,28 @@ public: /// type definition for the Players collection typedef std::list<Player *> Players; -/*----- inspectors ---------------------------------------------- */ + /*----- inspectors ---------------------------------------------- */ /// return the local player - inline Player *localplayer() { return &game_localplayer; } + inline Player *localplayer() { + return &game_localplayer; + } - inline Players & players() { return game_players; } + inline Players & players() { + return game_players; + } + + inline model::VertexArray *vertexarray() { + return game_vertexarray; + } - inline model::VertexArray *vertexarray() { return game_vertexarray; } - /// find the first player who's id or name matches the search string Player *find_player(const std::string &search); - + /// show a list of connected players void list_players(); -/*----- virtual inspectors --------------------------------------- */ + /*----- virtual inspectors --------------------------------------- */ /// returns true if the game server can run a time frime virtual bool running() const = 0; @@ -59,14 +65,14 @@ public: /// returns an info record virtual Info *info(const std::string &label) = 0; -/*----- mutators ------------------------------------------------- */ - + /*----- mutators ------------------------------------------------- */ + /// clear all game variables, game functions and entities void clear(); -/*----- virtual mutators ------------------------------------------ */ - + /*----- virtual mutators ------------------------------------------ */ + /// run one game time frame /// @param timestamp current application time virtual void frame(unsigned long timestamp) = 0; diff --git a/src/core/gameserver.cc b/src/core/gameserver.cc index 096d8bf..e170a4d 100644 --- a/src/core/gameserver.cc +++ b/src/core/gameserver.cc @@ -39,15 +39,15 @@ void func_time(std::string const &args) using namespace std; int minutes = (int) floorf(server()->time() / 60.0f); - int seconds = (int) floorf(server()->time() - (float) minutes* 60.0f); + int seconds = (int) floorf(server()->time() - (float) minutes * 60.0f); int syshours = sys::time() / 3600; int sysminutes = (sys::time() - syshours * 3600) / 60; int sysseconds = sys::time() % 60; - con_print << - "Uptime " << minutes << ":" << setfill('0') << setw(2) << seconds << - " Local time " << setfill(' ') << setw(2) << syshours << ":" << setfill('0') << setw(2) << sysminutes << ":" << setw(2) << sysseconds << setfill(' ') << std::endl; + con_print << + "Uptime " << minutes << ":" << setfill('0') << setw(2) << seconds << + " Local time " << setfill(' ') << setw(2) << syshours << ":" << setfill('0') << setw(2) << sysminutes << ":" << setw(2) << sysseconds << setfill(' ') << std::endl; } void func_mute(std::string const &args) @@ -78,7 +78,7 @@ void func_unmute(std::string const &args) } targetplayer->player_mute = false; - server()->broadcast("^B" +targetplayer->name() + "^B has been unmuted", targetplayer); + server()->broadcast("^B" + targetplayer->name() + "^B has been unmuted", targetplayer); targetplayer->send("^WYou have been unmuted"); } @@ -92,8 +92,8 @@ void func_kick(std::string const &args) if (!(targetplayer = console_find_player(name))) return; std::string reason; - if (args.size() > name.size()+1) - reason.assign(args.substr(name.size()+1)); + if (args.size() > name.size() + 1) + reason.assign(args.substr(name.size() + 1)); else reason.assign("forcefully removed."); @@ -105,7 +105,8 @@ void func_grant_rcon(std::string const &args) { Player *targetplayer = 0; if (!(targetplayer = console_find_player(args))) - return;} + return; +} void func_revoke_rcon(std::string const &args) { @@ -141,7 +142,7 @@ GameServer::GameServer() : GameInterface() if (server_module->interactive()) { //FIXME interferes with command line because of cmd.exec - load_config(); + load_config(); } // set the name of the game @@ -217,9 +218,9 @@ GameServer::~GameServer() Func::remove("mute"); Func::remove("unmute"); -/* Func::remove("grant_rcon"); - Func::remove("revoke_rcon"); -*/ + /* Func::remove("grant_rcon"); + Func::remove("revoke_rcon"); + */ Func::remove("time"); Func::remove("who"); @@ -233,7 +234,7 @@ unsigned long GameServer::timestamp() const float GameServer::time() const { - return ((float)(server_timestamp) / 1000.0f); + return ((float)(server_timestamp) / 1000.0f); } Info *GameServer::info(const std::string &label) @@ -250,7 +251,7 @@ bool GameServer::interactive() const { if (!server_module) { return false; - } else { + } else { return server_module->interactive(); } } @@ -320,14 +321,14 @@ void GameServer::kick(Player *player, std::string const &reason) } // broadcast an "info" message to all players -void GameServer::broadcast(const std::string text, Player *ignore_player) +void GameServer::broadcast(const std::string text, Player *ignore_player) { broadcast(Message::Info, text, ignore_player); } // broadcast a message on a specified channel to all players -void GameServer::broadcast(const Message::Channel channel, const std::string text, Player *ignore_player) +void GameServer::broadcast(const Message::Channel channel, const std::string text, Player *ignore_player) { if (!text.size()) return; @@ -370,10 +371,10 @@ void GameServer::exec(Player *player, std::string const & cmdline) cmdstream >> command; Func *function = Func::find(command); - if (function ) { + if (function) { std::string args; - if (cmdline.size() > command.size() +1 ) - args.assign(cmdline.substr(command.size()+1)); + if (cmdline.size() > command.size() + 1) + args.assign(cmdline.substr(command.size() + 1)); if ((function ->flags() & Func::Game) == Func::Game) { if ((function ->flags() & Func::Target) == Func::Target) { @@ -382,18 +383,18 @@ void GameServer::exec(Player *player, std::string const & cmdline) Entity *entity = Entity::find(id); if (entity) function->exec(player, entity); - } + } } else { function->exec(player, args); } } else if ((function->flags() & Func::Shared) == Func::Shared) { - + // enable rcon buffering console()->set_rcon(true); function->exec(args); - while(console()->rconbuf().size()) { + while (console()->rconbuf().size()) { player->message(Message::RCon, (*console()->rconbuf().begin())); console()->rconbuf().pop_front(); } @@ -444,12 +445,12 @@ void GameServer::player_disconnect(Player *player) server_module->player_disconnect(player); // manage player list - std::list<Player *>:: iterator it = game_players.begin(); + std::list<Player *>:: iterator it = game_players.begin(); while (((*it)->id() != player->id()) && (it != game_players.end())) { it++; } if (it != game_players.end()) { - game_players.erase(it); + game_players.erase(it); } } @@ -469,14 +470,14 @@ void GameServer::frame(unsigned long timestamp) } if (localplayer()->dirty()) - localplayer()->update_info(); + localplayer()->update_info(); /*if (!Cvar::sv_dedicated->value()) { update_clientstate(); }*/ if ((Cvar::sv_dedicated->value() || Cvar::sv_private->value())) { - if (core::Cvar::sv_framerate->value()) { + if (core::Cvar::sv_framerate->value()) { float f = 1000.0f / core::Cvar::sv_framerate->value(); if (server_startup + server_timestamp + f > timestamp) { return; @@ -486,15 +487,15 @@ void GameServer::frame(unsigned long timestamp) server_previoustime = server_timestamp; server_timestamp = timestamp - server_startup; - float elapsed = (float) (server_timestamp - server_previoustime) / 1000.0f; - + float elapsed = (float)(server_timestamp - server_previoustime) / 1000.0f; + // copy the previous entity state to the client state /*if (!Cvar::sv_dedicated->value()) { reset_clientstate(); }*/ // run a time frame on each entity - for (Entity::Registry::iterator it=Entity::registry().begin(); it != Entity::registry().end(); it++) { + for (Entity::Registry::iterator it = Entity::registry().begin(); it != Entity::registry().end(); it++) { Entity *entity = (*it).second; if ((entity->type() == Entity::Controlable) || (entity->type() == Entity::Dynamic)) { @@ -512,14 +513,14 @@ void GameServer::frame(unsigned long timestamp) return; } } - + if (server_network) { // send network updates server_network->frame(server_timestamp); } // mark all entities as updated - for (Entity::Registry::iterator it=Entity::registry().begin(); it != Entity::registry().end(); ) { + for (Entity::Registry::iterator it = Entity::registry().begin(); it != Entity::registry().end();) { Entity *entity = (*it).second; if (entity->entity_destroyed) { @@ -531,7 +532,7 @@ void GameServer::frame(unsigned long timestamp) ++it; } } - + if (localplayer()->zonechange()) { application()->notify_zonechange(); localplayer()->set_zonechange(false); @@ -560,7 +561,7 @@ void GameServer::save_config() ofs << std::endl; for (Cvar::Registry::iterator it = Cvar::registry().begin(); it != Cvar::registry().end(); it++) { - if ((((*it).second->flags() & Cvar::Archive) == Cvar::Archive) && (((*it).second->flags() & Cvar::Game) == Cvar::Game)){ + if ((((*it).second->flags() & Cvar::Archive) == Cvar::Archive) && (((*it).second->flags() & Cvar::Game) == Cvar::Game)) { ofs << "# " << (*it).first << " " << (*it).second->info() << std::endl; ofs << "set " << (*it).first << " " << (*it).second->str() << std::endl; ofs << std::endl; @@ -583,11 +584,11 @@ void GameServer::load_config() con_print << " reading configuration from " << filename << std::endl; char line[MAXCMDSIZE]; - while (ifs.getline(line, MAXCMDSIZE-1)) { + while (ifs.getline(line, MAXCMDSIZE - 1)) { if (line[0] && line[0] != '#' && line[0] != ';') cmd() << line << '\n'; } - + // execute commands in the buffer CommandBuffer::exec(); } diff --git a/src/core/gameserver.h b/src/core/gameserver.h index a8d96db..57feac1 100644 --- a/src/core/gameserver.h +++ b/src/core/gameserver.h @@ -25,13 +25,17 @@ public: GameServer(); virtual ~GameServer(); -/*----- inspectors ------------------------------------------------ */ + /*----- inspectors ------------------------------------------------ */ /// returns true if the game server can run a time frime - inline bool running() const { return server_running; } + inline bool running() const { + return server_running; + } /// returns true if the game server can not run a time frime - inline bool error() const { return !server_running; } + inline bool error() const { + return !server_running; + } /// returns true if the game is running an interactive module virtual bool interactive() const; @@ -43,9 +47,11 @@ public: virtual unsigned long timestamp() const; /// current module - inline const Module *module() const { return server_module; } + inline const Module *module() const { + return server_module; + } -/*----- mutators -------------------------------------------------- */ + /*----- mutators -------------------------------------------------- */ /// is called when a player connects to the game server void player_connect(Player *player); @@ -55,7 +61,7 @@ public: /// run a game server time frame void frame(unsigned long timestamp); - + /// a player sends a chat message to the public channel void say(Player *player, std::string const &args); @@ -78,15 +84,19 @@ public: void exec(Player *player, std::string const &cmdline); /// time the server was started - inline const unsigned long startup() const { return server_startup; } + inline const unsigned long startup() const { + return server_startup; + } /// returns an info record Info *info(const std::string &label); -/*----- static ---------------------------------------------------- */ - + /*----- static ---------------------------------------------------- */ + /// return the current game server - static inline GameServer *instance() { return server_instance; } + static inline GameServer *instance() { + return server_instance; + } protected: /// abort runing @@ -107,7 +117,10 @@ private: unsigned long server_startup; }; -inline GameServer *server() { return GameServer::instance(); } +inline GameServer *server() +{ + return GameServer::instance(); +} } diff --git a/src/core/info.cc b/src/core/info.cc index 93837c0..745bc3b 100644 --- a/src/core/info.cc +++ b/src/core/info.cc @@ -87,16 +87,16 @@ void Info::receive_server_update(std::istream &is) char c; // read name - while ( (is.get(c)) && (c != '"')); - while ( (is.get(c)) && (c != '"')) - n += c; + while ((is.get(c)) && (c != '"')); + while ((is.get(c)) && (c != '"')) + n += c; info_name.assign(n); // read model name n.clear(); - while ( (is.get(c)) && (c != '"')); - while ( (is.get(c)) && (c != '"')) - n += c; + while ((is.get(c)) && (c != '"')); + while ((is.get(c)) && (c != '"')) + n += c; info_modelname.assign(n); @@ -106,9 +106,9 @@ void Info::receive_server_update(std::istream &is) is >> s; for (size_t i = 0; (i < s) && is.good(); i++) { n.clear(); - while ( (is.get(c)) && (c != '"')); - while ( (is.get(c)) && (c != '"')) - n += c; + while ((is.get(c)) && (c != '"')); + while ((is.get(c)) && (c != '"')) + n += c; info_text.push_back(n); } @@ -124,7 +124,7 @@ Info::~Info() void Info::print() const { con_print << "label: ^B" << label() << " ^Nname: ^B" << name() << " ^Nmodel: ^B" << modelname() << "^N" << std::endl; - + for (Text::const_iterator it = info_text.begin(); it != info_text.end(); it++) { con_print << " " << (*it) << std::endl; } diff --git a/src/core/info.h b/src/core/info.h index 1bc62a9..8395954 100644 --- a/src/core/info.h +++ b/src/core/info.h @@ -31,15 +31,25 @@ public: typedef std::deque<std::string> Text; - inline const std::string & label() const { return info_label; } + inline const std::string & label() const { + return info_label; + } - inline const std::string & name() const { return info_name; } + inline const std::string & name() const { + return info_name; + } - inline const std::string & modelname() const { return info_modelname; } + inline const std::string & modelname() const { + return info_modelname; + } - inline const unsigned long ×tamp() const { return info_timestamp; } + inline const unsigned long ×tamp() const { + return info_timestamp; + } - inline Text & text() { return info_text; } + inline Text & text() { + return info_text; + } void set_name(const std::string & name); @@ -73,7 +83,7 @@ public: /// receive a server-to-client update from a stream void receive_server_update(std::istream &is); -/* ---- static info registry --------------------------------------- */ + /* ---- static info registry --------------------------------------- */ typedef std::map<std::string, Info*> Registry; @@ -93,7 +103,9 @@ public: static void list(); /// the info registry - static inline Registry & registry() { return info_registry; } + static inline Registry & registry() { + return info_registry; + } private: std::string info_label; diff --git a/src/core/item.cc b/src/core/item.cc index 7b4633c..53da74d 100644 --- a/src/core/item.cc +++ b/src/core/item.cc @@ -33,7 +33,7 @@ void Item::find_class(const char *label) void Item::clear() { for (Registry::iterator it = item_registry.begin(); it != item_registry.end(); it++) { - delete (*it); + delete(*it); } item_registry.clear(); } @@ -61,7 +61,7 @@ ItemClass::ItemClass(const char *label) ItemClass::~ItemClass() { for (Types::iterator it = itemclass_types.begin(); it != itemclass_types.end(); it++) { - delete (*it); + delete(*it); } } diff --git a/src/core/item.h b/src/core/item.h index 8299444..0845c21 100644 --- a/src/core/item.h +++ b/src/core/item.h @@ -10,7 +10,8 @@ #include <string> #include <vector> -namespace core { +namespace core +{ /** * @brief a specific type of item in the game @@ -21,11 +22,17 @@ class ItemType public: ItemType(const char *label); - inline const std::string &label() { return itemtype_label; } + inline const std::string &label() { + return itemtype_label; + } - inline const std::string &name() { return itemtype_name; } + inline const std::string &name() { + return itemtype_name; + } - inline const float baseprice() { return itemtype_baseprice; } + inline const float baseprice() { + return itemtype_baseprice; + } void set_name(const std::string &name); @@ -51,9 +58,13 @@ public: ItemClass(const char *label); ~ItemClass(); - inline const std::string &label() { return itemclass_label; } + inline const std::string &label() { + return itemclass_label; + } - inline const std::string &name() { return itemclass_name; } + inline const std::string &name() { + return itemclass_name; + } ItemType *find_type(const char *label); diff --git a/src/core/loader.cc b/src/core/loader.cc index 4070c2b..168b9bf 100644 --- a/src/core/loader.cc +++ b/src/core/loader.cc @@ -8,7 +8,8 @@ #include "core/loader.h" #include "sys/sys.h" -namespace core { +namespace core +{ Loader::Registry Loader::loader_registry; std::string Loader::loader_label; @@ -21,7 +22,7 @@ Loader::FactoryFuncPtr Loader::find(const char *label) else return (*it).second; } - + Loader::FactoryFuncPtr Loader::find(const std::string &label) { return (find(label.c_str())); diff --git a/src/core/loader.h b/src/core/loader.h index 1fde764..e9f7e0b 100644 --- a/src/core/loader.h +++ b/src/core/loader.h @@ -11,7 +11,8 @@ #include "core/module.h" -namespace core { +namespace core +{ /// module factory registry /** The Loader contains a list of module factories and can load @@ -21,11 +22,11 @@ class Loader { public: /// function pointer type for a module factory - typedef Module * (* FactoryFuncPtr)(); + typedef Module *(* FactoryFuncPtr)(); /// find a registered mmodule factory static FactoryFuncPtr find(const char *label); - + /// find a registered module factory static FactoryFuncPtr find(const std::string &label); @@ -38,7 +39,9 @@ public: /// assign the next module to init static bool load(const std::string &label); - static inline const std::string &label() { return loader_label; } + static inline const std::string &label() { + return loader_label; + } /// initialize a game module static Module *init(); @@ -52,7 +55,7 @@ public: private: typedef std::map<std::string, FactoryFuncPtr> Registry; - static Registry loader_registry; + static Registry loader_registry; static std::string loader_label; }; diff --git a/src/core/message.h b/src/core/message.h index b9a9661..3c53439 100644 --- a/src/core/message.h +++ b/src/core/message.h @@ -10,11 +10,12 @@ namespace core { -class Message { +class Message +{ public: /// indicates the type of message - enum Channel {Info=0, Public=1, Local=2, Private=3, RCon=4}; + enum Channel {Info = 0, Public = 1, Local = 2, Private = 3, RCon = 4}; }; } diff --git a/src/core/module.cc b/src/core/module.cc index 5dd07b5..6271331 100644 --- a/src/core/module.cc +++ b/src/core/module.cc @@ -14,7 +14,7 @@ namespace core Module* Module::module_instance = 0; Module::Module(const char *name, bool interactive) : - module_name(name) + module_name(name) { module_running = true; module_interactive = interactive; diff --git a/src/core/module.h b/src/core/module.h index 76b1ba4..ac6b380 100644 --- a/src/core/module.h +++ b/src/core/module.h @@ -17,26 +17,36 @@ namespace core class Module { public: - Module(const char *name, bool interactive=true); + Module(const char *name, bool interactive = true); virtual ~Module(); -/*----- inspectors ------------------------------------------------ */ + /*----- inspectors ------------------------------------------------ */ /// return true if the game module can run a timeframe - inline bool running() const { return module_running; } + inline bool running() const { + return module_running; + } /// return true if the game module can not run a timeframe - inline bool error() const { return !module_running; } + inline bool error() const { + return !module_running; + } /// label of the module - inline std::string const & label() const { return module_label; } + inline std::string const & label() const { + return module_label; + } /// return the name of the module - inline std::string const & name() const { return module_name; } + inline std::string const & name() const { + return module_name; + } /// indicates if this is an interactive module or not - inline bool interactive() const { return module_interactive; } + inline bool interactive() const { + return module_interactive; + } -/*----- mutators -------------------------------------------------- */ + /*----- mutators -------------------------------------------------- */ /// run one game frame virtual void frame(float seconds) = 0; @@ -50,7 +60,9 @@ public: /// set the module label void set_label(const std::string &label); - static inline Module *instance() { return module_instance; } + static inline Module *instance() { + return module_instance; + } protected: /// abort a running module @@ -61,7 +73,7 @@ private: bool module_running; std::string module_label; - std::string module_name; + std::string module_name; static Module* module_instance; }; diff --git a/src/core/netclient.cc b/src/core/netclient.cc index 253cf4f..46694a6 100644 --- a/src/core/netclient.cc +++ b/src/core/netclient.cc @@ -46,10 +46,10 @@ NetClient::NetClient(std::string host, int port, int fd) : abort(); return; } - + sendq.clear(); messageblock.clear(); - + client_keepalive = application()->time(); client_timeout = application()->time(); @@ -69,25 +69,27 @@ void NetClient::abort() std::string NetClient::host() const { - return client_host; + return client_host; } int NetClient::port() const { - return client_port; + return client_port; } -Player *NetClient::player() +Player *NetClient::player() { return client_player; } -bool NetClient::has_messages() const { - return (recvq.size() > 0 ); +bool NetClient::has_messages() const +{ + return (recvq.size() > 0); } -void NetClient::retreive(std::string & message) { - if (recvq.size() > 0 ) { +void NetClient::retreive(std::string & message) +{ + if (recvq.size() > 0) { message.assign(recvq.front()); recvq.pop_front(); } else { @@ -101,9 +103,9 @@ void NetClient::receive(char *data) const char *c = data; while (*c) { - if (( *c == '\n') || (*c == '\r')) { - if (messageblock.size() > 0 ) { - recvq.push_back(messageblock); + if ((*c == '\n') || (*c == '\r')) { + if (messageblock.size() > 0) { + recvq.push_back(messageblock); messageblock.clear(); } } else { @@ -117,7 +119,7 @@ void NetClient::receive(char *data) c++; } - client_timeout = application()->time(); + client_timeout = application()->time(); } void NetClient::send_raw(std::string const &msg) @@ -125,7 +127,7 @@ void NetClient::send_raw(std::string const &msg) if (error()) return; - if ((sendq.size()) && (sendq.size() + msg.size() >= BLOCKSIZE - 16 )) { + if ((sendq.size()) && (sendq.size() + msg.size() >= BLOCKSIZE - 16)) { transmit(); } @@ -135,12 +137,12 @@ void NetClient::send_raw(std::string const &msg) void NetClient::transmit() { if (!sendq.size()) { - if (client_keepalive + NETTIMEOUT/2 < application()->time()) { + if (client_keepalive + NETTIMEOUT / 2 < application()->time()) { sendq.assign("ping\n"); } else { return; } - } else if (sendq.size() >= BLOCKSIZE - 16 ) { + } else if (sendq.size() >= BLOCKSIZE - 16) { con_warn << host() << ":" << port() << " outgoing data exceeds " << BLOCKSIZE - 16 << " bytes!\n"; sendq.clear(); return; @@ -152,17 +154,17 @@ void NetClient::transmit() uLong uncompressed_size = (uLong) sendq.size(); size_t total_size = 0; - memset(zbuf,0, sizeof(zbuf)); + memset(zbuf, 0, sizeof(zbuf)); Stats::network_uncompressed_bytes_sent += sendq.size(); // zlib compress - int status = compress((Bytef*)(zbuf+4), &compressed_size, (Bytef*)sendq.c_str(), uncompressed_size); + int status = compress((Bytef*)(zbuf + 4), &compressed_size, (Bytef*)sendq.c_str(), uncompressed_size); if ((status == Z_OK) && (compressed_size + 4 < sendq.size())) { // add a header to the compress packet data = (char *) zbuf; - total_size = (size_t) (compressed_size + 4); + total_size = (size_t)(compressed_size + 4); zbuf[0] = '\xff'; zbuf[1] = '\xff'; zbuf[2] = compressed_size % 256; @@ -171,12 +173,12 @@ void NetClient::transmit() data = sendq.c_str(); total_size = sendq.size(); } - + size_t total_sent = 0; while (total_sent < total_size && !error()) { ssize_t bytes_sent = ::sendto(fd(), data, total_size - total_sent, 0, - (struct sockaddr *)&client_addr, sizeof(client_addr)); + (struct sockaddr *) & client_addr, sizeof(client_addr)); if (bytes_sent < 0) { abort(); diff --git a/src/core/netclient.h b/src/core/netclient.h index c0cdf8d..818422e 100644 --- a/src/core/netclient.h +++ b/src/core/netclient.h @@ -43,14 +43,14 @@ namespace core class NetClient { public: - NetClient(std::string host, int port, int fd); - ~NetClient(); + NetClient(std::string host, int port, int fd); + ~NetClient(); - /// the remote hostname the client is connected to - std::string host() const; + /// the remote hostname the client is connected to + std::string host() const; - /// the remote port the client is connected to - int port() const; + /// the remote port the client is connected to + int port() const; /// the player info associated with this client Player *player(); @@ -69,32 +69,38 @@ public: /// transmit messages in the send queue to the remote client void transmit(); - - inline bool error() const { return client_error; } + + inline bool error() const { + return client_error; + } void abort(); - enum State {Connecting=0, Pending=1, Connected=2}; + enum State {Connecting = 0, Pending = 1, Connected = 2}; + + inline State state() const { + return client_state; + } - inline State state() const { return client_state; } - State client_state; - + float client_timeout; float client_keepalive; private: - inline int fd() const { return client_fd; } + inline int fd() const { + return client_fd; + } struct sockaddr_in client_addr; - std::string client_host; - int client_port; + std::string client_host; + int client_port; int client_fd; bool client_error; NetPlayer *client_player; - - std::string messageblock; + + std::string messageblock; std::deque<std::string> recvq; std::string sendq; }; diff --git a/src/core/netconnection.cc b/src/core/netconnection.cc index 81f5b48..c37fe05 100644 --- a/src/core/netconnection.cc +++ b/src/core/netconnection.cc @@ -16,7 +16,7 @@ #include "core/player.h" #include "core/stats.h" -namespace core +namespace core { NetConnection::NetConnection() @@ -37,7 +37,7 @@ NetConnection::~NetConnection() void NetConnection::abort() { - connection_error= true; + connection_error = true; } void NetConnection::connect(std::string const &to_host, int to_port) @@ -48,7 +48,7 @@ void NetConnection::connect(std::string const &to_host, int to_port) if (valid()) return; - + // resolve serverhostname struct hostent *serverhostent; serverhostent = gethostbyname(to_host.c_str()); @@ -57,7 +57,7 @@ void NetConnection::connect(std::string const &to_host, int to_port) abort(); return; } - + // Get a socket file descriptor connection_fd = socket(PF_INET, SOCK_DGRAM, 0); if (connection_fd == -1) { @@ -65,7 +65,7 @@ void NetConnection::connect(std::string const &to_host, int to_port) abort(); return; } - + // make the connection server_addr.sin_family = AF_INET; server_addr.sin_port = htons(to_port); @@ -77,7 +77,7 @@ void NetConnection::connect(std::string const &to_host, int to_port) abort(); return; } - + connection_host = to_host; connection_port = to_port; connection_error = false; @@ -94,10 +94,10 @@ void NetConnection::connect(std::string const &to_host, int to_port) connection_state = Pending; game()->localplayer()->set_dirty(); - std::stringstream str; - str << "Connecting to " << inet_ntoa(*((struct in_addr *)serverhostent->h_addr)) << ":" << to_port << "..."; - con_print << str.str() << std::endl; - application()->notify_loader(str.str()); + std::stringstream str; + str << "Connecting to " << inet_ntoa(*((struct in_addr *)serverhostent->h_addr)) << ":" << to_port << "..."; + con_print << str.str() << std::endl; + application()->notify_loader(str.str()); } void NetConnection::disconnect() @@ -114,7 +114,7 @@ void NetConnection::disconnect() close(connection_fd); #endif } - + connection_fd = -1; connection_error = false; connection_host.clear(); @@ -145,9 +145,9 @@ void NetConnection::receive() return; ssize_t bytes_received; - + memset(recvbuf, 0, BLOCKSIZE); - bytes_received = ::recv(connection_fd, recvbuf, BLOCKSIZE-1, 0); + bytes_received = ::recv(connection_fd, recvbuf, BLOCKSIZE - 1, 0); Stats::network_bytes_received += bytes_received; connection_timeout = core::application()->time(); @@ -173,7 +173,7 @@ void NetConnection::receive() // uncompress char zunbuf[BLOCKSIZE*2]; memset(zunbuf, 0, sizeof(zunbuf)); - uLong zunbuf_size = (uLong) BLOCKSIZE*2 - 1; + uLong zunbuf_size = (uLong) BLOCKSIZE * 2 - 1; int status = uncompress((Bytef *) zunbuf, &zunbuf_size, (Bytef *) zrecvbuf, (uLong) compressed_size); @@ -182,7 +182,7 @@ void NetConnection::receive() } else { const char *zc = zunbuf; while (*zc) { - if (( *zc == '\n') || (*zc == '\r')) { + if ((*zc == '\n') || (*zc == '\r')) { if (messageblock.size()) { recvq.push_back(messageblock); messageblock.clear(); @@ -204,22 +204,22 @@ void NetConnection::receive() received_compressed_size = 0; compressed_size = 0; } - } else if (!messageblock.size() && (bytes_received > 3 ) && ( *c == '\xff') && (*(c+1) == '\xff')) { - - receive_compressed = true; - received_compressed_size = 0; - compressed_size = (uLong) (*(unsigned char *)(c+2) + (*(unsigned char *)(c+3) << 8)); - c += 3; - bytes_received -= 3; - memset(zrecvbuf, 0, sizeof(zrecvbuf)); - if (compressed_size > BLOCKSIZE) { - con_warn << "Incoming compressed datablock exceeds " << BLOCKSIZE << " bytes!\n"; - receive_compressed = false; - } + } else if (!messageblock.size() && (bytes_received > 3) && (*c == '\xff') && (*(c + 1) == '\xff')) { + + receive_compressed = true; + received_compressed_size = 0; + compressed_size = (uLong)(*(unsigned char *)(c + 2) + (*(unsigned char *)(c + 3) << 8)); + c += 3; + bytes_received -= 3; + memset(zrecvbuf, 0, sizeof(zrecvbuf)); + if (compressed_size > BLOCKSIZE) { + con_warn << "Incoming compressed datablock exceeds " << BLOCKSIZE << " bytes!\n"; + receive_compressed = false; + } - } else if (( *c == '\n') || (*c == '\r')) { + } else if ((*c == '\n') || (*c == '\r')) { if (messageblock.size()) { - recvq.push_back(messageblock); + recvq.push_back(messageblock); messageblock.clear(); } } else { @@ -243,7 +243,7 @@ void NetConnection::frame() timeout.tv_usec = 0; fd_set readset = clientset; - int nb = select(fd()+1, &readset, NULL, NULL, &timeout); + int nb = select(fd() + 1, &readset, NULL, NULL, &timeout); if (nb == 0) { if (connection_timeout + NETTIMEOUT < core::application()->time()) { con_error << "Connection timeout!\n"; @@ -266,7 +266,7 @@ void NetConnection::frame() parse_incoming_message(message); } - nb = select(fd()+1, &readset, NULL, NULL, &timeout); + nb = select(fd() + 1, &readset, NULL, NULL, &timeout); if (nb == 0) { return; } @@ -284,9 +284,9 @@ void NetConnection::transmit() if (error() || invalid()) return; - + if (!sendq.size()) { - if (connection_keepalive + NETTIMEOUT /2 < application()->time()) { + if (connection_keepalive + NETTIMEOUT / 2 < application()->time()) { sendq.assign("ping\n"); } else { return; @@ -296,18 +296,18 @@ void NetConnection::transmit() sendq.clear(); return; } - + ssize_t bytes_sent = 0; - + while (sendq.size()) { - bytes_sent = ::sendto(connection_fd, sendq.c_str(), sendq.size(), 0, (struct sockaddr *)&server_addr, sizeof(server_addr)); + bytes_sent = ::sendto(connection_fd, sendq.c_str(), sendq.size(), 0, (struct sockaddr *) & server_addr, sizeof(server_addr)); if (bytes_sent <= 0) { con_error << "Network send() error!" << std::endl; //perror("send"); abort(); return; } - + // assert (bytes_sent <= sendbuf.size()); sendq.erase(0, bytes_sent); Stats::network_bytes_sent += bytes_sent; @@ -334,7 +334,7 @@ void NetConnection::send_raw(std::string const &msg) * priv <text> */ -// send a "connect" message to the server +// send a "connect" message to the server void NetConnection::send_connect() { std::ostringstream msg; @@ -441,18 +441,18 @@ void NetConnection::send_info_request(Info *info) void NetConnection::parse_incoming_message(const std::string & message) { std::istringstream msgstream(message); - + std::string command; msgstream >> command; - + if (command == "msg") { std::string level; if (msgstream >> level) { - if (level =="info") { + if (level == "info") { if (message.size() > 9) { application()->notify_message(Message::Info, message.substr(9)); } - } else if (level =="rcon") { + } else if (level == "rcon") { if (message.size() > 9) { application()->notify_message(Message::RCon, message.substr(9)); } @@ -465,7 +465,7 @@ void NetConnection::parse_incoming_message(const std::string & message) // FIXME - separate sender nickname if (message.size() > 12) { application()->notify_message(Message::Private, message.substr(12)); - } + } } else if (level == "snd") { if (message.size() > 8) { application()->notify_sound(message.substr(8).c_str()); @@ -503,7 +503,7 @@ void NetConnection::parse_incoming_message(const std::string & message) if (msgstream >> id) { //con_debug << "Received die entity id " << id << std::endl; Entity *e = Entity::find(id); - if (localcontrol() == e) + if (localcontrol() == e) localplayer()->set_control(0); if (e) Entity::erase(id); @@ -525,26 +525,25 @@ void NetConnection::parse_incoming_message(const std::string & message) Entity *entity = Entity::find(id); if (!entity) { - switch (type) - { - case Entity::Default: - entity = new Entity(msgstream); - break; - case Entity::Dynamic: - entity = new EntityDynamic(msgstream); - break; - case Entity::Controlable: - entity = new EntityControlable(msgstream); - break; - case Entity::Globe: - entity = new EntityGlobe(msgstream); - break; - default: - con_warn << "Received create for unknown entity type " << type << "!" << std::endl; - return; - break; + switch (type) { + case Entity::Default: + entity = new Entity(msgstream); + break; + case Entity::Dynamic: + entity = new EntityDynamic(msgstream); + break; + case Entity::Controlable: + entity = new EntityControlable(msgstream); + break; + case Entity::Globe: + entity = new EntityGlobe(msgstream); + break; + default: + con_warn << "Received create for unknown entity type " << type << "!" << std::endl; + return; + break; } - + Entity::add(entity, id); } @@ -560,7 +559,7 @@ void NetConnection::parse_incoming_message(const std::string & message) con_warn << "Received menu for NULL entity!" << std::endl; return; } - + Entity *entity = Entity::find(id); if (!entity) { con_warn << "Received menu for unknown entity " << id << "!" << std::endl; @@ -591,7 +590,7 @@ void NetConnection::parse_incoming_message(const std::string & message) if (id) { //con_debug << "Received zone " << id << std::endl; Zone * zone = Zone::find(id); - + // create the zone if necessary if (!zone) { zone = new Zone(msgstream); @@ -618,18 +617,18 @@ void NetConnection::parse_incoming_message(const std::string & message) if (!player_id) { Zone *oldzone = connection()->localplayer()->zone(); connection()->localplayer()->receive_server_update(msgstream); - + //con_debug << "zone " << ( connection()->localplayer()->zone() ? connection()->localplayer()->zone()->id() : 0) << std::endl; - + if (connection()->localplayer()->zonechange() && oldzone && (oldzone != connection()->localplayer()->zone())) { - + // notify the applciation to clear none-core zone assets (textures etc) application()->notify_zonechange(); - + // delete all entities in the old zone - for (Entity::Registry::iterator it=Entity::registry().begin(); it != Entity::registry().end(); ) { + for (Entity::Registry::iterator it = Entity::registry().begin(); it != Entity::registry().end();) { Entity *entity = (*it).second; - + if ((entity->zone() == oldzone)) { delete entity; Entity::registry().erase(it++); @@ -640,7 +639,7 @@ void NetConnection::parse_incoming_message(const std::string & message) oldzone->content().clear(); } - // short "pif" message about a different player + // short "pif" message about a different player } else if (player_id != localplayer()->id()) { // find player @@ -648,7 +647,7 @@ void NetConnection::parse_incoming_message(const std::string & message) // search other players for (GameInterface::Players::iterator it = game()->players().begin(); it != game()->players().end() && !player; it++) { - if( (*it)->id() == player_id) { + if ((*it)->id() == player_id) { player = (*it); } } @@ -664,7 +663,7 @@ void NetConnection::parse_incoming_message(const std::string & message) } else if (command == "pid") { con_debug << "Received player disconnect info" << std::endl; - + int player_id; if (!(msgstream >> player_id)) { con_warn << "Received illegal player disconnect message!" << std::endl; @@ -680,7 +679,7 @@ void NetConnection::parse_incoming_message(const std::string & message) // search other players Player *player = 0; for (GameInterface::Players::iterator it = game()->players().begin(); it != game()->players().end() && !player; it++) { - if( (*it)->id() == player_id) { + if ((*it)->id() == player_id) { game()->players().erase(it); return; } @@ -691,9 +690,9 @@ void NetConnection::parse_incoming_message(const std::string & message) std::string label; char c; - while ( (msgstream.get(c)) && (c != '"')); - while ( (msgstream.get(c)) && (c != '"')) - label += c; + while ((msgstream.get(c)) && (c != '"')); + while ((msgstream.get(c)) && (c != '"')) + label += c; if (label.size()) { Info *info = Info::find(label); @@ -708,8 +707,7 @@ void NetConnection::parse_incoming_message(const std::string & message) con_warn << "Received empty information record!" << std::endl; } } else if (command == "sup") { - if (connection_state == Connected) - { + if (connection_state == Connected) { unsigned int id; if (msgstream >> id) { //con_debug << "Received update entity id " << id << std::endl; diff --git a/src/core/netconnection.h b/src/core/netconnection.h index 7c0b23d..36cf154 100644 --- a/src/core/netconnection.h +++ b/src/core/netconnection.h @@ -41,10 +41,10 @@ class NetConnection public: NetConnection(); virtual ~NetConnection(); - + /// connect to a remote host virtual void connect(std::string const &to_host, int to_port); - + /// disconnect from a remote host virtual void disconnect(); @@ -80,28 +80,46 @@ public: void abort(); - inline int fd() const { return connection_fd; } - - inline std::string host() const { return connection_host; } + inline int fd() const { + return connection_fd; + } + + inline std::string host() const { + return connection_host; + } - inline int port() const { return connection_port; } + inline int port() const { + return connection_port; + } - inline bool valid() const { return (connection_fd != -1); } + inline bool valid() const { + return (connection_fd != -1); + } - inline bool invalid() const { return (connection_fd == -1); } + inline bool invalid() const { + return (connection_fd == -1); + } - inline bool error() const { return connection_error; } + inline bool error() const { + return connection_error; + } - inline bool connected() const { return ((connection_fd != -1) && !connection_error); } + inline bool connected() const { + return ((connection_fd != -1) && !connection_error); + } - enum State {Connecting=0, Pending=1, Connected=2}; + enum State {Connecting = 0, Pending = 1, Connected = 2}; + + inline State state() const { + return connection_state; + } - inline State state() const { return connection_state; } - State connection_state; /// return the current game time - inline unsigned long timestamp() const { return connection_timestamp; } + inline unsigned long timestamp() const { + return connection_timestamp; + } protected: /// send a ping reply @@ -121,13 +139,13 @@ protected: /// parse an incoming message void parse_incoming_message(const std::string & message); - + private: - std::string messageblock; + std::string messageblock; std::deque<std::string> recvq; std::string sendq; fd_set clientset; - + float connection_timeout; float connection_keepalive; int connection_fd; diff --git a/src/core/netplayer.cc b/src/core/netplayer.cc index 0b3455f..0935b4c 100644 --- a/src/core/netplayer.cc +++ b/src/core/netplayer.cc @@ -37,7 +37,7 @@ void NetPlayer::message(const Message::Channel channel, const std::string text) return; std::string msg_channel; - switch(channel) { + switch (channel) { case core::Message::Info: // Info message msg_channel.assign("info"); break; @@ -53,7 +53,7 @@ void NetPlayer::message(const Message::Channel channel, const std::string text) case core::Message::Private: // Private chat message msg_channel.assign("private"); break; - + case core::Message::RCon: // RCon message msg_channel.assign("rcon"); break; @@ -63,7 +63,7 @@ void NetPlayer::message(const Message::Channel channel, const std::string text) return; break; } - + std::string msg("msg "); msg.append(msg_channel); msg += ' '; diff --git a/src/core/netplayer.h b/src/core/netplayer.h index 5659e2e..ada1bd0 100644 --- a/src/core/netplayer.h +++ b/src/core/netplayer.h @@ -22,10 +22,12 @@ namespace core class NetPlayer : public Player { public: - NetPlayer(NetClient *client); - virtual ~NetPlayer(); + NetPlayer(NetClient *client); + virtual ~NetPlayer(); - NetClient *client() { return player_client; } + NetClient *client() { + return player_client; + } virtual void message(const Message::Channel channel, const std::string text); virtual void sound(const std::string name); diff --git a/src/core/netserver.cc b/src/core/netserver.cc index 83bbd6e..1ae928b 100644 --- a/src/core/netserver.cc +++ b/src/core/netserver.cc @@ -34,7 +34,7 @@ #include "core/zone.h" #ifdef _WIN32 - typedef int socklen_t; +typedef int socklen_t; #endif namespace core @@ -56,13 +56,13 @@ NetServer::NetServer(std::string const host, unsigned int const port) return; } - + // Get the local adress to bind to netserver_addr.sin_family = AF_INET; netserver_addr.sin_port = htons(port); if (host.size()) { netserver_addr.sin_addr.s_addr = inet_addr(host.c_str()); - if ( netserver_addr.sin_addr.s_addr == INADDR_NONE) { + if (netserver_addr.sin_addr.s_addr == INADDR_NONE) { con_error << "Network invalid address " << host << "!" << std::endl; return; } @@ -70,14 +70,14 @@ NetServer::NetServer(std::string const host, unsigned int const port) netserver_addr.sin_addr.s_addr = htonl(INADDR_ANY); } memset(netserver_addr.sin_zero, '\0', sizeof(netserver_addr.sin_zero)); - + // bind the local address to the socket ( note the typecast) if (::bind(netserver_fd, (struct sockaddr *) &netserver_addr, sizeof(struct sockaddr)) == -1) { con_error << "Network can't bind to local address!" << std::endl; //perror("bind"); return; } - + con_print << " listening on " << inet_ntoa(netserver_addr.sin_addr) << ":" << ntohs(netserver_addr.sin_port) << std::endl; // add the listening socket to the file descriptor set @@ -101,13 +101,13 @@ NetServer::~NetServer() for (it = clients.begin(); it != clients.end(); it++) { // notify the game server - if ((*it)->state() == NetClient::Connected) + if ((*it)->state() == NetClient::Connected) server()->player_disconnect((*it)->player()); (*it)->send_raw(netmsg); (*it)->transmit(); - - delete (*it); + + delete(*it); } clients.clear(); @@ -120,7 +120,8 @@ NetServer::~NetServer() } } -void NetServer::abort() { +void NetServer::abort() +{ netserver_error = true; } @@ -138,8 +139,8 @@ NetClient *NetServer::find_client(Player const *player) // remove disconnected clients void NetServer::reap() { - for (Clients:: iterator it = clients.begin(); it != clients.end(); ) { - NetClient *client = *it; + for (Clients:: iterator it = clients.begin(); it != clients.end();) { + NetClient *client = *it; if (client->client_timeout + NETTIMEOUT < application()->time()) { // client timed out, send a disconnect @@ -157,8 +158,8 @@ void NetServer::reap() } } - if (client->error()) { - + if (client->error()) { + // notify other clients for (Clients::iterator cit = clients.begin(); cit != clients.end(); cit++) { if ((*cit) != (*it)) { @@ -172,13 +173,13 @@ void NetServer::reap() } // remove the client - delete client; + delete client; clients.erase(it++); - } else { + } else { ++it; } - } + } } void NetServer::receive() @@ -191,7 +192,7 @@ void NetServer::receive() timeout.tv_usec = 2500; fd_set readset = serverset; - int nb = select(fd()+1, &readset, NULL, NULL, &timeout); + int nb = select(fd() + 1, &readset, NULL, NULL, &timeout); if (nb == -1) { #ifndef _WIN32 // ncurses needs SIGWINCH catched @@ -204,13 +205,13 @@ void NetServer::receive() return; } - if (nb && FD_ISSET(fd(), &readset)) { + if (nb && FD_ISSET(fd(), &readset)) { // receive incoming data struct sockaddr_in client_addr; socklen_t client_addr_len = sizeof(client_addr); memset(recbuf, '\0', sizeof(recbuf)); - ssize_t bytes_received = ::recvfrom(fd(), recbuf, FRAMESIZE-1, 0, (struct sockaddr *)&client_addr, &client_addr_len); + ssize_t bytes_received = ::recvfrom(fd(), recbuf, FRAMESIZE - 1, 0, (struct sockaddr *) & client_addr, &client_addr_len); if (bytes_received == -1) { con_error << "Network error on recvfrom()!" << std::endl; this->abort(); @@ -221,19 +222,19 @@ void NetServer::receive() Stats::network_bytes_received += bytes_received; // originator - std::string client_host (inet_ntoa(client_addr.sin_addr)); + std::string client_host(inet_ntoa(client_addr.sin_addr)); unsigned int client_port = ntohs(client_addr.sin_port); - + // get messages from clients bool msg_received = false; for (Clients::iterator it = clients.begin(); it != clients.end() && !msg_received; it++) { NetClient *client = *it; - + if ((client->host() == client_host) && (client->port() == (int) client_port)) { // receive data client->receive(recbuf); - + // process parsed messages while (client->has_messages()) { std::string message; @@ -253,7 +254,7 @@ void NetServer::receive() if (client) { // receive data client->receive(recbuf); - + // process parsed messages while (client->has_messages()) { std::string message; @@ -264,7 +265,7 @@ void NetServer::receive() } } - + // remove dead connections reap(); } @@ -286,7 +287,8 @@ NetClient * NetServer::client_connect(std::string const host, int const port) return client; } -void NetServer::client_initialize(NetClient *client) { +void NetServer::client_initialize(NetClient *client) +{ // send welcome message std::string welcome("^B"); @@ -328,12 +330,12 @@ void NetServer::client_frame(NetClient *client, unsigned long timestamp) // send zone info send_zone_update(client, zone); - + // send entities in zone - if (client->player()->zone()) { + if (client->player()->zone()) { for (Zone::Content::iterator it = zone->content().begin(); it != zone->content().end(); it++) { Entity *entity = (*it); - + if (!entity->entity_destroyed) { send_entity_create(client, entity); } @@ -345,25 +347,25 @@ void NetServer::client_frame(NetClient *client, unsigned long timestamp) } else { // send a server frame marker send_frame_marker(client, timestamp); - + // send updates for entities in the zone for (Entity::Registry::iterator it = Entity::registry().begin(); it != Entity::registry().end(); it++) { Entity *entity = (*it).second; - if (entity->zone() == zone) { + if (entity->zone() == zone) { if (entity->entity_destroyed) { if (!entity->entity_created) { send_entity_delete(client, entity); } } else if (entity->entity_created) { send_entity_create(client, entity); - + } else if (entity->oldzone()) { // this entity has entered the zone send_entity_create(client, entity); - - } else if (entity->dirty() && !(entity->flags() & Entity::Static) ) { - + + } else if (entity->dirty() && !(entity->flags() & Entity::Static)) { + // FIXME only within visual range send_entity_update(client, entity); } @@ -408,7 +410,7 @@ void NetServer::frame(unsigned long timestamp) client->transmit(); } - + // clear dirty state for (Clients::iterator it = clients.begin(); it != clients.end(); it++) { NetClient *client = *it; @@ -468,7 +470,7 @@ void NetServer::send_frame_marker(NetClient *client, unsigned long timestamp) if (client->state() == NetClient::Connected) { client->send_raw(msg.str()); } - + } // send a "ent" create entity message to all clients @@ -533,7 +535,7 @@ void NetServer::send_player_update(NetClient *client) { std::ostringstream msg; msg << "pif 0 "; - client->player()->serialize_server_update(msg); + client->player()->serialize_server_update(msg); msg << '\n'; client->send_raw(msg.str()); } @@ -543,7 +545,7 @@ void NetServer::send_player_update(NetClient *client, Player *player) { std::ostringstream msg; msg << "pif " << player->id() << ' '; - player->serialize_short_server_update(msg); + player->serialize_short_server_update(msg); msg << '\n'; client->send_raw(msg.str()); } @@ -579,18 +581,18 @@ void NetServer::send_info_update(NetClient *client, Info *info) * ping * say <text> * priv <player> <text> - * + * */ -void NetServer::parse_incoming_message(NetClient *client, const std::string & message) +void NetServer::parse_incoming_message(NetClient *client, const std::string & message) { if (!message.size()) return; std::stringstream msgstream(message); - + std::string command; msgstream >> command; - + // disconnect if (command == "disconnect") { client->abort(); @@ -621,7 +623,7 @@ void NetServer::parse_incoming_message(NetClient *client, const std::string & me } else { std::string message("Unknown client protocol version!"); con_print << client->host() << ":" << client->port() << " " << message << std::endl; - + send_message(client, "info", message); send_disconnect(client); } @@ -662,8 +664,8 @@ void NetServer::parse_incoming_message(NetClient *client, const std::string & me // cmd if (command == "cmd") { - if (message.size() > command.size()+1) { - std::string cmdline(message.substr(command.size()+1)); + if (message.size() > command.size() + 1) { + std::string cmdline(message.substr(command.size() + 1)); server()->exec(client->player(), cmdline); } return; @@ -672,9 +674,9 @@ void NetServer::parse_incoming_message(NetClient *client, const std::string & me if (command == "inf") { std::string n; char c; - - while ( (msgstream.get(c)) && (c != '"')); - while ( (msgstream.get(c)) && (c != '"')) + + while ((msgstream.get(c)) && (c != '"')); + while ((msgstream.get(c)) && (c != '"')) n += c; if (n.size()) { @@ -687,21 +689,21 @@ void NetServer::parse_incoming_message(NetClient *client, const std::string & me } if (command == "rcon") { - if ((message.size() > command.size()+1) && Cvar::sv_password->str().size()) { + if ((message.size() > command.size() + 1) && Cvar::sv_password->str().size()) { if ((Cvar::sv_password->str().compare(client->player()->rconpassword()) == 0)) { - con_print << "^B" << client->player()->name() << "^F rcon: " << message.substr(command.size()+1) << std::endl; - + con_print << "^B" << client->player()->name() << "^F rcon: " << message.substr(command.size() + 1) << std::endl; + core::CommandBuffer::exec(); core::console()->set_rcon(true); - - core::cmd() << message.substr(command.size()+1) << "\n"; + + core::cmd() << message.substr(command.size() + 1) << "\n"; core::CommandBuffer::exec(); - - while(console()->rconbuf().size()) { + + while (console()->rconbuf().size()) { send_message(client, "rcon", (*console()->rconbuf().begin())); core::console()->rconbuf().pop_front(); } - + // disable rcon buffering console()->set_rcon(false); @@ -711,7 +713,7 @@ void NetServer::parse_incoming_message(NetClient *client, const std::string & me } } return; - + } // cup - client update entity if (command == "cup") { @@ -722,13 +724,13 @@ void NetServer::parse_incoming_message(NetClient *client, const std::string & me if (!entity) { con_warn << client->host() << ":" << client->port() << " update for unknown entity " << id << "\n"; return; - } + } if (entity->type() != Entity::Controlable) { con_warn << client->host() << ":" << client->port() << " update for non-controlable entity " << id << "\n"; return; } - + EntityControlable *entitycontrolable = (EntityControlable *)entity; if (entitycontrolable->owner() != client->player()) { @@ -737,27 +739,27 @@ void NetServer::parse_incoming_message(NetClient *client, const std::string & me } entitycontrolable->set_dirty(true); - entitycontrolable->receive_client_update(msgstream); + entitycontrolable->receive_client_update(msgstream); } return; } // say - if (command == "say") { - if (message.size() > command.size()+1) { - server()->say(client->player(), message.substr(command.size()+1)); + if (command == "say") { + if (message.size() > command.size() + 1) { + server()->say(client->player(), message.substr(command.size() + 1)); } return; } // priv if (command == "priv") { - if (message.size() > command.size()+1) { - server()->private_message(client->player(), message.substr(command.size()+1)); + if (message.size() > command.size() + 1) { + server()->private_message(client->player(), message.substr(command.size() + 1)); } return; } - + } } diff --git a/src/core/netserver.h b/src/core/netserver.h index e54ea2e..afbb5a0 100644 --- a/src/core/netserver.h +++ b/src/core/netserver.h @@ -21,7 +21,7 @@ #include "core/player.h" #include "core/info.h" -namespace core +namespace core { /// network server @@ -32,26 +32,34 @@ public: typedef std::list<NetClient *> Clients; /// create a new network server, listening on host:port - NetServer(std::string const host, unsigned int const port); + NetServer(std::string const host, unsigned int const port); /// disconnect clients and shutdown the network server - ~NetServer(); - -/*----- inspectors ------------------------------------------------ */ + ~NetServer(); + + /*----- inspectors ------------------------------------------------ */ /// Returns true if the TCP server has a valid file descriptor - inline bool valid() const { return netserver_fd != -1; } - + inline bool valid() const { + return netserver_fd != -1; + } + /// Returns true if the TCP server has an invalid file descriptor - inline bool invalid() const { return netserver_fd == -1; } - + inline bool invalid() const { + return netserver_fd == -1; + } + /// Returns the error state of the TCP server - inline bool error() const { return netserver_error; } + inline bool error() const { + return netserver_error; + } /// Return the socket file descriptor - inline int fd() const { return netserver_fd; } + inline int fd() const { + return netserver_fd; + } -/*----- mutators -------------------------------------------------- */ + /*----- mutators -------------------------------------------------- */ /// run a network server frame void frame(unsigned long timestamp); @@ -74,7 +82,7 @@ protected: /// send a create entity event void send_entity_create(NetClient *client, Entity *entity); - + /// broadcast a delete entity event void send_entity_delete(NetClient *client, Entity *entity); @@ -99,14 +107,14 @@ protected: /// set the error state void abort(); - /// called when a new client connects - NetClient *client_connect(std::string const host, int const port); + /// called when a new client connects + NetClient *client_connect(std::string const host, int const port); /// called when a client has send the intial handshake void client_initialize(NetClient *client); - /// remove terminated clients - void reap(); + /// remove terminated clients + void reap(); /// parse incoming client messages void parse_incoming_message(NetClient *client, const std::string & message); @@ -124,7 +132,7 @@ private: char recbuf[FRAMESIZE]; - Clients clients; + Clients clients; }; } diff --git a/src/core/parser.cc b/src/core/parser.cc index 84590a2..c5e0a38 100644 --- a/src/core/parser.cc +++ b/src/core/parser.cc @@ -8,7 +8,8 @@ #include "core/parser.h" #include "sys/sys.h" -namespace core { +namespace core +{ bool Parser::got_entity_key(filesystem::IniFile &inifile, core::Entity *entity) diff --git a/src/core/parser.h b/src/core/parser.h index 78a1087..06ddc27 100644 --- a/src/core/parser.h +++ b/src/core/parser.h @@ -11,10 +11,12 @@ #include "filesystem/inifile.h" #include "core/entity.h" -namespace core { +namespace core +{ /// general parser routines -class Parser { +class Parser +{ public: /// read default entity keys from an ini file static bool got_entity_key(filesystem::IniFile &inifile, core::Entity *entity); diff --git a/src/core/player.cc b/src/core/player.cc index 4276f20..e048b91 100644 --- a/src/core/player.cc +++ b/src/core/player.cc @@ -56,7 +56,7 @@ void Player::print() const if (zone()) { con_print << " zone ^B" << zone()->name() << std::endl; } - + } void Player::send(const std::string text) @@ -91,7 +91,7 @@ void Player::set_control(EntityControlable *entitycontrolable) player_dirty = true; } -void Player::set_zone(Zone *zone) +void Player::set_zone(Zone *zone) { if (zone != player_zone) { player_zone = zone; @@ -131,7 +131,8 @@ void Player::set_ping(const long ping) player_ping = ping; } -void Player::set_level(const int level) { +void Player::set_level(const int level) +{ player_level = level; } @@ -172,10 +173,10 @@ void Player::update_info() void Player::serialize_client_update(std::ostream & os) { - os << player_color << " " - << player_color_second << " " - << "\"" << player_name << "\" " - << "\"" << player_rconpassword << "\" "; + os << player_color << " " + << player_color_second << " " + << "\"" << player_name << "\" " + << "\"" << player_rconpassword << "\" "; } @@ -186,16 +187,16 @@ void Player::receive_client_update(std::istream &is) std::string n; char c; - while ( (is.get(c)) && (c != '"')); - while ( (is.get(c)) && (c != '"')) + while ((is.get(c)) && (c != '"')); + while ((is.get(c)) && (c != '"')) n += c; if (n.size()) player_name.assign(n); - + n.clear(); - while ( (is.get(c)) && (c != '"')); - while ( (is.get(c)) && (c != '"')) + while ((is.get(c)) && (c != '"')); + while ((is.get(c)) && (c != '"')) n += c; if (n.size()) @@ -209,14 +210,14 @@ void Player::serialize_server_update(std::ostream & os) const unsigned int control_id = (player_control ? player_control->id() : 0); unsigned int mission_id = (player_mission_target ? player_mission_target->id() : 0); - os << player_id << " " - << zone_id << " " - << view_id << " " - << control_id << " " - << mission_id << " " - << player_credits << " " - << player_level << " " - << player_ping; + os << player_id << " " + << zone_id << " " + << view_id << " " + << control_id << " " + << mission_id << " " + << player_credits << " " + << player_level << " " + << player_ping; } void Player::receive_server_update(std::istream &is) @@ -240,21 +241,21 @@ void Player::receive_server_update(std::istream &is) unsigned int control_id = 0; is >> control_id; - if (control_id) { + if (control_id) { Entity *e = Entity::find(control_id); if (e && e->type() == Entity::Controlable) { player_control = static_cast<EntityControlable *>(e); } else { player_control = 0; con_warn << "control set to unknown entity " << control_id << "\n"; - } + } } else { player_control = 0; } unsigned int mission_id = 0; is >> mission_id; - if (mission_id) { + if (mission_id) { player_mission_target = Entity::find(mission_id); if (!player_mission_target) { con_warn << "mission target set to unknown entity " << mission_id << "\n"; @@ -266,7 +267,7 @@ void Player::receive_server_update(std::istream &is) is >> player_credits; is >> player_level; is >> player_ping; - + /* std::string n; char c; @@ -283,13 +284,13 @@ void Player::serialize_short_server_update(std::ostream & os) const { unsigned int zone_id = (zone() ? zone()->id() : 0); - os << player_id << " " - << "\"" << player_name << "\" " - << zone_id << " " - << player_color << " " - << player_color_second << " " - << player_level << " " - << player_ping; + os << player_id << " " + << "\"" << player_name << "\" " + << zone_id << " " + << player_color << " " + << player_color_second << " " + << player_level << " " + << player_ping; } @@ -308,8 +309,8 @@ void Player::receive_short_server_update(std::istream &is) // read player name std::string n; char c; - while ( (is.get(c)) && (c != '"')); - while ( (is.get(c)) && (c != '"')) + while ((is.get(c)) && (c != '"')); + while ((is.get(c)) && (c != '"')) n += c; if (n.size()) @@ -361,7 +362,7 @@ void Player::remove_asset(unsigned int id) return; for (std::list<EntityControlable*>::iterator asset = assets.begin(); asset != assets.end(); asset++) { - if ( ((*asset)->id() == id) && ((*asset)->owner() == this) ) { + if (((*asset)->id() == id) && ((*asset)->owner() == this)) { //con_debug << " removing asset " << (*asset)->id() << " from player " << this->id() << std::endl; if ((*asset) == player_control) diff --git a/src/core/player.h b/src/core/player.h index fc6740d..20a3b2d 100644 --- a/src/core/player.h +++ b/src/core/player.h @@ -32,68 +32,100 @@ public: /// default destructor virtual ~Player(); -/*----- inspectors ------------------------------------------------ */ + /*----- inspectors ------------------------------------------------ */ /// id of the player - inline const int id() const { return player_id; } - + inline const int id() const { + return player_id; + } + /// name of the player - inline const std::string & name() const { return player_name; } + inline const std::string & name() const { + return player_name; + } /// dirty flag - inline const bool dirty() const { return player_dirty; } + inline const bool dirty() const { + return player_dirty; + } /// the entity the Player is currently controling - inline EntityControlable *control() const { return player_control; } + inline EntityControlable *control() const { + return player_control; + } /// the zone the player is currently in - inline Zone *zone() const { return player_zone; } + inline Zone *zone() const { + return player_zone; + } /// set the zone the player is currently in void set_zone(Zone *zone); - inline const bool zonechange() const { return player_zonechange; } + inline const bool zonechange() const { + return player_zonechange; + } /// player primary color - inline const math::Color & color() const { return player_color; } + inline const math::Color & color() const { + return player_color; + } /// player secondary color - inline const math::Color & color_second() const { return player_color_second; } + inline const math::Color & color_second() const { + return player_color_second; + } /// player has been muted by admin or console - inline const bool mute() const { return player_mute; } + inline const bool mute() const { + return player_mute; + } - inline const std::string &rconpassword() const { return player_rconpassword; } + inline const std::string &rconpassword() const { + return player_rconpassword; + } /// mission target - inline Entity *mission_target() { return player_mission_target; } + inline Entity *mission_target() { + return player_mission_target; + } /// view - inline Entity *view() { return player_view; } + inline Entity *view() { + return player_view; + } /// credits - inline long credits() const { return player_credits; } + inline long credits() const { + return player_credits; + } /// network ping - inline long ping() const { return player_ping; } + inline long ping() const { + return player_ping; + } /// returns true of the player has enough credits to pay amount - inline bool has_credits(const long amount) const { return (player_credits >= amount); } + inline bool has_credits(const long amount) const { + return (player_credits >= amount); + } /// print player info to console virtual void print() const; /// player level - const int level() const { return player_level; } + const int level() const { + return player_level; + } -/*----- messages -------------------------------------------------- */ + /*----- messages -------------------------------------------------- */ /// send a text message void send(const std::string text); /** * @brief send a warning message - * Send the player a warning message abd set the warning + * Send the player a warning message abd set the warning * message timestamp to the current application time * @see last_warning() */ @@ -104,10 +136,12 @@ public: virtual void message(core::Message::Channel channel, const std::string text); /// time of the last warning message - float last_warning() const { return player_warningtime; } + float last_warning() const { + return player_warningtime; + } + - -/*----- mutators -------------------------------------------------- */ + /*----- mutators -------------------------------------------------- */ /// serialize player info to a stream void serialize_server_update(std::ostream & os) const; @@ -176,12 +210,16 @@ public: void set_level(const int level); /// set the dirty bit - inline void set_dirty(const bool dirty = true) { player_dirty = dirty; } + inline void set_dirty(const bool dirty = true) { + player_dirty = dirty; + } /// set the zonechange bit - inline void set_zonechange(const bool dirty = true) { player_zonechange = dirty; } + inline void set_zonechange(const bool dirty = true) { + player_zonechange = dirty; + } -/* -- should actually not be public --*/ + /* -- should actually not be public --*/ /// id of the player int player_id; diff --git a/src/core/range.h b/src/core/range.h index d530f0b..a133695 100644 --- a/src/core/range.h +++ b/src/core/range.h @@ -7,22 +7,24 @@ #ifndef __INCLUDED_CORE_RANGE_H__ #define __INCLUDED_CORE_RANGE_H__ -namespace core { +namespace core +{ /** * @brief range and scale constants */ -namespace range { - /// maximal visible range (world distance) - /** This is the distance of the frustum far plane, - * the maximal distance at which entities can be drawn. - * the maximal radar range - * and the maximal range to send entity updates - */ - const float maxdistance = 1024.0f; +namespace range +{ +/// maximal visible range (world distance) +/** This is the distance of the frustum far plane, + * the maximal distance at which entities can be drawn. + * the maximal radar range + * and the maximal range to send entity updates + */ +const float maxdistance = 1024.0f; - /// detail/fx distance (world distance) - const float fxdistance = 256.0f; +/// detail/fx distance (world distance) +const float fxdistance = 256.0f; } } diff --git a/src/core/stats.cc b/src/core/stats.cc index 36e942f..f95c631 100644 --- a/src/core/stats.cc +++ b/src/core/stats.cc @@ -6,7 +6,8 @@ #include "core/stats.h" -namespace core { +namespace core +{ unsigned long Stats::network_bytes_sent = 0; unsigned long Stats::network_bytes_received = 0; @@ -19,4 +20,4 @@ void Stats::clear() }; } - + diff --git a/src/core/stats.h b/src/core/stats.h index 7bcad0d..db65f81 100644 --- a/src/core/stats.h +++ b/src/core/stats.h @@ -11,7 +11,8 @@ namespace core { /// class to gather various engine statistics -class Stats { +class Stats +{ public: /// clear statistics static void clear(); diff --git a/src/core/timer.cc b/src/core/timer.cc index b614af1..6f2e914 100644 --- a/src/core/timer.cc +++ b/src/core/timer.cc @@ -1,7 +1,7 @@ /* core/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 + 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 "core/timer.h" @@ -10,12 +10,13 @@ #include <iostream> #include <cmath> -namespace core { +namespace core +{ Timer::Timer() { gettimeofday(&this->timer_tick, &this->timer_tz); - this->timer_elapsed = 0; + this->timer_elapsed = 0; } Timer::~Timer() @@ -28,12 +29,12 @@ void Timer::mark() } unsigned long Timer::timestamp() -{ +{ struct timeval tick; struct timezone tick_tz; - + gettimeofday(&tick, &tick_tz); - + // calculate elapsed time in 10^-6 seconds unsigned long delta = 0; delta = tick.tv_sec * 1000 + tick.tv_usec / 1000; diff --git a/src/core/timer.h b/src/core/timer.h index b878875..5157811 100644 --- a/src/core/timer.h +++ b/src/core/timer.h @@ -1,7 +1,7 @@ /* core/timer.h - This file is part of the Osirion project and is distributed under - the terms and conditions of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_CORE_TIMER_H__ @@ -9,13 +9,15 @@ #include <sys/time.h> -namespace core { +namespace core +{ /// a timer measures intervals in seconds /*! A timer class measures the time elapsed * between the last two calls to its mark() function. */ -class Timer { +class Timer +{ public: /// Constructor Timer(); @@ -25,7 +27,7 @@ public: /// mark the current time as zero /*! Reset the timer, all subsequent calls too elapsed() will * use the current timestamp as reference - */ + */ void mark(); /*! return the time elapsed since the last mark, in seconds diff --git a/src/core/zone.cc b/src/core/zone.cc index 3567090..ac3bc4d 100644 --- a/src/core/zone.cc +++ b/src/core/zone.cc @@ -58,13 +58,13 @@ Zone *Zone::find(std::string const & name) Zone *Zone::search(std::string const & searchname) { - std::string strsearchkey(aux::lowercase(searchname)); + std::string strsearchkey(aux::lowercase(searchname)); std::stringstream str(strsearchkey); unsigned int id; if (str >> id) return find(id); - + if (strsearchkey.size() < 3) { return 0; } @@ -79,7 +79,7 @@ Zone *Zone::search(std::string const & searchname) if (label.size() && (label.find(strsearchkey) != std::string::npos)) { return zone; } - + name.assign(aux::lowercase(zone->name())); if (name.size() && (name.find(strsearchkey) != std::string::npos)) { return zone; @@ -101,7 +101,7 @@ void Zone::list() void Zone ::clear() { for (Registry::iterator it = zone_registry.begin(); it != zone_registry.end(); it++) { - delete (*it).second; + delete(*it).second; } zone_registry.clear(); @@ -109,7 +109,7 @@ void Zone ::clear() /* ---- class Zone ------------------------------------------------- */ Zone::Zone(std::string const & label) : - zone_label(label) + zone_label(label) { zone_id = 0; zone_name.clear(); @@ -139,10 +139,10 @@ void Zone::print() for (Content::iterator it = zone_content.begin(); it != zone_content.end(); it++) { Entity *entity = (*it); con_print << " id " << std::setw(4) << entity->id() - << " type " << std::setw(4) << entity->type() - << ":" << std::setw(4) << entity->moduletype() - << " " << std::setw(24) << entity->label() - << " ^B" << entity->name() << "^N" << std::endl; + << " type " << std::setw(4) << entity->type() + << ":" << std::setw(4) << entity->moduletype() + << " " << std::setw(24) << entity->label() + << " ^B" << entity->name() << "^N" << std::endl; } con_print << zone_content.size() << " registered zone entities" << std::endl; } @@ -197,7 +197,7 @@ Entity *Zone::find_entity(const std::string & label) Entity *Zone::search_entity(const std::string & searchname) { - std::string strsearchkey(aux::lowercase(searchname)); + std::string strsearchkey(aux::lowercase(searchname)); std::stringstream str(strsearchkey); unsigned int id; @@ -218,7 +218,7 @@ Entity *Zone::search_entity(const std::string & searchname) if (label.size() && (label.find(strsearchkey) != std::string::npos)) { return entity; } - + name.assign(aux::lowercase(entity->name())); if (name.size() && (name.find(strsearchkey) != std::string::npos)) { return entity; @@ -233,27 +233,27 @@ void Zone::serialize_server_update(std::ostream & os) const os << zone_label << " "; os << "\"" << zone_name << "\" "; os << "\"" << zone_sky << "\" "; - os << (zone_defaultview ? zone_defaultview->id() : 0 ); + os << (zone_defaultview ? zone_defaultview->id() : 0); } void Zone::receive_server_update(std::istream &is) { is >> zone_label; - + std::string n; unsigned int id = 0; char c; - while ( (is.get(c)) && (c != '"')); - while ( (is.get(c)) && (c != '"')) - n += c; + while ((is.get(c)) && (c != '"')); + while ((is.get(c)) && (c != '"')) + n += c; zone_name.assign(n); n.clear(); - while ( (is.get(c)) && (c != '"')); - while ( (is.get(c)) && (c != '"')) - n += c; + while ((is.get(c)) && (c != '"')); + while ((is.get(c)) && (c != '"')) + n += c; zone_sky.assign(n); n.clear(); diff --git a/src/core/zone.h b/src/core/zone.h index 32463df..6048a99 100644 --- a/src/core/zone.h +++ b/src/core/zone.h @@ -11,7 +11,8 @@ #include <list> #include <map> -namespace core { +namespace core +{ class Zone; @@ -23,7 +24,8 @@ namespace core { /// a Zone contains a compartment of the game universe -class Zone { +class Zone +{ public: /// type definition for the content of a zone typedef std::list<Entity *> Content; @@ -58,8 +60,10 @@ public: static void clear(); /// the zone registry - static inline Registry & registry() { return zone_registry; } - + static inline Registry & registry() { + return zone_registry; + } + /* ---- Zone class ----------------------------------------- */ /// create a new zone @@ -77,22 +81,34 @@ public: void print(); /// zone id - inline unsigned int id() const { return zone_id; } + inline unsigned int id() const { + return zone_id; + } /// zone label - inline std::string const & label() const { return zone_label; } + inline std::string const & label() const { + return zone_label; + } /// zone name - inline std::string const & name() const { return zone_name; } + inline std::string const & name() const { + return zone_name; + } /// the name of the texture to be used as sky for this zone - inline std::string const & sky() const { return zone_sky; } + inline std::string const & sky() const { + return zone_sky; + } /// texture id for the sky - inline size_t sky_texture() const { return zone_sky_texture; } + inline size_t sky_texture() const { + return zone_sky_texture; + } /// default zone view - inline Entity *default_view() {return zone_defaultview; } + inline Entity *default_view() { + return zone_defaultview; + } /// find an entity inside a zone Entity *find_entity(Entity *entity); @@ -109,19 +125,29 @@ public: /* ---- mutators ------------------------------------------- */ /// set the Zone label - inline void set_label(std::string const & label) { zone_label.assign(label); } + inline void set_label(std::string const & label) { + zone_label.assign(label); + } /// set the Zone label - inline void set_name(std::string const & name) { zone_name.assign(name); } + inline void set_name(std::string const & name) { + zone_name.assign(name); + } /// set the sky texture name to be used for this zone - inline void set_sky(std::string const & sky) { zone_sky.assign(sky); } + inline void set_sky(std::string const & sky) { + zone_sky.assign(sky); + } /// set the texture id for the sky - inline void set_sky_texture(size_t texture) { zone_sky_texture = texture; } + inline void set_sky_texture(size_t texture) { + zone_sky_texture = texture; + } ///set the default view - inline void set_default_view(Entity *entity) { zone_defaultview = entity; } + inline void set_default_view(Entity *entity) { + zone_defaultview = entity; + } /* ---- serializers ---------------------------------------- */ @@ -134,7 +160,9 @@ public: /* ---- zone content --------------------------------------- */ /// the entities belonging to this zone - inline Content & content() { return zone_content; } + inline Content & content() { + return zone_content; + } /// add an entity to this zone void add(Entity *entity); diff --git a/src/dedicated/console.cc b/src/dedicated/console.cc index 5b7d92f..2c4c0da 100644 --- a/src/dedicated/console.cc +++ b/src/dedicated/console.cc @@ -22,7 +22,8 @@ #include <curses.h> #endif -namespace dedicated { +namespace dedicated +{ bool console_initialized = false; bool console_updated = false; @@ -43,19 +44,19 @@ Console *console() void Console::init() { #ifdef HAVE_CURSES - stdwin = initscr(); // initialize the ncurses window - cbreak(); // disable input line buffering - noecho(); // don't show typed characters - keypad(stdwin, TRUE); // enable special keys - nodelay(stdwin, TRUE); // non-blocking input - curs_set(1); // enable cursor + stdwin = initscr(); // initialize the ncurses window + cbreak(); // disable input line buffering + noecho(); // don't show typed characters + keypad(stdwin, TRUE); // enable special keys + nodelay(stdwin, TRUE); // non-blocking input + curs_set(1); // enable cursor if (has_colors() == TRUE) { start_color(); // this is ncurses-specific use_default_colors(); // COLOR_PAIR(0) is terminal default - init_pair(1, COLOR_RED, -1); + init_pair(1, COLOR_RED, -1); init_pair(2, COLOR_GREEN, -1); init_pair(3, COLOR_YELLOW, -1); init_pair(4, COLOR_BLUE, -1); @@ -69,10 +70,10 @@ void Console::init() con_print << "^BInitializing console..." << std::endl; #ifdef HAVE_CURSES - server_console.history.clear(); - server_console.history.push_back(""); - server_console.history_pos = server_console.history.rbegin(); - server_console.input_pos = 0; + server_console.history.clear(); + server_console.history.push_back(""); + server_console.history_pos = server_console.history.rbegin(); + server_console.input_pos = 0; server_console.console_scroll = 0; server_console.draw(); #endif // HAVE_CURSES @@ -105,7 +106,7 @@ Console::~Console() #ifdef HAVE_CURSES void Console::dump() { - // dump console content + // dump console content for (Queue::iterator it = log().begin(); it != log().end(); it++) { sys::ConsoleInterface::print((*it)); } @@ -115,11 +116,11 @@ void Console::resize() { if (!console_initialized) return; - + endwin(); refresh(); - draw(); + draw(); } void Console::print(const std::string & text) @@ -142,7 +143,7 @@ void Console::set_color(const char *color_code) // base colors // Default=0, Red=1, Green=2, Yellow=3, Blue=4, Cyan=5, Magenta=6, White=7 - color = *(color_code+1) - '0'; + color = *(color_code + 1) - '0'; if (color == 3 || color == 7) bold = true; else @@ -150,7 +151,7 @@ void Console::set_color(const char *color_code) } else if (aux::is_core_color_code(color_code)) { - switch (*(color_code+1)) { + switch (*(color_code + 1)) { case 'N': // normal color case 'D': // debug color color = 0; @@ -206,7 +207,7 @@ void Console::draw_status() attroff(A_BOLD); color_set(2, NULL); int minutes = (int) floorf(core::game()->time() / 60.0f); - int seconds = (int) floorf( core::game()->time() - (float) minutes* 60.0f); + int seconds = (int) floorf(core::game()->time() - (float) minutes * 60.0f); std::stringstream status; status << "time " << std::setfill(' ') << std::setw(3) << minutes << ":" << std::setfill('0') << std::setw(2) << seconds; mvaddnstr(0, 1, status.str().c_str(), status.str().size()); @@ -249,8 +250,8 @@ void Console::draw_text() } // new word, wrap if necessary - else if ((*c == '\n' ) || ( *c == ' ')) { - + else if ((*c == '\n') || (*c == ' ')) { + if (line_length + word_length > console_width) { if (line.size()) { lines.push_back(line); @@ -260,31 +261,31 @@ void Console::draw_text() line_length = 0; } } - + line.append(word); line_length += word_length; word.clear(); word_length = 0; wordpen = pen; - + // new line - if (*c == '\n' ) { + if (*c == '\n') { lines.push_back(line); line.clear(); line_length = 0; - // new word - } else if (*c == ' ' ) { + // new word + } else if (*c == ' ') { line += ' '; line_length++; } } // new character - else { + else { word += *c; word_length++; - + if (word_length == console_width) { if (line.size()) { lines.push_back(line); @@ -305,9 +306,9 @@ void Console::draw_text() c++; } - + } - current_line++; + current_line++; } int y = console_height - 1; @@ -339,20 +340,20 @@ void Console::draw_input() attron(A_BOLD); // draw input text mvaddstr(console_height, 0, ">"); - mvaddstr(console_height, 1, (*history_pos).c_str()); + mvaddstr(console_height, 1, (*history_pos).c_str()); // fill the remainder with spaces - for (int i=1 + (*history_pos).size(); i < console_width; i++) + for (int i = 1 + (*history_pos).size(); i < console_width; i++) addch(' '); } -void Console::draw() +void Console::draw() { - if (!console_initialized) + if (!console_initialized) return; #ifdef _WIN32 - console_width = stdwin->_maxx -1; - console_height = stdwin->_maxy -1; + console_width = stdwin->_maxx - 1; + console_height = stdwin->_maxy - 1; #else console_width = stdwin->_maxx; console_height = stdwin->_maxy; @@ -381,13 +382,13 @@ void Console::frame() while (key != ERR) { if (key == KEY_BACKSPACE || key == 8 || key == 127) { if ((*history_pos).size() && input_pos) { - (*history_pos).erase(input_pos-1, 1); + (*history_pos).erase(input_pos - 1, 1); input_pos--; input_updated = true; } break; - } else if (key == KEY_STAB || key ==9) { - core::CommandBuffer::complete( (*history_pos), input_pos); + } else if (key == KEY_STAB || key == 9) { + core::CommandBuffer::complete((*history_pos), input_pos); input_updated = true; break; } else if (key == KEY_LEFT) { @@ -396,7 +397,7 @@ void Console::frame() } input_updated = true; break; - } else if (key == KEY_RIGHT) { + } else if (key == KEY_RIGHT) { if (input_pos < (*history_pos).size()) { input_pos++; } @@ -425,38 +426,38 @@ void Console::frame() input_pos = (*history_pos).size(); input_updated = true; } - break; - } else if (key == KEY_ENTER || key == '\n') { + break; + } else if (key == KEY_ENTER || key == '\n') { if ((*history_pos).size()) { // store input into history while (history.size() >= MAXHISTOLINES) { history.pop_front(); } - + core::cmd() << (*history_pos) << std::endl; con_print << "^B>" << (*history_pos) << std::endl; (*history.rbegin()) = (*history_pos); - + history.push_back(""); history_pos = history.rbegin(); input_pos = 0; console_updated = true; } break; - } else if (key == KEY_PPAGE) { - console_scroll += scroll_offset; - if (console_scroll > log().size()) + } else if (key == KEY_PPAGE) { + console_scroll += scroll_offset; + if (console_scroll > log().size()) console_scroll = log().size(); console_updated = true; - break; - } else if (key == KEY_NPAGE) { - if (console_scroll > scroll_offset) + break; + } else if (key == KEY_NPAGE) { + if (console_scroll > scroll_offset) console_scroll -= scroll_offset; - else + else console_scroll = 0; console_updated = true; - break; - } else if ((key >= 32) && (key < 127) && ((*history_pos).size() < MAXCMDSIZE)) { + break; + } else if ((key >= 32) && (key < 127) && ((*history_pos).size() < MAXCMDSIZE)) { if (input_pos == (*history_pos).size()) { (*history_pos) += (char)key; } else { @@ -464,7 +465,7 @@ void Console::frame() } input_pos++; input_updated = true; - } + } key = wgetch(stdwin); } diff --git a/src/dedicated/console.h b/src/dedicated/console.h index 19ea906..b0bafdb 100644 --- a/src/dedicated/console.h +++ b/src/dedicated/console.h @@ -1,7 +1,7 @@ /* dedicated/console.h - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_DEDICATED_CONSOLE_H__ @@ -9,9 +9,11 @@ #include "sys/consoleinterface.h" -namespace dedicated { +namespace dedicated +{ -class Console : public sys::ConsoleInterface { +class Console : public sys::ConsoleInterface +{ public: Console(); ~Console(); @@ -48,12 +50,12 @@ private: /// set ncurses drawing color void set_color(const char *color_code); - - // input history - History history; - History::reverse_iterator history_pos; - size_t input_pos; + // input history + History history; + History::reverse_iterator history_pos; + + size_t input_pos; size_t console_scroll; int console_width; diff --git a/src/dedicated/dedicated.cc b/src/dedicated/dedicated.cc index 43c636e..6812d63 100644 --- a/src/dedicated/dedicated.cc +++ b/src/dedicated/dedicated.cc @@ -1,7 +1,7 @@ /* dedicated/dedicated.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 + 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 <iostream> @@ -14,13 +14,14 @@ #include "dedicated/console.h" #include "dedicated/dedicated.h" -namespace dedicated { +namespace dedicated +{ void run(int count, char **arguments) { std::cout << core::name() << " " << core::version() << std::endl; - for (int i =0; i < count; i++) + for (int i = 0; i < count; i++) std::cout << arguments[i] << " "; std::cout << std::endl; @@ -38,7 +39,7 @@ void Dedicated::init(int count, char **arguments) core::Cvar::set("sv_dedicated", "1", core::Cvar::ReadOnly); - core::Application::init(count, arguments); + core::Application::init(count, arguments); Console::init(); @@ -59,7 +60,7 @@ void Dedicated::run() core::Timer timer; timer.mark(); - while(connected()) { + while (connected()) { frame(timer.timestamp()); #ifdef HAVE_CURSES console()->frame(); @@ -67,28 +68,28 @@ void Dedicated::run() } } -void Dedicated::shutdown() +void Dedicated::shutdown() { con_print << "^BShutting down dedicated server..." << std::endl; float ratio = 0; if (core::Stats::network_uncompressed_bytes_sent > 0) ratio = 100.0f - floorf((float)core::Stats::network_bytes_sent / - (float) core::Stats::network_uncompressed_bytes_sent * 100.0f); + (float) core::Stats::network_uncompressed_bytes_sent * 100.0f); int minutes = (int) floorf(time() / 60.0f); - int seconds = (int) floorf(time() - (float) minutes* 60.0f); - + int seconds = (int) floorf(time() - (float) minutes * 60.0f); + con_debug << "Statistics:" << std::endl; con_debug << " uptime " << std::setfill(' ') << std::setw(3) << minutes << ":" << std::setfill('0') << std::setw(2) << seconds << std::endl; con_debug << " bytes sent " << std::setfill(' ') << std::setw(6) << core::Stats::network_bytes_sent / 1024 << " Kb" << std::endl; con_debug << " bytes received " << std::setw(6) << core::Stats::network_bytes_received / 1024 << " Kb" << std::endl; con_debug << " compression " << std::setw(6) << ratio << " %" << std::endl; - + core::Application::shutdown(); Console::shutdown(); - + quit(0); } diff --git a/src/dedicated/dedicated.h b/src/dedicated/dedicated.h index f458895..d90b3b6 100644 --- a/src/dedicated/dedicated.h +++ b/src/dedicated/dedicated.h @@ -1,7 +1,7 @@ /* dedicated/dedicated.h - This file is part of the Osirion project and is distributed under - the terms and conditions of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_DEDICATED_H__ @@ -10,13 +10,15 @@ #include "core/application.h" /// contains classes and functions to run the dedicated server -namespace dedicated { +namespace dedicated +{ /// run the dedicated server void run(int count, char **arguments); - + /// server application implementation -class Dedicated : public core::Application { +class Dedicated : public core::Application +{ public: /// initialize the server Application virtual void init(int count, char **arguments); diff --git a/src/filesystem/diskfile.cc b/src/filesystem/diskfile.cc index 6def055..bab20d9 100644 --- a/src/filesystem/diskfile.cc +++ b/src/filesystem/diskfile.cc @@ -5,9 +5,10 @@ */ #include "filesystem/filesystem.h" -#include "filesystem/diskfile.h" +#include "filesystem/diskfile.h" -namespace filesystem { +namespace filesystem +{ DiskFile::DiskFile() { @@ -25,7 +26,7 @@ FILE *DiskFile::handle() return diskfile_handle; } -bool DiskFile::open(const char *filename) +bool DiskFile::open(const char *filename) { if (diskfile_handle) { con_warn << file_name << " already open!" << std::endl; diff --git a/src/filesystem/diskfile.h b/src/filesystem/diskfile.h index 7da1a88..6a64ce5 100644 --- a/src/filesystem/diskfile.h +++ b/src/filesystem/diskfile.h @@ -14,7 +14,7 @@ #include <string> -namespace filesystem +namespace filesystem { /** diff --git a/src/filesystem/file.cc b/src/filesystem/file.cc index 91ac9f9..628ba22 100644 --- a/src/filesystem/file.cc +++ b/src/filesystem/file.cc @@ -7,7 +7,8 @@ // project headers #include "filesystem/file.h" -namespace filesystem { +namespace filesystem +{ File::File() {} diff --git a/src/filesystem/file.h b/src/filesystem/file.h index daef174..a5daf34 100644 --- a/src/filesystem/file.h +++ b/src/filesystem/file.h @@ -10,7 +10,8 @@ // C++ headers #include <string> -namespace filesystem { +namespace filesystem +{ /** * @brief an abstract interface to handle file access @@ -29,17 +30,21 @@ public: virtual FILE *handle(); - /// read bytes + /// read bytes virtual size_t read(void *buffer, size_t count) = 0; /// skip bytes virtual void skip(size_t count) = 0; /// name of the file in the virtual filesystem - inline const std::string name() const { return file_name; } + inline const std::string name() const { + return file_name; + } /// the path holding the virtual filename - inline const std::string path() const { return file_path; } + inline const std::string path() const { + return file_path; + } protected: std::string file_name; diff --git a/src/filesystem/filestream.cc b/src/filesystem/filestream.cc index cfbaaec..53c72d8 100644 --- a/src/filesystem/filestream.cc +++ b/src/filesystem/filestream.cc @@ -7,7 +7,8 @@ #include "filesystem/filesystem.h" #include "filesystem/filestream.h" -namespace filesystem { +namespace filesystem +{ IFileStream::IFileStream(const char *name) : std::ifstream() { @@ -38,12 +39,12 @@ void IFileStream::open(const char *name) for (SearchPath::iterator path = searchpath().begin(); path != searchpath().end(); path++) { fstream_filename.assign((*path)); fstream_filename.append(fstream_name); -/* -#ifdef _WIN32 - for (size_t i = 0; i < fstream_filename.size(); i++) - if (fstream_filename[i] == '/') fstream_filename[i] = '\\'; -#endif -*/ + /* + #ifdef _WIN32 + for (size_t i = 0; i < fstream_filename.size(); i++) + if (fstream_filename[i] == '/') fstream_filename[i] = '\\'; + #endif + */ if (sys::file_exists(fstream_filename)) { std::ifstream::open(fstream_filename.c_str()); diff --git a/src/filesystem/filestream.h b/src/filesystem/filestream.h index 9739f38..a97d1fb 100644 --- a/src/filesystem/filestream.h +++ b/src/filesystem/filestream.h @@ -9,7 +9,7 @@ #include <fstream> -namespace filesystem +namespace filesystem { /** @@ -27,10 +27,14 @@ public: void open(const std::string &name); /// name of the file in the virtual filesystem - inline const std::string &name() const { return fstream_name; } + inline const std::string &name() const { + return fstream_name; + } /// actual dilename - inline const std::string &filename() const { return fstream_filename; } + inline const std::string &filename() const { + return fstream_filename; + } private: std::string fstream_name; diff --git a/src/filesystem/filesystem.cc b/src/filesystem/filesystem.cc index d268ccc..4ea715c 100644 --- a/src/filesystem/filesystem.cc +++ b/src/filesystem/filesystem.cc @@ -20,7 +20,7 @@ #include "filesystem/file.h" #include "sys/sys.h" -namespace filesystem +namespace filesystem { SearchPath filesystem_searchpath; @@ -56,17 +56,17 @@ void init(const std::string &binaryname, const std::string & basename, const std filesystem_basename.assign("base"); filesystem_modname.assign(modname); - + #ifndef _WIN32 // UNIX home directory is $HOME/.osirion filesystem_homedir.assign(getenv("HOME")); filesystem_homedir.append("/.osirion"); - + // create homedir if necessary if (!sys::directory_exists(filesystem_homedir)) - sys::mkdir(filesystem_homedir); + sys::mkdir(filesystem_homedir); filesystem_homedir += '/'; - + #else // windows home directory is My Documents\My Games\Osirion char mydocuments[512]; @@ -84,10 +84,10 @@ void init(const std::string &binaryname, const std::string & basename, const std if (!sys::directory_exists(filesystem_homedir)) sys::mkdir(filesystem_homedir); filesystem_homedir.append("\\"); - + } else { con_warn << "using fallback home directory" << std::endl; - + filesystem_homedir.assign("home"); if (!sys::directory_exists(filesystem_homedir)) sys::mkdir(filesystem_homedir); @@ -111,15 +111,15 @@ void init(const std::string &binaryname, const std::string & basename, const std // the data dir set by the configure script std::string package_datadir(PACKAGE_DATADIR); std::string dir; - + // set writedir depending on modname and add home paths to the searchpath filesystem_writedir.assign(filesystem_homedir); if (filesystem_modname.size()) { // append modname to writedir - filesystem_writedir.append(filesystem_modname); + filesystem_writedir.append(filesystem_modname); } else { // append basename to writedir - filesystem_writedir.append(filesystem_basename); + filesystem_writedir.append(filesystem_basename); } // create writedir if necessary @@ -181,7 +181,7 @@ void init(const std::string &binaryname, const std::string & basename, const std for (SearchPath::iterator path = filesystem_searchpath.begin(); path != filesystem_searchpath.end(); ++path) { #ifdef _WIN32 for (size_t i = 0; i < (*path).size(); i++) - if ((*path)[i] == '/') (*path)[i] = '\\'; + if ((*path)[i] == '/')(*path)[i] = '\\'; #endif con_print << " directory " << (*path) << std::endl; } @@ -203,7 +203,7 @@ void shutdown() filesystem_writedir.clear(); } -File *open(const char *filename) +File *open(const char *filename) { // for now, File is always a DiskFile DiskFile *f = new DiskFile(); diff --git a/src/filesystem/filesystem.h b/src/filesystem/filesystem.h index 1bdacaa..5fe97d0 100644 --- a/src/filesystem/filesystem.h +++ b/src/filesystem/filesystem.h @@ -17,7 +17,8 @@ /// The filesystem namespace contains classes and functions for common file operations. /** filesystem is a core subsystem */ -namespace filesystem { +namespace filesystem +{ typedef std::list<std::string> SearchPath; diff --git a/src/filesystem/inifile.cc b/src/filesystem/inifile.cc index c6cc625..52bf36d 100644 --- a/src/filesystem/inifile.cc +++ b/src/filesystem/inifile.cc @@ -11,7 +11,8 @@ #include <sstream> -namespace filesystem { +namespace filesystem +{ IniFile::IniFile(const char *ininame) { @@ -25,7 +26,7 @@ IniFile::IniFile(const std::string & ininame) open(ininame.c_str()); } -IniFile::~IniFile() +IniFile::~IniFile() { if (inifile_stream.is_open()) inifile_stream.close(); @@ -65,19 +66,23 @@ bool IniFile::open(const char *ininame) } -bool IniFile::got_section() const { +bool IniFile::got_section() const +{ return last_read_was_section; } -bool IniFile::got_section(const char * sectionlabel) const { +bool IniFile::got_section(const char * sectionlabel) const +{ return (last_read_was_section && (section_current.compare(sectionlabel) == 0)); } -bool IniFile::in_section(const char * sectionlabel) const { +bool IniFile::in_section(const char * sectionlabel) const +{ return ((section_current.compare(sectionlabel) == 0)); } -bool IniFile::getline() { +bool IniFile::getline() +{ char line[1024]; last_read_was_section = false; @@ -103,7 +108,7 @@ bool IniFile::getline() { // section header if (s.size() > 2 && s[0] == '[' && s[s.size()-1] == ']') { // condebug << "Inifile got section header " << s << std::endl; - section_current = s.substr(1, s.size()-2); + section_current = s.substr(1, s.size() - 2); aux::trim(section_current); aux::to_lowercase(section_current); @@ -121,9 +126,9 @@ bool IniFile::getline() { aux::to_lowercase(key_current); if (key_current.size()) { - value_current = s.substr(found+1, s.size() - found - 1); - aux::trim (value_current); - last_read_was_key = true; + value_current = s.substr(found + 1, s.size() - found - 1); + aux::trim(value_current); + last_read_was_key = true; //con_debug << "IniFile got " << key_current << "=" << value_current << std::endl; return true; } @@ -140,8 +145,9 @@ bool IniFile::got_key() const return last_read_was_key; } -bool IniFile::got_key_string(const char * keylabel, std::string & valuestring) { - if (last_read_was_key && (key_current.compare(keylabel) == 0 )) { +bool IniFile::got_key_string(const char * keylabel, std::string & valuestring) +{ + if (last_read_was_key && (key_current.compare(keylabel) == 0)) { valuestring.assign(value_current); return true; } else { @@ -149,14 +155,15 @@ bool IniFile::got_key_string(const char * keylabel, std::string & valuestring) { } } -bool IniFile::got_key_vector3f(const char * keylabel, math::Vector3f & v) { - if (last_read_was_key && (key_current.compare(keylabel) == 0 )) { +bool IniFile::got_key_vector3f(const char * keylabel, math::Vector3f & v) +{ + if (last_read_was_key && (key_current.compare(keylabel) == 0)) { std::istringstream is(value_current); float x, y, z; if ((is >> x) && (is >> y) && (is >> z)) { - v = math::Vector3f(x,y,z); + v = math::Vector3f(x, y, z); } else { - v= math::Vector3f(); + v = math::Vector3f(); } return true; } else { @@ -164,8 +171,9 @@ bool IniFile::got_key_vector3f(const char * keylabel, math::Vector3f & v) { } } -bool IniFile::got_key_float(const char * keylabel, float & f) { - if (last_read_was_key && (key_current.compare(keylabel) == 0 )) { +bool IniFile::got_key_float(const char * keylabel, float & f) +{ + if (last_read_was_key && (key_current.compare(keylabel) == 0)) { std::istringstream is(value_current); if (!(is >> f)) { f = 0; @@ -176,8 +184,9 @@ bool IniFile::got_key_float(const char * keylabel, float & f) { } } -bool IniFile::got_key_long(const char * keylabel, long & l) { - if (last_read_was_key && (key_current.compare(keylabel) == 0 )) { +bool IniFile::got_key_long(const char * keylabel, long & l) +{ + if (last_read_was_key && (key_current.compare(keylabel) == 0)) { std::istringstream is(value_current); if (!(is >> l)) { l = 0; @@ -188,12 +197,14 @@ bool IniFile::got_key_long(const char * keylabel, long & l) { } } -bool IniFile::got_key(const char * keylabel) { - return (last_read_was_key && (key_current.compare(keylabel) == 0 )); +bool IniFile::got_key(const char * keylabel) +{ + return (last_read_was_key && (key_current.compare(keylabel) == 0)); } -bool IniFile::got_key_angle(const char * keylabel, float & f) { - if (last_read_was_key && (key_current.compare(keylabel) == 0 )) { +bool IniFile::got_key_angle(const char * keylabel, float & f) +{ + if (last_read_was_key && (key_current.compare(keylabel) == 0)) { std::istringstream is(value_current); if ((is >> f)) { f = math::degrees360f(f); @@ -206,8 +217,9 @@ bool IniFile::got_key_angle(const char * keylabel, float & f) { } } -bool IniFile::got_key_color(const char * keylabel, math::Color & color) { - if (last_read_was_key && (key_current.compare(keylabel) == 0 )) { +bool IniFile::got_key_color(const char * keylabel, math::Color & color) +{ + if (last_read_was_key && (key_current.compare(keylabel) == 0)) { std::istringstream is(value_current); float r, g, b, a; if ((is >> r) && (is >> g) && (is >> b)) { @@ -215,7 +227,9 @@ bool IniFile::got_key_color(const char * keylabel, math::Color & color) { if (is >> a) { a /= 255.0f; } - r /= 255.0f; g /= 255.0f; b /= 255.0f; + r /= 255.0f; + g /= 255.0f; + b /= 255.0f; } else { if (!(is >> a)) { a = 1.0f; @@ -233,12 +247,13 @@ bool IniFile::got_key_color(const char * keylabel, math::Color & color) { bool IniFile::got_key_bool(const char * keylabel, bool & b) { - if (last_read_was_key && (key_current.compare(keylabel) == 0 )) { + if (last_read_was_key && (key_current.compare(keylabel) == 0)) { std::istringstream is(value_current); unsigned int i; if (is >> i) { - if (i) b = true; else b = false; + if (i) b = true; + else b = false; return true; } @@ -266,7 +281,7 @@ bool IniFile::got_key_bool(const char * keylabel, bool & b) void IniFile::unknown_value() const { - con_warn << name() << " unknown value '" << value() << "' for key '" << key() << "' at line " << line() << std::endl; + con_warn << name() << " unknown value '" << value() << "' for key '" << key() << "' at line " << line() << std::endl; } void IniFile::unkown_key() const diff --git a/src/filesystem/inifile.h b/src/filesystem/inifile.h index fa2d81f..e5423aa 100644 --- a/src/filesystem/inifile.h +++ b/src/filesystem/inifile.h @@ -14,14 +14,16 @@ #include "math/color.h" #include "filesystem/filestream.h" -namespace filesystem { +namespace filesystem +{ /// a class to read .ini files /** The IniFile class provides functions to read .ini files. A .ini file * consists of one or more [section] headers followed by one or more key=value * pairs. Lines starting with # or ; are considered comments */ -class IniFile { +class IniFile +{ public: IniFile(const char *ininame = 0); @@ -97,16 +99,24 @@ public: void unknown_section() const; /// return true of the ini file is open for reading - inline bool is_open() { return inifile_stream.is_open(); } + inline bool is_open() { + return inifile_stream.is_open(); + } /// return true of the ini file is open for reading - inline bool good() { return inifile_stream.good(); } + inline bool good() { + return inifile_stream.good(); + } /// current name in the virtual filesystem - inline std::string const & name() const {return inifile_stream.name(); } + inline std::string const & name() const { + return inifile_stream.name(); + } /// current actual filename - inline std::string const & filename() const { return inifile_stream.filename(); } + inline std::string const & filename() const { + return inifile_stream.filename(); + } /// close the file void close(); diff --git a/src/game/base/collision.cc b/src/game/base/collision.cc index 4e6f4bb..952bba2 100644 --- a/src/game/base/collision.cc +++ b/src/game/base/collision.cc @@ -18,18 +18,18 @@ void Collision::distance_test(core::EntityControlable *first, core::Entity *seco { if (!first->owner()) return; - + if (first->state() == core::Entity::Docked) return; - + // FIXME - use distancesquared const float d = math::distance(first->location(), second->location()); const float r = first->radius() + second->radius(); - + if (second->type() == core::Entity::Globe) { // collision with a star or a planet - - if ((d-r) < 0.0f) { + + if ((d - r) < 0.0f) { // crash zone if ((first->moduletype() == ship_enttype) && (first->state() != core::Entity::Destroyed)) { first->owner()->send_warning("^RBOOM!^N"); @@ -38,9 +38,9 @@ void Collision::distance_test(core::EntityControlable *first, core::Entity *seco } } else if (first->owner()->last_warning() + 5.0f < core::application()->time()) { // warning zone: star corona or planet atmosphere - if ((second->moduletype() == star_enttype) && (d-r < 50.0f)) { + if ((second->moduletype() == star_enttype) && (d - r < 50.0f)) { first->owner()->send_warning("^3Warning: entering star corona!^N"); - } else if ((second->moduletype() == planet_enttype) && (d-r < Planet::safe_distance)) { + } else if ((second->moduletype() == planet_enttype) && (d - r < Planet::safe_distance)) { first->owner()->send_warning("^3Warning: entering planet gravity well!^N"); } } @@ -51,7 +51,7 @@ void Collision::frame_zone(core::Zone *zone) { core::Zone::Content::iterator first; core::Zone::Content::iterator second; - + for (first = zone->content().begin(); first != zone->content().end(); first ++) { second = first; for (second++; second != zone->content().end(); second++) { diff --git a/src/game/base/collision.h b/src/game/base/collision.h index 8203669..d74e6d6 100644 --- a/src/game/base/collision.h +++ b/src/game/base/collision.h @@ -1,7 +1,7 @@ /* base/collision.h - This file is part of the Osirion project and is distributed under - the terms and conditions of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_BASE_COLLISION_H__ @@ -9,10 +9,12 @@ #include "core/zone.h" -namespace game { +namespace game +{ /// collision detection functions -class Collision { +class Collision +{ public: /// do collision detection static void frame(const float elapsed); @@ -20,7 +22,7 @@ public: private: /// do collision detection for a single zone static void frame_zone(core::Zone *zone); - + /// do a distance test between two entities static void distance_test(core::EntityControlable *first, core::Entity *second); }; diff --git a/src/game/base/game.cc b/src/game/base/game.cc index bcb3567..7ec54b3 100644 --- a/src/game/base/game.cc +++ b/src/game/base/game.cc @@ -82,12 +82,12 @@ void Game::func_join(core::Player *player, std::string const &args) core::Entity *dock = ship->zone()->default_view(); if (dock) { - ship->get_location().assign(dock->location() + (dock->axis().forward() * ((ship->radius()+ dock->radius())*2.0f))); + ship->get_location().assign(dock->location() + (dock->axis().forward() *((ship->radius() + dock->radius())*2.0f))); ship->get_axis().assign(dock->axis()); ship->set_state(core::Entity::Docked); player->set_view(dock); } - + std::string message("^B"); message.append(player->name()); message.append("^B joins the game."); @@ -233,15 +233,15 @@ void Game::func_launch(core::Player *player, std::string const &args) return; assert(player->view()->zone() == player->control()->zone()); - + Ship *ship = static_cast<Ship *>(player->control()); ship->shutdown_physics(); core::Entity *dock = player->view(); if (dock->type() == core::Entity::Globe) - ship->get_location().assign(dock->location() + (dock->axis().forward() * (Planet::safe_distance + ship->radius() + dock->radius()))); + ship->get_location().assign(dock->location() + (dock->axis().forward() *(Planet::safe_distance + ship->radius() + dock->radius()))); else - ship->get_location().assign(dock->location() + (dock->axis().forward() * (ship->radius() + dock->radius()))); + ship->get_location().assign(dock->location() + (dock->axis().forward() *(ship->radius() + dock->radius()))); ship->get_axis().assign(dock->axis()); ship->set_state(core::Entity::Normal); @@ -309,9 +309,9 @@ void Game::func_goto(core::Player *player, const std::string &args) ship->shutdown_physics(); if (dock->type() == core::Entity::Globe) - ship->get_location().assign(dock->location() + (dock->axis().forward() * (Planet::safe_distance + ship->radius() + dock->radius()))); + ship->get_location().assign(dock->location() + (dock->axis().forward() *(Planet::safe_distance + ship->radius() + dock->radius()))); else - ship->get_location().assign(dock->location() + (dock->axis().forward() * (ship->radius() + dock->radius()))); + ship->get_location().assign(dock->location() + (dock->axis().forward() *(ship->radius() + dock->radius()))); ship->get_axis().assign(dock->axis()); ship->get_axis().change_direction(180.0f); @@ -319,7 +319,7 @@ void Game::func_goto(core::Player *player, const std::string &args) ship->init_physics(ship->radius()); ship->set_state(core::Entity::Jump); - + player->set_view(0); player->send("Going to " + dock->name()); } else { @@ -333,7 +333,7 @@ Game::Game() : core::Module("Project::OSiRiON", true) { Default::clear(); ShipModel::clear(); - + Physics::init(); if (!load_ships()) { @@ -350,13 +350,13 @@ Game::Game() : core::Module("Project::OSiRiON", true) abort(); return; } - + // add engine functions core::Func *func = 0; func = core::Func::add("list_ship", Game::func_list_ship); func->set_info("[string] list ship statistics"); - + func = core::Func::add("join", Game::func_join); func->set_info("join the game"); @@ -445,7 +445,7 @@ bool Game::load_world() } } else if (worldini.got_key()) { - + if (worldini.in_section("world")) { if (worldini.got_key_string("zone", label)) { @@ -521,20 +521,20 @@ bool Game::load_zone(core::Zone *zone) while (zoneini.getline()) { - if (zoneini.got_section()) { + if (zoneini.got_section()) { if (zoneini.got_section("zone")) { continue; - + } else if (zoneini.got_section("star")) { star = new Star(); star->set_zone(zone); count ++; - + } else if (zoneini.got_section("navpoint")) { navpoint = new NavPoint(); navpoint->set_zone(zone); count ++; - + } else if (zoneini.got_section("jumpgate")) { jumppoint = new JumpGate(); jumppoint->set_zone(zone); @@ -544,17 +544,17 @@ bool Game::load_zone(core::Zone *zone) jumppoint = new JumpPoint(); jumppoint->set_zone(zone); count ++; - - } else if(zoneini.got_section("racetrack")) { + + } else if (zoneini.got_section("racetrack")) { racetrack = new RaceTrack(); racetrack->set_zone(zone); - - } else if(zoneini.got_section("checkpoint")) { + + } else if (zoneini.got_section("checkpoint")) { checkpoint = new CheckPoint(racetrack); if (!racetrack) { con_warn << zoneini.name() << " checkpoint without racetrack at line " << zoneini.line() << std::endl; } - + } else if (zoneini.got_section("planet")) { planet = new Planet(); planet->set_zone(zone); @@ -564,13 +564,13 @@ bool Game::load_zone(core::Zone *zone) station = new Station(); station->set_zone(zone); count ++; - + } else if (zoneini.got_section("entity")) { entity = new core::Entity(); entity->set_flag(core::Entity::Static); entity->set_zone(zone); count ++; - + } else { zoneini.unknown_section(); } @@ -593,7 +593,7 @@ bool Game::load_zone(core::Zone *zone) if (core::Parser::got_entity_key(zoneini, star)) { continue; } else if (zoneini.got_key_string("texture", star->entity_texture)) { - continue; + continue; } else { zoneini.unkown_key(); } @@ -619,12 +619,12 @@ bool Game::load_zone(core::Zone *zone) if (core::Parser::got_entity_key(zoneini, planet)) { continue; } else if (zoneini.got_key_string("texture", planet->entity_texture)) { - continue; + continue; } else if (zoneini.got_key_float("rotationspeed", planet->entity_rotationspeed)) { continue; } else if (zoneini.got_key_bool("dock", b)) { if (b) { - planet->set_flag(core::Entity::Dockable); + planet->set_flag(core::Entity::Dockable); } else { planet->unset_flag(core::Entity::Dockable); } @@ -636,7 +636,7 @@ bool Game::load_zone(core::Zone *zone) } else { zoneini.unkown_key(); } - + } else if (zoneini.in_section("station")) { if (core::Parser::got_entity_key(zoneini, station)) { continue; @@ -673,7 +673,7 @@ bool Game::load_zone(core::Zone *zone) zoneini.unkown_key(); } } - + } } zoneini.close(); @@ -707,7 +707,7 @@ bool Game::validate_zone(core::Zone *zone) if ((entity->flags() & core::Entity::Dockable) == core::Entity::Dockable) load_menus(entity, "zones/" + zone->label() + "/" + entity->label()); - } + } } return true; @@ -733,7 +733,7 @@ bool Game::load_menus(core::Entity *entity, const std::string &menufilename) if (inifile.is_open()) { while (inifile.getline()) { - + if (inifile.got_section()) { if (inifile.got_section("dealer")) { // dealer menu @@ -741,22 +741,22 @@ bool Game::load_menus(core::Entity *entity, const std::string &menufilename) menu_dealer = new MenuDescription(); menu_dealer->set_label("dealer"); menu_dealer->set_text("Ship dealer"); - + shipdealer = new ShipDealer(); if (entity->moduletype() == planet_enttype) { static_cast<Planet *>(entity)->set_shipdealer(shipdealer); } else if (entity->moduletype() == station_enttype) { static_cast<Station *>(entity)->set_shipdealer(shipdealer); } - } + } } else { inifile.unknown_section(); } - + } else if (inifile.got_key()) { - + if (inifile.in_section("dealer")) { - + if (inifile.got_key_string("ship", strval)) { aux::to_label(strval); ShipModel *model = shipdealer->add(strval); @@ -771,7 +771,7 @@ bool Game::load_menus(core::Entity *entity, const std::string &menufilename) } else { inifile.unkown_key(); } - + } } } @@ -805,12 +805,12 @@ bool Game::load_menus(core::Entity *entity, const std::string &menufilename) menu_main->add_button(button); } - if (inifile.is_open()) { + if (inifile.is_open()) { size_t n = entity->menus().size(); con_debug << " " << inifile.name() << " " << n << " " << aux::plural("menu", n) << std::endl; inifile.close(); } - + return true; } @@ -841,8 +841,8 @@ bool Game::load_ships() shipmodel->shipmodel_label.assign(label); ShipModel::add(shipmodel); continue; - } else if (shipsini.got_key_string("name",shipmodel->shipmodel_name)) { - continue; + } else if (shipsini.got_key_string("name", shipmodel->shipmodel_name)) { + continue; } else if (shipsini.got_key_string("info", infostr)) { shipmodel->shipmodel_infotext.push_back(infostr); continue; @@ -856,7 +856,7 @@ bool Game::load_ships() continue; } else if (shipsini.got_key_bool("jumpdrive", shipmodel->shipmodel_jumpdrive)) { continue; - } else if (shipsini.got_key_float("acceleration",f)) { + } else if (shipsini.got_key_float("acceleration", f)) { shipmodel->set_acceleration(f); continue; } else if (shipsini.got_key_float("maxspeed", f)) { @@ -874,7 +874,7 @@ bool Game::load_ships() if (shipmodel && !ShipModel::find(shipmodel)) delete shipmodel; shipmodel = new ShipModel(); if (!Default::shipmodel) - Default::shipmodel = shipmodel; + Default::shipmodel = shipmodel; } else if (shipsini.got_section()) { shipsini.unknown_section(); @@ -934,7 +934,7 @@ bool Game::load_player() aux::to_label(str); Default::shipmodel = ShipModel::find(str); } - } + } } } diff --git a/src/game/base/game.h b/src/game/base/game.h index 9b2d377..65084d3 100644 --- a/src/game/base/game.h +++ b/src/game/base/game.h @@ -1,7 +1,7 @@ /* base/game.h - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_BASE_H__ @@ -35,7 +35,8 @@ const unsigned int jumpgate_enttype = 261; const unsigned int station_enttype = 262; /// default player settings -class Default { +class Default +{ public: static core::Zone *zone; static core::Entity *view; @@ -46,7 +47,8 @@ public: }; /// the base Project::OSiRiON game model -class Game : public core::Module { +class Game : public core::Module +{ public: Game(); virtual ~Game(); @@ -84,7 +86,7 @@ private: bool load_menus(core::Entity *entity, const std::string &menufilename); bool load_ships(); - + bool load_player(); /* ---- engine functions ----------------------------------- */ @@ -95,7 +97,7 @@ private: static void func_hail(core::Player *player, std::string const &args); static void func_jump(core::Player *player, std::string const &args); static void func_impulse(core::Player *player, std::string const &args); - static void func_dock(core::Player *player,core::Entity *entity); + static void func_dock(core::Player *player, core::Entity *entity); static void func_launch(core::Player *player, std::string const &args); static void func_respawn(core::Player *player, std::string const &args); static void func_goto(core::Player *player, const std::string &args); diff --git a/src/game/base/jumppoint.cc b/src/game/base/jumppoint.cc index 9017f1c..5b4e689 100644 --- a/src/game/base/jumppoint.cc +++ b/src/game/base/jumppoint.cc @@ -1,7 +1,7 @@ /* base/jumppoint.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 + 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 "base/game.h" @@ -28,7 +28,7 @@ JumpPoint::~JumpPoint() { } -void JumpPoint::set_targetlabel(const std::string &label) +void JumpPoint::set_targetlabel(const std::string &label) { jumppoint_targetlabel.assign(label); } @@ -42,13 +42,13 @@ void JumpPoint::validate() return; } size_t pos = targetlabel().find(':'); - if ((pos < 1 ) || (pos >= (targetlabel().size()-1))) { + if ((pos < 1) || (pos >= (targetlabel().size() - 1))) { con_warn << " Jumppoint with invalid target label '" << targetlabel() << "'\n"; return; } std::string zonelabel(targetlabel().substr(0, pos)); - std::string entitylabel(targetlabel().substr(pos+1, targetlabel().size()-pos)); + std::string entitylabel(targetlabel().substr(pos + 1, targetlabel().size() - pos)); core::Zone *targetzone = core::Zone::find(zonelabel); if (!targetzone) { @@ -68,7 +68,7 @@ void JumpPoint::validate() } jumppoint_target = static_cast<JumpPoint *>(targetentity); - + //con_debug << " Jumppoint " << zone->label() << ":" << label() << " with target " << targetlabel() << std::endl; } @@ -132,7 +132,7 @@ void JumpGate::dock(core::Entity *entity) if (ship->owner()) ship->owner()->send("Jumpgate inactive"); return; - } + } } void JumpGate::activate() diff --git a/src/game/base/jumppoint.h b/src/game/base/jumppoint.h index 900f1f3..fe29727 100644 --- a/src/game/base/jumppoint.h +++ b/src/game/base/jumppoint.h @@ -1,7 +1,7 @@ /* base/jumppoint.h - This file is part of the Osirion project and is distributed under - the terms and conditions of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_BASE_JUMPPOINT_H__ @@ -12,7 +12,8 @@ #include <string> -namespace game { +namespace game +{ /// a jumppoint /** @@ -21,14 +22,19 @@ namespace game { * between the current system and the target of the nearest jumppoint. * */ -class JumpPoint : public core::EntityDynamic { +class JumpPoint : public core::EntityDynamic +{ public: JumpPoint(); virtual ~JumpPoint(); - inline std::string const & targetlabel() { return jumppoint_targetlabel; } + inline std::string const & targetlabel() { + return jumppoint_targetlabel; + } - inline JumpPoint *target() { return jumppoint_target; } + inline JumpPoint *target() { + return jumppoint_target; + } /// set trget label void set_targetlabel(const std::string &label); @@ -42,7 +48,8 @@ private: }; /// a jumpgate -class JumpGate : public JumpPoint { +class JumpGate : public JumpPoint +{ public: JumpGate(); virtual ~JumpGate(); @@ -53,7 +60,9 @@ public: /// entity received a docking request virtual void dock(core::Entity *entity); - inline bool activated() const { return (jumpgate_timer > 0); } + inline bool activated() const { + return (jumpgate_timer > 0); + } void activate(); diff --git a/src/game/base/navpoint.cc b/src/game/base/navpoint.cc index 7b48ee7..78f1ae0 100644 --- a/src/game/base/navpoint.cc +++ b/src/game/base/navpoint.cc @@ -1,7 +1,7 @@ /* base/navpoint.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 + 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 "base/navpoint.h" diff --git a/src/game/base/navpoint.h b/src/game/base/navpoint.h index c2fb1d6..bb2420e 100644 --- a/src/game/base/navpoint.h +++ b/src/game/base/navpoint.h @@ -1,7 +1,7 @@ /* base/navpoint.h - This file is part of the Osirion project and is distributed under - the terms and conditions of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_BASE_NAVPOINT_H__ @@ -12,10 +12,12 @@ #include <string> -namespace game { +namespace game +{ /// a navigation point -class NavPoint : public core::Entity { +class NavPoint : public core::Entity +{ public: NavPoint(); ~NavPoint(); diff --git a/src/game/base/physics.cc b/src/game/base/physics.cc index b76e0c1..3cc7427 100644 --- a/src/game/base/physics.cc +++ b/src/game/base/physics.cc @@ -49,12 +49,12 @@ CollisionShape::CollisionShape(model::Model *model, const bool moving) if (group->type() == model::FragmentGroup::None) { // for each fragment - for (model::FragmentGroup::iterator fit = group->begin(); fit != group->end(); fit++) { + for (model::FragmentGroup::iterator fit = group->begin(); fit != group->end(); fit++) { model::Fragment *fragment = (*fit); - const size_t index = fragment->index(); - const size_t triangle_count = (fragment->structural_size() + fragment->detail_size()) / 3; - + const size_t index = fragment->index(); + const size_t triangle_count = (fragment->structural_size() + fragment->detail_size()) / 3; + // load vertices from the global VertexArray into the bullet shape for (size_t i = 0; i < triangle_count; i++) { float *f = vertexarray->vertex() + index + (i * 9); @@ -81,8 +81,8 @@ CollisionShape::CollisionShape(model::Model *model, const bool moving) static_shape = new btBvhTriangleMeshShape(shape_mesh, true, false); shape_bulletshape = static_shape; } - - + + con_debug << " collision data for " << model->name() << ": " << count << " tris " << std::endl; #endif } @@ -136,10 +136,10 @@ void Physics::init() { con_print << "^BInitializing bullet physics..." << std::endl; - configuration = new btDefaultCollisionConfiguration(); + configuration = new btDefaultCollisionConfiguration(); dispatcher = new btCollisionDispatcher(configuration); solver = new btSequentialImpulseConstraintSolver; - + } void Physics::frame(const float seconds) @@ -183,12 +183,12 @@ void Physics::shutdown() PhysicsZone::PhysicsZone(const std::string &label) : core::Zone(label) { #ifdef HAVE_BULLET - btVector3 worldAabbMin(-10000,-10000,-10000); - btVector3 worldAabbMax(10000,10000,10000); + btVector3 worldAabbMin(-10000, -10000, -10000); + btVector3 worldAabbMax(10000, 10000, 10000); const int maxProxies = 1024; - - zone_cache = new btAxisSweep3(worldAabbMin,worldAabbMax,maxProxies); - zone_dynamics_world = new btDiscreteDynamicsWorld(Physics::dispatcher, zone_cache, Physics::solver,Physics::configuration); + + zone_cache = new btAxisSweep3(worldAabbMin, worldAabbMax, maxProxies); + zone_dynamics_world = new btDiscreteDynamicsWorld(Physics::dispatcher, zone_cache, Physics::solver, Physics::configuration); // disable gravity zone_dynamics_world->setGravity(btVector3(0.0f, 0.0f, 0.0f)); @@ -222,7 +222,7 @@ PhysicsBody::PhysicsBody(core::Entity *entity) #endif } -PhysicsBody::~PhysicsBody() +PhysicsBody::~PhysicsBody() { #ifdef HAVE_BULLET if (collider_body) { @@ -251,22 +251,22 @@ void PhysicsBody::init_physics(const float mass) } if (!collider_body) { - btVector3 inertia(0,0,0); + btVector3 inertia(0, 0, 0); btTransform t; t.setIdentity(); t.setOrigin(to_btVector3(entity()->location())); t.setBasis(to_btMatrix3x3(entity()->axis())); - - + + if (moving) { - collider_shape->bullet_shape()->calculateLocalInertia(mass,inertia); + collider_shape->bullet_shape()->calculateLocalInertia(mass, inertia); btMotionState *motionstate = new btDefaultMotionState(t); btRigidBody::btRigidBodyConstructionInfo body_info(mass, motionstate, collider_shape->bullet_shape(), inertia); - collider_body = new btRigidBody(body_info); + collider_body = new btRigidBody(body_info); collider_body->setUserPointer((void *)entity()); - collider_body->setLinearFactor(btVector3(1,1,1)); + collider_body->setLinearFactor(btVector3(1, 1, 1)); collider_body->setCcdMotionThreshold(0.0001f); } else { collider_body = new btRigidBody(mass, 0, collider_shape->bullet_shape(), inertia); @@ -276,7 +276,7 @@ void PhysicsBody::init_physics(const float mass) if (entity()->zone()) { PhysicsZone *zone = static_cast<PhysicsZone *>(entity()->zone()); - zone->dynamics_world()->addRigidBody(collider_body); + zone->dynamics_world()->addRigidBody(collider_body); if (moving) { //collider_body->setActivationState(ISLAND_SLEEPING); //collider_body->setActivationState(ACTIVE_TAG); @@ -292,8 +292,7 @@ void PhysicsBody::shutdown_physics() if (collider_body && entity()->zone()) { PhysicsZone *zone = static_cast<PhysicsZone *>(entity()->zone()); - if(collider_body->getMotionState()) - { + if (collider_body->getMotionState()) { delete collider_body->getMotionState(); } zone->dynamics_world()->removeCollisionObject(collider_body); diff --git a/src/game/base/physics.h b/src/game/base/physics.h index 37ed1cf..3bbd749 100644 --- a/src/game/base/physics.h +++ b/src/game/base/physics.h @@ -1,7 +1,7 @@ /* base/physics.h - This file is part of the Osirion project and is distributed under - the terms and conditions of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_BASE_PHYSICS_H__ @@ -23,7 +23,8 @@ */ -namespace game { +namespace game +{ #ifdef HAVE_BULLET /// helper function to convert math:Vector3f to btVector3 @@ -36,29 +37,36 @@ inline btVector3 to_btVector3(const math::Vector3f & v) inline btMatrix3x3 to_btMatrix3x3(const math::Axis &a) { return btMatrix3x3(a[0][0], a[0][1], a[0][2], - a[1][0], a[1][1], a[1][2], - a[2][0], a[2][1], a[2][2]); + a[1][0], a[1][1], a[1][2], + a[2][0], a[2][1], a[2][2]); }; #endif /* ---- class CollisionShape --------------------------------------- */ /// a bullet collision shape -class CollisionShape { +class CollisionShape +{ public: CollisionShape(model::Model *model, const bool moving); ~CollisionShape(); - inline const std::string &label() const { return shape_label; } + inline const std::string &label() const { + return shape_label; + } - inline const bool moving() const { return shape_moving; } + inline const bool moving() const { + return shape_moving; + } #ifdef HAVE_BULLET - inline btCollisionShape *bullet_shape() { return shape_bulletshape; } + inline btCollisionShape *bullet_shape() { + return shape_bulletshape; + } #endif -/* ----- static functions for the shape registry ------------------- */ + /* ----- static functions for the shape registry ------------------- */ /// tpye definition for the collision shape registry typedef std::vector<CollisionShape *> Registry; @@ -85,7 +93,8 @@ private: /* ---- class Physics ---------------------------------------------- */ /// main physics functions -class Physics { +class Physics +{ public: /// intialize world physics static void init(); @@ -108,13 +117,16 @@ public: /* ---- class PhysicsZone ------------------------------------------ */ /// a zone containing collision objects -class PhysicsZone : public core::Zone { +class PhysicsZone : public core::Zone +{ public: PhysicsZone(const std::string &label); virtual ~PhysicsZone(); #ifdef HAVE_BULLET - inline btDiscreteDynamicsWorld *dynamics_world() { return zone_dynamics_world; } + inline btDiscreteDynamicsWorld *dynamics_world() { + return zone_dynamics_world; + } private: btAxisSweep3 *zone_cache; @@ -125,10 +137,11 @@ private: /* ---- class PhysicsBody ------------------------------------------ */ /// an object that is capable of colliding with other objects -class PhysicsBody { +class PhysicsBody +{ public: /// initialize a collider attached to an entity - /** + /** * a PhysicsBody with zero mass is considered non-moving */ PhysicsBody(core::Entity *entity); @@ -141,14 +154,20 @@ public: void shutdown_physics(); /// collider mass - inline const float mass() const { return collider_mass; } + inline const float mass() const { + return collider_mass; + } /// the entity the collider is attached to - inline core::Entity *entity() { return collider_entity; } + inline core::Entity *entity() { + return collider_entity; + } #ifdef HAVE_BULLET /// the bullet rigid body associated with this collider - inline btRigidBody *body() { return collider_body; } + inline btRigidBody *body() { + return collider_body; + } #endif private: diff --git a/src/game/base/planet.cc b/src/game/base/planet.cc index b1ac976..f9535ba 100644 --- a/src/game/base/planet.cc +++ b/src/game/base/planet.cc @@ -8,7 +8,8 @@ #include "base/planet.h" -namespace game { +namespace game +{ Planet::Planet() : core::EntityGlobe(core::Entity::Static | core::Entity::Solid) { @@ -46,7 +47,7 @@ void Planet::dock(core::Entity *entity) Ship * ship = static_cast<Ship *>(entity); - if (math::distance(location(), ship->location()) > radius() + ship->radius() + 50.0f ) { + if (math::distance(location(), ship->location()) > radius() + ship->radius() + 50.0f) { if (ship->owner()) ship->owner()->send("Planet out of range"); return; @@ -55,7 +56,7 @@ void Planet::dock(core::Entity *entity) ship->get_location().assign(entity->location()); ship->set_state(core::Entity::Docked); - if (ship->owner() && ship->owner()->control() == ship) { + if (ship->owner() && ship->owner()->control() == ship) { ship->owner()->set_view(this); ship->owner()->send("^BDocking at " + name()); } diff --git a/src/game/base/planet.h b/src/game/base/planet.h index c9bb214..f0bf75f 100644 --- a/src/game/base/planet.h +++ b/src/game/base/planet.h @@ -1,7 +1,7 @@ /* base/planet.h - This file is part of the Osirion project and is distributed under - the terms and conditions of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_BASE_PLANET_H__ @@ -13,15 +13,19 @@ #include <string> -namespace game { +namespace game +{ /// a planet -class Planet : public core::EntityGlobe { +class Planet : public core::EntityGlobe +{ public: Planet(); virtual ~Planet(); - inline ShipDealer *shipdealer() { return planet_shipdealer; } + inline ShipDealer *shipdealer() { + return planet_shipdealer; + } void set_shipdealer(ShipDealer *shipdealer); diff --git a/src/game/base/racetrack.cc b/src/game/base/racetrack.cc index 3d1cb69..51526ea 100644 --- a/src/game/base/racetrack.cc +++ b/src/game/base/racetrack.cc @@ -1,7 +1,7 @@ /* base/racetrack.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 + 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 <string> @@ -11,7 +11,8 @@ #include "base/racetrack.h" #include "core/gameserver.h" -namespace game { +namespace game +{ /* ---- class CheckPoint ------------------------------------------- */ @@ -31,7 +32,7 @@ CheckPoint::CheckPoint(RaceTrack *parent) CheckPoint::~CheckPoint() { - + } /* ---- class RaceTrack -------------------------------------------- */ @@ -64,7 +65,7 @@ void RaceTrack::reset() track_player = 0; track_racestart = 0; track_checkpointtime = 0; - + for (CheckPoints::iterator cpit = track_checkpoints.begin(); cpit != track_checkpoints.end(); ++cpit) { (*cpit)->set_state(core::Entity::NoPower); } @@ -74,7 +75,7 @@ void RaceTrack::reset() void RaceTrack::dock(core::Entity *entity) { - + if (entity->moduletype() != ship_enttype) return; Ship * ship = static_cast<Ship *>(entity); @@ -96,7 +97,7 @@ void RaceTrack::dock(core::Entity *entity) for (CheckPoints::iterator cpit = track_checkpoints.begin(); cpit != track_checkpoints.end(); ++cpit) { set_state(core::Entity::Normal); } - + entity_timer = 5.0f; std::string message("^B" + track_player->name() + " ^Bactivated the race! Race starts in 5..."); core::server()->broadcast(message); @@ -163,7 +164,7 @@ void RaceTrack::frame(float seconds) track_player->set_mission_target((*track_checkpoint)); } } - + } else { @@ -192,7 +193,7 @@ void RaceTrack::frame(float seconds) } else { std::stringstream msgstr; - msgstr << "^BRace completed in " << core::server()->time() - track_racestart << " seconds!"; + msgstr << "^BRace completed in " << core::server()->time() - track_racestart << " seconds!"; core::server()->broadcast(msgstr.str()); // prize money diff --git a/src/game/base/racetrack.h b/src/game/base/racetrack.h index 80a5766..ef7375a 100644 --- a/src/game/base/racetrack.h +++ b/src/game/base/racetrack.h @@ -1,7 +1,7 @@ /* base/racetrack.h - This file is part of the Osirion project and is distributed under - the terms and conditions of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_BASE_RACETRACK_H__ @@ -13,14 +13,16 @@ #include <string> -namespace game { +namespace game +{ class CheckPoint; /* ---- class RaceTrack -------------------------------------------- */ /// a race track entity -class RaceTrack : public core::EntityDynamic { +class RaceTrack : public core::EntityDynamic +{ public: /// default constructor @@ -33,7 +35,9 @@ public: typedef std::list<CheckPoint *> CheckPoints ; /// the player who activated the race - inline core::Player *player() { return track_player; } + inline core::Player *player() { + return track_player; + } /// add a checkpoint to the racetrack void add_checkpoint(CheckPoint *checkpoint); @@ -46,20 +50,21 @@ public: /// run one time frame virtual void frame(float elapsed); - + private: CheckPoints track_checkpoints; core::Player *track_player; float track_racestart; float track_checkpointtime; CheckPoints::iterator track_checkpoint; - + }; /* ---- class CheckPoint ------------------------------------------- */ /// a checkpoint for the race track -class CheckPoint : public core::EntityDynamic { +class CheckPoint : public core::EntityDynamic +{ public: CheckPoint(RaceTrack *parent); ~CheckPoint(); diff --git a/src/game/base/ship.cc b/src/game/base/ship.cc index 8bc7799..2c42ca8 100644 --- a/src/game/base/ship.cc +++ b/src/game/base/ship.cc @@ -1,7 +1,7 @@ /* base/ship.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 + 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 <cmath> @@ -19,13 +19,14 @@ using math::degrees360f; using math::degrees180f; -namespace game { +namespace game +{ const float MIN_DELTA = 0.000001f; Ship::Ship(core::Player *owner, ShipModel *shipmodel) : - core::EntityControlable(owner, ship_enttype), - PhysicsBody(this) + core::EntityControlable(owner, ship_enttype), + PhysicsBody(this) { set_modelname(shipmodel->modelname()); set_name(shipmodel->name()); @@ -41,7 +42,7 @@ Ship::Ship(core::Player *owner, ShipModel *shipmodel) : ship_shipmodel = shipmodel; ship_jumpdrive = shipmodel->shipmodel_jumpdrive; - + ship_impulsedrive_timer = 0; ship_jumpdrive_timer = 0; ship_jumpdepart = 0; @@ -49,7 +50,7 @@ Ship::Ship(core::Player *owner, ShipModel *shipmodel) : reset(); } -Ship::~Ship() +Ship::~Ship() { shutdown_physics(); } @@ -71,16 +72,16 @@ void Ship::func_impulse() } else if (entity_state == core::Entity::ImpulseInitiate) { entity_state = core::Entity::Normal; - + } else if (entity_state != core::Entity::Normal) { return; - - } else { + + } else { if (entity_state == core::Entity::JumpInitiate) { ship_jumpdrive_timer = 0; entity_timer = 0; } - + entity_state = core::Entity::ImpulseInitiate; if (Game::g_devel->value()) { entity_timer = 0; @@ -137,12 +138,12 @@ void Ship::func_jump(std::string const &args) owner()->send("Usage: jump [^B" + helpstr + "^N]"); return; } - + if (jumptargetzone == zone()) { owner()->send("Already in the " + jumptargetzone->name()); return; } - + owner()->send("Jumping to the " + jumptargetzone->name()); set_zone(jumptargetzone); @@ -188,7 +189,7 @@ JumpPoint * Ship::find_closest_jumppoint() } } } - + if (jumppoint && jumppoint->target()) { if (Game::g_jumppointrange->value() < d) { owner()->send("Jumppoint out of range!"); @@ -201,14 +202,14 @@ JumpPoint * Ship::find_closest_jumppoint() owner()->send("No jumppoints found!"); return 0; } - + return 0; } void Ship::explode() { set_state(core::Entity::Destroyed); - + target_thrust = 0; target_pitch = 0; target_roll = 0; @@ -235,7 +236,7 @@ void Ship::set_zone(core::Zone *zone) init_physics(radius()); } -void Ship::frame(float seconds) +void Ship::frame(float seconds) { float actual_maxspeed = ship_shipmodel->maxspeed(); float actual_turnspeed = ship_shipmodel->turnspeed(); @@ -247,10 +248,10 @@ void Ship::frame(float seconds) const float thrust_reaction = 0.5f; // thrust control reaction time factor const float strafe_reaction = 1.5f; const float afterburner_reaction = 1.0f; // a fterburner control reaction time - + float cosangle; // cosine of an angle - float angle; // angle in radians + float angle; // angle in radians math::Vector3f n; // normal of a plane math::Axis target_axis(axis()); // target axis #endif @@ -270,7 +271,7 @@ void Ship::frame(float seconds) target_direction = 0; target_afterburner = 0.0f; target_thrust = 0; - + entity_speed = 0; entity_thrust = 0; @@ -289,7 +290,7 @@ void Ship::frame(float seconds) //entity_location += entity_axis.forward() * radius(); } else { get_location().assign(ship_jumpdepart->target()->location() + location() - ship_jumpdepart->location()); - } + } set_zone(ship_jumpdepart->target()->zone()); owner()->send("^BJumping to the " + ship_jumpdepart->target()->zone()->name()); } else { @@ -297,7 +298,7 @@ void Ship::frame(float seconds) } ship_jumpdrive_timer = 0; entity_timer = 0; - + set_dirty(); return; } else { @@ -340,12 +341,12 @@ void Ship::frame(float seconds) if (target_afterburner < 0.0f) { set_state(core::Entity::Normal); set_dirty(); - entity_timer = 0; + entity_timer = 0; } else { if (ship_impulsedrive_timer + 1.0f <= core::server()->time()) { entity_timer -= 1.0f; - + if (entity_timer <= 0) { actual_maxspeed = Game::g_impulsespeed->value(); actual_acceleration = Game::g_impulseacceleration->value(); @@ -357,25 +358,23 @@ void Ship::frame(float seconds) set_dirty(); } } - + // clamp input values target_thrust = 0.0f; math::clamp(target_pitch, -1.0f, 1.0f); math::clamp(target_roll, -1.0f, 1.0f); math::clamp(target_direction, -1.0f, 1.0f); math::clamp(target_afterburner, -1.0f, 1.0f); - + actual_turnspeed *= 0.5; } } else if (entity_state == core::Entity::Impulse) { // clamp input values - target_thrust = 0.0f; math::clamp(target_pitch, -1.0f, 1.0f); math::clamp(target_roll, -1.0f, 1.0f); math::clamp(target_direction, -1.0f, 1.0f); - target_afterburner = 0.0f; // cancel impulse drive if afterburner goes reverse if (target_afterburner < 0.0f) { @@ -383,11 +382,13 @@ void Ship::frame(float seconds) set_dirty(); entity_timer = 0; target_thrust = 1.0f; - target_thrust = 1.0f; - } else { + entity_thrust = 1.0f; + } else { actual_maxspeed = Game::g_impulsespeed->value(); actual_acceleration = Game::g_impulseacceleration->value(); actual_turnspeed *= 0.5; + target_afterburner = 0.0f; + target_thrust = 0.0f; } } else if (entity_state == core::Entity::Normal) { @@ -412,7 +413,7 @@ void Ship::frame(float seconds) target_direction = 0; target_afterburner = 0.0f; target_thrust = 0; - + entity_thrust = 0; } @@ -448,7 +449,7 @@ void Ship::frame(float seconds) if ((entity_state == core::Entity::ImpulseInitiate) || (entity_state == core::Entity::Impulse)) { actual_thrust = 1.0f; } - + // update strafe control target if (current_target_strafe < target_strafe) { @@ -476,7 +477,7 @@ void Ship::frame(float seconds) } math::clamp(current_target_roll, -1.0f, 1.0f); - if (fabs(current_target_roll) > MIN_DELTA) { + if (fabs(current_target_roll) > MIN_DELTA) { float roll_offset = seconds * current_target_roll; get_axis().change_roll(actual_turnspeed * roll_offset); } else { @@ -496,7 +497,7 @@ void Ship::frame(float seconds) } } - if (fabs(current_target_direction) > MIN_DELTA ) { + if (fabs(current_target_direction) > MIN_DELTA) { math::clamp(current_target_direction, -1.0f, 1.0f); target_axis.change_direction(actual_turnspeed * current_target_direction); } else { @@ -513,7 +514,7 @@ void Ship::frame(float seconds) if (current_target_pitch < target_pitch) current_target_pitch = target_pitch; } - + if (fabs(current_target_pitch) > MIN_DELTA) { math::clamp(current_target_pitch, -1.0f, 1.0f); target_axis.change_pitch(actual_turnspeed * current_target_pitch); @@ -538,7 +539,7 @@ void Ship::frame(float seconds) if (entity_speed > max) { entity_speed = max; } - } else if(entity_speed > max) { + } else if (entity_speed > max) { entity_speed -= actual_acceleration * seconds; if (entity_speed < max) { entity_speed = max; @@ -584,7 +585,7 @@ void Ship::frame(float seconds) entity_movement = math::max(entity_movement, fabs(current_target_afterburner)); entity_movement = math::max(entity_movement, fabs(current_target_strafe)); - if ((entity_movement > 0)|| (entity_speed > 0)) { + if ((entity_movement > 0) || (entity_speed > 0)) { set_dirty(); } } diff --git a/src/game/base/ship.h b/src/game/base/ship.h index 21987e7..e1b8b1d 100644 --- a/src/game/base/ship.h +++ b/src/game/base/ship.h @@ -1,7 +1,7 @@ /* base/ship.h - This file is part of the Osirion project and is distributed under - the terms and conditions of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_BASE_SHIP_H__ @@ -14,7 +14,8 @@ #include "base/jumppoint.h" #include "math/vector3f.h" -namespace game { +namespace game +{ /// A ship in the game, controled by a player class Ship : public core::EntityControlable, public PhysicsBody @@ -30,7 +31,9 @@ public: virtual void set_zone(core::Zone *zone); /// true if the ship is equiped with a jumpdrive - inline bool jumpdrive() const { return ship_jumpdrive; } + inline bool jumpdrive() const { + return ship_jumpdrive; + } /// Initiate jump, departing from a jump point /** Initiates a jump even if the ship has no jumpdrive @@ -65,7 +68,7 @@ private: float ship_impulsedrive_timer; - + JumpPoint *ship_jumpdepart; }; diff --git a/src/game/base/shipdealer.cc b/src/game/base/shipdealer.cc index 408ae43..54d3e90 100644 --- a/src/game/base/shipdealer.cc +++ b/src/game/base/shipdealer.cc @@ -1,7 +1,7 @@ /* base/shipdealer.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 + 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 "auxiliary/functions.h" @@ -11,7 +11,8 @@ #include "base/station.h" #include "sys/sys.h" -namespace game { +namespace game +{ ShipDealer::ShipDealer() { @@ -67,7 +68,7 @@ ShipModel *ShipDealer::find(ShipModel *shipmodel) const void ShipDealer::func_buy(core::Player *player, const std::string &args) { core::Entity *dock = player->view(); - + ShipDealer *shipdealer = 0; // find the ship model @@ -102,7 +103,7 @@ void ShipDealer::func_buy(core::Player *player, const std::string &args) } if (!Game::g_devel->value()) { - + if (!shipdealer) { player->send("No ship dealer available"); return; @@ -116,7 +117,7 @@ void ShipDealer::func_buy(core::Player *player, const std::string &args) // check price if (shipmodel->price() > player->credits()) { std::stringstream msgstr; - msgstr << "You require " << (shipmodel->price() - player->credits()) << " additional credits to buy the " << shipmodel->name(); + msgstr << "You require " << (shipmodel->price() - player->credits()) << " additional credits to buy the " << shipmodel->name(); player->send(msgstr.str()); return; } @@ -135,7 +136,7 @@ void ShipDealer::func_buy(core::Player *player, const std::string &args) ship->get_location().assign(dock->location()); ship->set_state(core::Entity::Docked); ship->get_axis().assign(dock->axis()); - ship->get_axis().change_direction(180.0f); + ship->get_axis().change_direction(180.0f); player->set_control(ship); player->set_view(dock); } else { @@ -148,9 +149,9 @@ void ShipDealer::func_buy(core::Player *player, const std::string &args) msgstr << "^BPurchased " << aux::article(shipmodel->name()); if (!Game::g_devel->value()) { msgstr << " for " << shipmodel->price() << " credits"; - } + } player->send(msgstr.str()); - player->sound("game/buy-ship"); + player->sound("game/buy-ship"); } diff --git a/src/game/base/shipdealer.h b/src/game/base/shipdealer.h index 48f9835..1d93f03 100644 --- a/src/game/base/shipdealer.h +++ b/src/game/base/shipdealer.h @@ -1,7 +1,7 @@ /* base/shipdealer.h - This file is part of the Osirion project and is distributed under - the terms and conditions of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_BASE_SHIPDEALER_H__ @@ -12,29 +12,30 @@ #include "base/shipmodel.h" #include "core/entity.h" -namespace game { +namespace game +{ class ShipDealer { public: typedef std::list<ShipModel *> Models; - + ShipDealer(); ~ShipDealer(); /// add a ship model to the dealer list ShipModel *add(const std::string &modelname); - + /// find a ship model in the dealer list ShipModel *find(const std::string &modelname) const; - + /// find a ship model in the dealer list ShipModel *find(ShipModel *shipmodel) const; static void func_buy(core::Player *player, const std::string &args); private: - Models dealer_models; + Models dealer_models; }; } diff --git a/src/game/base/shipmodel.cc b/src/game/base/shipmodel.cc index 9d905d6..6233120 100644 --- a/src/game/base/shipmodel.cc +++ b/src/game/base/shipmodel.cc @@ -1,7 +1,7 @@ /* base/shipmodel.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 + 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 <iomanip> @@ -10,7 +10,8 @@ #include "base/shipmodel.h" #include "sys/sys.h" -namespace game { +namespace game +{ // the ship model registry std::map<std::string, ShipModel *> ShipModel::registry; @@ -35,7 +36,7 @@ ShipModel::~ShipModel() void ShipModel::clear() { for (iterator smit = registry.begin(); smit != registry.end(); smit++) { - delete (*smit).second; + delete(*smit).second; } registry.clear(); } @@ -43,7 +44,7 @@ void ShipModel::clear() void ShipModel::print() { con_print << "label: ^B" << label() << " ^Nname: ^B" << name() << std::endl; - con_print << " price: ^B" << price() << std::endl; + con_print << " price: ^B" << price() << std::endl; con_print << " acceleration: ^B" << acceleration() << std::endl; con_print << " turnspeed: ^B" << turnspeed() << std::endl; con_print << " max speed: ^B" << maxspeed() << std::endl; @@ -64,33 +65,39 @@ void ShipModel::generate_info(core::Info *info) info->add_text(""); info->add_text("^BSpecifications:^N"); - std::stringstream str; + std::stringstream str; str << "price: ^B" << price() << " ^Ncredits"; - info->add_text(str.str()); str.str(""); + info->add_text(str.str()); + str.str(""); str << "cargo hold: ^B" << 0.1f * maxcargo() << " ^Nmetric tonnes"; - info->add_text(str.str()); str.str(""); + info->add_text(str.str()); + str.str(""); str << "top speed: ^B" << 100.0f * maxspeed() << " ^Nmps"; - info->add_text(str.str()); str.str(""); + info->add_text(str.str()); + str.str(""); str << "response: ^B" << turnspeed() << " ^Ndps"; - info->add_text(str.str()); str.str(""); + info->add_text(str.str()); + str.str(""); str << "acceleration: ^B" << acceleration() << " ^Nstandard"; - info->add_text(str.str()); str.str(""); + info->add_text(str.str()); + str.str(""); - if(shipmodel_jumpdrive) { + if (shipmodel_jumpdrive) { str << "hyperspace jump drive capable"; - info->add_text(str.str()); str.str(""); + info->add_text(str.str()); + str.str(""); } } void ShipModel::list() { for (iterator smit = registry.begin(); smit != registry.end(); smit++) { - con_print << std::setw(24) << (*smit).second->label() - << " ^B" << (*smit).second->name() << "\n"; + con_print << std::setw(24) << (*smit).second->label() + << " ^B" << (*smit).second->name() << "\n"; } con_print << registry.size() << " registered ship models\n"; } @@ -132,12 +139,12 @@ ShipModel *ShipModel::search(const std::string searchname) for (iterator smit = registry.begin(); smit != registry.end(); smit++) { ShipModel *shipmodel = (*smit).second; - + label.assign(shipmodel->label()); if (label.size() && (label.find(strsearchkey) != std::string::npos)) { return shipmodel; } - + name.assign(aux::lowercase(shipmodel->name())); if (name.size() && (name.find(strsearchkey) != std::string::npos)) { return shipmodel; @@ -155,7 +162,7 @@ void ShipModel::add(ShipModel *shipmodel) con_warn << "Duplicate ship model " << shipmodel->label() << "!\n"; delete m; } - + registry[shipmodel->label()] = shipmodel; } diff --git a/src/game/base/shipmodel.h b/src/game/base/shipmodel.h index 9bdf4f5..0cfe87e 100644 --- a/src/game/base/shipmodel.h +++ b/src/game/base/shipmodel.h @@ -1,7 +1,7 @@ /* base/shipmodel.h - This file is part of the Osirion project and is distributed under - the terms and conditions of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_BASE_SHIPMODEL_H__ @@ -12,7 +12,8 @@ #include "core/info.h" -namespace game { +namespace game +{ /// ship model specifications class ShipModel @@ -24,43 +25,69 @@ public: void print(); /// acceleration - inline const float acceleration() const { return shipmodel_acceleration; } + inline const float acceleration() const { + return shipmodel_acceleration; + } /// maximum speed - inline const float maxspeed() const { return shipmodel_maxspeed; } - + inline const float maxspeed() const { + return shipmodel_maxspeed; + } + /// turn speed in rotations per second - inline const float turnspeed() const { return shipmodel_turnspeed; } + inline const float turnspeed() const { + return shipmodel_turnspeed; + } /// label of the ship model - inline const std::string &label() const { return shipmodel_label; } + inline const std::string &label() const { + return shipmodel_label; + } /// name of the ship model - inline const std::string & name() const { return shipmodel_name; } + inline const std::string & name() const { + return shipmodel_name; + } /// name of the model of the ship - inline const std::string & modelname() const { return shipmodel_modelname; } + inline const std::string & modelname() const { + return shipmodel_modelname; + } /// price of the ship - inline const long price() const { return shipmodel_price; } + inline const long price() const { + return shipmodel_price; + } /// size of the cargo hold - inline const float maxcargo() const { return shipmodel_maxcargo; } + inline const float maxcargo() const { + return shipmodel_maxcargo; + } /// set acceleration - inline void set_acceleration(const float acceleration) { shipmodel_acceleration = acceleration; } + inline void set_acceleration(const float acceleration) { + shipmodel_acceleration = acceleration; + } /// set maximum speed - inline void set_maxspeed(const float maxspeed) { shipmodel_maxspeed = maxspeed; } + inline void set_maxspeed(const float maxspeed) { + shipmodel_maxspeed = maxspeed; + } /// set turn speed - inline void set_turnspeed(const float turnspeed) { shipmodel_turnspeed = turnspeed; } + inline void set_turnspeed(const float turnspeed) { + shipmodel_turnspeed = turnspeed; + } /// set price - inline void set_price(const long price) { shipmodel_price = price; } + inline void set_price(const long price) { + shipmodel_price = price; + } /// set size of the cargo hold - inline void set_maxcargo(const float maxcargo) { shipmodel_maxcargo = maxcargo; } + inline void set_maxcargo(const float maxcargo) { + shipmodel_maxcargo = maxcargo; + } /// generate an info object for this shipmodel void generate_info(core::Info *info); @@ -108,7 +135,7 @@ private: float shipmodel_maxcargo; long shipmodel_price; - + }; } diff --git a/src/game/base/star.cc b/src/game/base/star.cc index ba3ccba..43efd0c 100644 --- a/src/game/base/star.cc +++ b/src/game/base/star.cc @@ -8,7 +8,8 @@ #include "base/star.h" -namespace game { +namespace game +{ Star::Star() : core::EntityGlobe(core::Entity::Static | core::Entity::Solid | core::Entity::Bright) { diff --git a/src/game/base/star.h b/src/game/base/star.h index 5283894..12bec07 100644 --- a/src/game/base/star.h +++ b/src/game/base/star.h @@ -1,7 +1,7 @@ /* base/star.h - This file is part of the Osirion project and is distributed under - the terms and conditions of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_BASE_STAR_H__ @@ -14,10 +14,12 @@ // C++ headers #include <string> -namespace game { +namespace game +{ /// a star, that shines so bright -class Star : public core::EntityGlobe { +class Star : public core::EntityGlobe +{ public: Star(); ~Star(); diff --git a/src/game/base/station.cc b/src/game/base/station.cc index 0552269..fb548bb 100644 --- a/src/game/base/station.cc +++ b/src/game/base/station.cc @@ -1,14 +1,15 @@ /* base/station.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 + 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 "base/game.h" #include "base/station.h" #include "sys/sys.h" -namespace game { +namespace game +{ Station::Station() : Entity(), PhysicsBody(this) { @@ -51,7 +52,7 @@ void Station::dock(core::Entity *entity) ship->get_location().assign(entity->location()); ship->set_state(core::Entity::Docked); - if (ship->owner() && ship->owner()->control() == ship) { + if (ship->owner() && ship->owner()->control() == ship) { ship->owner()->set_view(this); ship->owner()->send("^BDocking at " + name()); } diff --git a/src/game/base/station.h b/src/game/base/station.h index ae4d0f4..ad627dd 100644 --- a/src/game/base/station.h +++ b/src/game/base/station.h @@ -1,7 +1,7 @@ /* base/station.h - This file is part of the Osirion project and is distributed under - the terms and conditions of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_BASE_STATION_H__ @@ -10,7 +10,8 @@ #include "base/shipdealer.h" #include "base/physics.h" -namespace game { +namespace game +{ class Station : public core::Entity, public PhysicsBody { @@ -18,7 +19,9 @@ public: Station(); virtual ~Station(); - inline ShipDealer *shipdealer() { return station_shipdealer; } + inline ShipDealer *shipdealer() { + return station_shipdealer; + } void set_shipdealer(ShipDealer *shipdealer); diff --git a/src/game/example/example.cc b/src/game/example/example.cc index f368556..a6372da 100644 --- a/src/game/example/example.cc +++ b/src/game/example/example.cc @@ -1,14 +1,15 @@ /* intro/intro.cc - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #include "core/gameserver.h" #include "example/example.h" #include "example/spectator.h" -namespace example { +namespace example +{ core::Module *factory() { @@ -47,7 +48,7 @@ Example::Example() : core::Module("The Osirion Project Example", true) cube->get_color().assign(1, 0, 0); // set RGB color red cube->set_radius(0.25f); // set radius, in game units cube->set_zone(zone); // add the entity to the zone - + core::Entity *sphere = new core::Entity(); // a new entity sphere->set_label("sphere"); sphere->set_name("The Green Sphere"); diff --git a/src/game/example/example.h b/src/game/example/example.h index 64e9e4d..f6d6ff6 100644 --- a/src/game/example/example.h +++ b/src/game/example/example.h @@ -1,7 +1,7 @@ /* intro/example.h - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_EXAMPLE_H__ diff --git a/src/game/example/spectator.cc b/src/game/example/spectator.cc index 5fad0f1..93c6fdd 100644 --- a/src/game/example/spectator.cc +++ b/src/game/example/spectator.cc @@ -1,12 +1,13 @@ /* base/spectator.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 + 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 "example/spectator.h" -namespace example { +namespace example +{ core::Cvar *Spectator::g_spectatorspeed = 0; core::Cvar *Spectator::g_spectatorrotation = 0; @@ -43,7 +44,7 @@ void Spectator::frame(float elapsed) get_axis().change_direction(target_direction * rotation); get_axis().change_pitch(target_pitch * rotation); get_axis().change_roll(target_roll * rotation); - + // assign speed from thruster float maxspeed = g_spectatorspeed->value(); entity_speed = entity_thrust * maxspeed; diff --git a/src/game/example/spectator.h b/src/game/example/spectator.h index 435c45c..57f223b 100644 --- a/src/game/example/spectator.h +++ b/src/game/example/spectator.h @@ -1,7 +1,7 @@ /* base/spectator.h - This file is part of the Osirion project and is distributed under - the terms and conditions of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_EXAMPLE_SPECTATOR_H__ @@ -10,7 +10,8 @@ #include "core/entity.h" #include "core/cvar.h" -namespace example { +namespace example +{ /// A spectator entity class Spectator : public core::EntityControlable diff --git a/src/game/game.cc b/src/game/game.cc index 719611c..2a9ddad 100644 --- a/src/game/game.cc +++ b/src/game/game.cc @@ -16,7 +16,7 @@ void register_modules(bool register_noninteractive_modules) { con_print << "^BRegistering game modules..." << std::endl; - + // non-interactive modules core::Loader::add("base", game::factory); core::Loader::add("example", example::factory); diff --git a/src/game/game.h b/src/game/game.h index 027a125..a3121bc 100644 --- a/src/game/game.h +++ b/src/game/game.h @@ -1,13 +1,13 @@ /* game/game.h - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_GAME_H__ #define __INCLUDED_GAME_H__ -void register_modules(bool register_noninteractive_modules=false); +void register_modules(bool register_noninteractive_modules = false); #endif // __INCLUDED_GAME_H__ diff --git a/src/game/intro/convoy.cc b/src/game/intro/convoy.cc index ac52c38..4a21071 100644 --- a/src/game/intro/convoy.cc +++ b/src/game/intro/convoy.cc @@ -1,12 +1,13 @@ /* intro/convoy.h - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #include "intro/convoy.h" -namespace intro { +namespace intro +{ /* ---- class Member ----------------------------------------------- */ @@ -34,10 +35,10 @@ void Member::frame(float seconds) Convoy::Convoy(core::Zone *zone) : core::EntityDynamic() { - set_zone(zone); + set_zone(zone); set_label("convoy"); set_name("Convoy"); - + entity_speed = 1.0f; set_serverside(); } @@ -68,20 +69,20 @@ void Convoy::add(const std::string &model) member->get_location().assign(location()); d = ((float) convoy_members.size()) * 0.5f; - member->get_location().get_x() += math::randomf((float) convoy_members.size()) -d; - member->get_location().get_y() += math::randomf((float) convoy_members.size()) -d; - member->get_location().get_z() += (math::randomf((float) convoy_members.size()) -d) * 0.5f; + member->get_location().get_x() += math::randomf((float) convoy_members.size()) - d; + member->get_location().get_y() += math::randomf((float) convoy_members.size()) - d; + member->get_location().get_z() += (math::randomf((float) convoy_members.size()) - d) * 0.5f; member->get_axis().assign(axis()); } void Convoy::frame(float seconds) { - for (Members::iterator it = convoy_members.begin(); it != convoy_members.end(); ) { + for (Members::iterator it = convoy_members.begin(); it != convoy_members.end();) { Member *member = (*it); if (member->location().length() > 64.0f) { std::string model(member->model()->name()); - member->die(); + member->die(); convoy_members.erase(it++); add(model); } else { diff --git a/src/game/intro/convoy.h b/src/game/intro/convoy.h index 2002164..64204a0 100644 --- a/src/game/intro/convoy.h +++ b/src/game/intro/convoy.h @@ -1,7 +1,7 @@ /* intro/convoy.h - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_INTRO_CONVOY_H__ @@ -12,7 +12,8 @@ #include "core/entity.h" #include "math/color.h" -namespace intro { +namespace intro +{ /* ---- class Member ----------------------------------------------- */ diff --git a/src/game/intro/intro.cc b/src/game/intro/intro.cc index 05dcec7..f2da493 100644 --- a/src/game/intro/intro.cc +++ b/src/game/intro/intro.cc @@ -1,7 +1,7 @@ /* intro/intro.cc - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #include "intro/intro.h" @@ -12,7 +12,8 @@ #include "math/color.h" #include "sys/sys.h" -namespace intro { +namespace intro +{ core::Module *factory() { @@ -53,7 +54,7 @@ bool Intro::load_world() math::Vector3f v; float f; bool b; - + while (ini.getline()) { if (ini.got_section()) { @@ -63,18 +64,18 @@ bool Intro::load_world() zone->set_name("Introduction"); zone->set_sky("sky"); core::Zone::add(zone); - + } else if (ini.got_section("convoy")) { if (zone) { convoy = new Convoy(zone); } - + } else if (ini.got_section("globe")) { if (zone) { globe = new core::EntityGlobe(); globe->set_zone(zone); } - + } else { ini.unknown_section(); } @@ -84,7 +85,7 @@ bool Intro::load_world() if (ini.got_key_string("label", strval)) { zone->set_label(strval); - + } else if (ini.got_key_string("sky", strval)) { zone->set_sky(strval); @@ -128,7 +129,9 @@ bool Intro::load_world() } else if (ini.got_key_float("rotationspeed", globe->entity_rotationspeed)) { continue; } else if (ini.got_key_bool("bright", b)) { - if (b) { globe->set_flag(core::Entity::Bright); } + if (b) { + globe->set_flag(core::Entity::Bright); + } } else if (ini.got_key()) { ini.unkown_key(); } diff --git a/src/game/intro/intro.h b/src/game/intro/intro.h index d6d8393..7f2e58c 100644 --- a/src/game/intro/intro.h +++ b/src/game/intro/intro.h @@ -1,7 +1,7 @@ /* intro/intro.h - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_INTRO_H__ diff --git a/src/math/axis.cc b/src/math/axis.cc index 31ba26a..402b2f6 100644 --- a/src/math/axis.cc +++ b/src/math/axis.cc @@ -30,7 +30,7 @@ void Axis::clear() void Axis::assign(const Axis & other) { - for (size_t i=0; i < 3; i++) { + for (size_t i = 0; i < 3; i++) { axis_vector[i].assign(other.axis_vector[i]); } } @@ -46,10 +46,10 @@ void Axis::change_direction(const float angle) { float cosa = cosf(angle * M_PI / 180.0f); float sina = sinf(angle * M_PI / 180.0f); - + Vector3f forward = axis_vector[0] * cosa + axis_vector[1] * sina; - Vector3f left = axis_vector[1] *cosa - axis_vector[0] * sina; - + Vector3f left = axis_vector[1] * cosa - axis_vector[0] * sina; + axis_vector[0].assign(forward); axis_vector[1].assign(left); } @@ -59,10 +59,10 @@ void Axis::change_pitch(const float angle) { float cosa = cosf(angle * M_PI / 180.0f); float sina = sinf(angle * M_PI / 180.0f); - + Vector3f forward = axis_vector[0] * cosa + axis_vector[2] * sina; Vector3f up = axis_vector[2] * cosa - axis_vector[0] * sina; - + axis_vector[0].assign(forward); axis_vector[2].assign(up); } @@ -72,10 +72,10 @@ void Axis::change_roll(const float angle) { float cosa = cosf(angle * M_PI / 180.0f); float sina = sinf(angle * M_PI / 180.0f); - + Vector3f forward = axis_vector[2] * cosa + axis_vector[1] * sina; Vector3f up = axis_vector[1] * cosa - axis_vector[2] * sina; - + axis_vector[2].assign(forward); axis_vector[1].assign(up); } @@ -88,19 +88,19 @@ void Axis::rotate(Vector3f const &normal, float angle) { float cosa = cosf(angle); float sina = sinf(angle); - - for (size_t i =0; i < 3; i++) { + + for (size_t i = 0; i < 3; i++) { axis_vector[i] = - axis_vector[i]*cosa + + axis_vector[i] * cosa + normal * dotproduct(normal, axis_vector[i]) * (1 - cosa) + - crossproduct(axis_vector[i], normal)*sina; + crossproduct(axis_vector[i], normal) * sina; } } const Axis Axis::transpose() const { Axis t; - + for (size_t i = 0; i < 3; i++) for (size_t j = 0; j < 3; j++) t.axis_vector[i][j] = axis_vector[j][i]; diff --git a/src/math/axis.h b/src/math/axis.h index 5f532c8..0ece016 100644 --- a/src/math/axis.h +++ b/src/math/axis.h @@ -20,53 +20,53 @@ class Axis public: Axis(); Axis(const Axis & other); - + void clear(); - + void assign(const Axis & other); - + /// global coordinates of the X-axis in the local coordinates system inline const Vector3f & forward() const { return axis_vector[0]; } - + /// global coordinates of the Y-axis in the local coordinates system inline const Vector3f & left() const { return axis_vector[1]; } - + /// global coordinates of the Z-axis in the local coordinates system inline const Vector3f & up() const { return axis_vector[2]; } - + inline Vector3f & operator[](size_t index) { return axis_vector[index]; } - + inline const Vector3f & operator[](size_t index) const { return axis_vector[index]; } - + Axis & operator=(const Axis & other); const Axis operator*(const Axis &other) const; - + /// change direction, rotate around up vector (positive is left) void change_direction(const float angle); - + /// change pitch, rotate around left vector (positive is up) void change_pitch(const float angle); - + /// change roll, rotate around forward vector (positive is left) void change_roll(const float angle); - + /// rotation about an arbitrary axis void rotate(const Vector3f & normal, const float angle); - + /// return the transpose of this matrix const Axis transpose() const; - + private: Vector3f axis_vector[3]; }; diff --git a/src/math/color.cc b/src/math/color.cc index ff4cb5d..b807b96 100644 --- a/src/math/color.cc +++ b/src/math/color.cc @@ -75,21 +75,21 @@ const Color & Color::operator=(Color const & other) void Color::clamp() { - for (int i =0; i < 4; i++) + for (int i = 0; i < 4; i++) if (rgba_data[i] < 0) rgba_data[i] = 0; - + float tmp = rgba_data[0]; if (rgba_data[1] > tmp) tmp = rgba_data[1]; if (rgba_data[2] > tmp) tmp = rgba_data[2]; - + if (tmp > 1) { - for (int i =0; i < 3; i++) + for (int i = 0; i < 3; i++) rgba_data[i] /= tmp; } - + if (rgba_data[3] > 1) rgba_data[3] = 1; } @@ -126,7 +126,7 @@ Color const operator*(float scalar, Color const & color) Color & Color::operator*=(const float scalar) { - for (int i=0; i < 3; i++) + for (int i = 0; i < 3; i++) rgba_data[i] *= scalar; return (*this); } diff --git a/src/math/color.h b/src/math/color.h index 762ac94..8996af2 100644 --- a/src/math/color.h +++ b/src/math/color.h @@ -19,12 +19,12 @@ public: /// create the default color, white Color(); /// create a color from float RGBA value - Color(float red, float green, float blue, float alpha=1.0f); + Color(float red, float green, float blue, float alpha = 1.0f); /// create a greyscale color - Color(const float grey, const float=1.0f); + Color(const float grey, const float = 1.0f); /// create a copy from an existing color Color(Color const & other); - + /// red channel value float red() const; /// green channel value @@ -33,22 +33,22 @@ public: float blue() const; /// alpha channel value float alpha() const; - + /// assignment void assign(Color const & other); /// assignment - void assign(float red, float green, float blue, float alpha=1.0f); + void assign(float red, float green, float blue, float alpha = 1.0f); /// assignment - void assign(float grey, float alpha=1.0f); + void assign(float grey, float alpha = 1.0f); /// assignment operator Color const &operator=(Color const & other); - + /// multiply rgb values with scalar value. Color operator*(const float scalar) const; - + /// multiply rgb values with scalar value. Color & operator*=(const float scalar); - + /// assign a value to an element of this color /*! WARNING: range is not checked * @param index the index of the element to assign to ( 0 <= index < 4 ) @@ -56,7 +56,7 @@ public: inline float& operator[](const size_t index) { return rgba_data[index]; } - + /// returns the value of an element of this color /*! WARNING: range is not checked * @param index the index of the element to return ( 0 <= index < 4 ) @@ -64,22 +64,22 @@ public: inline float operator[](const size_t index) const { return rgba_data[index]; } - - + + /// pointer to the internal data inline float *ptr() const { return (float *) rgba_data; } - + /// clamp color values to the 0-1 range void clamp(); - + float &r; float &g; float &b; float &a; - - + + private: float rgba_data[4]; }; diff --git a/src/math/functions.cc b/src/math/functions.cc index bb4e9bf..c4b832c 100644 --- a/src/math/functions.cc +++ b/src/math/functions.cc @@ -68,7 +68,7 @@ float sgnf(float value) return -1; else if (value == 0) return 0; - + return 1; } diff --git a/src/math/functions.h b/src/math/functions.h index ed013ab..c301969 100644 --- a/src/math/functions.h +++ b/src/math/functions.h @@ -49,7 +49,7 @@ float degrees180f(float angle); float degrees360f(float angle); /// clamp a float to a specified range -inline void clamp(float &value, const float min=0.0f, const float max=1.0f) +inline void clamp(float &value, const float min = 0.0f, const float max = 1.0f) { if (value < min) value = min; diff --git a/src/math/matrix4f.cc b/src/math/matrix4f.cc index 371d666..b7953e9 100644 --- a/src/math/matrix4f.cc +++ b/src/math/matrix4f.cc @@ -36,7 +36,7 @@ void Matrix4f::clear() void Matrix4f::unity() { memset(matrix, 0, sizeof(matrix)); - for (int i=0; i <4; i++) + for (int i = 0; i < 4; i++) matrix[i][i] = 1; } @@ -48,7 +48,7 @@ void Matrix4f::assign(const Matrix4f & other) void Matrix4f::assign(const Axis & axis) { memset(matrix, 0, sizeof(matrix)); - for (int i=0; i < 3; i++) { + for (int i = 0; i < 3; i++) { memcpy(&matrix[i][0], axis[i].ptr(), sizeof(float) * 3); } matrix[3][3] = 1; @@ -69,7 +69,7 @@ Matrix4f & Matrix4f::operator=(const Axis & axis) Matrix4f const Matrix4f::transpose() { Matrix4f t; - + for (size_t i = 0; i < 4; i++) for (size_t j = 0; j < 4; j++) t.matrix[j][i] = matrix[i][j]; diff --git a/src/math/matrix4f.h b/src/math/matrix4f.h index e69ae05..4148870 100644 --- a/src/math/matrix4f.h +++ b/src/math/matrix4f.h @@ -21,33 +21,33 @@ public: Matrix4f(); Matrix4f(const Matrix4f & other); Matrix4f(const Axis & axis); - + /// set all values to zero void clear(); - + /// set the value to a 4x4 unity matrix void unity(); - + /// assignment operator void assign(const Matrix4f & other); - + /// assignment operator inline Matrix4f & operator=(const Matrix4f &other); - + /// assign the matrix transformation equivalent to the coordinate system void assign(const Axis & axis); - + /// assign the matrix transformation equivalent to the coordinate system Matrix4f & operator=(const Axis & axis); - + /// return a pointer to the internal data inline float * ptr() const { return (float *) matrix; } - + /// return the transpose matrix Matrix4f const transpose(); - + private: float matrix[4][4]; }; diff --git a/src/math/vector2f.cc b/src/math/vector2f.cc index 65f1f93..878304f 100644 --- a/src/math/vector2f.cc +++ b/src/math/vector2f.cc @@ -17,7 +17,7 @@ Vector2f::Vector2f() clear(); } -Vector2f::Vector2f(const Vector2f &other) +Vector2f::Vector2f(const Vector2f &other) { assign(other); } @@ -66,17 +66,17 @@ Vector2f &Vector2f::operator-=(const Vector2f &other) float distance(const Vector2f& first, const Vector2f& second) { float r = 0; - for (int i=0; i < 2; i++) - r += (first[i]-second[i])*(first[i]-second[i]); - + for (int i = 0; i < 2; i++) + r += (first[i] - second[i]) * (first[i] - second[i]); + return (sqrtf(r)); } float distancesquared(const Vector2f& first, const Vector2f& second) { float r = 0; - for (int i=0; i < 2; i++) - r += (first[i]-second[i])*(first[i]-second[i]); + for (int i = 0; i < 2; i++) + r += (first[i] - second[i]) * (first[i] - second[i]); return (r); } diff --git a/src/math/vector2f.h b/src/math/vector2f.h index ba60aa1..1a5f4de 100644 --- a/src/math/vector2f.h +++ b/src/math/vector2f.h @@ -19,96 +19,104 @@ class Vector2f public: /// default constructor Vector2f(); - + /// assignment constructor Vector2f(const float x, const float y); - + /// copy constructor Vector2f(const Vector2f &other); - + /// assign (0,0) void clear(); - + /// assignment operator void assign(const float x, const float y); - + /// assignment operator void assign(const Vector2f &other); - + /// assignment operator Vector2f & operator=(const Vector2f &other); - + /// vector subtraction Vector2f & operator-=(const Vector2f &other); - + /// vector sum Vector2f & operator+=(const Vector2f &other); - + /// vector subtraction inline Vector2f operator+(const Vector2f &other) const { - Vector2f v(coord[0] + other.coord[0], coord[1]+other.coord[1]); + Vector2f v(coord[0] + other.coord[0], coord[1] + other.coord[1]); return v; } - + /// vector sum inline Vector2f operator-(const Vector2f &other) const { Vector2f v(coord[0] - other.coord[0], coord[1] - other.coord[1]); return v; } - + /// scalar product inline Vector2f operator*(const float scalar) const { Vector2f v(coord[0]*scalar, coord[1]*scalar); return v; } - + /// scalar division inline Vector2f operator/(const float scalar) const { - Vector2f v(coord[0]/scalar, coord[1]/scalar); + Vector2f v(coord[0] / scalar, coord[1] / scalar); return v; } - + /// array operator inline float& operator[](const size_t index) { return coord[index]; } - + /// array operator inline float operator[](const size_t index) const { return coord[index]; } - + /// x coordinate inline float width() const { return coord[0]; } - + /// y coordinate inline float height() const { return coord[1]; } /// x coordinate - inline float x() const { return coord[0]; } - + inline float x() const { + return coord[0]; + } + /// y coordinate - inline float y() const { return coord[1]; } + inline float y() const { + return coord[1]; + } /// mutable reference to the x coordinate - inline float & get_x() { return coord[0]; } + inline float & get_x() { + return coord[0]; + } /// mutable reference to the y coordinate - inline float & get_y() { return coord[1]; } - + inline float & get_y() { + return coord[1]; + } + /// a pointer to the internal data inline float *ptr() const { return (float *) coord; } - + inline bool contains(const Vector2f &other) const { return ((other.coord[0] >= 0) && (other.coord[1] >= 0) && (other.coord[0] <= coord[0]) && (other.coord[1] <= coord[1])); } - + inline bool contains(float x, float y) const { return ((x >= 0) && (y >= 0) && (x <= coord[0]) && (y <= coord[1])); } diff --git a/src/math/vector3f.cc b/src/math/vector3f.cc index 1e9fd2b..4594665 100644 --- a/src/math/vector3f.cc +++ b/src/math/vector3f.cc @@ -56,35 +56,35 @@ Vector3f & Vector3f::operator=(const Vector3f & other) Vector3f & Vector3f::operator*=(const float scalar) { - for (int i=0; i < 3; i++) + for (int i = 0; i < 3; i++) coord[i] *= scalar; return (*this); } Vector3f & Vector3f::operator/=(const float scalar) { - for (int i=0; i < 3; i++) + for (int i = 0; i < 3; i++) coord[i] /= scalar; return (*this); } Vector3f &Vector3f::operator-=(const Vector3f & other) { - for (int i=0; i < 3; i++) + for (int i = 0; i < 3; i++) coord[i] -= other[i]; return (*this); } Vector3f &Vector3f::operator+=(const Vector3f &other) { - for (int i=0; i < 3; i++) + for (int i = 0; i < 3; i++) coord[i] += other[i]; return (*this); } bool Vector3f::operator==(const Vector3f& other) const { - for (int i=0; i < 3; i++) + for (int i = 0; i < 3; i++) if (coord[i] != other.coord[i]) return (false); return (true); @@ -93,17 +93,17 @@ bool Vector3f::operator==(const Vector3f& other) const float Vector3f::lengthsquared() const { float r = 0; - for (int i=0; i < 3; i++) - r += coord[i]*coord[i]; + for (int i = 0; i < 3; i++) + r += coord[i] * coord[i]; return ((float) r); } float Vector3f::length() const { float r = 0; - for (int i=0; i < 3; i++) - r += coord[i]*coord[i]; - + for (int i = 0; i < 3; i++) + r += coord[i] * coord[i]; + return (sqrtf(r)); } @@ -125,24 +125,24 @@ std::ostream &operator<<(std::ostream & os, const Vector3f & vector) std::istream &operator>>(std::istream & is, Vector3f & vector) { - for (int i=0; i < 3; i++) + for (int i = 0; i < 3; i++) is >> vector[i]; return is; } -const Vector3f crossproduct(const Vector3f & first, Vector3f const &second) +const Vector3f crossproduct(const Vector3f & first, const Vector3f &second) { - float vx = first[1]*second[2] - first[2]*second[1]; - float vy = first[2]*second[0] - first[0]*second[2]; - float vz = first[0]*second[1] - first[1]*second[0]; - - return(Vector3f(vx,vy,vz)); + float vx = first[1] * second[2] - first[2] * second[1]; + float vy = first[2] * second[0] - first[0] * second[2]; + float vz = first[0] * second[1] - first[1] * second[0]; + + return(Vector3f(vx, vy, vz)); } float dotproduct(const Vector3f& first, const Vector3f& second) { float r = 0; - for (int i=0; i < 3; i++) + for (int i = 0; i < 3; i++) r += first[i] * second[i]; return (r); } @@ -150,17 +150,17 @@ float dotproduct(const Vector3f& first, const Vector3f& second) float distance(const Vector3f& first, const Vector3f& second) { float r = 0; - for (int i=0; i < 3; i++) - r += (first[i]-second[i])*(first[i]-second[i]); - + for (int i = 0; i < 3; i++) + r += (first[i] - second[i]) * (first[i] - second[i]); + return (sqrtf(r)); } float distancesquared(const Vector3f& first, const Vector3f& second) { float r = 0; - for (int i=0; i < 3; i++) - r += (first[i]-second[i])*(first[i]-second[i]); + for (int i = 0; i < 3; i++) + r += (first[i] - second[i]) * (first[i] - second[i]); return (r); } diff --git a/src/math/vector3f.h b/src/math/vector3f.h index 99a665f..09e6e84 100644 --- a/src/math/vector3f.h +++ b/src/math/vector3f.h @@ -23,81 +23,81 @@ class Vector3f public: /// default constructor, assigns (0,0,0) Vector3f(); - + /// copy constructor /** Create a new Vector3f that is a copy from an other * @param other the vector to copy values from */ Vector3f(const Vector3f &other); - + /// create a Vector3f with given coordinates /** @param x the x-coordinate of the location * @param y the y-coordinate of the location * @param z the z-coordinate of the location */ Vector3f(const float x, const float y, const float z); - + /// destructor ~Vector3f(); - + /* -- Assignment operators -- */ /// assign (0, 0, 0) void clear(); - + /// assignment void assign(const float x, const float y, const float z); - + /// assignment void assign(const Vector3f & other); - + /// assignment operator Vector3f& operator=(const Vector3f &other); - + /// scalar multiplication assignment /** @param scalar multiplication factor */ Vector3f& operator*=(const float scalar); - + /// scalar division assignment /** @param scalar divider */ Vector3f& operator/=(const float scalar); - + /// vector sum assignment Vector3f& operator+=(const Vector3f &other); - + /// vector difference assignment Vector3f& operator-=(const Vector3f &other); - + /* -- Mathematical operators -- */ - + /// scalar multiplication inline Vector3f operator*(const float scalar) const { Vector3f v(coord[0] * scalar, coord[1] * scalar, coord[2] * scalar); return v; } - + /// scalar division Vector3f operator/(const float scalar) const { Vector3f v(coord[0] / scalar, coord[1] / scalar, coord[2] / scalar); return v; } - + /// vector sum inline Vector3f operator+(const Vector3f &other) const { Vector3f v(coord[0] + other.coord[0], coord[1] + other.coord[1], coord[2] + other.coord[2]); return v; } - + /// vector difference inline Vector3f operator-(const Vector3f &other) const { Vector3f v(coord[0] - other.coord[0], coord[1] - other.coord[1], coord[2] - other.coord[2]); return v; } - + /// comparison operator bool operator==(const Vector3f &other) const; - + /// assign a value to an element of this vector /*! range is not checked * @param index the index of the element to assign to ( 0 <= index < 3 ) @@ -105,7 +105,7 @@ public: inline float& operator[](const size_t index) { return coord[index]; } - + /// returns the value of an element of this vector /*! range is not checked * @param index the index of the element to return ( 0 <= index < 3 ) @@ -113,61 +113,75 @@ public: inline float operator[](const size_t index) const { return coord[index]; } - + /// x coordinate - inline float x() const { return coord[0]; } + inline float x() const { + return coord[0]; + } /// y coordinate - inline float y() const { return coord[1]; } + inline float y() const { + return coord[1]; + } /// z coordinate - inline float z() const { return coord[2]; } + inline float z() const { + return coord[2]; + } - /// mutable reference to the x coordinate - inline float & get_x() { return coord[0]; } + /// mutable reference to the x coordinate + inline float & get_x() { + return coord[0]; + } /// mutable reference to the y coordinate - inline float & get_y() { return coord[1]; } + inline float & get_y() { + return coord[1]; + } /// mutable reference to the z coordinate - inline float & get_z() { return coord[2]; } + inline float & get_z() { + return coord[2]; + } /// a pointer to the internal data - inline float *ptr() const { return (float *) coord; } + inline float *ptr() const { + return (float *) coord; + } /// cartesian length float length() const; - + /// cartesian length squared float lengthsquared() const; - + /// divide this Vector by its length /// @see normalized() /// vector must not be (0, 0, 0) void normalize(); - + /* static functions */ - + /// Returns the unity vector on the X-axis static inline Vector3f Xaxis() { return Vector3f(1.0f, 0.0f, 0.0f); } - + /// Returns the unity vector on the Y-axis static inline Vector3f Yaxis() { return Vector3f(0.0f, 1.0f, 0.0f); } - + /// Returns the unity vector on the Z-axis static inline Vector3f Zaxis() { return Vector3f(0.0f, 0.0f, 1.0f); } - + /// cartesian lenght static inline float length(const Vector3f & vector) { return vector.length(); } - + /// Return a vector divided by it's length /// @see normalize() /// WARNING: vector must not be (0, 0, 0) diff --git a/src/model/asefile.cc b/src/model/asefile.cc index 6010947..3bf0d59 100644 --- a/src/model/asefile.cc +++ b/src/model/asefile.cc @@ -23,7 +23,7 @@ ASEFile::ASEFile(std::string const &name) asefile_ifs.open(asefile_name); - for (int i=0; i < 3; i++) { + for (int i = 0; i < 3; i++) { ase_minbbox[i] = MAX_BOUNDS; ase_maxbbox[i] = -MAX_BOUNDS; } @@ -33,17 +33,17 @@ ASEFile::ASEFile(std::string const &name) ASEFile::~ASEFile() { for (VertexList::iterator it = ase_tvertexlist.begin(); it != ase_tvertexlist.end(); it++) { - delete (*it).second; + delete(*it).second; } ase_tvertexlist.clear(); for (VertexList::iterator it = ase_vertexlist.begin(); it != ase_vertexlist.end(); it++) { - delete (*it).second; + delete(*it).second; } ase_vertexlist.clear(); for (FaceList::iterator it = ase_facelist.begin(); it != ase_facelist.end(); it++) { - delete (*it).second; + delete(*it).second; } ase_facelist.clear(); @@ -60,7 +60,7 @@ bool ASEFile::read_header(std::istream &is) char data[1024]; memset(data, 0, sizeof(data)); - if (!is.getline(data, sizeof(data) -1 )) { + if (!is.getline(data, sizeof(data) - 1)) { return false; } @@ -82,7 +82,7 @@ bool ASEFile::read_mesh_vertex_list(std::istream &is) char data[1024]; memset(data, 0, sizeof(data)); - while (is.getline(data, sizeof(data) -1 )) { + while (is.getline(data, sizeof(data) - 1)) { std::istringstream line(data); std::string firstword; @@ -93,7 +93,7 @@ bool ASEFile::read_mesh_vertex_list(std::istream &is) return true; - } else if ( firstword.compare("*MESH_VERTEX") == 0) { + } else if (firstword.compare("*MESH_VERTEX") == 0) { size_t index; float x, y, z; if (line >> index >> x >> y >> z) { @@ -123,7 +123,7 @@ bool ASEFile::read_mesh_face_list(std::istream &is) char data[1024]; memset(data, 0, sizeof(data)); - while (is.getline(data, sizeof(data) -1 )) { + while (is.getline(data, sizeof(data) - 1)) { std::istringstream line(data); std::string word; @@ -133,22 +133,22 @@ bool ASEFile::read_mesh_face_list(std::istream &is) //con_debug << " " << count << " mesh faces" << std::endl; return true; - } else if ( word.compare("*MESH_FACE") == 0) { + } else if (word.compare("*MESH_FACE") == 0) { std::string facestr; size_t a, b, c; - if ( (line >> facestr) && - (line >> word) && (line >> a) && - (line >> word) && (line >> b) && - (line >> word) && (line >> c)) { + if ((line >> facestr) && + (line >> word) && (line >> a) && + (line >> word) && (line >> b) && + (line >> word) && (line >> c)) { if (facestr.size() && facestr[facestr.size()-1] == ':') { - facestr.erase(facestr.size()-1); + facestr.erase(facestr.size() - 1); } size_t index; std::istringstream faceindexstr(facestr); faceindexstr >> index; - + Triangle *triangle = new Triangle(*ase_vertexlist[a], *ase_vertexlist[b], *ase_vertexlist[c]); ase_facelist[index] = triangle; } @@ -171,7 +171,7 @@ bool ASEFile::read_mesh_normals(std::istream &is) float x, y, z; FaceList::iterator it; - while (is.getline(data, sizeof(data) -1 )) { + while (is.getline(data, sizeof(data) - 1)) { std::istringstream line(data); std::string firstword; @@ -181,7 +181,7 @@ bool ASEFile::read_mesh_normals(std::istream &is) //con_debug << " " << count << " face normals" << std::endl; return true; - } else if ( firstword.compare("*MESH_FACENORMAL") == 0) { + } else if (firstword.compare("*MESH_FACENORMAL") == 0) { if (line >> index >> x >> y >> z) { it = ase_facelist.find(index); if (it != ase_facelist.end()) { @@ -194,10 +194,10 @@ bool ASEFile::read_mesh_normals(std::istream &is) } else { it = ase_facelist.end(); } - } else if ( firstword.compare("*MESH_VERTEXNORMAL") == 0) { + } else if (firstword.compare("*MESH_VERTEXNORMAL") == 0) { + + if ((it != ase_facelist.end()) && (line >> index >> x >> y >> z)) { - if ( (it != ase_facelist.end()) && (line >> index >> x >> y >> z)) { - if (vertindex == 0) { (*it).second->n0().assign(x, y, z); } else if (vertindex == 1) { @@ -220,7 +220,7 @@ bool ASEFile::read_mesh_tvertex_list(std::istream &is) char data[1024]; memset(data, 0, sizeof(data)); - while (is.getline(data, sizeof(data) -1 )) { + while (is.getline(data, sizeof(data) - 1)) { std::istringstream line(data); std::string firstword; @@ -230,7 +230,7 @@ bool ASEFile::read_mesh_tvertex_list(std::istream &is) //con_debug << " " << count << " texture vertices" << std::endl; return true; - } else if ( firstword.compare("*MESH_TVERT") == 0) { + } else if (firstword.compare("*MESH_TVERT") == 0) { size_t index; float x, y, z; if (line >> index >> x >> y >> z) { @@ -246,12 +246,12 @@ bool ASEFile::read_mesh_tvertex_list(std::istream &is) bool ASEFile::read_mesh_tface_list(std::istream &is) { -size_t count = 0; + size_t count = 0; char data[1024]; memset(data, 0, sizeof(data)); - while (is.getline(data, sizeof(data) -1 )) { + while (is.getline(data, sizeof(data) - 1)) { std::istringstream line(data); std::string firstword; @@ -261,7 +261,7 @@ size_t count = 0; //con_debug << " " << count << " face texture coordinates" << std::endl; return true; - } else if ( firstword.compare("*MESH_TFACE") == 0) { + } else if (firstword.compare("*MESH_TFACE") == 0) { size_t index, a, b, c; if (line >> index >> a >> b >> c) { Triangle *triangle = ase_facelist[index]; @@ -292,38 +292,38 @@ bool ASEFile::read_mesh(std::istream &is) ase_vertexlist.clear(); - while (is.getline(data, sizeof(data) -1 )) { + while (is.getline(data, sizeof(data) - 1)) { std::istringstream line(data); std::string word; line >> word; - if ((level == 1 ) && (word.compare("*MESH_VERTEX_LIST") == 0)) { + if ((level == 1) && (word.compare("*MESH_VERTEX_LIST") == 0)) { if ((line >> word) && (word.compare("{") == 0)) { //con_debug << " " << name() << " *MESH_VERTEX_LIST" << std::endl; read_mesh_vertex_list(is); } - } else if ((level == 1 ) && (word.compare("*MESH_FACE_LIST") == 0)) { + } else if ((level == 1) && (word.compare("*MESH_FACE_LIST") == 0)) { if ((line >> word) && (word.compare("{") == 0)) { //con_debug << " " << name() << " *MESH_FACE_LIST" << std::endl; read_mesh_face_list(is); } - } else if ((level == 1 ) && (word.compare("*MESH_NORMALS") == 0)) { + } else if ((level == 1) && (word.compare("*MESH_NORMALS") == 0)) { if ((line >> word) && (word.compare("{") == 0)) { //con_debug << " " << name() << " *MESH_NORMALS" << std::endl; read_mesh_normals(is); } - } else if ((level == 1 ) && (word.compare("*MESH_TVERTLIST") == 0)) { - if ((line >> word) && (word.compare("{") == 0)) { + } else if ((level == 1) && (word.compare("*MESH_TVERTLIST") == 0)) { + if ((line >> word) && (word.compare("{") == 0)) { //con_debug << " " << name() << " *MESH_TVERTLIST" << std::endl; read_mesh_tvertex_list(is); } - } else if ((level == 1 ) && (word.compare("*MESH_TFACELIST") == 0)) { - if ((line >> word) && (word.compare("{") == 0)) { + } else if ((level == 1) && (word.compare("*MESH_TFACELIST") == 0)) { + if ((line >> word) && (word.compare("{") == 0)) { //con_debug << " " << name() << " *MESH_TFACELIST" << std::endl; read_mesh_tface_list(is); } @@ -352,13 +352,13 @@ bool ASEFile::read_geom(std::istream &is) memset(data, 0, sizeof(data)); int level = 1; - while (is.getline(data, sizeof(data) -1 )) { + while (is.getline(data, sizeof(data) - 1)) { std::istringstream line(data); std::string word; line >> word; - if ((level == 1 ) && (word.compare("*MESH") == 0)) { + if ((level == 1) && (word.compare("*MESH") == 0)) { if ((line >> word) && (word.compare("{") == 0)) { //con_debug << " " << name() << " " << "*MESH" << std::endl; read_mesh(is); @@ -391,13 +391,13 @@ bool ASEFile::read() char data[1024]; memset(data, 0, sizeof(data)); - while (asefile_ifs.getline(data, sizeof(data) -1 )) { + while (asefile_ifs.getline(data, sizeof(data) - 1)) { std::istringstream line(data); std::string word; line >> word; - - if (word.compare("*GEOMOBJECT") == 0) { + + if (word.compare("*GEOMOBJECT") == 0) { if ((line >> word) && (word.compare("{") == 0)) { //con_debug << " " << name() << " " << "*GEOMOBJECT" << std::endl; @@ -429,9 +429,9 @@ Model * ASEFile::load(const std::string &name) // default material Material *material = Material::find(name); if (!material) { - material = new Material(name); + material = new Material(name); Material::add(material); - material->set_flags(Material::Texture); + //material->set_flags(Material::Texture); material->set_texture(material->name()); } @@ -449,7 +449,7 @@ Model * ASEFile::load(const std::string &name) // caculate bounding box model->model_minbbox = (asefile.ase_minbbox - center) * scale; - model->model_maxbbox = (asefile.ase_maxbbox - center) * scale; + model->model_maxbbox = (asefile.ase_maxbbox - center) * scale; model->set_radius(model->model_maxbbox.length()); model->set_origin(center * scale); @@ -460,14 +460,14 @@ Model * ASEFile::load(const std::string &name) fragment->add_vertex((triangle->v0() - center) * scale , triangle->n0(), triangle->t0(), false); fragment->add_vertex((triangle->v1() - center) * scale , triangle->n1(), triangle->t1(), false); fragment->add_vertex((triangle->v2() - center) * scale , triangle->n2(), triangle->t2(), false); - + model->model_tris_count++; } model->add_group(group); con_debug << " " << asefile.name() << " " << asefile.ase_vertexlist.size() << " vertices " << - model->model_tris_detail_count << "/" << model->model_tris_count << " detail/tris" << std::endl; + model->model_tris_detail_count << "/" << model->model_tris_count << " detail/tris" << std::endl; return model; } diff --git a/src/model/asefile.h b/src/model/asefile.h index c792a9d..e129ec0 100644 --- a/src/model/asefile.h +++ b/src/model/asefile.h @@ -84,10 +84,11 @@ private: */ bool read(); - inline const std::string &name() const { return asefile_name; } + inline const std::string &name() const { + return asefile_name; + } - inline bool is_open() - { + inline bool is_open() { return asefile_ifs.is_open(); } diff --git a/src/model/face.cc b/src/model/face.cc index 7626fac..b7d5e45 100644 --- a/src/model/face.cc +++ b/src/model/face.cc @@ -22,20 +22,20 @@ Face::Face(Vector3f const & point0, Vector3f const &point1, Vector3f const &poin face_detail = false; face_surface_flags = 0; face_material = 0; - + face_point[0] = point0; face_point[1] = point1; face_point[2] = point2; - + face_normal = crossproduct((face_point[1] - face_point[0]) , (face_point[2] - face_point[0])); pd = -1 * (face_normal.x() * face_point[0].x() + face_normal.y() * face_point[0].y() + face_normal.z() * face_point[0].z()); } Face::Face(Face const & other) { - for (size_t i=0; i < 3; i++) + for (size_t i = 0; i < 3; i++) this->face_point[i] = other.face_point[i]; - + face_normal = crossproduct((face_point[1] - face_point[0]) , (face_point[2] - face_point[0])); pd = -1 * (face_normal.x() * face_point[0].x() + face_normal.y() * face_point[0].y() + face_normal.z() * face_point[0].z()); } diff --git a/src/model/face.h b/src/model/face.h index 725f798..cbed101 100644 --- a/src/model/face.h +++ b/src/model/face.h @@ -28,59 +28,50 @@ public: /// copy constructor Face(Face const & other); - + /// normal of the plane, not normalized to lenght 1 - inline math::Vector3f const & normal() const - { + inline math::Vector3f const & normal() const { return face_normal; } /// the points defining the plane. /// @param index 0 <= i < 3 - inline math::Vector3f const & point(size_t index) const - { + inline math::Vector3f const & point(size_t index) const { return face_point[index]; } /// face material - inline Material *material() const - { + inline Material *material() const { return face_material; } /// first parameter of the general plane equation - inline float a() const - { + inline float a() const { return face_normal[0]; } /// second parameter of the general plane equation - inline float b() const - { + inline float b() const { return face_normal[1]; } /// third param of the general plane equation - inline float c() const - { + inline float c() const { return face_normal[2]; } /// fourth parameter of the general plane equation - inline float d() const - { + inline float d() const { return pd; } /// indidcates if this plane was generated from a detail brush - inline bool detail() const - { + inline bool detail() const { return face_detail; } /// surface flags - inline unsigned int surface_flags() const - { + inline unsigned int surface_flags() const { return face_surface_flags; } @@ -93,22 +84,34 @@ public: } /// return texture shift - inline const math::Vector2f &tex_shift() { return face_tex_shift; } + inline const math::Vector2f &tex_shift() { + return face_tex_shift; + } - inline void set_material(Material *material) { face_material = material; } + inline void set_material(Material *material) { + face_material = material; + } - inline void set_detail(const bool detail = true) { face_detail = detail; } + inline void set_detail(const bool detail = true) { + face_detail = detail; + } - inline void set_surface_flags(const unsigned int flags) { face_surface_flags = flags; } + inline void set_surface_flags(const unsigned int flags) { + face_surface_flags = flags; + } /** * @brief return texture transformation vectors * @param index 0 <= i < 2 */ - inline math::Vector3f &get_tex_vec(size_t index) { return face_tex_vec[index]; } + inline math::Vector3f &get_tex_vec(size_t index) { + return face_tex_vec[index]; + } /// return texture shift - inline math::Vector2f &get_tex_shift() { return face_tex_shift; } + inline math::Vector2f &get_tex_shift() { + return face_tex_shift; + } private: math::Vector3f face_normal; diff --git a/src/model/fragment.cc b/src/model/fragment.cc index ab0f9fa..8e6483f 100644 --- a/src/model/fragment.cc +++ b/src/model/fragment.cc @@ -19,7 +19,7 @@ namespace model Fragment::Fragment(const Fragment &other) { fragment_type = other.fragment_type; - fragment_index = other.fragment_index; + fragment_index = other.fragment_index; fragment_structural_size = other.fragment_structural_size; fragment_detail_size = other.fragment_detail_size; fragment_material = other.fragment_material; @@ -71,7 +71,8 @@ FragmentGroup::~FragmentGroup() clear(); } -void FragmentGroup::clear() { +void FragmentGroup::clear() +{ for (iterator it = group_fragments.begin(); it != group_fragments.end(); it++) { delete(*it); diff --git a/src/model/fragment.h b/src/model/fragment.h index 0a9ca6a..6d65f7a 100644 --- a/src/model/fragment.h +++ b/src/model/fragment.h @@ -23,7 +23,7 @@ class Fragment public: /// fragment primitive type: triangles or quads enum Type {Triangles, Quads}; - + /// create a new fragment Fragment(Type type, const Material *material); @@ -31,43 +31,38 @@ public: * @brief copy constructor */ Fragment(const Fragment &other); - + /// add a vertex to the fragment size_t add_vertex(math::Vector3f const & vertex, math::Vector3f const &normal, bool detail); /// add a vertex to the fragment size_t add_vertex(math::Vector3f const & vertex, math::Vector3f const &normal, math::Vector2f const &texcoord, bool detail); - + /// the type of primitives this fragment consists of - inline Type type() const - { + inline Type type() const { return fragment_type; } - + /// VertexArray index of the start of the fragment - inline size_t index() const - { + inline size_t index() const { return fragment_index; } - + /// number of structural vertices in the fragment - inline size_t structural_size() const - { + inline size_t structural_size() const { return fragment_structural_size; } - + /// number of detail vertices in the fragment - inline size_t detail_size() const - { + inline size_t detail_size() const { return fragment_detail_size; } - + /// material flags - inline const Material * material() const - { + inline const Material * material() const { return fragment_material; } - + private: Type fragment_type; size_t fragment_index; @@ -92,38 +87,70 @@ public: ~FragmentGroup(); - inline const Type type() const { return group_type; } + inline const Type type() const { + return group_type; + } - inline const math::Vector3f &location() const { return group_location; } + inline const math::Vector3f &location() const { + return group_location; + } - inline const math::Axis & axis() const { return group_axis; } + inline const math::Axis & axis() const { + return group_axis; + } - inline const float speed() const { return group_speed; } + inline const float speed() const { + return group_speed; + } - inline const float scale() const { return group_scale; } - - inline const bool transform() const { return group_transform; } + inline const float scale() const { + return group_scale; + } - - inline void set_type(const Type type) { group_type = type; } + inline const bool transform() const { + return group_transform; + } - inline void set_location(const math::Vector3f &location) { group_location.assign(location); } - inline void set_axis(const math::Axis &axis) { group_axis.assign(axis); } + inline void set_type(const Type type) { + group_type = type; + } - inline void set_speed(const float speed) { group_speed = speed; } + inline void set_location(const math::Vector3f &location) { + group_location.assign(location); + } + + inline void set_axis(const math::Axis &axis) { + group_axis.assign(axis); + } + + inline void set_speed(const float speed) { + group_speed = speed; + } + + inline void set_scale(const float scale) { + group_scale = scale; + } - inline void set_scale(const float scale) { group_scale = scale; } + inline void set_transform(const bool transform) { + group_transform = transform; + } + + inline iterator begin() { + return group_fragments.begin(); + } - inline void set_transform(const bool transform) { group_transform = transform; } - - inline iterator begin() { return group_fragments.begin(); } + inline iterator end() { + return group_fragments.end(); + } - inline iterator end() { return group_fragments.end(); } - - inline const size_t size() const { return group_fragments.size(); } - - inline void add_fragment(Fragment *fragment) { group_fragments.push_back(fragment); } + inline const size_t size() const { + return group_fragments.size(); + } + + inline void add_fragment(Fragment *fragment) { + group_fragments.push_back(fragment); + } void clear(); diff --git a/src/model/mapfile.cc b/src/model/mapfile.cc index d3d19f6..8dff219 100644 --- a/src/model/mapfile.cc +++ b/src/model/mapfile.cc @@ -26,15 +26,14 @@ const float MAX_BOUNDS = 16384; const float MIN_DELTA = 10e-10; // from radiant tools/quake3/q3map2/map.c -math::Vector3f texture_baseaxis[18] = -{ +math::Vector3f texture_baseaxis[18] = { // normal texture plane - math::Vector3f(0,0,1), math::Vector3f(1,0,0), math::Vector3f(0,-1,0), // floor - math::Vector3f(0,0,-1), math::Vector3f(1,0,0), math::Vector3f(0,-1,0), // ceiling - math::Vector3f(1,0,0), math::Vector3f(0,1,0), math::Vector3f(0,0,-1), // west wall - math::Vector3f(-1,0,0), math::Vector3f(0,1,0), math::Vector3f(0,0,-1), // east wall - math::Vector3f(0,1,0), math::Vector3f(1,0,0), math::Vector3f(0,0,-1), // south wall - math::Vector3f(0,-1,0), math::Vector3f(1,0,0), math::Vector3f(0,0,-1) // north wall + math::Vector3f(0, 0, 1), math::Vector3f(1, 0, 0), math::Vector3f(0, -1, 0), // floor + math::Vector3f(0, 0, -1), math::Vector3f(1, 0, 0), math::Vector3f(0, -1, 0), // ceiling + math::Vector3f(1, 0, 0), math::Vector3f(0, 1, 0), math::Vector3f(0, 0, -1), // west wall + math::Vector3f(-1, 0, 0), math::Vector3f(0, 1, 0), math::Vector3f(0, 0, -1), // east wall + math::Vector3f(0, 1, 0), math::Vector3f(1, 0, 0), math::Vector3f(0, 0, -1), // south wall + math::Vector3f(0, -1, 0), math::Vector3f(1, 0, 0), math::Vector3f(0, 0, -1) // north wall }; @@ -46,19 +45,17 @@ void texture_axis_from_plane(const Face &face, math::Vector3f &xv, math::Vector3 float dot = 0; float best = 0; - math::Vector3f n(face.normal()*-1); + math::Vector3f n(face.normal()* -1); n.normalize(); - - for (size_t i=0 ; i<6 ; i++) - { + + for (size_t i = 0 ; i < 6 ; i++) { dot = math::dotproduct(n, texture_baseaxis[i *3]); - if( dot > best + MIN_DELTA ) /* ydnar: bug 637 fix, suggested by jmonroe */ - { + if (dot > best + MIN_DELTA) { /* ydnar: bug 637 fix, suggested by jmonroe */ best = dot; best_axis = i; } } - + xv.assign(texture_baseaxis[best_axis*3+1]); yv.assign(texture_baseaxis[best_axis*3+2]); } @@ -74,25 +71,28 @@ void face_texture_verts(Face &face, const math::Vector2f &tex_shift, const float float ang, sinv, cosv; float ns, nt; int i, j; - + texture_axis_from_plane(face, vecs[0], vecs[1]); - + if (!scale[0]) scale[0] = 1; if (!scale[1]) scale[1] = 1; // rotate axis - if (tex_rotate == 0.0f) - { sinv = 0.0f ; cosv = 1.0f; } - else if (tex_rotate == 90.0f) - { sinv = 1.0f ; cosv = 0.0f; } - else if (tex_rotate == 180.0f) - { sinv = 0.0f; cosv = -1.0f; } - else if (tex_rotate == 270.0f) - { sinv = -1.0f ; cosv = 0.0f; } - else - { + if (tex_rotate == 0.0f) { + sinv = 0.0f ; + cosv = 1.0f; + } else if (tex_rotate == 90.0f) { + sinv = 1.0f ; + cosv = 0.0f; + } else if (tex_rotate == 180.0f) { + sinv = 0.0f; + cosv = -1.0f; + } else if (tex_rotate == 270.0f) { + sinv = -1.0f ; + cosv = 0.0f; + } else { ang = tex_rotate / 180.0f * M_PI; sinv = sinf(ang); cosv = cosf(ang); @@ -112,15 +112,15 @@ void face_texture_verts(Face &face, const math::Vector2f &tex_shift, const float else tv = 2; - for (i=0 ; i<2 ; i++) { + for (i = 0 ; i < 2 ; i++) { ns = cosv * vecs[i][sv] - sinv * vecs[i][tv]; nt = sinv * vecs[i][sv] + cosv * vecs[i][tv]; vecs[i][sv] = ns; vecs[i][tv] = nt; } - for (i=0 ; i<2 ; i++) - for (j=0 ; j<3 ; j++) + for (i = 0 ; i < 2 ; i++) + for (j = 0 ; j < 3 ; j++) face.get_tex_vec(i)[j] = vecs[i][j] / scale[i]; face.get_tex_shift().assign(tex_shift); @@ -130,10 +130,10 @@ void face_texture_verts(Face &face, const math::Vector2f &tex_shift, const float // project vertex into texture plane const math::Vector2f map_texture_coords(Face *face, const math::Vector3f &v) { - return math::Vector2f ( - (face->get_tex_shift().x() + math::dotproduct(face->tex_vec(0), v)) / face->material()->size().width(), - (face->get_tex_shift().y() + math::dotproduct(face->tex_vec(1), v)) / face->material()->size().height() - ); + return math::Vector2f( + (face->get_tex_shift().x() + math::dotproduct(face->tex_vec(0), v)) / face->material()->size().width(), + (face->get_tex_shift().y() + math::dotproduct(face->tex_vec(1), v)) / face->material()->size().height() + ); } // function to test spawnflags @@ -177,12 +177,12 @@ bool MapFile::open(std::string const & mapname) classname_current = ""; line_number = 0; parse_level = 0; - + clear_materials(); - + mapfile_name.append(mapname); mapfile_name.append(".map"); - + mapfile_ifs.open(mapfile_name); if (!mapfile_ifs.is_open()) { return false; @@ -217,7 +217,7 @@ bool MapFile::read_patchdef() return false; else line_number++; - + // second line: "( a b c d e )" if (!mapfile_ifs.getline(data, 1023)) return false; @@ -235,11 +235,11 @@ bool MapFile::read_patchdef() std::istringstream linestream(data); std::string firstword; - + if (linestream >> firstword) { if (firstword.compare(")") == 0) { //con_debug << " patchDef2 with " << count << " lines" << std::endl; - return true; + return true; } else { count ++; } @@ -252,32 +252,32 @@ bool MapFile::read_patchdef() bool MapFile::getline() { using math::Vector3f; - + last_read_was_classname = false; last_read_was_key = false; last_read_was_classend = false; - + key_current = ""; value_current = ""; - + if (!mapfile_ifs.is_open()) return false; char data[1024]; memset(data, 0, sizeof(data)); - + if (mapfile_ifs.getline(data, 1023)) { line_number++; std::istringstream linestream(data); std::string firstword; - + if (linestream >> firstword) { if (!firstword.size()) { return true; - + } else if (firstword == "//") { return true; - + } else if (firstword == "{") { parse_level++; @@ -286,7 +286,7 @@ bool MapFile::getline() con_warn << name() << " error reading patchDef2 at line " << line_number << std::endl; } } - + } else if (firstword == "}") { if ((parse_level == 3) && (in_patchdef)) { @@ -294,19 +294,19 @@ bool MapFile::getline() in_patchdef = false; } else if ((parse_level == 2) && (planes.size())) { - // end-of-brush + // end-of-brush // for every face for (std::vector<Face *>::iterator face = planes.begin(); face != planes.end(); face++) { make_brushface((*face)); } - + // clean planes for (std::vector<Face *>::iterator it = planes.begin(); it != planes.end(); it++) { delete(*it); } planes.clear(); - + map_brushes++; value_current.clear(); @@ -317,51 +317,51 @@ bool MapFile::getline() } parse_level--; - + } else if (parse_level == 1) { - + if (firstword.compare("\"classname\"") == 0) { classname_current.clear(); - + if (linestream >> classname_current) { if (classname_current.size() > 2) { - classname_current.erase(0,1); - classname_current.erase(classname_current.size()-1, 1); + classname_current.erase(0, 1); + classname_current.erase(classname_current.size() - 1, 1); last_read_was_classname = true; } else { classname_current.clear(); } } - + } else if ((firstword.size() > 2) && (firstword[0] == '\"') && (firstword[firstword.size()-1] == '\"')) { - + key_current.assign(firstword); - key_current.erase(0,1); - key_current.erase(key_current.size()-1, 1); - + key_current.erase(0, 1); + key_current.erase(key_current.size() - 1, 1); + value_current.clear(); char c; while ((linestream.get(c)) && (c != '"')); while ((linestream.get(c)) && (c != '"')) value_current += c; - + last_read_was_key = true; } - + } else if (parse_level == 2) { - + if (firstword.compare("(") == 0) { // brush plane - + Vector3f p1, p2, p3; std::string tmp; std::string texture; int n = 0; - + linestream >> p1; // first plane vertex x y z linestream >> tmp; // ) linestream >> tmp; // ( - linestream >> p2; // second plane vertex x y z + linestream >> p2; // second plane vertex x y z linestream >> tmp; // ) linestream >> tmp; // ( linestream >> p3; // third plane vertex x y z @@ -377,11 +377,11 @@ bool MapFile::getline() if (!material) { material = new Material("textures/" + texture); Material::add(material); - material->set_flags(Material::Texture); + //material->set_flags(Material::Texture); material->set_texture(material->name()); } face->set_material(material); - + // texture alignment float tx, ty, tr, tsx, tsy; linestream >> tx >> ty; // texture shift @@ -390,7 +390,7 @@ bool MapFile::getline() // store the texture transformation for this face face_texture_verts((*face), math::Vector2f(tx, ty), tr, math::Vector2f(tsx, tsy)); - + // content flags if (!(linestream >> n)) n = 0; @@ -405,7 +405,7 @@ bool MapFile::getline() face->set_surface_flags(n); planes.push_back(face); - + value_current.clear(); } else if (firstword.compare("patchDef2") == 0) { @@ -414,17 +414,17 @@ bool MapFile::getline() } } } else { - + return false; } - + return true; } void MapFile::make_brushface(Face *face) { using math::Vector3f; - + // ignore materials with the 'Ignore' flag set if ((face->material()->flags() & Material::Ignore) == Material::Ignore) { return; @@ -436,18 +436,18 @@ void MapFile::make_brushface(Face *face) if (face->detail()) { map_faces_detail++; } - + // using suggestions from // http://www.flipcode.com/archives/Level_Editing.shtml - + // vertex list std::vector<math::Vector3f *> vl; - + // calculate initial vertices on the bounding box - + // check if the face is x-axis oriented if ((fabsf(face->normal().x()) >= fabsf(face->normal().y())) && (fabsf(face->normal().x()) >= fabsf(face->normal().z()))) { - + if (face->normal().x() > MIN_DELTA) { vl.push_back(new math::Vector3f(0, -MAX_BOUNDS, -MAX_BOUNDS)); vl.push_back(new math::Vector3f(0, -MAX_BOUNDS, MAX_BOUNDS)); @@ -462,15 +462,15 @@ void MapFile::make_brushface(Face *face) // calculate the x coordinate of each face vertex for (std::vector<Vector3f *>::iterator it = vl.begin(); it != vl.end(); it++) { (*it)->get_x() = (-face->d() - - face->normal().z() * (*it)->z() - - face->normal().y() * (*it)->y()) / - face->normal().x(); + face->normal().z() * (*it)->z() - + face->normal().y() * (*it)->y()) / + face->normal().x(); } } - + // check if the face is y-axis oriented else if ((fabsf(face->normal().y()) >= fabsf(face->normal().x())) && (fabsf(face->normal().y()) >= fabsf(face->normal().z()))) { - + if (face->normal().y() > MIN_DELTA) { vl.push_back(new Vector3f(MAX_BOUNDS, 0, -MAX_BOUNDS)); vl.push_back(new Vector3f(MAX_BOUNDS, 0, MAX_BOUNDS)); @@ -482,19 +482,19 @@ void MapFile::make_brushface(Face *face) vl.push_back(new Vector3f(MAX_BOUNDS, 0, MAX_BOUNDS)); vl.push_back(new Vector3f(MAX_BOUNDS, 0, -MAX_BOUNDS)); } - + // calculate the x coordinate of each face vertex for (std::vector<Vector3f *>::iterator it = vl.begin(); it != vl.end(); it++) { (*it)->get_y() = (-face->d() - - face->normal().z() * (*it)->z() - - face->normal().x() * (*it)->x()) / - face->normal().y(); + face->normal().z() * (*it)->z() - + face->normal().x() * (*it)->x()) / + face->normal().y(); } } - + // face must be z-axis oriented else { - + if (face->normal().z() > MIN_DELTA) { vl.push_back(new Vector3f(-MAX_BOUNDS, -MAX_BOUNDS, 0)); vl.push_back(new Vector3f(-MAX_BOUNDS, MAX_BOUNDS, 0)); @@ -506,17 +506,17 @@ void MapFile::make_brushface(Face *face) vl.push_back(new Vector3f(-MAX_BOUNDS, MAX_BOUNDS, 0)); vl.push_back(new Vector3f(-MAX_BOUNDS, -MAX_BOUNDS, 0)); } - + // calculate the x coordinate of each face vertex for (std::vector<Vector3f *>::iterator it = vl.begin(); it != vl.end(); it++) { (*it)->get_z() = (-face->d() - - face->normal().x() * (*it)->x() - - face->normal().y() * (*it)->y()) / - face->normal().z(); + face->normal().x() * (*it)->x() - + face->normal().y() * (*it)->y()) / + face->normal().z(); } } - - + + // intersect the face with every plane for (std::vector<Face *>::iterator pit = planes.begin(); pit != planes.end(); pit++) { @@ -524,102 +524,102 @@ void MapFile::make_brushface(Face *face) if (plane == face) { continue; } - - Vector3f fn = crossproduct(face->point(1)-face->point(0), face->point(2)-face->point(0)); - Vector3f pn = crossproduct(plane->point(1)-plane->point(0), plane->point(2)-plane->point(0)); - + + Vector3f fn = crossproduct(face->point(1) - face->point(0), face->point(2) - face->point(0)); + Vector3f pn = crossproduct(plane->point(1) - plane->point(0), plane->point(2) - plane->point(0)); + Vector3f t = crossproduct(fn, pn); if ((t.x() == 0) && (t.y() == 0) && (t.z() == 0)) { continue; } - + // intersect face with plane - for (int i=0; vl.size() - i > 0; i++) { - + for (int i = 0; vl.size() - i > 0; i++) { + Vector3f v(*vl.at(i)); - + Vector3f next; if (vl.size() - i > 1) { - next = *vl.at(i+1); + next = *vl.at(i + 1); } else { next = *vl.front(); } - + Vector3f prev; if (i > 0) { - prev = *vl.at(i-1); + prev = *vl.at(i - 1); } else { prev = *vl.back(); } - + if ((v.x() * plane->normal().x() + v.y() * plane->normal().y() + v.z() * plane->normal().z() + plane->d()) < MIN_DELTA) { - + // find current std::vector<Vector3f *>::iterator vit = vl.begin(); while ((*vit) != vl.at(i)) { vit++; } - + // check if prev - v intersects with plane if ((prev.x() * plane->normal().x() + prev.y() * plane->normal().y() + prev.z() * plane->normal().z() + plane->d()) > MIN_DELTA) { - + // calculate intersection - float t1 = -plane->normal().x() * prev.x() - plane->normal().y() * prev.y() - plane->normal().z() * prev.z() -plane->d(); + float t1 = -plane->normal().x() * prev.x() - plane->normal().y() * prev.y() - plane->normal().z() * prev.z() - plane->d(); float t2 = (plane->normal().x() * v.x() - plane->normal().x() * prev.x() + plane->normal().y() * v.y() - plane->normal().y() * prev.y() + plane->normal().z() * v.z() - plane->normal().z() * prev.z()); Vector3f *s = new Vector3f; - + if (t2 == 0) { *s = v; } else { for (int j = 0; j < 3; j++) (*s)[j] = prev [j] + t1 * (v[j] - prev[j]) / t2; } - - vit = vl.insert(vit,s); + + vit = vl.insert(vit, s); vit++; i++; } - + // check if next - v intersects with plane if ((next.x() * plane->normal().x() + next.y() * plane->normal().y() + next.z() * plane->normal().z() + plane->d()) > MIN_DELTA) { - + // calculate intersection - float t1 = -plane->normal().x() * v.x() - plane->normal().y() * v.y() - plane->normal().z() * v.z() -plane->d(); + float t1 = -plane->normal().x() * v.x() - plane->normal().y() * v.y() - plane->normal().z() * v.z() - plane->d(); float t2 = (plane->normal().x() * next.x() - plane->normal().x() * v.x() + plane->normal().y() * next.y() - plane->normal().y() * v.y() + plane->normal().z() * next.z() - plane->normal().z() * v.z()); Vector3f *s = new Vector3f; - + if (t2 == 0) { *s = v; } else { for (int j = 0; j < 3; j++) (*s)[j] = v [j] + t1 * (next[j] - v[j]) / t2; } - - vit = vl.insert(vit,s); + + vit = vl.insert(vit, s); vit++; i++; } - + // erase delete *vit; vl.erase(vit); i--; } - + } } - + if (vl.size() > 2) { // find the list if primitives for the current material, allocate a new one if necessary Primitives *primitives = 0; - + Materials::iterator mit = map_materials.find(face->material()); if (mit == map_materials.end()) { primitives = new Primitives(face->material()); @@ -627,26 +627,26 @@ void MapFile::make_brushface(Face *face) } else { primitives = (*mit).second; } - + // scale vertices and calculate the bounding box for (std::vector<Vector3f *>::iterator it = vl.begin(); it != vl.end(); it++) { //*(*it) *= SCALE; - for (int i=0; i < 3; i++) { + for (int i = 0; i < 3; i++) { if (class_maxbbox[i] < (*(*it))[i] * SCALE) class_maxbbox[i] = (*(*it))[i] * SCALE; - + if (class_minbbox[i] > (*(*it))[i] * SCALE) class_minbbox[i] = (*(*it))[i] * SCALE; } } // the actual polygon normal is on the other side - Vector3f face_normal(face->normal()*-1); - face_normal.normalize(); + Vector3f face_normal(face->normal()* -1); + face_normal.normalize(); -#ifndef HAVE_BULLET +#ifndef HAVE_BULLET - // Quads are disable to use model data for bullet physics + // Quads are disable to use model data for bullet physics // split polygon into quads while (vl.size() > 3) { @@ -657,7 +657,7 @@ void MapFile::make_brushface(Face *face) std::vector<Vector3f *>::reverse_iterator vn2 = vl.rbegin(); ++vn2; ++vn2; - + Quad *quad = new Quad(*(*vn2) * SCALE, *(*vn1) * SCALE, *(*vn) * SCALE, *(*v0) * SCALE, face_normal, face->detail()); primitives->add_quad(quad); @@ -680,8 +680,8 @@ void MapFile::make_brushface(Face *face) std::vector<Vector3f *>::reverse_iterator vn = vl.rbegin(); std::vector<Vector3f *>::reverse_iterator vn1 = vl.rbegin(); ++vn1; - - Triangle * triangle = new Triangle (*(*vn1) * SCALE, *(*vn) * SCALE, *(*v0) * SCALE, face_normal, face->detail()); + + Triangle * triangle = new Triangle(*(*vn1) * SCALE, *(*vn) * SCALE, *(*v0) * SCALE, face_normal, face->detail()); primitives->add_triangle(triangle); if (face->material()->flags() & Material::Texture) { @@ -695,12 +695,12 @@ void MapFile::make_brushface(Face *face) } else { con_warn << name() << " unresolved face at line " << line() << std::endl; } - + // clean up the vertex list for (std::vector<Vector3f *>::iterator it = vl.begin(); it != vl.end(); it++) { delete(*it); } - + vl.clear(); } @@ -720,9 +720,9 @@ bool MapFile::got_key_vector3f(const char * keylabel, math::Vector3f & v) std::istringstream is(value_current); float x, y, z; if ((is >> x) && (is >> y) && (is >> z)) { - v = math::Vector3f(x,y,z); + v = math::Vector3f(x, y, z); } else { - v= math::Vector3f(); + v = math::Vector3f(); } return true; } else { @@ -804,7 +804,7 @@ void MapFile::close() void MapFile::clear_bbox() { - for (int i=0; i < 3; i++) { + for (int i = 0; i < 3; i++) { class_minbbox[i] = MAX_BOUNDS; class_maxbbox[i] = -MAX_BOUNDS; } @@ -814,7 +814,7 @@ void MapFile::clear_bbox() } void MapFile::load_worldspawn(Model *model) -{ +{ if (!map_materials.size()) return; @@ -832,12 +832,12 @@ void MapFile::load_fragmentgroup(Model *model, const FragmentGroup::Type class_t { if (!VertexArray::instance() || VertexArray::instance()->overflow()) return; - + if (!map_materials.size()) return; FragmentGroup *group = new FragmentGroup(); - + if (class_type == FragmentGroup::Rotate) { if (class_speed == 0) { // default rotation speed 45 degrees per second @@ -862,39 +862,39 @@ void MapFile::load_fragmentgroup(Model *model, const FragmentGroup::Type class_t for (Materials::iterator mit = map_materials.begin(); mit != map_materials.end(); mit++) { // split the Primitives with this material into fragments Primitives *primitives = (*mit).second; - + // store triangles if (primitives->triangles().size()) { Fragment *fragment = new Fragment(Fragment::Triangles, primitives->material()); - + // add structural triangles to the fragment for (Primitives::Triangles::iterator tris_it = primitives->triangles().begin(); tris_it != primitives->triangles().end(); tris_it++) { Triangle *triangle = (*tris_it); if (!triangle->detail()) { size_t count = 0; - count += fragment->add_vertex(triangle->v0()-group_center, triangle->normal(), triangle->t0(), false); - count += fragment->add_vertex(triangle->v1()-group_center, triangle->normal(), triangle->t1(), false); - count += fragment->add_vertex(triangle->v2()-group_center, triangle->normal(), triangle->t2(), false); + count += fragment->add_vertex(triangle->v0() - group_center, triangle->normal(), triangle->t0(), false); + count += fragment->add_vertex(triangle->v1() - group_center, triangle->normal(), triangle->t1(), false); + count += fragment->add_vertex(triangle->v2() - group_center, triangle->normal(), triangle->t2(), false); if (count == 3) model->model_tris_count++; } } - + // add detail triangles to the fragment for (Primitives::Triangles::iterator tris_it = primitives->triangles().begin(); tris_it != primitives->triangles().end(); tris_it++) { Triangle *triangle = (*tris_it); if (triangle->detail()) { size_t count = 0; - count += fragment->add_vertex(triangle->v0()-group_center, triangle->normal(), triangle->t0(), true); - count += fragment->add_vertex(triangle->v1()-group_center, triangle->normal(), triangle->t1(), true); - count += fragment->add_vertex(triangle->v2()-group_center, triangle->normal(), triangle->t2(), true); + count += fragment->add_vertex(triangle->v0() - group_center, triangle->normal(), triangle->t0(), true); + count += fragment->add_vertex(triangle->v1() - group_center, triangle->normal(), triangle->t1(), true); + count += fragment->add_vertex(triangle->v2() - group_center, triangle->normal(), triangle->t2(), true); if (count == 3) { model->model_tris_count++; model->model_tris_detail_count++; } } } - + // add the fragment to the group group->add_fragment(fragment); } @@ -902,41 +902,41 @@ void MapFile::load_fragmentgroup(Model *model, const FragmentGroup::Type class_t // store quads if (primitives->quads().size()) { Fragment *fragment = new Fragment(Fragment::Quads, primitives->material()); - + // add structural quads to the fragment for (Primitives::Quads::iterator quad_it = primitives->quads().begin(); quad_it != primitives->quads().end(); quad_it++) { Quad *quad = (*quad_it); if (!quad->detail()) { size_t count = 0; - count += fragment->add_vertex(quad->v0()-group_center, quad->normal(), quad->t0(), false); - count += fragment->add_vertex(quad->v1()-group_center, quad->normal(), quad->t1(), false); - count += fragment->add_vertex(quad->v2()-group_center, quad->normal(), quad->t2(), false); - count += fragment->add_vertex(quad->v3()-group_center, quad->normal(), quad->t3(), false); + count += fragment->add_vertex(quad->v0() - group_center, quad->normal(), quad->t0(), false); + count += fragment->add_vertex(quad->v1() - group_center, quad->normal(), quad->t1(), false); + count += fragment->add_vertex(quad->v2() - group_center, quad->normal(), quad->t2(), false); + count += fragment->add_vertex(quad->v3() - group_center, quad->normal(), quad->t3(), false); if (count == 4) model->model_quad_count++; } } - + // add detail quads to the fragment for (Primitives::Quads::iterator quad_it = primitives->quads().begin(); quad_it != primitives->quads().end(); quad_it++) { Quad *quad = (*quad_it); if (quad->detail()) { size_t count = 0; - count += fragment->add_vertex(quad->v0()-group_center, quad->normal(), quad->t0(), false); - count += fragment->add_vertex(quad->v1()-group_center, quad->normal(), quad->t1(), false); - count += fragment->add_vertex(quad->v2()-group_center, quad->normal(), quad->t2(), false); - count += fragment->add_vertex(quad->v3()-group_center, quad->normal(), quad->t3(), false); + count += fragment->add_vertex(quad->v0() - group_center, quad->normal(), quad->t0(), false); + count += fragment->add_vertex(quad->v1() - group_center, quad->normal(), quad->t1(), false); + count += fragment->add_vertex(quad->v2() - group_center, quad->normal(), quad->t2(), false); + count += fragment->add_vertex(quad->v3() - group_center, quad->normal(), quad->t3(), false); if (count == 4) { model->model_quad_count++; model->model_quad_detail_count++; } } } - + // add the fragment to the group group->add_fragment(fragment); } - + } // add the group to the model @@ -945,7 +945,7 @@ void MapFile::load_fragmentgroup(Model *model, const FragmentGroup::Type class_t void MapFile::unknown_value() const { - con_warn << name() << " unknown value '" << value() << "' for '" << classname() << ":" << key() << "' at line " << line() << std::endl; + con_warn << name() << " unknown value '" << value() << "' for '" << classname() << ":" << key() << "' at line " << line() << std::endl; } void MapFile::unknown_key() const @@ -962,14 +962,14 @@ Model * MapFile::load(std::string const &name) { // open the .map file MapFile mapfile; - + if (!mapfile.open(name)) { return 0; } - + Model *model = new Model(name); mapfile.clear_bbox(); - + Dock *dock = 0; Particles *particles = 0; Flare *flare = 0; @@ -989,16 +989,16 @@ Model * MapFile::load(std::string const &name) std::string str; while (mapfile.getline()) { - + if (mapfile.got_classname("worldspawn")) { mapfile.clear_bbox(); } else if (mapfile.got_classend("worldspawn")) { mapfile.load_worldspawn(model); mapfile.clear_materials(); - + } else if (mapfile.in_class("worldspawn")) { - + // worldspawn attributes if (mapfile.got_key("name")) { //con_debug << " model name '" << name << "'" << std::endl; @@ -1044,7 +1044,7 @@ Model * MapFile::load(std::string const &name) mapfile.clear_materials(); } else if (mapfile.in_class("func_rotate")) { - + if (mapfile.got_key_float("angle", angle)) { if (angle == ANGLEUP) { mapfile.class_axis.change_pitch(90.0f); @@ -1073,101 +1073,101 @@ Model * MapFile::load(std::string const &name) mapfile.clear_materials(); } else if (mapfile.got_classname("light")) { - + // new light light = new Light(); model->add_light(light); continue; - + } else if (mapfile.classname().compare("light") == 0) { - + // light attributes if (mapfile.got_key_vector3f("origin", location)) { light->get_location().assign(location * SCALE); continue; - + } else if (mapfile.got_key_color("_color", color)) { light->get_color().assign(color); continue; - + } else if (mapfile.got_key_int("spawnflags", u)) { light->set_strobe(spawnflag_isset(u, 1)); light->set_entity(spawnflag_isset(u, 2)); light->set_engine(spawnflag_isset(u, 4)); continue; - + } else if (mapfile.got_key_float("light", r)) { - light->set_radius( r * LIGHTSCALE); + light->set_radius(r * LIGHTSCALE); continue; - + } else if (mapfile.got_key_float("radius", r)) { - light->set_radius( r * LIGHTSCALE); + light->set_radius(r * LIGHTSCALE); continue; } else if (mapfile.got_key_float("frequency", r)) { light->set_frequency(r); continue; - + } else if (mapfile.got_key_float("offset", r)) { light->set_offset(r); continue; - + } else if (mapfile.got_key_float("time", r)) { light->set_time(r); continue; - + } else if (mapfile.got_key_int("flare", u)) { light->set_flare(u); continue; - + } else if (mapfile.got_key()) { mapfile.unknown_key(); continue; - + } } else if (mapfile.got_classname("fx_flare")) { - + // new flare flare = new Flare(); model->add_flare(flare); } else if (mapfile.classname().compare("fx_flare") == 0) { - + // flare attributes if (mapfile.got_key_vector3f("origin", location)) { flare->get_location().assign(location * SCALE); continue; - + } else if (mapfile.got_key_color("_color", color)) { flare->get_color().assign(color); continue; - + } else if (mapfile.got_key_int("spawnflags", u)) { flare->set_strobe(spawnflag_isset(u, 1)); flare->set_entity(spawnflag_isset(u, 2)); flare->set_engine(spawnflag_isset(u, 4)); - + } else if (mapfile.got_key_float("light", r)) { - flare->set_radius( r * LIGHTSCALE); + flare->set_radius(r * LIGHTSCALE); continue; } else if (mapfile.got_key_float("radius", r)) { - flare->set_radius( r * LIGHTSCALE); + flare->set_radius(r * LIGHTSCALE); continue; } else if (mapfile.got_key_float("frequency", r)) { flare->set_frequency(r); continue; - + } else if (mapfile.got_key_float("offset", r)) { flare->set_offset(r); continue; - + } else if (mapfile.got_key_float("time", r)) { flare->set_time(r); continue; - + } else if (mapfile.got_key_int("flare", u)) { flare->set_flare(u); continue; @@ -1188,7 +1188,7 @@ Model * MapFile::load(std::string const &name) } else if (mapfile.got_key_float("roll", angle)) { flare->get_axis().change_roll(angle); - + } else if (mapfile.got_key_string("cull", str)) { aux::to_lowercase(str); @@ -1201,7 +1201,7 @@ Model * MapFile::load(std::string const &name) } else { mapfile.unknown_value(); } - + } else if (mapfile.got_key()) { mapfile.unknown_key(); } @@ -1211,7 +1211,7 @@ Model * MapFile::load(std::string const &name) // new particle system particles = new Particles(); model->add_particles(particles); - + } else if (mapfile.classname().compare("fx_particles") == 0) { // particle system attributes @@ -1246,7 +1246,7 @@ Model * MapFile::load(std::string const &name) } else if (mapfile.got_key_float("radius", r)) { particles->set_radius(r * LIGHTSCALE); - + } else if (mapfile.got_key_string("cull", str)) { aux::to_lowercase(str); @@ -1269,7 +1269,7 @@ Model * MapFile::load(std::string const &name) // new submodel submodel = new SubModel(); submodel_list.push_back(submodel); - + } else if (mapfile.classname().compare("misc_model") == 0) { // submodel attributes @@ -1281,7 +1281,7 @@ Model * MapFile::load(std::string const &name) // remove extension if (modelname[modelname.size()-4] == '.') { - modelname.erase(modelname.size()-4); + modelname.erase(modelname.size() - 4); } submodel->set_name(modelname); @@ -1303,7 +1303,7 @@ Model * MapFile::load(std::string const &name) submodel->set_scale(1.0f); } } - + } else if (mapfile.got_classname("location_dock")) { // new docking location @@ -1316,18 +1316,18 @@ Model * MapFile::load(std::string const &name) if (mapfile.got_key_vector3f("origin", location)) { dock->get_location().assign(location * SCALE); continue; - + } else if (mapfile.got_key_float("radius", r)) { - dock->set_radius (r * SCALE); + dock->set_radius(r * SCALE); continue; - + } else if (mapfile.got_key("angle")) { // TODO continue; } else if (mapfile.got_key()) { mapfile.unknown_key(); - + } } else if (mapfile.got_classname("location_cannon")) { @@ -1356,21 +1356,21 @@ Model * MapFile::load(std::string const &name) } else if (mapfile.got_classname()) { - mapfile.unknown_class(); + mapfile.unknown_class(); } } - + mapfile.close(); // reposition docks, lights, flares and particles according to the model center for (Model::Lights::iterator lit = model->lights().begin(); lit != model->lights().end(); lit++) { (*lit)->get_location() -= mapfile.map_center; } - + for (Model::Flares::iterator flit = model->flares().begin(); flit != model->flares().end(); flit++) { (*flit)->get_location() -= mapfile.map_center; } - + for (Model::ParticleSystems::iterator pit = model->particles().begin(); pit != model->particles().end(); pit++) { (*pit)->get_location() -= mapfile.map_center; } @@ -1399,7 +1399,7 @@ Model * MapFile::load(std::string const &name) groupdst->set_type(groupsrc->type()); groupdst->set_scale(groupsrc->scale() * submodel->scale()); groupdst->set_speed(groupsrc->speed()); - groupdst->set_location(submodel->location() + (submodel_model->origin() + groupsrc->location()) * submodel->scale() ); + groupdst->set_location(submodel->location() + (submodel_model->origin() + groupsrc->location()) * submodel->scale()); groupdst->set_axis(groupsrc->axis() * submodel->axis()); // copy fragments @@ -1416,7 +1416,7 @@ Model * MapFile::load(std::string const &name) } // recalculate bbox - for (size_t i =0; i < 3; i ++) { + for (size_t i = 0; i < 3; i ++) { float c; c = submodel->location()[i] + (submodel_model->origin()[i] + submodel_model->model_maxbbox[i]) * submodel->scale(); if (c > model->model_maxbbox[i]) { @@ -1438,14 +1438,14 @@ Model * MapFile::load(std::string const &name) light->set_radius(light->radius() * submodel->scale()); model->add_light(light); } - + for (Model::Flares::const_iterator flit = submodel_model->flares().begin(); flit != submodel_model->flares().end(); flit++) { flare = new Flare(*(*flit)); flare->get_location().assign(submodel->location() + (submodel_model->origin() + flare->location()) * submodel->scale()); flare->set_radius(flare->radius() * submodel->scale()); model->add_flare(flare); } - + for (Model::ParticleSystems::const_iterator pit = submodel_model->particles().begin(); pit != submodel_model->particles().end(); pit++) { particles = new Particles(*(*pit)); particles->get_location().assign(submodel->location() + (submodel_model->origin() + particles->location()) * submodel->scale()); @@ -1453,7 +1453,7 @@ Model * MapFile::load(std::string const &name) model->add_particles(particles); } - + //con_debug << " imported submodel '" << submodel->name() << "'" << std::endl; } @@ -1465,8 +1465,8 @@ Model * MapFile::load(std::string const &name) con_warn << mapfile.name() << " quake2 style brushes detected" << std::endl; con_debug << " " << mapfile.name() << " " << mapfile.map_brushes << " brushes " << - model->model_tris_detail_count << "/" << model->model_tris_count << " detail/tris " << - model->model_quad_detail_count << "/" << model->model_quad_count << " detail/quads" << std::endl; + model->model_tris_detail_count << "/" << model->model_tris_count << " detail/tris " << + model->model_quad_detail_count << "/" << model->model_quad_count << " detail/quads" << std::endl; return model; diff --git a/src/model/mapfile.h b/src/model/mapfile.h index 0cf66a5..be1e789 100644 --- a/src/model/mapfile.h +++ b/src/model/mapfile.h @@ -30,42 +30,39 @@ public: * If the file can not be read, load() returns the NULL-pointer */ static Model *load(std::string const &name); - + private: MapFile(); ~MapFile(); - + /// tpye definition for a per-material list of Primitives typedef std::map<Material *, Primitives *> Materials; - + /// open the file for reading /** the filename will get the "maps/" prefix and ".map" suffix */ bool open(std::string const & name); - + /// parse one line, returns false on end-of-file bool getline(); bool read_patchdef(); - + /// current classname - inline std::string classname() const - { + inline std::string classname() const { return classname_current; } - + /// current key - inline std::string key() const - { + inline std::string key() const { return key_current; } - + /// current value - inline std::string value() const - { + inline std::string value() const { return value_current; } - + /// true if the last read line contained a new classname bool got_classname() const; @@ -75,67 +72,62 @@ private: } /// true if the last read line contained a class closing bracket - inline bool got_classend() const - { + inline bool got_classend() const { return last_read_was_classend; } - + /// true if the last read line contained the closing bracket for the requested class bool got_classend(const char*) const; /// true if the last read line contained a new classname bool got_classname(const char*) const; - + /// true if the last read statement was a key=value pair - inline bool got_key() const - { + inline bool got_key() const { return last_read_was_key; } - + bool got_key(const char * keylabel); - + /// check if the last read key=value pair matches keylabel and store the value in valuestring bool got_key_string(const char * keylabel, std::string & valuestring); - + /// check if the last read key=value pair matches keylabel and store the value in color bool got_key_color(const char * keylabel, math::Color & color); - + /// check if the last read key=value pair matches keylabel and store the value in f bool got_key_float(const char * keylabel, float & f); - + /// check if the last read key=value pair matches keylabel and store the value in f bool got_key_int(const char * keylabel, unsigned int & u); - + /// check if the last read key=value pair matches keylabel and store the value in valuestring bool got_key_angle(const char * keylabel, float & f); - + bool got_key_vector3f(const char * keylabel, math::Vector3f & v); - - + + /// return the number of lines read so far - inline unsigned int line() const - { + inline unsigned int line() const { return line_number; } - + /// return true of the map file is open for reading - inline bool is_open() - { + inline bool is_open() { return mapfile_ifs.is_open(); } - + /// current filename - inline std::string const & name() const - { + inline std::string const & name() const { return mapfile_name; } - + /// close the file void close(); - + /// generate triangles for one plane in the plane list void make_brushface(Face *face); - + /// load parsed primitives into model worldspawn void load_worldspawn(Model *model); @@ -153,28 +145,28 @@ private: void unknown_key() const; void unknown_value() const; - + /// list of planes for the current brush std::vector<Face *> planes; - + std::string classname_current; std::string key_current; std::string value_current; - + bool last_read_was_key; bool last_read_was_classname; bool last_read_was_classend; - + unsigned int map_brushes; unsigned int map_faces; unsigned int map_faces_detail; - + unsigned int parse_level; unsigned int line_number; filesystem::IFileStream mapfile_ifs; std::string mapfile_name; - + math::Vector3f class_maxbbox; math::Vector3f class_minbbox; math::Axis class_axis; diff --git a/src/model/material.cc b/src/model/material.cc index 416e491..6baf4f9 100644 --- a/src/model/material.cc +++ b/src/model/material.cc @@ -19,9 +19,9 @@ Material::LoaderFuncPtr Material::material_loaderfunc = 0; Material::Registry Material::material_registry; Material::Material(const std::string &name) : - material_name(name), - material_color(1.0f) , - material_size(64.0f, 64.0f) + material_name(name), + material_color(1.0f) , + material_size(64.0f, 64.0f) { aux::to_lowercase(material_name); material_flags = 0; @@ -41,11 +41,16 @@ void Material::set_color(const math::Color &color) void Material::set_texture(const std::string &texture) { - material_texture.assign(texture); - - if (material_loaderfunc) { - material_loaderfunc(this); - //con_debug << " material " << name() << " " << size().width() << "x" << size().height() << std::endl; + if (texture.size()) { + set_flags(Texture); + material_texture.assign(texture); + if (material_loaderfunc) { + material_loaderfunc(this); + } + } else { + unset_flags(Texture); + material_texture.clear(); + material_texture_id = 0; } } @@ -80,8 +85,8 @@ void Material::init() while (shaderlist.getline(line, 1023)) { if ((line[0] == 0) || (line[0] == '#') || (line[0] == ';')) { continue; - if ((line[0] == '/') && (line[1] == '/')) - continue; + if ((line[0] == '/') && (line[1] == '/')) + continue; } else { std::string s(line); aux::trim(s); @@ -115,7 +120,7 @@ void Material::load_shader(const std::string &shadername) unsigned int linenumber = 0; char line[1024]; unsigned int count = 0; - float r,g,b; + float r, g, b; Material *material = 0; while (shaderfile.getline(line, 1023)) { @@ -130,12 +135,12 @@ void Material::load_shader(const std::string &shadername) continue; // skip comments - if ((s[0] == '#') || (s[0] == ';') || ((s[0] == '/') && (s[1] == '/'))) + if ((s[0] == '#') || (s[0] == ';') || ((s[0] == '/') && (s[1] == '/'))) continue; - + std::istringstream linestream(s); std::string firstword; - + if (linestream >> firstword) { if (firstword.compare("//") == 0) { continue; @@ -146,7 +151,7 @@ void Material::load_shader(const std::string &shadername) } else if (firstword.compare("{") == 0) { parselevel++; - } else if ((firstword.size()) && (parselevel == 0) ) { + } else if ((firstword.size()) && (parselevel == 0)) { material = find(firstword); if (material) { @@ -163,8 +168,10 @@ void Material::load_shader(const std::string &shadername) if (firstword.compare("color") == 0) { if (linestream >> r >> g >> b) { if (math::max(r, math::max(g, b)) > 1.0f) { - r /= 255.0f; g /= 255.0f; b /= 255.0f; - } + r /= 255.0f; + g /= 255.0f; + b /= 255.0f; + } material->set_color(math::Color(r, g, b, 1.0f)); } } else if (firstword.compare("engine") == 0) { @@ -178,7 +185,7 @@ void Material::load_shader(const std::string &shadername) } else if (firstword.compare("entitysecond") == 0) { material->set_flags(Secondary); } else if (firstword.compare("entitythird") == 0) { - material->set_flags(Tertiary); + material->set_flags(Tertiary); } else if (firstword.compare("ignore") == 0) { material->set_flags(Ignore); } else if (firstword.compare("qer_editorimage") == 0) { @@ -189,19 +196,19 @@ void Material::load_shader(const std::string &shadername) // texture name should not contain spaces if (linestream >> firstword) { + // remove extension if (firstword[firstword.size()-4] == '.') { - firstword.erase(firstword.size()-4); + firstword.erase(firstword.size() - 4); } material->set_texture(firstword); - material->set_flags(Material::Texture); } else { con_warn << shaderfile.name() << " texture key without filename at line " << linenumber << std::endl; } } else { - con_warn << shaderfile.name() << " unknown key '" << firstword - << "' at line " << linenumber << std::endl; + con_warn << shaderfile.name() << " unknown key '" << firstword + << "' at line " << linenumber << std::endl; } } } @@ -222,7 +229,7 @@ void Material::clear() con_print << "^BClearing materials..." << std::endl; for (Registry::iterator i = material_registry.begin(); i != material_registry.end(); ++i) { - delete (*i).second; + delete(*i).second; } material_registry.clear(); diff --git a/src/model/material.h b/src/model/material.h index 9185fd2..44470e5 100644 --- a/src/model/material.h +++ b/src/model/material.h @@ -24,7 +24,7 @@ public: typedef void(* LoaderFuncPtr)(Material *); /// surface flags - enum SurfaceFlags { None=0, Primary=1, Secondary=2, Tertiary=3, Bright=4, Engine=8, Environment=16, Texture=32, Ignore=64}; + enum SurfaceFlags { None = 0, Primary = 1, Secondary = 2, Tertiary = 3, Bright = 4, Engine = 8, Environment = 16, Texture = 32, Ignore = 64}; /// type definition for the material registry typedef std::map<std::string, Material *> Registry; @@ -35,20 +35,32 @@ public: /* ---- inspectors ----------------------------------------- */ - inline const std::string &name() const { return material_name; } + inline const std::string &name() const { + return material_name; + } - inline const math::Color &color() const { return material_color; } + inline const math::Color &color() const { + return material_color; + } - inline const unsigned int flags() const { return material_flags; } + inline const unsigned int flags() const { + return material_flags; + } - inline const std::string &texture() const { return material_texture; } + inline const std::string &texture() const { + return material_texture; + } - inline const size_t texture_id() const { return material_texture_id; } + inline const size_t texture_id() const { + return material_texture_id; + } /** * @brief returns the material texture size */ - inline const math::Vector2f & size() const { return material_size; } + inline const math::Vector2f & size() const { + return material_size; + } /* ---- mutators ------------------------------------------- */ @@ -74,16 +86,14 @@ public: */ void set_size(const math::Vector2f &size); - inline void set_flags(SurfaceFlags flags) - { + inline void set_flags(SurfaceFlags flags) { material_flags |= flags; } - inline void unset_flags(SurfaceFlags flags) - { + inline void unset_flags(SurfaceFlags flags) { material_flags &= ~flags; } - + /* ---- static ----------------------------------------------------- */ /** @@ -92,12 +102,12 @@ public: */ static void init(); - /** + /** * @brief shutdown material registry */ static void shutdown(); - /** + /** * @brief clear material registry */ static void clear(); diff --git a/src/model/model.cc b/src/model/model.cc index 2b3ec7a..85bf609 100644 --- a/src/model/model.cc +++ b/src/model/model.cc @@ -17,14 +17,14 @@ namespace model Model::Registry Model::model_registry; Model::Model(const std::string & name) : - model_enginecolor(1.0f, 0.0f, 0.0f), - model_name(name) - + model_enginecolor(1.0f, 0.0f, 0.0f), + model_name(name) + { model_radius = 0.5f; model_enginesound = 0; model_impulsesound = 0; - + model_tris_detail_count = 0; model_tris_count = 0; model_quad_detail_count = 0; @@ -35,28 +35,28 @@ Model::~Model() { // delete all fragment groups for (Groups::iterator git = model_groups.begin(); git != model_groups.end(); git++) { - delete (*git); + delete(*git); } model_groups.clear(); - + // delete all docks for (Docks::iterator dit = model_docks.begin(); dit != model_docks.end(); dit++) { - delete (*dit); + delete(*dit); } model_docks.clear(); // delete all particle systems for (Model::ParticleSystems::iterator pit = model_particles.begin(); pit != model_particles.end(); pit++) { - delete (*pit); + delete(*pit); } model_particles.clear(); - + // delete all lights for (Lights::iterator lit = model_lights.begin(); lit != model_lights.end(); lit++) { delete(*lit); } model_lights.clear(); - + // delete all flares for (Flares::iterator flit = model_flares.begin(); flit != model_flares.end(); flit++) { delete(*flit); @@ -115,18 +115,18 @@ Model *Model::load(const std::string & name) // try loading the .map model model = MapFile::load(name); } - + if (!model) { // if it can't be found, try the ase model model = ASEFile::load(name); } - - if (!model) { + + if (!model) { con_warn << "Could not open model " << name << std::endl; } else { model_registry[model->name()] = model; } - + return model; } @@ -137,7 +137,7 @@ void Model::clear() delete(*mit).second; } model_registry.clear(); - + // clear the vertex array if (VertexArray::instance()) VertexArray::instance()->clear(); @@ -159,18 +159,18 @@ void Model::list() { for (Registry::iterator mit = model_registry.begin(); mit != model_registry.end(); mit++) { list_model((*mit).second); - + } - + con_print << model_registry.size() << " registered models" << std::endl; if (VertexArray::instance()) { - + con_print << "vertex array " - << VertexArray::instance()->index() * 3 * sizeof(float) / (1024*1024) << "/" - << VertexArray::instance()->size() * 3 * sizeof(float) / (1024*1024) << "Mb " - << VertexArray::instance()->index() / 3 << "/" << VertexArray::instance()->size() / 3 << " verts " - << (VertexArray::instance()->index() * 100 / VertexArray::instance()->size())<< "% used" - << std::endl; + << VertexArray::instance()->index() * 3 * sizeof(float) / (1024*1024) << "/" + << VertexArray::instance()->size() * 3 * sizeof(float) / (1024*1024) << "Mb " + << VertexArray::instance()->index() / 3 << "/" << VertexArray::instance()->size() / 3 << " verts " + << (VertexArray::instance()->index() * 100 / VertexArray::instance()->size()) << "% used" + << std::endl; } } diff --git a/src/model/model.h b/src/model/model.h index af3b1dc..30714d4 100644 --- a/src/model/model.h +++ b/src/model/model.h @@ -32,16 +32,16 @@ class Model public: /// type definition for the model registry typedef std::map<std::string, Model*> Registry; - + /// type definition for a list of model fragments typedef std::list<Fragment *> Fragments; - + /// type definition for a list of model lights typedef std::list<Light *> Lights; - + /// type definition for a list of model flares typedef std::list<Flare *> Flares; - + /// type definition for a lost of dockable locations typedef std::list<Dock *> Docks; @@ -50,97 +50,84 @@ public: /// type definition for a list of FragmentGroups typedef std::list<FragmentGroup *> Groups; - + /// create a model with a name Model(const std::string & name); - + /// delete the model, and all fragments, lights, etc ~Model(); - + /// the name of the model - inline const std::string & name() const - { + inline const std::string & name() const { return model_name; } - + /// radius - inline float radius() const - { + inline float radius() const { return model_radius; } - + /// additional model fragment groups - inline Groups & groups() - { + inline Groups & groups() { return model_groups; } /// list of lights - inline Lights & lights() - { + inline Lights & lights() { return model_lights; } /// list of dockable locations - inline Docks & docks() - { + inline Docks & docks() { return model_docks; } - + /// list of flares - inline Flares & flares() - { + inline Flares & flares() { return model_flares; } - + /// list of engines - inline ParticleSystems & particles() - { + inline ParticleSystems & particles() { return model_particles; } - + /// maximum values of the bounding box - inline const math::Vector3f & maxbbox() const - { + inline const math::Vector3f & maxbbox() const { return model_maxbbox; } - + /// minimum values of the bounding box - inline const math::Vector3f & minbbox() const - { + inline const math::Vector3f & minbbox() const { return model_minbbox; } - + /// engine sound loop for this model - inline unsigned int enginesound() const - { + inline unsigned int enginesound() const { return model_enginesound; } /// impulse sound set for this model - inline unsigned int impulsesound() const - { + inline unsigned int impulsesound() const { return model_impulsesound; } /// engine color for this model - inline const math::Color & enginecolor() const - { + inline const math::Color & enginecolor() const { return model_enginecolor; } /// original origin - inline const math::Vector3f & origin() const - { + inline const math::Vector3f & origin() const { return model_origin; } - + /// add a light to the model void add_light(Light *light); - + /// add a particle system to the model void add_particles(Particles *particles); - + /// add a flare to the model void add_flare(Flare *flare); @@ -153,15 +140,15 @@ public: void set_radius(const float radius); void set_origin(const math::Vector3f &origin); - + math::Vector3f model_maxbbox; math::Vector3f model_minbbox; - + unsigned int model_enginesound; unsigned int model_impulsesound; math::Color model_enginecolor; - + /// total number of triangles size_t model_tris_count; /// number of detail triangles @@ -172,29 +159,28 @@ public: size_t model_quad_detail_count; /* ---- static functions for the Model registry -------------------- */ - + /// the model registry - static inline Registry & registry() - { + static inline Registry & registry() { return model_registry; } - + /// get name model, returns 0 if not found static Model *find(const std::string & name); - + /// get named model from the registry and load it if necessary static Model *load(const std::string & name); - + /// clear the model registry static void clear(); - + /// list the content of the model registry static void list(); - + /// list one model static void list_model(Model *model); - + private: std::string model_name; diff --git a/src/model/parts.cc b/src/model/parts.cc index ac54410..e71ad16 100644 --- a/src/model/parts.cc +++ b/src/model/parts.cc @@ -6,7 +6,8 @@ #include "model/parts.h" -namespace model { +namespace model +{ /* ---- class Light ------------------------------------------------ */ @@ -24,12 +25,12 @@ Light::Light() : light_time = 0.5f; light_flare = 0; - + light_texture = 0; } Light::Light(const Light& other) : Part(other), - light_color(other.color()) + light_color(other.color()) { light_entity = other.entity(); light_engine = other.engine(); @@ -41,7 +42,7 @@ Light::Light(const Light& other) : Part(other), light_time = other.time(); light_flare = other.flare(); - + light_texture = other.texture(); } Light::~Light() @@ -105,8 +106,8 @@ SubModel::SubModel() : Part() } SubModel::SubModel(const SubModel& other) : Part(other), - submodel_name(other.name()), - submodel_axis(other.axis()) + submodel_name(other.name()), + submodel_axis(other.axis()) { submodel_scale = other.scale(); } diff --git a/src/model/parts.h b/src/model/parts.h index 210a225..4df4672 100644 --- a/src/model/parts.h +++ b/src/model/parts.h @@ -24,7 +24,7 @@ namespace model * Culling is a paremeter used by flares and particles to indicate * with side of the polygons should be culled during rendering */ -enum Cull { CullNone=0, CullBack=1, CullFront=2 }; +enum Cull { CullNone = 0, CullBack = 1, CullFront = 2 }; /* ---- class Part ------------------------------------------------- */ @@ -37,23 +37,20 @@ public: /** * @brief default constructor */ - inline Part() : part_location() - { + inline Part() : part_location() { } /** * @brief copy constructor */ - inline Part(const Part& other) : part_location(other.location()) - { + inline Part(const Part& other) : part_location(other.location()) { } /** * @brief constructor with location * @param location location of this part within the parent model */ - inline Part(const math::Vector3f& location) : part_location(location) - { + inline Part(const math::Vector3f& location) : part_location(location) { } /* ---- inspectors ----------------------------------------- */ @@ -61,8 +58,7 @@ public: /** * @brief location of this part within the parent model */ - inline const math::Vector3f& location() const - { + inline const math::Vector3f& location() const { return part_location; } @@ -70,22 +66,25 @@ public: /** * @brief set the location within the parent model */ - inline void set_location(const math::Vector3f& location) { part_location.assign(location); } + inline void set_location(const math::Vector3f& location) { + part_location.assign(location); + } /** * @brief set the location within the parent model */ - inline void set_location(const float x, const float y, const float z) { part_location.assign(x, y, z); } + inline void set_location(const float x, const float y, const float z) { + part_location.assign(x, y, z); + } /* ---- actors --------------------------------------------- */ /** * @brief mutable reference to the location of this part within the parent model */ - inline math::Vector3f& get_location() - { + inline math::Vector3f& get_location() { return part_location; - } + } private: math::Vector3f part_location; @@ -111,66 +110,56 @@ public: * @brief destructor */ ~Light(); - + /* ---- inspectors ----------------------------------------- */ /// light color - inline const math::Color& color() const - { + inline const math::Color& color() const { return light_color; }; - + /// true if this is a strobe light - inline bool strobe() const - { + inline bool strobe() const { return light_strobe; } - + /// true if this light has entity color - inline bool entity() const - { + inline bool entity() const { return light_entity; } /// true if this light has engine activation - inline bool engine() const - { + inline bool engine() const { return light_engine; } - + /// size of the light, default is 1.0f - inline float radius() const - { + inline float radius() const { return light_radius; } - + /// strobe time offset, in seconds - inline float offset() const - { + inline float offset() const { return light_offset; } - + /// strobe frequency in strobes per second, default is 1.0f - inline float frequency() const - { + inline float frequency() const { return light_frequency; } - + /// fraction a strobe light will be on, default is 0.5f - inline float time() const - { + inline float time() const { return light_time; } - + /// flare texture number - inline unsigned int flare() const - { + inline unsigned int flare() const { return light_flare; } - + /// render texture id - inline size_t texture() const - { + inline size_t texture() const { return light_texture; } /* ---- mutators ------------------------------------------- */ @@ -178,53 +167,73 @@ public: /** * @brief set strobe color on or off */ - inline void set_strobe(const bool strobe) { light_strobe = strobe; } + inline void set_strobe(const bool strobe) { + light_strobe = strobe; + } /** * @brief set entity color on or off */ - inline void set_entity(const bool entity) { light_entity = entity; } + inline void set_entity(const bool entity) { + light_entity = entity; + } /** * @brief set engine activation on or off */ - inline void set_engine(const bool engine) { light_engine = engine; } + inline void set_engine(const bool engine) { + light_engine = engine; + } /** * @brief set the light radius */ - inline void set_radius(const float radius) { light_radius = radius; } + inline void set_radius(const float radius) { + light_radius = radius; + } /** * @brief set the light strobe frequency, in strobes per second */ - inline void set_frequency(const float frequency) { light_frequency = frequency; } + inline void set_frequency(const float frequency) { + light_frequency = frequency; + } /** * @brief set the light on time, from 0.0 (always off) to 1.0 (always on) */ - inline void set_time(const float time) { light_radius = time; } + inline void set_time(const float time) { + light_radius = time; + } /** * @brief set the light strobe time offset, in seconds */ - inline void set_offset(const float offset) { light_offset = offset; } + inline void set_offset(const float offset) { + light_offset = offset; + } /** * @brief set the flare texture number */ - inline void set_flare(unsigned int flare) { light_flare = flare; } + inline void set_flare(unsigned int flare) { + light_flare = flare; + } /** * @brief set the render texture id */ - inline void set_texture(size_t texture) { light_texture = texture; } + inline void set_texture(size_t texture) { + light_texture = texture; + } /** * @brief mutable reference to the color */ - inline math::Color& get_color() { return light_color; } - + inline math::Color& get_color() { + return light_color; + } + private: bool light_strobe; bool light_engine; @@ -256,29 +265,31 @@ public: Flare(const Flare& other); ~Flare(); - + /* ---- inspectors ----------------------------------------- */ - inline const math::Axis &axis() const - { + inline const math::Axis &axis() const { return flare_axis; } - - inline Cull cull() const - { + + inline Cull cull() const { return flare_cull; } /* ---- mutators ------------------------------------------- */ - - inline void set_cull(const Cull cull) { flare_cull = cull; } + + inline void set_cull(const Cull cull) { + flare_cull = cull; + } /* ---- actors --------------------------------------------- */ /** * @brief mutable reference to the axis */ - inline math::Axis& get_axis() { return flare_axis; } + inline math::Axis& get_axis() { + return flare_axis; + } private: Cull flare_cull; @@ -296,34 +307,28 @@ public: Particles(const math::Vector3f & location); ~Particles(); - - inline const math::Axis &axis() const - { + + inline const math::Axis &axis() const { return particles_axis; } - - inline const std::string& script() const - { + + inline const std::string& script() const { return particles_script; } - inline bool entity() const - { + inline bool entity() const { return particles_entity; } - inline bool engine() const - { + inline bool engine() const { return particles_engine; } - - inline float radius() const - { + + inline float radius() const { return particles_radius; } - inline Cull cull() const - { + inline Cull cull() const { return particles_cull; } @@ -332,25 +337,37 @@ public: /** * @brief set entity color on or off */ - inline void set_entity(const bool entity) { particles_entity = entity; } + inline void set_entity(const bool entity) { + particles_entity = entity; + } /** * @brief set engine activation on or off */ - inline void set_engine(const bool engine) { particles_engine = engine; } + inline void set_engine(const bool engine) { + particles_engine = engine; + } - inline void set_radius(const float radius) { particles_radius = radius; } + inline void set_radius(const float radius) { + particles_radius = radius; + } - inline void set_cull(const Cull cull) { particles_cull = cull; } + inline void set_cull(const Cull cull) { + particles_cull = cull; + } - inline void set_script(const std::string& script) { particles_script.assign(script); } + inline void set_script(const std::string& script) { + particles_script.assign(script); + } /* ---- actors --------------------------------------------- */ /** * @brief mutable reference to the axis */ - inline math::Axis& get_axis() { return particles_axis; } + inline math::Axis& get_axis() { + return particles_axis; + } private: bool particles_entity; @@ -360,7 +377,7 @@ private: float particles_radius; - math::Axis particles_axis; + math::Axis particles_axis; std::string particles_script; }; @@ -378,15 +395,16 @@ public: Dock(const Dock& other); ~Dock(); - + /// dock radius, default is 0.01f - inline float radius() const - { + inline float radius() const { return dock_radius; } - /// set dock radius - inline void set_radius(const float radius) { dock_radius = radius; } + /// set dock radius + inline void set_radius(const float radius) { + dock_radius = radius; + } private: float dock_radius; @@ -404,25 +422,39 @@ public: ~SubModel(); - inline const std::string& name() const { return submodel_name; } + inline const std::string& name() const { + return submodel_name; + } - inline const math::Axis& axis() const { return submodel_axis; } + inline const math::Axis& axis() const { + return submodel_axis; + } - inline float scale() const { return submodel_scale; } + inline float scale() const { + return submodel_scale; + } - inline void set_scale(const float scale) { submodel_scale = scale; } + inline void set_scale(const float scale) { + submodel_scale = scale; + } - inline void set_name(const std::string& name) { submodel_name.assign(name); } + inline void set_name(const std::string& name) { + submodel_name.assign(name); + } - inline void set_axis(const math::Axis& axis) { submodel_axis.assign(axis); } + inline void set_axis(const math::Axis& axis) { + submodel_axis.assign(axis); + } /* ---- actors --------------------------------------------- */ /** * @brief mutable reference to the axis */ - inline math::Axis& get_axis() { return submodel_axis; } + inline math::Axis& get_axis() { + return submodel_axis; + } private: float submodel_scale; diff --git a/src/model/primitives.cc b/src/model/primitives.cc index f21a6d5..85b07ee 100644 --- a/src/model/primitives.cc +++ b/src/model/primitives.cc @@ -20,7 +20,7 @@ Primitives::~Primitives() for (std::list<Triangle *>::iterator tris_it = primitives_triangles.begin(); tris_it != primitives_triangles.end(); tris_it++) delete(*tris_it); primitives_triangles.clear(); - + // clear list of quads for (std::list<Quad *>::iterator quad_it = primitives_quads.begin(); quad_it != primitives_quads.end(); quad_it++) delete(*quad_it); diff --git a/src/model/primitives.h b/src/model/primitives.h index 84c3f9b..43fd380 100644 --- a/src/model/primitives.h +++ b/src/model/primitives.h @@ -23,31 +23,28 @@ class Primitives public: /// type definition for a list of triangles typedef std::list<Triangle *> Triangles; - + /// type definition for a list of quads typedef std::list<Quad *> Quads; - + Primitives(Material *material); ~Primitives(); - + /// the material to be used for these primitives - inline const Material *material() const - { + inline const Material *material() const { return primitives_material; } - + /// list of triangles - inline Triangles & triangles() - { + inline Triangles & triangles() { return primitives_triangles; } - + /// list of quads - inline Quads & quads() - { + inline Quads & quads() { return primitives_quads; } - + /// add a Triangle primitive void add_triangle(Triangle *triangle); @@ -57,7 +54,7 @@ public: private: Triangles primitives_triangles; Quads primitives_quads; - + Material * primitives_material; }; diff --git a/src/model/quad.cc b/src/model/quad.cc index c012bf0..0830fe7 100644 --- a/src/model/quad.cc +++ b/src/model/quad.cc @@ -9,7 +9,7 @@ namespace model { -Quad::Quad(const math::Vector3f &v0,const math::Vector3f &v1, const math::Vector3f &v2, const math::Vector3f &v3, const math::Vector3f &normal, const bool detail) : +Quad::Quad(const math::Vector3f &v0, const math::Vector3f &v1, const math::Vector3f &v2, const math::Vector3f &v3, const math::Vector3f &normal, const bool detail) : quad_v0(v0), quad_n0(normal), quad_v1(v1), diff --git a/src/model/quad.h b/src/model/quad.h index 4728866..b7dd7af 100644 --- a/src/model/quad.h +++ b/src/model/quad.h @@ -21,85 +21,72 @@ public: * @brief a new quad with 4 vertices * this constructor assigns the face normal to every vertex normal */ - Quad(const math::Vector3f &v0,const math::Vector3f &v1, const math::Vector3f &v2, const math::Vector3f &v3, const math::Vector3f &normal, const bool detail = false); + Quad(const math::Vector3f &v0, const math::Vector3f &v1, const math::Vector3f &v2, const math::Vector3f &v3, const math::Vector3f &normal, const bool detail = false); /// delete quad ~Quad(); - + /// quad vertex 0 - inline math::Vector3f & v0() - { + inline math::Vector3f & v0() { return quad_v0; } - + /// quad vertex 0 normal - inline math::Vector3f & n0() - { + inline math::Vector3f & n0() { return quad_n0; } /// quad vertex 0 texture coordinates - inline math::Vector2f & t0() - { + inline math::Vector2f & t0() { return quad_t0; } /// quad vertex 1 - inline math::Vector3f & v1() - { + inline math::Vector3f & v1() { return quad_v1; } /// quad vertex 1 normal - inline math::Vector3f & n1() - { + inline math::Vector3f & n1() { return quad_n1; } /// quad vertex 1 texture coordinates - inline math::Vector2f & t1() - { + inline math::Vector2f & t1() { return quad_t1; } - + /// quad vertex 2 - inline math::Vector3f & v2() - { + inline math::Vector3f & v2() { return quad_v2; } /// quad vertex 2 normal - inline math::Vector3f & n2() - { + inline math::Vector3f & n2() { return quad_n2; } /// quad vertex 2 texture coordinates - inline math::Vector2f & t2() - { + inline math::Vector2f & t2() { return quad_t2; } /// quad vertex 3 - inline math::Vector3f & v3() - { + inline math::Vector3f & v3() { return quad_v3; } /// quad vertex 3 normal - inline math::Vector3f & n3() - { + inline math::Vector3f & n3() { return quad_n3; } /// quad vertex 3 texture coordinates - inline math::Vector2f & t3() - { + inline math::Vector2f & t3() { return quad_t3; } /// indidcates if this quad was generated from a detail brush - inline bool detail() const - { + inline bool detail() const { return quad_detail; } @@ -125,7 +112,7 @@ private: math::Vector3f quad_v3; math::Vector3f quad_n3; math::Vector2f quad_t3; - + math::Vector3f quad_normal; bool quad_detail; }; diff --git a/src/model/triangle.cc b/src/model/triangle.cc index 40c34a3..0fb7224 100644 --- a/src/model/triangle.cc +++ b/src/model/triangle.cc @@ -10,23 +10,23 @@ namespace model { Triangle::Triangle(const math::Vector3f &v0, const math::Vector3f &v1, const math::Vector3f &v2) : - triangle_v0(v0), - triangle_v1(v1), - triangle_v2(v2) + triangle_v0(v0), + triangle_v1(v1), + triangle_v2(v2) { - triangle_detail = false; + triangle_detail = false; } -Triangle::Triangle(const math::Vector3f &v0,const math::Vector3f &v1, const math::Vector3f &v2, const math::Vector3f &normal, const bool detail) : - triangle_v0(v0), - triangle_n0(normal), - triangle_v1(v1), - triangle_n1(normal), - triangle_v2(v2), - triangle_n2(normal), - triangle_normal(normal) +Triangle::Triangle(const math::Vector3f &v0, const math::Vector3f &v1, const math::Vector3f &v2, const math::Vector3f &normal, const bool detail) : + triangle_v0(v0), + triangle_n0(normal), + triangle_v1(v1), + triangle_n1(normal), + triangle_v2(v2), + triangle_n2(normal), + triangle_normal(normal) { - triangle_detail = detail; + triangle_detail = detail; } Triangle::~Triangle() diff --git a/src/model/triangle.h b/src/model/triangle.h index 8e8d1e2..06a8810 100644 --- a/src/model/triangle.h +++ b/src/model/triangle.h @@ -17,92 +17,92 @@ namespace model class Triangle { public: - /** - * @brief a new triangle with 3 vertices - * this constructor is used by the ASE reader sets the detail flag to false - */ - Triangle(const math::Vector3f &v0, const math::Vector3f &v1, const math::Vector3f &v2); - - /** - * @brief a new triangle with 3 vertices - * this constructor is used by the MAP reader and assigns the face normal to every vertex normal - */ - Triangle(const math::Vector3f &v0,const math::Vector3f &v1, const math::Vector3f &v2, const math::Vector3f &normal, const bool detail = false); - - /// delete triangle - ~Triangle(); - - /// triangle vertex 0 - inline math::Vector3f & v0() { - return triangle_v0; - } - - /// triangle vertex 0 normal - inline math::Vector3f & n0() { - return triangle_n0; - } - - /// triangle vertex 0 texture coordinates - inline math::Vector2f & t0() { - return triangle_t0; - } - - /// triangle vertex 1 - inline math::Vector3f & v1() { - return triangle_v1; - } - - /// triangle vertex 1 normal - inline math::Vector3f & n1() { - return triangle_n1; - } - - /// triangle vertex 1 texture coordinates - inline math::Vector2f & t1() { - return triangle_t1; - } - - /// triangle vertex 2 - inline math::Vector3f & v2() { - return triangle_v2; - } - - /// triangle vertex 2 normal - inline math::Vector3f & n2() { - return triangle_n2; - } - - /// triangle vertex 2 texture coordinates - inline math::Vector2f & t2() { - return triangle_t2; - } - - /// indidcates if this triangle was generated from a detail brush - inline bool detail() const { - return triangle_detail; - } - - /// face normal - inline math::Vector3f &normal() { - return triangle_normal; - } + /** + * @brief a new triangle with 3 vertices + * this constructor is used by the ASE reader sets the detail flag to false + */ + Triangle(const math::Vector3f &v0, const math::Vector3f &v1, const math::Vector3f &v2); + + /** + * @brief a new triangle with 3 vertices + * this constructor is used by the MAP reader and assigns the face normal to every vertex normal + */ + Triangle(const math::Vector3f &v0, const math::Vector3f &v1, const math::Vector3f &v2, const math::Vector3f &normal, const bool detail = false); + + /// delete triangle + ~Triangle(); + + /// triangle vertex 0 + inline math::Vector3f & v0() { + return triangle_v0; + } + + /// triangle vertex 0 normal + inline math::Vector3f & n0() { + return triangle_n0; + } + + /// triangle vertex 0 texture coordinates + inline math::Vector2f & t0() { + return triangle_t0; + } + + /// triangle vertex 1 + inline math::Vector3f & v1() { + return triangle_v1; + } + + /// triangle vertex 1 normal + inline math::Vector3f & n1() { + return triangle_n1; + } + + /// triangle vertex 1 texture coordinates + inline math::Vector2f & t1() { + return triangle_t1; + } + + /// triangle vertex 2 + inline math::Vector3f & v2() { + return triangle_v2; + } + + /// triangle vertex 2 normal + inline math::Vector3f & n2() { + return triangle_n2; + } + + /// triangle vertex 2 texture coordinates + inline math::Vector2f & t2() { + return triangle_t2; + } + + /// indidcates if this triangle was generated from a detail brush + inline bool detail() const { + return triangle_detail; + } + + /// face normal + inline math::Vector3f &normal() { + return triangle_normal; + } private: - math::Vector3f triangle_v0; - math::Vector3f triangle_n0; - math::Vector2f triangle_t0; + math::Vector3f triangle_v0; + math::Vector3f triangle_n0; + math::Vector2f triangle_t0; - math::Vector3f triangle_v1; - math::Vector3f triangle_n1; - math::Vector2f triangle_t1; + math::Vector3f triangle_v1; + math::Vector3f triangle_n1; + math::Vector2f triangle_t1; - math::Vector3f triangle_v2; - math::Vector3f triangle_n2; - math::Vector2f triangle_t2; + math::Vector3f triangle_v2; + math::Vector3f triangle_n2; + math::Vector2f triangle_t2; - math::Vector3f triangle_normal; - bool triangle_detail; + math::Vector3f triangle_normal; + bool triangle_detail; }; } diff --git a/src/model/vertexarray.cc b/src/model/vertexarray.cc index 8509dc6..057b80d 100644 --- a/src/model/vertexarray.cc +++ b/src/model/vertexarray.cc @@ -19,17 +19,17 @@ VertexArray *VertexArray::vertex_instance = 0 ; VertexArray::VertexArray(size_t size) { vertex_instance = this; - vertex_size = size * 1024*1024; // megabytes + vertex_size = size * 1024 * 1024; // megabytes vertex_size = vertex_size / sizeof(float); // sizeof float vertex_size = vertex_size / 3; // 3 arrays - + vertex_vertex = (float *) malloc(vertex_size * sizeof(float)); vertex_normal = (float *) malloc(vertex_size * sizeof(float)); vertex_texture = (float *) malloc(vertex_size * sizeof(float)); - + con_print << "^BInitializing vertex array..." << std::endl; con_print << " " << size << " Mb allocated" << std::endl; - + clear(); } @@ -38,7 +38,7 @@ VertexArray::~VertexArray() free(vertex_vertex); free(vertex_normal); free(vertex_texture); - + vertex_instance = 0 ; } @@ -46,90 +46,90 @@ void VertexArray::clear() { vertex_index = 0; vertex_overflow = false; - + memset(vertex_vertex, 0, sizeof(vertex_vertex)); memset(vertex_normal, 0, sizeof(vertex_normal)); memset(vertex_texture, 0, sizeof(vertex_texture)); - + add_sphere(); } void VertexArray::add_sphere() { // load sphere vertices into the VertexArray - + // build sin/cos table float *sintable; float *costable; - + sintable = new float[SPHERESEGMENTS]; costable = new float[SPHERESEGMENTS]; - float d = 2 * M_PI / (SPHERESEGMENTS-1); - - for (int i=0; i < SPHERESEGMENTS; i++) { + float d = 2 * M_PI / (SPHERESEGMENTS - 1); + + for (int i = 0; i < SPHERESEGMENTS; i++) { sintable[i] = sin(d * (float) i); costable[i] = cos(d * (float) i); } - + // draw body math::Vector3f v; math::Vector3f n; float texx, texy; - + int quad_count = 0; - + // add sphere - for (int j=0; j < (SPHERESEGMENTS-1) / 2; j++) { - + for (int j = 0; j < (SPHERESEGMENTS - 1) / 2; j++) { + float r = sintable[j]; float r1 = sintable[j+1]; - + for (int i = 0; i < SPHERESEGMENTS; i++) { - v = math::Vector3f(r*costable[i], r*sintable[i], costable[j]); + v = math::Vector3f(r * costable[i], r * sintable[i], costable[j]); n = v; n.normalize(); - texx = (float)i/(float)(SPHERESEGMENTS-1); - texy = -costable[j]/2 + 0.5f; + texx = (float)i / (float)(SPHERESEGMENTS - 1); + texy = -costable[j] / 2 + 0.5f; add_vertex(v, n, texx, texy); - - v = math::Vector3f(r1*costable[i], r1*sintable[i], costable[j+1]); + + v = math::Vector3f(r1 * costable[i], r1 * sintable[i], costable[j+1]); n = v; n.normalize(); - texx = (float)i/(float)(SPHERESEGMENTS-1); - texy = -costable[j+1]/2 + 0.5f; + texx = (float)i / (float)(SPHERESEGMENTS - 1); + texy = -costable[j+1] / 2 + 0.5f; add_vertex(v, n, texx, texy); - + quad_count++; } quad_count--; } - - + + // add inside-out sphere - for (int j=0; j < (SPHERESEGMENTS-1) / 2; j++) { - + for (int j = 0; j < (SPHERESEGMENTS - 1) / 2; j++) { + float r = sintable[j]; float r1 = sintable[j+1]; - - - for (int i = SPHERESEGMENTS -1 ; i >= 0; i--) { - v = math::Vector3f(r*costable[i], r*sintable[i], costable[j]); + + + for (int i = SPHERESEGMENTS - 1 ; i >= 0; i--) { + v = math::Vector3f(r * costable[i], r * sintable[i], costable[j]); n = v; n.normalize(); - texx = 1-(float)i/(float)(SPHERESEGMENTS-1); - texy = -costable[j]/2 + 0.5f; + texx = 1 - (float)i / (float)(SPHERESEGMENTS - 1); + texy = -costable[j] / 2 + 0.5f; add_vertex(v, n, texx, texy); - - v = math::Vector3f(r1*costable[i], r1*sintable[i], costable[j+1]); + + v = math::Vector3f(r1 * costable[i], r1 * sintable[i], costable[j+1]); n = v; n.normalize(); - texx = 1-(float)i/(float)(SPHERESEGMENTS-1); - texy = -costable[j+1]/2 + 0.5f; + texx = 1 - (float)i / (float)(SPHERESEGMENTS - 1); + texy = -costable[j+1] / 2 + 0.5f; add_vertex(v, n, texx, texy); } - + } - + delete[] sintable; delete[] costable; } @@ -143,7 +143,7 @@ size_t VertexArray::add_vertex(math::Vector3f const &v, math::Vector3f const &n, } return 0; } - + for (int i = 0; i < 3; i ++) { vertex_vertex[vertex_index+i] = v[i]; vertex_normal[vertex_index+i] = n[i]; @@ -152,9 +152,9 @@ size_t VertexArray::add_vertex(math::Vector3f const &v, math::Vector3f const &n, vertex_texture[vertex_index] = tex_x; vertex_texture[vertex_index+1] = tex_y; vertex_texture[vertex_index+2] = 0; - + vertex_index += 3; - + return 1; } diff --git a/src/model/vertexarray.h b/src/model/vertexarray.h index 4277442..4377f67 100644 --- a/src/model/vertexarray.h +++ b/src/model/vertexarray.h @@ -24,61 +24,54 @@ public: /// create a new VertexArray with size in Mb VertexArray(size_t size); ~VertexArray(); - + void clear(); - - size_t add_vertex(math::Vector3f const &v, math::Vector3f const &n, float tex_x=0.0f, float tex_y=0.0f); - - inline float *vertex() - { + + size_t add_vertex(math::Vector3f const &v, math::Vector3f const &n, float tex_x = 0.0f, float tex_y = 0.0f); + + inline float *vertex() { return vertex_vertex; } - inline float *normal() - { + inline float *normal() { return vertex_normal; } - inline float *texture() - { + inline float *texture() { return vertex_texture; } - - inline bool overflow() const - { + + inline bool overflow() const { return vertex_overflow; } - + /// size of the vertex array in number of floats (for a single array) - inline size_t size() const - { + inline size_t size() const { return vertex_size; } - + /// number of allocated floats - inline size_t index() const - { + inline size_t index() const { return vertex_index; } - - static inline VertexArray *instance() - { + + static inline VertexArray *instance() { return vertex_instance; } - + private: /// model vertices float *vertex_vertex; float *vertex_normal; float *vertex_texture; - + size_t vertex_index; size_t vertex_size; - + void add_sphere(); - + static VertexArray *vertex_instance; - + bool vertex_overflow; }; diff --git a/src/osirion.cc b/src/osirion.cc index 4db5e6f..e6dd419 100644 --- a/src/osirion.cc +++ b/src/osirion.cc @@ -1,7 +1,7 @@ -/* +/* osirion.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 + 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 "SDL/SDL.h" diff --git a/src/osiriond.cc b/src/osiriond.cc index 8d941ca..7fa3d09 100644 --- a/src/osiriond.cc +++ b/src/osiriond.cc @@ -1,7 +1,7 @@ /* osiriond.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 + 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 "dedicated/dedicated.h" diff --git a/src/render/camera.cc b/src/render/camera.cc index 913adfb..329ab36 100644 --- a/src/render/camera.cc +++ b/src/render/camera.cc @@ -1,7 +1,7 @@ -/* +/* render/camera.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 + 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 <cmath> @@ -50,10 +50,10 @@ float Camera::camera_zoom; void Camera::init() { direction_current = 0; - direction_target = 0; + direction_target = 0; - pitch_current = pitch_track * 2; - pitch_target = pitch_track; + pitch_current = pitch_track * 2; + pitch_target = pitch_track; target_pitch = 0.0f; target_direction = 0.0f; @@ -68,15 +68,16 @@ void Camera::init() camera_axis.clear(); camera_eye.clear(); camera_target.clear(); - + } void Camera::shutdown() { } -void Camera::set_mode(Mode newmode) { - +void Camera::set_mode(Mode newmode) +{ + direction_target = 0; direction_current = direction_target; pitch_target = pitch_track; @@ -91,103 +92,103 @@ void Camera::set_mode(Mode newmode) { if (camera_mode != Overview) camera_previous_mode = camera_mode; - switch(newmode) { - case Track: - // switch camera to Track mode - camera_mode = Track; - if (core::localcontrol()) { - camera_axis.assign(core::localcontrol()->axis()); - } - break; + switch (newmode) { + case Track: + // switch camera to Track mode + camera_mode = Track; + if (core::localcontrol()) { + camera_axis.assign(core::localcontrol()->axis()); + } + break; - case Free: - // switch camera to Free mode - camera_mode = Free; - pitch_target = pitch_free; - pitch_current = pitch_target; - break; + case Free: + // switch camera to Free mode + camera_mode = Free; + pitch_target = pitch_free; + pitch_current = pitch_target; + break; - case Cockpit: - camera_mode = Cockpit; - break; + case Cockpit: + camera_mode = Cockpit; + break; - case Overview: - // switch camera to Overview mode - camera_mode = Overview; + case Overview: + // switch camera to Overview mode + camera_mode = Overview; - default: - break; + default: + break; } } void Camera::view_next() { - - if (!core::localcontrol()) { + + if (!core::localcontrol()) { set_mode(Overview); return; } - switch(camera_mode) { - case Free: - // switch camera to Track mode - set_mode(Track); - //con_print << "view: track" << std::endl; - core::application()->notify_message(core::Message::Info, std::string("view: track")); - break; - - case Track: - // switch camera to Cockpit mode - set_mode(Cockpit); - //con_print << "view: cockpit" << std::endl; - core::application()->notify_message(core::Message::Info, std::string("view: cockpit")); - break; - - case Cockpit: - // switch camera to Free mode - set_mode(Free); - //con_print << "view: free" << std::endl; - core::application()->notify_message(core::Message::Info, std::string("view: free")); - break; - - default: - break; + switch (camera_mode) { + case Free: + // switch camera to Track mode + set_mode(Track); + //con_print << "view: track" << std::endl; + core::application()->notify_message(core::Message::Info, std::string("view: track")); + break; + + case Track: + // switch camera to Cockpit mode + set_mode(Cockpit); + //con_print << "view: cockpit" << std::endl; + core::application()->notify_message(core::Message::Info, std::string("view: cockpit")); + break; + + case Cockpit: + // switch camera to Free mode + set_mode(Free); + //con_print << "view: free" << std::endl; + core::application()->notify_message(core::Message::Info, std::string("view: free")); + break; + + default: + break; } } void Camera::view_previous() { - - if (!core::localcontrol()) { + + if (!core::localcontrol()) { set_mode(Overview); return; } - switch(camera_mode) { - case Cockpit: - // switch camera to Track mode - set_mode(Track); - //con_print << "view: track" << std::endl; - core::application()->notify_message(core::Message::Info, std::string("view: track")); - break; - - case Free: - // switch camera to Cockpit mode - set_mode(Cockpit); - //con_print << "view: cockpit" << std::endl; - core::application()->notify_message(core::Message::Info, std::string("view: cockpit")); - break; - - case Track: - // switch camera to Free mode - set_mode(Free); - //con_print << "view: free" << std::endl; - core::application()->notify_message(core::Message::Info, std::string("view: free")); - break; - - default: - break; + switch (camera_mode) { + case Cockpit: + // switch camera to Track mode + set_mode(Track); + //con_print << "view: track" << std::endl; + core::application()->notify_message(core::Message::Info, std::string("view: track")); + break; + + case Free: + // switch camera to Cockpit mode + set_mode(Cockpit); + //con_print << "view: cockpit" << std::endl; + core::application()->notify_message(core::Message::Info, std::string("view: cockpit")); + break; + + case Track: + // switch camera to Free mode + set_mode(Free); + //con_print << "view: free" << std::endl; + core::application()->notify_message(core::Message::Info, std::string("view: free")); + break; + + default: + break; } } @@ -197,8 +198,8 @@ void Camera::set_zoom(float zoom) math::clamp(camera_zoom, 1.0f, 10.0f); } -void Camera::frame(float seconds) -{ +void Camera::frame(float seconds) +{ math::Axis target_axis; float d = 0; @@ -218,10 +219,10 @@ void Camera::frame(float seconds) if (mode() == Overview) { camera_eye.clear(); - + if (core::localplayer()->view()) { // player view entity - + camera_axis.assign(core::localplayer()->view()->axis()); if (core::localplayer()->view() == core::localcontrol()) { camera_axis.change_pitch(pitch_free); @@ -230,17 +231,17 @@ void Camera::frame(float seconds) } else { distance = math::max(core::localplayer()->view()->radius(), 1.0f) * 3.0f; camera_axis.change_direction(180.0f); - camera_target.assign(core::localplayer()->view()->location() - core::localplayer()->view()->axis().left()* (math::max(core::localplayer()->view()->radius(), 1.0f)*0.5f) ); + camera_target.assign(core::localplayer()->view()->location() - core::localplayer()->view()->axis().left()*(math::max(core::localplayer()->view()->radius(), 1.0f)*0.5f)); } - -/* - } else if (core::localplayer()->zone()->default_view()) { - // default zone view entity - camera_target.assign(core::localplayer()->zone()->default_view()->location()); - camera_axis.assign(core::localplayer()->zone()->default_view()->axis()); - camera_axis.change_direction(180.0f); - distance = math::max(core::localplayer()->zone()->default_view()->radius(), 1.0f) * 2.0f; -*/ + + /* + } else if (core::localplayer()->zone()->default_view()) { + // default zone view entity + camera_target.assign(core::localplayer()->zone()->default_view()->location()); + camera_axis.assign(core::localplayer()->zone()->default_view()->axis()); + camera_axis.change_direction(180.0f); + distance = math::max(core::localplayer()->zone()->default_view()->radius(), 1.0f) * 2.0f; + */ } else { // default location (0,0,0) camera_target.clear(); @@ -258,7 +259,7 @@ void Camera::frame(float seconds) if (mode() == Track) { float cosangle; // cosine of an angle - float angle; // angle in radians + float angle; // angle in radians math::Vector3f n; // normal of a plane n.assign(math::crossproduct(camera_axis.forward(), target_axis.forward())); @@ -286,36 +287,36 @@ void Camera::frame(float seconds) angle = acos(cosangle) * seconds; // * 180.0f / M_PI; if (angle > MIN_DELTA) camera_axis.rotate(n, -angle); - } + } if (core::localcontrol()->model()) { camera_target -= camera_axis.forward() * math::max(FRUSTUMFRONT / WORLDSCALE, core::localcontrol()->model()->maxbbox().x()); camera_target += camera_axis.up() * math::max(FRUSTUMFRONT / WORLDSCALE, core::localcontrol()->model()->maxbbox().z() * 2.0f); } else { - camera_target -= camera_axis.forward() * math::max (FRUSTUMFRONT / WORLDSCALE, FRUSTUMFRONT / WORLDSCALE + core::localcontrol()->radius()); - camera_target += camera_axis.up() * math::max (FRUSTUMFRONT / WORLDSCALE, FRUSTUMFRONT / WORLDSCALE + core::localcontrol()->radius()); + camera_target -= camera_axis.forward() * math::max(FRUSTUMFRONT / WORLDSCALE, FRUSTUMFRONT / WORLDSCALE + core::localcontrol()->radius()); + camera_target += camera_axis.up() * math::max(FRUSTUMFRONT / WORLDSCALE, FRUSTUMFRONT / WORLDSCALE + core::localcontrol()->radius()); } - distance = math::max (FRUSTUMFRONT / WORLDSCALE, FRUSTUMFRONT / WORLDSCALE + camera_zoom * core::localcontrol()->radius()) + 0.001f; + distance = math::max(FRUSTUMFRONT / WORLDSCALE, FRUSTUMFRONT / WORLDSCALE + camera_zoom * core::localcontrol()->radius()) + 0.001f; } else if (mode() == Free) { camera_axis.assign(target_axis); - + direction_target = direction_current - 90 * target_direction; pitch_target = pitch_current - 90 * target_pitch; // adjust direction d = degrees180f(direction_current - direction_target); - direction_current = degrees360f( direction_current - d * seconds); + direction_current = degrees360f(direction_current - d * seconds); camera_axis.change_direction(direction_current); - // adjust pitch + // adjust pitch d = degrees180f(pitch_current - pitch_target); pitch_current = degrees360f(pitch_current - d * seconds); camera_axis.change_pitch(pitch_current); - distance = math::max (FRUSTUMFRONT / WORLDSCALE, FRUSTUMFRONT / WORLDSCALE + camera_zoom * core::localcontrol()->radius()) + 0.001f; + distance = math::max(FRUSTUMFRONT / WORLDSCALE, FRUSTUMFRONT / WORLDSCALE + camera_zoom * core::localcontrol()->radius()) + 0.001f; } else if (mode() == Cockpit) { @@ -323,10 +324,10 @@ void Camera::frame(float seconds) if (core::localcontrol()->model()) { camera_target += (core::localcontrol()->model()->maxbbox().x()) * - core::localcontrol()->axis().forward(); + core::localcontrol()->axis().forward(); } else { camera_target += (core::localcontrol()->radius()) * - core::localcontrol()->axis().forward(); + core::localcontrol()->axis().forward(); } distance = (FRUSTUMFRONT / WORLDSCALE) - 0.001f; } @@ -342,7 +343,7 @@ void Camera::frustum() gl::matrixmode(GL_PROJECTION); gl::loadidentity(); - gl::frustum(-FRUSTUMSIZE, FRUSTUMSIZE, -FRUSTUMSIZE/State::aspect(), FRUSTUMSIZE/State::aspect(), FRUSTUMFRONT, core::range::maxdistance * WORLDSCALE); + gl::frustum(-FRUSTUMSIZE, FRUSTUMSIZE, -FRUSTUMSIZE / State::aspect(), FRUSTUMSIZE / State::aspect(), FRUSTUMFRONT, core::range::maxdistance * WORLDSCALE); gl::matrixmode(GL_MODELVIEW); gl::loadidentity(); @@ -369,9 +370,9 @@ void Camera::frustum_default(float distance, float cx, float cy) // move eye to (cx, cy) // note: the factor 2.0f probably has to be 1.0f/frustum_size - gl::translate(2.0f*(-State::width() * 0.5f + cx)/State::width() , 2.0f*(State::height() * 0.5f - cy)/State::height(), 0.0f); + gl::translate(2.0f*(-State::width() * 0.5f + cx) / State::width() , 2.0f*(State::height() * 0.5f - cy) / State::height(), 0.0f); - gl::frustum(-FRUSTUMSIZE, FRUSTUMSIZE, -FRUSTUMSIZE/State::aspect(), FRUSTUMSIZE/State::aspect(), FRUSTUMFRONT, 1023.0f); + gl::frustum(-FRUSTUMSIZE, FRUSTUMSIZE, -FRUSTUMSIZE / State::aspect(), FRUSTUMSIZE / State::aspect(), FRUSTUMFRONT, 1023.0f); gl::matrixmode(GL_MODELVIEW); gl::loadidentity(); @@ -380,7 +381,7 @@ void Camera::frustum_default(float distance, float cx, float cy) gl::rotate(90.0f, 0.0f, 1.0f, 0.0f); gl::rotate(-90.0f, 1.0f , 0.0f, 0.0f); - gl::translate(distance+1.0f, 0.0f, 0.0f); + gl::translate(distance + 1.0f, 0.0f, 0.0f); // extra model rotation gl::rotate(-core::application()->time() / 8.0f *360.0f , 0.0f, 0.0f, 1.0f); diff --git a/src/render/camera.h b/src/render/camera.h index 49cba74..80fdb36 100644 --- a/src/render/camera.h +++ b/src/render/camera.h @@ -1,7 +1,7 @@ -/* +/* render/camera.h - This file is part of the Osirion project and is distributed under - the terms and conditions of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_RENDER_CAMERA_H__ @@ -10,7 +10,8 @@ #include "math/mathlib.h" #include "core/range.h" -namespace render { +namespace render +{ const float WORLDSCALE = 4.0f; const float FARPLANE = core::range::maxdistance; @@ -32,16 +33,24 @@ public: static void shutdown(); /// gameworld coordinates of the camera eye - static inline const math::Vector3f & eye() { return camera_eye; } + static inline const math::Vector3f & eye() { + return camera_eye; + } /// gameworld coordinates of the camera target - static inline const math::Vector3f & target() { return camera_target; } + static inline const math::Vector3f & target() { + return camera_target; + } /// gameworld camera axis - static inline const math::Axis & axis() { return camera_axis; } + static inline const math::Axis & axis() { + return camera_axis; + } /// current camera mode - static inline Mode mode() { return camera_mode; } + static inline Mode mode() { + return camera_mode; + } /// reset the current mode static void reset(); @@ -63,7 +72,7 @@ public: /** The ortographic projetion is used to draw the user interface */ static void ortho(); - + /// set target zoom static void set_zoom(float zoom); @@ -106,5 +115,5 @@ private: }; } // namespace client - + #endif // __INCLUDED_RENDER_CAMERA_H__ diff --git a/src/render/draw.cc b/src/render/draw.cc index 4dc6e53..dea24bc 100644 --- a/src/render/draw.cc +++ b/src/render/draw.cc @@ -1,7 +1,7 @@ /* render/draw.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 + 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 <sstream> @@ -59,15 +59,15 @@ void pass_prepare(float seconds) using namespace model; // lighting settings for the default light GL_LIGHT0 - GLfloat light_position[] = { 0.0, 0.0, 0.0, 1.0 }; + GLfloat light_position[] = { 0.0, 0.0, 0.0, 1.0 }; GLfloat ambient_light[] = { 0.01f, 0.01f, 0.01f, 1.0f }; GLfloat diffuse_light[] = { 0.2f, 0.2f, 0.2f, 1.0f }; GLfloat specular_light[] = { 0.2f, 0.2f, 0.2f, 1.0f }; - for (size_t i=0; i <3; i++) { - light_position[i] = Camera::eye()[i]; + for (size_t i = 0; i < 3; i++) { + light_position[i] = Camera::eye()[i]; } - + glLightfv(GL_LIGHT0, GL_POSITION, light_position); glLightfv(GL_LIGHT0, GL_AMBIENT, ambient_light); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse_light); @@ -86,14 +86,14 @@ void pass_prepare(float seconds) for (core::Zone::Content::iterator it = zone->content().begin(); it != zone->content().end(); it++) { core::Entity *entity = (*it); - + if (!ext_render(entity)) { new RenderExt(entity); } entity->extension((size_t) core::Extension::Render)->frame(seconds); // globes - if (entity->type() == core::Entity::Globe) { + if (entity->type() == core::Entity::Globe) { core::EntityGlobe *globe = static_cast<core::EntityGlobe *>(entity); // add the globe to the globes list @@ -109,14 +109,14 @@ void pass_prepare(float seconds) GLfloat ambient_light[] = { 0.0f, 0.0f, 0.0f, 1.0f }; GLfloat specular_light[] = { 0.2f, 0.2f, 0.2f, 1.0f }; - for (size_t i=0; i <3; i++) { + for (size_t i = 0; i < 3; i++) { zone_light[i] = globe->location()[i]; zone_color[i] = globe->color()[i]; diffuse_light[i] = globe->color()[i] * 0.4; } zone_light[3] = 1.0f; diffuse_light[3] = 1.0f; - + glLightfv(GL_LIGHT1, GL_POSITION, zone_light); glLightfv(GL_LIGHT1, GL_AMBIENT, ambient_light); glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse_light); @@ -132,18 +132,18 @@ void pass_prepare(float seconds) /* ----- Skybox ---------------------------------------------------- */ void draw_sphere_inside(math::Color const & color, float radius) -{ +{ gl::scale(radius, radius, radius); gl::color(color); - size_t index = (model::SPHERESEGMENTS) * (model::SPHERESEGMENTS-1); - size_t count = (model::SPHERESEGMENTS)*2; + size_t index = (model::SPHERESEGMENTS) * (model::SPHERESEGMENTS - 1); + size_t count = (model::SPHERESEGMENTS) * 2; // draw body - for (int j=0; j < (model::SPHERESEGMENTS-1)/2; j++) { + for (int j = 0; j < (model::SPHERESEGMENTS - 1) / 2; j++) { glDrawArrays(gl::QuadStrip, index, count); index += count; - Stats::quads += count/2-1; + Stats::quads += count / 2 - 1; } } @@ -175,7 +175,7 @@ void draw_pass_sky() gl::enable(GL_TEXTURE_2D); gl::push(); - gl::translate(Camera::eye()); + gl::translate(Camera::eye()); draw_sphere_inside(math::Color(), 1016.0f); gl::pop(); @@ -186,33 +186,33 @@ void draw_pass_sky() /* ---- Globes ----------------------------------------------------- */ void draw_sphere(math::Color const & color, float radius) -{ +{ gl::scale(radius, radius, radius); gl::color(color); size_t index = 0; - size_t count = (model::SPHERESEGMENTS)*2; + size_t count = (model::SPHERESEGMENTS) * 2; // draw body - for (int j=0; j < (model::SPHERESEGMENTS-1)/2; j++) { + for (int j = 0; j < (model::SPHERESEGMENTS - 1) / 2; j++) { glDrawArrays(gl::QuadStrip, index, count); index += count; - Stats::quads += count/2-1; + Stats::quads += count / 2 - 1; } } void draw_globe(const core::EntityGlobe* globe) { - /* + /* Globes have to be rendered distance sorted, closest last. Globes behind farplane are rescaled and repositioned. */ math::Vector3f location(globe->location()); float radius = globe->radius(); - if(globe->flag_is_set(core::Entity::Bright)) { + if (globe->flag_is_set(core::Entity::Bright)) { // bright globe, render fullbright - gl::disable(GL_LIGHTING); + gl::disable(GL_LIGHTING); } else { // disable camera light, level light only gl::disable(GL_LIGHT0); @@ -234,10 +234,10 @@ void draw_globe(const core::EntityGlobe* globe) if (has_zone_light) { // move zone light float fake_light[4]; - for (size_t i=0; i < 3; i++) { + for (size_t i = 0; i < 3; i++) { fake_light[i] = zone_light[i] + location[i] - globe->location()[i]; } - fake_light[3] = 1.0f; + fake_light[3] = 1.0f; glLightfv(GL_LIGHT1, GL_POSITION, fake_light); } } @@ -255,7 +255,7 @@ void draw_globe(const core::EntityGlobe* globe) gl::pop(); - if(globe->flag_is_set(core::Entity::Bright)) { + if (globe->flag_is_set(core::Entity::Bright)) { math::Vector3f v = globe->location() - Camera::eye(); v.normalize(); @@ -264,7 +264,7 @@ void draw_globe(const core::EntityGlobe* globe) // FIXME a corona is actually just a giant flare if (!globe->render_texture) { gl::enable(GL_TEXTURE_2D); - } + } Textures::bind("textures/fx/corona"); /* if (ext_render(globe)->distance() <= farplane) { @@ -274,23 +274,23 @@ void draw_globe(const core::EntityGlobe* globe) math::Color color(globe->color()); color.a = a - 0.1f; - + gl::color(color); - gl::enable(GL_BLEND); - + gl::enable(GL_BLEND); + gl::begin(gl::Quads); - glTexCoord2f(0,1); - gl::vertex(location+ (Camera::axis().up() - Camera::axis().left()) * radius * 4.0f); - glTexCoord2f(0,0); - gl::vertex(location+ (Camera::axis().up() + Camera::axis().left()) * radius * 4.0f); - glTexCoord2f(1,0); - gl::vertex(location+ (Camera::axis().up() * -1 + Camera::axis().left()) * radius * 4.0f); - glTexCoord2f(1,1); - gl::vertex(location+ (Camera::axis().up() * -1 - Camera::axis().left()) * radius * 4.0f); + glTexCoord2f(0, 1); + gl::vertex(location + (Camera::axis().up() - Camera::axis().left()) * radius * 4.0f); + glTexCoord2f(0, 0); + gl::vertex(location + (Camera::axis().up() + Camera::axis().left()) * radius * 4.0f); + glTexCoord2f(1, 0); + gl::vertex(location + (Camera::axis().up() * -1 + Camera::axis().left()) * radius * 4.0f); + glTexCoord2f(1, 1); + gl::vertex(location + (Camera::axis().up() * -1 - Camera::axis().left()) * radius * 4.0f); gl::end(); - + Stats::quads++; - + gl::disable(GL_BLEND); /* if (ext_render(globe)->distance() <= farplane) { @@ -316,11 +316,11 @@ void draw_globe(const core::EntityGlobe* globe) } if (globe->flag_is_set(core::Entity::Bright)) { - gl::enable(GL_LIGHTING); + gl::enable(GL_LIGHTING); } else { gl::enable(GL_LIGHT0); } - + if (globe->render_texture) { gl::disable(GL_TEXTURE_2D); } @@ -349,52 +349,52 @@ void draw_entity_cube(const core::Entity* entity) gl::color(entity->color()); gl::begin(gl::Quads); - + // top - gl::normal(0,0,1); + gl::normal(0, 0, 1); gl::vertex(v0); gl::vertex(v1); - gl::vertex(v2); + gl::vertex(v2); gl::vertex(v3); // bottom - gl::normal(0,0, -1); + gl::normal(0, 0, -1); gl::vertex(v7); gl::vertex(v6); - gl::vertex(v5); + gl::vertex(v5); gl::vertex(v4); - + // sides - gl::normal(1,0,0); + gl::normal(1, 0, 0); gl::vertex(v1); - gl::vertex(v0); - gl::vertex(v4); - gl::vertex(v5); + gl::vertex(v0); + gl::vertex(v4); + gl::vertex(v5); - gl::normal(-1,0,0); - gl::vertex(v3); - gl::vertex(v2); - gl::vertex(v6); - gl::vertex(v7); + gl::normal(-1, 0, 0); + gl::vertex(v3); + gl::vertex(v2); + gl::vertex(v6); + gl::vertex(v7); - gl::normal(0,1,0); + gl::normal(0, 1, 0); gl::vertex(v2); - gl::vertex(v1); - gl::vertex(v5); - gl::vertex(v6); + gl::vertex(v1); + gl::vertex(v5); + gl::vertex(v6); - gl::normal(0,-1,0); + gl::normal(0, -1, 0); gl::vertex(v0); - gl::vertex(v3); - gl::vertex(v7); - gl::vertex(v4); + gl::vertex(v3); + gl::vertex(v7); + gl::vertex(v4); gl::end(); } void draw_entity_diamond(const core::Entity* entity) { - float radius = entity->radius()/2; + float radius = entity->radius() / 2; /* ---- draw axis lines ---- */ gl::color(entity->color_second()); @@ -411,7 +411,7 @@ void draw_entity_diamond(const core::Entity* entity) gl::vertex(-1.25f * radius, 0, 0); gl::vertex(-2 * radius, 0, 0); - + gl::vertex(0, -1.25f * radius, 0); gl::vertex(0, -2 * radius, 0); @@ -421,7 +421,7 @@ void draw_entity_diamond(const core::Entity* entity) gl::end(); /* ---- draw rotating body lines ---- */ - float angle = (core::application()->time() + ext_render(entity)->fuzz() ) * 45.0f; + float angle = (core::application()->time() + ext_render(entity)->fuzz()) * 45.0f; angle = angle - 360.0f * floorf(angle / 360.0f); gl::rotate(angle, math::Vector3f::Zaxis()); @@ -430,19 +430,19 @@ void draw_entity_diamond(const core::Entity* entity) } gl::color(entity->color()); - gl::begin(gl::TriangleFan ); + gl::begin(gl::TriangleFan); gl::normal(0, 0 , 1); gl::vertex(0, 0, radius); - gl::normal(1, 0 ,0); + gl::normal(1, 0 , 0); gl::vertex(radius, 0.0f, 0.0f); gl::normal(0, 1, 0); gl::vertex(0.0f, radius, 0.0f); - gl::normal(-1, 0 ,0); + gl::normal(-1, 0 , 0); gl::vertex(-radius, 0.0f, 0.0f); gl::normal(0, -1, 0); gl::vertex(0.0f, -radius, 0.0f); - gl::normal(1, 0 ,0); + gl::normal(1, 0 , 0); gl::vertex(radius, 0.0f, 0.0f); gl::end(); @@ -450,20 +450,20 @@ void draw_entity_diamond(const core::Entity* entity) gl::begin(gl::TriangleFan); gl::normal(0, 0 , -1); gl::vertex(0, 0, -radius); - + gl::normal(1, 0, 0); gl::vertex(radius, 0.0f, 0.0f); gl::normal(0, -1, 0); gl::vertex(0.0f, -radius, 0.0f); - gl::normal(-1, 0 ,0); + gl::normal(-1, 0 , 0); gl::vertex(-radius, 0.0f, 0.0f); gl::normal(0, 1, 0); gl::vertex(0.0f, radius, 0.0f); - gl::normal(1, 0 ,0); + gl::normal(1, 0 , 0); gl::vertex(radius, 0.0f, 0.0f); gl::end(); @@ -478,16 +478,16 @@ void draw_entity_axis(const core::Entity* entity) gl::begin(gl::Lines); gl::color(entity->color_second()); - gl::vertex(r,0.0f,0.0f); + gl::vertex(r, 0.0f, 0.0f); gl::color(entity->color()); - gl::vertex(-r,0.0f,0.0f); + gl::vertex(-r, 0.0f, 0.0f); - gl::vertex(0.0f,r/2,0.0f); - gl::vertex(0.0f,-r/2,0.0f); + gl::vertex(0.0f, r / 2, 0.0f); + gl::vertex(0.0f, -r / 2, 0.0f); - gl::vertex(0.0f,0.0f,r); - gl::vertex(0.0f,0.0f,-r); - gl::end(); + gl::vertex(0.0f, 0.0f, r); + gl::vertex(0.0f, 0.0f, -r); + gl::end(); } void draw_pass_default() @@ -505,11 +505,11 @@ void draw_pass_default() gl::disable(GL_LIGHTING); } - switch(entity->shape()) { + switch (entity->shape()) { case core::Entity::Sphere: draw_entity_sphere(entity); break; - + case core::Entity::Diamond: draw_entity_diamond(entity); break; @@ -519,10 +519,10 @@ void draw_pass_default() break; case core::Entity::Cube: - - default: - draw_entity_cube(entity); - break; + + default: + draw_entity_cube(entity); + break; } if (entity->flag_is_set(core::Entity::Bright)) { @@ -557,7 +557,7 @@ void draw_fragment(model::Fragment *fragment, bool draw_details) } if (r_normals->value()) { - gl::begin(gl::Lines ); + gl::begin(gl::Lines); gl::color(1.0f, 0.0f, 0.0f); @@ -580,8 +580,8 @@ void draw_fragment(model::Fragment *fragment, bool draw_details) } void draw_model_fragments(model::Model *model, - const math::Color & color_primary, const math::Color & color_secondary, - const bool detail, const bool power, const float thrust) + const math::Color & color_primary, const math::Color & color_secondary, + const bool detail, const bool power, const float thrust) { // default material, lighted and geometry color const model::Material *material = 0; @@ -593,7 +593,7 @@ void draw_model_fragments(model::Model *model, // TODO this should probably be initialized somewhere else glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); + glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); for (model::Model::Groups::iterator git = model->groups().begin(); git != model->groups().end(); git++) { @@ -602,8 +602,8 @@ void draw_model_fragments(model::Model *model, if (group->transform()) { gl::push(); - - gl::translate(group->location()); + + gl::translate(group->location()); if (group->type() == model::FragmentGroup::Rotate) { float rotation_angle = math::degrees360f(core::application()->time() * group->speed()); @@ -611,57 +611,63 @@ void draw_model_fragments(model::Model *model, } else { gl::multmatrix(group->axis()); } - + const float s = group->scale(); if (s) gl::scale(s, s, s); } for (model::FragmentGroup::iterator fit = group->begin(); fit != group->end(); fit++) { - + model::Fragment *fragment = (*fit); - + if (fragment->material() != material) { material = fragment->material(); - + if (material) { if (material->flags() & model::Material::Engine) { - -/* if (use_color_array) { + + /* + if (use_color_array) { glDisableClientState(GL_COLOR_ARRAY); use_color_array = false; - }*/ - + } + */ color.assign(model->enginecolor() * thrust); - + } else if (material->flags() & model::Material::Tertiary) { -/* if (use_color_array) { + /* + if (use_color_array) { use_color_array = false; glDisableClientState(GL_COLOR_ARRAY); - }*/ - + } + */ + if ((material->flags() & model::Material::Tertiary) == model::Material::Tertiary) { for (size_t i = 0; i < 3; i++) color[i] = (color_primary[i] + color_secondary[i]) / 2; - + } else if ((material->flags() & model::Material::Secondary) == model::Material::Secondary) { color.assign(color_secondary); - - } if ((material->flags() & model::Material::Primary) == model::Material::Primary) { + + } + if ((material->flags() & model::Material::Primary) == model::Material::Primary) { color.assign(color_primary); } - + color.r *= material->color().r; color.g *= material->color().g; color.b *= material->color().b; } else { -/* if (!use_color_array) { + /* + if (!use_color_array) { glEnableClientState(GL_COLOR_ARRAY); use_color_array = true; - }*/ + } + */ color.assign(material->color()); } - + if (power && (material->flags() & model::Material::Bright)) { if (use_light) { gl::disable(GL_LIGHTING); @@ -691,7 +697,7 @@ void draw_model_fragments(model::Model *model, } if (material->flags() & model::Material::Environment) { - + if (!(material->flags() & model::Material::Texture)) { // use sky as envmap if the material defines no texture if (core::localplayer()->zone()->sky_texture()) { @@ -707,7 +713,7 @@ void draw_model_fragments(model::Model *model, if (!use_env) { // enable env mapping gl::enable(GL_TEXTURE_GEN_S); - gl::enable(GL_TEXTURE_GEN_T); + gl::enable(GL_TEXTURE_GEN_T); use_env = true; } @@ -716,7 +722,7 @@ void draw_model_fragments(model::Model *model, if (use_env) { // disable env mapping gl::disable(GL_TEXTURE_GEN_S); - gl::disable(GL_TEXTURE_GEN_T); + gl::disable(GL_TEXTURE_GEN_T); use_env = false; } } @@ -730,7 +736,6 @@ void draw_model_fragments(model::Model *model, } else { // material not found - if (use_light) { // disable lighting gl::disable(GL_LIGHTING); @@ -740,7 +745,7 @@ void draw_model_fragments(model::Model *model, if (use_env) { // disable env mapping gl::disable(GL_TEXTURE_GEN_S); - gl::disable(GL_TEXTURE_GEN_T); + gl::disable(GL_TEXTURE_GEN_T); use_env = false; } @@ -749,14 +754,16 @@ void draw_model_fragments(model::Model *model, use_texture = false; } -/* if (!use_color_array) { + /* + if (!use_color_array) { glEnableClientState(GL_COLOR_ARRAY); use_color_array = true; - }*/ + } + */ color.assign(1.0f, 0.0f, 1.0f); } } - + gl::color(color); draw_fragment(fragment, detail); } @@ -782,9 +789,11 @@ void draw_model_fragments(model::Model *model, use_texture = false; } -/* if (!use_color_array) { + /* + if (!use_color_array) { glEnableClientState(GL_COLOR_ARRAY); - }*/ + } + */ } void draw_model_fragments(core::Entity *entity) @@ -859,7 +868,7 @@ void draw_model_axis(const core::Entity *entity) const float r = entity->radius() * 1.5f; gl::begin(gl::Lines); - + gl::color(entity->color()); gl::vertex(-r, 0.0f, 0.0f); @@ -876,14 +885,14 @@ void draw_model_axis(const core::Entity *entity) gl::color(1.0f, 0.0f, 0.0f); gl::vertex(worldaxis.forward() * -1 * r); - gl::vertex(worldaxis.forward() * r); + gl::vertex(worldaxis.forward() * r); gl::vertex(worldaxis.left() * -1 * r); gl::vertex(worldaxis.left() * r); - + gl::vertex(worldaxis.up() * -1 * r); gl::vertex(worldaxis.up() * r); - + gl::end(); } @@ -929,7 +938,7 @@ void draw_pass_model_fx(float elapsed) for (core::Zone::Content::iterator it = zone->content().begin(); it != zone->content().end(); it++) { core::Entity *entity = (*it); - + power = true; if ((entity->type() == core::Entity::Controlable) || (entity->type() == core::Entity::Dynamic)) { @@ -942,17 +951,17 @@ void draw_pass_model_fx(float elapsed) if (entity->model() && ext_render(entity)->detailvisible() && power) { - // disable culling by default + // disable culling by default gl::disable(GL_CULL_FACE); model::Cull current_cull = model::CullNone; - + // default light texture size_t current_texture = Textures::bind("textures/fx/flare00"); gl::enable(GL_TEXTURE_2D); - + gl::begin(gl::Quads); - // draw model lights + // draw model lights for (model::Model::Lights::iterator lit = entity->model()->lights().begin(); lit != entity->model()->lights().end(); lit++) { model::Light *light = (*lit); @@ -992,7 +1001,7 @@ void draw_pass_model_fx(float elapsed) color.assign(light->color()); } color.a = a; - + location.assign(entity->location() + (entity->axis() * light->location())); light_size = 0.0625f * light->radius(); @@ -1005,19 +1014,19 @@ void draw_pass_model_fx(float elapsed) // draw the quad gl::color(color); - - glTexCoord2f(0,1); + + glTexCoord2f(0, 1); gl::vertex(location + (Camera::axis().up() - Camera::axis().left()) * light_size); - glTexCoord2f(0,0); + glTexCoord2f(0, 0); gl::vertex(location + (Camera::axis().up() + Camera::axis().left()) * light_size); - glTexCoord2f(1,0); + glTexCoord2f(1, 0); gl::vertex(location + (Camera::axis().up() * -1 + Camera::axis().left()) * light_size); - glTexCoord2f(1,1); + glTexCoord2f(1, 1); gl::vertex(location + (Camera::axis().up() * -1 - Camera::axis().left()) * light_size); Stats::quads++; - + } - + // draw flares for (model::Model::Flares::iterator flit = entity->model()->flares().begin(); flit != entity->model()->flares().end(); flit++) { model::Flare *flare = (*flit); @@ -1074,7 +1083,7 @@ void draw_pass_model_fx(float elapsed) gl::end(); if (current_texture != flare->texture()) { - current_texture = Textures::bind(flare->texture()); + current_texture = Textures::bind(flare->texture()); } if (current_cull != flare->cull()) { @@ -1101,14 +1110,14 @@ void draw_pass_model_fx(float elapsed) // draw the quad gl::color(color); - - glTexCoord2f(0,1); + + glTexCoord2f(0, 1); gl::vertex(location + (flare_axis.up() + flare_axis.left()) * light_size); - glTexCoord2f(0,0); + glTexCoord2f(0, 0); gl::vertex(location + (flare_axis.up() - flare_axis.left()) * light_size); - glTexCoord2f(1,0); + glTexCoord2f(1, 0); gl::vertex(location + (flare_axis.up() * -1 - flare_axis.left()) * light_size); - glTexCoord2f(1,1); + glTexCoord2f(1, 1); gl::vertex(location + (flare_axis.up() * -1 + flare_axis.left()) * light_size); Stats::quads++; @@ -1129,7 +1138,7 @@ void draw_pass_model_fx(float elapsed) if (current_cull == model::CullNone) { gl::enable(GL_CULL_FACE); } - + if (particlesystem->cull() == model::CullBack) { gl::cullface(GL_BACK); current_cull = model::CullBack; @@ -1185,26 +1194,26 @@ void draw_pass_spacegrid() gl::push(); gl::translate(Camera::target()); - gl::color(0,0, 1.0f); + gl::color(0, 0, 1.0f); gl::normal(0, 0, 1.0f); gl::begin(gl::Lines); - for (int i=-gridsize; i <= gridsize; i++) { - gl::color(0,0, 0, 0); - gl::vertex(i-dx, -gridsize-dy, z); - gl::color(0,0, (gridsize-abs(i))*s, (gridsize-abs(i))*s); - gl::vertex(i-dx, -dy, z ); - gl::vertex(i-dx, -dy ,z ); - gl::color(0,0, 0, 0); - gl::vertex(i-dx, gridsize-dy, z); - - gl::vertex(-gridsize-dx, i-dy, z ); - gl::color(0,0, (gridsize-abs(i))*s, (gridsize-abs(i))*s); - gl::vertex(-dx, i-dy, z); - gl::vertex(-dx, i-dy, z); - gl::color(0,0, 0, 0); - gl::vertex(gridsize-dx, i-dy, z); + for (int i = -gridsize; i <= gridsize; i++) { + gl::color(0, 0, 0, 0); + gl::vertex(i - dx, -gridsize - dy, z); + gl::color(0, 0, (gridsize - abs(i))*s, (gridsize - abs(i))*s); + gl::vertex(i - dx, -dy, z); + gl::vertex(i - dx, -dy , z); + gl::color(0, 0, 0, 0); + gl::vertex(i - dx, gridsize - dy, z); + + gl::vertex(-gridsize - dx, i - dy, z); + gl::color(0, 0, (gridsize - abs(i))*s, (gridsize - abs(i))*s); + gl::vertex(-dx, i - dy, z); + gl::vertex(-dx, i - dy, z); + gl::color(0, 0, 0, 0); + gl::vertex(gridsize - dx, i - dy, z); } gl::end(); @@ -1227,7 +1236,7 @@ void draw(float seconds) glPolygonMode(GL_FRONT, GL_FILL); } - // set vertex array pointers + // set vertex array pointers glVertexPointer(3, GL_FLOAT, 0, core::game()->vertexarray()->vertex()); glNormalPointer(GL_FLOAT, 0, core::game()->vertexarray()->normal()); glTexCoordPointer(3, GL_FLOAT, 0, core::game()->vertexarray()->texture()); @@ -1239,7 +1248,7 @@ void draw(float seconds) glEnableClientState(GL_NORMAL_ARRAY); // glDisableClientState(GL_COLOR_ARRAY); - gl::disable(GL_DEPTH_TEST); + gl::disable(GL_DEPTH_TEST); gl::depthmask(GL_FALSE); // disable depth buffer writing draw_pass_sky(); // draw the skysphere @@ -1259,7 +1268,7 @@ void draw(float seconds) } gl::enable(GL_LIGHTING); // enable lighting - + draw_pass_globes(); // draw globes draw_pass_default(); // draw entities without model @@ -1275,12 +1284,12 @@ void draw(float seconds) // disable resaling of normals gl::disable(GL_RESCALE_NORMAL); } - + gl::enable(GL_BLEND); gl::depthmask(GL_FALSE); // disable depth buffer writing - + draw_pass_spacegrid(); // draw the blue spacegrid - + if (!core::localplayer()->view()) { Dust::draw(zone_color); // draw spacedust } @@ -1299,10 +1308,10 @@ void draw(float seconds) gl::enable(GL_RESCALE_NORMAL); } - gl::enable(GL_LIGHTING); - + gl::enable(GL_LIGHTING); + draw_pass_model_radius(); - + gl::disable(GL_LIGHTING); if (r_normalize && r_normalize->value()) { @@ -1313,15 +1322,15 @@ void draw(float seconds) gl::disable(GL_RESCALE_NORMAL); } } - + glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); - + gl::disable(GL_COLOR_MATERIAL); // disable color tracking gl::disable(GL_CULL_FACE); // disable culling - + gl::depthmask(GL_TRUE); // enable depth buffer writing gl::disable(GL_DEPTH_TEST); // disable depth buffer testing // GL_BLEND must be enabled for the GUI @@ -1330,7 +1339,7 @@ void draw(float seconds) // draw HUD target world space geometry, like dock indicators void draw_target(core::Entity *entity) { - model::Model *model = entity->model(); + model::Model *model = entity->model(); if (!model) return; @@ -1347,13 +1356,13 @@ void draw_target(core::Entity *entity) gl::multmatrix(entity->axis()); gl::color(0, 1.0f, 1.0f, 1.0f); - + for (model::Model::Docks::iterator dit = model->docks().begin(); dit != model->docks().end(); dit++) { model::Dock *dock = (*dit); math::Vector3f maxbox(dock->location()); math::Vector3f minbox(dock->location()); - for (size_t i=0; i < 3; i++) { + for (size_t i = 0; i < 3; i++) { maxbox[i] += 0.025; minbox[i] -= 0.025; } @@ -1365,7 +1374,7 @@ void draw_target(core::Entity *entity) gl::vertex(minbox.x(), minbox.y(), maxbox.z()); gl::vertex(maxbox.x(), minbox.y(), maxbox.z()); gl::end(); - + // bottom gl::begin(gl::LineLoop); gl::vertex(maxbox.x(), maxbox.y(), minbox.z()); @@ -1373,7 +1382,7 @@ void draw_target(core::Entity *entity) gl::vertex(minbox.x(), minbox.y(), minbox.z()); gl::vertex(maxbox.x(), minbox.y(), minbox.z()); gl::end(); - + gl::begin(gl::Lines); gl::vertex(maxbox.x(), maxbox.y(), maxbox.z()); gl::vertex(maxbox.x(), maxbox.y(), minbox.z()); diff --git a/src/render/draw.h b/src/render/draw.h index 382d7cd..b13c7b0 100644 --- a/src/render/draw.h +++ b/src/render/draw.h @@ -1,7 +1,7 @@ /* render/draw.h - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_RENDER_DRAW_H__ @@ -12,7 +12,7 @@ #include "math/axis.h" #include "math/vector3f.h" -namespace render +namespace render { /// draw the world @@ -28,10 +28,11 @@ void draw_sphere(math::Color const & color, float radius); /// draw a model void draw_model_fragments(model::Model *model, - const math::Color & color_primary, const math::Color & color_secondary, - const bool detail = true, const bool power = true, const float thrust = 0.0f); + const math::Color & color_primary, const math::Color & color_secondary, + const bool detail = true, const bool power = true, const float thrust = 0.0f); -class Stats { +class Stats +{ public: static void clear(); diff --git a/src/render/dust.cc b/src/render/dust.cc index a975e5f..cb8d84d 100644 --- a/src/render/dust.cc +++ b/src/render/dust.cc @@ -68,7 +68,7 @@ void Dust::draw(math::Color const &dustcolor) dustsize = 0; return; } - + if ((size_t) r_dustsize->value() != dustsize) { con_debug << " changing dust size..." << std::endl; if (dust) { @@ -77,7 +77,7 @@ void Dust::draw(math::Color const &dustcolor) } dustsize = (size_t) r_dustsize->value(); } - + if (dustsize <= 0) { if (dust) { free(dust); @@ -96,16 +96,16 @@ void Dust::draw(math::Color const &dustcolor) if (!dust) { con_debug << " generating dust..." << std::endl; - dust = (float *) malloc(sizeof(float) * dustsize* 3); + dust = (float *) malloc(sizeof(float) * dustsize * 3); for (size_t i = 0; i < dustsize; i++) { - dust[i*3] = core::localcontrol()->location().x() + (math::randomf(2) - 1) * (DUSTDISTANCE + core::localcontrol()->radius() * 2.0f); + dust[i*3] = core::localcontrol()->location().x() + (math::randomf(2) - 1) * (DUSTDISTANCE + core::localcontrol()->radius() * 2.0f); dust[i*3+1] = core::localcontrol()->location().y() + (math::randomf(2) - 1) * (DUSTDISTANCE + core::localcontrol()->radius() * 2.0f); dust[i*3+2] = core::localcontrol()->location().z() + (math::randomf(2) - 1) * (DUSTDISTANCE + core::localcontrol()->radius() * 2.0f); } } - - + + traillength = math::max(math::max(core::localcontrol()->movement(), core::localcontrol()->speed() * 0.5f), 0.5f); traillength = traillength * TRAILLENGHT / LOWSPEEDLIMIT; @@ -113,7 +113,7 @@ void Dust::draw(math::Color const &dustcolor) alpha = math::max(core::localcontrol()->movement(), core::localcontrol()->speed() * 0.5f); math::clamp(alpha, 0.0f, 1.0f); color.a = 0.25f * alpha; - + gl::begin(gl::Lines); gl::color(color); math::Vector3f v; @@ -127,11 +127,11 @@ void Dust::draw(math::Color const &dustcolor) if (dsquare > (2.0f * core::localcontrol()->radius() + DUSTDISTANCE)*(2.0f * core::localcontrol()->radius() + DUSTDISTANCE)) { for (size_t j = 0; j < 3; j++) { - dust[i*3+j] = core::localcontrol()->location()[j] + (math::randomf(2) - 1) * (DUSTDISTANCE + core::localcontrol()->radius() * 2.0f); + dust[i*3+j] = core::localcontrol()->location()[j] + (math::randomf(2) - 1) * (DUSTDISTANCE + core::localcontrol()->radius() * 2.0f); v[j] = dust[i*3+j] - core::localcontrol()->axis().forward()[j] * traillength; } } - + glVertex3fv(&dust[i*3]); gl::vertex(v); } diff --git a/src/render/gl.cc b/src/render/gl.cc index 31c473f..355efab 100644 --- a/src/render/gl.cc +++ b/src/render/gl.cc @@ -1,13 +1,14 @@ /* render/gl.cc - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #include "render/gl.h" #include "math/matrix4f.h" -namespace gl { +namespace gl +{ using math::Vector2f; using math::Vector3f; @@ -15,31 +16,32 @@ using math::Color; std::string renderer() { - return std::string ((char *)glGetString(GL_RENDERER)); + return std::string((char *)glGetString(GL_RENDERER)); } std::string vendor() { - return std::string ((char *)glGetString(GL_VENDOR)); + return std::string((char *)glGetString(GL_VENDOR)); } std::string version() { - return std::string ((char *)glGetString(GL_VERSION)); + return std::string((char *)glGetString(GL_VERSION)); } std::string extensions() { - return std::string ((char *)glGetString(GL_EXTENSIONS)); + return std::string((char *)glGetString(GL_EXTENSIONS)); } -void begin(Primitive primitive) -{ - ::glBegin(primitive); +void begin(Primitive primitive) +{ + ::glBegin(primitive); } -void end() { - ::glEnd(); +void end() +{ + ::glEnd(); } void viewport(GLint x, GLint y, GLsizei width, GLsizei height) @@ -74,79 +76,96 @@ void blendfunc(GLenum sfactor, GLenum dfactor) } void enable(GLenum cap) -{ +{ glEnable(cap); } void disable(GLenum cap) -{ +{ glDisable(cap); } -void clear (GLbitfield mask) { +void clear(GLbitfield mask) +{ glClear(mask); } -void clearcolor(Color const & color) { +void clearcolor(Color const & color) +{ glClearColor(color.red(), color.green(), color.blue(), color.alpha()); } -void clearcolor(const float r, const float g, const float b, const float a) { - glClearColor(r,g,b, a); +void clearcolor(const float r, const float g, const float b, const float a) +{ + glClearColor(r, g, b, a); } -void rotate(const float angle, const Vector3f& vector) { - glRotatef(angle, vector[0], vector[1], vector[2]); +void rotate(const float angle, const Vector3f& vector) +{ + glRotatef(angle, vector[0], vector[1], vector[2]); } -void rotate(const float angle, const float x, const float y, const float z) { - glRotatef(angle, x, y, z); +void rotate(const float angle, const float x, const float y, const float z) +{ + glRotatef(angle, x, y, z); } -void translate(const Vector3f& vector) { - glTranslatef(vector[0], vector[1], vector[2]); +void translate(const Vector3f& vector) +{ + glTranslatef(vector[0], vector[1], vector[2]); } -void translate(const float x, const float y, const float z) { - glTranslatef(x, y, z); +void translate(const float x, const float y, const float z) +{ + glTranslatef(x, y, z); } -void scale(const Vector3f& vector) { - glScalef(vector[0], vector[1], vector[2]); +void scale(const Vector3f& vector) +{ + glScalef(vector[0], vector[1], vector[2]); } -void scale(const float x, const float y, const float z) { - glScalef(x, y, z); +void scale(const float x, const float y, const float z) +{ + glScalef(x, y, z); } -void vertex(const Vector2f& vector) { +void vertex(const Vector2f& vector) +{ glVertex2fv(vector.ptr()); } -void vertex(const float x, const float y) { +void vertex(const float x, const float y) +{ glVertex2f(x, y); } -void vertex(const Vector3f& vector) { +void vertex(const Vector3f& vector) +{ glVertex3fv(vector.ptr()); } -void vertex(const float x, const float y, const float z) { +void vertex(const float x, const float y, const float z) +{ glVertex3f(x, y, z); } -void normal(const Vector3f & vector) { +void normal(const Vector3f & vector) +{ glNormal3fv(vector.ptr()); } -void normal(const float x, const float y, const float z) { +void normal(const float x, const float y, const float z) +{ glNormal3f(x, y, z); } -void push() { +void push() +{ glPushMatrix(); } -void pop() { +void pop() +{ glPopMatrix(); } @@ -161,22 +180,26 @@ void multmatrix(const math::Axis & axis) glMultMatrixf(matrix.ptr()); } -void color(const float r, const float g, const float b, const float a) { - glColor4f(r,g,b,a); +void color(const float r, const float g, const float b, const float a) +{ + glColor4f(r, g, b, a); } -void color(Color const & color) { +void color(Color const & color) +{ glColor4fv(color.ptr()); } -void matrixmode(GLenum mode) { +void matrixmode(GLenum mode) +{ glMatrixMode(mode); } -void loadidentity() { +void loadidentity() +{ glLoadIdentity(); } -void frustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble znear, GLdouble zfar) +void frustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble znear, GLdouble zfar) { glFrustum(left, right, bottom, top, znear, zfar); } diff --git a/src/render/gl.h b/src/render/gl.h index e182117..81c19b0 100644 --- a/src/render/gl.h +++ b/src/render/gl.h @@ -1,7 +1,7 @@ /* render/gl.h - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_RENDER_GL_H__ @@ -45,160 +45,160 @@ */ namespace gl { - /// name of the hardware OpenGL renderer - std::string renderer(); - /// vender of the system OpenGL implementation - std::string vendor(); - /// version of the system OpenGL implementation - std::string version(); - /// Opengl Extensions string - std::string extensions(); - - /// enum to denote Vertex drawing modes - enum Primitive { - Points=GL_POINTS, - Lines=GL_LINES, - LineStrip=GL_LINE_STRIP, - LineLoop=GL_LINE_LOOP, - Triangles=GL_TRIANGLES, - TriangleStrip=GL_TRIANGLE_STRIP, - TriangleFan=GL_TRIANGLE_FAN, - Quads=GL_QUADS, - QuadStrip=GL_QUAD_STRIP, - Polygon=GL_POLYGON - }; - - /// glViewPort - void viewport(GLint x, GLint y, GLsizei width, GLsizei height ); - - /// set the color used to clear to buffer - void clearcolor(math::Color const &color); - void clearcolor(const float r, const float g, const float b, const float a); - - /// clear buffers to preset values - void clear (GLbitfield mask); - - /// glMatrixMode - void matrixmode(GLenum mode); - - /// glEnable - void enable(GLenum cap); - - /// glDisable - void disable(GLenum cap); - - /// glShadeModel - void shademodel(GLenum mode); - - /// glCullFace - void cullface(GLenum mode); - - /// glFrontFace - void frontface(GLenum mode); - - /// glDepthMask - void depthmask(GLenum mode); - - /// glBlendFunc - void blendfunc(GLenum sfactor, GLenum dfactor); - - /// Delimite the start of a sequence of verteces describing a primitive or group of primitives - /** @param primitive The type of drawing primitive - * @see end() - */ - void begin(Primitive primitive); - - /// delimit the end of a sequence of verteces describing a primitive or group of primitives - /** @see begin() - */ - void end(); - - /// Add the next vertex the the current drawing operation - /** From the glVertex() description: - * vertex() commands are used within begin()/end() pairs to specify point, - * line, and polygon vertices. The current color, normal, and texture - * coordinates are associated with the vertex when vertex() is called. - */ - void vertex(const math::Vector3f& vector); - - void vertex(const float x, const float y, const float z); - - void vertex(const math::Vector2f& vector); - - void vertex(const float x, const float y); - - /// glNormal - void normal(const math::Vector3f & vector); - - void normal(const float x, const float y, const float z); - - /// multiply the current matrix by a general rotation matrix - /** @param angle The angle of the rotation, in degrees [0-360] - * @param vector The rotation axes, relative to the origin (0,0,0) - */ - void rotate(const float angle, const math::Vector3f& vector); - - /// multiply the current matrix by a general rotation matrix - /** @param angle The angle of the rotation, in degrees - * @param x The x-coordinate of the rotation vector - * @param y The y-coordinate of the rotation vector - * @param z The z-coordinate of the rotation vector - */ - void rotate(const float angle, const float x, const float y, const float z); - - /// multiply the current matrix by a general translation matrix - /** @param vector The translation vector, relative to the origin (0,0,0) - */ - void translate(const math::Vector3f& vector); - - /// multiply the current matrix by a general translation matrix - /** @param x The x-coordinate of the translation vector - * @param y The y-coordinate of the translation vector - * @param z The z-coordinate of the translation vector - */ - void translate(const float x, const float y, const float z); - - /// multiply the current matrix by a general scaling matrix - /** @param vector The scale factor for all 3 axes - */ - void scale(const math::Vector3f& vector); - - /// multiply the current matrix by a general scaling matrix - /** @param x x-scaling factor - * @param y y-scaling factor - * @param z z-scaling factor - */ - void scale(const float x, const float y, const float z); - - /// multiply the current matrix with a coordinate system transformation - void multmatrix(const math::Axis & axis); - - /// multiply the current matrix with a 4x4 float matrix - void multmatrix(const math::Matrix4f & matrix); - - /// specify the drawing color for the next GL functions - /** @param color the new drawing color - */ - void color(math::Color const & color); - - /** @param r red value of the new drawing color - * @param g green value of the new drawing color - * @param b blue value of the new drawing color - * @param a alpha value of the new drawing color - */ - void color(const float r, const float g, const float b, const float a=1.0f); - - /// Push the current transformation matrix to the stack - void push(); - - /// Replace the transformation matrix with the top from the stack - void pop(); - - /// Replace the transformation matrix with the identity matrtix - void loadidentity(); - - /// Perspective matrix - void frustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble znear, GLdouble zfar); +/// name of the hardware OpenGL renderer +std::string renderer(); +/// vender of the system OpenGL implementation +std::string vendor(); +/// version of the system OpenGL implementation +std::string version(); +/// Opengl Extensions string +std::string extensions(); + +/// enum to denote Vertex drawing modes +enum Primitive { + Points = GL_POINTS, + Lines = GL_LINES, + LineStrip = GL_LINE_STRIP, + LineLoop = GL_LINE_LOOP, + Triangles = GL_TRIANGLES, + TriangleStrip = GL_TRIANGLE_STRIP, + TriangleFan = GL_TRIANGLE_FAN, + Quads = GL_QUADS, + QuadStrip = GL_QUAD_STRIP, + Polygon = GL_POLYGON +}; + +/// glViewPort +void viewport(GLint x, GLint y, GLsizei width, GLsizei height); + +/// set the color used to clear to buffer +void clearcolor(math::Color const &color); +void clearcolor(const float r, const float g, const float b, const float a); + +/// clear buffers to preset values +void clear(GLbitfield mask); + +/// glMatrixMode +void matrixmode(GLenum mode); + +/// glEnable +void enable(GLenum cap); + +/// glDisable +void disable(GLenum cap); + +/// glShadeModel +void shademodel(GLenum mode); + +/// glCullFace +void cullface(GLenum mode); + +/// glFrontFace +void frontface(GLenum mode); + +/// glDepthMask +void depthmask(GLenum mode); + +/// glBlendFunc +void blendfunc(GLenum sfactor, GLenum dfactor); + +/// Delimite the start of a sequence of verteces describing a primitive or group of primitives +/** @param primitive The type of drawing primitive + * @see end() + */ +void begin(Primitive primitive); + +/// delimit the end of a sequence of verteces describing a primitive or group of primitives +/** @see begin() + */ +void end(); + +/// Add the next vertex the the current drawing operation +/** From the glVertex() description: + * vertex() commands are used within begin()/end() pairs to specify point, + * line, and polygon vertices. The current color, normal, and texture + * coordinates are associated with the vertex when vertex() is called. + */ +void vertex(const math::Vector3f& vector); + +void vertex(const float x, const float y, const float z); + +void vertex(const math::Vector2f& vector); + +void vertex(const float x, const float y); + +/// glNormal +void normal(const math::Vector3f & vector); + +void normal(const float x, const float y, const float z); + +/// multiply the current matrix by a general rotation matrix +/** @param angle The angle of the rotation, in degrees [0-360] + * @param vector The rotation axes, relative to the origin (0,0,0) + */ +void rotate(const float angle, const math::Vector3f& vector); + +/// multiply the current matrix by a general rotation matrix +/** @param angle The angle of the rotation, in degrees + * @param x The x-coordinate of the rotation vector + * @param y The y-coordinate of the rotation vector + * @param z The z-coordinate of the rotation vector + */ +void rotate(const float angle, const float x, const float y, const float z); + +/// multiply the current matrix by a general translation matrix +/** @param vector The translation vector, relative to the origin (0,0,0) + */ +void translate(const math::Vector3f& vector); + +/// multiply the current matrix by a general translation matrix +/** @param x The x-coordinate of the translation vector + * @param y The y-coordinate of the translation vector + * @param z The z-coordinate of the translation vector + */ +void translate(const float x, const float y, const float z); + +/// multiply the current matrix by a general scaling matrix +/** @param vector The scale factor for all 3 axes + */ +void scale(const math::Vector3f& vector); + +/// multiply the current matrix by a general scaling matrix +/** @param x x-scaling factor + * @param y y-scaling factor + * @param z z-scaling factor + */ +void scale(const float x, const float y, const float z); + +/// multiply the current matrix with a coordinate system transformation +void multmatrix(const math::Axis & axis); + +/// multiply the current matrix with a 4x4 float matrix +void multmatrix(const math::Matrix4f & matrix); + +/// specify the drawing color for the next GL functions +/** @param color the new drawing color + */ +void color(math::Color const & color); + +/** @param r red value of the new drawing color + * @param g green value of the new drawing color + * @param b blue value of the new drawing color + * @param a alpha value of the new drawing color + */ +void color(const float r, const float g, const float b, const float a = 1.0f); + +/// Push the current transformation matrix to the stack +void push(); + +/// Replace the transformation matrix with the top from the stack +void pop(); + +/// Replace the transformation matrix with the identity matrtix +void loadidentity(); + +/// Perspective matrix +void frustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble znear, GLdouble zfar); } #endif // __INCLUDED_RENDER_GL_H__ diff --git a/src/render/image.cc b/src/render/image.cc index 196eec9..98898ef 100644 --- a/src/render/image.cc +++ b/src/render/image.cc @@ -1,7 +1,7 @@ /* render/image.cc - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #include <stdlib.h> @@ -9,7 +9,7 @@ #include "render/image.h" -namespace render +namespace render { Image::Image(unsigned int width, unsigned int height, unsigned int channels) @@ -34,7 +34,7 @@ void Image::clear() void Image::swap_channels() { - for (size_t y =0; y < image_height; y++) { + for (size_t y = 0; y < image_height; y++) { for (size_t x = 0; x < image_width; x++) { size_t offset = y * image_width * image_channels + x * image_channels; unsigned char tmp = image_data[offset]; @@ -52,7 +52,7 @@ void Image::pad() if ((w % 8) != 0) { image_width = w + (8 - (w % 8)); } - + if ((w % 8) != 0) { image_height = h + (8 - (h % 8)); } @@ -60,9 +60,9 @@ void Image::pad() unsigned char *image_new = (unsigned char *) malloc(size()); memset(image_new, 0, size()); - for (size_t y =0; y < h; y++) { + for (size_t y = 0; y < h; y++) { memcpy((void *)&image_new[y * image_width * image_channels], - (void *)&image_data[y * w * image_channels], (size_t) w); + (void *)&image_data[y * w * image_channels], (size_t) w); } free(image_data); @@ -72,16 +72,16 @@ void Image::pad() void Image::flip() { unsigned char line[image_width*image_channels]; - for (size_t y=0; y < image_height /2; y++) { + for (size_t y = 0; y < image_height / 2; y++) { memcpy(line, - &image_data[y*image_width*image_channels], - image_width*image_channels); + &image_data[y*image_width*image_channels], + image_width*image_channels); memcpy(&image_data[y*image_width*image_channels], - &image_data[(image_height-1-y)*image_width*image_channels], - image_width*image_channels); + &image_data[(image_height-1-y)*image_width*image_channels], + image_width*image_channels); memcpy(&image_data[(image_height-1-y)*image_width*image_channels], - line, - image_width*image_channels); + line, + image_width*image_channels); } } diff --git a/src/render/image.h b/src/render/image.h index c7add6f..244948e 100644 --- a/src/render/image.h +++ b/src/render/image.h @@ -1,7 +1,7 @@ /* render/image.h - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_RENDER_IMAGE_H__ @@ -9,34 +9,50 @@ #include <string> -namespace render { +namespace render +{ /// RGB (24bpp) or RGBA (32bpp) image data -class Image { +class Image +{ public: Image(unsigned int width, unsigned int height, unsigned int channels); ~Image(); /// pointer to the raw image data - inline unsigned char *data() { return image_data; } + inline unsigned char *data() { + return image_data; + } /// index into the raw image data - inline unsigned char *operator[](size_t index) { return &image_data[index]; } + inline unsigned char *operator[](size_t index) { + return &image_data[index]; + } /// width of the image in pixels - inline unsigned int width() const { return image_width; } + inline unsigned int width() const { + return image_width; + } /// height of the image in pixels - inline unsigned int height() const { return image_height; } + inline unsigned int height() const { + return image_height; + } /// size of the image data in bytes - inline size_t size() const { return ((size_t) image_width * (size_t) image_height * (size_t) image_channels); } + inline size_t size() const { + return ((size_t) image_width *(size_t) image_height *(size_t) image_channels); + } /// number of channels 3 (RGB) or 4 (RGBA) - inline unsigned int channels() const { return image_channels; } + inline unsigned int channels() const { + return image_channels; + } /// bits per pixel - inline unsigned int bpp() const { return (image_channels * 8); } + inline unsigned int bpp() const { + return (image_channels * 8); + } /// set image data to zero void clear(); diff --git a/src/render/jpgfile.cc b/src/render/jpgfile.cc index 5ed3ff8..890c543 100644 --- a/src/render/jpgfile.cc +++ b/src/render/jpgfile.cc @@ -23,14 +23,15 @@ http://www.zarb.org/~gc/html/libpng.html #undef HAVE_STDLIB_H #endif extern "C" { - #include "jpeglib.h" +#include "jpeglib.h" } -namespace render { +namespace render +{ Image *JPG::load(const char *filename) { - struct jpeg_decompress_struct jpeg_decompression_info; + struct jpeg_decompress_struct jpeg_decompression_info; struct jpeg_error_mgr jerr; int row_stride = 0; @@ -44,20 +45,20 @@ Image *JPG::load(const char *filename) //con_warn << "Could not open " << filename << std::endl; return 0; } - + // initialize decompression structures jpeg_decompression_info.err = jpeg_std_error(&jerr); jpeg_create_decompress(&jpeg_decompression_info); - jpeg_stdio_src(&jpeg_decompression_info, jpg_file->handle()); + jpeg_stdio_src(&jpeg_decompression_info, jpg_file->handle()); // read JPEG header jpeg_read_header(&jpeg_decompression_info, TRUE); jpeg_start_decompress(&jpeg_decompression_info); row_stride = jpeg_decompression_info.output_width * jpeg_decompression_info.output_components; - image = new Image(jpeg_decompression_info.output_width, - jpeg_decompression_info.output_height, - jpeg_decompression_info.output_components); + image = new Image(jpeg_decompression_info.output_width, + jpeg_decompression_info.output_height, + jpeg_decompression_info.output_components); // read pixel data JSAMPLE *row_pointer; @@ -65,11 +66,11 @@ Image *JPG::load(const char *filename) row_pointer = (*image)[jpeg_decompression_info.output_scanline*row_stride]; jpeg_read_scanlines(&jpeg_decompression_info, &row_pointer, 1); } - jpeg_finish_decompress(&jpeg_decompression_info); + jpeg_finish_decompress(&jpeg_decompression_info); // destroy decompression structures jpeg_destroy_decompress(&jpeg_decompression_info); - filesystem::close(jpg_file); + filesystem::close(jpg_file); con_debug << " " << filename << " " << image->width() << "x" << image->height() << "x" << image->bpp() << "bpp" << std::endl; return image; @@ -83,10 +84,10 @@ void JPG::save(const char *filename, Image & image, int jpeg_quality) JSAMPROW row_pointer[1]; int row_stride; - FILE *jpg_file = fopen(filename, "wb"); - if (!jpg_file) { - con_warn << "Could not write " << filename << std::endl; - return; + FILE *jpg_file = fopen(filename, "wb"); + if (!jpg_file) { + con_warn << "Could not write " << filename << std::endl; + return; } jpeg_compression_info.err = jpeg_std_error(&jerr); diff --git a/src/render/jpgfile.h b/src/render/jpgfile.h index 858a8a3..feb03b9 100644 --- a/src/render/jpgfile.h +++ b/src/render/jpgfile.h @@ -14,11 +14,12 @@ namespace render { /// a class for loading and saving .jpg files -class JPG { +class JPG +{ public: /// load a JPG image file from disk - /** @param filename short path to the filename to be loaded + /** @param filename short path to the filename to be loaded */ static Image *load(const char * filename); diff --git a/src/render/particles.cc b/src/render/particles.cc index 13b69a4..6ffcd35 100644 --- a/src/render/particles.cc +++ b/src/render/particles.cc @@ -12,7 +12,8 @@ #include "render/textures.h" #include "core/application.h" -namespace render { +namespace render +{ /* ---- class Particle --------------------------------------------- */ @@ -35,7 +36,7 @@ void ParticleScript::list() { std::string str; for (Registry::iterator it = particles_registry.begin(); it != particles_registry.end(); it++) { - + ParticleScript *script = (*it).second; switch (script->type()) { case Flame: @@ -59,16 +60,16 @@ void ParticleScript::list() void ParticleScript::clear() { for (Registry::iterator it = particles_registry.begin(); it != particles_registry.end(); it++) { - delete (*it).second; + delete(*it).second; (*it).second = 0; } - particles_registry.clear(); + particles_registry.clear(); } ParticleScript *ParticleScript::find(const std::string &label) { Registry::iterator it = particles_registry.find(label); - + if (it != particles_registry.end()) { return (*it).second; } else { @@ -195,7 +196,7 @@ ParticleSystem::ParticleSystem(ParticleScript *script, core::Entity *entity, mod particlesystem_radius = modelclass->radius(); else particlesystem_radius = particlesystem_script->radius(); - + color.assign(particlesystem_script->color()); } @@ -220,7 +221,7 @@ ParticleSystem::~ParticleSystem() void ParticleSystem::clear() { for (Stream::iterator it = particlesystem_stream.begin(); it != particlesystem_stream.end(); it++) { - delete (*it); + delete(*it); } particlesystem_stream.clear(); } @@ -242,7 +243,7 @@ void ParticleSystem::draw(float elapsed) // remove dead particles Stream::reverse_iterator it = particlesystem_stream.rbegin(); while ((it != particlesystem_stream.rend()) && ((*it)->time() + particlesystem_script->timeout() <= now)) { - delete (*particlesystem_stream.rbegin()); + delete(*particlesystem_stream.rbegin()); particlesystem_stream.pop_back(); it = particlesystem_stream.rbegin(); } @@ -279,13 +280,15 @@ void ParticleSystem::draw(float elapsed) /* ---- class Jet -------------------------------------------------- */ Jet::Jet(ParticleScript *script, core::Entity *entity, model::Particles *modelclass) : - ParticleSystem(script, entity, modelclass) { + ParticleSystem(script, entity, modelclass) +{ } Jet::~Jet() {} -void Jet::draw(float elapsed) { +void Jet::draw(float elapsed) +{ if (!particlesystem_script) return; @@ -299,12 +302,12 @@ void Jet::draw(float elapsed) { for (Stream::iterator it = particlesystem_stream.begin(); it != particlesystem_stream.end(); it++) { Particle *particle = (*it); - + quad[0].assign(particle->axis().up() - particle->axis().left()); quad[1].assign(particle->axis().up() + particle->axis().left()); quad[2].assign(particle->axis().up() * -1 + particle->axis().left()); quad[3].assign(particle->axis().up() * -1 - particle->axis().left()); - + float t = now - particle->time(); float f = 0; @@ -320,14 +323,14 @@ void Jet::draw(float elapsed) { float radius = particlesystem_radius * f; color.a = f * particlesystem_script->alpha(); gl::color(color); - - glTexCoord2f(0,1); + + glTexCoord2f(0, 1); gl::vertex(particle->location() + quad[0] * radius); - glTexCoord2f(0,0); + glTexCoord2f(0, 0); gl::vertex(particle->location() + quad[1] * radius); - glTexCoord2f(1,0); + glTexCoord2f(1, 0); gl::vertex(particle->location() + quad[2] * radius); - glTexCoord2f(1,1); + glTexCoord2f(1, 1); gl::vertex(particle->location() + quad[3] * radius); Stats::quads++; } @@ -338,13 +341,15 @@ void Jet::draw(float elapsed) { /* ---- class Spray ------------------------------------------------ */ Spray::Spray(ParticleScript *script, core::Entity *entity, model::Particles *modelclass) : - ParticleSystem(script, entity, modelclass) { + ParticleSystem(script, entity, modelclass) +{ } Spray::~Spray() {} -void Spray::draw(float elapsed) { +void Spray::draw(float elapsed) +{ if (!particlesystem_script) return; @@ -358,12 +363,12 @@ void Spray::draw(float elapsed) { for (Stream::iterator it = particlesystem_stream.begin(); it != particlesystem_stream.end(); it++) { Particle *particle = (*it); - + quad[0].assign(Camera::axis().up() - Camera::axis().left()); quad[1].assign(Camera::axis().up() + Camera::axis().left()); quad[2].assign(Camera::axis().up() * -1 + Camera::axis().left()); quad[3].assign(Camera::axis().up() * -1 - Camera::axis().left()); - + float t = now - particle->time(); float f = 0; @@ -379,14 +384,14 @@ void Spray::draw(float elapsed) { float radius = particlesystem_radius * f; color.a = f * particlesystem_script->alpha(); gl::color(color); - - glTexCoord2f(0,1); + + glTexCoord2f(0, 1); gl::vertex(particle->location() + quad[0] * radius); - glTexCoord2f(0,0); + glTexCoord2f(0, 0); gl::vertex(particle->location() + quad[1] * radius); - glTexCoord2f(1,0); + glTexCoord2f(1, 0); gl::vertex(particle->location() + quad[2] * radius); - glTexCoord2f(1,1); + glTexCoord2f(1, 1); gl::vertex(particle->location() + quad[3] * radius); Stats::quads++; } @@ -399,22 +404,24 @@ void Spray::draw(float elapsed) { /* ---- class Trail ------------------------------------------------ */ Trail::Trail(ParticleScript *script, core::Entity *entity, model::Particles *modelclass) : - ParticleSystem(script, entity, modelclass) { + ParticleSystem(script, entity, modelclass) +{ } Trail::~Trail() {} -void Trail::draw(float elapsed) { +void Trail::draw(float elapsed) +{ if (!particlesystem_script) return; - ParticleSystem::draw(elapsed); + ParticleSystem::draw(elapsed); if (particlesystem_stream.size()) { Textures::bind(particlesystem_texture); - + gl::begin(gl::Quads); Stream::iterator first = particlesystem_stream.begin(); @@ -434,18 +441,18 @@ void Trail::draw(float elapsed) { if (tp > 0) { color.a = 0.0f; gl::color(color); - - glTexCoord2f(1,0); + + glTexCoord2f(1, 0); gl::vertex(ejector_location); - glTexCoord2f(0,0); + glTexCoord2f(0, 0); gl::vertex(ejector_location); - + color.a = fp; gl::color(color); - - glTexCoord2f(0,1); + + glTexCoord2f(0, 1); gl::vertex((*first)->location() + (*first)->axis().left() * particlesystem_radius * fp); - glTexCoord2f(1,1); + glTexCoord2f(1, 1); gl::vertex((*first)->location() - (*first)->axis().left() * particlesystem_radius * fp); Stats::quads++; } @@ -468,17 +475,17 @@ void Trail::draw(float elapsed) { color.a = fp * particlesystem_script->alpha(); gl::color(color); - glTexCoord2f(1,0); + glTexCoord2f(1, 0); gl::vertex((*first)->location() - (*first)->axis().left() * particlesystem_radius * fp); - glTexCoord2f(0,0); + glTexCoord2f(0, 0); gl::vertex((*first)->location() + (*first)->axis().left() * particlesystem_radius * fp); color.a = f * particlesystem_script->alpha(); gl::color(color); - glTexCoord2f(0,1); + glTexCoord2f(0, 1); gl::vertex((*next)->location() + (*next)->axis().left() * particlesystem_radius * f); - glTexCoord2f(1,1); + glTexCoord2f(1, 1); gl::vertex((*next)->location() - (*next)->axis().left() * particlesystem_radius * f); Stats::quads++; @@ -496,21 +503,23 @@ void Trail::draw(float elapsed) { /* ---- class Flame ------------------------------------------------ */ Flame::Flame(ParticleScript *script, core::Entity *entity, model::Particles *modelclass) : - ParticleSystem(script, entity, modelclass) { + ParticleSystem(script, entity, modelclass) +{ } Flame::~Flame() {} -void Flame::draw(float elapsed) { +void Flame::draw(float elapsed) +{ if (!particlesystem_script) return; - ParticleSystem::draw(elapsed); + ParticleSystem::draw(elapsed); if (particlesystem_stream.size() > 1) { - + Textures::bind(particlesystem_texture); gl::begin(gl::Quads); @@ -532,61 +541,61 @@ void Flame::draw(float elapsed) { if (tp > 0) { color.a = 0; gl::color(color); - glTexCoord2f(1,0); + glTexCoord2f(1, 0); gl::vertex(ejector_location); - glTexCoord2f(0,0); + glTexCoord2f(0, 0); gl::vertex(ejector_location); color.a = fp * particlesystem_script->alpha(); gl::color(color); - glTexCoord2f(0,tp); + glTexCoord2f(0, tp); gl::vertex((*next)->location() + (*next)->axis().left() * particlesystem_radius * fp); - glTexCoord2f(1,tp); + glTexCoord2f(1, tp); gl::vertex((*next)->location() + (*next)->axis().up() * particlesystem_radius * fp); Stats::quads++; color.a = 0; gl::color(color); - glTexCoord2f(1,0); + glTexCoord2f(1, 0); gl::vertex(ejector_location); - glTexCoord2f(0,0); + glTexCoord2f(0, 0); gl::vertex(ejector_location); color.a = fp * particlesystem_script->alpha(); gl::color(color); - glTexCoord2f(0,tp); + glTexCoord2f(0, tp); gl::vertex((*next)->location() + (*next)->axis().up() * particlesystem_radius * fp); - glTexCoord2f(1,tp); + glTexCoord2f(1, tp); gl::vertex((*next)->location() - (*next)->axis().left() * particlesystem_radius * fp); Stats::quads++; color.a = 0; gl::color(color); - glTexCoord2f(1,0); + glTexCoord2f(1, 0); gl::vertex(ejector_location); - glTexCoord2f(0,0); + glTexCoord2f(0, 0); gl::vertex(ejector_location); color.a = fp * particlesystem_script->alpha(); gl::color(color); - glTexCoord2f(0,tp); + glTexCoord2f(0, tp); gl::vertex((*next)->location() + (*next)->axis().left() * particlesystem_radius * fp); - glTexCoord2f(1,tp); + glTexCoord2f(1, tp); gl::vertex((*next)->location() - (*next)->axis().up() * particlesystem_radius * fp); Stats::quads++; color.a = 0; gl::color(color); - glTexCoord2f(1,0); + glTexCoord2f(1, 0); gl::vertex(ejector_location); - glTexCoord2f(0,0); + glTexCoord2f(0, 0); gl::vertex(ejector_location); color.a = fp * particlesystem_script->alpha(); gl::color(color); - glTexCoord2f(0,tp); + glTexCoord2f(0, tp); gl::vertex((*next)->location() - (*next)->axis().up() * particlesystem_radius * fp); - glTexCoord2f(1,tp); + glTexCoord2f(1, tp); gl::vertex((*next)->location() - (*next)->axis().left() * particlesystem_radius * fp); Stats::quads++; } @@ -607,61 +616,61 @@ void Flame::draw(float elapsed) { color.a = fp * particlesystem_script->alpha(); gl::color(color); - glTexCoord2f(1,tp); + glTexCoord2f(1, tp); gl::vertex((*first)->location() + (*first)->axis().up() * particlesystem_radius * fp); - glTexCoord2f(0,tp); + glTexCoord2f(0, tp); gl::vertex((*first)->location() + (*first)->axis().left() * particlesystem_radius * fp); color.a = f * particlesystem_script->alpha(); gl::color(color); - glTexCoord2f(0,t); + glTexCoord2f(0, t); gl::vertex((*next)->location() + (*next)->axis().left() * particlesystem_radius * f); - glTexCoord2f(1,t); + glTexCoord2f(1, t); gl::vertex((*next)->location() + (*next)->axis().up() * particlesystem_radius * f); Stats::quads++; color.a = fp * particlesystem_script->alpha(); gl::color(color); - glTexCoord2f(1,tp); + glTexCoord2f(1, tp); gl::vertex((*first)->location() - (*first)->axis().left() * particlesystem_radius * fp); - glTexCoord2f(0,tp); + glTexCoord2f(0, tp); gl::vertex((*first)->location() + (*first)->axis().up() * particlesystem_radius * fp); color.a = f * particlesystem_script->alpha(); gl::color(color); - glTexCoord2f(0,t); + glTexCoord2f(0, t); gl::vertex((*next)->location() + (*next)->axis().up() * particlesystem_radius * f); - glTexCoord2f(1,t); + glTexCoord2f(1, t); gl::vertex((*next)->location() - (*next)->axis().left() * particlesystem_radius * f); Stats::quads++; color.a = fp * particlesystem_script->alpha(); gl::color(color); - glTexCoord2f(1,tp); + glTexCoord2f(1, tp); gl::vertex((*first)->location() - (*first)->axis().up() * particlesystem_radius * fp); - glTexCoord2f(0,tp); + glTexCoord2f(0, tp); gl::vertex((*first)->location() + (*first)->axis().left() * particlesystem_radius * fp); color.a = f * particlesystem_script->alpha(); gl::color(color); - glTexCoord2f(0,t); + glTexCoord2f(0, t); gl::vertex((*next)->location() + (*next)->axis().left() * particlesystem_radius * f); - glTexCoord2f(1,t); + glTexCoord2f(1, t); gl::vertex((*next)->location() - (*next)->axis().up() * particlesystem_radius * f); Stats::quads++; color.a = fp * particlesystem_script->alpha(); gl::color(color); - glTexCoord2f(1,tp); + glTexCoord2f(1, tp); gl::vertex((*first)->location() - (*first)->axis().left() * particlesystem_radius * fp); - glTexCoord2f(0,tp); + glTexCoord2f(0, tp); gl::vertex((*first)->location() - (*first)->axis().up() * particlesystem_radius * fp); color.a = f * particlesystem_script->alpha(); gl::color(color); - glTexCoord2f(0,t); + glTexCoord2f(0, t); gl::vertex((*next)->location() - (*next)->axis().up() * particlesystem_radius * f); - glTexCoord2f(1,t); + glTexCoord2f(1, t); gl::vertex((*next)->location() - (*next)->axis().left() * particlesystem_radius * f); Stats::quads++; diff --git a/src/render/particles.h b/src/render/particles.h index cf0f5eb..15e9827 100644 --- a/src/render/particles.h +++ b/src/render/particles.h @@ -15,22 +15,30 @@ #include "core/entity.h" #include "model/parts.h" -namespace render { +namespace render +{ /* ---- class Particle --------------------------------------------- */ /// one particle -class Particle { +class Particle +{ public: Particle(const math::Vector3f &location, float time); Particle(const math::Vector3f &location, const math::Axis &axis, float time); /// location of the particle, in world coordinates - inline math::Vector3f &location() { return particle_location; } + inline math::Vector3f &location() { + return particle_location; + } - inline math::Axis &axis() { return particle_axis; } + inline math::Axis &axis() { + return particle_axis; + } - inline const float time() const { return particle_time; } + inline const float time() const { + return particle_time; + } protected: math::Vector3f particle_location; @@ -42,31 +50,52 @@ protected: /* ---- class ParticleScript --------------------------------------- */ /// class to hold particle scripts -class ParticleScript { +class ParticleScript +{ public: - enum Type {Jet=0, Trail=1, Flame=2, Spray=3 }; + enum Type {Jet = 0, Trail = 1, Flame = 2, Spray = 3 }; + + inline const Type type() const { + return particles_type; + } - inline const Type type() const { return particles_type; } + inline const std::string &label() const { + return particles_label; + } - inline const std::string &label() const { return particles_label; } + inline const std::string &texture() const { + return particles_texture; + } - inline const std::string &texture() const { return particles_texture; } + inline const math::Color &color() const { + return particles_color; + } - inline const math::Color &color() const { return particles_color; } + inline float radius() const { + return particles_radius; + } - inline float radius() const { return particles_radius; } + inline float timeout() const { + return particles_timeout; + } - inline float timeout() const { return particles_timeout; } + inline float eject() const { + return particles_eject; + } - inline float eject() const { return particles_eject; } + inline float speed() const { + return particles_speed; + } - inline float speed() const { return particles_speed; } + inline float alpha() const { + return particles_alpha; + } - inline float alpha() const { return particles_alpha; } + inline float offset() const { + return particles_offset; + } - inline float offset() const { return particles_offset; } - static ParticleScript *load(const std::string &label); static void clear(); @@ -81,8 +110,8 @@ private: std::string particles_label; std::string particles_texture; Type particles_type; - math::Color particles_color; - + math::Color particles_color; + float particles_radius; float particles_timeout; float particles_eject; @@ -98,21 +127,30 @@ private: /* ---- class ParticleSystem --------------------------------------- */ /// abstract base class for a particle system attached to an entity -class ParticleSystem { +class ParticleSystem +{ public: ParticleSystem(ParticleScript *script, core::Entity *entity, model::Particles *modelclass); virtual ~ParticleSystem(); /// index of the texture to use - inline const size_t texture() const { return particlesystem_texture; } + inline const size_t texture() const { + return particlesystem_texture; + } /// location of the particle system within the entity - inline const math::Vector3f &location() const { return particlesystem_location; } + inline const math::Vector3f &location() const { + return particlesystem_location; + } /// axis of the particle system within the entity - inline const math::Axis &axis() const { return particlesystem_axis; } + inline const math::Axis &axis() const { + return particlesystem_axis; + } - inline const model::Cull cull() const { return particlesystem_cull; } + inline const model::Cull cull() const { + return particlesystem_cull; + } virtual void draw(float elapsed); @@ -125,16 +163,18 @@ public: protected: core::Entity *particlesystem_entity; - + typedef std::deque<Particle *> Stream; - inline Stream & stream() { return particlesystem_stream; } + inline Stream & stream() { + return particlesystem_stream; + } size_t particlesystem_texture; math::Axis particlesystem_axis; math::Vector3f particlesystem_location; - + float particlesystem_last_eject; ParticleScript *particlesystem_script; @@ -146,11 +186,11 @@ protected: float particlesystem_radius; float now; math::Color color; - + model::Particles *particlesystem_modelclass; model::Cull particlesystem_cull; }; - + /* ---- class Flame ------------------------------------------------ */ /// flame style particles, like engine flames @@ -159,7 +199,7 @@ class Flame : public ParticleSystem public: Flame(ParticleScript *script, core::Entity *entity, model::Particles *modelclass); virtual ~Flame(); - + virtual void draw(float elapsed); }; @@ -171,7 +211,7 @@ class Jet : public ParticleSystem public: Jet(ParticleScript *script, core::Entity *entity, model::Particles *modelclass); virtual ~Jet(); - + virtual void draw(float elapsed); }; @@ -183,7 +223,7 @@ class Spray : public ParticleSystem public: Spray(ParticleScript *script, core::Entity *entity, model::Particles *modelclass); virtual ~Spray(); - + virtual void draw(float elapsed); }; diff --git a/src/render/pngfile.cc b/src/render/pngfile.cc index d011aff..da434db 100644 --- a/src/render/pngfile.cc +++ b/src/render/pngfile.cc @@ -21,7 +21,8 @@ http://www.zarb.org/~gc/html/libpng.html #include "render/pngfile.h" #include "sys/sys.h" -namespace render { +namespace render +{ Image *PNG::load(const char *filename) { @@ -58,14 +59,14 @@ Image *PNG::load(const char *filename) } png_infop info_ptr = png_create_info_struct(png_ptr); - if (!info_ptr) { - con_warn << "Error reading " << filename << ": png_create_info_struct failed!" << std::endl; + if (!info_ptr) { + con_warn << "Error reading " << filename << ": png_create_info_struct failed!" << std::endl; filesystem::close(png_file); png_destroy_read_struct(&png_ptr, 0, 0); return 0; } - if (setjmp(png_jmpbuf(png_ptr))) { - con_warn << "Error reading " << filename << ": error during init_io!" << std::endl; + if (setjmp(png_jmpbuf(png_ptr))) { + con_warn << "Error reading " << filename << ": error during init_io!" << std::endl; filesystem::close(png_file); png_destroy_read_struct(&png_ptr, &info_ptr, 0); return 0; @@ -73,19 +74,19 @@ Image *PNG::load(const char *filename) /* read the PNG header */ png_init_io(png_ptr, png_file->handle()); - png_set_sig_bytes(png_ptr, 8); + png_set_sig_bytes(png_ptr, 8); - png_read_info(png_ptr, info_ptr); + png_read_info(png_ptr, info_ptr); - int png_width = info_ptr->width; - int png_height = info_ptr->height; - //int png_color_type = info_ptr->color_type; - int png_depth = info_ptr->bit_depth; + int png_width = info_ptr->width; + int png_height = info_ptr->height; + //int png_color_type = info_ptr->color_type; + int png_depth = info_ptr->bit_depth; - //int number_of_passes = png_set_interlace_handling(png_ptr); + //int number_of_passes = png_set_interlace_handling(png_ptr); png_set_interlace_handling(png_ptr); - png_read_update_info(png_ptr, info_ptr); - + png_read_update_info(png_ptr, info_ptr); + if (png_depth != 8) { con_warn << "Error reading " << filename << ": bits per channel must be 8!" << std::endl; filesystem::close(png_file); @@ -97,7 +98,7 @@ Image *PNG::load(const char *filename) image = new Image(png_width, png_height, channels); /* read image data */ - if (setjmp(png_jmpbuf(png_ptr))) { + if (setjmp(png_jmpbuf(png_ptr))) { con_warn << "Error reading " << filename << std::endl; filesystem::close(png_file); delete image; @@ -107,13 +108,13 @@ Image *PNG::load(const char *filename) png_bytep row_pointers[png_height]; - for (size_t i=0; i < (size_t)png_height; i++) - row_pointers[i] = (png_bytep) (*image)[i * info_ptr->rowbytes]; + for (size_t i = 0; i < (size_t)png_height; i++) + row_pointers[i] = (png_bytep)(*image)[i * info_ptr->rowbytes]; // read pixel data - png_read_image(png_ptr, row_pointers); + png_read_image(png_ptr, row_pointers); - filesystem::close(png_file); + filesystem::close(png_file); png_destroy_read_struct(&png_ptr, &info_ptr, 0); con_debug << " " << filename << " " << image->width() << "x" << image->height() << "x" << image->bpp() << "bpp" << std::endl; @@ -123,50 +124,50 @@ Image *PNG::load(const char *filename) void PNG::save(const char *filename, Image & image) { - FILE *png_file = fopen(filename, "wb"); - if (!png_file) { - con_warn << "Could not write " << filename << std::endl; - return; + FILE *png_file = fopen(filename, "wb"); + if (!png_file) { + con_warn << "Could not write " << filename << std::endl; + return; } - png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - if (!png_ptr) { + png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if (!png_ptr) { fclose(png_file); con_warn << "Error writing " << filename << ": png_create_write_struct failed!" << std::endl; return; } - png_infop info_ptr = png_create_info_struct(png_ptr); - if (!info_ptr) { + png_infop info_ptr = png_create_info_struct(png_ptr); + if (!info_ptr) { con_warn << "Error writing " << filename << ": png_create_info_struct failed!" << std::endl; fclose(png_file); png_destroy_write_struct(&png_ptr, 0); return; } - if (setjmp(png_jmpbuf(png_ptr))) { + if (setjmp(png_jmpbuf(png_ptr))) { con_warn << "Error reading " << filename << ": error during init_io!" << std::endl; fclose(png_file); png_destroy_write_struct(&png_ptr, &info_ptr); return; } - png_init_io(png_ptr, png_file); + png_init_io(png_ptr, png_file); - /* write header */ - if (setjmp(png_jmpbuf(png_ptr))) { + /* write header */ + if (setjmp(png_jmpbuf(png_ptr))) { con_warn << "Error writing " << filename << ": error writing header!" << std::endl; fclose(png_file); png_destroy_write_struct(&png_ptr, &info_ptr); return; } - png_set_IHDR(png_ptr, info_ptr, image.width(), image.height(), 8, PNG_COLOR_TYPE_RGB, - PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); + png_set_IHDR(png_ptr, info_ptr, image.width(), image.height(), 8, PNG_COLOR_TYPE_RGB, + PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); - png_write_info(png_ptr, info_ptr); + png_write_info(png_ptr, info_ptr); - /* write image data */ + /* write image data */ if (setjmp(png_jmpbuf(png_ptr))) { con_warn << "Error writing " << filename << ": error writing header!" << std::endl; fclose(png_file); @@ -176,8 +177,8 @@ void PNG::save(const char *filename, Image & image) png_bytep row_pointers[image.height()]; - for (size_t i = 0; i < image.height(); i++) - row_pointers[i] = (png_bytep) image[i * image.width() * image.channels()]; + for (size_t i = 0; i < image.height(); i++) + row_pointers[i] = (png_bytep) image[i * image.width() * image.channels()]; png_write_image(png_ptr, row_pointers); @@ -189,9 +190,9 @@ void PNG::save(const char *filename, Image & image) return; } - png_write_end(png_ptr, NULL); + png_write_end(png_ptr, NULL); - fclose(png_file); + fclose(png_file); png_destroy_write_struct(&png_ptr, &info_ptr); con_print << "Wrote " << filename << std::endl; diff --git a/src/render/pngfile.h b/src/render/pngfile.h index 4559f70..96e9ab6 100644 --- a/src/render/pngfile.h +++ b/src/render/pngfile.h @@ -14,11 +14,12 @@ namespace render { /// a class for loading and saving .png files -class PNG { +class PNG +{ public: /// load a PNG image file from disk - /** @param filename short path to the filename to be loaded + /** @param filename short path to the filename to be loaded */ static Image *load(const char * filename); diff --git a/src/render/render.cc b/src/render/render.cc index 12445a6..03c5c87 100644 --- a/src/render/render.cc +++ b/src/render/render.cc @@ -1,7 +1,7 @@ /* render/render.cc - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #include <iostream> @@ -24,7 +24,8 @@ #include "render/textures.h" #include "sys/sys.h" -namespace render { +namespace render +{ core::Cvar *r_axis = 0; core::Cvar *r_bbox = 0; @@ -53,7 +54,7 @@ void func_list_particles(std::string const &args) ParticleScript::list(); } -void init(int width, int height) +void init(int width, int height) { con_print << "^BInitializing renderer..." << std::endl; @@ -148,8 +149,8 @@ void unload() for (core::Entity::Registry::iterator it = core::Entity::registry().begin(); it != core::Entity::registry().end(); it++) { core:: Entity *entity = (*it).second; - - if (entity->type() == core::Entity::Globe) { + + if (entity->type() == core::Entity::Globe) { core::EntityGlobe *globe = static_cast<core::EntityGlobe *>(entity); if (globe->render_texture) { render::Textures::unload(globe->render_texture); @@ -179,7 +180,7 @@ void clear() if (entity->model()) entity->set_model(0); - if (entity->type() == core::Entity::Globe) { + if (entity->type() == core::Entity::Globe) { core::EntityGlobe *globe = static_cast<core::EntityGlobe *>(entity); globe->render_texture = 0; } diff --git a/src/render/render.h b/src/render/render.h index 17ba42c..4d2e9c2 100644 --- a/src/render/render.h +++ b/src/render/render.h @@ -1,7 +1,7 @@ /* render/render.h - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_RENDER_H__ @@ -19,50 +19,54 @@ #include "render/textures.h" #include "render/renderext.h" -namespace render { +namespace render +{ - /// initialize the render subsystem - void init(int width, int height); +/// initialize the render subsystem +void init(int width, int height); - /// shutdown the render subsystem - void shutdown(); +/// shutdown the render subsystem +void shutdown(); - /// reset all render data - void reset(); +/// reset all render data +void reset(); - /// load game render data - void load(); +/// load game render data +void load(); - /// unload game render data - void unload(); +/// unload game render data +void unload(); - /// resize viewport - void resize(int width, int height); +/// resize viewport +void resize(int width, int height); - /// render entity axis - extern core::Cvar *r_axis; - /// render model bounding boxes - extern core::Cvar *r_bbox; - /// render the spacegrid - extern core::Cvar *r_grid; - /// render particle systems - extern core::Cvar *r_particles; - /// render entity radius - extern core::Cvar *r_radius; - /// render sky - extern core::Cvar *r_sky; - /// render wireframe models - extern core::Cvar *r_wireframe; - /// render vertex normals - extern core::Cvar *r_normals; - /// render collision - extern core::Cvar *r_collision; - /// use hardware generated mipmaps (requires OpenGL 1.4, does not work on all cards) - extern core::Cvar *r_mipmap; - /// use GL_NORMALIZE instead of GL_RESCALE_NORMAL - extern core::Cvar *r_normalize; +/// render entity axis +extern core::Cvar *r_axis; +/// render model bounding boxes +extern core::Cvar *r_bbox; +/// render the spacegrid +extern core::Cvar *r_grid; +/// render particle systems +extern core::Cvar *r_particles; +/// render entity radius +extern core::Cvar *r_radius; +/// render sky +extern core::Cvar *r_sky; +/// render wireframe models +extern core::Cvar *r_wireframe; +/// render vertex normals +extern core::Cvar *r_normals; +/// render collision +extern core::Cvar *r_collision; +/// use hardware generated mipmaps (requires OpenGL 1.4, does not work on all cards) +extern core::Cvar *r_mipmap; +/// use GL_NORMALIZE instead of GL_RESCALE_NORMAL +extern core::Cvar *r_normalize; - inline RenderExt *ext_render(const core::Entity *entity) { return static_cast<RenderExt *>(entity->extension((size_t)core::Extension::Render)); } +inline RenderExt *ext_render(const core::Entity *entity) +{ + return static_cast<RenderExt *>(entity->extension((size_t)core::Extension::Render)); +} } diff --git a/src/render/renderext.cc b/src/render/renderext.cc index b743686..989a892 100644 --- a/src/render/renderext.cc +++ b/src/render/renderext.cc @@ -53,10 +53,10 @@ RenderExt::RenderExt(core::Entity *entity) : core::Extension(core::Extension::Re flare->set_texture(Textures::load(flarename.str())); } - for(model::Model::ParticleSystems::iterator pit = model->particles().begin(); pit != model->particles().end(); pit++) { + for (model::Model::ParticleSystems::iterator pit = model->particles().begin(); pit != model->particles().end(); pit++) { model::Particles *particlesystem = (*pit); - // load particle systems + // load particle systems ParticleScript *script = ParticleScript::load(particlesystem->script()); if (script) { if (script->type() == render::ParticleScript::Trail) { @@ -74,8 +74,8 @@ RenderExt::RenderExt(core::Entity *entity) : core::Extension(core::Extension::Re } } } - - } else if (entity->type() == core::Entity::Globe) { + + } else if (entity->type() == core::Entity::Globe) { core::EntityGlobe *globe = static_cast<core::EntityGlobe *>(entity); // load globe textures @@ -92,7 +92,7 @@ RenderExt::RenderExt(core::Entity *entity) : core::Extension(core::Extension::Re RenderExt::~RenderExt() { for (ParticleSystems::iterator it = state_particles.begin(); it != state_particles.end(); it++) { - delete (*it); + delete(*it); } state_particles.clear(); } @@ -139,7 +139,7 @@ void RenderExt::frame(float elapsed) state_visible = true; state_detailvisible = false; } - + } else { // entity out of range state_visible = false; @@ -151,7 +151,7 @@ void RenderExt::frame(float elapsed) state_behind = true; } - + } diff --git a/src/render/renderext.h b/src/render/renderext.h index 3834769..ce4b2a4 100644 --- a/src/render/renderext.h +++ b/src/render/renderext.h @@ -16,7 +16,8 @@ namespace render { /// the render extension of an entity -class RenderExt :public core::Extension { +class RenderExt : public core::Extension +{ public: RenderExt(core::Entity *entity); ~RenderExt(); @@ -25,32 +26,44 @@ public: virtual void frame(float elapsed); - inline bool visible() const { return state_visible; } + inline bool visible() const { + return state_visible; + } - inline bool detailvisible() const { return state_detailvisible; } + inline bool detailvisible() const { + return state_detailvisible; + } /** * true if the entity is behind the camera */ - inline bool behind() const { return state_behind; } + inline bool behind() const { + return state_behind; + } - inline float fuzz() const { return state_fuzz; } + inline float fuzz() const { + return state_fuzz; + } /// distance to the camera - inline float distance() const { return state_distance; } + inline float distance() const { + return state_distance; + } /// particles - inline ParticleSystems &particles() { return state_particles; } + inline ParticleSystems &particles() { + return state_particles; + } private: bool state_visible; bool state_detailvisible; bool state_behind; - + float state_fuzz; float state_distance; - ParticleSystems state_particles; + ParticleSystems state_particles; }; } // namespace render diff --git a/src/render/screenshot.cc b/src/render/screenshot.cc index dcbada4..342977a 100644 --- a/src/render/screenshot.cc +++ b/src/render/screenshot.cc @@ -1,7 +1,7 @@ /* render/screenshot.cc - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #include <iomanip> @@ -17,7 +17,8 @@ #include "render/tgafile.h" #include "render/gl.h" -namespace render { +namespace render +{ core::Cvar *Screenshot::screenshotformat = 0; core::Cvar *Screenshot::screenshotquality = 0; @@ -27,7 +28,7 @@ int Screenshot::number = 0; void Screenshot::save() { - bool available = false; + bool available = false; std::string filename; const int TYPETGA = 0; const int TYPEPNG = 1; @@ -46,7 +47,7 @@ void Screenshot::save() if ((screenshotformat->str().compare("jpg") == 0) || (screenshotformat->str().compare("jpeg") == 0)) { filetype = TYPEJPG; - if (screenshotquality->value() == 0 ) { + if (screenshotquality->value() == 0) { (*screenshotquality) = 85; } else if (screenshotquality->value() < 10) { (*screenshotquality) = 10; @@ -65,19 +66,19 @@ void Screenshot::save() (*screenshotformat) = "tga"; } - // find the first available screenshots/osirion-yyyymmdd-hhmm-xxxx.ext + // find the first available screenshots/osirion-yyyymmdd-hhmm-xxxx.ext std::stringstream filenamestr; int day, month, year, hour, min; - + sys::get_datetime(year, month, day, hour, min); - + filenamestr << filesystem::writedir() << "screenshots/osirion" << '-'; // date filenamestr << std::setfill('0') << std::setw(4) << year << std::setw(2) << month << std::setw(2) << day << '-'; - // time + // time filenamestr << std::setfill('0') << std::setw(2) << hour << std::setw(2) << min << '-'; - do { + do { std::stringstream nstr; nstr << std::setw(4) << std::setfill('0') << number; @@ -88,32 +89,32 @@ void Screenshot::save() filename.append("."); filename.append(screenshotformat->str()); - FILE *handle = fopen(filename.c_str(), "r"); - if (handle) { - fclose(handle); - } else { - available = true; - } + FILE *handle = fopen(filename.c_str(), "r"); + if (handle) { + fclose(handle); + } else { + available = true; + } number++; - } while (!available); + } while (!available); render::Image image(State::width(), State::height(), 3); - glReadPixels(0, 0, (GLsizei) State::width(), (GLsizei) State::height(), - GL_RGB, GL_UNSIGNED_BYTE, (void *) image.data()); + glReadPixels(0, 0, (GLsizei) State::width(), (GLsizei) State::height(), + GL_RGB, GL_UNSIGNED_BYTE, (void *) image.data()); image.flip(); if (filetype == TYPEPNG) { -/* if ((Camera::width() % 8 != 0 ) || (Camera::height() % 8 != 0 )) { - image.pad(); - }*/ + /* if ((Camera::width() % 8 != 0 ) || (Camera::height() % 8 != 0 )) { + image.pad(); + }*/ render::PNG::save(filename.c_str(), image); } else if (filetype == TYPEJPG) { -/* if ((Camera::width() % 8 != 0 ) || (Camera::height() % 8 != 0 )) { - image.pad(); - } -*/ + /* if ((Camera::width() % 8 != 0 ) || (Camera::height() % 8 != 0 )) { + image.pad(); + } + */ render::JPG::save(filename.c_str(), image, (int) screenshotquality->value()); } else if (filetype == TYPETGA) { render::TGA::save(filename.c_str(), image); diff --git a/src/render/screenshot.h b/src/render/screenshot.h index 8b9269a..4be57fa 100644 --- a/src/render/screenshot.h +++ b/src/render/screenshot.h @@ -1,7 +1,7 @@ /* render/screenshot.h - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_RENDER_SCREENSHOT_H__ @@ -9,9 +9,11 @@ #include "core/cvar.h" -namespace render { +namespace render +{ -class Screenshot { +class Screenshot +{ public: static void save(); @@ -19,7 +21,7 @@ public: static core::Cvar *screenshotquality; private: - static int number; + static int number; }; } // namespace render diff --git a/src/render/state.cc b/src/render/state.cc index 96c7c0a..1a345c7 100644 --- a/src/render/state.cc +++ b/src/render/state.cc @@ -1,7 +1,7 @@ /* render/state.cc - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #include <string> @@ -11,7 +11,8 @@ #include "render/gl.h" #include "render/render.h" -namespace render { +namespace render +{ int State::render_width = 0; int State::render_height = 0; @@ -23,9 +24,9 @@ void State::init(int width, int height) resize(width, height); render_has_generate_mipmaps = false; - + std::string version(gl::version()); - for (size_t i =0; i < version.size(); i++) { + for (size_t i = 0; i < version.size(); i++) { if (version[i] == '.') version[i] = ' '; } @@ -54,12 +55,12 @@ void State::resize(int width, int height) { render_width = width; render_height = height; - + render_aspect = (float) width / (float) height; - + clear(); } - + void State::clear() { // set viewport @@ -80,9 +81,9 @@ void State::clear() //gl::shademodel(GL_FLAT); // color tracking - glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); + glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); - // material settings + // material settings GLfloat specular_reflectance[] = { 0.2f, 0.2f, 0.2f, 1.0f }; glMaterialfv(GL_FRONT, GL_SPECULAR, specular_reflectance); glMateriali(GL_FRONT, GL_SHININESS, 128); // shininess 1-128 @@ -97,7 +98,7 @@ void State::clear() gl::frontface(GL_CCW); gl::disable(GL_CULL_FACE); gl::disable(GL_DEPTH_TEST); - gl::disable(GL_BLEND); + gl::disable(GL_BLEND); gl::disable(GL_TEXTURE_2D); } diff --git a/src/render/state.h b/src/render/state.h index df4d7cd..9a5a67c 100644 --- a/src/render/state.h +++ b/src/render/state.h @@ -1,16 +1,18 @@ /* render/state.h - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_RENDER_STATE_H__ #define __INCLUDED_RENDER_STATE_H__ -namespace render { +namespace render +{ -class State { +class State +{ public: static void init(int width, int height); static void shutdown(); @@ -18,10 +20,18 @@ public: static void resize(int width, int height); static void clear(); - inline static int width() { return render_width; } - inline static int height() { return render_height; } - inline static float aspect() { return render_aspect; } - inline static bool has_generate_mipmaps() { return render_has_generate_mipmaps; } + inline static int width() { + return render_width; + } + inline static int height() { + return render_height; + } + inline static float aspect() { + return render_aspect; + } + inline static bool has_generate_mipmaps() { + return render_has_generate_mipmaps; + } private: static int render_width; diff --git a/src/render/text.cc b/src/render/text.cc index f4b75c4..cd169b5 100644 --- a/src/render/text.cc +++ b/src/render/text.cc @@ -31,11 +31,11 @@ void Text::init() base_color[6] = new math::Color(1, 0, 1); base_color[7] = new math::Color(1, 1, 1); - for (size_t i=0; i< 26; i++) { + for (size_t i = 0; i < 26; i++) { core_color[i] = new math::Color(.75, .75, .75); } - // N - normal color + // N - normal color core_color[(size_t)('N'-'A')]->assign(.75, .75, .75); // D - Debug color core_color[(size_t)('D'-'A')]->assign(.5, .5, .5); @@ -51,12 +51,12 @@ void Text::init() void Text::shutdown() { - for (size_t i=0; i< 7; i++) { + for (size_t i = 0; i < 7; i++) { delete base_color[i]; base_color[i] = 0; } - for (size_t i=0; i< 26; i++) { + for (size_t i = 0; i < 26; i++) { delete core_color[i]; core_color[i] = 0; } @@ -65,20 +65,20 @@ void Text::shutdown() void Text::assign_color(const char c, const math::Color &color) { if (('A' <= c) && (c <= 'Z')) { - core_color[(size_t) (c - 'A')]->assign(color); + core_color[(size_t)(c - 'A')]->assign(color); } else if (('0' <= c) && (c <= '9')) { - base_color[(size_t) (c - '0')]->assign(color); + base_color[(size_t)(c - '0')]->assign(color); } } void Text::setcolor(const char color) { if (('A' <= color) && (color <= 'Z')) { - gl::color(*core_color[(size_t) (color - 'A')]); - } + gl::color(*core_color[(size_t)(color - 'A')]); + } else if (('0' <= color) && (color <= '9')) { - gl::color(*base_color[(size_t) (color - '0')]); + gl::color(*base_color[(size_t)(color - '0')]); } } @@ -105,16 +105,16 @@ void Text::draw(float x, float y, const char ascii) gl::begin(gl::Quads); glTexCoord2f(fcol, frow); - gl::vertex(x,y, 0); + gl::vertex(x, y, 0); glTexCoord2f(fcol + 0.0625f, frow); - gl::vertex(x+text_fontwidth,y, 0); + gl::vertex(x + text_fontwidth, y, 0); - glTexCoord2f(fcol +0.0625f, frow + 0.0625f); - gl::vertex(x+text_fontwidth,y+text_fontheight, 0); + glTexCoord2f(fcol + 0.0625f, frow + 0.0625f); + gl::vertex(x + text_fontwidth, y + text_fontheight, 0); - glTexCoord2f(fcol, frow+0.0625f); - gl::vertex(x,y+text_fontheight, 0); + glTexCoord2f(fcol, frow + 0.0625f); + gl::vertex(x, y + text_fontheight, 0); gl::end(); } @@ -127,10 +127,10 @@ void Text::draw(float x, float y, const char *text) while (*c) { if (aux::is_base_color_code(c)) { c++; - gl::color(*base_color[ (size_t)(*c - '0')]); + gl::color(*base_color[(size_t)(*c - '0')]); } else if (aux::is_core_color_code(c)) { c++; - gl::color(*core_color[ (size_t)(*c - 'A')]); + gl::color(*core_color[(size_t)(*c - 'A')]); } else { draw(x, y, *c); x += text_fontwidth; @@ -142,7 +142,7 @@ void Text::draw(float x, float y, const char *text) void Text::draw(float x, float y, std::stringstream & textstream) { char line[MAXCMDSIZE]; - while (textstream.getline(line, MAXCMDSIZE-1)) { + while (textstream.getline(line, MAXCMDSIZE - 1)) { draw(x, y, line); y += text_fontheight; } diff --git a/src/render/text.h b/src/render/text.h index 4762639..631f1cd 100644 --- a/src/render/text.h +++ b/src/render/text.h @@ -43,17 +43,21 @@ public: /// set the font static void setfont(const char *texture, float width, float height); - + /// set the color static void setcolor(const char color); /// current font width - static inline float fontwidth() { return text_fontwidth; } + static inline float fontwidth() { + return text_fontwidth; + } /// current font height - static inline float fontheight() { return text_fontheight; } + static inline float fontheight() { + return text_fontheight; + } - enum Color {Black=0, Red=1, Green=2, Yellow=3, Blue=4, Cyan=5, Magenta=6, White=7}; + enum Color {Black = 0, Red = 1, Green = 2, Yellow = 3, Blue = 4, Cyan = 5, Magenta = 6, White = 7}; static math::Color * base_color[10]; static math::Color * core_color[26]; diff --git a/src/render/textures.cc b/src/render/textures.cc index 6817aa5..25521e9 100644 --- a/src/render/textures.cc +++ b/src/render/textures.cc @@ -37,7 +37,7 @@ void Textures::init() if (registry.size()) { clear(); } else { - memset(textures,0, sizeof(textures)); + memset(textures, 0, sizeof(textures)); } // "no texture" bitmap @@ -75,7 +75,7 @@ void Textures::list() void Textures::clear() { - for (size_t i=0; i < MAXTEXTURES; i++) { + for (size_t i = 0; i < MAXTEXTURES; i++) { if (textures[i]) { glDeleteTextures(1, &textures[i]); } @@ -83,7 +83,7 @@ void Textures::clear() } registry.clear(); - memset(textures,0, sizeof(textures)); + memset(textures, 0, sizeof(textures)); } void Textures::unload(const std::string &name) @@ -160,7 +160,7 @@ size_t Textures::load(const std::string &name, const bool filter) filename.append(".tga"); image = TGA::load(filename.c_str()); } - + if (!image) { // try the jpg version filename.assign(name); @@ -180,11 +180,11 @@ size_t Textures::load(const std::string &name, const bool filter) int texture_format; int texture_internalformat; - + if (filter) { // scaling functions - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST); - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // 4 levels of mipmaps glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 4); @@ -198,10 +198,10 @@ size_t Textures::load(const std::string &name, const bool filter) glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); } else { // scaling functions - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // no mipmaps, base level only - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAX_LEVEL, 0); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0); } //glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); @@ -212,15 +212,15 @@ size_t Textures::load(const std::string &name, const bool filter) texture_format = GL_RGB; texture_internalformat = GL_RGB8; } - + if (filter && (r_mipmap->value() <= 0)) { gluBuild2DMipmaps(GL_TEXTURE_2D, - texture_internalformat, image->width(), image->height(), - texture_format, GL_UNSIGNED_BYTE, image->data()); + texture_internalformat, image->width(), image->height(), + texture_format, GL_UNSIGNED_BYTE, image->data()); } else { glTexImage2D(GL_TEXTURE_2D, 0, - texture_internalformat, image->width(), image->height(), 0, - texture_format, GL_UNSIGNED_BYTE, image->data()); + texture_internalformat, image->width(), image->height(), 0, + texture_format, GL_UNSIGNED_BYTE, image->data()); } // add to the registry @@ -260,7 +260,7 @@ size_t Textures::bind(const std::string &name, const bool filter) } else { id = load(name, filter); } - + return id; } diff --git a/src/render/tgafile.cc b/src/render/tgafile.cc index d4d5df8..db54645 100644 --- a/src/render/tgafile.cc +++ b/src/render/tgafile.cc @@ -21,7 +21,7 @@ 9 Colormapped image data Yes Yes 10 Truecolor image data No Yes 11 Monochrome image data No Yes - + TGA multi-byte integer values have LSB first */ @@ -57,7 +57,7 @@ Image *TGA::load(const char *filename) // TGA header unsigned char header[18]; - memset(header, 0, sizeof(header)); + memset(header, 0, sizeof(header)); if (!tga_file->read(header, 18)) { con_warn << "Error reading " << filename << std::endl; @@ -65,38 +65,38 @@ Image *TGA::load(const char *filename) return 0; } - // byte 0 - image ID field length + // byte 0 - image ID field length unsigned int tga_idlength = header[0]; - // byte 1 - color map type + // byte 1 - color map type unsigned int tga_colormap = header[1]; - // byte 2 - image type + // byte 2 - image type unsigned int tga_type = header[2]; - // byte 3+4 - color map first entry index + // byte 3+4 - color map first entry index //unsigned int tga_colormap_first = header[3] + (header[4] << 8 ); // byte 5+6 - color map length (in bits) - unsigned int tga_color_map_length = header[5] +(header[6] << 8 ); + unsigned int tga_color_map_length = header[5] + (header[6] << 8); // byte 7 - color map entry length unsigned int tga_colormap_entry = header[7]; // byte 8+9 - image x origin // byte 10+11 - image y origin - // byte 12+13 - image width (LSB first) + // byte 12+13 - image width (LSB first) unsigned int tga_width = header[12] + (header[13] << 8); - // byte 14+15 - image height (LSB first) + // byte 14+15 - image height (LSB first) unsigned int tga_height = header[14] + (header[15] << 8); - // byte 16 - image color depth (in bits) + // byte 16 - image color depth (in bits) unsigned int tga_depth = header[16]; - // byte 17 - image descriptor byte + // byte 17 - image descriptor byte unsigned int tga_descriptor = header[17]; - + // read the image id if there is one if (tga_idlength) tga_file->skip(tga_idlength); @@ -105,7 +105,7 @@ Image *TGA::load(const char *filename) if (tga_colormap) { if (tga_colormap > 1) con_warn << filename << ": invalid color map type!" << std::endl; - + tga_file->skip(tga_color_map_length*tga_colormap_entry); } @@ -113,92 +113,92 @@ Image *TGA::load(const char *filename) unsigned int index = 0; unsigned int channels = tga_depth / 8; - switch(tga_type) { + switch (tga_type) { - case TGA_NONE: - con_warn << "Error reading " << filename + case TGA_NONE: + con_warn << "Error reading " << filename << ": no image data!" << std::endl; - filesystem::close(tga_file); - return 0; - break; + filesystem::close(tga_file); + return 0; + break; - case TGA_TRUECOLOR: - if ((tga_depth == 24) || (tga_depth == 32)) { + case TGA_TRUECOLOR: + if ((tga_depth == 24) || (tga_depth == 32)) { - image = new Image(tga_width, tga_height, channels); + image = new Image(tga_width, tga_height, channels); - for (size_t i = 0; i < tga_width * tga_height; i++) { - tga_file->read((void *)(*image)[i*(size_t)channels], channels); - } + for (size_t i = 0; i < tga_width * tga_height; i++) { + tga_file->read((void *)(*image)[i*(size_t)channels], channels); + } - image->swap_channels(); + image->swap_channels(); - } else if (tga_depth == 16) { - - channels = 3; - image = new Image(tga_width, tga_height,channels); - - for (size_t i =0; i < tga_width * tga_height; i++) { - // unpack one pixel - unsigned char pixel_data[2]; - tga_file->read((void *)pixel_data, 2); - unsigned int unpacked = pixel_data[0] + pixel_data[1]* 0xff; - - unsigned int b = (unpacked & 0x1f) << 3; - unsigned int g = ((unpacked >> 5) & 0x1f) << 3; - unsigned int r = ((unpacked >> 10) & 0x1f) << 3; - - // store it - image->data()[i * channels] = (unsigned char) b; - image->data()[i * channels+1] = (unsigned char) g; - image->data()[i * channels+2] = (unsigned char) r; - } - } else { - con_warn << "Error reading " << filename + } else if (tga_depth == 16) { + + channels = 3; + image = new Image(tga_width, tga_height, channels); + + for (size_t i = 0; i < tga_width * tga_height; i++) { + // unpack one pixel + unsigned char pixel_data[2]; + tga_file->read((void *)pixel_data, 2); + unsigned int unpacked = pixel_data[0] + pixel_data[1] * 0xff; + + unsigned int b = (unpacked & 0x1f) << 3; + unsigned int g = ((unpacked >> 5) & 0x1f) << 3; + unsigned int r = ((unpacked >> 10) & 0x1f) << 3; + + // store it + image->data()[i * channels] = (unsigned char) b; + image->data()[i * channels+1] = (unsigned char) g; + image->data()[i * channels+2] = (unsigned char) r; + } + } else { + con_warn << "Error reading " << filename << ": unsupported image depth '" << tga_depth << "'!" << std::endl; - filesystem::close(tga_file); - return 0; - } - - break; + filesystem::close(tga_file); + return 0; + } - case TGA_TRUECOLOR_RLE: + break; - image = new Image(tga_width, tga_height, channels); + case TGA_TRUECOLOR_RLE: - while (index < tga_width * tga_height) { - unsigned char rle = 0; - unsigned char pixel_data[4]; + image = new Image(tga_width, tga_height, channels); - // read RLE packet byte - tga_file->read(&rle, 1); - - if (rle < 128) { - rle++; // rle contains the number of pixels-1 - tga_file->read((void *)(*image)[index*channels], rle*channels); - index += rle; + while (index < tga_width * tga_height) { + unsigned char rle = 0; + unsigned char pixel_data[4]; - } else { - rle -= 127; // rle contains 128 + the number of identical pixels-1 - tga_file->read(pixel_data, channels); - - while (rle > 0 ) { - memcpy((void *)(*image)[index*channels], (void *)pixel_data, channels); - index++; - rle--; + // read RLE packet byte + tga_file->read(&rle, 1); + + if (rle < 128) { + rle++; // rle contains the number of pixels-1 + tga_file->read((void *)(*image)[index*channels], rle*channels); + index += rle; + + } else { + rle -= 127; // rle contains 128 + the number of identical pixels-1 + tga_file->read(pixel_data, channels); + + while (rle > 0) { + memcpy((void *)(*image)[index*channels], (void *)pixel_data, channels); + index++; + rle--; + } } } - } - image->swap_channels(); + image->swap_channels(); + + break; - break; - - default: - con_warn << "Error reading " << filename + default: + con_warn << "Error reading " << filename << ": unsupported TGA type '" << (int) tga_type << "'!" << std::endl; - filesystem::close(tga_file); - return 0; + filesystem::close(tga_file); + return 0; } filesystem::close(tga_file); @@ -221,35 +221,35 @@ void TGA::save(const char *filename, Image & image) if (!filename) return; - std::ofstream ofs(filename, std::ios_base::out | std::ios_base::binary ); + std::ofstream ofs(filename, std::ios_base::out | std::ios_base::binary); - if (!ofs.is_open()) { - con_warn << "Could not write " << filename << std::endl; - return; - } + if (!ofs.is_open()) { + con_warn << "Could not write " << filename << std::endl; + return; + } // write TGA header unsigned char header[18]; memset(header, 0, sizeof(header)); // byte 0 - image ID field length = 0 (no image ID field present) - // byte 1 - color map type = 0 (no palette present) - // byte 2 - image type = 10 (truecolor RLE encoded) - header[2] = TGA_TRUECOLOR_RLE; - // byte 3-11 - palette data (not used) - // byte 12+13 - image width - header[12] = (image.width() & 0xff); - header[13] = ((image.width() >> 8) & 0xff); - // byte 14+15 - image height - header[14] = (image.height() & 0xff); - header[15] = ((image.height() >> 8) & 0xff); - // byte 16 - image color depth = 24 (RGB) or 32 (RGBA) - header[16] = image.channels() * 8; - // byte 17 - image descriptor byte = 0x20 (origin at bottom left) - header[17] = 0x20; + // byte 1 - color map type = 0 (no palette present) + // byte 2 - image type = 10 (truecolor RLE encoded) + header[2] = TGA_TRUECOLOR_RLE; + // byte 3-11 - palette data (not used) + // byte 12+13 - image width + header[12] = (image.width() & 0xff); + header[13] = ((image.width() >> 8) & 0xff); + // byte 14+15 - image height + header[14] = (image.height() & 0xff); + header[15] = ((image.height() >> 8) & 0xff); + // byte 16 - image color depth = 24 (RGB) or 32 (RGBA) + header[16] = image.channels() * 8; + // byte 17 - image descriptor byte = 0x20 (origin at bottom left) + header[17] = 0x20; // write header - ofs.write((char *)header, sizeof(header)); + ofs.write((char *)header, sizeof(header)); // write image data // TGA has the R and B channels switched @@ -259,16 +259,16 @@ void TGA::save(const char *filename, Image & image) bool compress = false; size_t block_length = 0; - for (int y = image.height()-1; y >= 0; y--) { + for (int y = image.height() - 1; y >= 0; y--) { for (size_t x = 0; x < image.width(); x++) { - size_t index = y*image.width()*image.channels() + x * image.channels(); + size_t index = y * image.width() * image.channels() + x * image.channels(); pixel_data[0] = *image[index+2]; pixel_data[1] = *image[index+1]; pixel_data[2] = *image[index]; if (image.channels() == 4) - pixel_data[3] = *image[index+3]; - + pixel_data[3] = *image[index+3]; + if (block_length == 0) { memcpy(block_data, pixel_data, image.channels()); block_length++; @@ -284,12 +284,12 @@ void TGA::save(const char *filename, Image & image) block_length++; } else { - // uncompressed block and pixel data is identical - if (block_length > 1 ) { - // write the uncompressed block + // uncompressed block and pixel data is identical + if (block_length > 1) { + // write the uncompressed block rle_packet = block_length - 2; ofs.write((char *)&rle_packet, 1); - ofs.write((char *)block_data, (block_length-1) * image.channels()); + ofs.write((char *)block_data, (block_length - 1) * image.channels()); block_length = 1; } memcpy(block_data, pixel_data, image.channels()); @@ -305,9 +305,9 @@ void TGA::save(const char *filename, Image & image) } else { - // compressed block and pixel data differs + // compressed block and pixel data differs if (block_length > 1) { - // write the compressed block + // write the compressed block rle_packet = block_length + 127; ofs.write((char *)&rle_packet, 1); ofs.write((char *)block_data, image.channels()); diff --git a/src/render/tgafile.h b/src/render/tgafile.h index 767a871..26a10e6 100644 --- a/src/render/tgafile.h +++ b/src/render/tgafile.h @@ -14,11 +14,12 @@ namespace render { /// a class for loading and saving .tga files -class TGA { +class TGA +{ public: /// load a TGA image file from disk - /** @param filename short path to the filename to be loaded + /** @param filename short path to the filename to be loaded */ static Image *load(const char * filename); diff --git a/src/sys/consoleinterface.cc b/src/sys/consoleinterface.cc index 438a8de..45f678d 100644 --- a/src/sys/consoleinterface.cc +++ b/src/sys/consoleinterface.cc @@ -34,20 +34,20 @@ void fallback_print(const std::string &text) bool is_color_code = false; int ansi_bold = 0; int ansi_color = 39; - + const char *c = text.c_str(); while (*c) { - + if ((*c) == '\n') { std::cout << std::endl; - + } else if ((*c) == '^') { - + is_color_code = true; ansi_bold = 0; ansi_color = 39; - - switch (*(c+1)) { + + switch (*(c + 1)) { case '0': // black ansi_color = 0; ansi_bold = 1; @@ -75,7 +75,7 @@ void fallback_print(const std::string &text) ansi_bold = 1; ansi_color = 39; break; - + case 'N': // normal ansi_bold = 0; ansi_color = 39; @@ -103,7 +103,7 @@ void fallback_print(const std::string &text) default: is_color_code = false; } - + if (is_color_code) { if (con_ansicolor) std::cout << "\033[" << ansi_bold << ";" << ansi_color << "m"; @@ -111,11 +111,11 @@ void fallback_print(const std::string &text) } else { std::cout << *c; } - + } else { std::cout << *c; } - + c++; } } @@ -126,7 +126,7 @@ int ConsoleBuffer::overflow(int c) { if (c == Traits::eof()) return Traits::not_eof(c); - + if (c == '\n') { if (ConsoleInterface::instance()) { ConsoleInterface::instance()->event_text(con_buffer); @@ -168,7 +168,7 @@ ConsoleInterface::ConsoleInterface() std::cerr << "multiple sys::ConsoleInterface instances!" << std::endl; sys::quit(2); } - + consoleinterface_rcon = false; consoleinterface_instance = this; consoleinterface_logsize = DEFAULT_LOGSIZE; @@ -203,7 +203,7 @@ void ConsoleInterface::event_text(const std::string & text) while (consoleinterface_log.size() >= consoleinterface_logsize) { consoleinterface_log.pop_front(); } - + consoleinterface_log.push_back(text); print(text); } diff --git a/src/sys/consoleinterface.h b/src/sys/consoleinterface.h index 2eae1d8..a7fde2e 100644 --- a/src/sys/consoleinterface.h +++ b/src/sys/consoleinterface.h @@ -34,15 +34,14 @@ typedef std::char_traits<char> Traits; class ConsoleBuffer : public std::basic_streambuf<char, Traits > { public: - const std::string & str() const - { + const std::string & str() const { return con_buffer; } - + protected: /// stream overflow virtual int overflow(int c = Traits::eof()); - + private: std::string con_buffer; }; @@ -56,12 +55,11 @@ class ConsoleStream : public std::basic_ostream<char, Traits > public: ConsoleStream(); ~ConsoleStream(); - - inline ConsoleBuffer & buf() - { + + inline ConsoleBuffer & buf() { return con_buffer; } - + private: ConsoleBuffer con_buffer; }; @@ -79,55 +77,51 @@ class ConsoleInterface public: /// default constructor ConsoleInterface(); - + /// default destructor virtual ~ConsoleInterface(); - + /// set maximal number of lines in the log void set_logsize(const size_t logsize); - + /// return rcon state - inline bool rcon() - { + inline bool rcon() { return consoleinterface_rcon; } - + /// enable or disable rcon void set_rcon(bool enable = true); - + typedef std::deque<std::string> Queue; - - inline Queue & rconbuf() - { + + inline Queue & rconbuf() { return consoleinterface_rconbuf; } - - inline Queue & log() - { + + inline Queue & log() { return consoleinterface_log; } - + /// a pointer to the current console instance static ConsoleInterface *instance(); - + /// incoming text event handler void event_text(const std::string & text); - + /// ncurses resize event - virtual void resize() - {}; - + virtual void resize() {}; + protected: /// print one line of text virtual void print(const std::string & text); - + private: /// console singleton static ConsoleInterface *consoleinterface_instance; - + bool consoleinterface_rcon; Queue consoleinterface_rconbuf; - + Queue consoleinterface_log; size_t consoleinterface_logsize; }; diff --git a/src/sys/sys.cc b/src/sys/sys.cc index f99d533..f4e915d 100644 --- a/src/sys/sys.cc +++ b/src/sys/sys.cc @@ -37,11 +37,11 @@ bool file_exists(const std::string &filename) #ifdef _WIN32 struct ::_stat path_stat; memset(&path_stat, 0, sizeof(struct ::_stat)); - + if (::_stat(filename.c_str(), &path_stat) != 0) { return false; } - + if (path_stat.st_mode & _S_IFDIR) { return false; } @@ -49,15 +49,15 @@ bool file_exists(const std::string &filename) #else struct stat path_stat; memset(&path_stat, 0, sizeof(path_stat)); - + if (stat(filename.c_str(), &path_stat) != 0) { return false; } - + if (path_stat.st_mode & S_IFDIR) { return false; } - + return true; #endif } @@ -68,11 +68,11 @@ bool directory_exists(const std::string &path) #ifdef _WIN32 struct ::_stat path_stat; memset(&path_stat, 0, sizeof(struct ::_stat)); - + if (::_stat(path.c_str(), &path_stat) != 0) { return false; } - + if (path_stat.st_mode & _S_IFDIR) { return true; } @@ -80,15 +80,15 @@ bool directory_exists(const std::string &path) #else struct stat path_stat; memset(&path_stat, 0, sizeof(path_stat)); - + if (stat(path.c_str(), &path_stat) != 0) { return false; } - + if (path_stat.st_mode & S_IFDIR) { return true; } - + return false; #endif } @@ -100,13 +100,13 @@ void mkdir(const std::string &path) for (size_t i = 0; i < p.size(); i++) if (p[i] == '/') p[i] = '\\'; if (p.size() && (p[p.size()-1] == '\\')) - p.erase(p.size() -1, 1); - + p.erase(p.size() - 1, 1); + if (_mkdir(p.c_str()) != 0) { con_warn << "Could not create directory '" << p << "'" << std::endl; } #else - + ::mkdir(path.c_str(), 0777); #endif } @@ -115,12 +115,12 @@ void signal(int signum, signalfunc handler) { #ifndef _WIN32 struct sigaction sa; - + sa.sa_sigaction = 0; - memset(&sa.sa_mask, 0 ,sizeof(sigset_t)); + memset(&sa.sa_mask, 0 , sizeof(sigset_t)); sa.sa_flags = 0; sa.sa_handler = handler; - + ::sigaction(signum, &sa, 0); #endif } @@ -130,7 +130,7 @@ void signal(int signum, signalfunc handler) POSIX: struct tm { - int tm_sec; // seconds + int tm_sec; // seconds int tm_min; // minutes int tm_hour; // hours int tm_mday; // day of the month @@ -140,7 +140,7 @@ POSIX: int tm_yday; // day in the year int tm_isdst; // daylight saving time }; - + WIN32: typedef struct _SYSTEMTIME { @@ -153,7 +153,7 @@ WIN32: WORD wSecond; WORD wMilliseconds; } SYSTEMTIME, *PSYSTEMTIME; - + */ unsigned long time() @@ -166,7 +166,7 @@ unsigned long time() #else SYSTEMTIME localtime; ::GetLocalTime(&localtime); - + return ((unsigned long)(localtime.wSecond + localtime.wMinute*60 + localtime.wHour*3600)); #endif } @@ -188,7 +188,7 @@ void get_datetime(int &year, int & month, int & day, int & hours, int & minutes) ::localtime_r(&epochtime, &localtime); year = localtime.tm_year + 1900; - month = localtime.tm_mon +1; + month = localtime.tm_mon + 1; day = localtime.tm_mday; hours = localtime.tm_hour; @@ -196,7 +196,7 @@ void get_datetime(int &year, int & month, int & day, int & hours, int & minutes) #else SYSTEMTIME localtime; ::GetLocalTime(&localtime); - + year = localtime.wYear; month = localtime.wMonth; day = localtime.wDay; diff --git a/src/ui/bitmap.cc b/src/ui/bitmap.cc index fcf141c..4af7714 100644 --- a/src/ui/bitmap.cc +++ b/src/ui/bitmap.cc @@ -17,7 +17,7 @@ Bitmap::Bitmap(Widget *parent, const char *texture) : Widget(parent) set_border(false); set_background(true); set_label("bitmap"); - + set_texture(texture); } diff --git a/src/ui/bitmap.h b/src/ui/bitmap.h index 9bc1776..4838ea2 100644 --- a/src/ui/bitmap.h +++ b/src/ui/bitmap.h @@ -15,29 +15,29 @@ namespace ui class Bitmap : public Widget { public: - Bitmap(Widget *parent, const char *texture=0); + Bitmap(Widget *parent, const char *texture = 0); ~Bitmap(); - + inline std::string const &texture() const { return bitmap_texture; } - + inline math::Color const &color() const { return bitmap_color; } - + void set_texture(const std::string & texture); void set_texture(const char *texture); - + void set_color(const math::Color &color); - + /// print bitmap description virtual void print(const size_t indent) const; - + protected: /// draw the bitmap as background virtual void draw_background(); - + private: std::string bitmap_texture; math::Color bitmap_color; diff --git a/src/ui/button.cc b/src/ui/button.cc index 989e9eb..85cad7e 100644 --- a/src/ui/button.cc +++ b/src/ui/button.cc @@ -59,7 +59,7 @@ void Button::draw_border() paint::color(color); } else paint::color(palette()->border()); - + paint::border(global_location(), size()); } @@ -67,17 +67,17 @@ void Button::draw() { if (!text().size()) return; - + if (has_mouse_focus()) paint::color(palette()->highlight()); else paint::color(palette()->foreground()); - + paint::label(global_location(), size(), font(), text(), alignment()); } bool Button::on_keypress(const int key, const unsigned int modifier) -{ +{ if (key == 512 + SDL_BUTTON_LEFT) { core::cmd() << button_command << std::endl; audio::play("ui/button"); diff --git a/src/ui/button.h b/src/ui/button.h index 24097ae..a0aac72 100644 --- a/src/ui/button.h +++ b/src/ui/button.h @@ -16,39 +16,39 @@ namespace ui class Button : public Label { public: - Button(Widget *parent, const char *text=0, const char *command=0); + Button(Widget *parent, const char *text = 0, const char *command = 0); ~Button(); - + /// set the command this button will execute void set_command(const std::string &command); - + /// set the command this button will execute void set_command(const char *command); - + /// the command this button executes inline const std::string & command() const { return button_command; } - + /// print button description virtual void print(const size_t indent) const; - + /// called when the mouse enters the widget virtual void on_mouseover(const math::Vector2f &cursor); - + /// called when the widget receives a key press virtual bool on_keypress(const int key, const unsigned int modifier); - + /// called when the widget receives a key release virtual bool on_keyrelease(const int key, const unsigned int modifier); - + protected: /// draw the button border virtual void draw_border(); - + /// draw the button virtual void draw(); - + private: std::string button_command; }; diff --git a/src/ui/console.cc b/src/ui/console.cc index 4fcba7d..c486c65 100644 --- a/src/ui/console.cc +++ b/src/ui/console.cc @@ -1,7 +1,7 @@ /* client/console.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 + 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 <iostream> @@ -18,7 +18,8 @@ #include "ui/console.h" #include "ui/paint.h" -namespace ui { +namespace ui +{ const float DEFAULT_CONSOLE_HEIGHT = 0.7f; const size_t DEFAULT_MAX_HISTO_LINES = 512; @@ -29,7 +30,7 @@ ConsoleBuffer Console::con_buffer; /* -- ConsoleBuffer ------------------------------------------------ */ ConsoleBuffer::ConsoleBuffer() : sys::ConsoleInterface() { - //con_print << "^BInitializing console..." << std::endl; + //con_print << "^BInitializing console..." << std::endl; } @@ -109,64 +110,64 @@ bool Console::on_keypress(const int key, const unsigned int modifier) ui::Text::reverse_iterator upit; - switch( key ) { - - case SDLK_ESCAPE: - if (visible()) { - hide(); + switch (key) { + + case SDLK_ESCAPE: + if (visible()) { + hide(); + return true; + } else { + return false; + } + break; + /* + case SDLK_TAB: + core::CommandBuffer::complete( (*history_pos), input_pos); + return true; + break; + */ + case SDLK_RETURN: + if (console_input->text().size()) { + // store input in history + while (history.size() >= DEFAULT_MAX_HISTO_LINES) { + history.pop_front(); + } + core::cmd() << console_input->text() << std::endl; + con_print << "^B>" << console_input->text() << std::endl; + (*history.rbegin()).assign(console_input->text()); + history.push_back(""); + history_pos = history.rbegin(); + console_input->set_text((*history_pos)); + } return true; - } else { - return false; - } - break; -/* - case SDLK_TAB: - core::CommandBuffer::complete( (*history_pos), input_pos); - return true; - break; -*/ - case SDLK_RETURN: - if (console_input->text().size()) { - // store input in history - while (history.size() >= DEFAULT_MAX_HISTO_LINES) { - history.pop_front(); + break; + + case SDLK_UP: + upit = history_pos; + ++upit; + if (upit != history.rend()) { + history_pos = upit; + console_input->set_text((*history_pos)); } - core::cmd() << console_input->text() << std::endl; - con_print << "^B>" << console_input->text() << std::endl; - (*history.rbegin()).assign(console_input->text()); - history.push_back(""); - history_pos = history.rbegin(); - console_input->set_text((*history_pos)); - } - return true; - break; - - case SDLK_UP: - upit = history_pos; - ++upit; - if (upit != history.rend()) { - history_pos = upit; - console_input->set_text((*history_pos)); - } - return true; - break; - case SDLK_DOWN: - if (history_pos != history.rbegin()) { - --history_pos; - console_input->set_text((*history_pos)); - } - return true; - break; - case 512 + SDL_BUTTON_WHEELUP: - case SDLK_PAGEUP: - console_scrollpane->inc_scroll(scroll_offset); - return true; - break; - case 512 + SDL_BUTTON_WHEELDOWN: - case SDLK_PAGEDOWN: - console_scrollpane->dec_scroll(scroll_offset); - return true; - break; + return true; + break; + case SDLK_DOWN: + if (history_pos != history.rbegin()) { + --history_pos; + console_input->set_text((*history_pos)); + } + return true; + break; + case 512 + SDL_BUTTON_WHEELUP: + case SDLK_PAGEUP: + console_scrollpane->inc_scroll(scroll_offset); + return true; + break; + case 512 + SDL_BUTTON_WHEELDOWN: + case SDLK_PAGEDOWN: + console_scrollpane->dec_scroll(scroll_offset); + return true; + break; } return false; @@ -186,8 +187,8 @@ void Console::draw() console_scrollpane->set_location(4, 4); console_scrollpane->set_size(s.width(), s.height() - font()->height()); - - console_input->set_location(4, height() - font()->height() -4); + + console_input->set_location(4, height() - font()->height() - 4); console_input->set_size(s.width(), font()->height()); math::Color fancy(palette()->fancy()); @@ -196,8 +197,8 @@ void Console::draw() std::string version(core::name() + ' ' + core::version()); s.assign(version.size() * font()->width(), font()->height()); math::Vector2f l(global_location()); - l[0] += width() - s.width() -4; - l[1] += height() - s.height() -4; + l[0] += width() - s.width() - 4; + l[1] += height() - s.height() - 4; paint::text(l, s, font(), version); } @@ -238,7 +239,7 @@ void Console::load_history() history.clear(); char line[MAXCMDSIZE]; - while (ifs.getline(line, MAXCMDSIZE-1)) { + while (ifs.getline(line, MAXCMDSIZE - 1)) { history.push_back(line); } diff --git a/src/ui/console.h b/src/ui/console.h index 2cec72e..1baa42d 100644 --- a/src/ui/console.h +++ b/src/ui/console.h @@ -1,7 +1,7 @@ /* ui/console.h - This file is part of the Osirion project and is distributed under - the terms of the GNU General Public License version 2 + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_UI_CONSOLE_H__ @@ -12,14 +12,16 @@ #include "ui/scrollpane.h" #include "ui/window.h" -namespace ui { +namespace ui +{ /* -- class ConsoleBuffer ------------------------------------------ */ /// client console buffer /** stores incoming console messages */ -class ConsoleBuffer : public sys::ConsoleInterface { +class ConsoleBuffer : public sys::ConsoleInterface +{ public: ConsoleBuffer(); virtual ~ConsoleBuffer(); @@ -28,7 +30,8 @@ public: /* -- class Console ------------------------------------------------ */ /// client system console widget -class Console : public Window { +class Console : public Window +{ public: Console(Widget *parent); virtual ~Console(); diff --git a/src/ui/container.cc b/src/ui/container.cc index 6705c62..04e1ec2 100644 --- a/src/ui/container.cc +++ b/src/ui/container.cc @@ -45,7 +45,7 @@ void Container::resize() void Container::draw_border() { - if(focus()) { + if (focus()) { paint::color(palette()->foreground()); } else { paint::color(palette()->border()); diff --git a/src/ui/container.h b/src/ui/container.h index 2045772..08ed443 100644 --- a/src/ui/container.h +++ b/src/ui/container.h @@ -11,10 +11,12 @@ #include "ui/window.h" -namespace ui { +namespace ui +{ /// a widget containing childs of equal size -class Container : public Window { +class Container : public Window +{ public: Container(Widget *parent); ~Container(); diff --git a/src/ui/definitions.h b/src/ui/definitions.h index e04082f..02698f4 100644 --- a/src/ui/definitions.h +++ b/src/ui/definitions.h @@ -18,11 +18,11 @@ enum Alignment { AlignLeft = 0x0001, AlignHCenter = 0x0002, AlignRight = 0x0004, - + AlignTop = 0x0010, AlignVCenter = 0x0020, AlignBottom = 0x0040, - + AlignCenter = AlignHCenter | AlignVCenter }; diff --git a/src/ui/font.h b/src/ui/font.h index 4fb6310..b91120e 100644 --- a/src/ui/font.h +++ b/src/ui/font.h @@ -18,39 +18,39 @@ class Font public: Font(const char *name, const float width, const float height); ~Font(); - + inline const std::string & name() const { return font_name; } - + inline const math::Vector2f & size() const { return font_size; } - + inline float width() const { return font_size.width(); } - + inline float height() const { return font_size.height(); } - + void set_size(const float width, const float height); - + void set_size(const math::Vector2f &size); - + void set_width(const float width); - + void set_height(const float height); - + void set_name(const char *name); - + void set_name(const std::string & name); - + private: std::string font_name; - + math::Vector2f font_size; }; diff --git a/src/ui/iconbutton.cc b/src/ui/iconbutton.cc index 2c4661e..ffdafe0 100644 --- a/src/ui/iconbutton.cc +++ b/src/ui/iconbutton.cc @@ -77,7 +77,7 @@ void IconButton::draw() { if (!icon().size()) return; - + if (disabled()) { paint::color(palette()->disabled()); } else if (has_mouse_focus()) { @@ -85,7 +85,7 @@ void IconButton::draw() } else { paint::color(palette()->foreground()); } - + paint::bitmap(location(), size(), icon()); } @@ -104,7 +104,7 @@ void IconButton::draw_border() } bool IconButton::on_keypress(const int key, const unsigned int modifier) -{ +{ if (key == 512 + SDL_BUTTON_LEFT) { if (enabled() && iconbutton_command.size()) { core::cmd() << iconbutton_command << std::endl; diff --git a/src/ui/iconbutton.h b/src/ui/iconbutton.h index 10b073f..37d1c7b 100644 --- a/src/ui/iconbutton.h +++ b/src/ui/iconbutton.h @@ -15,9 +15,9 @@ namespace ui class IconButton : public Widget { public: - IconButton(Widget *parent, const char *icon=0, const char *command=0); + IconButton(Widget *parent, const char *icon = 0, const char *command = 0); ~IconButton(); - + /// the command this button executes inline const std::string & command() const { return iconbutton_command; @@ -39,17 +39,17 @@ public: } /// enable or disable the button - void enable(bool enabled=true); + void enable(bool enabled = true); /// enable or disable the button - void disable(bool disabled=true); - + void disable(bool disabled = true); + /// set the command this button will execute void set_command(const std::string &command); - + /// set the command this button will execute void set_command(const char *command); - + /// set the icon texture void set_icon(const std::string & icon); @@ -58,23 +58,23 @@ public: /// print button description virtual void print(const size_t indent) const; - + /// called when the mouse enters the widget virtual void on_mouseover(const math::Vector2f &cursor); - + /// called when the widget receives a key press virtual bool on_keypress(const int key, const unsigned int modifier); - + /// called when the widget receives a key release virtual bool on_keyrelease(const int key, const unsigned int modifier); - + protected: /// draw the button border virtual void draw_border(); /// draw the button virtual void draw(); - + private: std::string iconbutton_command; std::string iconbutton_icon; diff --git a/src/ui/inputbox.cc b/src/ui/inputbox.cc index 07a0a7e..6f493e2 100644 --- a/src/ui/inputbox.cc +++ b/src/ui/inputbox.cc @@ -18,7 +18,7 @@ InputBox::InputBox(Widget *parent) : Widget(parent) input_text.clear(); input_pos = 0; input_max = 512; - + set_label("input"); set_background(false); set_border(false); @@ -72,7 +72,7 @@ void InputBox::draw() size_t prompt_width = aux::text_length(input_prompt); math::Vector2f v(global_location()); paint::color(palette()->text()); - + // draw the prompt if (prompt_width) { paint::text(v, size(), font(), input_prompt); @@ -84,7 +84,7 @@ void InputBox::draw() std::string firstpart(input_text.substr(0, input_pos)); size_t draw_width = 0; const char *c = firstpart.c_str(); - + while (*c) { if (aux::is_color_code(c)) { c++; @@ -93,7 +93,7 @@ void InputBox::draw() } c++; } - + c = firstpart.c_str(); while (*c && draw_width > text_width - prompt_width - 1) { if (aux::is_color_code(c)) { @@ -104,15 +104,15 @@ void InputBox::draw() } c++; } - + if (*c) { paint::text(v, size(), font(), std::string(c)); } - + // draw the part behind the cursor v[0] += draw_width * font()->width(); if (input_pos < input_text.size()) { - if (input_pos > 1 && aux::is_color_code(input_text.c_str() + input_pos -1)) { + if (input_pos > 1 && aux::is_color_code(input_text.c_str() + input_pos - 1)) { paint::color_code(input_text[input_pos]); } // limit to width @@ -130,7 +130,7 @@ void InputBox::draw() paint::text(v, size(), font(), secondpart); } - + // draw the cursor if (has_input_focus() && (core::application()->time() - ::floorf(core::application()->time())) < 0.5f) { std::string cursor("^B"); @@ -150,46 +150,46 @@ bool InputBox::on_keypress(const int key, const unsigned int modifier) core::CommandBuffer::complete(input_text, input_pos); return true; break; - + case SDLK_HOME: input_pos = 0; return true; break; - + case SDLK_END: input_pos = input_text.size(); return true; break; - + case SDLK_LEFT: if (input_pos > 0) input_pos--; return true; break; - + case SDLK_RIGHT: if (input_pos < input_text.size()) input_pos++; return true; break; - + case SDLK_DELETE: if (input_text.size() && input_pos < input_text.size()) { input_text.erase(input_pos, 1); } return true; break; - + case SDLK_BACKSPACE: if (input_text.size() && input_pos) { - input_text.erase(input_pos-1, 1); + input_text.erase(input_pos - 1, 1); input_pos--; } return true; break; - + default: - if ((key >= 32) && (key <175)) { + if ((key >= 32) && (key < 175)) { if (input_text.size() < input_max) { // TODO bell sound if (input_pos == input_text.size()) @@ -202,7 +202,7 @@ bool InputBox::on_keypress(const int key, const unsigned int modifier) } break; } - + return false; } bool InputBox::on_keyrelease(const int key, const unsigned int modifier) diff --git a/src/ui/inputbox.h b/src/ui/inputbox.h index 961bbcf..d3e9d2c 100644 --- a/src/ui/inputbox.h +++ b/src/ui/inputbox.h @@ -18,10 +18,10 @@ class InputBox : public Widget public: InputBox(Widget *parent); ~InputBox(); - + /// set the text displayed by the label void set_text(const std::string &text); - + /// set the text displayed by the label void set_text(const char *text); @@ -33,25 +33,25 @@ public: /// set the maximal input width void set_max(const size_t max); - + /// return the text displayed by the label inline std::string const &text() const { return input_text; } - + /// clear the text void clear(); - + protected: /// draw the widget virtual void draw(); - + /// called when the widget receives a key press virtual bool on_keypress(const int key, const unsigned int modifier); - + /// called when the widget receives a key release virtual bool on_keyrelease(const int key, const unsigned int modifier); - + private: std::string input_text; diff --git a/src/ui/label.cc b/src/ui/label.cc index cf9b473..3284d0e 100644 --- a/src/ui/label.cc +++ b/src/ui/label.cc @@ -52,7 +52,7 @@ void Label::draw() { if (!label_text.size()) return; - + paint::color(palette()->foreground()); paint::label(global_location(), size(), font(), text(), alignment()); } diff --git a/src/ui/label.h b/src/ui/label.h index beecfb4..9188dc5 100644 --- a/src/ui/label.h +++ b/src/ui/label.h @@ -17,35 +17,35 @@ namespace ui class Label : public Widget { public: - Label(Widget *parent, const char *text=0); + Label(Widget *parent, const char *text = 0); ~Label(); - + /// set the text displayed by the label void set_text(const std::string &text); - + /// set the text displayed by the label void set_text(const char *text); - + /// set the text alignment void set_alignment(const unsigned int alignment); - + /// return the text displayed by the label inline const std::string &text() const { return label_text; } - + /// text alignment inline unsigned int alignment() const { return label_alignment; } - + /// print label description virtual void print(const size_t indent) const; - + protected: /// draw the label virtual void draw(); - + private: std::string label_text; unsigned int label_alignment; diff --git a/src/ui/menu.cc b/src/ui/menu.cc index 716f5b4..c4dc214 100644 --- a/src/ui/menu.cc +++ b/src/ui/menu.cc @@ -18,7 +18,7 @@ Menu::Menu(Window *parent, const char *label) : Window(parent) set_label(label); set_border(false); set_background(false); - + menu_background = new Bitmap(this); menu_container = new Container(this); @@ -63,17 +63,17 @@ void Menu::resize() bool Menu::on_keypress(const int key, const unsigned int modifier) { - switch( key ) { - - case SDLK_ESCAPE: - if (visible()) { - this->hide(); - return true; - } - break; - - default: - break; + switch (key) { + + case SDLK_ESCAPE: + if (visible()) { + this->hide(); + return true; + } + break; + + default: + break; } return Window::on_keypress(key, modifier); diff --git a/src/ui/menu.h b/src/ui/menu.h index c907d76..7fd211c 100644 --- a/src/ui/menu.h +++ b/src/ui/menu.h @@ -24,18 +24,18 @@ public: /// create a new menu Menu(Window *parent, const char * label = 0); ~Menu(); - + /// set the background bitmap void set_background_texture(const char *texture); /// set the background bitmap void set_background_texture(const std::string &texture); - + /// add a label - Label *add_label(char const * text=0); - + Label *add_label(char const * text = 0); + /// add a button with a command - Button *add_button(char const *text=0, char const *command=0); + Button *add_button(char const *text = 0, char const *command = 0); protected: /// resize event @@ -43,10 +43,10 @@ protected: /// keypress event virtual bool on_keypress(const int key, const unsigned int modifier); - + private: Bitmap *menu_background; - Container *menu_container; + Container *menu_container; }; } diff --git a/src/ui/modelview.cc b/src/ui/modelview.cc index b913060..f247e5b 100755 --- a/src/ui/modelview.cc +++ b/src/ui/modelview.cc @@ -20,7 +20,7 @@ ModelView::ModelView(Widget *parent, const char *modelname) : Widget(parent) set_border(false); set_background(false); set_label("modelview"); - + set_modelname(modelname); modelview_zoom = 1.0f; @@ -60,7 +60,7 @@ void ModelView::set_zoom(const float zoom) } bool ModelView::on_keypress(const int key, const unsigned int modifier) -{ +{ if (key == 512 + SDL_BUTTON_WHEELUP) { modelview_zoom -= 0.1f; if (modelview_zoom < 1.0f) @@ -84,7 +84,7 @@ void ModelView::draw() paint::color(1.0f, 1.0f, 1.0f); model::Model *model = model::Model::find(modelview_modelname); - if (!model) { + if (!model) { paint::bitmap(global_location(), size(), "bitmap/notex"); return; } @@ -118,7 +118,7 @@ void ModelView::draw() gl::disable(GL_LIGHTING); gl::disable(GL_COLOR_MATERIAL); // disable color tracking gl::disable(GL_CULL_FACE); // disable culling - + gl::depthmask(GL_TRUE); // enable depth buffer writing gl::disable(GL_DEPTH_TEST); // disable depth buffer testing @@ -131,7 +131,7 @@ void ModelView::draw() void ModelView::draw_border() { paint::color(palette()->foreground()); - paint::border(global_location(), size()); + paint::border(global_location(), size()); } } diff --git a/src/ui/modelview.h b/src/ui/modelview.h index c9855db..54799f3 100755 --- a/src/ui/modelview.h +++ b/src/ui/modelview.h @@ -15,22 +15,22 @@ namespace ui class ModelView : public Widget { public: - ModelView(Widget *parent, const char *modelname=0); + ModelView(Widget *parent, const char *modelname = 0); ~ModelView(); - + inline std::string const &modelname() const { return modelview_modelname; } - + inline math::Color const &color() const { return modelview_color; } - + void set_modelname(const std::string & modelname); void set_modelname(const char *modelname); - + void set_color(const math::Color &color); - + /// print modelview description virtual void print(const size_t indent) const; @@ -41,7 +41,7 @@ public: * 1.0 is not zoomed out, 10.0 is zoomed out by a factor of 10 */ void set_zoom(const float zoom); - + protected: /// draw the widget virtual void draw(); diff --git a/src/ui/paint.cc b/src/ui/paint.cc index 576484e..b3d6197 100644 --- a/src/ui/paint.cc +++ b/src/ui/paint.cc @@ -15,7 +15,8 @@ namespace ui { // contains the interface between the user interface and the render library -namespace paint { +namespace paint +{ void assign_color(const char c, const math::Color &color) { @@ -40,7 +41,7 @@ void color_code(const char c) void border(const math::Vector2f &location, const math::Vector2f &size) { using namespace gl; - + begin(LineLoop); vertex(location.x(), location.y()); vertex(location.x() + size.width(), location.y()); @@ -52,7 +53,7 @@ void border(const math::Vector2f &location, const math::Vector2f &size) void rectangle(const math::Vector2f &location, const math::Vector2f &size) { using namespace gl; - + begin(Quads); vertex(location.x(), location.y()); vertex(location.x() + size.width(), location.y()); @@ -66,9 +67,9 @@ void bitmap(const math::Vector2f &location, const math::Vector2f &size, std::str { render::Textures::bind("bitmaps/" + texture); gl::enable(GL_TEXTURE_2D); - + gl::begin(gl::Quads); - + glTexCoord2f(0.0f, 0.0f); gl::vertex(location.x(), location.y()); @@ -82,7 +83,7 @@ void bitmap(const math::Vector2f &location, const math::Vector2f &size, std::str gl::vertex(location.x(), location.y() + size.height()); gl::end(); - + gl::disable(GL_TEXTURE_2D); } @@ -92,25 +93,25 @@ void label(const math::Vector2f &location, const math::Vector2f &size, const Fon unsigned int align_horizontal = (align & 0x000F); if (!align_horizontal) align_horizontal = AlignLeft; - + unsigned int align_vertical = (align & 0x00F0); if (!align_vertical) align_vertical = AlignTop; - + // apply text font render::Text::setfont(font->name().c_str(), font->width(), font->height()); - + // enable OpenGL textures gl::enable(GL_TEXTURE_2D); - + // determine the width and height of the text // FIXME support multiline text float text_height = 1.0f * font->height(); float text_width = (float) aux::text_strip(text).size() * font->width(); - + // calculate drawing position math::Vector2f v(location); - + switch (align_horizontal) { case AlignLeft: v[0] += font->width(); @@ -122,36 +123,36 @@ void label(const math::Vector2f &location, const math::Vector2f &size, const Fon v[0] += size.width() - text_width - font->width(); break; } - + switch (align_vertical) { case AlignTop: - v[1] += font->height()*0.5f; + v[1] += font->height() * 0.5f; break; case AlignVCenter: v[1] += (size.height() - text_height) / 2.0f; break; case AlignBottom: - v[1] += size.height() - text_height - font->height()*0.5f; + v[1] += size.height() - text_height - font->height() * 0.5f; break; } - + render::Text::draw(v.x(), v.y(), text); - + // disable OpenGL textures gl::disable(GL_TEXTURE_2D); - + } // draw unaligned text void text(const math::Vector2f &location, const math::Vector2f &size, const Font *font, const std::string &text) { render::Text::setfont(font->name().c_str(), font->width(), font->height()); - + // enable OpenGL textures gl::enable(GL_TEXTURE_2D); - + render::Text::draw(location.x(), location.y(), text); - + // disable OpenGL textures gl::disable(GL_TEXTURE_2D); } @@ -161,12 +162,12 @@ void text(const math::Vector2f &location, const math::Vector2f &size, const Font { render::Text::setfont(font->name().c_str(), font->width(), font->height()); - + // enable OpenGL textures gl::enable(GL_TEXTURE_2D); - + render::Text::draw(location.x(), location.y(), textstream); - + // disable OpenGL textures gl::disable(GL_TEXTURE_2D); } diff --git a/src/ui/paint.h b/src/ui/paint.h index 840e18a..1d28574 100644 --- a/src/ui/paint.h +++ b/src/ui/paint.h @@ -13,13 +13,14 @@ namespace ui { /// low-level widget paint functions -namespace paint { +namespace paint +{ /// assign system colors void assign_color(const char c, const math::Color &color); /// set paint color -void color(float r=0.0f, float g=0.0f, float b=0.0f, float a=1.0f); +void color(float r = 0.0f, float g = 0.0f, float b = 0.0f, float a = 1.0f); /// set paint color void color(math::Color const & color); diff --git a/src/ui/palette.cc b/src/ui/palette.cc index 2dec462..6492dc3 100644 --- a/src/ui/palette.cc +++ b/src/ui/palette.cc @@ -11,20 +11,20 @@ namespace ui { Palette::Palette() : - palette_foreground(1.0f, 1.0f), - palette_background(0.5f, 0.75f), - palette_border(0.0f, 0.8f, 0.0f, 0.5f), - palette_text(0.75f, 1.0f), - palette_highlight(1.0f, 1.0f, 0.5f), - palette_disabled(0.5f, 0.5f, 0.5f, 1.0f), - palette_pointer(0.0f, 0.75f, 0.0f, 1.0f), - palette_active(0.0f, 1.0f, 0.0f, 1.0f), - palette_debug(0.50f, 0.75f), - palette_mission(1.0f, 0.5f, 1.0f, 1.0f), - palette_bold(1.0f, 1.0f), - palette_fancy(0.0f, 1.0f, 0.0f, 1.0f), - palette_warning(1.0f, 1.0f, 0.0f, 1.0f), - palette_error(1.0f, 0.0f, 0.0f, 1.0f) + palette_foreground(1.0f, 1.0f), + palette_background(0.5f, 0.75f), + palette_border(0.0f, 0.8f, 0.0f, 0.5f), + palette_text(0.75f, 1.0f), + palette_highlight(1.0f, 1.0f, 0.5f), + palette_disabled(0.5f, 0.5f, 0.5f, 1.0f), + palette_pointer(0.0f, 0.75f, 0.0f, 1.0f), + palette_active(0.0f, 1.0f, 0.0f, 1.0f), + palette_debug(0.50f, 0.75f), + palette_mission(1.0f, 0.5f, 1.0f, 1.0f), + palette_bold(1.0f, 1.0f), + palette_fancy(0.0f, 1.0f, 0.0f, 1.0f), + palette_warning(1.0f, 1.0f, 0.0f, 1.0f), + palette_error(1.0f, 0.0f, 0.0f, 1.0f) { } @@ -35,7 +35,7 @@ Palette::~Palette() const math::Color &Palette::color(Color palettecolor) const { - switch(palettecolor) { + switch (palettecolor) { case Foreground: return foreground(); break; diff --git a/src/ui/palette.h b/src/ui/palette.h index 61a0b72..422c0e7 100644 --- a/src/ui/palette.h +++ b/src/ui/palette.h @@ -22,94 +22,81 @@ public: /// default destructor ~Palette(); - + /// color index - enum Color { Foreground=0, Background=1, Border=2, Text=3, Highlight=4, Disabled=5, Pointer=6, Active=7, - Debug=8, Mission=9, Bold=10, Fancy=11, Warning=12, Error=13 }; + enum Color { Foreground = 0, Background = 1, Border = 2, Text = 3, Highlight = 4, Disabled = 5, Pointer = 6, Active = 7, + Debug = 8, Mission = 9, Bold = 10, Fancy = 11, Warning = 12, Error = 13 + }; /* ---- mutators ------------------------------------------- */ /// set foreground color - inline void set_foreground(const math::Color &color) - { + inline void set_foreground(const math::Color &color) { palette_foreground.assign(color); } - + /// set background color - inline void set_background(const math::Color &color) - { + inline void set_background(const math::Color &color) { palette_background.assign(color); } - + /// set border color - inline void set_border(const math::Color &color) - { + inline void set_border(const math::Color &color) { palette_border.assign(color); } - + /// set text color - inline void set_text(const math::Color &color) - { + inline void set_text(const math::Color &color) { palette_text.assign(color); } - + /// set highlight color - inline void set_highlight(const math::Color &color) - { + inline void set_highlight(const math::Color &color) { palette_highlight.assign(color); } - + /// set disabled color - inline void set_disabled(const math::Color &color) - { + inline void set_disabled(const math::Color &color) { palette_disabled.assign(color); } /// set pointer color - inline void set_pointer(const math::Color &color) - { + inline void set_pointer(const math::Color &color) { palette_pointer.assign(color); } - + /// set active pointer color - inline void set_active(const math::Color &color) - { + inline void set_active(const math::Color &color) { palette_active.assign(color); } - + /// set debug color - inline void set_debug(const math::Color &color) - { + inline void set_debug(const math::Color &color) { palette_debug.assign(color); } - + /// set mission color - inline void set_mission(const math::Color &color) - { + inline void set_mission(const math::Color &color) { palette_mission.assign(color); } /// set bold text color - inline void set_bold(const math::Color &color) - { + inline void set_bold(const math::Color &color) { palette_bold.assign(color); } - + /// set fancy text color - inline void set_fancy(const math::Color &color) - { + inline void set_fancy(const math::Color &color) { palette_fancy.assign(color); } - + /// set warning text color - inline void set_warning(const math::Color &color) - { + inline void set_warning(const math::Color &color) { palette_warning.assign(color); } /// set error text color - inline void set_error(const math::Color &color) - { + inline void set_error(const math::Color &color) { palette_error.assign(color); } @@ -119,17 +106,17 @@ public: inline const math::Color &foreground() const { return palette_foreground; } - + /// background color inline const math::Color &background() const { return palette_background; } - + /// border color inline const math::Color &border() const { return palette_border; } - + /// text color inline const math::Color &text() const { return palette_text; @@ -149,7 +136,7 @@ public: inline const math::Color &pointer() const { return palette_pointer; } - + /// active pointer color inline const math::Color &active() const { return palette_active; @@ -187,7 +174,7 @@ public: // indexed color const math::Color &color(Palette::Color palettecolor) const; - + private: // UI colors math::Color palette_foreground; @@ -199,7 +186,7 @@ private: math::Color palette_pointer; math::Color palette_active; math::Color palette_debug; - + // HUD colors math::Color palette_mission; diff --git a/src/ui/scrollpane.cc b/src/ui/scrollpane.cc index 20325d8..463956d 100644 --- a/src/ui/scrollpane.cc +++ b/src/ui/scrollpane.cc @@ -22,7 +22,7 @@ ScrollPane::ScrollPane(Widget *parent, ui::Text &text) : Widget(parent), scrollp ScrollPane::~ScrollPane() { } - + void ScrollPane::set_alignment(const unsigned int alignment) { scrollpane_alignment = alignment; @@ -68,7 +68,7 @@ void ScrollPane::draw() scrollpane_scroll = (int) scrollpane_text.size(); else if (scrollpane_scroll < 0) scrollpane_scroll = 0; - + int bottom = (int) scrollpane_text.size() - scrollpane_scroll; int current_line = 0; @@ -100,8 +100,8 @@ void ScrollPane::draw() } // new word, wrap if necessary - else if ((*c == '\n' ) || ( *c == ' ')) { - + else if ((*c == '\n') || (*c == ' ')) { + if (line_length + word_length > (size_t) text_width) { if (line.size()) { lines.push_back(line); @@ -111,33 +111,33 @@ void ScrollPane::draw() line_length = 0; } } - + line.append(word); line_length += word_length; word.clear(); word_length = 0; wordpen = pen; - + // new line - if (*c == '\n' ) { + if (*c == '\n') { lines.push_back(line); line.clear(); line_length = 0; pen = 'N'; wordpen = 'N'; - // new word - } else if (*c == ' ' ) { + // new word + } else if (*c == ' ') { line += ' '; line_length++; } } // new character - else { + else { word += *c; word_length++; - + if (word_length == (size_t) text_width) { if (line.size()) { lines.push_back(line); @@ -158,15 +158,15 @@ void ScrollPane::draw() c++; } - + } - current_line++; + current_line++; } gl::color(palette()->text()); const math ::Vector2f gl(global_location()); float y = 0; - + if ((alignment() & AlignTop) == AlignTop) { int i = (int) lines.size(); for (ui::Text::iterator it = lines.begin(); it != lines.end(); it++) { diff --git a/src/ui/scrollpane.h b/src/ui/scrollpane.h index f0ffac1..82c74c9 100644 --- a/src/ui/scrollpane.h +++ b/src/ui/scrollpane.h @@ -23,12 +23,16 @@ public: /* -- inspectors ------------------------------------------- */ /// current scroll position - inline int scroll() const { return scrollpane_scroll; } + inline int scroll() const { + return scrollpane_scroll; + } /// text alignment - inline unsigned int alignment() const { return scrollpane_alignment; } - - /// set text alignment + inline unsigned int alignment() const { + return scrollpane_alignment; + } + + /// set text alignment void set_alignment(const unsigned int alignment); /* -- mutators --------------------------------------------- */ @@ -45,7 +49,7 @@ public: protected: /// draw the scroll pane virtual void draw(); - + private: ui::Text &scrollpane_text; int scrollpane_scroll; diff --git a/src/ui/toolbar.cc b/src/ui/toolbar.cc index 0d9dfe6..deeff17 100644 --- a/src/ui/toolbar.cc +++ b/src/ui/toolbar.cc @@ -7,7 +7,8 @@ #include "ui/toolbar.h" #include "ui/button.h" -namespace ui { +namespace ui +{ Toolbar::Toolbar(Widget *parent) : Widget(parent) { diff --git a/src/ui/toolbar.h b/src/ui/toolbar.h index 4094f52..baff21b 100644 --- a/src/ui/toolbar.h +++ b/src/ui/toolbar.h @@ -10,13 +10,15 @@ #include "ui/widget.h" -namespace ui { +namespace ui +{ /// a toolbar container widget -class Toolbar : public Widget { +class Toolbar : public Widget +{ public: /// default constructor - Toolbar(Widget *parent=0); + Toolbar(Widget *parent = 0); /// default destructor virtual ~Toolbar(); diff --git a/src/ui/ui.cc b/src/ui/ui.cc index f734a50..a6d54ab 100644 --- a/src/ui/ui.cc +++ b/src/ui/ui.cc @@ -41,7 +41,7 @@ UI *root() void init() { con_print << "^BInitializing user interface..." << std::endl; - + if (!global_ui) { global_ui = new UI(); } else { @@ -50,7 +50,7 @@ void init() } global_ui->load_menus(); - global_ui->load_settings(); + global_ui->load_settings(); } void shutdown() @@ -71,19 +71,19 @@ UI::UI() : Window(0) set_size(1024, 768); set_border(false); set_background(false); - + // intialize console ui_console = new Console(this); // default palette ui_palette = new Palette(); set_palette(ui_palette); - + // default fonts ui_font_small = new Font("gui", 12, 18); ui_font_large = new Font("gui", 14, 24); set_font(ui_font_small); - + ui_mouse_focus = this; ui_input_focus = this; set_focus(); @@ -95,7 +95,7 @@ UI::UI() : Window(0) UI::~UI() { delete ui_palette; - + delete ui_font_small; delete ui_font_large; } @@ -121,7 +121,7 @@ void UI::load_menus() Button *button = 0; Label *label = 0; Menu *menu = 0; - + while (ini.getline()) { if (ini.got_section()) { if (ini.got_section("menu")) { @@ -131,10 +131,10 @@ void UI::load_menus() } else if (menu) { if (ini.got_section("button")) { button = menu->add_button(); - + } else if (ini.got_section("label")) { label = menu->add_label(); - + } else { ini.unknown_section(); } @@ -155,14 +155,14 @@ void UI::load_menus() if (ini.got_key_string("text", strval)) { aux::strip_quotes(strval); button->set_text(strval); - + } else if (ini.got_key_string("command", strval)) { - for (size_t i =0; i <= strval.size(); i++) { + for (size_t i = 0; i <= strval.size(); i++) { if (strval[i] == ',') strval[i] = ';'; } aux::strip_quotes(strval); button->set_command(strval); - + } else if (ini.got_key_string("align", strval)) { aux::to_label(strval); if (strval.compare("left") == 0) { @@ -195,7 +195,7 @@ void UI::load_menus() ini.unkown_key(); } } - + } } @@ -211,7 +211,7 @@ void UI::load_menus() menu->add_button("Connect", "connect"); menu->add_button("Quit", "quit"); } - + // fallback game menu if (!find_menu("game")) { con_warn << "menu 'game' not found, using default" << std::endl; @@ -236,16 +236,16 @@ void UI::load_settings() { ui_mouse_focus = this; - + std::string filename("ui"); filesystem::IniFile ini; ini.open(filename); - + if (!ini.is_open()) { con_error << "Could not open " << ini.name() << std::endl; return; } - + std::string strval; math::Color color; @@ -253,16 +253,16 @@ void UI::load_settings() float h = elementsize.height(); float m = elementmargin; - + while (ini.getline()) { - + if (ini.got_section()) { if (ini.got_section("ui")) { continue; - + } else if (ini.got_section("colors")) { continue; - + } else if (ini.got_section("hud")) { continue; @@ -273,9 +273,9 @@ void UI::load_settings() ini.unknown_section(); continue; } - + } else if (ini.got_key()) { - + if (ini.in_section("ui")) { if (ini.got_key_float("elementwidth", w)) { elementsize.assign(w, h); @@ -290,9 +290,9 @@ void UI::load_settings() ini.unkown_key(); continue; } - + } else if (ini.in_section("colors")) { - + if (ini.got_key_color("foreground", color)) { ui_palette->set_foreground(color); continue; @@ -352,7 +352,7 @@ void UI::load_settings() } } } - + ini.close(); } @@ -388,7 +388,7 @@ UI::Menus::iterator UI::find_menu(Window *menu) if ((*it) == menu) return it; } - + return it; } @@ -418,13 +418,13 @@ void UI::add_menu(Window *menu) if (it == ui_menus.end()) { ui_menus.push_back(menu); } - + } void UI::show_menu(const char *label) { Window *menu = find_menu(label); - + if (menu) { if (ui_active_menu) { ui_active_menu->hide(); @@ -438,7 +438,7 @@ void UI::show_menu(const char *label) ui_active_menu = menu; ui_active_menu->event_resize(); ui_active_menu->show(); - + set_pointer("pointer"); // raise console if it is visible @@ -524,17 +524,17 @@ bool UI::input_key(const bool pressed, const int key, const unsigned int modifie bool UI::on_keypress(const int key, const unsigned int modifier) { - switch( key ) { - - case SDLK_ESCAPE: - if (active()) { - hide_menu(); - audio::play("ui/menu"); - } - return true; - break; - default: - break; + switch (key) { + + case SDLK_ESCAPE: + if (active()) { + hide_menu(); + audio::play("ui/menu"); + } + return true; + break; + default: + break; } return false; @@ -570,7 +570,7 @@ void UI::draw_pointer() paint::color(c); math::Vector2f pos(mouse_cursor.x() - pointer_size * 0.5f, mouse_cursor.y() - pointer_size * 0.5f); math::Vector2f s(pointer_size, pointer_size); - + std::string texture("pointers/"); texture.append(mouse_pointer_bitmap); @@ -578,7 +578,7 @@ void UI::draw_pointer() gl::push(); gl::translate(mouse_cursor.x(), mouse_cursor.y(), 0); - float angle = core::application()->time()* 0.75f - floorf(core::application()->time() * 0.75f); + float angle = core::application()->time() * 0.75f - floorf(core::application()->time() * 0.75f); angle *= 360.0f; gl::rotate(angle, math::Vector3f(0, 0, 1.0f)); gl::translate(-mouse_cursor.x(), -mouse_cursor.y(), 0); diff --git a/src/ui/ui.h b/src/ui/ui.h index 2e4bc50..c340eb8 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -21,71 +21,73 @@ class UI : public Window public: /// constructor UI(); - + /// destructor ~UI(); - + /// list widgets void list() const; /// list visible widgets void list_visible() const; - + /// list meus void list_menus() const; - + /// load menus from menu.ini void load_menus(); - /// load settings from ui.ini + /// load settings from ui.ini void load_settings(); /// apply UI options to the render engine void apply_render_options(); - + /// make a window the active window void show_menu(const char *label); /// hide the active window void hide_menu(); - + /// show previous window void previous_menu(); /// the console - inline Console *console() { return ui_console; } - + inline Console *console() { + return ui_console; + } + /// return the active menu Window *active() { return ui_active_menu; } - + /// return the widget with global mouse focus inline Widget *mouse_focus() const { return ui_mouse_focus; } - + /// return the widget with global input focus inline Widget *input_focus() const { return ui_input_focus; } - + /// receive global mouse movement void input_mouse(const float x, const float y); - + /// receive global key input bool input_key(const bool pressed, const int key, const unsigned int modifier); /// run a user interface frame void frame(); - + /* -- fonts ------------------------------------------------ */ - + /// default small font inline const Font *font_small() const { return ui_font_small; } - + /// default medium font inline const Font *font_large() const { return ui_font_large; @@ -94,28 +96,28 @@ public: /* -- mouse pointer ---------------------------------------- */ /// set mouse pointer bitmap - void set_pointer(const char *pointerbitmap=0, const Palette::Color color = Palette::Highlight,const bool animated = false); + void set_pointer(const char *pointerbitmap = 0, const Palette::Color color = Palette::Highlight, const bool animated = false); static bool ui_debug; - + static float elementmargin; static math::Vector2f elementsize; protected: typedef std::list<Window *> Menus; - + Menus::iterator find_menu(Window *menu); Window *find_menu(const char *label); void add_menu(Window *window); /* -- event handlers --------------------------------------- */ - + /// handle keypress events virtual bool on_keypress(const int key, const unsigned int modifier); - + /// handle key release events virtual bool on_keyrelease(const int key, const unsigned int modifier); @@ -125,15 +127,15 @@ private: Palette *ui_palette; Font *ui_font_small; Font *ui_font_large; - + Window *ui_active_menu; Widget *ui_mouse_focus; Widget *ui_input_focus; - + Console *ui_console; Menus ui_menus; - + /// TODO move to separate object to handle mouse cursor drawing math::Vector2f mouse_cursor; std::string mouse_pointer_bitmap; @@ -151,10 +153,16 @@ void shutdown(); UI *root(); /// the console -inline Console *console() { return root()->console(); } +inline Console *console() +{ + return root()->console(); +} /// debug mode -inline bool debug() { return UI::ui_debug; } +inline bool debug() +{ + return UI::ui_debug; +} } diff --git a/src/ui/widget.cc b/src/ui/widget.cc index b1157d5..2e2f291 100644 --- a/src/ui/widget.cc +++ b/src/ui/widget.cc @@ -22,13 +22,13 @@ Widget::Widget(Widget *parent) widget_palette = 0; widget_font = 0; widget_label.assign("widget"); - + if (!parent) { widget_parent = root(); } else { widget_parent = parent; } - + if (widget_parent) widget_parent->add_child(this); } @@ -55,7 +55,7 @@ size_t Widget::list(const size_t indent, const bool visible_only) const print(indent); size_t n = 1; for (Children::const_iterator it = widget_children.begin(); it != widget_children.end(); it++) { - n += (*it)->list(indent+1, visible_only); + n += (*it)->list(indent + 1, visible_only); } return n; } @@ -94,7 +94,7 @@ void Widget::lower() { if (!parent()) return; - + Children::iterator it = parent()->find_child(this); if (it != parent()->children().end()) { parent()->children().erase(it); @@ -106,7 +106,7 @@ void Widget::raise() { if (!parent()) return; - + Children::iterator it = parent()->find_child(this); if (it != parent()->children().end()) { parent()->children().erase(it); @@ -120,11 +120,11 @@ void Widget::set_focus() widget_focus = true; return; } - + for (Children::iterator it = parent()->children().begin(); it != parent()->children().end(); it++) { (*it)->widget_focus = false; } - + widget_focus = true; } @@ -138,7 +138,7 @@ void Widget::hide() widget_visible = false; if (parent() && focus()) { Widget::Children::reverse_iterator it = parent()->children().rbegin(); - + while (it != parent()->children().rend()) { Widget *w = (*it); if (w != this && w->visible()) { @@ -185,7 +185,7 @@ void Widget::set_label(char const *label) aux::to_label(widget_label); } else { widget_label.clear(); - } + } } void Widget::set_palette(const Palette *palette) @@ -247,7 +247,7 @@ Widget::Children::iterator Widget::find_child(Widget *child) if ((*it) == child) return it; } - + return it; } @@ -274,7 +274,7 @@ Widget *Widget::find_input_focus() { if (!visible() || !widget_focus) return 0; - + for (Children::reverse_iterator rit = widget_children.rbegin(); rit != widget_children.rend(); ++rit) { Widget *w = (*rit); if (w->visible() && w->widget_focus) { @@ -283,7 +283,7 @@ Widget *Widget::find_input_focus() return f; } } - + // no child with input focus return this; } @@ -293,7 +293,7 @@ Widget *Widget::find_mouse_focus(const math::Vector2f & pos) // this widget is not visible if (!visible() || !size().contains(pos)) return 0; - + // reverse-iterate children for (Children::reverse_iterator rit = widget_children.rbegin(); rit != widget_children.rend(); ++rit) { Widget *w = (*rit); @@ -302,9 +302,9 @@ Widget *Widget::find_mouse_focus(const math::Vector2f & pos) if (f) return f; } - + } - + // no child with mouse focus return this; } @@ -324,16 +324,16 @@ bool Widget::has_input_focus() const bool Widget::event_key(const bool pressed, const int key, const unsigned int modifier) { bool handled = false; - + if (pressed) { handled = on_keypress(key, modifier); } else { handled = on_keyrelease(key, modifier); } - + if (!handled && parent()) handled = parent()->event_key(pressed, key, modifier); - + return handled; } @@ -341,11 +341,11 @@ bool Widget::event_mouse(const math::Vector2f &cursor) { math::Vector2f local_cursor = to_local_coords(cursor); bool handled = false; - + if (root()->mouse_focus() != this) { on_mouseover(local_cursor); } - + on_mousemove(local_cursor); return handled; } @@ -354,7 +354,7 @@ void Widget::event_draw() { if (!visible()) return; - + if (widget_background) draw_background(); if (widget_border) @@ -362,7 +362,7 @@ void Widget::event_draw() if (debug()) draw_debug_border(); draw(); - + for (Children::iterator it = widget_children.begin(); it != widget_children.end(); it++) { if ((*it)->visible()) (*it)->event_draw(); diff --git a/src/ui/widget.h b/src/ui/widget.h index 20e4ac4..1f87695 100644 --- a/src/ui/widget.h +++ b/src/ui/widget.h @@ -28,28 +28,28 @@ class Widget public: /// create a new widget - Widget(Widget *parent=0); - + Widget(Widget *parent = 0); + /// destroy a widget virtual ~Widget(); - + /// parent widget this widget belongs to inline Widget *parent() const { return widget_parent; } - + /* -- inspectors -------------------------------------------- */ - + /// pixel coordinates of the top-left corner of this widget within its parent inline const math::Vector2f &location() const { return widget_location; } - + /// size of this widget in pixels inline const math::Vector2f &size() const { return widget_size; } - + /// x coordinate of the left of the widget /** * @see location() @@ -66,7 +66,7 @@ public: inline float right() const { return widget_location.x() + widget_size.width(); } - + /// y coordinate of the top of the widget /** * @see location() @@ -83,7 +83,7 @@ public: inline float bottom() const { return widget_location.y() + widget_size.height(); } - + /// width of the widget in pixels /** * @see size() @@ -91,7 +91,7 @@ public: inline float width() const { return widget_size.width(); } - + /// height of the widget in pixels /** * @see size() @@ -99,61 +99,61 @@ public: inline float height() const { return widget_size.height(); } - + /// widget label inline const std::string &label() const { return widget_label; } - + /// true if this widget will draw a background inline bool background() const { return widget_background; } - + /// true if this widget will draw a border inline bool border() const { return widget_border; } - + /// true if this widget is visible inline bool visible() const { return widget_visible; } - + /// true if this widget is not visible inline bool hidden() const { return !widget_visible; } - + /// the palette used to draw this widget const Palette *palette() const; - + /// the font used to draw this widget const Font *font() const; - + /// return true if the widget has input focus bool has_input_focus() const; - + /// returns true if the widget has mouse focus bool has_mouse_focus() const; - + /* -- mutators --------------------------------------------- */ - + /// raise the widget to the top of the widget stack void raise(); - + /// lower the widget to the bottom of the widget stack void lower(); - + /// show the widget virtual void show(); - + /// hide the widget virtual void hide(); - + /// set visibility void set_visible(bool visible = true); - + /// set input focus void set_focus(); @@ -162,57 +162,57 @@ public: /// set the widget geometry void set_geometry(const math::Vector2f &location, const math::Vector2f &size); - + /// set location of the top-left corner, relative to the parent void set_location(const float x, const float y); - + /// set location of the top-left corner, relative to the parent void set_location(const math::Vector2f &location); - + /// set the widgets width and height void set_size(const float w, const float h); - + /// set the widgets width and height void set_size(const math::Vector2f &size); - + /// set the widgets width void set_width(const float w); - + /// set the widgets height void set_height(const float h); - + /// set the widgets palette void set_palette(const Palette *palette); - + /// set the widgets font void set_font(const Font *font); - + /// set the widgets label void set_label(std::string const &label); - + /// set the widgets label void set_label(const char *label); - + /// enable or disable widget border void set_border(bool border = true); - + ///enable or disable widget background void set_background(bool background = true); - + /* -- event distributors ----------------------------------- */ - + /// distribute resize event virtual void event_resize(); - + /// distribute draw event virtual void event_draw(); - + /// distribute keyboard events virtual bool event_key(const bool pressed, const int key, const unsigned int modifier); - + /// distribute mouse movement events virtual bool event_mouse(const math::Vector2f &cursor); - + protected: /// type definition for child widgets typedef std::list<Widget *> Children; @@ -221,7 +221,7 @@ protected: inline Children &children() { return widget_children; } - + /// find the widget that has input focus virtual Widget *find_input_focus(); @@ -229,18 +229,20 @@ protected: /** @param cursor mouse cursor position relative to this widget's location */ Widget *find_mouse_focus(const math::Vector2f & cursor); - + /// list widget content size_t list(const size_t indent, const bool visible_only = false) const; - + /// print widget description virtual void print(const size_t indent) const; /// true of this sibling has local focus - inline bool focus() const { return widget_focus; } - + inline bool focus() const { + return widget_focus; + } + /* -- coordinate mapping ----------------------------------- */ - + /// map local coordinates to global coordinates inline math::Vector2f to_global_coords(const math::Vector2f &local) { math::Vector2f v(local); @@ -251,7 +253,7 @@ protected: } while (parent); return v; } - + /// map global coordinates to local coordinates inline math::Vector2f to_local_coords(const math::Vector2f &global) { math::Vector2f v(global); @@ -262,7 +264,7 @@ protected: } return v; } - + /// map local widget location to global location inline math::Vector2f global_location() { math::Vector2f v(widget_location); @@ -273,35 +275,35 @@ protected: } return v; } - + /* -- event handlers --------------------------------------- */ - + /// called when the mouse receives mouse movement virtual void on_mousemove(const math::Vector2f &cursor); - + /// called when the mouse enters the widget virtual void on_mouseover(const math::Vector2f &cursor); - + /// called when the widget receives a key press virtual bool on_keypress(const int key, const unsigned int modifier); - + /// called when the widget receives a key release virtual bool on_keyrelease(const int key, const unsigned int modifier); - + /* -- draw functions --------------------------------------- */ - + /// resize event virtual void resize(); - + /// draw the widget virtual void draw(); - + /// draw the widget background virtual void draw_background(); - + /// draw the widget border virtual void draw_border(); - + /// add a child widget virtual void add_child(Widget *child); @@ -310,7 +312,7 @@ protected: /// remove all child widgets virtual void remove_children(); - + private: void draw_debug_border(); @@ -318,19 +320,19 @@ private: bool widget_background; bool widget_border; bool widget_focus; - + math::Vector2f widget_location; math::Vector2f widget_size; std::string widget_label; - + Children widget_children; - + const Palette *widget_palette; const Font *widget_font; Widget *widget_parent; - + Children::iterator find_child(Widget *child); - + }; } diff --git a/src/ui/window.cc b/src/ui/window.cc index 8494f34..0e545be 100644 --- a/src/ui/window.cc +++ b/src/ui/window.cc @@ -48,7 +48,7 @@ void Window::clear_previous() void Window::draw_border() { paint::color(palette()->border()); - paint::border(global_location(), size()); + paint::border(global_location(), size()); } } diff --git a/src/ui/window.h b/src/ui/window.h index 2a077ff..6c44d54 100644 --- a/src/ui/window.h +++ b/src/ui/window.h @@ -17,9 +17,9 @@ class Window : public Widget { public: - Window(Widget *parent=0); + Window(Widget *parent = 0); ~Window(); - + /// set the label of the previous window void set_previous(Window *previous); @@ -30,11 +30,11 @@ public: /**show() sets focus on the window and all of its parents */ virtual void show(); - + inline const std::string &previous() const { return window_previous; } - + protected: virtual void draw_border(); |