src/Application.hh
author Tero Marttila <terom@fixme.fi>
Tue, 27 Jan 2009 00:25:58 +0200
changeset 439 9823e6cd1086
parent 418 194bc810a570
permissions -rw-r--r--
some README text
358
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
     1
#ifndef APPLICATION_HH
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
     2
#define APPLIATION_HH
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
     3
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
     4
#include "Engine.hh"
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
     5
#include "Error.hh"
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
     6
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
     7
#include <ClanLib/core.h>
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
     8
#include <ClanLib/application.h>
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
     9
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    10
class ArgumentError : public Error {
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    11
    public:
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    12
        ArgumentError (const std::string &message) : Error(message) { }
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    13
};
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    14
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    15
/**
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    16
 * Our CL_ClanApplication. Provides our main function, handles argument parsing and interacts with Engine
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    17
 */
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    18
class Main : public CL_ClanApplication {
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    19
    private:
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    20
        // arguments
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    21
        CL_CommandLine args;
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    22
        
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    23
        /**
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    24
         * --graphics
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    25
         */
409
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    26
        bool graphics_enabled;
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    27
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    28
        /**
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    29
         * --fullscreen and --resolution
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    30
         */
417
c503e0c6a740 support for building without Network/Graphics, although the disable-graphics case is kind of hackish still
Tero Marttila <terom@fixme.fi>
parents: 411
diff changeset
    31
        DisplayConfig display;
409
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    32
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    33
        /**
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    34
         * --terrain-seed and --terrain-size
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    35
         */
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    36
        TerrainConfig terrain;
358
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    37
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    38
        /**
418
194bc810a570 add --log-level option, improve Config/Logger documentation, fix NETWORK_EANBLED typos in Engine
Tero Marttila <terom@fixme.fi>
parents: 417
diff changeset
    39
         * --log-level
194bc810a570 add --log-level option, improve Config/Logger documentation, fix NETWORK_EANBLED typos in Engine
Tero Marttila <terom@fixme.fi>
parents: 417
diff changeset
    40
         */
194bc810a570 add --log-level option, improve Config/Logger documentation, fix NETWORK_EANBLED typos in Engine
Tero Marttila <terom@fixme.fi>
parents: 417
diff changeset
    41
        EngineConfig engine;
194bc810a570 add --log-level option, improve Config/Logger documentation, fix NETWORK_EANBLED typos in Engine
Tero Marttila <terom@fixme.fi>
parents: 417
diff changeset
    42
194bc810a570 add --log-level option, improve Config/Logger documentation, fix NETWORK_EANBLED typos in Engine
Tero Marttila <terom@fixme.fi>
parents: 417
diff changeset
    43
        /**
358
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    44
         * --port
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    45
         */
409
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    46
        std::string net_port;
358
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    47
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    48
        /**
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    49
         * --server
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    50
         */
409
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    51
        bool net_server;
358
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    52
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    53
        /**
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    54
         * --connect
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    55
         */
409
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    56
        std::string net_connect;
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    57
        
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    58
        
389
e74c1820fbd2 implement --help, --fullscreen, --resolution and --list-modes
Tero Marttila <terom@fixme.fi>
parents: 358
diff changeset
    59
        /**
e74c1820fbd2 implement --help, --fullscreen, --resolution and --list-modes
Tero Marttila <terom@fixme.fi>
parents: 358
diff changeset
    60
         * Set the arg_* members
e74c1820fbd2 implement --help, --fullscreen, --resolution and --list-modes
Tero Marttila <terom@fixme.fi>
parents: 358
diff changeset
    61
         *
e74c1820fbd2 implement --help, --fullscreen, --resolution and --list-modes
Tero Marttila <terom@fixme.fi>
parents: 358
diff changeset
    62
         * @return true if execution should proceed, false if execution should stop
e74c1820fbd2 implement --help, --fullscreen, --resolution and --list-modes
Tero Marttila <terom@fixme.fi>
parents: 358
diff changeset
    63
         */
e74c1820fbd2 implement --help, --fullscreen, --resolution and --list-modes
Tero Marttila <terom@fixme.fi>
parents: 358
diff changeset
    64
        bool parse_args (int argc, char **argv);
e74c1820fbd2 implement --help, --fullscreen, --resolution and --list-modes
Tero Marttila <terom@fixme.fi>
parents: 358
diff changeset
    65
e74c1820fbd2 implement --help, --fullscreen, --resolution and --list-modes
Tero Marttila <terom@fixme.fi>
parents: 358
diff changeset
    66
        /**
409
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    67
         * Parse signed integer argument
389
e74c1820fbd2 implement --help, --fullscreen, --resolution and --list-modes
Tero Marttila <terom@fixme.fi>
parents: 358
diff changeset
    68
         */
409
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    69
        int parse_arg_int (const std::string &arg_val, const char *arg_name);
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    70
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    71
        /**
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    72
         * Parse unsigned WIDTHxHEIGHT argument
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    73
         */
411
106aaf6eadfe there's a grain of truth in the new graphics code now...
Tero Marttila <terom@fixme.fi>
parents: 409
diff changeset
    74
        PixelDimensions parse_arg_dimensions (const std::string &arg_val, const char *arg_name);
418
194bc810a570 add --log-level option, improve Config/Logger documentation, fix NETWORK_EANBLED typos in Engine
Tero Marttila <terom@fixme.fi>
parents: 417
diff changeset
    75
194bc810a570 add --log-level option, improve Config/Logger documentation, fix NETWORK_EANBLED typos in Engine
Tero Marttila <terom@fixme.fi>
parents: 417
diff changeset
    76
        /**
194bc810a570 add --log-level option, improve Config/Logger documentation, fix NETWORK_EANBLED typos in Engine
Tero Marttila <terom@fixme.fi>
parents: 417
diff changeset
    77
         * Parse a LogLevel
194bc810a570 add --log-level option, improve Config/Logger documentation, fix NETWORK_EANBLED typos in Engine
Tero Marttila <terom@fixme.fi>
parents: 417
diff changeset
    78
         */
194bc810a570 add --log-level option, improve Config/Logger documentation, fix NETWORK_EANBLED typos in Engine
Tero Marttila <terom@fixme.fi>
parents: 417
diff changeset
    79
        LogLevel parse_arg_loglevel (const std::string &arg_val, const char *arg_name);
358
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    80
        
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    81
        /**
389
e74c1820fbd2 implement --help, --fullscreen, --resolution and --list-modes
Tero Marttila <terom@fixme.fi>
parents: 358
diff changeset
    82
         * Print out a list of display modes
358
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    83
         */
389
e74c1820fbd2 implement --help, --fullscreen, --resolution and --list-modes
Tero Marttila <terom@fixme.fi>
parents: 358
diff changeset
    84
        void dump_display_modes (void);
397
13fa0546ef87 hopefully version stuff is now run properly on every make...
Tero Marttila <terom@fixme.fi>
parents: 389
diff changeset
    85
        
13fa0546ef87 hopefully version stuff is now run properly on every make...
Tero Marttila <terom@fixme.fi>
parents: 389
diff changeset
    86
        /**
417
c503e0c6a740 support for building without Network/Graphics, although the disable-graphics case is kind of hackish still
Tero Marttila <terom@fixme.fi>
parents: 411
diff changeset
    87
         * Print out our project version and some configuration info
397
13fa0546ef87 hopefully version stuff is now run properly on every make...
Tero Marttila <terom@fixme.fi>
parents: 389
diff changeset
    88
         */
13fa0546ef87 hopefully version stuff is now run properly on every make...
Tero Marttila <terom@fixme.fi>
parents: 389
diff changeset
    89
        void dump_version (void);
358
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    90
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    91
    public:
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    92
        /**
409
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    93
         * Setup default values
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    94
         */
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    95
        Main (void);
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    96
1a03ff151abc add --terrain-seed and --terrain-size arguments, plus bugfixes
Tero Marttila <terom@fixme.fi>
parents: 408
diff changeset
    97
        /**
358
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    98
         * IT BEGAN IN AFRIKA
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
    99
         */
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
   100
        virtual int main (int argc, char **argv);
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
   101
} app;
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
   102
37b18b779ffb PIMP MAH DOXYGEN
terom
parents:
diff changeset
   103
#endif