Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 1494


Ignore:
Timestamp:
May 31, 2008, 11:24:44 PM (16 years ago)
Author:
rgrieder
Message:
  • set the svn:eol-style property to all files so, that where ever you check out, you'll get the right line endings (had to change every file with mixed endings to windows in order to set the property)
Location:
code/branches/network
Files:
388 edited

Legend:

Unmodified
Added
Removed
  • code/branches/network/CMakeLists.txt

    • Property svn:eol-style set to native
  • code/branches/network/Doxyfile

    • Property svn:eol-style set to native
  • code/branches/network/INSTALL

    • Property svn:eol-style set to native
  • code/branches/network/LICENSE

    • Property svn:eol-style set to native
  • code/branches/network/README

    • Property svn:eol-style set to native
  • code/branches/network/TODO

    • Property svn:eol-style set to native
  • code/branches/network/bin/disco.txt

    • Property svn:eol-style set to native
  • code/branches/network/bin/irc.tcl

    • Property svn:eol-style set to native
  • code/branches/network/bin/levels/sample.oxw

    • Property svn:eol-style set to native
  • code/branches/network/bin/media.cfg

    • Property svn:eol-style set to native
  • code/branches/network/bin/ogre.cfg-init

    • Property svn:eol-style set to native
  • code/branches/network/bin/orxonox.bat

    • Property svn:eol-style set to native
  • code/branches/network/bin/plugins.cfg-init

    • Property svn:eol-style set to native
  • code/branches/network/bin/quake3settings.cfg

    • Property svn:eol-style set to native
  • code/branches/network/bin/remote.tcl

    • Property svn:eol-style set to native
  • code/branches/network/bin/run-script

    • Property svn:eol-style set to native
  • code/branches/network/bin/telnet_server.tcl

    • Property svn:eol-style set to native
  • code/branches/network/cmake/CheckTardis.cmake

    • Property svn:eol-style set to native
  • code/branches/network/cmake/FindALUT.cmake

    • Property svn:eol-style set to native
  • code/branches/network/cmake/FindBoost.cmake

    • Property svn:eol-style set to native
  • code/branches/network/cmake/FindCEGUI.cmake

    • Property svn:eol-style set to native
  • code/branches/network/cmake/FindCEGUI_OGRE.cmake

    • Property svn:eol-style set to native
  • code/branches/network/cmake/FindDirectX.cmake

    • Property svn:eol-style set to native
  • code/branches/network/cmake/FindENet.cmake

    • Property svn:eol-style set to native
  • code/branches/network/cmake/FindLua.cmake

    • Property svn:eol-style set to native
  • code/branches/network/cmake/FindODE.cmake

    • Property svn:eol-style set to native
  • code/branches/network/cmake/FindOGRE.cmake

    • Property svn:eol-style set to native
  • code/branches/network/cmake/FindOIS.cmake

    • Property svn:eol-style set to native
  • code/branches/network/cmake/FindOggVorbis.cmake

    • Property svn:eol-style set to native
  • code/branches/network/cmake/FindOpenAL.cmake

    • Property svn:eol-style set to native
  • code/branches/network/cmake/FindPkgConfig.cmake

    • Property svn:eol-style set to native
  • code/branches/network/cmake/FindTCL.cmake

    • Property svn:eol-style set to native
  • code/branches/network/cmake/FindZLIB.cmake

    • Property svn:eol-style set to native
  • code/branches/network/cmakeclearcache

    • Property svn:eol-style set to native
  • code/branches/network/media_HEAD

    • Property svn:eol-style set to native
  • code/branches/network/run

    • Property svn:eol-style set to native
  • code/branches/network/src/CMakeLists.txt

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/audio/_AudioObject.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/core/InputEvent.h

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/core/InputEventListener.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/core/InputEventListener.h

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/loader/CMakeLists.txt

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/loader/LevelLoader.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/loader/LevelLoader.h

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/loader/LoaderPrereqs.h

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/network/NetworkFrameListener.h

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/network/PacketBufferTestExt.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/orxonox/AIClass.h

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/orxonox/Arrival.h

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/orxonox/Flocking.h

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/orxonox/InputManager.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/orxonox/InputManager.h

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/orxonox/SpaceshipSteering.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/orxonox/SpaceshipSteering.h

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/orxonox/objects/Fighter.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/orxonox/objects/Fighter.h

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/orxonox/objects/SpaceshipSteeringObject.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/orxonox/objects/SpaceshipSteeringObject.h

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/orxonox/objects/Test.h

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/orxonox/objects/test1.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/orxonox/objects/test1.h

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/orxonox/objects/test2.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/orxonox/objects/test2.h

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/orxonox/objects/test3.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/orxonox/objects/test3.h

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/util/String2Number.h

    • Property svn:eol-style set to native
  • code/branches/network/src/asylum/util/Tokenizer.h

    • Property svn:eol-style set to native
  • code/branches/network/src/audio/AudioBuffer.cc

    • Property svn:eol-style set to native
    r1056 r1494  
    11/*
    22 *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
     3 *                    > www.orxonox.net < *
    54 *
    65 *   License notice:
  • code/branches/network/src/audio/AudioBuffer.h

    • Property svn:eol-style set to native
    r1056 r1494  
    11/*
    22 *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
     3 *                    > www.orxonox.net < *
    54 *
    65 *   License notice:
  • code/branches/network/src/audio/AudioIncludes.h

    • Property svn:eol-style set to native
    r1056 r1494  
    11/*
    22 *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
     3 *                    > www.orxonox.net < *
    54 *
    65 *   License notice:
     
    2726 */
    2827
    29 /**
    30   @file
    31   @brief Various headers used in the audio lib. Avoid including this to
    32          increase accuracy of header file dependencies.
    33 */
    34 
     28/**  @file  @brief Various headers used in the audio lib. Avoid including this to         increase accuracy of header file dependencies.*/
    3529#include "AudioPrereqs.h"
    3630
  • code/branches/network/src/audio/AudioManager.cc

    • Property svn:eol-style set to native
    r1089 r1494  
    11/*
    22 *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
     3 *                    > www.orxonox.net < *
    54 *
    65 *   License notice:
  • code/branches/network/src/audio/AudioManager.h

    • Property svn:eol-style set to native
    r1064 r1494  
    11/*
    22 *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
     3 *                    > www.orxonox.net < *
    54 *
    65 *   License notice:
  • code/branches/network/src/audio/AudioPrereqs.h

    • Property svn:eol-style set to native
    r1414 r1494  
    11/*
    22 *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
     3 *                    > www.orxonox.net < *
    54 *
    65 *   License notice:
     
    3736#include "util/OrxonoxPlatform.h"
    3837
    39 //-----------------------------------------------------------------------
    40 // Shared library settings
    41 //-----------------------------------------------------------------------
    42 #if (ORXONOX_PLATFORM == ORXONOX_PLATFORM_WIN32) && !defined( AUDIO_STATIC_BUILD )
    43 #  ifdef AUDIO_SHARED_BUILD
    44 #    define _AudioExport __declspec(dllexport)
    45 #  else
    46 #    if defined( __MINGW32__ )
    47 #      define _AudioExport
    48 #    else
    49 #      define _AudioExport __declspec(dllimport)
    50 #    endif
    51 #  endif
    52 #elif defined ( ORXONOX_GCC_VISIBILITY )
    53 #  define _AudioExport  __attribute__ ((visibility("default")))
    54 #else
    55 #  define _AudioExport
    56 #endif
    57 
    58 
    59 //-----------------------------------------------------------------------
    60 // Forward declarations
    61 //-----------------------------------------------------------------------
     38//-----------------------------------------------------------------------// Shared library settings//-----------------------------------------------------------------------#if (ORXONOX_PLATFORM == ORXONOX_PLATFORM_WIN32) && !defined( AUDIO_STATIC_BUILD )#  ifdef AUDIO_SHARED_BUILD#    define _AudioExport __declspec(dllexport)#  else#    if defined( __MINGW32__ )#      define _AudioExport#    else#      define _AudioExport __declspec(dllimport)#    endif#  endif#elif defined ( ORXONOX_GCC_VISIBILITY )#  define _AudioExport  __attribute__ ((visibility("default")))#else#  define _AudioExport#endif
     39//-----------------------------------------------------------------------// Forward declarations//-----------------------------------------------------------------------
    6240namespace audio
    6341{
     
    6846}
    6947
    70 //-----------------------------------------------------------------------
    71 // Warnings
    72 //-----------------------------------------------------------------------
     48//-----------------------------------------------------------------------// Warnings//-----------------------------------------------------------------------
    7349#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
    7450
    75 // set to 4: conversion from 'ogg_int64_t' to 'long', possible loss of data
    76 #pragma warning (4 : 4244)
    77 
    78 #endif
    79 
     51// set to 4: conversion from 'ogg_int64_t' to 'long', possible loss of data#pragma warning (4 : 4244)#endif
    8052
    8153#endif /* _AudioPrereqs_H__ */
  • code/branches/network/src/audio/AudioSource.cc

    • Property svn:eol-style set to native
    r1056 r1494  
    11/*
    22 *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
     3 *                    > www.orxonox.net < *
    54 *
    65 *   License notice:
  • code/branches/network/src/audio/AudioSource.h

    • Property svn:eol-style set to native
    r1056 r1494  
    11/*
    22 *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
     3 *                    > www.orxonox.net < *
    54 *
    65 *   License notice:
  • code/branches/network/src/audio/AudioStream.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/audio/AudioStream.h

    • Property svn:eol-style set to native
    r1056 r1494  
    11/*
    22 *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
     3 *                    > www.orxonox.net < *
    54 *
    65 *   License notice:
     
    2726 */
    2827
    29 #ifndef _AudioStream_H__
    30 #define _AudioStream_H__
    31 
     28#ifndef _AudioStream_H__#define _AudioStream_H__
    3229#include "AudioPrereqs.h"
    3330
     
    3835#include <vorbis/vorbisfile.h>
    3936#include <vorbis/codec.h>
    40 
    41 namespace audio
    42 {
    43   #define BUFFER_SIZE (4096 * 4)
    44 
    45   class _AudioExport AudioStream
    46   {
    47     public:
    48       AudioStream(std::string path);
    49       void open();
    50       void release();
    51       void display();
    52       bool playback();
    53       bool playing();
    54       bool update();
    55       inline bool isLoaded() { return loaded; }
    56 
    57     protected:
    58       bool stream(ALuint buffer);
    59       void empty();
    60       void check();
    61       std::string errorString(int code);
    62 
    63     private:
    64       std::string path;
    65 
    66       FILE*           oggFile;
    67       OggVorbis_File  oggStream;
    68       vorbis_info*    vorbisInfo;
    69       vorbis_comment* vorbisComment;
    70       bool loaded;
    71 
    72       ALuint buffers[2];
    73       ALuint source;
    74       ALenum format;
    75   };
    76 }
    77 
    78 #endif /* _AudioStream_H__ */
     37namespace audio{  #define BUFFER_SIZE (4096 * 4)  class _AudioExport AudioStream  {    public:      AudioStream(std::string path);      void open();      void release();      void display();      bool playback();      bool playing();      bool update();      inline bool isLoaded() { return loaded; }
     38    protected:      bool stream(ALuint buffer);      void empty();      void check();      std::string errorString(int code);    private:      std::string path;
     39      FILE*           oggFile;      OggVorbis_File  oggStream;      vorbis_info*    vorbisInfo;      vorbis_comment* vorbisComment;      bool loaded;
     40      ALuint buffers[2];      ALuint source;      ALenum format;  };}#endif /* _AudioStream_H__ */
  • code/branches/network/src/audio/CMakeLists.txt

    • Property svn:eol-style set to native
  • code/branches/network/src/core/ArgumentCompleter.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/ArgumentCompletionFunctions.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/ArgumentCompletionFunctions.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/ArgumentCompletionListElement.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/BaseObject.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/BaseObject.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/CMakeLists.txt

    • Property svn:eol-style set to native
  • code/branches/network/src/core/ClassFactory.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/ClassManager.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/ClassTreeMask.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/ClassTreeMask.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/CommandEvaluation.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/CommandEvaluation.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/CommandExecutor.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/CommandExecutor.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/ConfigFileManager.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/ConfigFileManager.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/ConfigValueContainer.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/ConfigValueContainer.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/ConfigValueIncludes.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/ConsoleCommand.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/ConsoleCommand.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/ConsoleCommandCompilation.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/ConsoleCommandCompilation.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/CoreIncludes.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/CorePrereqs.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/CoreSettings.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/CoreSettings.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/Debug.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/Error.cc

    • Property svn:eol-style set to native
    r1293 r1494  
    11/*
    22 *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
     3 *                    > www.orxonox.net < *
    54 *
    65 *   License notice:
     
    2625 *
    2726 */
    28 
    29 /**
    30     @file Error.cc
    31     @brief Implementation of the Error class.
    32 */
    33 
     27/**    @file Error.cc    @brief Implementation of the Error class.*/
    3428#include "Error.h"
    3529#include "Debug.h"
    36 
    3730namespace orxonox
    3831{
  • code/branches/network/src/core/Error.h

    • Property svn:eol-style set to native
    r1293 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
    22  *   Author:
    23  *      Nicolas Perrenoud
    24  *   Co-authors:
    25  *      ...
    26  *
    27  */
    28 
    29 /**
    30     @file Error.h
    31     @brief Definition of the Error class.
    32 */
    33 
    34 #ifndef _Error_H__
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * *   Author: *      Nicolas Perrenoud *   Co-authors: *      ... * *//**    @file Error.h    @brief Definition of the Error class.*/#ifndef _Error_H__
    352#define _Error_H__
    363
    37 #include "CorePrereqs.h"
    38 
    39 #include <string>
    40 
     4#include "CorePrereqs.h"#include <string>
    415namespace orxonox
    426{
  • code/branches/network/src/core/Executor.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/Executor.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/Factory.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/Factory.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/Functor.h

    • Property svn:eol-style set to native
    r1214 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
    22  *   Author:
    23  *      Fabian 'x3n' Landau
    24  *   Co-authors:
    25  *      ...
    26  *
    27  *   Inspiration: Functor by Benjamin Grauer
    28  */
    29 
    30 #ifndef _Functor_H__
    31 #define _Functor_H__
    32 
    33 #include "CorePrereqs.h"
    34 
    35 #include "util/MultiTypeMath.h"
    36 #include "Debug.h"
    37 
    38 #define MAX_FUNCTOR_ARGUMENTS 5
    39 
    40 namespace orxonox
    41 {
    42     enum FunctionType
    43     {
    44         FT_MEMBER,
    45         FT_CONSTMEMBER,
    46         FT_STATIC
    47     };
    48 
    49 
    50     template <class T>
    51     inline std::string typeToString() { return "unknown"; }
    52 
    53 #define CreateTypeToStringTemplate(type) \
    54     template <> \
    55     inline std::string typeToString<type>() { return #type; } \
    56     template <> \
    57     inline std::string typeToString<type&>() { return #type; } \
    58     template <> \
    59     inline std::string typeToString<const type>() { return #type; } \
    60     template <> \
    61     inline std::string typeToString<const type&>() { return #type; }
    62 
    63     CreateTypeToStringTemplate(int);
    64     CreateTypeToStringTemplate(unsigned int);
    65     CreateTypeToStringTemplate(char);
    66     CreateTypeToStringTemplate(unsigned char);
    67     CreateTypeToStringTemplate(short);
    68     CreateTypeToStringTemplate(unsigned short);
    69     CreateTypeToStringTemplate(long);
    70     CreateTypeToStringTemplate(unsigned long);
    71     CreateTypeToStringTemplate(float);
    72     CreateTypeToStringTemplate(double);
    73     CreateTypeToStringTemplate(long double);
    74     CreateTypeToStringTemplate(bool);
    75     CreateTypeToStringTemplate(Vector2);
    76     CreateTypeToStringTemplate(Vector3);
    77     CreateTypeToStringTemplate(Quaternion);
    78     CreateTypeToStringTemplate(ColourValue);
    79     CreateTypeToStringTemplate(Radian);
    80     CreateTypeToStringTemplate(Degree);
    81 
    82     template <> \
    83     inline std::string typeToString<std::string>() { return "string"; } \
    84     template <> \
    85     inline std::string typeToString<std::string&>() { return "string"; } \
    86     template <> \
    87     inline std::string typeToString<const std::string>() { return "string"; } \
    88     template <> \
    89     inline std::string typeToString<const std::string&>() { return "string"; }
    90 
    91     class _CoreExport Functor
    92     {
    93         public:
    94             Functor() {}
    95             virtual ~Functor() {}
    96 
    97             virtual void operator()(const MultiTypeMath& param1 = MT_null, const MultiTypeMath& param2 = MT_null, const MultiTypeMath& param3 = MT_null, const MultiTypeMath& param4 = MT_null, const MultiTypeMath& param5 = MT_null) = 0;
    98 
    99             inline unsigned int getParamCount() const { return this->numParams_; }
    100             inline bool hasReturnvalue() const { return this->hasReturnValue_; }
    101             inline FunctionType getType() const { return this->type_; }
    102             inline MultiTypeMath getReturnvalue() const { return this->returnedValue_; }
    103 
    104             std::string getTypenameParam(unsigned int param) const { return (param >= 0 && param < 5) ? this->typeParam_[param] : ""; }
    105             std::string getTypenameReturnvalue() const { return this->typeReturnvalue_; }
    106 
    107             virtual void evaluateParam(unsigned int index, MultiTypeMath& param) const = 0;
    108 
    109         protected:
    110             unsigned int numParams_;
    111             bool hasReturnValue_;
    112             FunctionType type_;
    113             MultiTypeMath returnedValue_;
    114 
    115             std::string typeReturnvalue_;
    116             std::string typeParam_[MAX_FUNCTOR_ARGUMENTS];
    117     };
    118 
    119     class _CoreExport FunctorStatic : public Functor
    120     {
    121         public:
    122             virtual ~FunctorStatic() {}
    123             virtual void operator()(const MultiTypeMath& param1 = MT_null, const MultiTypeMath& param2 = MT_null, const MultiTypeMath& param3 = MT_null, const MultiTypeMath& param4 = MT_null, const MultiTypeMath& param5 = MT_null) = 0;
    124     };
    125 
    126     template <class T>
    127     class FunctorMember : public Functor
    128     {
    129         public:
    130             FunctorMember()
    131             {
    132                 constObject_ = 0;
    133                 object_ = 0;
    134                 bConstObject_ = false;
    135             }
    136             virtual ~FunctorMember() {}
    137 
    138             virtual void operator()(T* object, const MultiTypeMath& param1 = MT_null, const MultiTypeMath& param2 = MT_null, const MultiTypeMath& param3 = MT_null, const MultiTypeMath& param4 = MT_null, const MultiTypeMath& param5 = MT_null) = 0;
    139             virtual void operator()(const T* object, const MultiTypeMath& param1 = MT_null, const MultiTypeMath& param2 = MT_null, const MultiTypeMath& param3 = MT_null, const MultiTypeMath& param4 = MT_null, const MultiTypeMath& param5 = MT_null) = 0;
    140 
    141             virtual void operator()(const MultiTypeMath& param1 = MT_null, const MultiTypeMath& param2 = MT_null, const MultiTypeMath& param3 = MT_null, const MultiTypeMath& param4 = MT_null, const MultiTypeMath& param5 = MT_null)
    142             {
    143                 if (this->bConstObject_)
    144                 {
    145                     if (this->constObject_)
    146                         (*this)(this->constObject_, param1, param2, param3, param4, param5);
    147                     else
    148                     {
    149                         COUT(1) << "An error occurred in Functor.h:" << std::endl;
    150                         COUT(1) << "Error: No const object set." << std::endl;
    151                     }
    152                 }
    153                 else
    154                 {
    155                     if (this->object_)
    156                         (*this)(this->object_, param1, param2, param3, param4, param5);
    157                     else
    158                     {
    159                         COUT(1) << "An error occurred in Functor.h:" << std::endl;
    160                         COUT(1) << "Error: No object set." << std::endl;
    161                     }
    162                 }
    163             }
    164 
    165             void setObject(T* object)
    166             {
    167                 this->bConstObject_ = false;
    168                 this->object_ = object;
    169             }
    170 
    171             void setObject(const T* object)
    172             {
    173                 this->bConstObject_ = true;
    174                 this->constObject_ = object;
    175             }
    176 
    177         private:
    178             const T* constObject_;
    179             T* object_;
    180             bool bConstObject_;
    181     };
    182 
    183 
    184 
    185 #define FUNCTOR_TEMPLATE(ismember, returnvalue, numparams) FUNCTOR_TEMPLATE##ismember##returnvalue##numparams
    186 #define FUNCTOR_TEMPLATE000
    187 #define FUNCTOR_TEMPLATE001 template <class P1>
    188 #define FUNCTOR_TEMPLATE002 template <class P1, class P2>
    189 #define FUNCTOR_TEMPLATE003 template <class P1, class P2, class P3>
    190 #define FUNCTOR_TEMPLATE004 template <class P1, class P2, class P3, class P4>
    191 #define FUNCTOR_TEMPLATE005 template <class P1, class P2, class P3, class P4, class P5>
    192 #define FUNCTOR_TEMPLATE010 template <class R>
    193 #define FUNCTOR_TEMPLATE011 template <class R, class P1>
    194 #define FUNCTOR_TEMPLATE012 template <class R, class P1, class P2>
    195 #define FUNCTOR_TEMPLATE013 template <class R, class P1, class P2, class P3>
    196 #define FUNCTOR_TEMPLATE014 template <class R, class P1, class P2, class P3, class P4>
    197 #define FUNCTOR_TEMPLATE015 template <class R, class P1, class P2, class P3, class P4, class P5>
    198 #define FUNCTOR_TEMPLATE100 template <class T>
    199 #define FUNCTOR_TEMPLATE101 template <class T, class P1>
    200 #define FUNCTOR_TEMPLATE102 template <class T, class P1, class P2>
    201 #define FUNCTOR_TEMPLATE103 template <class T, class P1, class P2, class P3>
    202 #define FUNCTOR_TEMPLATE104 template <class T, class P1, class P2, class P3, class P4>
    203 #define FUNCTOR_TEMPLATE105 template <class T, class P1, class P2, class P3, class P4, class P5>
    204 #define FUNCTOR_TEMPLATE110 template <class T, class R>
    205 #define FUNCTOR_TEMPLATE111 template <class T, class R, class P1>
    206 #define FUNCTOR_TEMPLATE112 template <class T, class R, class P1, class P2>
    207 #define FUNCTOR_TEMPLATE113 template <class T, class R, class P1, class P2, class P3>
    208 #define FUNCTOR_TEMPLATE114 template <class T, class R, class P1, class P2, class P3, class P4>
    209 #define FUNCTOR_TEMPLATE115 template <class T, class R, class P1, class P2, class P3, class P4, class P5>
    210 
    211 
    212 
    213 #define FUNCTOR_TEMPLATE_CLASSES(ismember, returnvalue, numparams) FUNCTOR_TEMPLATE_CLASSES##ismember##returnvalue##numparams
    214 #define FUNCTOR_TEMPLATE_CLASSES000
    215 #define FUNCTOR_TEMPLATE_CLASSES001 <P1>
    216 #define FUNCTOR_TEMPLATE_CLASSES002 <P1, P2>
    217 #define FUNCTOR_TEMPLATE_CLASSES003 <P1, P2, P3>
    218 #define FUNCTOR_TEMPLATE_CLASSES004 <P1, P2, P3, P4>
    219 #define FUNCTOR_TEMPLATE_CLASSES005 <P1, P2, P3, P4, P5>
    220 #define FUNCTOR_TEMPLATE_CLASSES010 <R>
    221 #define FUNCTOR_TEMPLATE_CLASSES011 <R, P1>
    222 #define FUNCTOR_TEMPLATE_CLASSES012 <R, P1, P2>
    223 #define FUNCTOR_TEMPLATE_CLASSES013 <R, P1, P2, P3>
    224 #define FUNCTOR_TEMPLATE_CLASSES014 <R, P1, P2, P3, P4>
    225 #define FUNCTOR_TEMPLATE_CLASSES015 <R, P1, P2, P3, P4, P5>
    226 #define FUNCTOR_TEMPLATE_CLASSES100 <T>
    227 #define FUNCTOR_TEMPLATE_CLASSES101 <T, P1>
    228 #define FUNCTOR_TEMPLATE_CLASSES102 <T, P1, P2>
    229 #define FUNCTOR_TEMPLATE_CLASSES103 <T, P1, P2, P3>
    230 #define FUNCTOR_TEMPLATE_CLASSES104 <T, P1, P2, P3, P4>
    231 #define FUNCTOR_TEMPLATE_CLASSES105 <T, P1, P2, P3, P4, P5>
    232 #define FUNCTOR_TEMPLATE_CLASSES110 <T, R>
    233 #define FUNCTOR_TEMPLATE_CLASSES111 <T, R, P1>
    234 #define FUNCTOR_TEMPLATE_CLASSES112 <T, R, P1, P2>
    235 #define FUNCTOR_TEMPLATE_CLASSES113 <T, R, P1, P2, P3>
    236 #define FUNCTOR_TEMPLATE_CLASSES114 <T, R, P1, P2, P3, P4>
    237 #define FUNCTOR_TEMPLATE_CLASSES115 <T, R, P1, P2, P3, P4, P5>
    238 
    239 
    240 
    241 #define FUNCTOR_TYPENAME_PARAMS(numparams) FUNCTOR_TYPENAME_PARAMS##numparams
    242 #define FUNCTOR_TYPENAME_PARAMS0
    243 #define FUNCTOR_TYPENAME_PARAMS1 this->typeParam_[0] = typeToString<P1>();
    244 #define FUNCTOR_TYPENAME_PARAMS2 this->typeParam_[0] = typeToString<P1>(); this->typeParam_[1] = typeToString<P2>();
    245 #define FUNCTOR_TYPENAME_PARAMS3 this->typeParam_[0] = typeToString<P1>(); this->typeParam_[1] = typeToString<P2>(); this->typeParam_[2] = typeToString<P3>();
    246 #define FUNCTOR_TYPENAME_PARAMS4 this->typeParam_[0] = typeToString<P1>(); this->typeParam_[1] = typeToString<P2>(); this->typeParam_[2] = typeToString<P3>(); this->typeParam_[3] = typeToString<P4>();
    247 #define FUNCTOR_TYPENAME_PARAMS5 this->typeParam_[0] = typeToString<P1>(); this->typeParam_[1] = typeToString<P2>(); this->typeParam_[2] = typeToString<P3>(); this->typeParam_[3] = typeToString<P4>(); this->typeParam_[4] = typeToString<P5>();
    248 
    249 #define FUNCTOR_TYPENAME_RETURN(returnvalue) FUNCTOR_TYPENAME_RETURN##returnvalue
    250 #define FUNCTOR_TYPENAME_RETURN0
    251 #define FUNCTOR_TYPENAME_RETURN1 this->typeReturnvalue_ = typeToString<R>();
    252 
    253 
    254 
    255 #define FUNCTOR_FUNCTION_PARAMS(numparams) FUNCTOR_FUNCTION_PARAMS##numparams
    256 #define FUNCTOR_FUNCTION_PARAMS0
    257 #define FUNCTOR_FUNCTION_PARAMS1 P1 param1
    258 #define FUNCTOR_FUNCTION_PARAMS2 P1 param1, P2 param2
    259 #define FUNCTOR_FUNCTION_PARAMS3 P1 param1, P2 param2, P3 param3
    260 #define FUNCTOR_FUNCTION_PARAMS4 P1 param1, P2 param2, P3 param3, P4 param4
    261 #define FUNCTOR_FUNCTION_PARAMS5 P1 param1, P2 param2, P3 param3, P4 param4, P5 param5
    262 
    263 #define FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) FUNCTOR_FUNCTION_RETURNVALUE##returnvalue
    264 #define FUNCTOR_FUNCTION_RETURNVALUE0 void
    265 #define FUNCTOR_FUNCTION_RETURNVALUE1 R
    266 
    267 
    268 
    269 #define FUNCTOR_FUNCTION_CALL(numparams) FUNCTOR_FUNCTION_CALL##numparams
    270 #define FUNCTOR_FUNCTION_CALL0
    271 #define FUNCTOR_FUNCTION_CALL1 param1
    272 #define FUNCTOR_FUNCTION_CALL2 param1, param2
    273 #define FUNCTOR_FUNCTION_CALL3 param1, param2, param3
    274 #define FUNCTOR_FUNCTION_CALL4 param1, param2, param3, param4
    275 #define FUNCTOR_FUNCTION_CALL5 param1, param2, param3, param4, param5
    276 
    277 #define FUNCTOR_STORE_RETURNVALUE(returnvalue, functioncall) FUNCTOR_STORE_RETURNVALUE##returnvalue(functioncall)
    278 #define FUNCTOR_STORE_RETURNVALUE0(functioncall) functioncall
    279 #define FUNCTOR_STORE_RETURNVALUE1(functioncall) this->returnedValue_ = functioncall
    280 
    281 
    282 
    283 #define FUNCTOR_EVALUATE_PARAM(numparams) FUNCTOR_EVALUATE_PARAM##numparams
    284 #define FUNCTOR_EVALUATE_PARAM0
    285 #define FUNCTOR_EVALUATE_PARAM1 \
    286     if (index == 0) { P1 temp = param; param = temp; }
    287 #define FUNCTOR_EVALUATE_PARAM2 \
    288     if (index == 0) { P1 temp = param; param = temp; } \
    289     else if (index == 1) { P2 temp = param; param = temp; }
    290 #define FUNCTOR_EVALUATE_PARAM3 \
    291     if (index == 0) { P1 temp = param; param = temp; } \
    292     else if (index == 1) { P2 temp = param; param = temp; } \
    293     else if (index == 2) { P3 temp = param; param = temp; }
    294 #define FUNCTOR_EVALUATE_PARAM4 \
    295     if (index == 0) { P1 temp = param; param = temp; } \
    296     else if (index == 1) { P2 temp = param; param = temp; } \
    297     else if (index == 2) { P3 temp = param; param = temp; } \
    298     else if (index == 3) { P4 temp = param; param = temp; }
    299 #define FUNCTOR_EVALUATE_PARAM5 \
    300     if (index == 0) { P1 temp = param; param = temp; } \
    301     else if (index == 1) { P2 temp = param; param = temp; } \
    302     else if (index == 2) { P3 temp = param; param = temp; } \
    303     else if (index == 3) { P4 temp = param; param = temp; } \
    304     else if (index == 4) { P5 temp = param; param = temp; }
    305 
    306 
    307 
    308 
    309 
    310 #define CREATE_STATIC_FUNCTOR(returnvalue, numparams) \
    311     FUNCTOR_TEMPLATE(0, returnvalue, numparams) \
    312     class FunctorStatic##returnvalue##numparams : public FunctorStatic \
    313     { \
    314         public: \
    315             FunctorStatic##returnvalue##numparams(FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (*functionPointer)(FUNCTOR_FUNCTION_PARAMS(numparams))) \
    316             { \
    317                 this->numParams_ = numparams; \
    318                 this->hasReturnValue_ = returnvalue; \
    319                 this->type_ = FT_STATIC; \
    320                 this->functionPointer_ = functionPointer; \
    321                 \
    322                 FUNCTOR_TYPENAME_PARAMS(numparams); \
    323                 FUNCTOR_TYPENAME_RETURN(returnvalue); \
    324             } \
    325     \
    326             void operator()(const MultiTypeMath& param1 = MT_null, const MultiTypeMath& param2 = MT_null, const MultiTypeMath& param3 = MT_null, const MultiTypeMath& param4 = MT_null, const MultiTypeMath& param5 = MT_null) \
    327             { \
    328                 FUNCTOR_STORE_RETURNVALUE(returnvalue, (*this->functionPointer_)(FUNCTOR_FUNCTION_CALL(numparams))); \
    329             } \
    330     \
    331             virtual void evaluateParam(unsigned int index, MultiTypeMath& param) const \
    332             { \
    333                 FUNCTOR_EVALUATE_PARAM(numparams); \
    334             } \
    335     \
    336         private: \
    337             FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (*functionPointer_)(FUNCTOR_FUNCTION_PARAMS(numparams)); \
    338     }; \
    339     \
    340     \
    341     FUNCTOR_TEMPLATE(0, returnvalue, numparams) \
    342     inline FunctorStatic##returnvalue##numparams FUNCTOR_TEMPLATE_CLASSES(0, returnvalue, numparams)* createFunctor(FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (*functionPointer)(FUNCTOR_FUNCTION_PARAMS(numparams))) \
    343     { \
    344         return new FunctorStatic##returnvalue##numparams FUNCTOR_TEMPLATE_CLASSES(0, returnvalue, numparams) (functionPointer); \
    345     }
    346 
    347 
    348 
    349 
    350 
    351 #define CREATE_MEMBER_FUNCTOR(returnvalue, numparams) \
    352     FUNCTOR_TEMPLATE(1, returnvalue, numparams) \
    353     class FunctorMember##returnvalue##numparams : public FunctorMember<T> \
    354     { \
    355         public: \
    356             FunctorMember##returnvalue##numparams(FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (T::*functionPointer)(FUNCTOR_FUNCTION_PARAMS(numparams))) \
    357             { \
    358                 this->numParams_ = numparams; \
    359                 this->hasReturnValue_ = returnvalue; \
    360                 this->type_ = FT_MEMBER; \
    361                 this->functionPointer_ = functionPointer; \
    362             } \
    363     \
    364             void operator()(T* object, const MultiTypeMath& param1 = MT_null, const MultiTypeMath& param2 = MT_null, const MultiTypeMath& param3 = MT_null, const MultiTypeMath& param4 = MT_null, const MultiTypeMath& param5 = MT_null) \
    365             { \
    366                 FUNCTOR_STORE_RETURNVALUE(returnvalue, (*object.*this->functionPointer_)(FUNCTOR_FUNCTION_CALL(numparams))); \
    367             } \
    368     \
    369             void operator()(const T* object, const MultiTypeMath& param1 = MT_null, const MultiTypeMath& param2 = MT_null, const MultiTypeMath& param3 = MT_null, const MultiTypeMath& param4 = MT_null, const MultiTypeMath& param5 = MT_null) \
    370             { \
    371                 COUT(1) << "An error occurred in Functor.h:" << std::endl; \
    372                 COUT(1) << "Error: Function is not const." << std::endl; \
    373             } \
    374     \
    375             virtual void evaluateParam(unsigned int index, MultiTypeMath& param) const \
    376             { \
    377                 FUNCTOR_EVALUATE_PARAM(numparams); \
    378             } \
    379     \
    380         private: \
    381             FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (T::*functionPointer_)(FUNCTOR_FUNCTION_PARAMS(numparams)); \
    382     }; \
    383     \
    384     \
    385     FUNCTOR_TEMPLATE(1, returnvalue, numparams) \
    386     class FunctorConstMember##returnvalue##numparams : public FunctorMember<T> \
    387     { \
    388         public: \
    389             FunctorConstMember##returnvalue##numparams(FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (T::*functionPointer)(FUNCTOR_FUNCTION_PARAMS(numparams)) const) \
    390             { \
    391                 this->numParams_ = numparams; \
    392                 this->hasReturnValue_ = returnvalue; \
    393                 this->type_ = FT_CONSTMEMBER; \
    394                 this->functionPointer_ = functionPointer; \
    395             } \
    396     \
    397             void operator()(T* object, const MultiTypeMath& param1 = MT_null, const MultiTypeMath& param2 = MT_null, const MultiTypeMath& param3 = MT_null, const MultiTypeMath& param4 = MT_null, const MultiTypeMath& param5 = MT_null) \
    398             { \
    399                 FUNCTOR_STORE_RETURNVALUE(returnvalue, (*object.*this->functionPointer_)(FUNCTOR_FUNCTION_CALL(numparams))); \
    400             } \
    401     \
    402             void operator()(const T* object, const MultiTypeMath& param1 = MT_null, const MultiTypeMath& param2 = MT_null, const MultiTypeMath& param3 = MT_null, const MultiTypeMath& param4 = MT_null, const MultiTypeMath& param5 = MT_null) \
    403             { \
    404                 FUNCTOR_STORE_RETURNVALUE(returnvalue, (*object.*this->functionPointer_)(FUNCTOR_FUNCTION_CALL(numparams))); \
    405             } \
    406     \
    407             virtual void evaluateParam(unsigned int index, MultiTypeMath& param) const \
    408             { \
    409                 FUNCTOR_EVALUATE_PARAM(numparams); \
    410             } \
    411     \
    412         private: \
    413             FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (T::*functionPointer_)(FUNCTOR_FUNCTION_PARAMS(numparams)) const; \
    414     }; \
    415     \
    416     \
    417     FUNCTOR_TEMPLATE(1, returnvalue, numparams) \
    418     inline FunctorMember##returnvalue##numparams FUNCTOR_TEMPLATE_CLASSES(1, returnvalue, numparams)* createFunctor(FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (T::*functionPointer)(FUNCTOR_FUNCTION_PARAMS(numparams))) \
    419     { \
    420         return new FunctorMember##returnvalue##numparams FUNCTOR_TEMPLATE_CLASSES(1, returnvalue, numparams) (functionPointer); \
    421     } \
    422     \
    423     \
    424     FUNCTOR_TEMPLATE(1, returnvalue, numparams) \
    425     inline FunctorConstMember##returnvalue##numparams FUNCTOR_TEMPLATE_CLASSES(1, returnvalue, numparams)* createFunctor(FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (T::*functionPointer)(FUNCTOR_FUNCTION_PARAMS(numparams)) const) \
    426     { \
    427         return new FunctorConstMember##returnvalue##numparams FUNCTOR_TEMPLATE_CLASSES(1, returnvalue, numparams) (functionPointer); \
    428     }
    429 
    430 
    431 // disable annoying warning about forcing value to boolean
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * *   Author: *      Fabian 'x3n' Landau *   Co-authors: *      ... * *   Inspiration: Functor by Benjamin Grauer */#ifndef _Functor_H__#define _Functor_H__#include "CorePrereqs.h"#include "util/MultiTypeMath.h"#include "Debug.h"#define MAX_FUNCTOR_ARGUMENTS 5namespace orxonox{    enum FunctionType    {        FT_MEMBER,        FT_CONSTMEMBER,        FT_STATIC    };    template <class T>    inline std::string typeToString() { return "unknown"; }#define CreateTypeToStringTemplate(type) \    template <> \    inline std::string typeToString<type>() { return #type; } \    template <> \    inline std::string typeToString<type&>() { return #type; } \    template <> \    inline std::string typeToString<const type>() { return #type; } \    template <> \    inline std::string typeToString<const type&>() { return #type; }    CreateTypeToStringTemplate(int);    CreateTypeToStringTemplate(unsigned int);    CreateTypeToStringTemplate(char);    CreateTypeToStringTemplate(unsigned char);    CreateTypeToStringTemplate(short);    CreateTypeToStringTemplate(unsigned short);    CreateTypeToStringTemplate(long);    CreateTypeToStringTemplate(unsigned long);    CreateTypeToStringTemplate(float);    CreateTypeToStringTemplate(double);    CreateTypeToStringTemplate(long double);    CreateTypeToStringTemplate(bool);    CreateTypeToStringTemplate(Vector2);    CreateTypeToStringTemplate(Vector3);    CreateTypeToStringTemplate(Quaternion);    CreateTypeToStringTemplate(ColourValue);    CreateTypeToStringTemplate(Radian);    CreateTypeToStringTemplate(Degree);    template <> \    inline std::string typeToString<std::string>() { return "string"; } \    template <> \    inline std::string typeToString<std::string&>() { return "string"; } \    template <> \    inline std::string typeToString<const std::string>() { return "string"; } \    template <> \    inline std::string typeToString<const std::string&>() { return "string"; }    class _CoreExport Functor    {        public:            Functor() {}            virtual ~Functor() {}            virtual void operator()(const MultiTypeMath& param1 = MT_null, const MultiTypeMath& param2 = MT_null, const MultiTypeMath& param3 = MT_null, const MultiTypeMath& param4 = MT_null, const MultiTypeMath& param5 = MT_null) = 0;            inline unsigned int getParamCount() const { return this->numParams_; }            inline bool hasReturnvalue() const { return this->hasReturnValue_; }            inline FunctionType getType() const { return this->type_; }            inline MultiTypeMath getReturnvalue() const { return this->returnedValue_; }            std::string getTypenameParam(unsigned int param) const { return (param >= 0 && param < 5) ? this->typeParam_[param] : ""; }            std::string getTypenameReturnvalue() const { return this->typeReturnvalue_; }            virtual void evaluateParam(unsigned int index, MultiTypeMath& param) const = 0;        protected:            unsigned int numParams_;            bool hasReturnValue_;            FunctionType type_;            MultiTypeMath returnedValue_;            std::string typeReturnvalue_;            std::string typeParam_[MAX_FUNCTOR_ARGUMENTS];    };    class _CoreExport FunctorStatic : public Functor    {        public:            virtual ~FunctorStatic() {}            virtual void operator()(const MultiTypeMath& param1 = MT_null, const MultiTypeMath& param2 = MT_null, const MultiTypeMath& param3 = MT_null, const MultiTypeMath& param4 = MT_null, const MultiTypeMath& param5 = MT_null) = 0;    };    template <class T>    class FunctorMember : public Functor    {        public:            FunctorMember()            {                constObject_ = 0;                object_ = 0;                bConstObject_ = false;            }            virtual ~FunctorMember() {}            virtual void operator()(T* object, const MultiTypeMath& param1 = MT_null, const MultiTypeMath& param2 = MT_null, const MultiTypeMath& param3 = MT_null, const MultiTypeMath& param4 = MT_null, const MultiTypeMath& param5 = MT_null) = 0;            virtual void operator()(const T* object, const MultiTypeMath& param1 = MT_null, const MultiTypeMath& param2 = MT_null, const MultiTypeMath& param3 = MT_null, const MultiTypeMath& param4 = MT_null, const MultiTypeMath& param5 = MT_null) = 0;            virtual void operator()(const MultiTypeMath& param1 = MT_null, const MultiTypeMath& param2 = MT_null, const MultiTypeMath& param3 = MT_null, const MultiTypeMath& param4 = MT_null, const MultiTypeMath& param5 = MT_null)            {                if (this->bConstObject_)                {                    if (this->constObject_)                        (*this)(this->constObject_, param1, param2, param3, param4, param5);                    else                    {                        COUT(1) << "An error occurred in Functor.h:" << std::endl;                        COUT(1) << "Error: No const object set." << std::endl;                    }                }                else                {                    if (this->object_)                        (*this)(this->object_, param1, param2, param3, param4, param5);                    else                    {                        COUT(1) << "An error occurred in Functor.h:" << std::endl;                        COUT(1) << "Error: No object set." << std::endl;                    }                }            }            void setObject(T* object)            {                this->bConstObject_ = false;                this->object_ = object;            }            void setObject(const T* object)            {                this->bConstObject_ = true;                this->constObject_ = object;            }        private:            const T* constObject_;            T* object_;            bool bConstObject_;    };#define FUNCTOR_TEMPLATE(ismember, returnvalue, numparams) FUNCTOR_TEMPLATE##ismember##returnvalue##numparams#define FUNCTOR_TEMPLATE000#define FUNCTOR_TEMPLATE001 template <class P1>#define FUNCTOR_TEMPLATE002 template <class P1, class P2>#define FUNCTOR_TEMPLATE003 template <class P1, class P2, class P3>#define FUNCTOR_TEMPLATE004 template <class P1, class P2, class P3, class P4>#define FUNCTOR_TEMPLATE005 template <class P1, class P2, class P3, class P4, class P5>#define FUNCTOR_TEMPLATE010 template <class R>#define FUNCTOR_TEMPLATE011 template <class R, class P1>#define FUNCTOR_TEMPLATE012 template <class R, class P1, class P2>#define FUNCTOR_TEMPLATE013 template <class R, class P1, class P2, class P3>#define FUNCTOR_TEMPLATE014 template <class R, class P1, class P2, class P3, class P4>#define FUNCTOR_TEMPLATE015 template <class R, class P1, class P2, class P3, class P4, class P5>#define FUNCTOR_TEMPLATE100 template <class T>#define FUNCTOR_TEMPLATE101 template <class T, class P1>#define FUNCTOR_TEMPLATE102 template <class T, class P1, class P2>#define FUNCTOR_TEMPLATE103 template <class T, class P1, class P2, class P3>#define FUNCTOR_TEMPLATE104 template <class T, class P1, class P2, class P3, class P4>#define FUNCTOR_TEMPLATE105 template <class T, class P1, class P2, class P3, class P4, class P5>#define FUNCTOR_TEMPLATE110 template <class T, class R>#define FUNCTOR_TEMPLATE111 template <class T, class R, class P1>#define FUNCTOR_TEMPLATE112 template <class T, class R, class P1, class P2>#define FUNCTOR_TEMPLATE113 template <class T, class R, class P1, class P2, class P3>#define FUNCTOR_TEMPLATE114 template <class T, class R, class P1, class P2, class P3, class P4>#define FUNCTOR_TEMPLATE115 template <class T, class R, class P1, class P2, class P3, class P4, class P5>#define FUNCTOR_TEMPLATE_CLASSES(ismember, returnvalue, numparams) FUNCTOR_TEMPLATE_CLASSES##ismember##returnvalue##numparams#define FUNCTOR_TEMPLATE_CLASSES000#define FUNCTOR_TEMPLATE_CLASSES001 <P1>#define FUNCTOR_TEMPLATE_CLASSES002 <P1, P2>#define FUNCTOR_TEMPLATE_CLASSES003 <P1, P2, P3>#define FUNCTOR_TEMPLATE_CLASSES004 <P1, P2, P3, P4>#define FUNCTOR_TEMPLATE_CLASSES005 <P1, P2, P3, P4, P5>#define FUNCTOR_TEMPLATE_CLASSES010 <R>#define FUNCTOR_TEMPLATE_CLASSES011 <R, P1>#define FUNCTOR_TEMPLATE_CLASSES012 <R, P1, P2>#define FUNCTOR_TEMPLATE_CLASSES013 <R, P1, P2, P3>#define FUNCTOR_TEMPLATE_CLASSES014 <R, P1, P2, P3, P4>#define FUNCTOR_TEMPLATE_CLASSES015 <R, P1, P2, P3, P4, P5>#define FUNCTOR_TEMPLATE_CLASSES100 <T>#define FUNCTOR_TEMPLATE_CLASSES101 <T, P1>#define FUNCTOR_TEMPLATE_CLASSES102 <T, P1, P2>#define FUNCTOR_TEMPLATE_CLASSES103 <T, P1, P2, P3>#define FUNCTOR_TEMPLATE_CLASSES104 <T, P1, P2, P3, P4>#define FUNCTOR_TEMPLATE_CLASSES105 <T, P1, P2, P3, P4, P5>#define FUNCTOR_TEMPLATE_CLASSES110 <T, R>#define FUNCTOR_TEMPLATE_CLASSES111 <T, R, P1>#define FUNCTOR_TEMPLATE_CLASSES112 <T, R, P1, P2>#define FUNCTOR_TEMPLATE_CLASSES113 <T, R, P1, P2, P3>#define FUNCTOR_TEMPLATE_CLASSES114 <T, R, P1, P2, P3, P4>#define FUNCTOR_TEMPLATE_CLASSES115 <T, R, P1, P2, P3, P4, P5>#define FUNCTOR_TYPENAME_PARAMS(numparams) FUNCTOR_TYPENAME_PARAMS##numparams#define FUNCTOR_TYPENAME_PARAMS0#define FUNCTOR_TYPENAME_PARAMS1 this->typeParam_[0] = typeToString<P1>();#define FUNCTOR_TYPENAME_PARAMS2 this->typeParam_[0] = typeToString<P1>(); this->typeParam_[1] = typeToString<P2>();#define FUNCTOR_TYPENAME_PARAMS3 this->typeParam_[0] = typeToString<P1>(); this->typeParam_[1] = typeToString<P2>(); this->typeParam_[2] = typeToString<P3>();#define FUNCTOR_TYPENAME_PARAMS4 this->typeParam_[0] = typeToString<P1>(); this->typeParam_[1] = typeToString<P2>(); this->typeParam_[2] = typeToString<P3>(); this->typeParam_[3] = typeToString<P4>();#define FUNCTOR_TYPENAME_PARAMS5 this->typeParam_[0] = typeToString<P1>(); this->typeParam_[1] = typeToString<P2>(); this->typeParam_[2] = typeToString<P3>(); this->typeParam_[3] = typeToString<P4>(); this->typeParam_[4] = typeToString<P5>();#define FUNCTOR_TYPENAME_RETURN(returnvalue) FUNCTOR_TYPENAME_RETURN##returnvalue#define FUNCTOR_TYPENAME_RETURN0#define FUNCTOR_TYPENAME_RETURN1 this->typeReturnvalue_ = typeToString<R>();#define FUNCTOR_FUNCTION_PARAMS(numparams) FUNCTOR_FUNCTION_PARAMS##numparams#define FUNCTOR_FUNCTION_PARAMS0#define FUNCTOR_FUNCTION_PARAMS1 P1 param1#define FUNCTOR_FUNCTION_PARAMS2 P1 param1, P2 param2#define FUNCTOR_FUNCTION_PARAMS3 P1 param1, P2 param2, P3 param3#define FUNCTOR_FUNCTION_PARAMS4 P1 param1, P2 param2, P3 param3, P4 param4#define FUNCTOR_FUNCTION_PARAMS5 P1 param1, P2 param2, P3 param3, P4 param4, P5 param5#define FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) FUNCTOR_FUNCTION_RETURNVALUE##returnvalue#define FUNCTOR_FUNCTION_RETURNVALUE0 void#define FUNCTOR_FUNCTION_RETURNVALUE1 R#define FUNCTOR_FUNCTION_CALL(numparams) FUNCTOR_FUNCTION_CALL##numparams#define FUNCTOR_FUNCTION_CALL0#define FUNCTOR_FUNCTION_CALL1 param1#define FUNCTOR_FUNCTION_CALL2 param1, param2#define FUNCTOR_FUNCTION_CALL3 param1, param2, param3#define FUNCTOR_FUNCTION_CALL4 param1, param2, param3, param4#define FUNCTOR_FUNCTION_CALL5 param1, param2, param3, param4, param5#define FUNCTOR_STORE_RETURNVALUE(returnvalue, functioncall) FUNCTOR_STORE_RETURNVALUE##returnvalue(functioncall)#define FUNCTOR_STORE_RETURNVALUE0(functioncall) functioncall#define FUNCTOR_STORE_RETURNVALUE1(functioncall) this->returnedValue_ = functioncall#define FUNCTOR_EVALUATE_PARAM(numparams) FUNCTOR_EVALUATE_PARAM##numparams#define FUNCTOR_EVALUATE_PARAM0#define FUNCTOR_EVALUATE_PARAM1 \    if (index == 0) { P1 temp = param; param = temp; }#define FUNCTOR_EVALUATE_PARAM2 \    if (index == 0) { P1 temp = param; param = temp; } \    else if (index == 1) { P2 temp = param; param = temp; }#define FUNCTOR_EVALUATE_PARAM3 \    if (index == 0) { P1 temp = param; param = temp; } \    else if (index == 1) { P2 temp = param; param = temp; } \    else if (index == 2) { P3 temp = param; param = temp; }#define FUNCTOR_EVALUATE_PARAM4 \    if (index == 0) { P1 temp = param; param = temp; } \    else if (index == 1) { P2 temp = param; param = temp; } \    else if (index == 2) { P3 temp = param; param = temp; } \    else if (index == 3) { P4 temp = param; param = temp; }#define FUNCTOR_EVALUATE_PARAM5 \    if (index == 0) { P1 temp = param; param = temp; } \    else if (index == 1) { P2 temp = param; param = temp; } \    else if (index == 2) { P3 temp = param; param = temp; } \    else if (index == 3) { P4 temp = param; param = temp; } \    else if (index == 4) { P5 temp = param; param = temp; }#define CREATE_STATIC_FUNCTOR(returnvalue, numparams) \    FUNCTOR_TEMPLATE(0, returnvalue, numparams) \    class FunctorStatic##returnvalue##numparams : public FunctorStatic \    { \        public: \            FunctorStatic##returnvalue##numparams(FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (*functionPointer)(FUNCTOR_FUNCTION_PARAMS(numparams))) \            { \                this->numParams_ = numparams; \                this->hasReturnValue_ = returnvalue; \                this->type_ = FT_STATIC; \                this->functionPointer_ = functionPointer; \                \                FUNCTOR_TYPENAME_PARAMS(numparams); \                FUNCTOR_TYPENAME_RETURN(returnvalue); \            } \    \            void operator()(const MultiTypeMath& param1 = MT_null, const MultiTypeMath& param2 = MT_null, const MultiTypeMath& param3 = MT_null, const MultiTypeMath& param4 = MT_null, const MultiTypeMath& param5 = MT_null) \            { \                FUNCTOR_STORE_RETURNVALUE(returnvalue, (*this->functionPointer_)(FUNCTOR_FUNCTION_CALL(numparams))); \            } \    \            virtual void evaluateParam(unsigned int index, MultiTypeMath& param) const \            { \                FUNCTOR_EVALUATE_PARAM(numparams); \            } \    \        private: \            FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (*functionPointer_)(FUNCTOR_FUNCTION_PARAMS(numparams)); \    }; \    \    \    FUNCTOR_TEMPLATE(0, returnvalue, numparams) \    inline FunctorStatic##returnvalue##numparams FUNCTOR_TEMPLATE_CLASSES(0, returnvalue, numparams)* createFunctor(FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (*functionPointer)(FUNCTOR_FUNCTION_PARAMS(numparams))) \    { \        return new FunctorStatic##returnvalue##numparams FUNCTOR_TEMPLATE_CLASSES(0, returnvalue, numparams) (functionPointer); \    }#define CREATE_MEMBER_FUNCTOR(returnvalue, numparams) \    FUNCTOR_TEMPLATE(1, returnvalue, numparams) \    class FunctorMember##returnvalue##numparams : public FunctorMember<T> \    { \        public: \            FunctorMember##returnvalue##numparams(FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (T::*functionPointer)(FUNCTOR_FUNCTION_PARAMS(numparams))) \            { \                this->numParams_ = numparams; \                this->hasReturnValue_ = returnvalue; \                this->type_ = FT_MEMBER; \                this->functionPointer_ = functionPointer; \            } \    \            void operator()(T* object, const MultiTypeMath& param1 = MT_null, const MultiTypeMath& param2 = MT_null, const MultiTypeMath& param3 = MT_null, const MultiTypeMath& param4 = MT_null, const MultiTypeMath& param5 = MT_null) \            { \                FUNCTOR_STORE_RETURNVALUE(returnvalue, (*object.*this->functionPointer_)(FUNCTOR_FUNCTION_CALL(numparams))); \            } \    \            void operator()(const T* object, const MultiTypeMath& param1 = MT_null, const MultiTypeMath& param2 = MT_null, const MultiTypeMath& param3 = MT_null, const MultiTypeMath& param4 = MT_null, const MultiTypeMath& param5 = MT_null) \            { \                COUT(1) << "An error occurred in Functor.h:" << std::endl; \                COUT(1) << "Error: Function is not const." << std::endl; \            } \    \            virtual void evaluateParam(unsigned int index, MultiTypeMath& param) const \            { \                FUNCTOR_EVALUATE_PARAM(numparams); \            } \    \        private: \            FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (T::*functionPointer_)(FUNCTOR_FUNCTION_PARAMS(numparams)); \    }; \    \    \    FUNCTOR_TEMPLATE(1, returnvalue, numparams) \    class FunctorConstMember##returnvalue##numparams : public FunctorMember<T> \    { \        public: \            FunctorConstMember##returnvalue##numparams(FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (T::*functionPointer)(FUNCTOR_FUNCTION_PARAMS(numparams)) const) \            { \                this->numParams_ = numparams; \                this->hasReturnValue_ = returnvalue; \                this->type_ = FT_CONSTMEMBER; \                this->functionPointer_ = functionPointer; \            } \    \            void operator()(T* object, const MultiTypeMath& param1 = MT_null, const MultiTypeMath& param2 = MT_null, const MultiTypeMath& param3 = MT_null, const MultiTypeMath& param4 = MT_null, const MultiTypeMath& param5 = MT_null) \            { \                FUNCTOR_STORE_RETURNVALUE(returnvalue, (*object.*this->functionPointer_)(FUNCTOR_FUNCTION_CALL(numparams))); \            } \    \            void operator()(const T* object, const MultiTypeMath& param1 = MT_null, const MultiTypeMath& param2 = MT_null, const MultiTypeMath& param3 = MT_null, const MultiTypeMath& param4 = MT_null, const MultiTypeMath& param5 = MT_null) \            { \                FUNCTOR_STORE_RETURNVALUE(returnvalue, (*object.*this->functionPointer_)(FUNCTOR_FUNCTION_CALL(numparams))); \            } \    \            virtual void evaluateParam(unsigned int index, MultiTypeMath& param) const \            { \                FUNCTOR_EVALUATE_PARAM(numparams); \            } \    \        private: \            FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (T::*functionPointer_)(FUNCTOR_FUNCTION_PARAMS(numparams)) const; \    }; \    \    \    FUNCTOR_TEMPLATE(1, returnvalue, numparams) \    inline FunctorMember##returnvalue##numparams FUNCTOR_TEMPLATE_CLASSES(1, returnvalue, numparams)* createFunctor(FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (T::*functionPointer)(FUNCTOR_FUNCTION_PARAMS(numparams))) \    { \        return new FunctorMember##returnvalue##numparams FUNCTOR_TEMPLATE_CLASSES(1, returnvalue, numparams) (functionPointer); \    } \    \    \    FUNCTOR_TEMPLATE(1, returnvalue, numparams) \    inline FunctorConstMember##returnvalue##numparams FUNCTOR_TEMPLATE_CLASSES(1, returnvalue, numparams)* createFunctor(FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (T::*functionPointer)(FUNCTOR_FUNCTION_PARAMS(numparams)) const) \    { \        return new FunctorConstMember##returnvalue##numparams FUNCTOR_TEMPLATE_CLASSES(1, returnvalue, numparams) (functionPointer); \    }// disable annoying warning about forcing value to boolean
    4322#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
    4333#pragma warning(push)
    4344#pragma warning(disable:4100 4800)
    4355#endif
    436 
    437 #define CREATE_ALL_STATIC_FUNCTORS() \
    438     CREATE_STATIC_FUNCTOR(0, 0); \
    439     CREATE_STATIC_FUNCTOR(0, 1); \
    440     CREATE_STATIC_FUNCTOR(0, 2); \
    441     CREATE_STATIC_FUNCTOR(0, 3); \
    442     CREATE_STATIC_FUNCTOR(0, 4); \
    443     CREATE_STATIC_FUNCTOR(0, 5); \
    444     CREATE_STATIC_FUNCTOR(1, 0); \
    445     CREATE_STATIC_FUNCTOR(1, 1); \
    446     CREATE_STATIC_FUNCTOR(1, 2); \
    447     CREATE_STATIC_FUNCTOR(1, 3); \
    448     CREATE_STATIC_FUNCTOR(1, 4); \
    449     CREATE_STATIC_FUNCTOR(1, 5)
    450 
    451 
    452 #define CREATE_ALL_MEMBER_FUNCTORS() \
    453     CREATE_MEMBER_FUNCTOR(0, 0); \
    454     CREATE_MEMBER_FUNCTOR(0, 1); \
    455     CREATE_MEMBER_FUNCTOR(0, 2); \
    456     CREATE_MEMBER_FUNCTOR(0, 3); \
    457     CREATE_MEMBER_FUNCTOR(0, 4); \
    458     CREATE_MEMBER_FUNCTOR(0, 5); \
    459     CREATE_MEMBER_FUNCTOR(1, 0); \
    460     CREATE_MEMBER_FUNCTOR(1, 1); \
    461     CREATE_MEMBER_FUNCTOR(1, 2); \
    462     CREATE_MEMBER_FUNCTOR(1, 3); \
    463     CREATE_MEMBER_FUNCTOR(1, 4); \
    464     CREATE_MEMBER_FUNCTOR(1, 5)
    465 
    466 
    467     CREATE_ALL_STATIC_FUNCTORS();
    468     CREATE_ALL_MEMBER_FUNCTORS();
    469 }
    470 
    471 #if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
     6#define CREATE_ALL_STATIC_FUNCTORS() \    CREATE_STATIC_FUNCTOR(0, 0); \    CREATE_STATIC_FUNCTOR(0, 1); \    CREATE_STATIC_FUNCTOR(0, 2); \    CREATE_STATIC_FUNCTOR(0, 3); \    CREATE_STATIC_FUNCTOR(0, 4); \    CREATE_STATIC_FUNCTOR(0, 5); \    CREATE_STATIC_FUNCTOR(1, 0); \    CREATE_STATIC_FUNCTOR(1, 1); \    CREATE_STATIC_FUNCTOR(1, 2); \    CREATE_STATIC_FUNCTOR(1, 3); \    CREATE_STATIC_FUNCTOR(1, 4); \    CREATE_STATIC_FUNCTOR(1, 5)#define CREATE_ALL_MEMBER_FUNCTORS() \    CREATE_MEMBER_FUNCTOR(0, 0); \    CREATE_MEMBER_FUNCTOR(0, 1); \    CREATE_MEMBER_FUNCTOR(0, 2); \    CREATE_MEMBER_FUNCTOR(0, 3); \    CREATE_MEMBER_FUNCTOR(0, 4); \    CREATE_MEMBER_FUNCTOR(0, 5); \    CREATE_MEMBER_FUNCTOR(1, 0); \    CREATE_MEMBER_FUNCTOR(1, 1); \    CREATE_MEMBER_FUNCTOR(1, 2); \    CREATE_MEMBER_FUNCTOR(1, 3); \    CREATE_MEMBER_FUNCTOR(1, 4); \    CREATE_MEMBER_FUNCTOR(1, 5)    CREATE_ALL_STATIC_FUNCTORS();    CREATE_ALL_MEMBER_FUNCTORS();}#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
    4727#pragma warning(pop)
    473 #endif
    474 
    475 #endif /* _Functor_H__ */
     8#endif#endif /* _Functor_H__ */
  • code/branches/network/src/core/IRC.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/IRC.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/Identifier.cc

    • Property svn:eol-style set to native
    r1446 r1494  
    11/*
    22 *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
     3 *                    > www.orxonox.net < *
    54 *
    65 *   License notice:
     
    3130    @brief Implementation of the Identifier class.
    3231*/
    33 
    34 #include "Identifier.h"
    35 
    36 #include <ostream>
    37 
     32#include "Identifier.h"#include <ostream>
    3833#include "Factory.h"
    39 #include "ConsoleCommand.h"
    40 #include "CommandExecutor.h"
    41 
     34#include "ConsoleCommand.h"#include "CommandExecutor.h"
    4235namespace orxonox
    4336{
     
    4639    // ###############################
    4740    int Identifier::hierarchyCreatingCounter_s = 0; // Set the static member variable hierarchyCreatingCounter_s to zero (this static member variable is ok: it's used in main(), not before)
    48 
    4941    /**
    5042        @brief Constructor: No factory, no object created, new ObjectList and a unique networkID.
     
    5345    {
    5446        this->bCreatedOneObject_ = false;
    55         this->factory_ = 0;
     47        this->factory_ = 0;        this->bHasConfigValues_ = false;        this->bHasConsoleCommands_ = false;
    5648
    57         this->bHasConfigValues_ = false;
    58         this->bHasConsoleCommands_ = false;
    59 
    60         this->children_ = new std::set<const Identifier*>();
    61         this->directChildren_ = new std::set<const Identifier*>();
    62 
    63         // Use a static variable because the classID gets created before main() and that's why we should avoid static member variables
    64         static unsigned int classIDcounter_s = 0;
    65         this->classID_ = classIDcounter_s++;
    66     }
     49        this->children_ = new std::set<const Identifier*>();        this->directChildren_ = new std::set<const Identifier*>();        // Use a static variable because the classID gets created before main() and that's why we should avoid static member variables        static unsigned int classIDcounter_s = 0;
     50        this->classID_ = classIDcounter_s++;    }
    6751
    6852    /**
     
    7155    Identifier::~Identifier()
    7256    {
    73         delete this->children_;
    74         delete this->directChildren_;
    75     }
     57        delete this->children_;        delete this->directChildren_;    }
    7658
    7759    /**
     
    8567
    8668        if (parents)
    87         {
    88             this->parents_ = (*parents);
    89             this->directParents_ = (*parents);
    90 
    91             // Iterate through all parents
     69        {            this->parents_ = (*parents);            this->directParents_ = (*parents);            // Iterate through all parents
    9270            for (std::set<const Identifier*>::iterator it = parents->begin(); it != parents->end(); ++it)
    93             {
    94                 // Tell the parent we're one of it's children
    95                 (*it)->getChildrenIntern().insert((*it)->getChildrenIntern().end(), this);
    96 
    97                 // Erase all parents of our parent from our direct-parent-list
    98                 for (std::set<const Identifier*>::const_iterator it1 = (*it)->getParents().begin(); it1 != (*it)->getParents().end(); ++it1)
    99                 {
    100                     // Search for the parent's parent in our direct-parent-list
    101                     for (std::set<const Identifier*>::iterator it2 = this->directParents_.begin(); it2 != this->directParents_.end(); ++it2)
    102                     {
    103                         if ((*it1) == (*it2))
    104                         {
    105                             // We've found a non-direct parent in our list: Erase it
    106                             this->directParents_.erase(it2);
    107                             break;
    108                         }
    109                     }
    110                 }
    111             }
    112 
    113             // Now iterate through all direct parents
    114             for (std::set<const Identifier*>::iterator it = this->directParents_.begin(); it != this->directParents_.end(); ++it)
    115             {
    116                 // Tell the parent we're one of it's direct children
    117                 (*it)->getDirectChildrenIntern().insert((*it)->getDirectChildrenIntern().end(), this);
    118             }
     71            {                // Tell the parent we're one of it's children                (*it)->getChildrenIntern().insert((*it)->getChildrenIntern().end(), this);                // Erase all parents of our parent from our direct-parent-list                for (std::set<const Identifier*>::const_iterator it1 = (*it)->getParents().begin(); it1 != (*it)->getParents().end(); ++it1)                {                    // Search for the parent's parent in our direct-parent-list                    for (std::set<const Identifier*>::iterator it2 = this->directParents_.begin(); it2 != this->directParents_.end(); ++it2)                    {                        if ((*it1) == (*it2))                        {                            // We've found a non-direct parent in our list: Erase it                            this->directParents_.erase(it2);                            break;                        }                    }                }            }            // Now iterate through all direct parents            for (std::set<const Identifier*>::iterator it = this->directParents_.begin(); it != this->directParents_.end(); ++it)            {                // Tell the parent we're one of it's direct children                (*it)->getDirectChildrenIntern().insert((*it)->getDirectChildrenIntern().end(), this);            }
    11972        }
    12073    }
     
    13285        else
    13386        {
    134             COUT(1) << "An error occurred in Identifier.cc:" << std::endl;
    135             COUT(1) << "Error: Cannot fabricate an object of type '" << this->name_ << "'. Class has no factory." << std::endl;
     87            COUT(1) << "An error occurred in Identifier.cc:" << std::endl;            COUT(1) << "Error: Cannot fabricate an object of type '" << this->name_ << "'. Class has no factory." << std::endl;
    13688            COUT(1) << "Aborting..." << std::endl;
    13789            abort();
     
    175127    {
    176128        return (this->parents_.find(identifier) != this->parents_.end());
    177     }
    178 
    179     /**
    180         @brief Returns true, if the assigned identifier is a direct child of the given identifier.
    181         @param identifier The identifier to compare with
    182     */
    183     bool Identifier::isDirectChildOf(const Identifier* identifier) const
    184     {
    185         return (this->directParents_.find(identifier) != this->directParents_.end());
    186     }
    187 
     129    }    /**        @brief Returns true, if the assigned identifier is a direct child of the given identifier.        @param identifier The identifier to compare with    */    bool Identifier::isDirectChildOf(const Identifier* identifier) const    {        return (this->directParents_.find(identifier) != this->directParents_.end());    }
    188130    /**
    189131        @brief Returns true, if the assigned identifier is a parent of the given identifier.
     
    193135    {
    194136        return (this->children_->find(identifier) != this->children_->end());
    195     }
    196 
    197     /**
    198         @brief Returns true, if the assigned identifier is a direct parent of the given identifier.
    199         @param identifier The identifier to compare with
    200     */
    201     bool Identifier::isDirectParentOf(const Identifier* identifier) const
    202     {
    203         return (this->directChildren_->find(identifier) != this->directChildren_->end());
    204     }
    205 
    206     /**
    207         @brief Returns the map that stores all Identifiers.
    208         @return The map
    209     */
    210     std::map<std::string, Identifier*>& Identifier::getIdentifierMapIntern()
    211     {
    212         static std::map<std::string, Identifier*> identifierMap;
    213         return identifierMap;
    214     }
    215 
    216     /**
    217         @brief Returns the map that stores all Identifiers.
    218         @return The map
    219     */
    220     std::map<std::string, Identifier*>& Identifier::getLowercaseIdentifierMapIntern()
    221     {
    222         static std::map<std::string, Identifier*> lowercaseIdentifierMap;
    223         return lowercaseIdentifierMap;
    224     }
    225 
    226     /**
    227         @brief Adds the ConfigValueContainer of a variable, given by the string of its name.
    228         @param varname The name of the variablee
    229         @param container The container
    230     */
    231     void Identifier::addConfigValueContainer(const std::string& varname, ConfigValueContainer* container)
    232     {
    233         std::map<std::string, ConfigValueContainer*>::const_iterator it = this->configValues_.find(varname);
    234         if (it != this->configValues_.end())
    235         {
    236             COUT(2) << "Warning: Overwriting config-value with name " << varname << " in class " << this->getName() << "." << std::endl;
    237         }
    238 
    239         this->bHasConfigValues_ = true;
    240         this->configValues_[varname] = container;
    241         this->configValues_LC_[getLowercase(varname)] = container;
    242     }
    243 
    244     /**
    245         @brief Returns the ConfigValueContainer of a variable, given by the string of its name.
    246         @param varname The name of the variable
    247         @return The ConfigValueContainer
    248     */
    249     ConfigValueContainer* Identifier::getConfigValueContainer(const std::string& varname)
    250     {
    251         std::map<std::string, ConfigValueContainer*>::const_iterator it = configValues_.find(varname);
    252         if (it != configValues_.end())
    253             return ((*it).second);
    254         else
    255             return 0;
    256     }
    257 
    258     /**
    259         @brief Returns the ConfigValueContainer of a variable, given by the string of its name in lowercase.
    260         @param varname The name of the variable in lowercase
    261         @return The ConfigValueContainer
    262     */
    263     ConfigValueContainer* Identifier::getLowercaseConfigValueContainer(const std::string& varname)
    264     {
    265         std::map<std::string, ConfigValueContainer*>::const_iterator it = configValues_LC_.find(varname);
    266         if (it != configValues_LC_.end())
    267             return ((*it).second);
    268         else
    269             return 0;
    270     }
    271 
    272     /**
    273         @brief Adds a new console command of this class.
    274         @param executor The executor of the command
    275         @param bCreateShortcut If this is true a shortcut gets created so you don't have to add the classname to access this command
    276         @return The executor of the command
    277     */
    278     ConsoleCommand& Identifier::addConsoleCommand(ConsoleCommand* command, bool bCreateShortcut)
    279     {
    280         std::map<std::string, ConsoleCommand*>::const_iterator it = this->consoleCommands_.find(command->getName());
    281         if (it != this->consoleCommands_.end())
    282         {
    283             COUT(2) << "Warning: Overwriting console-command with name " << command->getName() << " in class " << this->getName() << "." << std::endl;
    284         }
    285 
    286         this->bHasConsoleCommands_ = true;
    287         this->consoleCommands_[command->getName()] = command;
    288         this->consoleCommands_LC_[getLowercase(command->getName())] = command;
    289 
    290         if (bCreateShortcut)
    291             CommandExecutor::addConsoleCommandShortcut(command);
    292 
    293         return (*command);
    294     }
    295 
    296     /**
    297         @brief Returns the executor of a console command with given name.
    298         @brief name The name of the requested console command
    299         @return The executor of the requested console command
    300     */
    301     ConsoleCommand* Identifier::getConsoleCommand(const std::string& name) const
    302     {
    303         std::map<std::string, ConsoleCommand*>::const_iterator it = this->consoleCommands_.find(name);
    304         if (it != this->consoleCommands_.end())
    305             return (*it).second;
    306         else
    307             return 0;
    308     }
    309 
    310     /**
    311         @brief Returns the executor of a console command with given name in lowercase.
    312         @brief name The name of the requested console command in lowercae
    313         @return The executor of the requested console command
    314     */
    315     ConsoleCommand* Identifier::getLowercaseConsoleCommand(const std::string& name) const
    316     {
    317         std::map<std::string, ConsoleCommand*>::const_iterator it = this->consoleCommands_LC_.find(name);
    318         if (it != this->consoleCommands_LC_.end())
    319             return (*it).second;
    320         else
    321             return 0;
    322     }
    323 
    324     /**
    325         @brief Lists the names of all Identifiers in a std::set<const Identifier*>.
    326         @param out The outstream
    327         @param list The list (or set) of Identifiers
    328         @return The outstream
    329     */
    330     std::ostream& operator<<(std::ostream& out, const std::set<const Identifier*>& list)
    331     {
    332         for (std::set<const Identifier*>::const_iterator it = list.begin(); it != list.end(); ++it)
    333             out << (*it)->getName() << " ";
    334 
    335         return out;
    336     }
    337 }
     137    }    /**        @brief Returns true, if the assigned identifier is a direct parent of the given identifier.        @param identifier The identifier to compare with    */    bool Identifier::isDirectParentOf(const Identifier* identifier) const    {        return (this->directChildren_->find(identifier) != this->directChildren_->end());    }    /**        @brief Returns the map that stores all Identifiers.        @return The map    */    std::map<std::string, Identifier*>& Identifier::getIdentifierMapIntern()    {        static std::map<std::string, Identifier*> identifierMap;        return identifierMap;    }    /**        @brief Returns the map that stores all Identifiers.        @return The map    */    std::map<std::string, Identifier*>& Identifier::getLowercaseIdentifierMapIntern()    {        static std::map<std::string, Identifier*> lowercaseIdentifierMap;        return lowercaseIdentifierMap;    }    /**        @brief Adds the ConfigValueContainer of a variable, given by the string of its name.        @param varname The name of the variablee        @param container The container    */    void Identifier::addConfigValueContainer(const std::string& varname, ConfigValueContainer* container)    {        std::map<std::string, ConfigValueContainer*>::const_iterator it = this->configValues_.find(varname);        if (it != this->configValues_.end())        {            COUT(2) << "Warning: Overwriting config-value with name " << varname << " in class " << this->getName() << "." << std::endl;        }        this->bHasConfigValues_ = true;        this->configValues_[varname] = container;        this->configValues_LC_[getLowercase(varname)] = container;    }    /**        @brief Returns the ConfigValueContainer of a variable, given by the string of its name.        @param varname The name of the variable        @return The ConfigValueContainer    */    ConfigValueContainer* Identifier::getConfigValueContainer(const std::string& varname)    {        std::map<std::string, ConfigValueContainer*>::const_iterator it = configValues_.find(varname);        if (it != configValues_.end())            return ((*it).second);        else            return 0;    }    /**        @brief Returns the ConfigValueContainer of a variable, given by the string of its name in lowercase.        @param varname The name of the variable in lowercase        @return The ConfigValueContainer    */    ConfigValueContainer* Identifier::getLowercaseConfigValueContainer(const std::string& varname)    {        std::map<std::string, ConfigValueContainer*>::const_iterator it = configValues_LC_.find(varname);        if (it != configValues_LC_.end())            return ((*it).second);        else            return 0;    }    /**        @brief Adds a new console command of this class.        @param executor The executor of the command        @param bCreateShortcut If this is true a shortcut gets created so you don't have to add the classname to access this command        @return The executor of the command    */    ConsoleCommand& Identifier::addConsoleCommand(ConsoleCommand* command, bool bCreateShortcut)    {        std::map<std::string, ConsoleCommand*>::const_iterator it = this->consoleCommands_.find(command->getName());        if (it != this->consoleCommands_.end())        {            COUT(2) << "Warning: Overwriting console-command with name " << command->getName() << " in class " << this->getName() << "." << std::endl;        }        this->bHasConsoleCommands_ = true;        this->consoleCommands_[command->getName()] = command;        this->consoleCommands_LC_[getLowercase(command->getName())] = command;        if (bCreateShortcut)            CommandExecutor::addConsoleCommandShortcut(command);        return (*command);    }    /**        @brief Returns the executor of a console command with given name.        @brief name The name of the requested console command        @return The executor of the requested console command    */    ConsoleCommand* Identifier::getConsoleCommand(const std::string& name) const    {        std::map<std::string, ConsoleCommand*>::const_iterator it = this->consoleCommands_.find(name);        if (it != this->consoleCommands_.end())            return (*it).second;        else            return 0;    }    /**        @brief Returns the executor of a console command with given name in lowercase.        @brief name The name of the requested console command in lowercae        @return The executor of the requested console command    */    ConsoleCommand* Identifier::getLowercaseConsoleCommand(const std::string& name) const    {        std::map<std::string, ConsoleCommand*>::const_iterator it = this->consoleCommands_LC_.find(name);        if (it != this->consoleCommands_LC_.end())            return (*it).second;        else            return 0;    }    /**        @brief Lists the names of all Identifiers in a std::set<const Identifier*>.        @param out The outstream        @param list The list (or set) of Identifiers        @return The outstream    */    std::ostream& operator<<(std::ostream& out, const std::set<const Identifier*>& list)    {        for (std::set<const Identifier*>::const_iterator it = list.begin(); it != list.end(); ++it)            out << (*it)->getName() << " ";        return out;    }}
  • code/branches/network/src/core/Identifier.h

    • Property svn:eol-style set to native
    r1446 r1494  
    11/*
    22 *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
     3 *                    > www.orxonox.net < *
    54 *
    65 *   License notice:
     
    6362#include "Debug.h"
    6463#include "Iterator.h"
    65 #include "MetaObjectList.h"
    66 #include "util/String.h"
    67 
     64#include "MetaObjectList.h"#include "util/String.h"
    6865namespace orxonox
    6966{
  • code/branches/network/src/core/IdentifierDistributor.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/IdentifierDistributor.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/InputBuffer.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/InputBuffer.h

    • Property svn:eol-style set to native
    r1490 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
    22  *   Author:
    23  *      Fabian 'x3n' Landau
    24  *   Co-authors:
    25  *      Reto Grieder
    26  *
    27  */
    28 
    29 #ifndef _InputBuffer_H__
    30 #define _InputBuffer_H__
    31 
    32 #include "CorePrereqs.h"
    33 
    34 #include <string>
    35 #include <list>
    36 
    37 #include "InputInterfaces.h"
    38 #include "OrxonoxClass.h"
    39 
    40 namespace orxonox
    41 {
    42     class BaseInputBufferListenerTuple
    43     {
    44     public:
    45         BaseInputBufferListenerTuple(bool bListenToAllChanges, bool bOnlySingleInput,
    46             bool trueKeyFalseChar, char _char, KeyCode::Enum key)
    47             : bListenToAllChanges_(bListenToAllChanges), bOnlySingleInput_(bOnlySingleInput),
    48               trueKeyFalseChar_(trueKeyFalseChar), char_(_char), key_(key)
    49         { }
    50         virtual ~BaseInputBufferListenerTuple() { }
    51         virtual void callFunction() = 0;
    52         bool bListenToAllChanges_;
    53         bool bOnlySingleInput_;
    54         bool trueKeyFalseChar_;
    55         char char_;
    56         KeyCode::Enum key_;
    57     };
    58 
    59     template <class T>
    60     class InputBufferListenerTuple : public BaseInputBufferListenerTuple
    61     {
    62     public:
    63         InputBufferListenerTuple(T* listener, void (T::*function)(), bool bListenToAllChanges,
    64             bool bOnlySingleInput, bool trueKeyFalseChar, char _char, KeyCode::Enum key)
    65             : BaseInputBufferListenerTuple(bListenToAllChanges, bOnlySingleInput, trueKeyFalseChar, _char, key),
    66               listener_(listener), function_(function)
    67         { }
    68         virtual ~InputBufferListenerTuple() { }
    69         void callFunction()
    70         {
    71             (listener_->*function_)();
    72         }
    73         T* listener_;
    74         void (T::*function_)();
    75     };
    76 
    77     class _CoreExport InputBuffer : public KeyHandler, public OrxonoxClass
    78     {
    79         public:
    80             InputBuffer();
    81             InputBuffer(const std::string allowedChars);
    82 
    83             void setConfigValues();
    84 
    85             template <class T>
    86             void registerListener(T* listener, void (T::*function)(), bool bOnlySingleInput)
    87             {
    88                 InputBufferListenerTuple<T>* newTuple = new InputBufferListenerTuple<T>(listener, (void (T::*)())function, true, bOnlySingleInput, false, '\0', KeyCode::Unassigned);
    89                 this->listeners_.insert(this->listeners_.end(), newTuple);
    90             }
    91             template <class T>
    92             void registerListener(T* listener, void (T::*function)() const, bool bOnlySingleInput)
    93             {
    94                 InputBufferListenerTuple<T>* newTuple = new InputBufferListenerTuple<T>(listener, (void (T::*)())function, true, bOnlySingleInput, false, '\0', KeyCode::Unassigned);
    95                 this->listeners_.insert(this->listeners_.end(), newTuple);
    96             }
    97             template <class T>
    98             void registerListener(T* listener, void (T::*function)(), char _char, bool bOnlySingleInput)
    99             {
    100                 InputBufferListenerTuple<T>* newTuple = new InputBufferListenerTuple<T>(listener, (void (T::*)())function, false, bOnlySingleInput, false, _char, KeyCode::Unassigned);
    101                 this->listeners_.insert(this->listeners_.end(), newTuple);
    102             }
    103             template <class T>
    104             void registerListener(T* listener, void (T::*function)() const, char _char, bool bOnlySingleInput)
    105             {
    106                 InputBufferListenerTuple<T>* newTuple = new InputBufferListenerTuple<T>(listener, (void (T::*)())function, false, bOnlySingleInput, false, _char, KeyCode::Unassigned);
    107                 this->listeners_.insert(this->listeners_.end(), newTuple);
    108             }
    109 
    110             template <class T>
    111             void registerListener(T* listener, void (T::*function)(), KeyCode::Enum key)
    112             {
    113                 InputBufferListenerTuple<T>* newTuple = new InputBufferListenerTuple<T>(listener, (void (T::*)())function, false, true, true, '\0', key);
    114                 this->listeners_.insert(this->listeners_.end(), newTuple);
    115             }
    116             template <class T>
    117             void registerListener(T* listener, void (T::*function)() const, KeyCode::Enum key)
    118             {
    119                 InputBufferListenerTuple<T>* newTuple = new InputBufferListenerTuple<T>(listener, (void (T::*)())function, false, true, true, '\0', key);
    120                 this->listeners_.insert(this->listeners_.end(), newTuple);
    121             }
    122 
    123             template <class T>
    124             void unregisterListener(T* listener)
    125             {
    126                 for (std::list<BaseInputBufferListenerTuple*>::iterator it = this->listeners_.begin(); it != this->listeners_.end(); )
    127                 {
    128                     InputBufferListenerTuple<T>* refListener = dynamic_cast<InputBufferListenerTuple<T>*>(*it);
    129                     if (refListener && refListener->listener_ == listener)
    130                         this->listeners_.erase(it++);
    131                     else
    132                         it++;
    133                 }
    134             }
    135 
    136             void set(const std::string& input, bool update = true);
    137             void insert(const std::string& input, bool update = true);
    138             void insert(const char& input, bool update = true);
    139             void clear(bool update = true);
    140             void removeAtCursor(bool update = true);
    141             void removeBehindCursor(bool update = true);
    142 
    143             void updated();
    144             void updated(const char& update, bool bSingleInput);
    145 
    146             inline std::string get() const
    147                 { return this->buffer_; }
    148             inline unsigned int getSize() const
    149                 { return this->buffer_.size(); }
    150 
    151             inline unsigned int getCursorPosition() const
    152                 { return this->cursor_; }
    153             inline void setCursorPosition(unsigned int cursor)
    154                 { if (cursor <= this->buffer_.size()) { this->cursor_ = cursor; } }
    155             inline void setCursorToEnd()
    156                 { this->cursor_ = this->buffer_.size(); }
    157             inline void setCursorToBegin()
    158                 { this->cursor_ = 0; }
    159             inline void increaseCursor()
    160                 { if (this->cursor_ < this->buffer_.size()) { ++this->cursor_; } }
    161             inline void decreaseCursor()
    162                 { if (this->cursor_ > 0) { --this->cursor_; } }
    163 
    164         private:
    165             bool charIsAllowed(const char& input);
    166 
    167             void keyPressed (const KeyEvent& evt);
    168             void keyReleased(const KeyEvent& evt) { }
    169             void keyHeld    (const KeyEvent& evt);
    170             void processKey (const KeyEvent &e);
    171 
    172             void tickInput(float dt, const HandlerState& state);
    173 
    174             std::string buffer_;
    175             std::list<BaseInputBufferListenerTuple*> listeners_;
    176             std::string allowedChars_;
    177             unsigned int cursor_;
    178 
    179             KeyCode::Enum lastKey_;
    180             float timeSinceKeyPressed_;
    181             float timeSinceKeyRepeated_;
    182             int keysToRepeat_;
    183 
    184             float keyRepeatDeleay_;
    185             float keyRepeatTime_;
    186     };
    187 }
    188 
    189 #endif /* _InputBuffer_H__ */
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * *   Author: *      Fabian 'x3n' Landau *   Co-authors: *      Reto Grieder * */#ifndef _InputBuffer_H__#define _InputBuffer_H__#include "CorePrereqs.h"#include <string>#include <list>#include "InputInterfaces.h"#include "OrxonoxClass.h"namespace orxonox{    class BaseInputBufferListenerTuple    {    public:        BaseInputBufferListenerTuple(bool bListenToAllChanges, bool bOnlySingleInput,            bool trueKeyFalseChar, char _char, KeyCode::Enum key)            : bListenToAllChanges_(bListenToAllChanges), bOnlySingleInput_(bOnlySingleInput),              trueKeyFalseChar_(trueKeyFalseChar), char_(_char), key_(key)        { }        virtual ~BaseInputBufferListenerTuple() { }        virtual void callFunction() = 0;        bool bListenToAllChanges_;        bool bOnlySingleInput_;        bool trueKeyFalseChar_;        char char_;        KeyCode::Enum key_;    };    template <class T>    class InputBufferListenerTuple : public BaseInputBufferListenerTuple    {    public:        InputBufferListenerTuple(T* listener, void (T::*function)(), bool bListenToAllChanges,            bool bOnlySingleInput, bool trueKeyFalseChar, char _char, KeyCode::Enum key)            : BaseInputBufferListenerTuple(bListenToAllChanges, bOnlySingleInput, trueKeyFalseChar, _char, key),              listener_(listener), function_(function)        { }
     2        virtual ~InputBufferListenerTuple() { }        void callFunction()        {            (listener_->*function_)();        }        T* listener_;        void (T::*function_)();    };    class _CoreExport InputBuffer : public KeyHandler, public OrxonoxClass    {        public:            InputBuffer();            InputBuffer(const std::string allowedChars);            void setConfigValues();            template <class T>            void registerListener(T* listener, void (T::*function)(), bool bOnlySingleInput)            {                InputBufferListenerTuple<T>* newTuple = new InputBufferListenerTuple<T>(listener, (void (T::*)())function, true, bOnlySingleInput, false, '\0', KeyCode::Unassigned);                this->listeners_.insert(this->listeners_.end(), newTuple);            }            template <class T>            void registerListener(T* listener, void (T::*function)() const, bool bOnlySingleInput)            {                InputBufferListenerTuple<T>* newTuple = new InputBufferListenerTuple<T>(listener, (void (T::*)())function, true, bOnlySingleInput, false, '\0', KeyCode::Unassigned);                this->listeners_.insert(this->listeners_.end(), newTuple);            }            template <class T>            void registerListener(T* listener, void (T::*function)(), char _char, bool bOnlySingleInput)            {                InputBufferListenerTuple<T>* newTuple = new InputBufferListenerTuple<T>(listener, (void (T::*)())function, false, bOnlySingleInput, false, _char, KeyCode::Unassigned);                this->listeners_.insert(this->listeners_.end(), newTuple);            }            template <class T>            void registerListener(T* listener, void (T::*function)() const, char _char, bool bOnlySingleInput)            {                InputBufferListenerTuple<T>* newTuple = new InputBufferListenerTuple<T>(listener, (void (T::*)())function, false, bOnlySingleInput, false, _char, KeyCode::Unassigned);                this->listeners_.insert(this->listeners_.end(), newTuple);            }            template <class T>            void registerListener(T* listener, void (T::*function)(), KeyCode::Enum key)            {                InputBufferListenerTuple<T>* newTuple = new InputBufferListenerTuple<T>(listener, (void (T::*)())function, false, true, true, '\0', key);                this->listeners_.insert(this->listeners_.end(), newTuple);            }            template <class T>            void registerListener(T* listener, void (T::*function)() const, KeyCode::Enum key)            {                InputBufferListenerTuple<T>* newTuple = new InputBufferListenerTuple<T>(listener, (void (T::*)())function, false, true, true, '\0', key);                this->listeners_.insert(this->listeners_.end(), newTuple);            }            template <class T>            void unregisterListener(T* listener)            {                for (std::list<BaseInputBufferListenerTuple*>::iterator it = this->listeners_.begin(); it != this->listeners_.end(); )                {                    InputBufferListenerTuple<T>* refListener = dynamic_cast<InputBufferListenerTuple<T>*>(*it);                    if (refListener && refListener->listener_ == listener)                        this->listeners_.erase(it++);                    else                        it++;                }            }            void set(const std::string& input, bool update = true);            void insert(const std::string& input, bool update = true);            void insert(const char& input, bool update = true);            void clear(bool update = true);            void removeAtCursor(bool update = true);            void removeBehindCursor(bool update = true);            void updated();            void updated(const char& update, bool bSingleInput);            inline std::string get() const                { return this->buffer_; }            inline unsigned int getSize() const                { return this->buffer_.size(); }            inline unsigned int getCursorPosition() const                { return this->cursor_; }            inline void setCursorPosition(unsigned int cursor)                { if (cursor <= this->buffer_.size()) { this->cursor_ = cursor; } }            inline void setCursorToEnd()                { this->cursor_ = this->buffer_.size(); }            inline void setCursorToBegin()                { this->cursor_ = 0; }            inline void increaseCursor()                { if (this->cursor_ < this->buffer_.size()) { ++this->cursor_; } }            inline void decreaseCursor()                { if (this->cursor_ > 0) { --this->cursor_; } }        private:            bool charIsAllowed(const char& input);            void keyPressed (const KeyEvent& evt);            void keyReleased(const KeyEvent& evt) { }            void keyHeld    (const KeyEvent& evt);            void processKey (const KeyEvent &e);            void tickInput(float dt, const HandlerState& state);            std::string buffer_;            std::list<BaseInputBufferListenerTuple*> listeners_;            std::string allowedChars_;            unsigned int cursor_;            KeyCode::Enum lastKey_;            float timeSinceKeyPressed_;            float timeSinceKeyRepeated_;            int keysToRepeat_;            float keyRepeatDeleay_;            float keyRepeatTime_;    };}#endif /* _InputBuffer_H__ */
  • code/branches/network/src/core/InputInterfaces.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/InputManager.cc

    • Property svn:eol-style set to native
    r1468 r1494  
    4141#include "KeyBinder.h"
    4242#include "CommandExecutor.h"
    43 #include "ConsoleCommand.h"
    44 #include "Shell.h"
    45 
     43#include "ConsoleCommand.h"#include "Shell.h"
    4644namespace orxonox
    4745{
     
    152150      addKeyHandler(buffer_, "buffer");
    153151      Shell::getInstance().setInputBuffer(buffer_);
    154 
    155152      keyBinder_ = new KeyBinder();
    156153      keyBinder_->loadBindings();
     
    197194        // register our listener in OIS.
    198195        keyboard_->setEventCallback(this);
    199         // note: OIS will not detect keys that have already been down when the keyboard was created.
    200         CCOUT(ORX_DEBUG) << "Created OIS keyboard" << std::endl;
     196        // note: OIS will not detect keys that have already been down when the keyboard was created.        CCOUT(ORX_DEBUG) << "Created OIS keyboard" << std::endl;
    201197        return true;
    202198      }
     
    314310  void InputManager::setConfigValues()
    315311  {
    316     if (joySticksSize_)
    317     {
    318       std::vector<MultiTypeMath> coeffPos;
     312    if (joySticksSize_)    {      std::vector<MultiTypeMath> coeffPos;
    319313      std::vector<MultiTypeMath> coeffNeg;
    320314      std::vector<MultiTypeMath> zero;
     
    329323      }
    330324
    331       ConfigValueContainer* cont = getIdentifier()->getConfigValueContainer("CoeffPos");
    332       if (!cont)
    333       {
    334           cont = new ConfigValueContainer(CFT_Keybindings, getIdentifier(), "CoeffPos", coeffPos);
    335           getIdentifier()->addConfigValueContainer("CoeffPos", cont);
    336       }
    337       cont->getValue(&coeffPos);
    338 
    339       cont = getIdentifier()->getConfigValueContainer("CoeffNeg");
    340       if (!cont)
    341       {
    342           cont = new ConfigValueContainer(CFT_Keybindings, getIdentifier(), "CoeffNeg", coeffNeg);
    343           getIdentifier()->addConfigValueContainer("CoeffNeg", cont);
    344       }
    345       cont->getValue(&coeffNeg);
    346 
    347       cont = getIdentifier()->getConfigValueContainer("Zero");
    348       if (!cont)
    349       {
    350           cont = new ConfigValueContainer(CFT_Keybindings, getIdentifier(), "Zero", zero);
    351           getIdentifier()->addConfigValueContainer("Zero", cont);
    352       }
    353       cont->getValue(&zero);
    354 
    355       // copy values to our own variables
    356       for (unsigned int i = 0; i < 24; i++)
    357       {
    358         joySticksCalibration_[0].positiveCoeff[i] = coeffPos[i];
    359         joySticksCalibration_[0].negativeCoeff[i] = coeffNeg[i];
    360         joySticksCalibration_[0].zeroStates[i]    = zero[i];
    361       }
    362     }
    363   }
     325      ConfigValueContainer* cont = getIdentifier()->getConfigValueContainer("CoeffPos");      if (!cont)      {          cont = new ConfigValueContainer(CFT_Keybindings, getIdentifier(), "CoeffPos", coeffPos);          getIdentifier()->addConfigValueContainer("CoeffPos", cont);      }      cont->getValue(&coeffPos);      cont = getIdentifier()->getConfigValueContainer("CoeffNeg");      if (!cont)      {          cont = new ConfigValueContainer(CFT_Keybindings, getIdentifier(), "CoeffNeg", coeffNeg);          getIdentifier()->addConfigValueContainer("CoeffNeg", cont);      }      cont->getValue(&coeffNeg);      cont = getIdentifier()->getConfigValueContainer("Zero");      if (!cont)      {          cont = new ConfigValueContainer(CFT_Keybindings, getIdentifier(), "Zero", zero);          getIdentifier()->addConfigValueContainer("Zero", cont);      }      cont->getValue(&zero);      // copy values to our own variables      for (unsigned int i = 0; i < 24; i++)      {        joySticksCalibration_[0].positiveCoeff[i] = coeffPos[i];        joySticksCalibration_[0].negativeCoeff[i] = coeffNeg[i];        joySticksCalibration_[0].zeroStates[i]    = zero[i];      }    }  }
    364326
    365327  /**
     
    662624      else
    663625        joySticksCalibration_[0].positiveCoeff[i] =  1.0f;
    664 
    665626      // config value
    666       ConfigValueContainer* cont = getIdentifier()->getConfigValueContainer("CoeffPos");
    667       assert(cont);
    668       cont->set(i, joySticksCalibration_[0].positiveCoeff[i]);
    669 
    670       // negative coefficient
     627      ConfigValueContainer* cont = getIdentifier()->getConfigValueContainer("CoeffPos");      assert(cont);      cont->set(i, joySticksCalibration_[0].positiveCoeff[i]);      // negative coefficient
    671628      if (marginalsMin_[i] == INT_MAX)
    672629        marginalsMin_[i] = -32768;
    673630      // coefficients
    674631      if (marginalsMin_[i] - joySticksCalibration_[0].zeroStates[i])
    675         joySticksCalibration_[0].negativeCoeff[i] = -1.0f/(marginalsMin_[i] - joySticksCalibration_[0].zeroStates[i]);
    676       else
    677         joySticksCalibration_[0].negativeCoeff[i] =  1.0f;
    678       // config value
    679       cont = getIdentifier()->getConfigValueContainer("CoeffNeg");
    680       assert(cont);
    681       cont->set(i, joySticksCalibration_[0].negativeCoeff[i]);
    682 
    683       // zero states
     632        joySticksCalibration_[0].negativeCoeff[i] = -1.0f/(marginalsMin_[i] - joySticksCalibration_[0].zeroStates[i]);      else        joySticksCalibration_[0].negativeCoeff[i] =  1.0f;      // config value
     633      cont = getIdentifier()->getConfigValueContainer("CoeffNeg");      assert(cont);      cont->set(i, joySticksCalibration_[0].negativeCoeff[i]);      // zero states
    684634      if (i < 8)
    685635      {
     
    697647      }
    698648      // config value
    699       cont = getIdentifier()->getConfigValueContainer("Zero");
    700       assert(cont);
    701       cont->set(i, joySticksCalibration_[0].zeroStates[i]);
    702     }
     649      cont = getIdentifier()->getConfigValueContainer("Zero");      assert(cont);      cont->set(i, joySticksCalibration_[0].zeroStates[i]);    }
    703650  }
    704651
  • code/branches/network/src/core/InputManager.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/Iterator.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/KeyBinder.cc

    • Property svn:eol-style set to native
    r1465 r1494  
    4141#include "ConfigValueIncludes.h"
    4242#include "CoreIncludes.h"
    43 #include "CommandExecutor.h"
    44 #include "ConsoleCommand.h"
    45 #include "Executor.h"
     43#include "CommandExecutor.h"#include "ConsoleCommand.h"#include "Executor.h"
    4644// TODO: only needed by the CalibratorCallback class; move to new file
    4745#include "InputManager.h"
  • code/branches/network/src/core/KeyBinder.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/Language.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/Language.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/Level.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/Loader.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/Loader.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/MetaObjectList.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/MetaObjectList.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/Namespace.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/Namespace.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/NamespaceNode.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/NamespaceNode.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/ObjectList.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/OrxonoxClass.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/OrxonoxClass.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/OutputBuffer.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/OutputBuffer.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/OutputHandler.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/OutputHandler.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/Script.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/Script.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/Script_clean.h

    • Property svn:eol-style set to native
    r1076 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
    22  *   Author:
    23  *      Benjamin Knecht
    24  *   Co-authors:
    25  *      ...
    26  *
    27  */
    28 
    29 /**
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * *   Author: *      Benjamin Knecht *   Co-authors: *      ... * *//**
    302 @file  script.h
    313 @brief Representation of an interface to lua
  • code/branches/network/src/core/Shell.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/Shell.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/SignalHandler.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/SignalHandler.h

    • Property svn:eol-style set to native
    r1293 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
    22  *   Author:
    23  *      Christoph Renner
    24  *   Co-authors:
    25  *      ...
    26  *
    27  */
    28 
    29 /**
    30     @file SignalHandler.h
    31     @brief Definition of the SignalHandler class.
    32 */
    33 
    34 #ifndef _SignalHandler_H__
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * *   Author: *      Christoph Renner *   Co-authors: *      ... * */
     2/**    @file SignalHandler.h    @brief Definition of the SignalHandler class.*/#ifndef _SignalHandler_H__
    353#define _SignalHandler_H__
    364
  • code/branches/network/src/core/TclBind.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/TclBind.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/TclThreadManager.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/TclThreadManager.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/Tickable.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/Tickable.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/XMLPort.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/core/XMLPort.h

    • Property svn:eol-style set to native
  • code/branches/network/src/core/tolua/tolua.pkg

    • Property svn:eol-style set to native
  • code/branches/network/src/cpptcl/CMakeLists.txt

    • Property svn:eol-style set to native
  • code/branches/network/src/cpptcl/CREDITS

    • Property svn:eol-style set to native
  • code/branches/network/src/cpptcl/CppTcl.cc

    • Property svn:eol-style set to native
    r1461 r1494  
    855855interpreter::interpreter()
    856856{
    857      interp_ =  Tcl_CreateInterp();
    858      owner_ = true;
    859 }
    860 
    861 interpreter::interpreter(string const &libpath)
    862 {
    863      interp_ =  Tcl_CreateInterp();
    864      owner_ = true;
    865 
    866      try
    867      {
    868         this->eval("set tcl_library " + libpath);
    869         Tcl_Init(this->interp_);
    870      } catch (...) {}
    871 }
     857     interp_ =  Tcl_CreateInterp();     owner_ = true;
     858}interpreter::interpreter(string const &libpath){     interp_ =  Tcl_CreateInterp();     owner_ = true;     try     {        this->eval("set tcl_library " + libpath);        Tcl_Init(this->interp_);     } catch (...) {}}
    872859
    873860interpreter::interpreter(Tcl_Interp *interp, bool owner)
     
    883870          // clear all callback info belonging to this interpreter
    884871          clear_definitions(interp_);
    885 
    886           Tcl_DeleteInterp(interp_);
    887      }
     872          Tcl_DeleteInterp(interp_);     }
    888873}
    889874
  • code/branches/network/src/cpptcl/CppTcl.h

    • Property svn:eol-style set to native
    r1214 r1494  
    467467{
    468468public:
    469      interpreter();
    470      interpreter(std::string const &libpath);
     469     interpreter();     interpreter(std::string const &libpath);
    471470     interpreter(Tcl_Interp *, bool owner = true);
    472471     ~interpreter();
  • code/branches/network/src/cpptcl/LICENSE

    • Property svn:eol-style set to native
  • code/branches/network/src/cpptcl/README

    • Property svn:eol-style set to native
  • code/branches/network/src/cpptcl/details/callbacks.h

    • Property svn:eol-style set to native
  • code/branches/network/src/cpptcl/details/callbacks_v.h

    • Property svn:eol-style set to native
  • code/branches/network/src/cpptcl/details/constructors.h

    • Property svn:eol-style set to native
  • code/branches/network/src/cpptcl/details/conversions.h

    • Property svn:eol-style set to native
  • code/branches/network/src/cpptcl/details/dispatchers.h

    • Property svn:eol-style set to native
  • code/branches/network/src/cpptcl/details/metahelpers.h

    • Property svn:eol-style set to native
  • code/branches/network/src/cpptcl/details/methods.h

    • Property svn:eol-style set to native
  • code/branches/network/src/cpptcl/details/methods_v.h

    • Property svn:eol-style set to native
  • code/branches/network/src/network/CMakeLists.txt

    • Property svn:eol-style set to native
  • code/branches/network/src/network/Client.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/network/Client.h

    • Property svn:eol-style set to native
  • code/branches/network/src/network/ClientConnection.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/network/ClientConnection.h

    • Property svn:eol-style set to native
  • code/branches/network/src/network/ClientInformation.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/network/ClientInformation.h

    • Property svn:eol-style set to native
  • code/branches/network/src/network/ConnectionManager.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/network/ConnectionManager.h

    • Property svn:eol-style set to native
  • code/branches/network/src/network/GameStateClient.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/network/GameStateClient.h

    • Property svn:eol-style set to native
  • code/branches/network/src/network/GameStateManager.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/network/GameStateManager.h

    • Property svn:eol-style set to native
  • code/branches/network/src/network/Makefile.norm

    • Property svn:eol-style set to native
  • code/branches/network/src/network/Makefile.tardis

    • Property svn:eol-style set to native
  • code/branches/network/src/network/Makefile.test

    • Property svn:eol-style set to native
  • code/branches/network/src/network/NetworkPrereqs.h

    • Property svn:eol-style set to native
  • code/branches/network/src/network/PacketBuffer.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/network/PacketBuffer.h

    • Property svn:eol-style set to native
  • code/branches/network/src/network/PacketDecoder.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/network/PacketGenerator.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/network/PacketManager.h

    • Property svn:eol-style set to native
  • code/branches/network/src/network/PacketTypes.h

    • Property svn:eol-style set to native
  • code/branches/network/src/network/Server.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/network/Server.h

    • Property svn:eol-style set to native
  • code/branches/network/src/network/Synchronisable.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/network/Synchronisable.h

    • Property svn:eol-style set to native
  • code/branches/network/src/network/TODO

    • Property svn:eol-style set to native
  • code/branches/network/src/network/diffTest.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/network/dummyclient.cc

    • Property svn:eol-style set to native
    r1293 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
    22  *   Author:
    23  *      Oliver Scheuss, (C) 2007
    24  *   Co-authors:
    25  *      ...
    26  *
    27  */
    28 
    29 //o
    30 // Dummy client to test ConnectionManager and PacketBuffer classes
    31 //
    32 // Author: Oliver Scheuss
    33 
    34 #include <iostream>
    35 #include <string>
    36 #include <enet/enet.h>
    37 
    38 #include "util/Sleep.h"
    39 #include "PacketManager.h"
    40 #include "PacketTypes.h"
    41 
    42 using namespace std;
    43 
    44 int main(){
    45   ENetHost * client;
    46   ENetAddress address;
    47   ENetEvent event;
    48   ENetPeer *peer;
    49   network::PacketGenerator pck;
    50 
    51   enet_initialize();
    52   atexit(enet_deinitialize);
    53 
    54   cout << "Enter address of the server xxx.xxx.xxx.xxx (enter for localhost)" << endl;
    55   string str;
    56   getline(cin, str);
    57   cout << "You entered: " << str << endl;
    58   if(str.compare("")==0)
    59     str="127.0.0.1";
    60 
    61   enet_address_set_host(&address, str.c_str());
    62   address.port = 55556;
    63 
    64   // create client object
    65   client = enet_host_create(NULL, 2, 0, 0);
    66 
    67   if(client==NULL){
    68     fprintf(stderr, "An error occured");
    69     exit(EXIT_FAILURE);
    70   }
    71   // connect peer
    72   peer = enet_host_connect(client, &address, 2);
    73   if(peer==NULL){
    74     fprintf(stderr, "Peer establishing error");
    75     exit(EXIT_FAILURE);
    76   }
    77   // wait 5 seconds for the connection attempt to succeed
    78   if(enet_host_service(client, &event, 5000) > 0 && event.type == ENET_EVENT_TYPE_CONNECT){
    79     cout << "Connection to " << str << " succeeded." << endl;
    80     //puts("Connection to localhost:5555 succeeded.");
    81   }else{
    82     enet_peer_reset(peer);
    83     cout << "Connection to " << str << " failed." << endl;
    84     //puts("Connection to localhost:5555 failed.");
    85     exit(EXIT_FAILURE);
    86   }
    87 
    88   for(int i=0; i<10; i++){
    89     // weihnachtsmann bringt packete
    90     //ENetPacket *packet = enet_packet_create ("packet1234", strlen("packet1234") + 1, ENET_PACKET_FLAG_RELIABLE);
    91     // extend the packet and append the string foo to it
    92     // send packet to peer on channel id 0
    93     enet_peer_send(peer, 1, pck.chatMessage("test2"));
    94     // keep the timeout very small for low delay
    95     if(enet_host_service(client, &event, 1)==0){
    96       cout << "successfully sent: " << event.type << endl;
    97     }else{
    98       cout << "failed sending" << endl;
    99     }
    100     usleep(1000000);
    101   }
    102 
    103   // now disconnect
    104   //   enet_peer_disconnect (peer);
    105   enet_peer_disconnect (peer, 0);
    106   // 3 seconds timeout
    107   while(enet_host_service(client, &event, 3000) > 0){
    108     switch (event.type)
    109     {
    110     case ENET_EVENT_TYPE_RECEIVE:
    111       enet_packet_destroy(event.packet);
    112       break;
    113     case ENET_EVENT_TYPE_DISCONNECT:
    114       puts("Disconnection succeeded.");
    115       return 0;
    116     }
    117   }
    118   // if disconnect failed
    119   enet_peer_reset(peer);
    120 
    121 
    122 
    123   return 0;
    124 }
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * *   Author: *      Oliver Scheuss, (C) 2007 *   Co-authors: *      ... * *///o// Dummy client to test ConnectionManager and PacketBuffer classes//// Author: Oliver Scheuss#include <iostream>#include <string>#include <enet/enet.h>#include "util/Sleep.h"#include "PacketManager.h"#include "PacketTypes.h"
     2using namespace std;int main(){  ENetHost * client;  ENetAddress address;  ENetEvent event;  ENetPeer *peer;  network::PacketGenerator pck;  enet_initialize();  atexit(enet_deinitialize);  cout << "Enter address of the server xxx.xxx.xxx.xxx (enter for localhost)" << endl;  string str;  getline(cin, str);  cout << "You entered: " << str << endl;  if(str.compare("")==0)    str="127.0.0.1";  enet_address_set_host(&address, str.c_str());  address.port = 55556;  // create client object  client = enet_host_create(NULL, 2, 0, 0);  if(client==NULL){    fprintf(stderr, "An error occured");    exit(EXIT_FAILURE);  }  // connect peer  peer = enet_host_connect(client, &address, 2);  if(peer==NULL){    fprintf(stderr, "Peer establishing error");    exit(EXIT_FAILURE);  }  // wait 5 seconds for the connection attempt to succeed  if(enet_host_service(client, &event, 5000) > 0 && event.type == ENET_EVENT_TYPE_CONNECT){    cout << "Connection to " << str << " succeeded." << endl;    //puts("Connection to localhost:5555 succeeded.");  }else{    enet_peer_reset(peer);    cout << "Connection to " << str << " failed." << endl;    //puts("Connection to localhost:5555 failed.");    exit(EXIT_FAILURE);  }  for(int i=0; i<10; i++){    // weihnachtsmann bringt packete    //ENetPacket *packet = enet_packet_create ("packet1234", strlen("packet1234") + 1, ENET_PACKET_FLAG_RELIABLE);    // extend the packet and append the string foo to it    // send packet to peer on channel id 0    enet_peer_send(peer, 1, pck.chatMessage("test2"));    // keep the timeout very small for low delay    if(enet_host_service(client, &event, 1)==0){      cout << "successfully sent: " << event.type << endl;    }else{      cout << "failed sending" << endl;    }    usleep(1000000);  }  // now disconnect  //   enet_peer_disconnect (peer);  enet_peer_disconnect (peer, 0);  // 3 seconds timeout  while(enet_host_service(client, &event, 3000) > 0){    switch (event.type)    {    case ENET_EVENT_TYPE_RECEIVE:      enet_packet_destroy(event.packet);      break;    case ENET_EVENT_TYPE_DISCONNECT:      puts("Disconnection succeeded.");      return 0;    }  }  // if disconnect failed  enet_peer_reset(peer);  return 0;}
  • code/branches/network/src/network/dummyclient2.cc

    • Property svn:eol-style set to native
    r1293 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
    22  *   Author:
    23  *      Oliver Scheuss, (C) 2007
    24  *   Co-authors:
    25  *      ...
    26  *
    27  */
    28 
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * *   Author: *      Oliver Scheuss, (C) 2007 *   Co-authors: *      ... * */
    292//
    303// Dummy client to test ConnectionManager, PacketBuffer, ClientConnection and other classes
  • code/branches/network/src/network/dummyclient3.cc

    • Property svn:eol-style set to native
    r1446 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
    22  *   Author:
    23  *      ...
    24  *   Co-authors:
    25  *      ...
    26  *
    27  */
    28 
    29 #include "Client.h"
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * *   Author: *      ... *   Co-authors: *      ... * */#include "Client.h"
    302
    313#include <iostream>
     
    5022
    5123  Client client( str, PORT );
    52   if ( client.establishConnection() )
    53   {
    54     COUT(3) << "connection established" << std::endl;
    55   }
    56   else
    57   {
    58     COUT(0) << "problems establishing connection" << std::endl;
    59   }
     24  if ( client.establishConnection() )  {
     25    COUT(3) << "connection established" << std::endl;  }
     26  else  {    COUT(0) << "problems establishing connection" << std::endl;  }
    6027  char message[10000];
    6128  char signs[] = "abcdefghijklmnopqrstuvwxy";
  • code/branches/network/src/network/dummyclient4.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/network/dummyserver.cc

    • Property svn:eol-style set to native
    r1293 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
    22  *   Author:
    23  *      Oliver Scheuss, (C) 2007
    24  *   Co-authors:
    25  *      ...
    26  *
    27  */
    28 
    29 //
    30 // Dummy server to test ConnectionManager and PacketBuffer classes
    31 //
    32 // Author: Oliver Scheuss
    33 
    34 #include <iostream>
    35 #include <enet/enet.h>
    36 
    37 #include "util/Sleep.h"
    38 #include "ConnectionManager.h"
    39 #include "PacketManager.h"
    40 #include "PacketTypes.h"
    41 #include "ClientInformation.h"
    42 
    43 using namespace network;
    44 
    45 int main(){
    46   bool quit=false;
    47   ENetPacket *packet;
    48   ClientInformation clients;
    49   ConnectionManager server = ConnectionManager(&clients);
    50   server.createListener();
    51 
    52   PacketDecoder dec;
    53 
    54   while(!quit){
    55     if(server.queueEmpty())
    56       // Warning: usleep(100) is Sleep(100/1000) = Sleep(0), which is nothing!
    57       usleep(1);
    58     else{
    59       ENetAddress addr;
    60       packet=server.getPacket(addr);
    61       if(packet==NULL){
    62         // there was some error
    63         //std::cout << "null pointer" << std::endl;
    64         quit=true;
    65       }
    66       else{
    67         //std::cout << "We received: " << packet->data << std::endl;
    68         dec.elaborate(packet, 1);
    69       }
    70     }
    71   }
    72   server.quitListener();
    73   return 0;
    74 }
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * *   Author: *      Oliver Scheuss, (C) 2007 *   Co-authors: *      ... * *///// Dummy server to test ConnectionManager and PacketBuffer classes//// Author: Oliver Scheuss#include <iostream>#include <enet/enet.h>#include "util/Sleep.h"#include "ConnectionManager.h"#include "PacketManager.h"#include "PacketTypes.h"
     2#include "ClientInformation.h"using namespace network;int main(){  bool quit=false;  ENetPacket *packet;  ClientInformation clients;  ConnectionManager server = ConnectionManager(&clients);  server.createListener();  PacketDecoder dec;  while(!quit){    if(server.queueEmpty())      // Warning: usleep(100) is Sleep(100/1000) = Sleep(0), which is nothing!      usleep(1);    else{      ENetAddress addr;      packet=server.getPacket(addr);      if(packet==NULL){        // there was some error        //std::cout << "null pointer" << std::endl;        quit=true;      }      else{        //std::cout << "We received: " << packet->data << std::endl;        dec.elaborate(packet, 1);      }    }  }  server.quitListener();  return 0;}
  • code/branches/network/src/network/dummyserver3.cc

    • Property svn:eol-style set to native
    r1293 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
    22  *   Author:
    23  *      Oliver Scheuss, (C) 2007
    24  *   Co-authors:
    25  *      ...
    26  *
    27  */
    28 
    29 #include "Server.h"
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * *   Author: *      Oliver Scheuss, (C) 2007 *   Co-authors: *      ... * */#include "Server.h"
    302
    313#include <iostream>
  • code/branches/network/src/network/dummyserver4.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/CMakeLists.txt

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/OIS.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/OISConfig.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/OISEffect.cpp

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/OISEffect.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/OISEvents.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/OISException.cpp

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/OISException.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/OISFactoryCreator.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/OISForceFeedback.cpp

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/OISForceFeedback.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/OISInputManager.cpp

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/OISInputManager.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/OISInterface.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/OISJoyStick.cpp

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/OISJoyStick.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/OISKeyboard.cpp

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/OISKeyboard.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/OISMouse.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/OISObject.cpp

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/OISObject.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/OISPrereqs.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/ReadMe.txt

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/linux/EventHelpers.cpp

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/linux/EventHelpers.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/linux/LinuxForceFeedback.cpp

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/linux/LinuxForceFeedback.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/linux/LinuxInputManager.cpp

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/linux/LinuxInputManager.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/linux/LinuxJoyStickEvents.cpp

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/linux/LinuxJoyStickEvents.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/linux/LinuxKeyboard.cpp

    • Property svn:eol-style set to native
    r1349 r1494  
    1 /*
    2 The zlib/libpng License
    3 
    4 Copyright (c) 2005-2007 Phillip Castaneda (pjcast -- www.wreckedgames.com)
    5 
    6 This software is provided 'as-is', without any express or implied warranty. In no event will
    7 the authors be held liable for any damages arising from the use of this software.
    8 
    9 Permission is granted to anyone to use this software for any purpose, including commercial
    10 applications, and to alter it and redistribute it freely, subject to the following
    11 restrictions:
    12 
    13     1. The origin of this software must not be misrepresented; you must not claim that
    14                 you wrote the original software. If you use this software in a product,
    15                 an acknowledgment in the product documentation would be appreciated but is
    16                 not required.
    17 
    18     2. Altered source versions must be plainly marked as such, and must not be
    19                 misrepresented as being the original software.
    20 
    21     3. This notice may not be removed or altered from any source distribution.
    22 */
    23 #include "linux/LinuxInputManager.h"
    24 #include "linux/LinuxKeyboard.h"
    25 #include "OISException.h"
    26 #include "OISEvents.h"
    27 
    28 #include <X11/keysym.h>
    29 #include <X11/Xutil.h>
    30 #include <cstring>
    31 
    32 using namespace OIS;
    33 #include <iostream>
    34 //-------------------------------------------------------------------//
    35 LinuxKeyboard::LinuxKeyboard(InputManager* creator, bool buffered, bool grab, bool useXRepeat)
    36         : Keyboard(creator->inputSystemName(), buffered, 0, creator)
    37 {
    38         setlocale(LC_CTYPE, ""); //Set the locale to (hopefully) the users LANG UTF-8 Env var
    39 
    40         display = 0;
    41         window = 0;
    42 
    43         grabKeyboard = grab;
    44         keyFocusLost = false;
    45 
    46         xAutoRepeat = useXRepeat;
    47         oldXAutoRepeat = false;
    48 
    49         //X Key Map to KeyCode
    50         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_1, KC_1));
    51         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_2, KC_2));
    52         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_3, KC_3));
    53         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_4, KC_4));
    54         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_5, KC_5));
    55         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_6, KC_6));
    56         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_7, KC_7));
    57         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_8, KC_8));
    58         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_9, KC_9));
    59         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_0, KC_0));
    60 
    61         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_BackSpace, KC_BACK));
    62 
    63         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_minus, KC_MINUS));
    64         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_equal, KC_EQUALS));
    65         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_space, KC_SPACE));
    66         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_comma, KC_COMMA));
    67         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_period, KC_PERIOD));
    68 
    69         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_backslash, KC_BACKSLASH));
    70         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_slash, KC_SLASH));
    71         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_bracketleft, KC_LBRACKET));
    72         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_bracketright, KC_RBRACKET));
    73 
    74         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Escape,KC_ESCAPE));
    75         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Caps_Lock, KC_CAPITAL));
    76 
    77         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Tab, KC_TAB));
    78         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Return, KC_RETURN));
    79         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Control_L, KC_LCONTROL));
    80         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Control_R, KC_RCONTROL));
    81 
    82         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_colon, KC_COLON));
    83         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_semicolon, KC_SEMICOLON));
    84         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_apostrophe, KC_APOSTROPHE));
    85         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_grave, KC_GRAVE));
    86 
    87         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_b, KC_B));
    88         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_a, KC_A));
    89         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_c, KC_C));
    90         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_d, KC_D));
    91         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_e, KC_E));
    92         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_f, KC_F));
    93         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_g, KC_G));
    94         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_h, KC_H));
    95         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_i, KC_I));
    96         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_j, KC_J));
    97         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_k, KC_K));
    98         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_l, KC_L));
    99         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_m, KC_M));
    100         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_n, KC_N));
    101         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_o, KC_O));
    102         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_p, KC_P));
    103         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_q, KC_Q));
    104         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_r, KC_R));
    105         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_s, KC_S));
    106         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_t, KC_T));
    107         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_u, KC_U));
    108         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_v, KC_V));
    109         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_w, KC_W));
    110         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_x, KC_X));
    111         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_y, KC_Y));
    112         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_z, KC_Z));
    113 
    114         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F1, KC_F1));
    115         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F2, KC_F2));
    116         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F3, KC_F3));
    117         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F4, KC_F4));
    118         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F5, KC_F5));
    119         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F6, KC_F6));
    120         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F7, KC_F7));
    121         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F8, KC_F8));
    122         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F9, KC_F9));
    123         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F10, KC_F10));
    124         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F11, KC_F11));
    125         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F12, KC_F12));
    126         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F13, KC_F13));
    127         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F14, KC_F14));
    128         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F15, KC_F15));
    129 
    130         //Keypad
    131         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_0, KC_NUMPAD0));
    132         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_1, KC_NUMPAD1));
    133         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_2, KC_NUMPAD2));
    134         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_3, KC_NUMPAD3));
    135         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_4, KC_NUMPAD4));
    136         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_5, KC_NUMPAD5));
    137         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_6, KC_NUMPAD6));
    138         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_7, KC_NUMPAD7));
    139         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_8, KC_NUMPAD8));
    140         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_9, KC_NUMPAD9));
    141         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Add, KC_ADD));
    142         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Subtract, KC_SUBTRACT));
    143         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Decimal, KC_DECIMAL));
    144         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Equal, KC_NUMPADEQUALS));
    145         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Divide, KC_DIVIDE));
    146         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Multiply, KC_MULTIPLY));
    147         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Enter, KC_NUMPADENTER));
    148 
    149         //Keypad with numlock off
    150         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Home, KC_NUMPAD7));
    151         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Up, KC_NUMPAD8));
    152         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Page_Up, KC_NUMPAD9));
    153         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Left, KC_NUMPAD4));
    154         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Begin, KC_NUMPAD5));
    155         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Right, KC_NUMPAD6));
    156         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_End, KC_NUMPAD1));
    157         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Down, KC_NUMPAD2));
    158         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Page_Down, KC_NUMPAD3));
    159         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Insert, KC_NUMPAD0));
    160         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Delete, KC_DECIMAL));
    161 
    162         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Up, KC_UP));
    163         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Down, KC_DOWN));
    164         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Left, KC_LEFT));
    165         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Right, KC_RIGHT));
    166 
    167         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Page_Up, KC_PGUP));
    168         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Page_Down, KC_PGDOWN));
    169         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Home, KC_HOME));
    170         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_End, KC_END));
    171 
    172         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Num_Lock, KC_NUMLOCK));
    173         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Print, KC_SYSRQ));
    174         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Scroll_Lock, KC_SCROLL));
    175         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Pause, KC_PAUSE));
    176 
    177         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Shift_R, KC_RSHIFT));
    178         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Shift_L, KC_LSHIFT));
    179         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Alt_R, KC_RMENU));
    180         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Alt_L, KC_LMENU));
    181 
    182         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Insert, KC_INSERT));
    183         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Delete, KC_DELETE));
    184 
    185         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Super_L, KC_LWIN));
    186         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Super_R, KC_RWIN));
    187         keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Menu, KC_APPS));
    188 
    189         static_cast<LinuxInputManager*>(mCreator)->_setKeyboardUsed(true);
    190 }
    191 
    192 //-------------------------------------------------------------------//
    193 void LinuxKeyboard::_initialize()
    194 {
    195         //Clear our keyboard state buffer
    196         memset( &KeyBuffer, 0, 256 );
    197         mModifiers = 0;
    198 
    199         if( display ) XCloseDisplay(display);
    200         display = 0;
    201         window = static_cast<LinuxInputManager*>(mCreator)->_getWindow();
    202 
    203         //Create our local X mListener connection
    204         if( !(display = XOpenDisplay(0)) )
    205                 OIS_EXCEPT(E_General, "LinuxKeyboard::_initialize >> Error opening X!");
    206 
    207         //Set it to recieve Input events
    208         if( XSelectInput(display, window, KeyPressMask | KeyReleaseMask) == BadWindow )
    209                 OIS_EXCEPT(E_General, "LinuxKeyboard::_initialize: X error!");
    210 
    211         if( grabKeyboard )
    212                 XGrabKeyboard(display,window,True,GrabModeAsync,GrabModeAsync,CurrentTime);
    213 
    214         keyFocusLost = false;
    215 
    216         if( xAutoRepeat == false )
    217         {
    218                 //We do not want to blindly turn on autorepeat later when quiting if
    219                 //it was not on to begin with.. So, let us check and see first
    220                 XKeyboardState old;
    221                 XGetKeyboardControl( display, &old );
    222                 oldXAutoRepeat = false;
    223 
    224                 if( old.global_auto_repeat == AutoRepeatModeOn )
    225                         oldXAutoRepeat = true;
    226 
    227                 XAutoRepeatOff( display );
    228         }
    229 }
    230 
    231 //-------------------------------------------------------------------//
    232 LinuxKeyboard::~LinuxKeyboard()
    233 {
    234         if( display )
    235         {
    236                 if( oldXAutoRepeat )
    237                         XAutoRepeatOn(display);
    238 
    239                 if( grabKeyboard )
    240                         XUngrabKeyboard(display, CurrentTime);
    241 
    242                 XCloseDisplay(display);
    243         }
    244 
    245         static_cast<LinuxInputManager*>(mCreator)->_setKeyboardUsed(true);
    246 }
    247 
    248 //-------------------------------------------------------------------//
    249 unsigned int UTF8ToUTF32(unsigned char* buf)
    250 {
    251         unsigned char &FirstChar = buf[0];
    252 
    253         if(FirstChar < 128)
    254                 return FirstChar;
    255 
    256         unsigned int val = 0;
    257         unsigned int len = 0;
    258 
    259         if((FirstChar & 0xE0) == 0xC0) //2 Chars
    260         {
    261                 len = 2;
    262                 val = FirstChar & 0x1F;
    263         }
    264         else if((FirstChar & 0xF0) == 0xE0) //3 Chars
    265         {
    266                 len = 3;
    267                 val = FirstChar & 0x0F;
    268         }
    269         else if((FirstChar & 0xF8) == 0xF0) //4 Chars
    270         {
    271                 len = 4;
    272                 val = FirstChar & 0x07;
    273         }
    274         else if((FirstChar & 0xFC) == 0xF8) //5 Chars
    275         {
    276                 len = 5;
    277                 val = FirstChar & 0x03;
    278         }
    279         else // if((FirstChar & 0xFE) == 0xFC) //6 Chars
    280         {
    281                 len = 6;
    282                 val = FirstChar & 0x01;
    283         }
    284 
    285         for(int i = 1; i < len; i++)
    286                 val = (val << 6) | (buf[i] & 0x3F);
    287 
    288         return val;
    289 }
    290 
    291 //-------------------------------------------------------------------//
    292 bool LinuxKeyboard::isKeyDown( KeyCode key ) const
    293 {
    294         return (KeyBuffer[key]);
    295 }
    296 
    297 //-------------------------------------------------------------------//
    298 void LinuxKeyboard::capture()
    299 {
    300         KeySym key;
    301         XEvent event;
    302         LinuxInputManager* linMan = static_cast<LinuxInputManager*>(mCreator);
    303 
    304         while( XPending(display) > 0 )
    305         {
    306 
     1/*The zlib/libpng LicenseCopyright (c) 2005-2007 Phillip Castaneda (pjcast -- www.wreckedgames.com)This software is provided 'as-is', without any express or implied warranty. In no event willthe authors be held liable for any damages arising from the use of this software.Permission is granted to anyone to use this software for any purpose, including commercialapplications, and to alter it and redistribute it freely, subject to the followingrestrictions:    1. The origin of this software must not be misrepresented; you must not claim that         you wrote the original software. If you use this software in a product,         an acknowledgment in the product documentation would be appreciated but is              not required.    2. Altered source versions must be plainly marked as such, and must not be             misrepresented as being the original software.    3. This notice may not be removed or altered from any source distribution.*/#include "linux/LinuxInputManager.h"#include "linux/LinuxKeyboard.h"#include "OISException.h"#include "OISEvents.h"#include <X11/keysym.h>#include <X11/Xutil.h>#include <cstring>using namespace OIS;#include <iostream>//-------------------------------------------------------------------//LinuxKeyboard::LinuxKeyboard(InputManager* creator, bool buffered, bool grab, bool useXRepeat)    : Keyboard(creator->inputSystemName(), buffered, 0, creator){   setlocale(LC_CTYPE, ""); //Set the locale to (hopefully) the users LANG UTF-8 Env var   display = 0;    window = 0;     grabKeyboard = grab;    keyFocusLost = false;   xAutoRepeat = useXRepeat;       oldXAutoRepeat = false; //X Key Map to KeyCode  keyConversion.insert(XtoOIS_KeyMap::value_type(XK_1, KC_1));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_2, KC_2));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_3, KC_3));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_4, KC_4));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_5, KC_5));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_6, KC_6));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_7, KC_7));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_8, KC_8));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_9, KC_9));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_0, KC_0));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_BackSpace, KC_BACK)); keyConversion.insert(XtoOIS_KeyMap::value_type(XK_minus, KC_MINUS));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_equal, KC_EQUALS));   keyConversion.insert(XtoOIS_KeyMap::value_type(XK_space, KC_SPACE));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_comma, KC_COMMA));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_period, KC_PERIOD));  keyConversion.insert(XtoOIS_KeyMap::value_type(XK_backslash, KC_BACKSLASH));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_slash, KC_SLASH));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_bracketleft, KC_LBRACKET));   keyConversion.insert(XtoOIS_KeyMap::value_type(XK_bracketright, KC_RBRACKET));  keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Escape,KC_ESCAPE));   keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Caps_Lock, KC_CAPITAL));      keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Tab, KC_TAB));        keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Return, KC_RETURN));  keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Control_L, KC_LCONTROL));     keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Control_R, KC_RCONTROL));     keyConversion.insert(XtoOIS_KeyMap::value_type(XK_colon, KC_COLON));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_semicolon, KC_SEMICOLON));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_apostrophe, KC_APOSTROPHE));  keyConversion.insert(XtoOIS_KeyMap::value_type(XK_grave, KC_GRAVE));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_b, KC_B));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_a, KC_A));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_c, KC_C));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_d, KC_D));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_e, KC_E));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_f, KC_F));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_g, KC_G));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_h, KC_H));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_i, KC_I));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_j, KC_J));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_k, KC_K));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_l, KC_L));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_m, KC_M));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_n, KC_N));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_o, KC_O));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_p, KC_P));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_q, KC_Q));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_r, KC_R));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_s, KC_S));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_t, KC_T));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_u, KC_U));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_v, KC_V));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_w, KC_W));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_x, KC_X));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_y, KC_Y));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_z, KC_Z));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F1, KC_F1));  keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F2, KC_F2));  keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F3, KC_F3));  keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F4, KC_F4));  keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F5, KC_F5));  keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F6, KC_F6));  keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F7, KC_F7));  keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F8, KC_F8));  keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F9, KC_F9));  keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F10, KC_F10));        keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F11, KC_F11));        keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F12, KC_F12));        keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F13, KC_F13));        keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F14, KC_F14));        keyConversion.insert(XtoOIS_KeyMap::value_type(XK_F15, KC_F15));        //Keypad        keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_0, KC_NUMPAD0));   keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_1, KC_NUMPAD1));   keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_2, KC_NUMPAD2));   keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_3, KC_NUMPAD3));   keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_4, KC_NUMPAD4));   keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_5, KC_NUMPAD5));   keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_6, KC_NUMPAD6));   keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_7, KC_NUMPAD7));   keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_8, KC_NUMPAD8));   keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_9, KC_NUMPAD9));   keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Add, KC_ADD));     keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Subtract, KC_SUBTRACT));   keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Decimal, KC_DECIMAL));     keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Equal, KC_NUMPADEQUALS));  keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Divide, KC_DIVIDE));       keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Multiply, KC_MULTIPLY));   keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Enter, KC_NUMPADENTER));   //Keypad with numlock off       keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Home, KC_NUMPAD7));        keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Up, KC_NUMPAD8));  keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Page_Up, KC_NUMPAD9));     keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Left, KC_NUMPAD4));        keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Begin, KC_NUMPAD5));       keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Right, KC_NUMPAD6));       keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_End, KC_NUMPAD1)); keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Down, KC_NUMPAD2));        keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Page_Down, KC_NUMPAD3));   keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Insert, KC_NUMPAD0));      keyConversion.insert(XtoOIS_KeyMap::value_type(XK_KP_Delete, KC_DECIMAL));      keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Up, KC_UP));  keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Down, KC_DOWN));      keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Left, KC_LEFT));      keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Right, KC_RIGHT));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Page_Up, KC_PGUP));   keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Page_Down, KC_PGDOWN));       keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Home, KC_HOME));      keyConversion.insert(XtoOIS_KeyMap::value_type(XK_End, KC_END));        keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Num_Lock, KC_NUMLOCK));       keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Print, KC_SYSRQ));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Scroll_Lock, KC_SCROLL));     keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Pause, KC_PAUSE));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Shift_R, KC_RSHIFT)); keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Shift_L, KC_LSHIFT)); keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Alt_R, KC_RMENU));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Alt_L, KC_LMENU));    keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Insert, KC_INSERT));  keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Delete, KC_DELETE));  keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Super_L, KC_LWIN));   keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Super_R, KC_RWIN));   keyConversion.insert(XtoOIS_KeyMap::value_type(XK_Menu, KC_APPS));      static_cast<LinuxInputManager*>(mCreator)->_setKeyboardUsed(true);}//-------------------------------------------------------------------//void LinuxKeyboard::_initialize(){    //Clear our keyboard state buffer       memset( &KeyBuffer, 0, 256 );   mModifiers = 0; if( display ) XCloseDisplay(display);   display = 0;    window = static_cast<LinuxInputManager*>(mCreator)->_getWindow();       //Create our local X mListener connection       if( !(display = XOpenDisplay(0)) )              OIS_EXCEPT(E_General, "LinuxKeyboard::_initialize >> Error opening X!");        //Set it to recieve Input events        if( XSelectInput(display, window, KeyPressMask | KeyReleaseMask) == BadWindow )         OIS_EXCEPT(E_General, "LinuxKeyboard::_initialize: X error!");  if( grabKeyboard )              XGrabKeyboard(display,window,True,GrabModeAsync,GrabModeAsync,CurrentTime);     keyFocusLost = false;   if( xAutoRepeat == false )      {               //We do not want to blindly turn on autorepeat later when quiting if            //it was not on to begin with.. So, let us check and see first          XKeyboardState old;             XGetKeyboardControl( display, &old );           oldXAutoRepeat = false;         if( old.global_auto_repeat == AutoRepeatModeOn )                        oldXAutoRepeat = true;          XAutoRepeatOff( display );      }}//-------------------------------------------------------------------//LinuxKeyboard::~LinuxKeyboard(){       if( display )   {               if( oldXAutoRepeat )                    XAutoRepeatOn(display);         if( grabKeyboard )                      XUngrabKeyboard(display, CurrentTime);          XCloseDisplay(display); }       static_cast<LinuxInputManager*>(mCreator)->_setKeyboardUsed(true);}//-------------------------------------------------------------------//unsigned int UTF8ToUTF32(unsigned char* buf){ unsigned char &FirstChar = buf[0];      if(FirstChar < 128)             return FirstChar;       unsigned int val = 0;   unsigned int len = 0;   if((FirstChar & 0xE0) == 0xC0) //2 Chars        {               len = 2;                val = FirstChar & 0x1F; }       else if((FirstChar & 0xF0) == 0xE0) //3 Chars   {               len = 3;                val = FirstChar & 0x0F; }       else if((FirstChar & 0xF8) == 0xF0) //4 Chars   {               len = 4;                val = FirstChar & 0x07; }       else if((FirstChar & 0xFC) == 0xF8) //5 Chars   {               len = 5;                val = FirstChar & 0x03; }       else // if((FirstChar & 0xFE) == 0xFC) //6 Chars        {               len = 6;                val = FirstChar & 0x01; }       for(int i = 1; i < len; i++)            val = (val << 6) | (buf[i] & 0x3F);     return val;}//-------------------------------------------------------------------//bool LinuxKeyboard::isKeyDown( KeyCode key ) const{  return (KeyBuffer[key]);}//-------------------------------------------------------------------//void LinuxKeyboard::capture(){  KeySym key;     XEvent event;   LinuxInputManager* linMan = static_cast<LinuxInputManager*>(mCreator);  while( XPending(display) > 0 )  {
    3072                XNextEvent(display, &event);
    3083
    309 
    310 
    311                 if( KeyPress == event.type )
    312                 {
    313                         unsigned int character = 0;
    314 
    315                         if( mTextMode != Off )
    316                         {
    317                                 unsigned char buffer[6] = {0,0,0,0,0,0};
    318                                 XLookupString(&event.xkey, (char*)buffer, 6, &key, 0);
    319 
    320                                 if( mTextMode == Unicode )
    321                                         character = UTF8ToUTF32(buffer);
    322                                 else if( mTextMode == Ascii)
    323                                         character = buffer[0];
    324                         }
    325 
    326                         //Mask out the modifier states X11 sets and read again
    327                         event.xkey.state &= ~ShiftMask;
    328                         event.xkey.state &= ~LockMask;
    329                         XLookupString(&event.xkey, 0, 0,&key, 0);
    330 
    331                         _injectKeyDown(key, character);
    332 
    333                         //Just printing out some debugging info.. to verify all chars are mapped
    334                         //std::cout << "KEY PRESSED X=" << event.xkey.keycode;
    335                         //std::cout << "\n KeySym=" << key << std::endl;
    336 
    337                         //Check for Alt-Tab
    338                         if( event.xkey.state & Mod1Mask && key == XK_Tab )
    339                                 linMan->_setGrabState(false);
    340                 }
    341 
    342                 else if( KeyRelease == event.type )
    343                 {
    344                         //Mask out the modifier states X sets.. or we will get improper values
    345                         event.xkey.state &= ~ShiftMask;
    346                         event.xkey.state &= ~LockMask;
    347 
    348                         //Else, it is a valid key release
    349                         XLookupString(&event.xkey,NULL,0,&key,NULL);
    350                         _injectKeyUp(key);
    351 
    352                 }
    353         }
    354 
    355         //If grabbing mode is on.. Handle focus lost/gained via Alt-Tab and mouse clicks
    356         if( grabKeyboard )
    357         {
    358                 if( linMan->_getGrabState() == false )
    359                 {
    360                         // are no longer grabbing
    361                         if( keyFocusLost == false )
    362                         {
    363                                 //UnGrab KeyBoard
    364                                 XUngrabKeyboard(display, CurrentTime);
    365                                 keyFocusLost = true;
    366                         }
    367                 }
    368                 else
    369                 {
    370                         //We are grabbing - and regained focus
    371                         if( keyFocusLost == true )
    372                         {
    373                                 //ReGrab KeyBoard
    374                                 XGrabKeyboard(display, window, True, GrabModeAsync, GrabModeAsync, CurrentTime);
    375                                 keyFocusLost = false;
    376                         }
    377                 }
    378         }
    379 }
    380 
    381 //-------------------------------------------------------------------//
    382 void LinuxKeyboard::setBuffered(bool buffered)
    383 {
    384         mBuffered = buffered;
    385 }
    386 
    387 //-------------------------------------------------------------------//
    388 bool LinuxKeyboard::_injectKeyDown( KeySym key, int text )
    389 {
    390         KeyCode kc = keyConversion[key];
    391         KeyBuffer[kc] = 1;
    392 
    393         //Turn on modifier flags
    394         if( kc == KC_LCONTROL || kc == KC_RCONTROL)
    395                 mModifiers |= Ctrl;
    396         else if( kc == KC_LSHIFT || kc == KC_RSHIFT )
    397                 mModifiers |= Shift;
    398         else if( kc == KC_LMENU || kc == KC_RMENU )
    399                 mModifiers |= Alt;
    400 
    401         if( mBuffered && mListener )
    402                 return mListener->keyPressed(KeyEvent(this,kc,text));
    403 
    404         return true;
    405 }
    406 
    407 //-------------------------------------------------------------------//
    408 bool LinuxKeyboard::_injectKeyUp( KeySym key )
    409 {
    410         KeyCode kc = keyConversion[key];
    411         KeyBuffer[kc] = 0;
    412 
    413         //Turn off modifier flags
    414         if( kc == KC_LCONTROL || kc == KC_RCONTROL)
    415                 mModifiers &= ~Ctrl;
    416         else if( kc == KC_LSHIFT || kc == KC_RSHIFT )
    417                 mModifiers &= ~Shift;
    418         else if( kc == KC_LMENU || kc == KC_RMENU )
    419                 mModifiers &= ~Alt;
    420 
    421         if( mBuffered && mListener )
    422                 return mListener->keyReleased(KeyEvent(this, kc, 0));
    423 
    424         return true;
    425 }
    426 
    427 //-------------------------------------------------------------------//
    428 const std::string& LinuxKeyboard::getAsString( KeyCode kc )
    429 {
    430         mGetString = "Unknown";
    431         char *temp = 0;
    432 
    433         XtoOIS_KeyMap::iterator i = keyConversion.begin(),
    434                                 e = keyConversion.end();
    435 
    436         for( ; i != e; ++i )
    437         {
    438                 if( i->second == kc )
    439                 {
    440                         temp = XKeysymToString(i->first);
    441                         if( temp )
    442                                 mGetString = temp;
    443                         break;
    444                 }
    445         }
    446 
    447         return mGetString;
    448 }
    449 
    450 //-------------------------------------------------------------------//
    451 void LinuxKeyboard::copyKeyStates( char keys[256] ) const
    452 {
    453         memcpy( keys, KeyBuffer, 256 );
    454 }
     4                if( KeyPress == event.type )            {                       unsigned int character = 0;                     if( mTextMode != Off )                  {                               unsigned char buffer[6] = {0,0,0,0,0,0};                                XLookupString(&event.xkey, (char*)buffer, 6, &key, 0);                          if( mTextMode == Unicode )                                      character = UTF8ToUTF32(buffer);                                else if( mTextMode == Ascii)                                    character = buffer[0];                  }                       //Mask out the modifier states X11 sets and read again                  event.xkey.state &= ~ShiftMask;                 event.xkey.state &= ~LockMask;                  XLookupString(&event.xkey, 0, 0,&key, 0);                       _injectKeyDown(key, character);                 //Just printing out some debugging info.. to verify all chars are mapped                        //std::cout << "KEY PRESSED X=" << event.xkey.keycode;                  //std::cout << "\n KeySym=" << key << std::endl;                        //Check for Alt-Tab                     if( event.xkey.state & Mod1Mask && key == XK_Tab )                              linMan->_setGrabState(false);           }
     5                else if( KeyRelease == event.type )             {                       //Mask out the modifier states X sets.. or we will get improper values                  event.xkey.state &= ~ShiftMask;                 event.xkey.state &= ~LockMask;                  //Else, it is a valid key release                       XLookupString(&event.xkey,NULL,0,&key,NULL);                    _injectKeyUp(key);
     6                }       }       //If grabbing mode is on.. Handle focus lost/gained via Alt-Tab and mouse clicks        if( grabKeyboard )      {               if( linMan->_getGrabState() == false )          {                       // are no longer grabbing                       if( keyFocusLost == false )                     {                               //UnGrab KeyBoard                               XUngrabKeyboard(display, CurrentTime);                          keyFocusLost = true;                    }               }               else            {                       //We are grabbing - and regained focus                  if( keyFocusLost == true )                      {                               //ReGrab KeyBoard                               XGrabKeyboard(display, window, True, GrabModeAsync, GrabModeAsync, CurrentTime);                                keyFocusLost = false;                   }               }       }}//-------------------------------------------------------------------//void LinuxKeyboard::setBuffered(bool buffered){        mBuffered = buffered;}//-------------------------------------------------------------------//bool LinuxKeyboard::_injectKeyDown( KeySym key, int text ){        KeyCode kc = keyConversion[key];        KeyBuffer[kc] = 1;      //Turn on modifier flags        if( kc == KC_LCONTROL || kc == KC_RCONTROL)             mModifiers |= Ctrl;     else if( kc == KC_LSHIFT || kc == KC_RSHIFT )           mModifiers |= Shift;    else if( kc == KC_LMENU || kc == KC_RMENU )             mModifiers |= Alt;      if( mBuffered && mListener )            return mListener->keyPressed(KeyEvent(this,kc,text));   return true;}//-------------------------------------------------------------------//bool LinuxKeyboard::_injectKeyUp( KeySym key ){     KeyCode kc = keyConversion[key];        KeyBuffer[kc] = 0;      //Turn off modifier flags       if( kc == KC_LCONTROL || kc == KC_RCONTROL)             mModifiers &= ~Ctrl;    else if( kc == KC_LSHIFT || kc == KC_RSHIFT )           mModifiers &= ~Shift;   else if( kc == KC_LMENU || kc == KC_RMENU )             mModifiers &= ~Alt;     if( mBuffered && mListener )            return mListener->keyReleased(KeyEvent(this, kc, 0));   return true;}//-------------------------------------------------------------------//const std::string& LinuxKeyboard::getAsString( KeyCode kc ){        mGetString = "Unknown"; char *temp = 0; XtoOIS_KeyMap::iterator i = keyConversion.begin(),                              e = keyConversion.end();        for( ; i != e; ++i )    {               if( i->second == kc )           {                       temp = XKeysymToString(i->first);                       if( temp )                              mGetString = temp;                      break;          }       }       return mGetString;}//-------------------------------------------------------------------//void LinuxKeyboard::copyKeyStates( char keys[256] ) const{    memcpy( keys, KeyBuffer, 256 );}
  • code/branches/network/src/ois/linux/LinuxKeyboard.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/linux/LinuxMouse.cpp

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/linux/LinuxMouse.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/linux/LinuxPrereqs.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/mac/MacHIDManager.cpp

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/mac/MacHIDManager.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/mac/MacHelpers.cpp

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/mac/MacHelpers.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/mac/MacInputManager.cpp

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/mac/MacInputManager.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/mac/MacKeyboard.cpp

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/mac/MacKeyboard.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/mac/MacMouse.cpp

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/mac/MacMouse.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/mac/MacPrereqs.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/win32/Win32ForceFeedback.cpp

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/win32/Win32ForceFeedback.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/win32/Win32InputManager.cpp

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/win32/Win32InputManager.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/win32/Win32JoyStick.cpp

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/win32/Win32JoyStick.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/win32/Win32KeyBoard.cpp

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/win32/Win32KeyBoard.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/win32/Win32Mouse.cpp

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/win32/Win32Mouse.h

    • Property svn:eol-style set to native
  • code/branches/network/src/ois/win32/Win32Prereqs.h

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/CMakeLists.txt

    • Property svn:eol-style set to native
    r1479 r1494  
    1 SET( ORXONOX_SRC_FILES
    2   GraphicsEngine.cc
    3   Main.cc
    4   Orxonox.cc
    5 
    6   console/InGameConsole.cc
    7   hud/HUD.cc
    8   hud/BarOverlayElement.cc
    9   hud/RadarOverlayElement.cc
     1SET( ORXONOX_SRC_FILES  GraphicsEngine.cc  Main.cc  Orxonox.cc  console/InGameConsole.cc  hud/HUD.cc  hud/BarOverlayElement.cc  hud/RadarOverlayElement.cc
    102  hud/RadarObject.cc
    11   hud/Navigation.cc
    12   particle/ParticleInterface.cc
    13   tolua/tolua_bind.cc
    14 
    15   tools/BillboardSet.cc
    16   tools/Light.cc
    17   tools/Mesh.cc
    18   tools/Timer.cc
    19 
    20   objects/Ambient.cc
    21   objects/Camera.cc
    22   objects/CameraHandler.cc
    23   objects/Explosion.cc
    24   objects/Model.cc
    25   objects/NPC.cc
    26   objects/Projectile.cc
    27   objects/RotatingProjectile.cc
    28   objects/Skybox.cc
    29   objects/SpaceShip.cc
    30   objects/SpaceShipAI.cc
    31   objects/WorldEntity.cc
    32 
    33 #  objects/weapon/AmmunitionDump.cc
    34 #  objects/weapon/BarrelGun.cc
    35 #  objects/weapon/BaseWeapon.cc
    36 #  objects/weapon/Bullet.cc
    37 #  objects/weapon/BulletManager.cc
    38 #  objects/weapon/WeaponStation.cc
    39 )
    40 
    41 GET_TARGET_PROPERTY(TOLUA_EXE tolua LOCATION)
    42 ADD_CUSTOM_COMMAND(
    43   OUTPUT tolua/tolua_bind.cc tolua/tolua_bind.h
    44   COMMAND ${TOLUA_EXE} -n orxonox -o ../../src/orxonox/tolua/tolua_bind.cc -H ../../src/orxonox/tolua/tolua_bind.h ../../src/orxonox/tolua/tolua.pkg
    45   DEPENDS tolua
    46   WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/lib
    47 )
    48        
    49 ADD_EXECUTABLE( orxonox ${ORXONOX_SRC_FILES} )
    50 
    51 IF(NETWORKTRAFFIC_TESTING_ENABLED)
    52 
    53   SET( ORXONOXS_SRC_FILES
    54     GraphicsEngine.cc
    55     objects/Ambient.cc
    56     objects/Camera.cc
    57     objects/CameraHandler.cc
    58     objects/Explosion.cc
    59     objects/Model.cc
    60     objects/NPC.cc
    61     objects/Projectile.cc
    62     objects/Skybox.cc
    63     objects/SpaceShip.cc
    64     objects/WorldEntity.cc
    65   )
    66 
    67   ADD_LIBRARY(orxonoxs SHARED ${ORXONOX_SRC_FILES})
    68 ENDIF(NETWORKTRAFFIC_TESTING_ENABLED)
    69 
    70 TARGET_LINK_LIBRARIES( orxonox
    71   ${OGRE_LIBRARIES}
    72   ${Lua_LIBRARIES}
    73   tinyxml
    74   tolualib
    75   ois
    76   util
    77   core
    78   audio
    79   network
    80 )
    81 
     3  hud/Navigation.cc  particle/ParticleInterface.cc  tolua/tolua_bind.cc  tools/BillboardSet.cc  tools/Light.cc  tools/Mesh.cc  tools/Timer.cc  objects/Ambient.cc  objects/Camera.cc  objects/CameraHandler.cc  objects/Explosion.cc  objects/Model.cc  objects/NPC.cc  objects/Projectile.cc  objects/RotatingProjectile.cc  objects/Skybox.cc  objects/SpaceShip.cc  objects/SpaceShipAI.cc  objects/WorldEntity.cc#  objects/weapon/AmmunitionDump.cc#  objects/weapon/BarrelGun.cc#  objects/weapon/BaseWeapon.cc#  objects/weapon/Bullet.cc#  objects/weapon/BulletManager.cc#  objects/weapon/WeaponStation.cc)GET_TARGET_PROPERTY(TOLUA_EXE tolua LOCATION)ADD_CUSTOM_COMMAND(  OUTPUT tolua/tolua_bind.cc tolua/tolua_bind.h  COMMAND ${TOLUA_EXE} -n orxonox -o ../../src/orxonox/tolua/tolua_bind.cc -H ../../src/orxonox/tolua/tolua_bind.h ../../src/orxonox/tolua/tolua.pkg  DEPENDS tolua  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/lib) ADD_EXECUTABLE( orxonox ${ORXONOX_SRC_FILES} )IF(NETWORKTRAFFIC_TESTING_ENABLED)  SET( ORXONOXS_SRC_FILES    GraphicsEngine.cc    objects/Ambient.cc    objects/Camera.cc    objects/CameraHandler.cc    objects/Explosion.cc    objects/Model.cc    objects/NPC.cc    objects/Projectile.cc    objects/Skybox.cc    objects/SpaceShip.cc    objects/WorldEntity.cc  )  ADD_LIBRARY(orxonoxs SHARED ${ORXONOX_SRC_FILES})ENDIF(NETWORKTRAFFIC_TESTING_ENABLED)TARGET_LINK_LIBRARIES( orxonox  ${OGRE_LIBRARIES}  ${Lua_LIBRARIES}  tinyxml  tolualib  ois  util  core  audio  network)
  • code/branches/network/src/orxonox/GraphicsEngine.cc

    • Property svn:eol-style set to native
    r1493 r1494  
    4444#include "core/ConfigValueIncludes.h"
    4545#include "core/Debug.h"
    46 #include "core/CommandExecutor.h"
    47 #include "core/TclBind.h"
     46#include "core/CommandExecutor.h"#include "core/TclBind.h"
    4847#include "console/InGameConsole.h"
    4948
     
    8786    SetConfigValue(ogreLogLevelTrivial_ , 5).description("Corresponding orxonox debug level for ogre Trivial");
    8887    SetConfigValue(ogreLogLevelNormal_  , 4).description("Corresponding orxonox debug level for ogre Normal");
    89     SetConfigValue(ogreLogLevelCritical_, 2).description("Corresponding orxonox debug level for ogre Critical");
    90 
    91     TclBind::getInstance().setDataPath(this->dataPath_);
     88    SetConfigValue(ogreLogLevelCritical_, 2).description("Corresponding orxonox debug level for ogre Critical");    TclBind::getInstance().setDataPath(this->dataPath_);
    9289  }
    9390
     
    312309      return 0;
    313310  }
    314 
    315   /**
    316     @brief Returns the window aspect ratio height/width.
    317     @return The ratio
    318   */
    319   float GraphicsEngine::getWindowAspectRatio() const
    320   {
    321     if (this->renderWindow_)
    322         return (float)this->renderWindow_->getHeight() / (float)this->renderWindow_->getWidth();
    323     else
    324         return 1.0f;
    325   }
    326 
     311  /**    @brief Returns the window aspect ratio height/width.    @return The ratio  */  float GraphicsEngine::getWindowAspectRatio() const  {    if (this->renderWindow_)        return (float)this->renderWindow_->getHeight() / (float)this->renderWindow_->getWidth();    else        return 1.0f;  }
    327312  /**
    328313    @brief Method called by the LogListener interface from Ogre.
     
    371356  *       as rw. But we have to be careful when using multiple render windows!
    372357  */
    373   void GraphicsEngine::windowResized(Ogre::RenderWindow *rw)
    374   {
    375     // change the mouse clipping size for absolute mouse movements
     358  void GraphicsEngine::windowResized(Ogre::RenderWindow *rw)  {    // change the mouse clipping size for absolute mouse movements
    376359    int w = rw->getWidth();
    377360    int h = rw->getHeight();
  • code/branches/network/src/orxonox/GraphicsEngine.h

    • Property svn:eol-style set to native
    r1477 r1494  
    11/*
    22 *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
     3 *                    > www.orxonox.net < *
    54 *
    65 *   License notice:
     
    7170            size_t getWindowHandle();
    7271            int getWindowWidth() const;
    73             int getWindowHeight() const;
    74             float getWindowAspectRatio() const;
     72            int getWindowHeight() const;            float getWindowAspectRatio() const;
    7573            float getAverageFPS() const
    7674            { if (renderWindow_) return this->renderWindow_->getAverageFPS(); else return 0.0f; }
  • code/branches/network/src/orxonox/Main.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/Orxonox.cc

    • Property svn:eol-style set to native
    r1493 r1494  
    8484  SetConsoleCommandShortcut(Orxonox, slomo).setAccessLevel(AccessLevel::Offline).setDefaultValue(0, 1.0).setAxisParamIndex(0).setIsAxisRelative(false);
    8585  SetConsoleCommandShortcut(Orxonox, setTimeFactor).setAccessLevel(AccessLevel::Offline).setDefaultValue(0, 1.0);
    86 
    8786  /**
    8887    @brief Reference to the only instance of the class.
  • code/branches/network/src/orxonox/Orxonox.h

    • Property svn:eol-style set to native
    r1493 r1494  
    7171      static inline float getTimeFactor() { return Orxonox::getSingleton()->timefactor_; }
    7272      static inline void exit() { Orxonox::getSingleton()->abortRequest(); }
    73 
    7473   private:
    7574      // don't mess with singletons
  • code/branches/network/src/orxonox/OrxonoxPrereqs.h

    • Property svn:eol-style set to native
    r1479 r1494  
    11/*
    22 *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
     3 *                    > www.orxonox.net < *
    54 *
    65 *   License notice:
     
    7372  class Projectile;
    7473  class Skybox;
    75   class SpaceShip;
    76   class SpaceShipAI;
     74  class SpaceShip;  class SpaceShipAI;
    7775  class WorldEntity;
    7876
     
    9694
    9795  // hud
    98   class BarOverlayElement;
    99   class HUD;
    100   class Navigation;
    101   class RadarObject;
    102   class RadarOverlayElement;
     96  class BarOverlayElement;  class HUD;  class Navigation;  class RadarObject;  class RadarOverlayElement;
    10397
    10498  //console
  • code/branches/network/src/orxonox/OrxonoxStableHeaders.h

    • Property svn:eol-style set to native
    r1414 r1494  
    11/*
    22 *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
     3 *                    > www.orxonox.net < *
    54 *
    65 *   License notice:
     
    3130 @brief Contains the bigger (or smaller) header files in order to precompile them with MSVC
    3231 */
    33 
    34 #ifndef _OrxonoxStableHeaders_H__
    35 #define _OrxonoxStableHeaders_H__
    36 
    37 #include "util/OrxonoxPlatform.h"
    38 
    39 #if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
    40 
    41 // including std headers here is useless since they're already precompiled
    42 
    43 #ifndef WIN32_LEAN_AND_MEAN
    44 // prevent Ogre from including winsock.h that messes with winsock2.h from enet
    45 #  define WIN32_LEAN_AND_MEAN
    46 #endif
    47 // not including the entire Ogre.h doesn't exceed the default heap size for pch
    48 //#include <Ogre.h>
    49 #include <OgreBillboardSet.h>
    50 #include <OgreCamera.h>
    51 #include <OgreColourValue.h>
    52 #include <OgreConfigFile.h>
    53 #include <OgreEntity.h>
    54 #include <OgreException.h>
    55 #include <OgreFrameListener.h>
    56 #include <OgreLight.h>
    57 #include <OgreLog.h>
    58 #include <OgreLogManager.h>
    59 #include <OgreMath.h>
    60 #include <OgreMatrix3.h>
    61 #include <OgreOverlay.h>
    62 #include <OgreOverlayElement.h>
    63 #include <OgreOverlayManager.h>
    64 #include <OgreParticleEmitter.h>
    65 #include <OgreParticleSystem.h>
    66 #include <OgreQuaternion.h>
    67 #include <OgreResourceGroupManager.h>
    68 #include <OgreRenderWindow.h>
    69 #include <OgreRoot.h>
    70 #include <OgreSceneManager.h>
    71 #include <OgreSceneNode.h>
    72 #include <OgreStringConverter.h>
    73 #include <OgreTextureManager.h>
    74 #include <OgreTimer.h>
    75 #include <OgreVector2.h>
    76 #include <OgreVector3.h>
    77 #include <OgreVector3.h>
    78 #include <OgreViewport.h>
    79 #include <OgreWindowEventUtilities.h>
    80 
    81 //-----------------------------------------------------------------------
     32#ifndef _OrxonoxStableHeaders_H__#define _OrxonoxStableHeaders_H__#include "util/OrxonoxPlatform.h"#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC// including std headers here is useless since they're already precompiled#ifndef WIN32_LEAN_AND_MEAN// prevent Ogre from including winsock.h that messes with winsock2.h from enet#  define WIN32_LEAN_AND_MEAN#endif// not including the entire Ogre.h doesn't exceed the default heap size for pch//#include <Ogre.h>#include <OgreBillboardSet.h>#include <OgreCamera.h>#include <OgreColourValue.h>#include <OgreConfigFile.h>#include <OgreEntity.h>#include <OgreException.h>#include <OgreFrameListener.h>#include <OgreLight.h>#include <OgreLog.h>#include <OgreLogManager.h>#include <OgreMath.h>#include <OgreMatrix3.h>#include <OgreOverlay.h>#include <OgreOverlayElement.h>#include <OgreOverlayManager.h>#include <OgreParticleEmitter.h>#include <OgreParticleSystem.h>#include <OgreQuaternion.h>#include <OgreResourceGroupManager.h>#include <OgreRenderWindow.h>#include <OgreRoot.h>#include <OgreSceneManager.h>#include <OgreSceneNode.h>#include <OgreStringConverter.h>#include <OgreTextureManager.h>#include <OgreTimer.h>#include <OgreVector2.h>#include <OgreVector3.h>#include <OgreVector3.h>#include <OgreViewport.h>#include <OgreWindowEventUtilities.h>//-----------------------------------------------------------------------
    8233// ORXONOX HEADERS
    8334//-----------------------------------------------------------------------
    8435
    8536#include "ois/OIS.h"
    86 
    8737//#include "util/Convert.h"
    88 #include "util/Math.h"
    89 //#include "util/Multitype.h"
    90 //#include "util/MultiTypeMath.h"
    91 //#include "util/MultiTypePrimitive.h"
    92 //#include "util/MultiTypeString.h"
    93 #include "util/Sleep.h"
    94 #include "util/String.h"
    95 #include "util/SubString.h"
    96 //#include "util/XMLIncludes.h"
    97 #include "tinyxml/ticpp.h"
    98 #include "tinyxml/tinyxml.h"
    99 
    100 #include "core/BaseObject.h"
    101 //#include "core/CommandExecutor.h"
    102 //#include "core/CoreIncludes.h"
    103 //#include "core/ConfigValueIncludes.h"
    104 #include "core/Debug.h"
    105 //#include "core/Executor.h"
    106 #include "core/Tickable.h"
    107 //#include "core/XMLPort.h"
    108 
    109 #include "network/Synchronisable.h"
    110 
    111 #include "OrxonoxPrereqs.h"
    112 #include "tools/Timer.h"
    113 #include "objects/Model.h"
    114 #include "objects/WorldEntity.h"
    115 
    116 #endif /* Compiler MSVC */
    117 
    118 #endif /* _OrxonoxStableHeaders_H__ */
     38#include "util/Math.h"//#include "util/Multitype.h"//#include "util/MultiTypeMath.h"//#include "util/MultiTypePrimitive.h"//#include "util/MultiTypeString.h"#include "util/Sleep.h"#include "util/String.h"#include "util/SubString.h"//#include "util/XMLIncludes.h"#include "tinyxml/ticpp.h"#include "tinyxml/tinyxml.h"#include "core/BaseObject.h"//#include "core/CommandExecutor.h"//#include "core/CoreIncludes.h"//#include "core/ConfigValueIncludes.h"#include "core/Debug.h"//#include "core/Executor.h"#include "core/Tickable.h"//#include "core/XMLPort.h"#include "network/Synchronisable.h"#include "OrxonoxPrereqs.h"#include "tools/Timer.h"#include "objects/Model.h"#include "objects/WorldEntity.h"#endif /* Compiler MSVC */#endif /* _OrxonoxStableHeaders_H__ */
  • code/branches/network/src/orxonox/PrecompiledHeaderFiles.cc

    • Property svn:eol-style set to native
    r1056 r1494  
    11/*
    22 *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
     3 *                    > www.orxonox.net < *
    54 *
    65 *   License notice:
  • code/branches/network/src/orxonox/console/InGameConsole.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/console/InGameConsole.h

    • Property svn:eol-style set to native
    r1470 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
    22  *   Author:
    23  *      Felix Schulthess
    24  *   Co-authors:
    25  *      Fabian 'x3n' Landau
    26  *
    27  */
    28 
    29 #ifndef _InGameConsole_H__
    30 #define _InGameConsole_H__
    31 
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * *   Author: *      Felix Schulthess *   Co-authors: *      Fabian 'x3n' Landau * */#ifndef _InGameConsole_H__#define _InGameConsole_H__
    322
    333#include "OrxonoxPrereqs.h"
     
    388#include "core/Tickable.h"
    399#include "core/Shell.h"
    40 
    41 
    42 namespace orxonox
    43 {
     10namespace orxonox{
    4411    class _OrxonoxExport InGameConsole : public TickableReal, public ShellListener
    4512    {
    46         public:
    47             static InGameConsole& getInstance();
    48 
    49             void setConfigValues();
    50             void tick(float dt);
    51 
     13        public:            static InGameConsole& getInstance();            void setConfigValues();            void tick(float dt);
    5214            void activate();
    53             void deactivate();
    54             void resize();
    55 
    56             static void openConsole();
    57             static void closeConsole();
     15            void deactivate();            void resize();            static void openConsole();            static void closeConsole();
    5816
    5917        private:
    60             InGameConsole();
    61             InGameConsole(const InGameConsole& other);
    62             ~InGameConsole();
    63 
    64             virtual void linesChanged();
    65             virtual void onlyLastLineChanged();
    66             virtual void lineAdded();
    67             virtual void inputChanged();
    68             virtual void cursorChanged();
    69             virtual void exit();
    70 
    71             void init();
    72             void shiftLines();
    73             void colourLine(int colourcode, int index);
     18            InGameConsole();            InGameConsole(const InGameConsole& other);            ~InGameConsole();            virtual void linesChanged();            virtual void onlyLastLineChanged();            virtual void lineAdded();            virtual void inputChanged();            virtual void cursorChanged();            virtual void exit();            void init();            void shiftLines();            void colourLine(int colourcode, int index);
    7419            void setCursorPosition(int pos);
    7520            void print(const std::string& text, int index, bool alwaysShift = false);
    7621            static Ogre::UTFString convert2UTF(std::string s);
    77 
    78             static float REL_WIDTH;
    79             static float REL_HEIGHT;
    80             static float BLINK;
    81 
    82             int windowW_;
    83             int windowH_;
    84             int desiredTextWidth_;
    85             unsigned int maxCharsPerLine_;
    86             unsigned int numLinesShifted_;
     22            static float REL_WIDTH;            static float REL_HEIGHT;            static float BLINK;            int windowW_;
     23            int windowH_;            int desiredTextWidth_;            unsigned int maxCharsPerLine_;            unsigned int numLinesShifted_;
    8724            int scroll_;
    8825            float scrollTimer_;
    89             float cursor_;
    90             unsigned int inputWindowStart_;
    91             char cursorSymbol_;
     26            float cursor_;            unsigned int inputWindowStart_;            char cursorSymbol_;
    9227            bool active_;
    9328            bool bShowCursor_;
     
    10035            Ogre::BorderPanelOverlayElement* consoleOverlayBorder_;
    10136            Ogre::TextAreaOverlayElement** consoleOverlayTextAreas_;
    102     };
    103 }
    104 
    105 #endif /* _InGameConsole_H__ */
     37    };}#endif /* _InGameConsole_H__ */
  • code/branches/network/src/orxonox/hud/BarOverlayElement.cc

    • Property svn:eol-style set to native
    r1454 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. *
    222 *   Author:
    233 *      Yuning Chai
  • code/branches/network/src/orxonox/hud/BarOverlayElement.h

    • Property svn:eol-style set to native
    r1454 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. *
    222 *   Author:
    233 *      Yuning Chai
  • code/branches/network/src/orxonox/hud/HUD.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/hud/HUD.h

    • Property svn:eol-style set to native
    r1456 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. *
    222 *   Author:
    233 *      Yuning Chai
  • code/branches/network/src/orxonox/hud/Navigation.cc

    • Property svn:eol-style set to native
    r1460 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. *
    222 *   Author:
    233 *      Felix Schulthess
  • code/branches/network/src/orxonox/hud/Navigation.h

    • Property svn:eol-style set to native
    r1456 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. *
    222 *   Author:
    233 *      Felix Schulthess
  • code/branches/network/src/orxonox/hud/OverlayElementFactories.h

    • Property svn:eol-style set to native
    r1454 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. *
    222 *   Author:
    233 *      Yuning Chai
  • code/branches/network/src/orxonox/hud/RadarObject.cc

    • Property svn:eol-style set to native
    r1480 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. *
    222 *   Author:
    233 *      Felix Schulthess
  • code/branches/network/src/orxonox/hud/RadarObject.h

    • Property svn:eol-style set to native
    r1456 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. *
    222 *   Author:
    233 *      Felix Schulthess
  • code/branches/network/src/orxonox/hud/RadarOverlayElement.cc

    • Property svn:eol-style set to native
    r1463 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. *
    222 *   Author:
    233 *      Yuning Chai
  • code/branches/network/src/orxonox/hud/RadarOverlayElement.h

    • Property svn:eol-style set to native
    r1454 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. *
    222 *   Author:
    233 *      Yuning Chai
  • code/branches/network/src/orxonox/objects/Ambient.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/Ambient.h

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/Camera.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/Camera.h

    • Property svn:eol-style set to native
    r1406 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
    22  *   Author:
    23  *      Fabian 'x3n' Landau
    24  *   Co-authors:
    25  *      Benjamin Knecht
    26  *
    27  */
    28 
    29 #ifndef _Camera_H__
    30 #define _Camera_H__
    31 
    32 #include <OgrePrerequisites.h>
    33 #include <OgreSceneNode.h>
    34 #include <OgreCamera.h>
    35 
    36 #include "OrxonoxPrereqs.h"
    37 
    38 namespace orxonox
    39 {
    40     class _OrxonoxExport Camera
    41     {
    42       friend class CameraHandler;
    43       public:
    44         Camera(Ogre::SceneNode* node = NULL);
    45         virtual ~Camera();
    46 
    47         void setPositionNode(Ogre::SceneNode* node);
    48         inline Ogre::SceneNode* getCameraNode() { return this->positionNode_; }
    49         // maybe also BaseObject
    50         void setTargetNode(Ogre::SceneNode* obj);
    51 
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * *   Author: *      Fabian 'x3n' Landau *   Co-authors: *      Benjamin Knecht * */#ifndef _Camera_H__#define _Camera_H__#include <OgrePrerequisites.h>#include <OgreSceneNode.h>#include <OgreCamera.h>#include "OrxonoxPrereqs.h"namespace orxonox{    class _OrxonoxExport Camera    {      friend class CameraHandler;      public:        Camera(Ogre::SceneNode* node = NULL);        virtual ~Camera();        void setPositionNode(Ogre::SceneNode* node);        inline Ogre::SceneNode* getCameraNode() { return this->positionNode_; }        // maybe also BaseObject        void setTargetNode(Ogre::SceneNode* obj);
    522        Ogre::Camera* cam_;
    53 
    54         void tick(float dt);
    55         void update();
    56         inline bool hasFocus() { return this->bHasFocus_; }
    57 
    58       private:
    59         void removeFocus();
    60         void setFocus(Ogre::Camera* ogreCam);
    61 
    62       private:
    63         Ogre::SceneNode* targetNode_;
    64         Ogre::SceneNode* positionNode_;
    65         Ogre::SceneNode* cameraNode_;
    66         Ogre::Vector3 oldPos;
    67         bool bHasFocus_;
    68     };
    69 }
    70 
    71 #endif /* _Camera_H__ */
     3        void tick(float dt);        void update();        inline bool hasFocus() { return this->bHasFocus_; }      private:        void removeFocus();        void setFocus(Ogre::Camera* ogreCam);      private:        Ogre::SceneNode* targetNode_;        Ogre::SceneNode* positionNode_;        Ogre::SceneNode* cameraNode_;        Ogre::Vector3 oldPos;        bool bHasFocus_;    };}#endif /* _Camera_H__ */
  • code/branches/network/src/orxonox/objects/CameraHandler.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/CameraHandler.h

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/Explosion.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/Explosion.h

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/Model.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/Model.h

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/NPC.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/NPC.h

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/Projectile.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/Projectile.h

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/RotatingProjectile.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/RotatingProjectile.h

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/Skybox.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/Skybox.h

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/SpaceShip.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/SpaceShip.h

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/SpaceShipAI.cc

    • Property svn:eol-style set to native
    r1484 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
    22  *   Author:
    23  *      Fabian 'x3n' Landau
    24  *   Co-authors:
    25  *      ...
    26  *
    27  */
    28 
    29 #include "OrxonoxStableHeaders.h"
    30 #include "SpaceShipAI.h"
    31 
    32 #include <OgreMath.h>
    33 #include "Projectile.h"
    34 #include "core/CoreIncludes.h"
    35 #include "core/Iterator.h"
    36 #include "core/Executor.h"
    37 #include "core/ConsoleCommand.h"
    38 #include "core/XMLPort.h"
    39 
    40 #define ACTION_INTERVAL 1.0f
    41 
    42 namespace orxonox
    43 {
    44     SetConsoleCommand(SpaceShipAI, createEnemy, true).setDefaultValue(0, 1);
    45     SetConsoleCommand(SpaceShipAI, killEnemies, true).setDefaultValue(0, 0);
    46 
    47     CreateFactory(SpaceShipAI);
    48 
    49     SpaceShipAI::SpaceShipAI()
    50     {
    51         RegisterObject(SpaceShipAI);
    52 
    53         this->alive_ = true;
    54         this->setPosition(Vector3(rnd(-1000, 1000), rnd(-1000, 1000), rnd(-1000, 0000)));
    55         this->target_ = 0;
    56         this->bShooting_ = 0;
    57         this->bHasTargetPosition_ = false;
    58 
    59         this->setTeamNr((int)rnd(NUM_AI_TEAMS) % NUM_AI_TEAMS + 1);
    60 
    61         if (NUM_AI_TEAMS > 0)
    62             this->teamColours_[1] = ColourValue(1, 0, 0, 1);
    63         if (NUM_AI_TEAMS > 1)
    64             this->teamColours_[2] = ColourValue(0, 1, 0, 1);
    65         if (NUM_AI_TEAMS > 2)
    66             this->teamColours_[3] = ColourValue(0, 0, 1, 1);
    67 
    68         for (int i = 4; i <= NUM_AI_TEAMS; ++i)
    69             this->teamColours_[i] = ColourValue(rnd(), rnd(), rnd(), 1);
    70     }
    71 
    72     void SpaceShipAI::XMLPort(Element& xmlelement, XMLPort::Mode mode)
    73     {
    74         SpaceShip::XMLPort(xmlelement, mode);
    75         myShip_=true;
    76 
    77         this->actionTimer_.setTimer(ACTION_INTERVAL, true, this, createExecutor(createFunctor(&SpaceShipAI::action)));
    78     }
    79 
    80     void SpaceShipAI::createEnemy(int num)
    81     {
    82         for (int i = 0; i < num; ++i)
    83         {
    84             SpaceShipAI* newenemy = new SpaceShipAI();
    85             newenemy->setMesh("assff.mesh");
    86 //            newenemy->setPosition(0, 0, 0);
    87             newenemy->setScale(10);
    88             newenemy->setMaxSpeed(500);
    89             newenemy->setMaxSideAndBackSpeed(50);
    90             newenemy->setMaxRotation(1.0);
    91             newenemy->setTransAcc(200);
    92             newenemy->setRotAcc(3.0);
    93             newenemy->setTransDamp(75);
    94             newenemy->setRotDamp(1.0);
    95             Element xmlelement;
    96             newenemy->XMLPort(xmlelement, XMLPort::LoadObject);
    97         }
    98     }
    99 
    100     void SpaceShipAI::killEnemies(int num)
    101     {
    102         int i = 0;
    103         for (Iterator<SpaceShipAI> it = ObjectList<SpaceShipAI>::begin(); it; )
    104         {
    105             delete *(it++);
    106             ++i;
    107             if (num && i >= num)
    108                 break;
    109         }
    110     }
    111 
    112     ColourValue SpaceShipAI::getProjectileColour() const
    113     {
    114         return this->teamColours_[this->getTeamNr()];
    115     }
    116 
    117     void SpaceShipAI::action()
    118     {
    119         float random;
    120         float maxrand = 100.0f / ACTION_INTERVAL;
    121 
    122         // search enemy
    123         random = rnd(maxrand);
    124 //std::cout << "search enemy: " << random << std::endl;
    125         if (random < 20 && (!this->target_))
    126         {
    127             this->searchNewTarget();
    128         }
    129 
    130         // forget enemy
    131         random = rnd(maxrand);
    132 //std::cout << "forget enemy: " << random << std::endl;
    133         if (random < 5 && (this->target_))
    134         {
    135             this->forgetTarget();
    136         }
    137 
    138         // next enemy
    139         random = rnd(maxrand);
    140 //std::cout << "next enemy: " << random << std::endl;
    141         if (random < 10 && (this->target_))
    142         {
    143             this->searchNewTarget();
    144         }
    145 
    146         // fly somewhere
    147         random = rnd(maxrand);
    148 //std::cout << "fly somewhere: " << random << std::endl;
    149         if (random < 40 && (!this->bHasTargetPosition_ && !this->target_))
    150         {
    151             this->searchNewTargetPosition();
    152         }
    153 
    154         // stop flying
    155         random = rnd(maxrand);
    156 //std::cout << "stop flying: " << random << std::endl;
    157         if (random < 10 && (this->bHasTargetPosition_ && !this->target_))
    158         {
    159             this->bHasTargetPosition_ = false;
    160         }
    161 
    162         // fly somewhere else
    163         random = rnd(maxrand);
    164 //std::cout << "fly somewhere else: " << random << std::endl;
    165         if (random < 30 && (this->bHasTargetPosition_ && !this->target_))
    166         {
    167             this->searchNewTargetPosition();
    168         }
    169 
    170         // shoot
    171         random = rnd(maxrand);
    172 //std::cout << "shoot: " << random << std::endl;
    173         if (random < 75 && (this->target_ && !this->bShooting_))
    174         {
    175             this->bShooting_ = true;
    176         }
    177 
    178         // stop shooting
    179         random = rnd(maxrand);
    180 //std::cout << "stop shooting: " << random << std::endl;
    181         if (random < 25 && (this->bShooting_))
    182         {
    183             this->bShooting_ = false;
    184         }
    185     }
    186 
    187     void SpaceShipAI::tick(float dt)
    188     {
    189         if (this->target_)
    190             this->aimAtTarget();
    191 
    192         if (this->bHasTargetPosition_)
    193             this->moveToTargetPosition(dt);
    194 
    195         if (this->bShooting_ && this->isCloseAtTarget(2000) && this->isLookingAtTarget(Ogre::Math::PI / 10.0f))
    196             this->doFire();
    197 
    198         SpaceShip::tick(dt);
    199     }
    200 
    201     void SpaceShipAI::moveToTargetPosition(float dt)
    202     {
    203         static Radian RadianZERO(0);
    204 
    205 //        float dotprod = (this->getOrientation() * Ogre::Vector3::UNIT_X).dotProduct(this->targetPosition_ - this->getPosition());
    206         Quaternion rotation = (this->getOrientation() * Ogre::Vector3::UNIT_X).getRotationTo(this->targetPosition_ - this->getPosition());
    207 /*
    208 std::cout << "scalprod: " << dotprod << std::endl;
    209 std::cout << "dist: " << this->targetPosition_ - this->getPosition() << std::endl;
    210 std::cout << "yaw: " << rotation.getYaw().valueRadians() << std::endl;
    211 std::cout << "pitch: " << rotation.getPitch().valueRadians() << std::endl;
    212 std::cout << "roll: " << rotation.getRoll().valueRadians() << std::endl;
    213 */
    214         this->setMoveYaw(-rotation.getRoll().valueRadians());
    215         this->setMovePitch(rotation.getYaw().valueRadians());
    216 
    217         if ((this->targetPosition_ - this->getPosition()).length() > 100)
    218         {
    219             this->setMoveLongitudinal(1);
    220         }
    221 
    222     }
    223 
    224     void SpaceShipAI::searchNewTargetPosition()
    225     {
    226         this->targetPosition_ = Vector3(rnd(-5000,5000), rnd(-5000,5000), rnd(-5000,5000));
    227         this->bHasTargetPosition_ = true;
    228     }
    229 
    230     void SpaceShipAI::searchNewTarget()
    231     {
    232         this->targetPosition_ = this->getPosition();
    233         this->forgetTarget();
    234 
    235         for (Iterator<SpaceShip> it = ObjectList<SpaceShip>::begin(); it; ++it)
    236         {
    237             if (it->getTeamNr() != this->getTeamNr())
    238             {
    239                 float speed = this->getVelocity().length();
    240                 Vector3 distanceCurrent = this->targetPosition_ - this->getPosition();
    241                 Vector3 distanceNew = it->getPosition() - this->getPosition();
    242                 if (!this->target_ || it->getPosition().squaredDistance(this->getPosition()) * (1.5f + acos((this->getOrientation() * Ogre::Vector3::UNIT_X).dotProduct(distanceNew) / speed / distanceNew.length()) / (2 * Ogre::Math::PI))
    243                         < this->targetPosition_.squaredDistance(this->getPosition()) * (1.5f + acos((this->getOrientation() * Ogre::Vector3::UNIT_X).dotProduct(distanceCurrent) / speed / distanceCurrent.length()) / (2 * Ogre::Math::PI)))
    244                 {
    245                     this->target_ = (*it);
    246                     this->targetPosition_ = it->getPosition();
    247                 }
    248             }
    249         }
    250    }
    251 
    252     void SpaceShipAI::forgetTarget()
    253     {
    254         this->target_ = 0;
    255         this->bShooting_ = false;
    256     }
    257 
    258     void SpaceShipAI::aimAtTarget()
    259     {
    260         if (!this->target_)
    261             return;
    262 /*
    263         Vector3 enemymovement = this->target_->getVelocity();
    264         Vector3 distance_normalised = this->target_->getPosition() - this->getPosition();
    265         distance_normalised.normalise();
    266 
    267         float scalarprod = enemymovement.dotProduct(distance_normalised);
    268         float aimoffset = scalarprod*scalarprod + Projectile::getSpeed() * Projectile::getSpeed() - this->target_->getVelocity().squaredLength();
    269         if (aimoffset < 0)
    270         {
    271             this->bHasTargetPosition_ = false;
    272             return;
    273         }
    274         aimoffset = -scalarprod + sqrt(aimoffset);
    275         this->targetPosition_ = enemymovement + distance_normalised * aimoffset;
    276         this->bHasTargetPosition_ = true;
    277 
    278         std::cout << "targetpos: " << this->targetPosition_ << std::endl;
    279 */
    280         this->targetPosition_ = this->target_->getPosition();
    281         this->bHasTargetPosition_ = true;
    282     }
    283 
    284     bool SpaceShipAI::isCloseAtTarget(float distance)
    285     {
    286         return (this->getPosition().squaredDistance(this->targetPosition_) < distance*distance);
    287     }
    288 
    289     bool SpaceShipAI::isLookingAtTarget(float angle)
    290     {
    291         return (this->getOrientation() * Ogre::Vector3::UNIT_X).directionEquals(this->targetPosition_ - this->getPosition(), Radian(angle));
    292     }
    293 }
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * *   Author: *      Fabian 'x3n' Landau *   Co-authors: *      ... * */#include "OrxonoxStableHeaders.h"
     2#include "SpaceShipAI.h"#include <OgreMath.h>#include "Projectile.h"#include "core/CoreIncludes.h"#include "core/Iterator.h"#include "core/Executor.h"#include "core/ConsoleCommand.h"#include "core/XMLPort.h"#define ACTION_INTERVAL 1.0fnamespace orxonox{    SetConsoleCommand(SpaceShipAI, createEnemy, true).setDefaultValue(0, 1);    SetConsoleCommand(SpaceShipAI, killEnemies, true).setDefaultValue(0, 0);    CreateFactory(SpaceShipAI);    SpaceShipAI::SpaceShipAI()    {        RegisterObject(SpaceShipAI);        this->alive_ = true;        this->setPosition(Vector3(rnd(-1000, 1000), rnd(-1000, 1000), rnd(-1000, 0000)));        this->target_ = 0;        this->bShooting_ = 0;        this->bHasTargetPosition_ = false;        this->setTeamNr((int)rnd(NUM_AI_TEAMS) % NUM_AI_TEAMS + 1);        if (NUM_AI_TEAMS > 0)            this->teamColours_[1] = ColourValue(1, 0, 0, 1);        if (NUM_AI_TEAMS > 1)            this->teamColours_[2] = ColourValue(0, 1, 0, 1);        if (NUM_AI_TEAMS > 2)            this->teamColours_[3] = ColourValue(0, 0, 1, 1);        for (int i = 4; i <= NUM_AI_TEAMS; ++i)            this->teamColours_[i] = ColourValue(rnd(), rnd(), rnd(), 1);    }    void SpaceShipAI::XMLPort(Element& xmlelement, XMLPort::Mode mode)    {        SpaceShip::XMLPort(xmlelement, mode);        myShip_=true;        this->actionTimer_.setTimer(ACTION_INTERVAL, true, this, createExecutor(createFunctor(&SpaceShipAI::action)));    }    void SpaceShipAI::createEnemy(int num)    {        for (int i = 0; i < num; ++i)        {            SpaceShipAI* newenemy = new SpaceShipAI();            newenemy->setMesh("assff.mesh");//            newenemy->setPosition(0, 0, 0);            newenemy->setScale(10);            newenemy->setMaxSpeed(500);            newenemy->setMaxSideAndBackSpeed(50);            newenemy->setMaxRotation(1.0);            newenemy->setTransAcc(200);            newenemy->setRotAcc(3.0);            newenemy->setTransDamp(75);            newenemy->setRotDamp(1.0);            Element xmlelement;            newenemy->XMLPort(xmlelement, XMLPort::LoadObject);        }    }    void SpaceShipAI::killEnemies(int num)    {        int i = 0;        for (Iterator<SpaceShipAI> it = ObjectList<SpaceShipAI>::begin(); it; )        {            delete *(it++);            ++i;            if (num && i >= num)                break;        }    }    ColourValue SpaceShipAI::getProjectileColour() const    {        return this->teamColours_[this->getTeamNr()];    }    void SpaceShipAI::action()    {        float random;        float maxrand = 100.0f / ACTION_INTERVAL;        // search enemy        random = rnd(maxrand);//std::cout << "search enemy: " << random << std::endl;        if (random < 20 && (!this->target_))        {            this->searchNewTarget();        }        // forget enemy        random = rnd(maxrand);//std::cout << "forget enemy: " << random << std::endl;        if (random < 5 && (this->target_))        {            this->forgetTarget();        }        // next enemy        random = rnd(maxrand);//std::cout << "next enemy: " << random << std::endl;        if (random < 10 && (this->target_))        {            this->searchNewTarget();        }        // fly somewhere        random = rnd(maxrand);//std::cout << "fly somewhere: " << random << std::endl;        if (random < 40 && (!this->bHasTargetPosition_ && !this->target_))        {            this->searchNewTargetPosition();        }        // stop flying        random = rnd(maxrand);//std::cout << "stop flying: " << random << std::endl;        if (random < 10 && (this->bHasTargetPosition_ && !this->target_))        {            this->bHasTargetPosition_ = false;        }        // fly somewhere else        random = rnd(maxrand);//std::cout << "fly somewhere else: " << random << std::endl;        if (random < 30 && (this->bHasTargetPosition_ && !this->target_))        {            this->searchNewTargetPosition();        }        // shoot        random = rnd(maxrand);//std::cout << "shoot: " << random << std::endl;        if (random < 75 && (this->target_ && !this->bShooting_))        {            this->bShooting_ = true;        }        // stop shooting        random = rnd(maxrand);//std::cout << "stop shooting: " << random << std::endl;        if (random < 25 && (this->bShooting_))        {            this->bShooting_ = false;        }    }    void SpaceShipAI::tick(float dt)    {        if (this->target_)            this->aimAtTarget();        if (this->bHasTargetPosition_)            this->moveToTargetPosition(dt);        if (this->bShooting_ && this->isCloseAtTarget(2000) && this->isLookingAtTarget(Ogre::Math::PI / 10.0f))            this->doFire();        SpaceShip::tick(dt);    }    void SpaceShipAI::moveToTargetPosition(float dt)    {        static Radian RadianZERO(0);//        float dotprod = (this->getOrientation() * Ogre::Vector3::UNIT_X).dotProduct(this->targetPosition_ - this->getPosition());        Quaternion rotation = (this->getOrientation() * Ogre::Vector3::UNIT_X).getRotationTo(this->targetPosition_ - this->getPosition());/*std::cout << "scalprod: " << dotprod << std::endl;std::cout << "dist: " << this->targetPosition_ - this->getPosition() << std::endl;std::cout << "yaw: " << rotation.getYaw().valueRadians() << std::endl;std::cout << "pitch: " << rotation.getPitch().valueRadians() << std::endl;std::cout << "roll: " << rotation.getRoll().valueRadians() << std::endl;*/        this->setMoveYaw(-rotation.getRoll().valueRadians());        this->setMovePitch(rotation.getYaw().valueRadians());        if ((this->targetPosition_ - this->getPosition()).length() > 100)        {            this->setMoveLongitudinal(1);        }    }    void SpaceShipAI::searchNewTargetPosition()    {        this->targetPosition_ = Vector3(rnd(-5000,5000), rnd(-5000,5000), rnd(-5000,5000));        this->bHasTargetPosition_ = true;    }    void SpaceShipAI::searchNewTarget()    {        this->targetPosition_ = this->getPosition();        this->forgetTarget();        for (Iterator<SpaceShip> it = ObjectList<SpaceShip>::begin(); it; ++it)        {            if (it->getTeamNr() != this->getTeamNr())            {                float speed = this->getVelocity().length();                Vector3 distanceCurrent = this->targetPosition_ - this->getPosition();                Vector3 distanceNew = it->getPosition() - this->getPosition();                if (!this->target_ || it->getPosition().squaredDistance(this->getPosition()) * (1.5f + acos((this->getOrientation() * Ogre::Vector3::UNIT_X).dotProduct(distanceNew) / speed / distanceNew.length()) / (2 * Ogre::Math::PI))                        < this->targetPosition_.squaredDistance(this->getPosition()) * (1.5f + acos((this->getOrientation() * Ogre::Vector3::UNIT_X).dotProduct(distanceCurrent) / speed / distanceCurrent.length()) / (2 * Ogre::Math::PI)))                {                    this->target_ = (*it);                    this->targetPosition_ = it->getPosition();                }            }        }   }    void SpaceShipAI::forgetTarget()    {        this->target_ = 0;        this->bShooting_ = false;    }    void SpaceShipAI::aimAtTarget()    {        if (!this->target_)            return;/*        Vector3 enemymovement = this->target_->getVelocity();        Vector3 distance_normalised = this->target_->getPosition() - this->getPosition();        distance_normalised.normalise();        float scalarprod = enemymovement.dotProduct(distance_normalised);        float aimoffset = scalarprod*scalarprod + Projectile::getSpeed() * Projectile::getSpeed() - this->target_->getVelocity().squaredLength();        if (aimoffset < 0)        {            this->bHasTargetPosition_ = false;            return;        }        aimoffset = -scalarprod + sqrt(aimoffset);        this->targetPosition_ = enemymovement + distance_normalised * aimoffset;        this->bHasTargetPosition_ = true;        std::cout << "targetpos: " << this->targetPosition_ << std::endl;*/        this->targetPosition_ = this->target_->getPosition();        this->bHasTargetPosition_ = true;    }    bool SpaceShipAI::isCloseAtTarget(float distance)    {        return (this->getPosition().squaredDistance(this->targetPosition_) < distance*distance);    }    bool SpaceShipAI::isLookingAtTarget(float angle)    {        return (this->getOrientation() * Ogre::Vector3::UNIT_X).directionEquals(this->targetPosition_ - this->getPosition(), Radian(angle));    }}
  • code/branches/network/src/orxonox/objects/SpaceShipAI.h

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/WorldEntity.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/WorldEntity.h

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/weapon/AmmunitionDump.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/weapon/AmmunitionDump.h

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/weapon/BarrelGun.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/weapon/BarrelGun.h

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/weapon/BaseWeapon.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/weapon/BaseWeapon.h

    • Property svn:eol-style set to native
    r1056 r1494  
    11/*
    22 *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
     3 *                    > www.orxonox.net < *
    54 *
    65 *   License notice:
     
    2625 *
    2726 */
    28 
    29 
    30 #ifndef _BaseWeapon_H__
    31 #define _BaseWeapon_H__
    32 
    33 #include "OrxonoxPrereqs.h"
    34 
    35 #include <OgrePrerequisites.h>
    36 
    37 #include "../Model.h"
    38 
    39 
    40 namespace orxonox {
    41   class _OrxonoxExport BaseWeapon : public Model
    42   {
    43   public:
    44     enum Action {
    45       NOTHING  = 0,
    46       RELOAD   = 1,
    47       CHANGE_AMMO  = 2,
    48       SPECIAL  = 3
    49     };
    50 
    51   protected:
    52     enum State {
    53       IDLE = 0,
    54       PRIMARY_FIRE = 1,
    55       SECONDARY_FIRE = 2,
    56       RELOADING = 3,
    57       CHANGING_AMMO = 4,
    58     };
    59 
    60   public:
    61     BaseWeapon();
    62           virtual ~BaseWeapon();
    63 
    64     bool addAction(const Action);
    65 
    66     void primaryFireRequest();
    67 
    68     void secondaryFireRequest();
    69 
    70     int getAmmoState();
    71 
    72     void setAmmoDump(AmmunitionDump*);
    73 
    74     inline virtual void loadParams(TiXmlElement* xmlElem) { Model::loadParams(xmlElem); };
    75 
    76     virtual void tick(float dt);
    77 
    78   protected:
    79     virtual void primaryFire() = 0;
    80 
    81     virtual void primaryFiring(float) = 0;
    82 
    83     virtual void secondaryFire() = 0;
    84 
    85     virtual void secondaryFiring(float) = 0;
    86 
    87     virtual void registerAllVariables() { };
    88 
    89   public:
    90 
    91   protected:
    92     Ogre::SceneManager *sceneMgr_;
    93 
    94     int bulletCounter_;
    95     BulletManager *bulletManager_;
    96 
    97     AmmunitionDump *ammoDump_;
    98 
    99     bool primaryFireRequest_;
    100     bool secondaryFireRequest_;
    101 
    102     float totalTime_;
    103     float actionStartTime_;
    104 
    105     State currentState_;
    106     bool secondaryFired_;
    107 
    108     Action nextAction_;
    109     bool actionAdded_;
    110     float timeSinceNextActionAdded_;
    111     static float nextActionValidityPeriod_s;
    112 
    113     // weapon properties
    114     int leftAmmo_;
    115     float primaryFirePower_;
    116     float secondaryFirePower_;
    117     float primaryFiringRate_;
    118     float secondaryFiringRate_;
    119     Real primaryBulletSpeed_;
    120     Real secondaryBulletSpeed_;
    121 
    122     int magazineSize_;
    123 
    124   };
    125 }
    126 
    127 #endif /* _BaseWeapon_H__ */
     27#ifndef _BaseWeapon_H__#define _BaseWeapon_H__#include "OrxonoxPrereqs.h"#include <OgrePrerequisites.h>#include "../Model.h"namespace orxonox {  class _OrxonoxExport BaseWeapon : public Model  {  public:    enum Action {      NOTHING  = 0,      RELOAD   = 1,      CHANGE_AMMO  = 2,      SPECIAL  = 3    };  protected:    enum State {      IDLE = 0,      PRIMARY_FIRE = 1,      SECONDARY_FIRE = 2,      RELOADING = 3,      CHANGING_AMMO = 4,    };  public:    BaseWeapon();          virtual ~BaseWeapon();    bool addAction(const Action);    void primaryFireRequest();    void secondaryFireRequest();    int getAmmoState();    void setAmmoDump(AmmunitionDump*);    inline virtual void loadParams(TiXmlElement* xmlElem) { Model::loadParams(xmlElem); };    virtual void tick(float dt);  protected:    virtual void primaryFire() = 0;    virtual void primaryFiring(float) = 0;    virtual void secondaryFire() = 0;    virtual void secondaryFiring(float) = 0;    virtual void registerAllVariables() { };  public:  protected:    Ogre::SceneManager *sceneMgr_;    int bulletCounter_;    BulletManager *bulletManager_;    AmmunitionDump *ammoDump_;    bool primaryFireRequest_;    bool secondaryFireRequest_;    float totalTime_;    float actionStartTime_;    State currentState_;    bool secondaryFired_;    Action nextAction_;    bool actionAdded_;    float timeSinceNextActionAdded_;    static float nextActionValidityPeriod_s;    // weapon properties    int leftAmmo_;    float primaryFirePower_;    float secondaryFirePower_;    float primaryFiringRate_;    float secondaryFiringRate_;    Real primaryBulletSpeed_;    Real secondaryBulletSpeed_;    int magazineSize_;  };}#endif /* _BaseWeapon_H__ */
  • code/branches/network/src/orxonox/objects/weapon/Bullet.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/weapon/Bullet.h

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/weapon/BulletManager.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/weapon/BulletManager.h

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/weapon/WeaponStation.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/objects/weapon/WeaponStation.h

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/particle/ParticleInterface.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/particle/ParticleInterface.h

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/tolua/tolua.pkg

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/tools/BillboardSet.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/tools/BillboardSet.h

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/tools/Light.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/tools/Light.h

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/tools/Mesh.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/tools/Mesh.h

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/tools/Timer.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/orxonox/tools/Timer.h

    • Property svn:eol-style set to native
  • code/branches/network/src/tinyxml/CMakeLists.txt

    • Property svn:eol-style set to native
  • code/branches/network/src/tinyxml/ticpp.cc

    • Property svn:eol-style set to native
    r871 r1494  
    1 #define TIXML_USE_TICPP
    2 
    3 /*
     1#define TIXML_USE_TICPP/*
    42http://code.google.com/p/ticpp/
    53Copyright (c) 2006 Ryan Pusztai, Ryan Mulder
  • code/branches/network/src/tinyxml/ticpp.h

    • Property svn:eol-style set to native
    r1052 r1494  
    1 #define TIXML_USE_TICPP
    2 
    3 /*
     1#define TIXML_USE_TICPP/*
    42http://code.google.com/p/ticpp/
    53Copyright (c) 2006 Ryan Pusztai, Ryan Mulder
  • code/branches/network/src/tinyxml/ticpprc.h

    • Property svn:eol-style set to native
    r871 r1494  
    1 #define TIXML_USE_TICPP
    2 
    3 /*
     1#define TIXML_USE_TICPP/*
    42http://code.google.com/p/ticpp/
    53Copyright (c) 2006 Ryan Pusztai, Ryan Mulder
  • code/branches/network/src/tinyxml/tinystr.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/tinyxml/tinystr.h

    • Property svn:eol-style set to native
  • code/branches/network/src/tinyxml/tinyxml.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/tinyxml/tinyxml.h

    • Property svn:eol-style set to native
    r871 r1494  
    1 #define TIXML_USE_TICPP
    2 
    3 /*
     1#define TIXML_USE_TICPP/*
    42www.sourceforge.net/projects/tinyxml
    53Original code (2.0 and earlier )copyright (c) 2000-2006 Lee Thomason (www.grinninglizard.com)
  • code/branches/network/src/tinyxml/tinyxmlerror.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/tinyxml/tinyxmlparser.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/tolua/CMakeLists.txt

    • Property svn:eol-style set to native
  • code/branches/network/src/tolua/tolua++.h

    • Property svn:eol-style set to native
  • code/branches/network/src/tolua/tolua.c

    • Property svn:eol-style set to native
  • code/branches/network/src/tolua/tolua_event.c

    • Property svn:eol-style set to native
  • code/branches/network/src/tolua/tolua_event.h

    • Property svn:eol-style set to native
  • code/branches/network/src/tolua/tolua_is.c

    • Property svn:eol-style set to native
  • code/branches/network/src/tolua/tolua_map.c

    • Property svn:eol-style set to native
  • code/branches/network/src/tolua/tolua_push.c

    • Property svn:eol-style set to native
  • code/branches/network/src/tolua/tolua_to.c

    • Property svn:eol-style set to native
  • code/branches/network/src/tolua/toluabind.c

    • Property svn:eol-style set to native
  • code/branches/network/src/tolua/toluabind.h

    • Property svn:eol-style set to native
  • code/branches/network/src/util/ArgReader.cc

    • Property svn:eol-style set to native
    r1062 r1494  
    11/*
    22 *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
     3 *                    > www.orxonox.net < *
    54 *
    65 *   License notice:
  • code/branches/network/src/util/ArgReader.h

    • Property svn:eol-style set to native
    r1062 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
    22  *   Author:
    23  *      Benjamin Knecht <beni_at_orxonox.net>
    24  *   Co-authors:
    25  *      ...
    26  *
    27  */
    28 
    29 /**
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * *   Author: *      Benjamin Knecht <beni_at_orxonox.net> *   Co-authors: *      ... * *//**
    302 @file  Argreader.h
    313 @brief reads arguments
     
    368#define _ArgReader_H__
    379
    38 #include "UtilPrereqs.h"
    39 
    40 #include <string>
    41 
     10#include "UtilPrereqs.h"#include <string>
    4211class _UtilExport ArgReader
    4312{
  • code/branches/network/src/util/CMakeLists.txt

    • Property svn:eol-style set to native
  • code/branches/network/src/util/Clipboard.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/util/Clipboard.h

    • Property svn:eol-style set to native
  • code/branches/network/src/util/Convert.h

    • Property svn:eol-style set to native
    r1446 r1494  
    11/*
    22 *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
     3 *                    > www.orxonox.net < *
    54 *
    65 *   License notice:
     
    2221 *   Author:
    2322 *      Benjamin Grauer
    24  *      Fabian 'x3n' Landau
    25  *   Co-authors:
    26  *      ...
     23 *      Fabian 'x3n' Landau *   Co-authors: *      ...
    2724 */
    2825
     
    4946#pragma warning(disable:4100 4800)
    5047#endif
    51 
    52 
    53 //////////
    54 // MAIN //
    55 //////////
    56 
    57 // Enum to declare the wanted conversion preference in case of equal type-levels
    58 enum ConversionPreference
    59 {
    60     CP_PreferToType,
    61     CP_PreferFromType,
    62 };
    63 
    64 // Helper classes to determine the preferred partial template specialization
    65 class _ToType_   {};
    66 class _FromType_ {};
    67 class _Explicit_ {};
    68 
    69 
    70 // The default convert functions
    71 template <class FromType, class ToType, class Type>
    72 struct ConverterSpecialized
    73 {
    74     enum { specialized = false };
    75     static bool convert(ToType* output, const FromType& input)
    76     { return false; }
    77 };
    78 
    79 
    80 // The default convert function if both types are the same
    81 template <class BothTypes>
    82 struct ConverterSpecialized<BothTypes, BothTypes, _Explicit_>
    83 {
    84     enum { specialized = true };
    85     static bool convert(BothTypes* output, const BothTypes& input)
    86     { (*output) = input; return true; }
    87 };
    88 
    89 
    90 // The possible levels
    91 #define __low__  0 // Everything that is or behaves like a primitive type (an can be converted with a typecast to every other low-level type)
    92 #define __mid__  1 // Everything that has overloaded << and >> operators to operate on a std::stream
    93 #define __high__ 2 // Everything that doesn't fullfill the lowerlevel-requirements and therefore needs specialized conversions
    94 
    95 // Defines the levels of all types: Default is __high__ so you don't have to define every high-level type
    96 template <class T> struct ConverterLevel           { enum { level = __high__ }; };
    97 template <> struct ConverterLevel<std::string>     { enum { level = __mid__ }; };
    98 template <> struct ConverterLevel<orxonox::Radian> { enum { level = __mid__ }; };
    99 template <> struct ConverterLevel<orxonox::Degree> { enum { level = __mid__ }; };
    100 template <> struct ConverterLevel<int>             { enum { level = __low__ }; };
    101 template <> struct ConverterLevel<unsigned int>    { enum { level = __low__ }; };
    102 template <> struct ConverterLevel<char>            { enum { level = __low__ }; };
    103 template <> struct ConverterLevel<unsigned char>   { enum { level = __low__ }; };
    104 template <> struct ConverterLevel<short>           { enum { level = __low__ }; };
    105 template <> struct ConverterLevel<unsigned short>  { enum { level = __low__ }; };
    106 template <> struct ConverterLevel<long>            { enum { level = __low__ }; };
    107 template <> struct ConverterLevel<unsigned long>   { enum { level = __low__ }; };
    108 template <> struct ConverterLevel<float>           { enum { level = __low__ }; };
    109 template <> struct ConverterLevel<double>          { enum { level = __low__ }; };
    110 template <> struct ConverterLevel<long double>     { enum { level = __low__ }; };
    111 template <> struct ConverterLevel<bool>            { enum { level = __low__ }; };
    112 
    113 
    114 // Calculates the preference based on the levels of FromType and ToType
    115 template <int from, int to>
    116 struct ConverterPreference
    117 {
    118     enum
    119     {
    120         // The maximum of both levels: element of {0, 1, 2}
    121         // max 0: Both types are primitives or have a similar behaviour
    122         // max 1: At least one type is not a primitive, but both can be put on a std::stream
    123         // max 2: There is at least one generic type that needs specialized conversions
    124         max = (from > to) ? from : to,
    125 
    126         // The difference between both levels limited to +-1: element of {-1, 0, 1}
    127         // diff -1: The FromType has higher level than the ToType
    128         // diff  0: Both types have the same level
    129         // diff  1: The ToType has higher level than the FromType
    130         diff = ((to - from) > 1) ? 1 : (((to - from) < -1) ? -1 : to - from)
    131     };
    132 };
    133 
    134 
    135 // The default conversion: This usually does nothing
    136 template <int max, class FromType, class ToType>
    137 struct ConverterDefault
    138 {
    139     static bool convert(ToType* output, const FromType& input)
    140     {
    141         return false;
    142     }
    143 };
    144 // The default conversion for primitives: A typecast (defined over two partial specialized templates to exclude all non-primitive types and classes)    template <int max, class FromType, class ToType>
    145 template <class FromType, class ToType>
    146 struct ConverterDefault<0, FromType, ToType>
    147 {
    148     static bool convert(ToType* output, const FromType& input)
    149     {
    150         (*output) = (ToType)input;
    151         return true;
    152     }
    153 };
    154 
    155 
    156 // Converter: Converts input of FromType into output of ToType
    157 template <int diff, int max, class FromType, class ToType, ConversionPreference pref>
    158 struct Converter
    159 {
    160     static bool convert(ToType* output, const FromType& input)
    161     {
    162         return false;
    163     }
    164 };
    165 // Converter: level{FromType} > level{ToType}
    166 template <int max, class FromType, class ToType, ConversionPreference pref>
    167 struct Converter<-1, max, FromType, ToType, pref>
    168 {   static bool convert(ToType* output, const FromType& input)
    169     { return (ConverterSpecialized<FromType, ToType, _Explicit_>::specialized) ? (ConverterSpecialized<FromType, ToType, _Explicit_>::convert(output, input)) : (ConverterSpecialized<FromType, ToType, _FromType_>::specialized) ? (ConverterSpecialized<FromType, ToType, _FromType_>::convert(output, input)) : (ConverterDefault<max, FromType, ToType>::convert(output, input)); } };
    170 // Converter: level{FromType} < level{ToType}
    171 template <int max, class FromType, class ToType, ConversionPreference pref>
    172 struct Converter<1, max, FromType, ToType, pref>
    173 {   static bool convert(ToType* output, const FromType& input)
    174     { return (ConverterSpecialized<FromType, ToType, _Explicit_>::specialized) ? (ConverterSpecialized<FromType, ToType, _Explicit_>::convert(output, input)) : (ConverterSpecialized<FromType, ToType, _ToType_>::specialized) ? (ConverterSpecialized<FromType, ToType, _ToType_>::convert(output, input)) : (ConverterDefault<max, FromType, ToType>::convert(output, input)); } };
    175 // Converter: level{FromType} = level{ToType}
    176 // CP_PreferToType
    177 template <int max, class FromType, class ToType>
    178 struct Converter<0, max, FromType, ToType, CP_PreferToType>
    179 {   static bool convert(ToType* output, const FromType& input)
    180     { return (ConverterSpecialized<FromType, ToType, _Explicit_>::specialized) ? (ConverterSpecialized<FromType, ToType, _Explicit_>::convert(output, input)) : (ConverterSpecialized<FromType, ToType, _ToType_>::specialized) ? (ConverterSpecialized<FromType, ToType, _ToType_>::convert(output, input)) : (ConverterSpecialized<FromType, ToType, _FromType_>::specialized) ? (ConverterSpecialized<FromType, ToType, _FromType_>::convert(output, input)) : (ConverterDefault<max, FromType, ToType>::convert(output, input)); } };
    181 // CP_PreferFromType
    182 template <int max, class FromType, class ToType>
    183 struct Converter<0, max, FromType, ToType, CP_PreferFromType>
    184 {   static bool convert(ToType* output, const FromType& input)
    185     { return (ConverterSpecialized<FromType, ToType, _Explicit_>::specialized) ? (ConverterSpecialized<FromType, ToType, _Explicit_>::convert(output, input)) : (ConverterSpecialized<FromType, ToType, _FromType_>::specialized) ? (ConverterSpecialized<FromType, ToType, _FromType_>::convert(output, input)) : (ConverterSpecialized<FromType, ToType, _ToType_>::specialized) ? (ConverterSpecialized<FromType, ToType, _ToType_>::convert(output, input)) : (ConverterDefault<max, FromType, ToType>::convert(output, input)); } };
    186 
    187 
    188 // Calls the Converter::convertValue function with the correct template type parameters calculated by ConverterPreference
    189 template <class FromType, class ToType>
    190 static bool convertValue(ToType* output, const FromType& input, ConversionPreference preference = CP_PreferToType)
    191 {
    192     return (preference == CP_PreferToType) ?
    193            Converter<ConverterPreference<ConverterLevel<FromType>::level, ConverterLevel<ToType>::level>::diff,
    194                      ConverterPreference<ConverterLevel<FromType>::level, ConverterLevel<ToType>::level>::max,
    195                      FromType,
    196                      ToType,
    197                      CP_PreferToType>::convert(output, input)
    198          : Converter<ConverterPreference<ConverterLevel<FromType>::level, ConverterLevel<ToType>::level>::diff,
    199                      ConverterPreference<ConverterLevel<FromType>::level, ConverterLevel<ToType>::level>::max,
    200                      FromType,
    201                      ToType,
    202                      CP_PreferFromType>::convert(output, input);
    203 }
    204 
    205 
    206 //////////////////////
    207 // HELPER FUNCTIONS //
    208 //////////////////////
    209 
    210 // Helper function: Calls convertValue with and without default value and returns true if the conversion was successful
    211 template<class FromType, class ToType>
    212 static bool ConvertValue(ToType* output, const FromType& input, ConversionPreference preference = CP_PreferToType)
    213 {
    214     return convertValue(output, input, preference);
    215 }
    216 template<class FromType, class ToType>
    217 static bool ConvertValue(ToType* output, const FromType& input, const ToType& fallback, ConversionPreference preference = CP_PreferToType)
    218 {
    219     if (convertValue(output, input, preference))
    220         return true;
    221 
    222     (*output) = fallback;
    223     return false;
    224 }
    225 
    226 // Helper function: Calls convertValue with and without default value and returns the converted value
    227 template<class FromType, class ToType>
    228 static ToType getConvertedValue(const FromType& input, ConversionPreference preference = CP_PreferToType)
    229 {
    230     ToType output = ToType();
    231     ConvertValue(&output, input, preference);
    232     return output;
    233 }
    234 template<class FromType, class ToType>
    235 static ToType getConvertedValue(const FromType& input, const ToType& fallback, ConversionPreference preference = CP_PreferToType)
    236 {
    237     ToType output = fallback;
    238     ConvertValue(&output, input, fallback, preference);
    239     return output;
    240 }
    241 
    242 
     48//////////// MAIN ////////////// Enum to declare the wanted conversion preference in case of equal type-levelsenum ConversionPreference{    CP_PreferToType,    CP_PreferFromType,};// Helper classes to determine the preferred partial template specializationclass _ToType_   {};class _FromType_ {};class _Explicit_ {};// The default convert functionstemplate <class FromType, class ToType, class Type>struct ConverterSpecialized{    enum { specialized = false };    static bool convert(ToType* output, const FromType& input)    { return false; }};// The default convert function if both types are the sametemplate <class BothTypes>struct ConverterSpecialized<BothTypes, BothTypes, _Explicit_>{    enum { specialized = true };    static bool convert(BothTypes* output, const BothTypes& input)    { (*output) = input; return true; }};// The possible levels#define __low__  0 // Everything that is or behaves like a primitive type (an can be converted with a typecast to every other low-level type)#define __mid__  1 // Everything that has overloaded << and >> operators to operate on a std::stream#define __high__ 2 // Everything that doesn't fullfill the lowerlevel-requirements and therefore needs specialized conversions// Defines the levels of all types: Default is __high__ so you don't have to define every high-level typetemplate <class T> struct ConverterLevel           { enum { level = __high__ }; };template <> struct ConverterLevel<std::string>     { enum { level = __mid__ }; };template <> struct ConverterLevel<orxonox::Radian> { enum { level = __mid__ }; };template <> struct ConverterLevel<orxonox::Degree> { enum { level = __mid__ }; };template <> struct ConverterLevel<int>             { enum { level = __low__ }; };template <> struct ConverterLevel<unsigned int>    { enum { level = __low__ }; };template <> struct ConverterLevel<char>            { enum { level = __low__ }; };template <> struct ConverterLevel<unsigned char>   { enum { level = __low__ }; };template <> struct ConverterLevel<short>           { enum { level = __low__ }; };template <> struct ConverterLevel<unsigned short>  { enum { level = __low__ }; };template <> struct ConverterLevel<long>            { enum { level = __low__ }; };template <> struct ConverterLevel<unsigned long>   { enum { level = __low__ }; };template <> struct ConverterLevel<float>           { enum { level = __low__ }; };template <> struct ConverterLevel<double>          { enum { level = __low__ }; };template <> struct ConverterLevel<long double>     { enum { level = __low__ }; };template <> struct ConverterLevel<bool>            { enum { level = __low__ }; };// Calculates the preference based on the levels of FromType and ToTypetemplate <int from, int to>struct ConverterPreference{    enum    {        // The maximum of both levels: element of {0, 1, 2}        // max 0: Both types are primitives or have a similar behaviour        // max 1: At least one type is not a primitive, but both can be put on a std::stream        // max 2: There is at least one generic type that needs specialized conversions        max = (from > to) ? from : to,        // The difference between both levels limited to +-1: element of {-1, 0, 1}        // diff -1: The FromType has higher level than the ToType        // diff  0: Both types have the same level        // diff  1: The ToType has higher level than the FromType        diff = ((to - from) > 1) ? 1 : (((to - from) < -1) ? -1 : to - from)    };};// The default conversion: This usually does nothingtemplate <int max, class FromType, class ToType>struct ConverterDefault{    static bool convert(ToType* output, const FromType& input)    {        return false;    }};// The default conversion for primitives: A typecast (defined over two partial specialized templates to exclude all non-primitive types and classes)    template <int max, class FromType, class ToType>template <class FromType, class ToType>struct ConverterDefault<0, FromType, ToType>{    static bool convert(ToType* output, const FromType& input)    {        (*output) = (ToType)input;        return true;    }};// Converter: Converts input of FromType into output of ToTypetemplate <int diff, int max, class FromType, class ToType, ConversionPreference pref>struct Converter{    static bool convert(ToType* output, const FromType& input)    {        return false;    }};// Converter: level{FromType} > level{ToType}template <int max, class FromType, class ToType, ConversionPreference pref>struct Converter<-1, max, FromType, ToType, pref>{   static bool convert(ToType* output, const FromType& input)    { return (ConverterSpecialized<FromType, ToType, _Explicit_>::specialized) ? (ConverterSpecialized<FromType, ToType, _Explicit_>::convert(output, input)) : (ConverterSpecialized<FromType, ToType, _FromType_>::specialized) ? (ConverterSpecialized<FromType, ToType, _FromType_>::convert(output, input)) : (ConverterDefault<max, FromType, ToType>::convert(output, input)); } };// Converter: level{FromType} < level{ToType}template <int max, class FromType, class ToType, ConversionPreference pref>struct Converter<1, max, FromType, ToType, pref>{   static bool convert(ToType* output, const FromType& input)    { return (ConverterSpecialized<FromType, ToType, _Explicit_>::specialized) ? (ConverterSpecialized<FromType, ToType, _Explicit_>::convert(output, input)) : (ConverterSpecialized<FromType, ToType, _ToType_>::specialized) ? (ConverterSpecialized<FromType, ToType, _ToType_>::convert(output, input)) : (ConverterDefault<max, FromType, ToType>::convert(output, input)); } };// Converter: level{FromType} = level{ToType}// CP_PreferToTypetemplate <int max, class FromType, class ToType>struct Converter<0, max, FromType, ToType, CP_PreferToType>{   static bool convert(ToType* output, const FromType& input)    { return (ConverterSpecialized<FromType, ToType, _Explicit_>::specialized) ? (ConverterSpecialized<FromType, ToType, _Explicit_>::convert(output, input)) : (ConverterSpecialized<FromType, ToType, _ToType_>::specialized) ? (ConverterSpecialized<FromType, ToType, _ToType_>::convert(output, input)) : (ConverterSpecialized<FromType, ToType, _FromType_>::specialized) ? (ConverterSpecialized<FromType, ToType, _FromType_>::convert(output, input)) : (ConverterDefault<max, FromType, ToType>::convert(output, input)); } };// CP_PreferFromTypetemplate <int max, class FromType, class ToType>struct Converter<0, max, FromType, ToType, CP_PreferFromType>{   static bool convert(ToType* output, const FromType& input)    { return (ConverterSpecialized<FromType, ToType, _Explicit_>::specialized) ? (ConverterSpecialized<FromType, ToType, _Explicit_>::convert(output, input)) : (ConverterSpecialized<FromType, ToType, _FromType_>::specialized) ? (ConverterSpecialized<FromType, ToType, _FromType_>::convert(output, input)) : (ConverterSpecialized<FromType, ToType, _ToType_>::specialized) ? (ConverterSpecialized<FromType, ToType, _ToType_>::convert(output, input)) : (ConverterDefault<max, FromType, ToType>::convert(output, input)); } };// Calls the Converter::convertValue function with the correct template type parameters calculated by ConverterPreferencetemplate <class FromType, class ToType>static bool convertValue(ToType* output, const FromType& input, ConversionPreference preference = CP_PreferToType){    return (preference == CP_PreferToType) ?           Converter<ConverterPreference<ConverterLevel<FromType>::level, ConverterLevel<ToType>::level>::diff,                     ConverterPreference<ConverterLevel<FromType>::level, ConverterLevel<ToType>::level>::max,                     FromType,                     ToType,                     CP_PreferToType>::convert(output, input)         : Converter<ConverterPreference<ConverterLevel<FromType>::level, ConverterLevel<ToType>::level>::diff,                     ConverterPreference<ConverterLevel<FromType>::level, ConverterLevel<ToType>::level>::max,                     FromType,                     ToType,                     CP_PreferFromType>::convert(output, input);}//////////////////////// HELPER FUNCTIONS ////////////////////////// Helper function: Calls convertValue with and without default value and returns true if the conversion was successfultemplate<class FromType, class ToType>static bool ConvertValue(ToType* output, const FromType& input, ConversionPreference preference = CP_PreferToType){    return convertValue(output, input, preference);}template<class FromType, class ToType>static bool ConvertValue(ToType* output, const FromType& input, const ToType& fallback, ConversionPreference preference = CP_PreferToType){    if (convertValue(output, input, preference))        return true;    (*output) = fallback;    return false;}// Helper function: Calls convertValue with and without default value and returns the converted valuetemplate<class FromType, class ToType>static ToType getConvertedValue(const FromType& input, ConversionPreference preference = CP_PreferToType){    ToType output = ToType();    ConvertValue(&output, input, preference);    return output;}template<class FromType, class ToType>static ToType getConvertedValue(const FromType& input, const ToType& fallback, ConversionPreference preference = CP_PreferToType){    ToType output = fallback;    ConvertValue(&output, input, fallback, preference);    return output;}
    24349/////////////////////
    24450// SPECIALIZATIONS //
    24551/////////////////////
    246 
    247 /////////////
    248 // SAMPLES //
    249 /////////////
    250 /*
    251 // convert everything to xyz
    252 template <class FromType>
    253 struct ConverterSpecialized<FromType, xyz, _ToType_>
    254 {
    255     enum { specialized = true };
    256     static bool convert(xyz* output, const FromType& input)
    257     { return ...; }
    258 };
    259 
    260 // convert xyz to everything
    261 template <class ToType>
    262 struct ConverterSpecialized<xyz, ToType, _FromType_>
    263 {
    264     enum { specialized = true };
    265     static bool convert(ToType* output, const xyz& input)
    266     { return ...; }
    267 };
    268 
    269 // convert abc to xyz
    270 template <>
    271 struct ConverterSpecialized<abc, xyz, _Explicit_>
    272 {
    273     enum { specialized = true };
    274     static bool convert(xyz* output, const abc& input)
    275     { return ...; }
    276 };
    277 */
    278 
    279 ////////////
    280 // STRING //
    281 ////////////
    282 
    283 // convert to string
    284 template <class FromType>
    285 struct ConverterSpecialized<FromType, std::string, _ToType_>
    286 {
    287     enum { specialized = true };
    288     static bool convert(std::string* output, const FromType& input)
    289     {
    290         std::ostringstream oss;
    291         if (oss << input)
    292         {
    293             (*output) = oss.str();
    294             return true;
    295         }
    296         else
    297             return false;
    298     }
    299 };
    300 
    301 // convert from string
    302 template <class ToType>
    303 struct ConverterSpecialized<std::string, ToType, _FromType_>
    304 {
    305     enum { specialized = true };
    306     static bool convert(ToType* output, const std::string& input)
    307     {
    308         std::istringstream iss(input);
    309         if (iss >> (*output))
    310             return true;
    311         else
    312             return false;
    313     }
    314 };
    315 
    316 
    317 ////////////////
    318 // MULTITYPES //
    319 ////////////////
    320 
    321 // convert from MultiTypePrimitive
    322 template <class ToType>
    323 struct ConverterSpecialized<MultiTypePrimitive, ToType, _FromType_>
    324 {
    325     enum { specialized = true };
    326     static bool convert(ToType* output, const MultiTypePrimitive& input)
    327     {
    328         if (input.getType() == MT_void)
    329             return ConvertValue(output, input.getVoid());
    330         else if (input.getType() == MT_int)
    331             return ConvertValue(output, input.getInt());
    332         else if (input.getType() == MT_uint)
    333             return ConvertValue(output, input.getUnsignedInt());
    334         else if (input.getType() == MT_char)
    335             return ConvertValue(output, input.getChar());
    336         else if (input.getType() == MT_uchar)
    337             return ConvertValue(output, input.getUnsignedChar());
    338         else if (input.getType() == MT_short)
    339             return ConvertValue(output, input.getShort());
    340         else if (input.getType() == MT_ushort)
    341             return ConvertValue(output, input.getUnsignedShort());
    342         else if (input.getType() == MT_long)
    343             return ConvertValue(output, input.getLong());
    344         else if (input.getType() == MT_ulong)
    345             return ConvertValue(output, input.getUnsignedLong());
    346         else if (input.getType() == MT_float)
    347             return ConvertValue(output, input.getFloat());
    348         else if (input.getType() == MT_double)
    349             return ConvertValue(output, input.getDouble());
    350         else if (input.getType() == MT_longdouble)
    351             return ConvertValue(output, input.getLongDouble());
    352         else if (input.getType() == MT_bool)
    353             return ConvertValue(output, input.getBool());
    354         else
    355             return false;
    356     }
    357 };
    358 
    359 // convert from MultiTypeString
    360 template <class ToType>
    361 struct ConverterSpecialized<MultiTypeString, ToType, _FromType_>
    362 {
    363     enum { specialized = true };
    364     static bool convert(ToType* output, const MultiTypeString& input)
    365     {
    366         if (input.getType() == MT_constchar)
    367             return ConvertValue(output, input.getConstChar());
    368         else if (input.getType() == MT_string)
    369             return ConvertValue(output, input.getString());
    370         else
    371             return ConvertValue(output, (MultiTypePrimitive)input);
    372     }
    373 };
    374 
    375 // convert from MultiTypeMath
    376 template <class ToType>
    377 struct ConverterSpecialized<MultiTypeMath, ToType, _FromType_>
    378 {
    379     enum { specialized = true };
    380     static bool convert(ToType* output, const MultiTypeMath& input)
    381     {
    382         if (input.getType() == MT_vector2)
    383             return ConvertValue(output, input.getVector2());
    384         else if (input.getType() == MT_vector3)
    385             return ConvertValue(output, input.getVector3());
    386         else if (input.getType() == MT_vector4)
    387             return ConvertValue(output, input.getVector4());
    388         else if (input.getType() == MT_quaternion)
    389             return ConvertValue(output, input.getQuaternion());
    390         else if (input.getType() == MT_colourvalue)
    391             return ConvertValue(output, input.getColourValue());
    392         else if (input.getType() == MT_radian)
    393             return ConvertValue(output, input.getRadian());
    394         else if (input.getType() == MT_degree)
    395             return ConvertValue(output, input.getDegree());
    396         else
    397             return ConvertValue(output, (MultiTypeString)input);
    398     }
    399 };
    400 
    401 
     52/////////////// SAMPLES ////////////////*// convert everything to xyztemplate <class FromType>struct ConverterSpecialized<FromType, xyz, _ToType_>{    enum { specialized = true };    static bool convert(xyz* output, const FromType& input)    { return ...; }};// convert xyz to everythingtemplate <class ToType>struct ConverterSpecialized<xyz, ToType, _FromType_>{    enum { specialized = true };    static bool convert(ToType* output, const xyz& input)    { return ...; }};// convert abc to xyztemplate <>struct ConverterSpecialized<abc, xyz, _Explicit_>{    enum { specialized = true };    static bool convert(xyz* output, const abc& input)    { return ...; }};*/////////////// STRING //////////////// convert to stringtemplate <class FromType>struct ConverterSpecialized<FromType, std::string, _ToType_>{    enum { specialized = true };    static bool convert(std::string* output, const FromType& input)    {        std::ostringstream oss;        if (oss << input)        {            (*output) = oss.str();            return true;        }        else            return false;    }};// convert from stringtemplate <class ToType>struct ConverterSpecialized<std::string, ToType, _FromType_>{    enum { specialized = true };    static bool convert(ToType* output, const std::string& input)    {        std::istringstream iss(input);        if (iss >> (*output))            return true;        else            return false;    }};////////////////// MULTITYPES //////////////////// convert from MultiTypePrimitivetemplate <class ToType>struct ConverterSpecialized<MultiTypePrimitive, ToType, _FromType_>{    enum { specialized = true };    static bool convert(ToType* output, const MultiTypePrimitive& input)    {        if (input.getType() == MT_void)            return ConvertValue(output, input.getVoid());        else if (input.getType() == MT_int)            return ConvertValue(output, input.getInt());        else if (input.getType() == MT_uint)            return ConvertValue(output, input.getUnsignedInt());        else if (input.getType() == MT_char)            return ConvertValue(output, input.getChar());        else if (input.getType() == MT_uchar)            return ConvertValue(output, input.getUnsignedChar());        else if (input.getType() == MT_short)            return ConvertValue(output, input.getShort());        else if (input.getType() == MT_ushort)            return ConvertValue(output, input.getUnsignedShort());        else if (input.getType() == MT_long)            return ConvertValue(output, input.getLong());        else if (input.getType() == MT_ulong)            return ConvertValue(output, input.getUnsignedLong());        else if (input.getType() == MT_float)            return ConvertValue(output, input.getFloat());        else if (input.getType() == MT_double)            return ConvertValue(output, input.getDouble());        else if (input.getType() == MT_longdouble)            return ConvertValue(output, input.getLongDouble());        else if (input.getType() == MT_bool)            return ConvertValue(output, input.getBool());        else            return false;    }};// convert from MultiTypeStringtemplate <class ToType>struct ConverterSpecialized<MultiTypeString, ToType, _FromType_>{    enum { specialized = true };    static bool convert(ToType* output, const MultiTypeString& input)    {        if (input.getType() == MT_constchar)            return ConvertValue(output, input.getConstChar());        else if (input.getType() == MT_string)            return ConvertValue(output, input.getString());        else            return ConvertValue(output, (MultiTypePrimitive)input);    }};// convert from MultiTypeMathtemplate <class ToType>struct ConverterSpecialized<MultiTypeMath, ToType, _FromType_>{    enum { specialized = true };    static bool convert(ToType* output, const MultiTypeMath& input)    {        if (input.getType() == MT_vector2)            return ConvertValue(output, input.getVector2());        else if (input.getType() == MT_vector3)            return ConvertValue(output, input.getVector3());        else if (input.getType() == MT_vector4)            return ConvertValue(output, input.getVector4());        else if (input.getType() == MT_quaternion)            return ConvertValue(output, input.getQuaternion());        else if (input.getType() == MT_colourvalue)            return ConvertValue(output, input.getColourValue());        else if (input.getType() == MT_radian)            return ConvertValue(output, input.getRadian());        else if (input.getType() == MT_degree)            return ConvertValue(output, input.getDegree());        else            return ConvertValue(output, (MultiTypeString)input);    }};
    40253////////////////////
    40354// MATH TO STRING //
    40455////////////////////
    405 
    406 // Vector2 to std::string
    407 template <>
    408 struct ConverterSpecialized<orxonox::Vector2, std::string, _Explicit_>
    409 {
    410     enum { specialized = true };
    411     static bool convert(std::string* output, const orxonox::Vector2& input)
    412     {
    413         std::ostringstream ostream;
    414         if (ostream << input.x << "," << input.y)
    415         {
    416             (*output) = ostream.str();
    417             return true;
    418         }
    419         return false;
    420     }
    421 };
    422 
    423 // Vector3 to std::string
    424 template <>
    425 struct ConverterSpecialized<orxonox::Vector3, std::string, _Explicit_>
    426 {
    427     enum { specialized = true };
    428     static bool convert(std::string* output, const orxonox::Vector3& input)
    429     {
    430         std::ostringstream ostream;
    431         if (ostream << input.x << "," << input.y << "," << input.z)
    432         {
    433             (*output) = ostream.str();
    434             return true;
    435         }
    436         return false;
    437     }
    438 };
    439 
    440 // Vector4 to std::string
    441 template <>
    442 struct ConverterSpecialized<orxonox::Vector4, std::string, _Explicit_>
    443 {
    444     enum { specialized = true };
    445     static bool convert(std::string* output, const orxonox::Vector4& input)
    446     {
    447         std::ostringstream ostream;
    448         if (ostream << input.x << "," << input.y << "," << input.z << "," << input.w)
    449         {
    450             (*output) = ostream.str();
    451             return true;
    452         }
    453         return false;
    454     }
    455 };
    456 
    457 // Quaternion to std::string
    458 template <>
    459 struct ConverterSpecialized<orxonox::Quaternion, std::string, _Explicit_>
    460 {
    461     enum { specialized = true };
    462     static bool convert(std::string* output, const orxonox::Quaternion& input)
    463     {
    464         std::ostringstream ostream;
    465         if (ostream << input.w << "," << input.x << "," << input.y << "," << input.z)
    466         {
    467             (*output) = ostream.str();
    468             return true;
    469         }
    470         return false;
    471     }
    472 };
    473 
    474 // ColourValue to std::string
    475 template <>
    476 struct ConverterSpecialized<orxonox::ColourValue, std::string, _Explicit_>
    477 {
    478     enum { specialized = true };
    479     static bool convert(std::string* output, const orxonox::ColourValue& input)
    480     {
    481         std::ostringstream ostream;
    482         if (ostream << input.r << "," << input.g << "," << input.b << "," << input.a)
    483         {
    484             (*output) = ostream.str();
    485             return true;
    486         }
    487         return false;
    488     }
    489 };
    490 
    491 
    492 ////////////////////
     56// Vector2 to std::stringtemplate <>struct ConverterSpecialized<orxonox::Vector2, std::string, _Explicit_>{    enum { specialized = true };    static bool convert(std::string* output, const orxonox::Vector2& input)    {        std::ostringstream ostream;        if (ostream << input.x << "," << input.y)        {            (*output) = ostream.str();            return true;        }        return false;    }};// Vector3 to std::stringtemplate <>struct ConverterSpecialized<orxonox::Vector3, std::string, _Explicit_>{    enum { specialized = true };    static bool convert(std::string* output, const orxonox::Vector3& input)    {        std::ostringstream ostream;        if (ostream << input.x << "," << input.y << "," << input.z)        {            (*output) = ostream.str();            return true;        }        return false;    }};// Vector4 to std::stringtemplate <>struct ConverterSpecialized<orxonox::Vector4, std::string, _Explicit_>{    enum { specialized = true };    static bool convert(std::string* output, const orxonox::Vector4& input)    {        std::ostringstream ostream;        if (ostream << input.x << "," << input.y << "," << input.z << "," << input.w)        {            (*output) = ostream.str();            return true;        }        return false;    }};// Quaternion to std::stringtemplate <>struct ConverterSpecialized<orxonox::Quaternion, std::string, _Explicit_>{    enum { specialized = true };    static bool convert(std::string* output, const orxonox::Quaternion& input)    {        std::ostringstream ostream;        if (ostream << input.w << "," << input.x << "," << input.y << "," << input.z)        {            (*output) = ostream.str();            return true;        }        return false;    }};// ColourValue to std::stringtemplate <>struct ConverterSpecialized<orxonox::ColourValue, std::string, _Explicit_>{    enum { specialized = true };    static bool convert(std::string* output, const orxonox::ColourValue& input)    {        std::ostringstream ostream;        if (ostream << input.r << "," << input.g << "," << input.b << "," << input.a)        {            (*output) = ostream.str();            return true;        }        return false;    }};////////////////////
    49357// STRING TO MATH //
    49458////////////////////
    495 
    496 // std::string to Vector2
    497 template <>
    498 struct ConverterSpecialized<std::string, orxonox::Vector2, _Explicit_>
    499 {
    500     enum { specialized = true };
    501     static bool convert(orxonox::Vector2* output, const std::string& input)
    502     {
    503         unsigned int opening_parenthesis, closing_parenthesis = input.find(')');
    504         if ((opening_parenthesis = input.find('(')) == std::string::npos) { opening_parenthesis = 0; } else { opening_parenthesis++; }
    505 
    506         SubString tokens(input.substr(opening_parenthesis, closing_parenthesis - opening_parenthesis), ",", SubString::WhiteSpaces, false, '\\', true, '"', true, '\0', '\0', true, '\0');
    507         if (tokens.size() >= 2)
    508         {
    509             if (!ConvertValue(&(output->x), tokens[0]))
    510                 return false;
    511             if (!ConvertValue(&(output->y), tokens[1]))
    512                 return false;
    513 
    514             return true;
    515         }
    516         return false;
    517     }
    518 };
    519 
    520 // std::string to Vector3
    521 template <>
    522 struct ConverterSpecialized<std::string, orxonox::Vector3, _Explicit_>
    523 {
    524     enum { specialized = true };
    525     static bool convert(orxonox::Vector3* output, const std::string& input)
    526     {
    527         unsigned int opening_parenthesis, closing_parenthesis = input.find(')');
    528         if ((opening_parenthesis = input.find('(')) == std::string::npos) { opening_parenthesis = 0; } else { opening_parenthesis++; }
    529 
    530         SubString tokens(input.substr(opening_parenthesis, closing_parenthesis - opening_parenthesis), ",", SubString::WhiteSpaces, false, '\\', true, '"', true, '\0', '\0', true, '\0');
    531         if (tokens.size() >= 3)
    532         {
    533             if (!ConvertValue(&(output->x), tokens[0]))
    534                 return false;
    535             if (!ConvertValue(&(output->y), tokens[1]))
    536                 return false;
    537             if (!ConvertValue(&(output->z), tokens[2]))
    538                 return false;
    539 
    540             return true;
    541         }
    542         return false;
    543     }
    544 };
    545 
    546 // std::string to Vector4
    547 template <>
    548 struct ConverterSpecialized<std::string, orxonox::Vector4, _Explicit_>
    549 {
    550     enum { specialized = true };
    551     static bool convert(orxonox::Vector4* output, const std::string& input)
    552     {
    553         unsigned int opening_parenthesis, closing_parenthesis = input.find(')');
    554         if ((opening_parenthesis = input.find('(')) == std::string::npos) { opening_parenthesis = 0; } else { opening_parenthesis++; }
    555 
    556         SubString tokens(input.substr(opening_parenthesis, closing_parenthesis - opening_parenthesis), ",", SubString::WhiteSpaces, false, '\\', true, '"', true, '\0', '\0', true, '\0');
    557         if (tokens.size() >= 4)
    558         {
    559             if (!ConvertValue(&(output->x), tokens[0]))
    560                 return false;
    561             if (!ConvertValue(&(output->y), tokens[1]))
    562                 return false;
    563             if (!ConvertValue(&(output->z), tokens[2]))
    564                 return false;
    565             if (!ConvertValue(&(output->w), tokens[3]))
    566                 return false;
    567 
    568             return true;
    569         }
    570         return false;
    571     }
    572 };
    573 
    574 // std::string to Quaternion
    575 template <>
    576 struct ConverterSpecialized<std::string, orxonox::Quaternion, _Explicit_>
    577 {
    578     enum { specialized = true };
    579     static bool convert(orxonox::Quaternion* output, const std::string& input)
    580     {
    581         unsigned int opening_parenthesis, closing_parenthesis = input.find(')');
    582         if ((opening_parenthesis = input.find('(')) == std::string::npos) { opening_parenthesis = 0; } else { opening_parenthesis++; }
    583 
    584         SubString tokens(input.substr(opening_parenthesis, closing_parenthesis - opening_parenthesis), ",", SubString::WhiteSpaces, false, '\\', true, '"', true, '\0', '\0', true, '\0');
    585         if (tokens.size() >= 4)
    586         {
    587             if (!ConvertValue(&(output->w), tokens[0]))
    588                 return false;
    589             if (!ConvertValue(&(output->x), tokens[1]))
    590                 return false;
    591             if (!ConvertValue(&(output->y), tokens[2]))
    592                 return false;
    593             if (!ConvertValue(&(output->z), tokens[3]))
    594                 return false;
    595 
    596             return true;
    597         }
    598         return false;
    599     }
    600 };
    601 
    602 // std::string to ColourValue
    603 template <>
    604 struct ConverterSpecialized<std::string, orxonox::ColourValue, _Explicit_>
    605 {
    606     enum { specialized = true };
    607     static bool convert(orxonox::ColourValue* output, const std::string& input)
    608     {
    609         unsigned int opening_parenthesis, closing_parenthesis = input.find(')');
    610         if ((opening_parenthesis = input.find('(')) == std::string::npos) { opening_parenthesis = 0; } else { opening_parenthesis++; }
    611 
    612         SubString tokens(input.substr(opening_parenthesis, closing_parenthesis - opening_parenthesis), ",", SubString::WhiteSpaces, false, '\\', true, '"', true, '\0', '\0', true, '\0');
    613         if (tokens.size() >= 4)
    614         {
    615             if (!ConvertValue(&(output->r), tokens[0]))
    616                 return false;
    617             if (!ConvertValue(&(output->g), tokens[1]))
    618                 return false;
    619             if (!ConvertValue(&(output->b), tokens[2]))
    620                 return false;
    621             if (!ConvertValue(&(output->a), tokens[3]))
    622                 return false;
    623 
    624             return true;
    625         }
    626         return false;
    627     }
    628 };
    629 
    630 #if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
     59// std::string to Vector2template <>struct ConverterSpecialized<std::string, orxonox::Vector2, _Explicit_>{    enum { specialized = true };    static bool convert(orxonox::Vector2* output, const std::string& input)    {        unsigned int opening_parenthesis, closing_parenthesis = input.find(')');        if ((opening_parenthesis = input.find('(')) == std::string::npos) { opening_parenthesis = 0; } else { opening_parenthesis++; }        SubString tokens(input.substr(opening_parenthesis, closing_parenthesis - opening_parenthesis), ",", SubString::WhiteSpaces, false, '\\', true, '"', true, '\0', '\0', true, '\0');        if (tokens.size() >= 2)        {            if (!ConvertValue(&(output->x), tokens[0]))                return false;            if (!ConvertValue(&(output->y), tokens[1]))                return false;            return true;        }        return false;    }};// std::string to Vector3template <>struct ConverterSpecialized<std::string, orxonox::Vector3, _Explicit_>{    enum { specialized = true };    static bool convert(orxonox::Vector3* output, const std::string& input)    {        unsigned int opening_parenthesis, closing_parenthesis = input.find(')');        if ((opening_parenthesis = input.find('(')) == std::string::npos) { opening_parenthesis = 0; } else { opening_parenthesis++; }        SubString tokens(input.substr(opening_parenthesis, closing_parenthesis - opening_parenthesis), ",", SubString::WhiteSpaces, false, '\\', true, '"', true, '\0', '\0', true, '\0');        if (tokens.size() >= 3)        {            if (!ConvertValue(&(output->x), tokens[0]))                return false;            if (!ConvertValue(&(output->y), tokens[1]))                return false;            if (!ConvertValue(&(output->z), tokens[2]))                return false;            return true;        }        return false;    }};// std::string to Vector4template <>struct ConverterSpecialized<std::string, orxonox::Vector4, _Explicit_>{    enum { specialized = true };    static bool convert(orxonox::Vector4* output, const std::string& input)    {        unsigned int opening_parenthesis, closing_parenthesis = input.find(')');        if ((opening_parenthesis = input.find('(')) == std::string::npos) { opening_parenthesis = 0; } else { opening_parenthesis++; }        SubString tokens(input.substr(opening_parenthesis, closing_parenthesis - opening_parenthesis), ",", SubString::WhiteSpaces, false, '\\', true, '"', true, '\0', '\0', true, '\0');        if (tokens.size() >= 4)        {            if (!ConvertValue(&(output->x), tokens[0]))                return false;            if (!ConvertValue(&(output->y), tokens[1]))                return false;            if (!ConvertValue(&(output->z), tokens[2]))                return false;            if (!ConvertValue(&(output->w), tokens[3]))                return false;            return true;        }        return false;    }};// std::string to Quaterniontemplate <>struct ConverterSpecialized<std::string, orxonox::Quaternion, _Explicit_>{    enum { specialized = true };    static bool convert(orxonox::Quaternion* output, const std::string& input)    {        unsigned int opening_parenthesis, closing_parenthesis = input.find(')');        if ((opening_parenthesis = input.find('(')) == std::string::npos) { opening_parenthesis = 0; } else { opening_parenthesis++; }        SubString tokens(input.substr(opening_parenthesis, closing_parenthesis - opening_parenthesis), ",", SubString::WhiteSpaces, false, '\\', true, '"', true, '\0', '\0', true, '\0');        if (tokens.size() >= 4)        {            if (!ConvertValue(&(output->w), tokens[0]))                return false;            if (!ConvertValue(&(output->x), tokens[1]))                return false;            if (!ConvertValue(&(output->y), tokens[2]))                return false;            if (!ConvertValue(&(output->z), tokens[3]))                return false;            return true;        }        return false;    }};// std::string to ColourValuetemplate <>struct ConverterSpecialized<std::string, orxonox::ColourValue, _Explicit_>{    enum { specialized = true };    static bool convert(orxonox::ColourValue* output, const std::string& input)    {        unsigned int opening_parenthesis, closing_parenthesis = input.find(')');        if ((opening_parenthesis = input.find('(')) == std::string::npos) { opening_parenthesis = 0; } else { opening_parenthesis++; }        SubString tokens(input.substr(opening_parenthesis, closing_parenthesis - opening_parenthesis), ",", SubString::WhiteSpaces, false, '\\', true, '"', true, '\0', '\0', true, '\0');        if (tokens.size() >= 4)        {            if (!ConvertValue(&(output->r), tokens[0]))                return false;            if (!ConvertValue(&(output->g), tokens[1]))                return false;            if (!ConvertValue(&(output->b), tokens[2]))                return false;            if (!ConvertValue(&(output->a), tokens[3]))                return false;            return true;        }        return false;    }};#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
    63160#pragma warning(pop)
    63261#endif
    633 
    63462#endif /* _Convert_H__ */
  • code/branches/network/src/util/ExprParser.cc

    • Property svn:eol-style set to native
    r1120 r1494  
    11/*
    22 *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
     3 *                    > www.orxonox.net < *
    54 *
    65 *   License notice:
     
    3130  @brief Declaration of FloatParser
    3231*/
    33 
    34 #include "ExprParser.h"
    35 #include <cmath>
    36 #include <cstring>
    37 
    38 // macros for easier if, else statements
    39 #define CASE_1(var) if (!strcmp(SWITCH,var))
    40 #define CASE(var) else if (!strcmp(SWITCH,var))
    41 #define CASE_ELSE else
    42 
    43 //! skip white spaces
    44 #define PARSE_BLANKS while (*reading_stream == ' ') ++reading_stream;
    45 
    46 ExprParser::ExprParser(const std::string& str)
    47 {
    48   this->failed_ = false;
    49   this->reading_stream = str.c_str();
    50   if (str.size() == 0 || *reading_stream == '\0')
    51   {
    52     this->failed_ = true;
    53     this->result_ = 0.0;
    54   }
    55   else
    56   {
    57     this->result_ = parse_expr_8();
    58     this->remains_ = reading_stream;
    59   }
    60 }
    61 
    62 //Private functions:
    63 /******************/
    64 double ExprParser::parse_argument()
    65 {
    66    double value = parse_expr_8();
    67    if (*reading_stream == ',')
    68    {
    69       ++reading_stream;
    70       return value;
    71    }
    72    else
    73    {
    74      this->failed_ = true;
    75      return 0;
    76    }
    77 }
    78 
    79 double ExprParser::parse_last_argument()
    80 {
    81    double value = parse_expr_8();
    82    if (*reading_stream == ')')
    83    {
    84       ++reading_stream;
    85       return value;
    86    }
    87    else
    88    {
    89      this->failed_ = true;
    90      return 0;
    91    }
    92 }
    93 
    94 double ExprParser::parse_expr_8()
    95 {
    96    double value = parse_expr_7();
    97    for(;;)
    98    {
    99       switch (op)
    100       {
    101          case oder:
    102             value = parse_expr_7() || value;
    103             break;
    104          default: return value;
    105       }
    106    };
    107 }
    108 
    109 
    110 double ExprParser::parse_expr_7()
    111 {
    112    double value = parse_expr_6();
    113    for(;;)
    114    {
    115       switch (op)
    116       {
    117          case und:
    118             value = value && parse_expr_6();
    119             break;
    120          default: return value;
    121       }
    122    };
    123 }
    124 
    125 double ExprParser::parse_expr_6()
    126 {
    127    double value = parse_expr_5();
    128    for(;;)
    129    {
    130       switch (op)
    131       {
    132          case gleich:
    133             value = (value == parse_expr_5());
    134             break;
    135          case ungleich:
    136             value = (value != parse_expr_5());
    137             break;
    138          default:
    139             return value;
    140       }
    141    };
    142 }
    143 
    144 double ExprParser::parse_expr_5()
    145 {
    146    double value = parse_expr_4();
    147    for(;;)
    148    {
    149       switch (op)
    150       {
    151          case kleiner:
    152             value = (value < parse_expr_4());
    153             break;
    154          case kleinergleich:
    155             value = (value <= parse_expr_4());
    156             break;
    157          case groesser:
    158             value = (value > parse_expr_4());
    159             break;
    160          case groessergleich:
    161             value = (value >= parse_expr_4());
    162             break;
    163          default:
    164             return value;
    165       }
    166    };
    167 }
    168 
    169 double ExprParser::parse_expr_4()
    170 {
    171    double value = parse_expr_3();
    172    for(;;)
    173    {
    174       switch (op)
    175       {
    176          case b_plus:
    177             value += parse_expr_3();
    178             break;
    179          case b_minus:
    180             value -= parse_expr_3();
    181             break;
    182          default:
    183             return value;
    184       }
    185    };
    186 }
    187 
    188 double ExprParser::parse_expr_3()
    189 {
    190    double value = parse_expr_2();
    191    for(;;)
    192    {
    193       switch (op)
    194       {
    195          case mal:
    196             value *= parse_expr_2();
    197             break;
    198          case durch:
    199             value /= parse_expr_2();
    200             break;
    201          case modulo:
    202          {
    203             double temp = parse_expr_2();
    204             value = value - floor(value/temp)*temp;
    205             break;
    206          }
    207          default:
    208             return value;
    209       }
    210    };
    211 }
    212 
    213 double ExprParser::parse_expr_2()
    214 {
    215    double value = parse_expr_1();
    216    while (*reading_stream != '\0')
    217    {
    218       op = parse_binary_operator();
    219       switch (op)
    220       {
    221          case hoch:
    222             value = pow(value,parse_expr_1());
    223             break;
    224          default:
    225             return value;
    226       }
    227    };
    228    op = undef;
    229    return value;
    230 }
    231 
    232 double ExprParser::parse_expr_1()
    233 {
    234    PARSE_BLANKS
    235    double value;
    236 
    237    unary_operator op = parse_unary_operator();
    238    PARSE_BLANKS
    239 
    240    if (*reading_stream == '\0')
    241    {
    242      // end of string
    243      this->failed_ = true;
    244      return 0;
    245    }
    246    else if (*reading_stream > 47 && *reading_stream < 59 || *reading_stream == 46)
    247    {  // number
    248       value = strtod(reading_stream, const_cast<char**>(&reading_stream));
    249    }
    250    else if (*reading_stream > 64 && *reading_stream < 91 || *reading_stream > 96 && *reading_stream < 123 || *reading_stream == 46)
    251    {  // variable or function
    252       char* word = new char[256];
    253       parse_word(word);
    254       PARSE_BLANKS
    255       if (*reading_stream == '(')
    256       {
    257          ++reading_stream;
    258 #define SWITCH word
    259          CASE_1("sin")
    260             value = sin(parse_last_argument());
    261          CASE("asin")
    262             value = asin(parse_last_argument());
    263          CASE("sinh")
    264             value = sinh(parse_last_argument());
    265          CASE("asinh")
    266          {
    267             value = parse_last_argument();
    268             value = log(sqrt(pow(value, 2) + 1) + value);
    269          }
    270          CASE("cos")
    271             value = cos(parse_last_argument());
    272          CASE("acos")
    273             value = acos(parse_last_argument());
    274          CASE("cosh")
    275             value = cosh(parse_last_argument());
    276          CASE("acosh")
    277          {
    278             value = parse_last_argument();
    279             value = log(sqrt(pow(value, 2) - 1) + value);
    280          }
    281          CASE("tan")
    282             value = tan(parse_last_argument());
    283          CASE("atan")
    284             value = atan(parse_last_argument());
    285          CASE("atan2")
    286             value = atan2(parse_argument(),parse_last_argument());
    287          CASE("tanh")
    288             value = tanh(parse_last_argument());
    289          CASE("atanh")
    290          {
    291             value = parse_last_argument();
    292             value = 0.5*log((value + 1)/(value - 1));
    293          }
    294          CASE("int")
    295             value = floor(parse_last_argument());
    296          CASE("floor")
    297             value = floor(parse_last_argument());
    298          CASE("ceil")
    299             value = ceil(parse_last_argument());
    300          CASE("abs")
    301             value = fabs(parse_last_argument());
    302          CASE("exp")
    303             value = exp(parse_last_argument());
    304          CASE("log")
    305             value = log10(parse_last_argument());
    306          CASE("ln")
    307             value = log(parse_last_argument());
    308          CASE("sign")
    309          {
    310             value = parse_last_argument();
    311             value = (value>0 ? 1 : (value<0 ? -1 : 0));
    312          }
    313          CASE("sqrt")
    314             value = sqrt(parse_last_argument());
    315          CASE("degrees")
    316             value = parse_last_argument()*180/3.1415926535897932;
    317          CASE("radians")
    318             value = parse_last_argument()*3.1415926535897932/180;
    319          CASE("mod")
    320          {
    321             value = parse_argument();
    322             double value2 = parse_last_argument();
    323             value = value - floor(value/value2)*value2;
    324          }
    325          CASE("pow")
    326             value = pow(parse_argument(),parse_last_argument());
    327          CASE("div")
    328             value = floor(parse_argument()/parse_last_argument());
    329          CASE("max")
    330            value = std::max(parse_argument(),parse_last_argument());
    331          CASE("min")
    332            value = std::min(parse_argument(),parse_last_argument());
    333          CASE_ELSE
    334          {
    335            this->failed_ = true;
    336            delete[] word;
    337            return 0;
    338          }
    339       }
    340       else
    341       {
    342 #define SWITCH word
    343          CASE_1("pi")
    344            value = 3.1415926535897932;
    345          CASE("e")
    346            value = 2.7182818284590452;
    347          CASE_ELSE
    348          {
    349            this->failed_ = true;
    350            delete[] word;
    351            return 0;
    352          }
    353       }
    354       delete[] word;
    355    }
    356    else if (*reading_stream == 40)
    357    {  // expresion in paranthesis
    358       ++reading_stream;
    359       value = parse_last_argument();
    360    }
    361    else
    362    {
    363      this->failed_ = true;
    364      return 0;
    365    }
    366 
    367    PARSE_BLANKS
    368    switch (op)
    369    {
    370       case u_nicht: return !value;
    371       case u_plus:  return  value;
    372       case u_minus: return -value;
    373       default:
    374         {
    375           this->failed_ = true;
    376           return 0;
    377         }
    378    }
    379 }
    380 
    381 char* ExprParser::parse_word(char* str)
    382 {
    383    char* word = str;
    384    int counter = 0;
    385    while (*reading_stream > 47 && *reading_stream < 58 || *reading_stream > 64 && *reading_stream < 91 || *reading_stream > 96 && *reading_stream < 123 || *reading_stream == 46)
    386    {
    387       *word++ = *reading_stream++;
    388       counter++;
    389       if (counter > 255)
    390       {
    391         this->failed_ = true;
    392         return '\0';
    393       }
    394    };
    395    *word = '\0';
    396    return str;
    397 }
    398 
    399 ExprParser::binary_operator ExprParser::parse_binary_operator()
    400 {
    401    binary_operator op;
    402    switch (*reading_stream)
    403    {
    404       case '+': op = b_plus; break;
    405       case '-': op = b_minus; break;
    406       case '*': op = mal; break;
    407       case '/': op = durch; break;
    408       case '^': op = hoch; break;
    409       case '%': op = modulo; break;
    410       case '&': op = und; break;
    411       case '|': op = oder; break;
    412       case '=': op = gleich; break;
    413       case '!': op = b_nicht; break;
    414       case '<': op = kleiner; break;
    415       case '>': op = groesser; break;
    416       default: return undef;
    417    }
    418    if (*++reading_stream == '=')
    419    {
    420       if (op > 9)
    421       {
    422          ++reading_stream;
    423          return (binary_operator)(op + 3);
    424       }
    425       else
    426       {
    427          --reading_stream;
    428          return undef;
    429       }
    430    }
    431    else
    432       return op;
    433 }
    434 
    435 ExprParser::unary_operator ExprParser::parse_unary_operator()
    436 {
    437    switch (*reading_stream)
    438    {
    439       case '!':
    440          ++reading_stream;
    441          return u_nicht;
    442       case '+':
    443          ++reading_stream;
    444          return u_plus;
    445       case '-':
    446          ++reading_stream;
    447          return u_minus;
    448       default :
    449          return u_plus;
    450    }
    451 }
     32#include "ExprParser.h"#include <cmath>#include <cstring>// macros for easier if, else statements#define CASE_1(var) if (!strcmp(SWITCH,var))#define CASE(var) else if (!strcmp(SWITCH,var))#define CASE_ELSE else//! skip white spaces#define PARSE_BLANKS while (*reading_stream == ' ') ++reading_stream;ExprParser::ExprParser(const std::string& str){  this->failed_ = false;  this->reading_stream = str.c_str();  if (str.size() == 0 || *reading_stream == '\0')  {    this->failed_ = true;    this->result_ = 0.0;  }  else  {    this->result_ = parse_expr_8();    this->remains_ = reading_stream;  }}//Private functions:/******************/double ExprParser::parse_argument(){   double value = parse_expr_8();   if (*reading_stream == ',')   {      ++reading_stream;      return value;   }   else   {     this->failed_ = true;     return 0;   }}double ExprParser::parse_last_argument(){   double value = parse_expr_8();   if (*reading_stream == ')')   {      ++reading_stream;      return value;   }   else   {     this->failed_ = true;     return 0;   }}double ExprParser::parse_expr_8(){   double value = parse_expr_7();   for(;;)   {      switch (op)      {         case oder:            value = parse_expr_7() || value;            break;         default: return value;      }   };}double ExprParser::parse_expr_7(){   double value = parse_expr_6();   for(;;)   {      switch (op)      {         case und:            value = value && parse_expr_6();            break;         default: return value;      }   };}double ExprParser::parse_expr_6(){   double value = parse_expr_5();   for(;;)   {      switch (op)      {         case gleich:            value = (value == parse_expr_5());            break;         case ungleich:            value = (value != parse_expr_5());            break;         default:            return value;      }   };}double ExprParser::parse_expr_5(){   double value = parse_expr_4();   for(;;)   {      switch (op)      {         case kleiner:            value = (value < parse_expr_4());            break;         case kleinergleich:            value = (value <= parse_expr_4());            break;         case groesser:            value = (value > parse_expr_4());            break;         case groessergleich:            value = (value >= parse_expr_4());            break;         default:            return value;      }   };}double ExprParser::parse_expr_4(){   double value = parse_expr_3();   for(;;)   {      switch (op)      {         case b_plus:            value += parse_expr_3();            break;         case b_minus:            value -= parse_expr_3();            break;         default:            return value;      }   };}double ExprParser::parse_expr_3(){   double value = parse_expr_2();   for(;;)   {      switch (op)      {         case mal:            value *= parse_expr_2();            break;         case durch:            value /= parse_expr_2();            break;         case modulo:         {            double temp = parse_expr_2();            value = value - floor(value/temp)*temp;            break;         }         default:            return value;      }   };}double ExprParser::parse_expr_2(){   double value = parse_expr_1();   while (*reading_stream != '\0')   {      op = parse_binary_operator();      switch (op)      {         case hoch:            value = pow(value,parse_expr_1());            break;         default:            return value;      }   };   op = undef;   return value;}double ExprParser::parse_expr_1(){   PARSE_BLANKS   double value;   unary_operator op = parse_unary_operator();   PARSE_BLANKS   if (*reading_stream == '\0')   {     // end of string     this->failed_ = true;     return 0;   }   else if (*reading_stream > 47 && *reading_stream < 59 || *reading_stream == 46)   {  // number      value = strtod(reading_stream, const_cast<char**>(&reading_stream));   }   else if (*reading_stream > 64 && *reading_stream < 91 || *reading_stream > 96 && *reading_stream < 123 || *reading_stream == 46)   {  // variable or function      char* word = new char[256];      parse_word(word);      PARSE_BLANKS      if (*reading_stream == '(')      {         ++reading_stream;#define SWITCH word         CASE_1("sin")            value = sin(parse_last_argument());         CASE("asin")            value = asin(parse_last_argument());         CASE("sinh")            value = sinh(parse_last_argument());         CASE("asinh")         {            value = parse_last_argument();            value = log(sqrt(pow(value, 2) + 1) + value);         }         CASE("cos")            value = cos(parse_last_argument());         CASE("acos")            value = acos(parse_last_argument());         CASE("cosh")            value = cosh(parse_last_argument());         CASE("acosh")         {            value = parse_last_argument();            value = log(sqrt(pow(value, 2) - 1) + value);         }         CASE("tan")            value = tan(parse_last_argument());         CASE("atan")            value = atan(parse_last_argument());         CASE("atan2")            value = atan2(parse_argument(),parse_last_argument());         CASE("tanh")            value = tanh(parse_last_argument());         CASE("atanh")         {            value = parse_last_argument();            value = 0.5*log((value + 1)/(value - 1));         }         CASE("int")            value = floor(parse_last_argument());         CASE("floor")            value = floor(parse_last_argument());         CASE("ceil")            value = ceil(parse_last_argument());         CASE("abs")            value = fabs(parse_last_argument());         CASE("exp")            value = exp(parse_last_argument());         CASE("log")            value = log10(parse_last_argument());         CASE("ln")            value = log(parse_last_argument());         CASE("sign")         {            value = parse_last_argument();            value = (value>0 ? 1 : (value<0 ? -1 : 0));         }         CASE("sqrt")            value = sqrt(parse_last_argument());         CASE("degrees")            value = parse_last_argument()*180/3.1415926535897932;         CASE("radians")            value = parse_last_argument()*3.1415926535897932/180;         CASE("mod")         {            value = parse_argument();            double value2 = parse_last_argument();            value = value - floor(value/value2)*value2;         }         CASE("pow")            value = pow(parse_argument(),parse_last_argument());         CASE("div")            value = floor(parse_argument()/parse_last_argument());         CASE("max")           value = std::max(parse_argument(),parse_last_argument());         CASE("min")           value = std::min(parse_argument(),parse_last_argument());         CASE_ELSE         {           this->failed_ = true;           delete[] word;           return 0;         }      }      else      {#define SWITCH word         CASE_1("pi")           value = 3.1415926535897932;         CASE("e")           value = 2.7182818284590452;         CASE_ELSE         {           this->failed_ = true;           delete[] word;           return 0;         }      }      delete[] word;   }   else if (*reading_stream == 40)   {  // expresion in paranthesis      ++reading_stream;      value = parse_last_argument();   }   else   {     this->failed_ = true;     return 0;   }   PARSE_BLANKS   switch (op)   {      case u_nicht: return !value;      case u_plus:  return  value;      case u_minus: return -value;      default:        {          this->failed_ = true;          return 0;        }   }}char* ExprParser::parse_word(char* str){   char* word = str;   int counter = 0;   while (*reading_stream > 47 && *reading_stream < 58 || *reading_stream > 64 && *reading_stream < 91 || *reading_stream > 96 && *reading_stream < 123 || *reading_stream == 46)   {      *word++ = *reading_stream++;      counter++;      if (counter > 255)      {        this->failed_ = true;        return '\0';      }   };   *word = '\0';   return str;}ExprParser::binary_operator ExprParser::parse_binary_operator(){   binary_operator op;   switch (*reading_stream)   {      case '+': op = b_plus; break;      case '-': op = b_minus; break;      case '*': op = mal; break;      case '/': op = durch; break;      case '^': op = hoch; break;      case '%': op = modulo; break;      case '&': op = und; break;      case '|': op = oder; break;      case '=': op = gleich; break;      case '!': op = b_nicht; break;      case '<': op = kleiner; break;      case '>': op = groesser; break;      default: return undef;   }   if (*++reading_stream == '=')   {      if (op > 9)      {         ++reading_stream;         return (binary_operator)(op + 3);      }      else      {         --reading_stream;         return undef;      }   }   else      return op;}ExprParser::unary_operator ExprParser::parse_unary_operator(){   switch (*reading_stream)   {      case '!':         ++reading_stream;         return u_nicht;      case '+':         ++reading_stream;         return u_plus;      case '-':         ++reading_stream;         return u_minus;      default :         return u_plus;   }}
  • code/branches/network/src/util/ExprParser.h

    • Property svn:eol-style set to native
    r1120 r1494  
    11/*
    22 *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
     3 *                    > www.orxonox.net < *
    54 *
    65 *   License notice:
     
    3130  @brief Declaration of FloatParser
    3231*/
    33 
    34 #ifndef _FloatParser_H__
    35 #define _FloatParser_H__
    36 
    37 #include "UtilPrereqs.h"
    38 #include <string>
    39 
    40 class _UtilExport ExprParser
    41 {
    42 public:
    43   enum binary_operator
    44   {
    45     b_plus,
    46     b_minus,
    47     mal,
    48     durch,
    49     modulo,
    50     hoch,
    51     undef,
    52     oder,
    53     und,
    54     gleich,
    55     b_nicht,
    56     kleiner,
    57     groesser,
    58     ungleich,
    59     kleinergleich,
    60     groessergleich
    61   };
    62 
    63   enum unary_operator
    64   {
    65     u_plus,
    66     u_minus,
    67     u_nicht
    68   };
    69 
    70 
    71   ExprParser(const std::string& str);
    72   std::string& getRemains() { return  this->remains_; }
    73   double       getResult()  { return  this->result_; }
    74   bool         getSuccess() { return !this->failed_; }
    75 
    76 private:
    77   double parse_expr_1();
    78   double parse_expr_2();
    79   double parse_expr_3();
    80   double parse_expr_4();
    81   double parse_expr_5();
    82   double parse_expr_6();
    83   double parse_expr_7();
    84   double parse_expr_8();
    85   char* parse_word(char* str);
    86   binary_operator parse_binary_operator();
    87   unary_operator parse_unary_operator();
    88 
    89   double parse_argument();
    90   double parse_last_argument();
    91 
    92   binary_operator op;
    93   const char* reading_stream;
    94   bool failed_;
    95   double result_;
    96   std::string remains_;
    97 
    98 };
    99 
    100 //Endzeichen für float expression: ')', '}', ']', ',', ';'
    101 _UtilExport bool parse_float(char* const, char**, double*);
    102 //Endzeichen angegeben
    103 _UtilExport bool parse_float(char* const, char**, char, double*);
    104 //Letzter Teil-float eines Vektors parsen (keine Vergleichs- und Logikoperationen)
    105 _UtilExport bool parse_vector_float(char* const, char**, bool, double*);
    106 
    107 #endif /* _FloatParser_H__ */
     32#ifndef _FloatParser_H__#define _FloatParser_H__#include "UtilPrereqs.h"#include <string>class _UtilExport ExprParser{public:  enum binary_operator  {    b_plus,    b_minus,    mal,    durch,    modulo,    hoch,    undef,    oder,    und,    gleich,    b_nicht,    kleiner,    groesser,    ungleich,    kleinergleich,    groessergleich  };  enum unary_operator  {    u_plus,    u_minus,    u_nicht  };  ExprParser(const std::string& str);  std::string& getRemains() { return  this->remains_; }  double       getResult()  { return  this->result_; }  bool         getSuccess() { return !this->failed_; }private:  double parse_expr_1();  double parse_expr_2();  double parse_expr_3();  double parse_expr_4();  double parse_expr_5();  double parse_expr_6();  double parse_expr_7();  double parse_expr_8();  char* parse_word(char* str);  binary_operator parse_binary_operator();  unary_operator parse_unary_operator();  double parse_argument();  double parse_last_argument();  binary_operator op;  const char* reading_stream;  bool failed_;  double result_;  std::string remains_;};//Endzeichen für float expression: ')', '}', ']', ',', ';'_UtilExport bool parse_float(char* const, char**, double*);//Endzeichen angegeben_UtilExport bool parse_float(char* const, char**, char, double*);//Letzter Teil-float eines Vektors parsen (keine Vergleichs- und Logikoperationen)_UtilExport bool parse_vector_float(char* const, char**, bool, double*);#endif /* _FloatParser_H__ */
  • code/branches/network/src/util/Math.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/util/Math.h

    • Property svn:eol-style set to native
  • code/branches/network/src/util/MultiType.h

    • Property svn:eol-style set to native
  • code/branches/network/src/util/MultiTypeMath.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/util/MultiTypeMath.h

    • Property svn:eol-style set to native
    r1446 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
    22  *   Author:
    23  *      Fabian 'x3n' Landau
    24  *   Co-authors:
    25  *      ...
    26  *
    27  *   Inspiration: MultiType by Benjamin Grauer
    28  */
    29 
    30 #ifndef _MultiTypeMath_H__
    31 #define _MultiTypeMath_H__
    32 
    33 #include "UtilPrereqs.h"
    34 
    35 #include "MultiTypeString.h"
    36 #include "Math.h"
    37 
    38 // disable annoying warning about multiple assignment operators
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * *   Author: *      Fabian 'x3n' Landau *   Co-authors: *      ... * *   Inspiration: MultiType by Benjamin Grauer */#ifndef _MultiTypeMath_H__#define _MultiTypeMath_H__#include "UtilPrereqs.h"#include "MultiTypeString.h"#include "Math.h"// disable annoying warning about multiple assignment operators
    392#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
    403#pragma warning(push)
    414#pragma warning(disable:4522)
    425#endif
    43 
    44 class _UtilExport MultiTypeMath : public MultiTypeString
    45 {
    46     public:
    47         MultiTypeMath(MultiType type = MT_null);
    48         inline MultiTypeMath(void*          value) : MultiTypeString(value) {}
    49         inline MultiTypeMath(int            value) : MultiTypeString(value) {}
    50         inline MultiTypeMath(unsigned int   value) : MultiTypeString(value) {}
    51         inline MultiTypeMath(char           value) : MultiTypeString(value) {}
    52         inline MultiTypeMath(unsigned char  value) : MultiTypeString(value) {}
    53         inline MultiTypeMath(short          value) : MultiTypeString(value) {}
    54         inline MultiTypeMath(unsigned short value) : MultiTypeString(value) {}
    55         inline MultiTypeMath(long           value) : MultiTypeString(value) {}
    56         inline MultiTypeMath(unsigned long  value) : MultiTypeString(value) {}
    57         inline MultiTypeMath(float          value) : MultiTypeString(value) {}
    58         inline MultiTypeMath(double         value) : MultiTypeString(value) {}
    59         inline MultiTypeMath(long double    value) : MultiTypeString(value) {}
    60         inline MultiTypeMath(bool           value) : MultiTypeString(value) {}
    61         inline MultiTypeMath(const char*             value) : MultiTypeString(value) {}
    62         inline MultiTypeMath(const std::string&      value) : MultiTypeString(value) {}
    63         inline MultiTypeMath(const orxonox::Vector2&     value) { this->setValue(value); }
    64         inline MultiTypeMath(const orxonox::Vector3&     value) { this->setValue(value); }
    65         inline MultiTypeMath(const orxonox::Vector4&     value) { this->setValue(value); }
    66         inline MultiTypeMath(const orxonox::ColourValue& value) { this->setValue(value); }
    67         inline MultiTypeMath(const orxonox::Quaternion&  value) { this->setValue(value); }
    68         inline MultiTypeMath(const orxonox::Radian&      value) { this->setValue(value); }
    69         inline MultiTypeMath(const orxonox::Degree&      value) { this->setValue(value); }
    70         inline MultiTypeMath(const MultiTypeMath& mtm)          { this->setValue(mtm);   }
    71         inline MultiTypeMath(const MultiTypeString& mts)        { this->setValue(mts);   }
    72         inline MultiTypeMath(const MultiTypePrimitive& mtp)     { this->setValue(mtp);   }
    73         virtual inline ~MultiTypeMath() {}
    74 
    75         using MultiTypeString::operator=;
    76         inline MultiTypeMath& operator=(const orxonox::Vector2&     value) { this->setValue(value); return *this; }
    77         inline MultiTypeMath& operator=(const orxonox::Vector3&     value) { this->setValue(value); return *this; }
    78         inline MultiTypeMath& operator=(const orxonox::Vector4&     value) { this->setValue(value); return *this; }
    79         inline MultiTypeMath& operator=(const orxonox::ColourValue& value) { this->setValue(value); return *this; }
    80         inline MultiTypeMath& operator=(const orxonox::Quaternion&  value) { this->setValue(value); return *this; }
    81         inline MultiTypeMath& operator=(const orxonox::Radian&      value) { this->setValue(value); return *this; }
    82         inline MultiTypeMath& operator=(const orxonox::Degree&      value) { this->setValue(value); return *this; }
    83         inline MultiTypeMath& operator=(const MultiTypeMath& mtm)          { this->setValue(mtm);   return *this; }
    84         inline MultiTypeMath& operator=(const MultiTypeString& mts)        { this->setValue(mts);   return *this; }
    85         inline MultiTypeMath& operator=(const MultiTypePrimitive mtp)      { this->setValue(mtp);   return *this; }
    86 
    87         using MultiTypeString::operator==;
    88         inline bool operator==(const orxonox::Vector2&     value) const { return (this->vector2_     == value); }
    89         inline bool operator==(const orxonox::Vector3&     value) const { return (this->vector3_     == value); }
    90         inline bool operator==(const orxonox::Vector4&     value) const { return (this->vector4_     == value); }
    91         inline bool operator==(const orxonox::ColourValue& value) const { return (this->colourvalue_ == value); }
    92         inline bool operator==(const orxonox::Quaternion&  value) const { return (this->quaternion_  == value); }
    93         inline bool operator==(const orxonox::Radian&      value) const { return (this->radian_      == value); }
    94         inline bool operator==(const orxonox::Degree&      value) const { return (this->degree_      == value); }
    95         bool operator==(const MultiTypeMath& mtm) const;
    96         bool operator==(const MultiTypeString& mts) const;
    97         bool operator==(const MultiTypePrimitive& mtp) const;
    98 
    99         using MultiTypeString::operator!=;
    100         inline bool operator!=(const orxonox::Vector2&     value) const { return (this->vector2_     != value); }
    101         inline bool operator!=(const orxonox::Vector3&     value) const { return (this->vector3_     != value); }
    102         inline bool operator!=(const orxonox::Vector4&     value) const { return (this->vector4_     != value); }
    103         inline bool operator!=(const orxonox::ColourValue& value) const { return (this->colourvalue_ != value); }
    104         inline bool operator!=(const orxonox::Quaternion&  value) const { return (this->quaternion_  != value); }
    105         inline bool operator!=(const orxonox::Radian&      value) const { return (this->radian_      != value); }
    106         inline bool operator!=(const orxonox::Degree&      value) const { return (this->degree_      != value); }
    107         bool operator!=(const MultiTypeMath& mtm) const;
    108         bool operator!=(const MultiTypeString& mts) const;
    109         bool operator!=(const MultiTypePrimitive& mtp) const;
    110 
    111         virtual operator void*()                const;
    112         virtual operator int()                  const;
    113         virtual operator unsigned int()         const;
    114         virtual operator char()                 const;
    115         virtual operator unsigned char()        const;
    116         virtual operator short()                const;
    117         virtual operator unsigned short()       const;
    118         virtual operator long()                 const;
    119         virtual operator unsigned long()        const;
    120         virtual operator float ()               const;
    121         virtual operator double ()              const;
    122         virtual operator long double()          const;
    123         virtual operator bool()                 const;
    124         virtual operator std::string()          const;
    125         virtual operator const char*()          const;
    126         virtual operator orxonox::Vector2()     const;
    127         virtual operator orxonox::Vector3()     const;
    128         virtual operator orxonox::Vector4()     const;
    129         virtual operator orxonox::ColourValue() const;
    130         virtual operator orxonox::Quaternion()  const;
    131         virtual operator orxonox::Radian()      const;
    132         virtual operator orxonox::Degree()      const;
    133 
    134         using MultiTypeString::setValue;
    135         inline void setValue(const orxonox::Vector2&     value) { this->type_ = MT_vector2;     this->vector2_     = value; }
    136         inline void setValue(const orxonox::Vector3&     value) { this->type_ = MT_vector3;     this->vector3_     = value; }
    137         inline void setValue(const orxonox::Vector4&     value) { this->type_ = MT_vector4;     this->vector4_     = value; }
    138         inline void setValue(const orxonox::ColourValue& value) { this->type_ = MT_colourvalue; this->colourvalue_ = value; }
    139         inline void setValue(const orxonox::Quaternion&  value) { this->type_ = MT_quaternion;  this->quaternion_  = value; }
    140         inline void setValue(const orxonox::Radian&      value) { this->type_ = MT_radian;      this->radian_      = value; }
    141         inline void setValue(const orxonox::Degree&      value) { this->type_ = MT_degree;      this->degree_      = value; }
    142         void setValue(const MultiTypeMath& mtm);
    143         void setValue(const MultiTypeString& mts);
    144         void setValue(const MultiTypePrimitive& mtp);
    145 
    146         inline orxonox::Vector2     getVector2()     const { return this->vector2_;     }
    147         inline orxonox::Vector3     getVector3()     const { return this->vector3_;     }
    148         inline orxonox::Vector4     getVector4()     const { return this->vector4_;     }
    149         inline orxonox::ColourValue getColourValue() const { return this->colourvalue_; }
    150         inline orxonox::Quaternion  getQuaternion()  const { return this->quaternion_;  }
    151         inline orxonox::Radian      getRadian()      const { return this->radian_;      }
    152         inline orxonox::Degree      getDegree()      const { return this->degree_;      }
    153 
    154         inline orxonox::Vector2&     getVector2()     { return this->vector2_;     }
    155         inline orxonox::Vector3&     getVector3()     { return this->vector3_;     }
    156         inline orxonox::Vector4&     getVector4()     { return this->vector4_;     }
    157         inline orxonox::ColourValue& getColourValue() { return this->colourvalue_; }
    158         inline orxonox::Quaternion&  getQuaternion()  { return this->quaternion_;  }
    159         inline orxonox::Radian&      getRadian()      { return this->radian_;      }
    160         inline orxonox::Degree&      getDegree()      { return this->degree_;      }
    161 
    162         using MultiTypeString::getValue;
    163         inline void getValue(orxonox::Vector2*     variable) const { (*variable) = orxonox::Vector2     (this->vector2_);     }
    164         inline void getValue(orxonox::Vector3*     variable) const { (*variable) = orxonox::Vector3     (this->vector3_);     }
    165         inline void getValue(orxonox::Vector4*     variable) const { (*variable) = orxonox::Vector4     (this->vector4_);     }
    166         inline void getValue(orxonox::ColourValue* variable) const { (*variable) = orxonox::ColourValue (this->colourvalue_); }
    167         inline void getValue(orxonox::Quaternion*  variable) const { (*variable) = orxonox::Quaternion  (this->quaternion_);  }
    168         inline void getValue(orxonox::Radian*      variable) const { (*variable) = orxonox::Radian      (this->radian_);      }
    169         inline void getValue(orxonox::Degree*      variable) const { (*variable) = orxonox::Degree      (this->degree_);      }
    170 
    171         virtual std::string getTypename() const;
    172 
    173         virtual std::string toString() const;
    174         virtual bool fromString(const std::string value);
    175 
    176         virtual bool assimilate(const MultiTypeMath& mtm, const MultiTypeMath& defvalue = MultiTypeMath());
    177 
    178     protected:
    179         orxonox::Vector2      vector2_;
    180         orxonox::Vector3      vector3_;
    181         orxonox::Vector4      vector4_;
    182         orxonox::ColourValue  colourvalue_;
    183         orxonox::Quaternion   quaternion_;
    184         orxonox::Radian       radian_;
    185         orxonox::Degree       degree_;
    186 };
    187 
    188 _UtilExport std::ostream& operator<<(std::ostream& out, MultiTypeMath& mtm);
    189 
    190 #if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
     6class _UtilExport MultiTypeMath : public MultiTypeString{    public:        MultiTypeMath(MultiType type = MT_null);        inline MultiTypeMath(void*          value) : MultiTypeString(value) {}        inline MultiTypeMath(int            value) : MultiTypeString(value) {}        inline MultiTypeMath(unsigned int   value) : MultiTypeString(value) {}        inline MultiTypeMath(char           value) : MultiTypeString(value) {}        inline MultiTypeMath(unsigned char  value) : MultiTypeString(value) {}        inline MultiTypeMath(short          value) : MultiTypeString(value) {}        inline MultiTypeMath(unsigned short value) : MultiTypeString(value) {}        inline MultiTypeMath(long           value) : MultiTypeString(value) {}        inline MultiTypeMath(unsigned long  value) : MultiTypeString(value) {}        inline MultiTypeMath(float          value) : MultiTypeString(value) {}        inline MultiTypeMath(double         value) : MultiTypeString(value) {}        inline MultiTypeMath(long double    value) : MultiTypeString(value) {}        inline MultiTypeMath(bool           value) : MultiTypeString(value) {}        inline MultiTypeMath(const char*             value) : MultiTypeString(value) {}        inline MultiTypeMath(const std::string&      value) : MultiTypeString(value) {}        inline MultiTypeMath(const orxonox::Vector2&     value) { this->setValue(value); }        inline MultiTypeMath(const orxonox::Vector3&     value) { this->setValue(value); }        inline MultiTypeMath(const orxonox::Vector4&     value) { this->setValue(value); }        inline MultiTypeMath(const orxonox::ColourValue& value) { this->setValue(value); }        inline MultiTypeMath(const orxonox::Quaternion&  value) { this->setValue(value); }        inline MultiTypeMath(const orxonox::Radian&      value) { this->setValue(value); }        inline MultiTypeMath(const orxonox::Degree&      value) { this->setValue(value); }        inline MultiTypeMath(const MultiTypeMath& mtm)          { this->setValue(mtm);   }        inline MultiTypeMath(const MultiTypeString& mts)        { this->setValue(mts);   }        inline MultiTypeMath(const MultiTypePrimitive& mtp)     { this->setValue(mtp);   }        virtual inline ~MultiTypeMath() {}        using MultiTypeString::operator=;        inline MultiTypeMath& operator=(const orxonox::Vector2&     value) { this->setValue(value); return *this; }        inline MultiTypeMath& operator=(const orxonox::Vector3&     value) { this->setValue(value); return *this; }        inline MultiTypeMath& operator=(const orxonox::Vector4&     value) { this->setValue(value); return *this; }        inline MultiTypeMath& operator=(const orxonox::ColourValue& value) { this->setValue(value); return *this; }        inline MultiTypeMath& operator=(const orxonox::Quaternion&  value) { this->setValue(value); return *this; }        inline MultiTypeMath& operator=(const orxonox::Radian&      value) { this->setValue(value); return *this; }        inline MultiTypeMath& operator=(const orxonox::Degree&      value) { this->setValue(value); return *this; }        inline MultiTypeMath& operator=(const MultiTypeMath& mtm)          { this->setValue(mtm);   return *this; }        inline MultiTypeMath& operator=(const MultiTypeString& mts)        { this->setValue(mts);   return *this; }        inline MultiTypeMath& operator=(const MultiTypePrimitive mtp)      { this->setValue(mtp);   return *this; }        using MultiTypeString::operator==;        inline bool operator==(const orxonox::Vector2&     value) const { return (this->vector2_     == value); }        inline bool operator==(const orxonox::Vector3&     value) const { return (this->vector3_     == value); }        inline bool operator==(const orxonox::Vector4&     value) const { return (this->vector4_     == value); }        inline bool operator==(const orxonox::ColourValue& value) const { return (this->colourvalue_ == value); }        inline bool operator==(const orxonox::Quaternion&  value) const { return (this->quaternion_  == value); }        inline bool operator==(const orxonox::Radian&      value) const { return (this->radian_      == value); }        inline bool operator==(const orxonox::Degree&      value) const { return (this->degree_      == value); }        bool operator==(const MultiTypeMath& mtm) const;        bool operator==(const MultiTypeString& mts) const;        bool operator==(const MultiTypePrimitive& mtp) const;        using MultiTypeString::operator!=;        inline bool operator!=(const orxonox::Vector2&     value) const { return (this->vector2_     != value); }        inline bool operator!=(const orxonox::Vector3&     value) const { return (this->vector3_     != value); }        inline bool operator!=(const orxonox::Vector4&     value) const { return (this->vector4_     != value); }        inline bool operator!=(const orxonox::ColourValue& value) const { return (this->colourvalue_ != value); }        inline bool operator!=(const orxonox::Quaternion&  value) const { return (this->quaternion_  != value); }        inline bool operator!=(const orxonox::Radian&      value) const { return (this->radian_      != value); }        inline bool operator!=(const orxonox::Degree&      value) const { return (this->degree_      != value); }        bool operator!=(const MultiTypeMath& mtm) const;        bool operator!=(const MultiTypeString& mts) const;        bool operator!=(const MultiTypePrimitive& mtp) const;        virtual operator void*()                const;        virtual operator int()                  const;        virtual operator unsigned int()         const;        virtual operator char()                 const;        virtual operator unsigned char()        const;        virtual operator short()                const;        virtual operator unsigned short()       const;        virtual operator long()                 const;        virtual operator unsigned long()        const;        virtual operator float ()               const;        virtual operator double ()              const;        virtual operator long double()          const;        virtual operator bool()                 const;        virtual operator std::string()          const;        virtual operator const char*()          const;        virtual operator orxonox::Vector2()     const;        virtual operator orxonox::Vector3()     const;        virtual operator orxonox::Vector4()     const;        virtual operator orxonox::ColourValue() const;        virtual operator orxonox::Quaternion()  const;        virtual operator orxonox::Radian()      const;        virtual operator orxonox::Degree()      const;        using MultiTypeString::setValue;        inline void setValue(const orxonox::Vector2&     value) { this->type_ = MT_vector2;     this->vector2_     = value; }        inline void setValue(const orxonox::Vector3&     value) { this->type_ = MT_vector3;     this->vector3_     = value; }        inline void setValue(const orxonox::Vector4&     value) { this->type_ = MT_vector4;     this->vector4_     = value; }        inline void setValue(const orxonox::ColourValue& value) { this->type_ = MT_colourvalue; this->colourvalue_ = value; }        inline void setValue(const orxonox::Quaternion&  value) { this->type_ = MT_quaternion;  this->quaternion_  = value; }        inline void setValue(const orxonox::Radian&      value) { this->type_ = MT_radian;      this->radian_      = value; }        inline void setValue(const orxonox::Degree&      value) { this->type_ = MT_degree;      this->degree_      = value; }        void setValue(const MultiTypeMath& mtm);        void setValue(const MultiTypeString& mts);        void setValue(const MultiTypePrimitive& mtp);        inline orxonox::Vector2     getVector2()     const { return this->vector2_;     }        inline orxonox::Vector3     getVector3()     const { return this->vector3_;     }        inline orxonox::Vector4     getVector4()     const { return this->vector4_;     }        inline orxonox::ColourValue getColourValue() const { return this->colourvalue_; }        inline orxonox::Quaternion  getQuaternion()  const { return this->quaternion_;  }        inline orxonox::Radian      getRadian()      const { return this->radian_;      }        inline orxonox::Degree      getDegree()      const { return this->degree_;      }        inline orxonox::Vector2&     getVector2()     { return this->vector2_;     }        inline orxonox::Vector3&     getVector3()     { return this->vector3_;     }        inline orxonox::Vector4&     getVector4()     { return this->vector4_;     }        inline orxonox::ColourValue& getColourValue() { return this->colourvalue_; }        inline orxonox::Quaternion&  getQuaternion()  { return this->quaternion_;  }        inline orxonox::Radian&      getRadian()      { return this->radian_;      }        inline orxonox::Degree&      getDegree()      { return this->degree_;      }        using MultiTypeString::getValue;        inline void getValue(orxonox::Vector2*     variable) const { (*variable) = orxonox::Vector2     (this->vector2_);     }        inline void getValue(orxonox::Vector3*     variable) const { (*variable) = orxonox::Vector3     (this->vector3_);     }        inline void getValue(orxonox::Vector4*     variable) const { (*variable) = orxonox::Vector4     (this->vector4_);     }        inline void getValue(orxonox::ColourValue* variable) const { (*variable) = orxonox::ColourValue (this->colourvalue_); }        inline void getValue(orxonox::Quaternion*  variable) const { (*variable) = orxonox::Quaternion  (this->quaternion_);  }        inline void getValue(orxonox::Radian*      variable) const { (*variable) = orxonox::Radian      (this->radian_);      }        inline void getValue(orxonox::Degree*      variable) const { (*variable) = orxonox::Degree      (this->degree_);      }        virtual std::string getTypename() const;        virtual std::string toString() const;        virtual bool fromString(const std::string value);        virtual bool assimilate(const MultiTypeMath& mtm, const MultiTypeMath& defvalue = MultiTypeMath());    protected:        orxonox::Vector2      vector2_;        orxonox::Vector3      vector3_;        orxonox::Vector4      vector4_;        orxonox::ColourValue  colourvalue_;        orxonox::Quaternion   quaternion_;        orxonox::Radian       radian_;        orxonox::Degree       degree_;};_UtilExport std::ostream& operator<<(std::ostream& out, MultiTypeMath& mtm);#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
    1917#pragma warning(pop)
    192 #endif
    193 
    194 #endif /* _MultiTypeMath_H__ */
     8#endif#endif /* _MultiTypeMath_H__ */
  • code/branches/network/src/util/MultiTypePrimitive.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/util/MultiTypePrimitive.h

    • Property svn:eol-style set to native
  • code/branches/network/src/util/MultiTypeString.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/util/MultiTypeString.h

    • Property svn:eol-style set to native
    r1446 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
    22  *   Author:
    23  *      Fabian 'x3n' Landau
    24  *   Co-authors:
    25  *      ...
    26  *
    27  *   Inspiration: MultiType by Benjamin Grauer
    28  */
    29 
    30 #ifndef _MultiTypeString_H__
    31 #define _MultiTypeString_H__
    32 
    33 #include "UtilPrereqs.h"
    34 
    35 #include <string>
    36 #include <iostream>
    37 
    38 #include "MultiTypePrimitive.h"
    39 
    40 // disable annoying warning about multiple assignment operators
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * *   Author: *      Fabian 'x3n' Landau *   Co-authors: *      ... * *   Inspiration: MultiType by Benjamin Grauer */#ifndef _MultiTypeString_H__#define _MultiTypeString_H__#include "UtilPrereqs.h"#include <string>#include <iostream>#include "MultiTypePrimitive.h"// disable annoying warning about multiple assignment operators
    412#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
    423#pragma warning(push)
    434#pragma warning(disable:4522)
    445#endif
    45 
    46 class _UtilExport MultiTypeString : public MultiTypePrimitive
    47 {
    48     public:
    49         MultiTypeString(MultiType type = MT_null);
    50         inline MultiTypeString(void*          value) : MultiTypePrimitive(value) {}
    51         inline MultiTypeString(int            value) : MultiTypePrimitive(value) {}
    52         inline MultiTypeString(unsigned int   value) : MultiTypePrimitive(value) {}
    53         inline MultiTypeString(char           value) : MultiTypePrimitive(value) {}
    54         inline MultiTypeString(unsigned char  value) : MultiTypePrimitive(value) {}
    55         inline MultiTypeString(short          value) : MultiTypePrimitive(value) {}
    56         inline MultiTypeString(unsigned short value) : MultiTypePrimitive(value) {}
    57         inline MultiTypeString(long           value) : MultiTypePrimitive(value) {}
    58         inline MultiTypeString(unsigned long  value) : MultiTypePrimitive(value) {}
    59         inline MultiTypeString(float          value) : MultiTypePrimitive(value) {}
    60         inline MultiTypeString(double         value) : MultiTypePrimitive(value) {}
    61         inline MultiTypeString(long double    value) : MultiTypePrimitive(value) {}
    62         inline MultiTypeString(bool           value) : MultiTypePrimitive(value) {}
    63         inline MultiTypeString(const char*             value) { this->setValue(value); }
    64         inline MultiTypeString(const std::string&      value) { this->setValue(value); }
    65         inline MultiTypeString(const MultiTypeString&    mts)  { this->setValue(mts);   }
    66         inline MultiTypeString(const MultiTypePrimitive& mtp)  { this->setValue(mtp);   }
    67         virtual inline ~MultiTypeString() {}
    68 
    69         using MultiTypePrimitive::operator=;
    70         inline MultiTypeString& operator=(const char*             value) { this->setValue(value); return *this; }
    71         inline MultiTypeString& operator=(const std::string&      value) { this->setValue(value); return *this; }
    72         inline MultiTypeString& operator=(const MultiTypeString&    mts) { this->setValue(mts);   return *this; }
    73         inline MultiTypeString& operator=(const MultiTypePrimitive& mtp) { this->setValue(mtp);   return *this; }
    74 
    75         using MultiTypePrimitive::operator==;
    76         inline bool operator==(const char*        value) const { return (this->string_ == std::string(value)); }
    77         inline bool operator==(const std::string& value) const { return (this->string_ == value);              }
    78         bool operator==(const MultiTypeString&    mts) const;
    79         bool operator==(const MultiTypePrimitive& mtp) const;
    80 
    81         using MultiTypePrimitive::operator!=;
    82         inline bool operator!=(const char*        value) const { return (this->string_ != std::string(value)); }
    83         inline bool operator!=(const std::string& value) const { return (this->string_ != value);              }
    84         bool operator!=(const MultiTypeString&    mts) const;
    85         bool operator!=(const MultiTypePrimitive& mtp) const;
    86 
    87         virtual operator void*()          const;
    88         virtual operator int()            const;
    89         virtual operator unsigned int()   const;
    90         virtual operator char()           const;
    91         virtual operator unsigned char()  const;
    92         virtual operator short()          const;
    93         virtual operator unsigned short() const;
    94         virtual operator long()           const;
    95         virtual operator unsigned long()  const;
    96         virtual operator float ()         const;
    97         virtual operator double ()        const;
    98         virtual operator long double()    const;
    99         virtual operator bool()           const;
    100         virtual operator std::string()    const;
    101         virtual operator const char*()    const;
    102 
    103         using MultiTypePrimitive::setValue;
    104         inline void setValue(const char*        value) { this->type_ = MT_string; this->string_ = std::string(value); }
    105         inline void setValue(const std::string& value) { this->type_ = MT_string; this->string_ = value;              }
    106         void setValue(const MultiTypeString&    mts);
    107         void setValue(const MultiTypePrimitive& mtp);
    108 
    109         inline std::string getString()     const { return this->string_;         }
    110         inline const char*  getConstChar() const { return this->string_.c_str(); }
    111 
    112         inline std::string& getString()    { return this->string_;         }
    113         inline const char*  getConstChar() { return this->string_.c_str(); }
    114 
    115         using MultiTypePrimitive::getValue;
    116         inline void getValue(std::string* variable) const { (*variable) = this->string_;         }
    117         inline void getValue(const char** variable) const { (*variable) = this->string_.c_str(); }
    118 
    119         virtual std::string getTypename() const;
    120 
    121         virtual std::string toString() const;
    122         virtual bool fromString(const std::string value);
    123 
    124         virtual bool assimilate(const MultiTypeString& mts, const MultiTypeString& defvalue = MultiTypeString());
    125 
    126     protected:
    127         std::string      string_;
    128 };
    129 
    130 _UtilExport std::ostream& operator<<(std::ostream& out, MultiTypeString& mts);
    131 
    132 #if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
     6class _UtilExport MultiTypeString : public MultiTypePrimitive{    public:        MultiTypeString(MultiType type = MT_null);        inline MultiTypeString(void*          value) : MultiTypePrimitive(value) {}        inline MultiTypeString(int            value) : MultiTypePrimitive(value) {}        inline MultiTypeString(unsigned int   value) : MultiTypePrimitive(value) {}        inline MultiTypeString(char           value) : MultiTypePrimitive(value) {}        inline MultiTypeString(unsigned char  value) : MultiTypePrimitive(value) {}        inline MultiTypeString(short          value) : MultiTypePrimitive(value) {}        inline MultiTypeString(unsigned short value) : MultiTypePrimitive(value) {}        inline MultiTypeString(long           value) : MultiTypePrimitive(value) {}        inline MultiTypeString(unsigned long  value) : MultiTypePrimitive(value) {}        inline MultiTypeString(float          value) : MultiTypePrimitive(value) {}        inline MultiTypeString(double         value) : MultiTypePrimitive(value) {}        inline MultiTypeString(long double    value) : MultiTypePrimitive(value) {}        inline MultiTypeString(bool           value) : MultiTypePrimitive(value) {}        inline MultiTypeString(const char*             value) { this->setValue(value); }        inline MultiTypeString(const std::string&      value) { this->setValue(value); }        inline MultiTypeString(const MultiTypeString&    mts)  { this->setValue(mts);   }        inline MultiTypeString(const MultiTypePrimitive& mtp)  { this->setValue(mtp);   }        virtual inline ~MultiTypeString() {}        using MultiTypePrimitive::operator=;        inline MultiTypeString& operator=(const char*             value) { this->setValue(value); return *this; }        inline MultiTypeString& operator=(const std::string&      value) { this->setValue(value); return *this; }        inline MultiTypeString& operator=(const MultiTypeString&    mts) { this->setValue(mts);   return *this; }        inline MultiTypeString& operator=(const MultiTypePrimitive& mtp) { this->setValue(mtp);   return *this; }        using MultiTypePrimitive::operator==;        inline bool operator==(const char*        value) const { return (this->string_ == std::string(value)); }        inline bool operator==(const std::string& value) const { return (this->string_ == value);              }        bool operator==(const MultiTypeString&    mts) const;        bool operator==(const MultiTypePrimitive& mtp) const;        using MultiTypePrimitive::operator!=;        inline bool operator!=(const char*        value) const { return (this->string_ != std::string(value)); }        inline bool operator!=(const std::string& value) const { return (this->string_ != value);              }        bool operator!=(const MultiTypeString&    mts) const;        bool operator!=(const MultiTypePrimitive& mtp) const;        virtual operator void*()          const;        virtual operator int()            const;        virtual operator unsigned int()   const;        virtual operator char()           const;        virtual operator unsigned char()  const;        virtual operator short()          const;        virtual operator unsigned short() const;        virtual operator long()           const;        virtual operator unsigned long()  const;        virtual operator float ()         const;        virtual operator double ()        const;        virtual operator long double()    const;        virtual operator bool()           const;        virtual operator std::string()    const;        virtual operator const char*()    const;        using MultiTypePrimitive::setValue;        inline void setValue(const char*        value) { this->type_ = MT_string; this->string_ = std::string(value); }        inline void setValue(const std::string& value) { this->type_ = MT_string; this->string_ = value;              }        void setValue(const MultiTypeString&    mts);        void setValue(const MultiTypePrimitive& mtp);        inline std::string getString()     const { return this->string_;         }        inline const char*  getConstChar() const { return this->string_.c_str(); }        inline std::string& getString()    { return this->string_;         }        inline const char*  getConstChar() { return this->string_.c_str(); }        using MultiTypePrimitive::getValue;        inline void getValue(std::string* variable) const { (*variable) = this->string_;         }        inline void getValue(const char** variable) const { (*variable) = this->string_.c_str(); }        virtual std::string getTypename() const;        virtual std::string toString() const;        virtual bool fromString(const std::string value);        virtual bool assimilate(const MultiTypeString& mts, const MultiTypeString& defvalue = MultiTypeString());    protected:        std::string      string_;};_UtilExport std::ostream& operator<<(std::ostream& out, MultiTypeString& mts);#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
    1337#pragma warning(pop)
    134 #endif
    135 
    136 #endif /* _MultiTypeString_H__ */
     8#endif#endif /* _MultiTypeString_H__ */
  • code/branches/network/src/util/OrxonoxPlatform.h

    • Property svn:eol-style set to native
    r1414 r1494  
    11/*
    22 *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
     3 *                    > www.orxonox.net < *
    54 *
    65 *   License notice:
     
    2625 *
    2726 */
    28 
    2927/**
    3028 @file
     
    3230        copy of the file found in the Ogre source code (OgrePlatform.h).
    3331 */
    34 
    35 #ifndef _OrxonoxPlatform_H__
    36 #define _OrxonoxPlatform_H__
    37 
    38 /* Initial platform/compiler-related stuff to set.
    39 */
    40 #define ORXONOX_PLATFORM_WIN32 1
    41 #define ORXONOX_PLATFORM_LINUX 2
    42 #define ORXONOX_PLATFORM_APPLE 3
    43 
    44 #define ORXONOX_COMPILER_MSVC 1
    45 #define ORXONOX_COMPILER_GNUC 2
    46 #define ORXONOX_COMPILER_BORL 3
    47 
    48 #define ORXONOX_ENDIAN_LITTLE 1
    49 #define ORXONOX_ENDIAN_BIG 2
    50 
    51 #define ORXONOX_ARCHITECTURE_32 1
    52 #define ORXONOX_ARCHITECTURE_64 2
    53 
    54 /* Finds the compiler type and version.
    55 */
    56 #if defined( _MSC_VER )
    57 #  define ORXONOX_COMPILER ORXONOX_COMPILER_MSVC
    58 #  define ORXONOX_COMP_VER _MSC_VER
    59 
    60 #elif defined( __GNUC__ )
    61 #  define ORXONOX_COMPILER ORXONOX_COMPILER_GNUC
    62 #  define ORXONOX_COMP_VER (((__GNUC__)*100) + \
    63         (__GNUC_MINOR__*10) + \
    64         __GNUC_PATCHLEVEL__)
    65 
    66 #elif defined( __BORLANDC__ )
    67 #  define ORXONOX_COMPILER ORXONOX_COMPILER_BORL
    68 #  define ORXONOX_COMP_VER __BCPLUSPLUS__
    69 
    70 #else
    71 #  pragma error "No known compiler. Abort! Abort!"
    72 
    73 #endif
    74 
    75 /* See if we can use __forceinline or if we need to use __inline instead */
    76 #if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
    77 #  if ORXONOX_COMP_VER >= 1200
    78 #    define FORCEINLINE __forceinline
    79 #  endif
    80 #elif defined(__MINGW32__)
    81 #  if !defined(FORCEINLINE)
    82 #    define FORCEINLINE __inline
    83 #  endif
    84 #else
    85 #  define FORCEINLINE __inline
    86 #endif
    87 
    88 /* Finds the current platform */
    89 
    90 #if defined( __WIN32__ ) || defined( _WIN32 )
    91 #  define ORXONOX_PLATFORM ORXONOX_PLATFORM_WIN32
    92 
    93 #elif defined( __APPLE_CC__)
    94 #  define ORXONOX_PLATFORM ORXONOX_PLATFORM_APPLE
    95 
    96 #else
    97 #  define ORXONOX_PLATFORM ORXONOX_PLATFORM_LINUX
    98 #endif
    99 
    100     /* Find the arch type */
    101 #if defined(__x86_64__) || defined(_M_X64) || defined(__powerpc64__) || defined(__alpha__) || defined(__ia64__) || defined(__s390__) || defined(__s390x__)
    102 #  define ORXONOX_ARCH_TYPE ORXONOX_ARCHITECTURE_64
    103 #else
    104 #  define ORXONOX_ARCH_TYPE ORXONOX_ARCHITECTURE_32
    105 #endif
    106 
    107 // For generating compiler warnings - should work on any compiler
    108 // As a side note, if you start your message with 'Warning: ', the MSVC
    109 // IDE actually does catch a warning :)
    110 // FIXME: Try this on linux box. Doesn't work with msvc
    111 //#define ORXONOX_QUOTE_INPLACE(x) # x
    112 //#define ORXONOX_QUOTE(x) ORXONOX_QUOTE_INPLACE(x)
    113 //#define ORXONOX_WARN( x )  message( __FILE__ "(" QUOTE( __LINE__ ) ") : " x "\n" )
    114 
    115 //----------------------------------------------------------------------------
    116 // Windows Settings
    117 #if ORXONOX_PLATFORM == ORXONOX_PLATFORM_WIN32
    118 
    119 // Win32 compilers use _DEBUG for specifying debug builds.
    120 #  ifdef _DEBUG
    121 #    define ORXONOX_DEBUG_MODE 1
    122 #  else
    123 #    define ORXONOX_DEBUG_MODE 0
    124 #  endif
    125 
    126 // Disable unicode support on MingW at the moment, poorly supported in stdlibc++
    127 // STLPORT fixes this though so allow if found
    128 // MinGW C++ Toolkit supports unicode and sets the define __MINGW32_TOOLKIT_UNICODE__ in _mingw.h
    129 #  if defined( __MINGW32__ ) && !defined(_STLPORT_VERSION)
    130 #    include<_mingw.h>
    131 #    if defined(__MINGW32_TOOLBOX_UNICODE__)
    132 #      define ORXONOX_UNICODE_SUPPORT 1
    133 #    else
    134 #      define ORXONOX_UNICODE_SUPPORT 0
    135 #    endif
    136 #  else
    137 #    define ORXONOX_UNICODE_SUPPORT 1
    138 #  endif
    139 
    140 #endif /* Platform Win32 */
    141 //----------------------------------------------------------------------------
    142 
    143 //----------------------------------------------------------------------------
    144 // Linux/Apple Settings
    145 #if ORXONOX_PLATFORM == ORXONOX_PLATFORM_LINUX || ORXONOX_PLATFORM == ORXONOX_PLATFORM_APPLE
    146 
    147 
    148 // A quick define to overcome different names for the same function
    149 #  define stricmp strcasecmp
    150 
    151 // Unlike the Win32 compilers, Linux compilers seem to use DEBUG for when
    152 // specifying a debug build.
    153 // (??? this is wrong, on Linux debug builds aren't marked in any way unless
    154 // you mark it yourself any way you like it -- zap ???)
    155 #  ifdef DEBUG
    156 #    define ORXONOX_DEBUG_MODE 1
    157 #  else
    158 #    define ORXONOX_DEBUG_MODE 0
    159 #  endif
    160 
    161 /* FIXME: Check what this actually is and whether we need it or not
    162 #  if ORXONOX_PLATFORM == ORXONOX_PLATFORM_APPLE
    163 #    define ORXONOX_PLATFORM_LIB "OrxonoxPlatform.bundle"
    164 #  else
    165 // ORXONOX_PLATFORM_LINUX
    166 #    define ORXONOX_PLATFORM_LIB "libOrxonoxPlatform.so"
    167 #  endif
    168 */
    169 
    170 // Always enable unicode support for the moment
    171 // Perhaps disable in old versions of gcc if necessary
    172 #  define ORXONOX_UNICODE_SUPPORT 1
    173 
    174 #endif /* Patform Linux/Apple */
    175 
    176 //For apple, we always have a custom config.h file
    177 #if ORXONOX_PLATFORM == ORXONOX_PLATFORM_APPLE
    178 #  include "config.h"
    179 #endif
    180 
    181 //----------------------------------------------------------------------------
    182 
    183 //----------------------------------------------------------------------------
    184 // Endian Settings
    185 // check for BIG_ENDIAN config flag, set ORXONOX_ENDIAN correctly
    186 #ifdef ORXONOX_CONFIG_BIG_ENDIAN
    187 #  define ORXONOX_ENDIAN ORXONOX_ENDIAN_BIG
    188 #else
    189 #  define ORXONOX_ENDIAN ORXONOX_ENDIAN_LITTLE
    190 #endif
    191 
    192 //-----------------------------------------------------------------------
     32#ifndef _OrxonoxPlatform_H__#define _OrxonoxPlatform_H__/* Initial platform/compiler-related stuff to set.*/#define ORXONOX_PLATFORM_WIN32 1#define ORXONOX_PLATFORM_LINUX 2#define ORXONOX_PLATFORM_APPLE 3#define ORXONOX_COMPILER_MSVC 1#define ORXONOX_COMPILER_GNUC 2#define ORXONOX_COMPILER_BORL 3#define ORXONOX_ENDIAN_LITTLE 1#define ORXONOX_ENDIAN_BIG 2#define ORXONOX_ARCHITECTURE_32 1#define ORXONOX_ARCHITECTURE_64 2/* Finds the compiler type and version.*/#if defined( _MSC_VER )#  define ORXONOX_COMPILER ORXONOX_COMPILER_MSVC#  define ORXONOX_COMP_VER _MSC_VER#elif defined( __GNUC__ )#  define ORXONOX_COMPILER ORXONOX_COMPILER_GNUC#  define ORXONOX_COMP_VER (((__GNUC__)*100) + \        (__GNUC_MINOR__*10) + \        __GNUC_PATCHLEVEL__)#elif defined( __BORLANDC__ )#  define ORXONOX_COMPILER ORXONOX_COMPILER_BORL#  define ORXONOX_COMP_VER __BCPLUSPLUS__#else#  pragma error "No known compiler. Abort! Abort!"#endif/* See if we can use __forceinline or if we need to use __inline instead */#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC#  if ORXONOX_COMP_VER >= 1200#    define FORCEINLINE __forceinline#  endif#elif defined(__MINGW32__)#  if !defined(FORCEINLINE)#    define FORCEINLINE __inline#  endif#else#  define FORCEINLINE __inline#endif/* Finds the current platform */#if defined( __WIN32__ ) || defined( _WIN32 )#  define ORXONOX_PLATFORM ORXONOX_PLATFORM_WIN32#elif defined( __APPLE_CC__)#  define ORXONOX_PLATFORM ORXONOX_PLATFORM_APPLE#else#  define ORXONOX_PLATFORM ORXONOX_PLATFORM_LINUX#endif    /* Find the arch type */#if defined(__x86_64__) || defined(_M_X64) || defined(__powerpc64__) || defined(__alpha__) || defined(__ia64__) || defined(__s390__) || defined(__s390x__)#  define ORXONOX_ARCH_TYPE ORXONOX_ARCHITECTURE_64#else#  define ORXONOX_ARCH_TYPE ORXONOX_ARCHITECTURE_32#endif// For generating compiler warnings - should work on any compiler// As a side note, if you start your message with 'Warning: ', the MSVC// IDE actually does catch a warning :)// FIXME: Try this on linux box. Doesn't work with msvc//#define ORXONOX_QUOTE_INPLACE(x) # x//#define ORXONOX_QUOTE(x) ORXONOX_QUOTE_INPLACE(x)//#define ORXONOX_WARN( x )  message( __FILE__ "(" QUOTE( __LINE__ ) ") : " x "\n" )//----------------------------------------------------------------------------// Windows Settings#if ORXONOX_PLATFORM == ORXONOX_PLATFORM_WIN32// Win32 compilers use _DEBUG for specifying debug builds.#  ifdef _DEBUG#    define ORXONOX_DEBUG_MODE 1#  else#    define ORXONOX_DEBUG_MODE 0#  endif// Disable unicode support on MingW at the moment, poorly supported in stdlibc++// STLPORT fixes this though so allow if found// MinGW C++ Toolkit supports unicode and sets the define __MINGW32_TOOLKIT_UNICODE__ in _mingw.h#  if defined( __MINGW32__ ) && !defined(_STLPORT_VERSION)#    include<_mingw.h>#    if defined(__MINGW32_TOOLBOX_UNICODE__)#      define ORXONOX_UNICODE_SUPPORT 1#    else#      define ORXONOX_UNICODE_SUPPORT 0#    endif#  else#    define ORXONOX_UNICODE_SUPPORT 1#  endif#endif /* Platform Win32 *///----------------------------------------------------------------------------//----------------------------------------------------------------------------// Linux/Apple Settings#if ORXONOX_PLATFORM == ORXONOX_PLATFORM_LINUX || ORXONOX_PLATFORM == ORXONOX_PLATFORM_APPLE// A quick define to overcome different names for the same function#  define stricmp strcasecmp// Unlike the Win32 compilers, Linux compilers seem to use DEBUG for when// specifying a debug build.// (??? this is wrong, on Linux debug builds aren't marked in any way unless// you mark it yourself any way you like it -- zap ???)#  ifdef DEBUG#    define ORXONOX_DEBUG_MODE 1#  else#    define ORXONOX_DEBUG_MODE 0#  endif/* FIXME: Check what this actually is and whether we need it or not#  if ORXONOX_PLATFORM == ORXONOX_PLATFORM_APPLE#    define ORXONOX_PLATFORM_LIB "OrxonoxPlatform.bundle"#  else// ORXONOX_PLATFORM_LINUX#    define ORXONOX_PLATFORM_LIB "libOrxonoxPlatform.so"#  endif*/// Always enable unicode support for the moment// Perhaps disable in old versions of gcc if necessary#  define ORXONOX_UNICODE_SUPPORT 1#endif /* Patform Linux/Apple *///For apple, we always have a custom config.h file#if ORXONOX_PLATFORM == ORXONOX_PLATFORM_APPLE#  include "config.h"#endif//----------------------------------------------------------------------------//----------------------------------------------------------------------------// Endian Settings// check for BIG_ENDIAN config flag, set ORXONOX_ENDIAN correctly#ifdef ORXONOX_CONFIG_BIG_ENDIAN#  define ORXONOX_ENDIAN ORXONOX_ENDIAN_BIG#else#  define ORXONOX_ENDIAN ORXONOX_ENDIAN_LITTLE#endif//-----------------------------------------------------------------------
    19333// fixed width integers
    19434//-----------------------------------------------------------------------
    195 #if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
    196 typedef __int8            int8_t;
     35#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVCtypedef __int8            int8_t;
    19736typedef __int16           int16_t;
    19837typedef __int32           int32_t;
     
    20241typedef unsigned __int32  uint32_t;
    20342typedef unsigned __int64  uint64_t;
    204 #else
    205 # include "inttypes.h"
    206 #endif
    207 
    208 namespace orxonox {
    209 #ifdef ORXONOX_DOUBLE_PRECISION
    210 typedef double Real;
    211 #else
    212 typedef float Real;
    213 #endif
    214 }
    215 
    216 
    217 #if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
    218 // Turn off warnings generated by long std templates
    219 // This warns about truncation to 255 characters in debug/browse info
    220 //#   pragma warning (disable : 4786)
    221 
    222 // Turn off warnings generated by long std templates
    223 // This warns about truncation to 255 characters in debug/browse info
    224 //#   pragma warning (disable : 4503)
    225 
    226 // disable: conversion from 'double' to 'float', possible loss of data
    227 // disable: conversion from 'ogg_int64_t' to 'long', possible loss of data
    228 // This has been dealt with in base_properties of the solution since the
    229 // warning primarily occurs in library header files (which are mostly
    230 // included before OrxonoxPlatform.h is)
    231 //#   pragma warning (disable : 4244)
    232 
    233 // disable: "conversion from 'size_t' to 'unsigned int', possible loss of data
    234 //#   pragma warning (disable : 4267)
    235 
    236 // disable: "truncation from 'double' to 'float'
    237 //#   pragma warning (disable : 4305)
    238 
    239 // set to level 4: "<type> needs to have dll-interface to be used by clients'
    240 // Happens on STL member variables which are not public therefore is ok
    241 #   pragma warning (disable : 4251)
    242 
    243 // disable: 'MultiTypeString' : multiple assignment operators specified
    244 // Used in MultiType and works fine so far
    245 //#   pragma warning (disable : 4522)
    246 
    247 // disable: "non dll-interface class used as base for dll-interface class"
    248 // Happens when deriving from Singleton because bug in compiler ignores
    249 // template export
    250 //#   pragma warning (disable : 4275)
    251 
    252 // disable: "C++ Exception Specification ignored"
    253 // This is because MSVC 6 did not implement all the C++ exception
    254 // specifications in the ANSI C++ draft.
    255 //#   pragma warning( disable : 4290 )
    256 
    257 // disable: "no suitable definition provided for explicit template
    258 // instantiation request" Occurs in VC7 for no justifiable reason on all
    259 // #includes of Singleton
    260 //#   pragma warning( disable: 4661)
    261 
    262 // disable: deprecation warnings when using CRT calls in VC8
    263 // These show up on all C runtime lib code in VC8, disable since they clutter
    264 // the warnings with things we may not be able to do anything about (e.g.
    265 // generated code from nvparse etc). I doubt very much that these calls
    266 // will ever be actually removed from VC anyway, it would break too much code.
    267 //#     pragma warning( disable: 4996)
    268 
    269 // disable: "conditional expression constant", always occurs on
    270 // ORXONOX_MUTEX_CONDITIONAL when no threading enabled
    271 //#   pragma warning (disable : 201)
    272 
    273 
    274 // Define the english written operators like and, or, xor
    275 #include <iso646.h>
    276 
    277 #endif /* ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC */
    278 
    279 // include visual leak detector to search for memory leaks
    280 //#include <vld.h>
    281 
    282 #endif /* _OrxonoxPlatform_H__ */
     43#else# include "inttypes.h"#endifnamespace orxonox {#ifdef ORXONOX_DOUBLE_PRECISIONtypedef double Real;#elsetypedef float Real;#endif}#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC// Turn off warnings generated by long std templates// This warns about truncation to 255 characters in debug/browse info//#   pragma warning (disable : 4786)// Turn off warnings generated by long std templates// This warns about truncation to 255 characters in debug/browse info//#   pragma warning (disable : 4503)// disable: conversion from 'double' to 'float', possible loss of data// disable: conversion from 'ogg_int64_t' to 'long', possible loss of data// This has been dealt with in base_properties of the solution since the// warning primarily occurs in library header files (which are mostly// included before OrxonoxPlatform.h is)//#   pragma warning (disable : 4244)// disable: "conversion from 'size_t' to 'unsigned int', possible loss of data//#   pragma warning (disable : 4267)// disable: "truncation from 'double' to 'float'//#   pragma warning (disable : 4305)// set to level 4: "<type> needs to have dll-interface to be used by clients'// Happens on STL member variables which are not public therefore is ok#   pragma warning (disable : 4251)// disable: 'MultiTypeString' : multiple assignment operators specified// Used in MultiType and works fine so far//#   pragma warning (disable : 4522)// disable: "non dll-interface class used as base for dll-interface class"// Happens when deriving from Singleton because bug in compiler ignores// template export//#   pragma warning (disable : 4275)// disable: "C++ Exception Specification ignored"// This is because MSVC 6 did not implement all the C++ exception// specifications in the ANSI C++ draft.//#   pragma warning( disable : 4290 )// disable: "no suitable definition provided for explicit template// instantiation request" Occurs in VC7 for no justifiable reason on all// #includes of Singleton//#   pragma warning( disable: 4661)// disable: deprecation warnings when using CRT calls in VC8// These show up on all C runtime lib code in VC8, disable since they clutter// the warnings with things we may not be able to do anything about (e.g.// generated code from nvparse etc). I doubt very much that these calls// will ever be actually removed from VC anyway, it would break too much code.//# pragma warning( disable: 4996)// disable: "conditional expression constant", always occurs on// ORXONOX_MUTEX_CONDITIONAL when no threading enabled//#   pragma warning (disable : 201)// Define the english written operators like and, or, xor#include <iso646.h>#endif /* ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC */// include visual leak detector to search for memory leaks//#include <vld.h>#endif /* _OrxonoxPlatform_H__ */
  • code/branches/network/src/util/Sleep.h

    • Property svn:eol-style set to native
    r1301 r1494  
    11/*
    22 *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
     3 *                    > www.orxonox.net < *
    54 *
    65 *   License notice:
     
    2625 *
    2726 */
    28 
    2927/**
    3028 @file  Sleep.h
     
    3432#include "UtilPrereqs.h"
    3533
    36 #if ORXONOX_PLATFORM == ORXONOX_PLATFORM_WIN32
    37 #  ifndef WIN32_LEAN_AND_MEAN
    38 #    define WIN32_LEAN_AND_MEAN
    39 #  endif
    40 #  include <windows.h>
     34#if ORXONOX_PLATFORM == ORXONOX_PLATFORM_WIN32#  ifndef WIN32_LEAN_AND_MEAN#    define WIN32_LEAN_AND_MEAN#  endif#  include <windows.h>
    4135inline void usleep(DWORD dwMicroseconds)
    4236{
  • code/branches/network/src/util/String.cc

    • Property svn:eol-style set to native
  • code/branches/network/src/util/String.h

    • Property svn:eol-style set to native
  • code/branches/network/src/util/SubString.cc

    • Property svn:eol-style set to native
    r1349 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
    22  *   Author:
    23  *      Christian Meyer
    24  *   Co-authors:
    25  *      Benjamin Grauer
    26  *
    27 //
    28 //  splitLine
    29 //  STL string tokenizer
    30 //
    31 //  Created by Clemens Wacha.
    32 //  Version 1.0
    33 //  Copyright (c) 2005 Clemens Wacha. All rights reserved.
    34 //
    35  */
    36 
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * *   Author: *      Christian Meyer *   Co-authors: *      Benjamin Grauer *////  splitLine//  STL string tokenizer////  Created by Clemens Wacha.//  Version 1.0//  Copyright (c) 2005 Clemens Wacha. All rights reserved.// */
    372#include "SubString.h"
    383
     
    6732SubString::SubString(const std::string& string,
    6833                     const std::string& delimiters, const std::string& delimiterNeighbours, bool emptyEntries,
    69                      char escapeChar, bool removeEscapeChar, char safemode_char, bool removeSafemodeChar,
    70                      char openparenthesis_char, char closeparenthesis_char, bool removeParenthesisChars, char comment_char)
     34                     char escapeChar, bool removeEscapeChar, char safemode_char, bool removeSafemodeChar,                     char openparenthesis_char, char closeparenthesis_char, bool removeParenthesisChars, char comment_char)
    7135{
    7236  SubString::splitLine(this->strings, this->bInSafemode, string, delimiters, delimiterNeighbours, emptyEntries, escapeChar, removeEscapeChar, safemode_char, removeSafemodeChar, openparenthesis_char, closeparenthesis_char, removeParenthesisChars, comment_char);
     
    8044SubString::SubString(const SubString& subString, unsigned int subSetBegin)
    8145{
    82   for (unsigned int i = subSetBegin; i < subString.size(); i++)
    83   {
    84     this->strings.push_back(subString[i]);
    85     this->bInSafemode.push_back(subString.isInSafemode(i));
    86   }
     46  for (unsigned int i = subSetBegin; i < subString.size(); i++)  {
     47    this->strings.push_back(subString[i]);    this->bInSafemode.push_back(subString.isInSafemode(i));  }
    8748}
    8849
     
    9657SubString::SubString(const SubString& subString, unsigned int subSetBegin, unsigned int subSetEnd)
    9758{
    98   for (unsigned int i = subSetBegin; i < subString.size() && i < subSetEnd; i++)
    99   {
    100     this->strings.push_back(subString[i]);
    101     this->bInSafemode.push_back(subString.isInSafemode(i));
    102   }
     59  for (unsigned int i = subSetBegin; i < subString.size() && i < subSetEnd; i++)  {
     60    this->strings.push_back(subString[i]);    this->bInSafemode.push_back(subString.isInSafemode(i));  }
    10361}
    10462
     
    11068SubString::SubString(unsigned int argc, const char** argv)
    11169{
    112   for(unsigned int i = 0; i < argc; ++i)
    113   {
    114     this->strings.push_back(std::string(argv[i]));
    115     this->bInSafemode.push_back(false);
    116   }
     70  for(unsigned int i = 0; i < argc; ++i)  {
     71    this->strings.push_back(std::string(argv[i]));    this->bInSafemode.push_back(false);  }
    11772}
    11873
     
    13994SubString& SubString::operator=(const SubString& subString)
    14095{
    141   this->strings = subString.strings;
    142   this->bInSafemode = subString.bInSafemode;
     96  this->strings = subString.strings;  this->bInSafemode = subString.bInSafemode;
    14397  return *this;
    14498}
     
    201155SubString& SubString::operator+=(const SubString& subString)
    202156{
    203   for (unsigned int i = 0; i < subString.size(); i++)
    204   {
    205     this->strings.push_back(subString[i]);
    206     this->bInSafemode.push_back(subString.isInSafemode(i));
    207   }
     157  for (unsigned int i = 0; i < subString.size(); i++)  {
     158    this->strings.push_back(subString[i]);    this->bInSafemode.push_back(subString.isInSafemode(i));  }
    208159  return *this;
    209160}
     
    217168unsigned int SubString::split(const std::string& string, char splitter)
    218169{
    219   this->strings.clear();
    220   this->bInSafemode.clear();
     170  this->strings.clear();  this->bInSafemode.clear();
    221171  char split[2];
    222172  split[0] = splitter;
     
    239189unsigned int SubString::split(const std::string& string,
    240190                              const std::string& delimiters, const std::string& delimiterNeighbours, bool emptyEntries,
    241                               char escapeChar, bool removeExcapeChar, char safemode_char, bool removeSafemodeChar,
    242                               char openparenthesis_char, char closeparenthesis_char, bool removeParenthesisChars, char comment_char)
    243 {
    244   this->strings.clear();
    245   this->bInSafemode.clear();
     191                              char escapeChar, bool removeExcapeChar, char safemode_char, bool removeSafemodeChar,                              char openparenthesis_char, char closeparenthesis_char, bool removeParenthesisChars, char comment_char)
     192{
     193  this->strings.clear();  this->bInSafemode.clear();
    246194  SubString::splitLine(this->strings, this->bInSafemode, string, delimiters, delimiterNeighbours, emptyEntries, escapeChar, removeExcapeChar, safemode_char, removeSafemodeChar, openparenthesis_char, closeparenthesis_char, removeParenthesisChars, comment_char);
    247195  return this->strings.size();
     
    309257 * @param emptyEntries: if empty Strings are added to the List of Strings.
    310258 * @param escape_char: Escape carater (escapes splitters)
    311  * @param safemode_char: the beginning of the safemode is marked with this
    312  * @param removeSafemodeChar removes the safemode_char from the beginning and the ending of a token
    313  * @param openparenthesis_char the beginning of a safemode is marked with this
    314  * @param closeparenthesis_char the ending of a safemode is marked with this
    315  * @param removeParenthesisChars removes the parenthesis from the beginning and the ending of a token
     259 * @param safemode_char: the beginning of the safemode is marked with this * @param removeSafemodeChar removes the safemode_char from the beginning and the ending of a token * @param openparenthesis_char the beginning of a safemode is marked with this * @param closeparenthesis_char the ending of a safemode is marked with this * @param removeParenthesisChars removes the parenthesis from the beginning and the ending of a token
    316260 * @param comment_char: the beginning of a comment is marked with this: (until the end of a Line)
    317261 * @param start_state: the Initial state on how to parse the String.
     
    323267 */
    324268SubString::SPLIT_LINE_STATE
    325 SubString::splitLine(std::vector<std::string>& ret,
    326                      std::vector<bool>& bInSafemode,
     269SubString::splitLine(std::vector<std::string>& ret,                     std::vector<bool>& bInSafemode,
    327270                     const std::string& line,
    328271                     const std::string& delimiters,
    329272                     const std::string& delimiterNeighbours,
    330273                     bool emptyEntries,
    331                      char escape_char,
    332                      bool removeExcapeChar,
    333                      char safemode_char,
    334                      bool removeSafemodeChar,
    335                      char openparenthesis_char,
    336                      char closeparenthesis_char,
    337                      bool removeParenthesisChars,
     274                     char escape_char,                     bool removeExcapeChar,
     275                     char safemode_char,                     bool removeSafemodeChar,                     char openparenthesis_char,                     char closeparenthesis_char,                     bool removeParenthesisChars,
    338276                     char comment_char,
    339277                     SPLIT_LINE_STATE start_state)
     
    343281  unsigned int fallBackNeighbours = 0;
    344282
    345   std::string token;
    346   bool inSafemode = false;
    347 
    348   if(start_state != SL_NORMAL && ret.size() > 0)
    349   {
    350     token = ret[ret.size()-1];
    351     ret.pop_back();
    352   }
    353   if(start_state != SL_NORMAL && bInSafemode.size() > 0)
    354   {
    355     inSafemode = bInSafemode[bInSafemode.size()-1];
    356     bInSafemode.pop_back();
    357   }
    358 
     283  std::string token;  bool inSafemode = false;
     284
     285  if(start_state != SL_NORMAL && ret.size() > 0)  {    token = ret[ret.size()-1];
     286    ret.pop_back();  }  if(start_state != SL_NORMAL && bInSafemode.size() > 0)  {    inSafemode = bInSafemode[bInSafemode.size()-1];    bInSafemode.pop_back();  }
    359287  while(i < line.size())
    360288  {
     
    364292        if(line[i] == escape_char)
    365293        {
    366           state = SL_ESCAPE;
    367           if (!removeExcapeChar)
    368             token += line[i];
     294          state = SL_ESCAPE;          if (!removeExcapeChar)            token += line[i];
    369295        }
    370296        else if(line[i] == safemode_char)
    371297        {
    372           state = SL_SAFEMODE;
    373           inSafemode = true;
    374           if (!removeSafemodeChar)
    375             token += line[i];
    376         }
    377         else if(line[i] == openparenthesis_char)
    378         {
    379           state = SL_PARENTHESES;
    380           inSafemode = true;
    381           if (!removeParenthesisChars)
    382             token += line[i];
    383         }
     298          state = SL_SAFEMODE;          inSafemode = true;          if (!removeSafemodeChar)            token += line[i];
     299        }        else if(line[i] == openparenthesis_char)        {          state = SL_PARENTHESES;          inSafemode = true;          if (!removeParenthesisChars)            token += line[i];        }
    384300        else if(line[i] == comment_char)
    385301        {
     
    389305          if(emptyEntries || token.size() > 0)
    390306          {
    391             ret.push_back(token);
    392             token.clear();
    393             bInSafemode.push_back(inSafemode);
    394             inSafemode = false;
    395           }
     307            ret.push_back(token);            token.clear();            bInSafemode.push_back(inSafemode);            inSafemode = false;          }
    396308          token += line[i];       // EAT
    397309          state = SL_COMMENT;
     
    407319            ret.push_back(token);
    408320            token.clear();
    409             bInSafemode.push_back(inSafemode);
    410             inSafemode = false;
    411           }
     321            bInSafemode.push_back(inSafemode);            inSafemode = false;          }
    412322          state = SL_NORMAL;
    413323        }
     
    429339        }
    430340        break;
    431       case SL_ESCAPE:
    432         if (!removeSafemodeChar)
    433           token += line[i];
    434         else
    435         {
     341      case SL_ESCAPE:        if (!removeSafemodeChar)          token += line[i];        else        {
    436342          if(line[i] == 'n') token += '\n';
    437343          else if(line[i] == 't') token += '\t';
     
    442348          else if(line[i] == 'a') token += '\a';
    443349          else if(line[i] == '?') token += '\?';
    444           else token += line[i];  // EAT
    445         }
     350          else token += line[i];  // EAT        }
    446351        state = SL_NORMAL;
    447352        break;
     
    450355        {
    451356          state = SL_NORMAL;
    452           if (!removeSafemodeChar)
    453             token += line[i];
    454         }
     357          if (!removeSafemodeChar)            token += line[i];        }
    455358        else if(line[i] == escape_char)
    456359        {
     
    461364          token += line[i];       // EAT
    462365        }
    463         break;
    464 
    465       case SL_SAFEESCAPE:
     366        break;      case SL_SAFEESCAPE:
    466367        if(line[i] == 'n') token += '\n';
    467368        else if(line[i] == 't') token += '\t';
     
    475376        state = SL_SAFEMODE;
    476377        break;
    477 
    478       case SL_PARENTHESES:
    479         if(line[i] == closeparenthesis_char)
    480         {
    481           state = SL_NORMAL;
    482           if (!removeParenthesisChars)
    483             token += line[i];
    484         }
    485         else if(line[i] == escape_char)
    486         {
    487           state = SL_PARENTHESESESCAPE;
    488         }
    489         else
    490         {
    491           token += line[i];       // EAT
    492         }
    493         break;
    494 
    495       case SL_PARENTHESESESCAPE:
    496         if(line[i] == 'n') token += '\n';
    497         else if(line[i] == 't') token += '\t';
    498         else if(line[i] == 'v') token += '\v';
    499         else if(line[i] == 'b') token += '\b';
    500         else if(line[i] == 'r') token += '\r';
    501         else if(line[i] == 'f') token += '\f';
    502         else if(line[i] == 'a') token += '\a';
    503         else if(line[i] == '?') token += '\?';
    504         else token += line[i];  // EAT
    505         state = SL_PARENTHESES;
    506         break;
    507 
     378      case SL_PARENTHESES:        if(line[i] == closeparenthesis_char)        {          state = SL_NORMAL;          if (!removeParenthesisChars)            token += line[i];        }        else if(line[i] == escape_char)        {          state = SL_PARENTHESESESCAPE;        }        else        {          token += line[i];       // EAT        }        break;      case SL_PARENTHESESESCAPE:        if(line[i] == 'n') token += '\n';        else if(line[i] == 't') token += '\t';        else if(line[i] == 'v') token += '\v';        else if(line[i] == 'b') token += '\b';        else if(line[i] == 'r') token += '\r';        else if(line[i] == 'f') token += '\f';        else if(line[i] == 'a') token += '\a';        else if(line[i] == '?') token += '\?';        else token += line[i];  // EAT        state = SL_PARENTHESES;        break;
    508379      case SL_COMMENT:
    509380        if(line[i] == '\n')
     
    514385            ret.push_back(token);
    515386            token.clear();
    516             bInSafemode.push_back(inSafemode);
    517             inSafemode = false;
    518           }
     387            bInSafemode.push_back(inSafemode);            inSafemode = false;          }
    519388          state = SL_NORMAL;
    520389        }
     
    539408    ret.push_back(token);
    540409    token.clear();
    541     bInSafemode.push_back(inSafemode);
    542     inSafemode = false;
    543   }
     410    bInSafemode.push_back(inSafemode);    inSafemode = false;  }
    544411  return(state);
    545412}
  • code/branches/network/src/util/SubString.h

    • Property svn:eol-style set to native
    r1349 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
    22  *   Author:
    23  *      Christian Meyer
    24  *   Co-authors:
    25  *      Benjamin Grauer
    26  *      Fabian 'x3n' Landau
    27  *
    28 
    29 //  splitLine
    30 //  STL string tokenizer
    31 //
    32 //  Created by Clemens Wacha.
    33 //  Version 1.0
    34 //  Copyright (c) 2005 Clemens Wacha. All rights reserved.
    35 
    36  * Extended by Fabian 'x3n' Landau with the SL_PARENTHESES mode.
    37  */
    38 
    39  /*!
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * *   Author: *      Christian Meyer *   Co-authors: *      Benjamin Grauer *      Fabian 'x3n' Landau *//  splitLine//  STL string tokenizer////  Created by Clemens Wacha.//  Version 1.0//  Copyright (c) 2005 Clemens Wacha. All rights reserved. * Extended by Fabian 'x3n' Landau with the SL_PARENTHESES mode. */ /*!
    402 * @file substring.h
    413 * @brief a small class to get the parts of a string separated by commas
     
    6022
    6123#include "UtilPrereqs.h"
    62 
    6324#include <vector>
    6425#include <string>
     
    7839    SL_SAFEMODE,          //!< In safe mode (between "" mostly).
    7940    SL_SAFEESCAPE,        //!< In safe mode with the internal escape character, that escapes even the savemode character.
    80     SL_COMMENT,           //!< In Comment mode.
    81     SL_PARENTHESES,       //!< Between parentheses (usually '(' and ')')
    82     SL_PARENTHESESESCAPE, //!< Between parentheses with the internal escape character, that escapes even the closing paranthesis character.
     41    SL_COMMENT,           //!< In Comment mode.    SL_PARENTHESES,       //!< Between parentheses (usually '(' and ')')    SL_PARENTHESESESCAPE, //!< Between parentheses with the internal escape character, that escapes even the closing paranthesis character.
    8342  } SPLIT_LINE_STATE;
    8443
     
    8948  SubString(const std::string& string,
    9049            const std::string& delimiters, const std::string& delimiterNeighbours = "", bool emptyEntries=false,
    91             char escapeChar ='\\', bool removeEscapeChar = true, char safemode_char = '"', bool removeSafemodeChar = true,
    92             char openparenthesis_char = '(', char closeparenthesis_char = ')',  bool removeParenthesisChars = true, char comment_char = '\0');
     50            char escapeChar ='\\', bool removeEscapeChar = true, char safemode_char = '"', bool removeSafemodeChar = true,            char openparenthesis_char = '(', char closeparenthesis_char = ')',  bool removeParenthesisChars = true, char comment_char = '\0');
    9351  SubString(unsigned int argc, const char** argv);
    9452  /** @brief create a Substring as a copy of another one. @param subString the SubString to copy. */
     
    11371  unsigned int split(const std::string& string,
    11472                     const std::string& delimiters, const std::string& delimiterNeighbours = "", bool emptyEntries = false,
    115                      char escapeChar ='\\', bool removeExcapeChar = true, char safemode_char = '"', bool removeSafemodeChar = true,
    116                      char openparenthesis_char = '(', char closeparenthesis_char = ')',  bool removeParenthesisChars = true, char comment_char = '\0');
     73                     char escapeChar ='\\', bool removeExcapeChar = true, char safemode_char = '"', bool removeSafemodeChar = true,                     char openparenthesis_char = '(', char closeparenthesis_char = ')',  bool removeParenthesisChars = true, char comment_char = '\0');
    11774  std::string join(const std::string& delimiter = " ") const;
    11875  ////////////////////////////////////////
     
    13087  inline const std::string& operator[](unsigned int i) const { return this->strings[i]; };
    13188  /** @brief Returns the i'th string from the subset of Strings @param i the i'th String */
    132   inline const std::string& getString(unsigned int i) const { return (*this)[i]; };
    133   /** @brief Returns true if the token is in safemode. @param i the i'th token */
    134   inline bool isInSafemode(unsigned int i) const { return this->bInSafemode[i]; }
     89  inline const std::string& getString(unsigned int i) const { return (*this)[i]; };  /** @brief Returns true if the token is in safemode. @param i the i'th token */  inline bool isInSafemode(unsigned int i) const { return this->bInSafemode[i]; }
    13590  /** @brief Returns the front of the StringList. */
    13691  inline const std::string& front() const { return this->strings.front(); };
     
    14196
    14297  // the almighty algorithm.
    143   static SPLIT_LINE_STATE splitLine(std::vector<std::string>& ret,
    144                                     std::vector<bool>& bInSafemode,
     98  static SPLIT_LINE_STATE splitLine(std::vector<std::string>& ret,                                    std::vector<bool>& bInSafemode,
    14599                                    const std::string& line,
    146100                                    const std::string& delimiters = SubString::WhiteSpaces,
    147101                                    const std::string& delimiterNeighbours = "",
    148102                                    bool emptyEntries = false,
    149                                     char escape_char = '\\',
    150                                     bool removeExcapeChar = true,
     103                                    char escape_char = '\\',                                    bool removeExcapeChar = true,
    151104                                    char safemode_char = '"',
    152                                     bool removeSafemodeChar = true,
    153                                     char openparenthesis_char = '(',
    154                                     char closeparenthesis_char = ')',
    155                                     bool removeParenthesisChars = true,
    156                                     char comment_char = '\0',
     105                                    bool removeSafemodeChar = true,                                    char openparenthesis_char = '(',                                    char closeparenthesis_char = ')',                                    bool removeParenthesisChars = true,                                    char comment_char = '\0',
    157106                                    SPLIT_LINE_STATE start_state = SL_NORMAL);
    158107  // debugging.
     
    165114
    166115private:
    167   std::vector<std::string>  strings;                      //!< strings produced from a single string splitted in multiple strings
    168   std::vector<bool>         bInSafemode;
     116  std::vector<std::string>  strings;                      //!< strings produced from a single string splitted in multiple strings  std::vector<bool>         bInSafemode;
    169117};
    170118
  • code/branches/network/src/util/UtilPrereqs.h

    • Property svn:eol-style set to native
    r1414 r1494  
    11/*
    22 *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
     3 *                    > www.orxonox.net < *
    54 *
    65 *   License notice:
     
    3130  @brief Contains all the necessary forward declarations for all classes and structs.
    3231*/
    33 
    3432#ifndef _UtilPrereqs_H__
    3533#define _UtilPrereqs_H__
     
    6058// Forward declarations
    6159//-----------------------------------------------------------------------
    62 class ArgReader;
    63 class Convert;
    64 class MultiTypePrimitive;
    65 class MultiTypeString;
    66 class MultiTypeMath;
    67 template <class T>
    68 class String2Number;
    69 class SubString;
     60class ArgReader;class Convert;class MultiTypePrimitive;class MultiTypeString;class MultiTypeMath;template <class T>class String2Number;class SubString;
    7061
    7162#endif /* _UtilPrereqs_H__ */
  • code/branches/network/src/util/XMLIncludes.h

    • Property svn:eol-style set to native
  • code/branches/network/src/util/testing/CMakeLists.txt

    • Property svn:eol-style set to native
  • code/branches/network/src/util/testing/TestConverter.cpp

    • Property svn:eol-style set to native
  • code/branches/network/updateMedia.sh

    • Property svn:eol-style set to native
Note: See TracChangeset for help on using the changeset viewer.