src/Application.cc
author terom
Tue, 09 Dec 2008 04:41:48 +0000
changeset 368 fe49a4b12575
parent 358 37b18b779ffb
child 389 e74c1820fbd2
permissions -rw-r--r--
move our overdrive-doxygen stuff to doxygen_hc_overclock.cfg
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
     1
358
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
     2
#include "Application.hh"
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
     3
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
     4
#include <stdexcept>
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
     5
#include <cassert>
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
     6
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
     7
358
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
     8
/**
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
     9
 * Set the arg_* members
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    10
 */
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    11
void Main::parse_args (int argc, char **argv) {
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    12
    // set up the options
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    13
    args.add_option('p', "port", "PORT", "set network port used", true);
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    14
    args.add_option('s', "server", "", "act as a network server", true);
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    15
    args.add_option('c', "client", "SERVERHOST", "act as a network client", true);
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    16
    args.add_option('g', "graphics", "", "run graphics/local input. Implied with --connect", true);
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    17
358
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    18
    // set defaults
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    19
    arg_graphics = false;
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    20
    arg_port = NETWORK_PORT_STR;
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    21
    arg_server = false;
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    22
    arg_connect = "";
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    23
358
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    24
    // extra state
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    25
    bool graphics_default = true;
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    26
    
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    27
    try {
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    28
        // parse args
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    29
        args.parse_args(argc, argv);
267
2cb6f1421e45 enable graphics by default unless --server
terom
parents: 185
diff changeset
    30
358
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    31
    } catch (CL_Error &e) {
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    32
        throw ArgumentError(e.message);
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    33
    }
267
2cb6f1421e45 enable graphics by default unless --server
terom
parents: 185
diff changeset
    34
358
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    35
    while (args.next()) {
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    36
        switch (args.get_key()) {
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    37
            case 'p':
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    38
                arg_port = args.get_argument();
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    39
                break;
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    40
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    41
            case 's':
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    42
                arg_server = true;
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    43
                break;
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    44
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    45
            case 'c':
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    46
                arg_connect = args.get_argument();
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    47
                break;
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    48
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    49
            case 'g':
267
2cb6f1421e45 enable graphics by default unless --server
terom
parents: 185
diff changeset
    50
                arg_graphics = true;
358
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    51
                break;
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    52
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    53
            case CL_CommandLine::REST_ARG:
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    54
                throw ArgumentError(args.get_argument());
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    55
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    56
            default:
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    57
                throw ArgumentError(std::string(1, (char) args.get_key()));
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    58
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    59
        }
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    60
    }
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    61
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    62
    // check for invalid combinations of arugments
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    63
    if (arg_server and !arg_connect.empty())
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    64
        throw ArgumentError("cannot be both server and client");
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    65
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    66
    // enable graphics by default unless server
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    67
    if (!arg_server && graphics_default)
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    68
        arg_graphics = true;
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    69
}
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    70
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    71
/**
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    72
 * IT BEGAN IN AFRIKA
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    73
 */
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    74
int Main::main (int argc, char **argv) {
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    75
    // initialize the ClanLib components that we use
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    76
    CL_SetupCore setup_core;
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    77
    CL_SetupNetwork setup_network;
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    78
    CL_SetupDisplay setup_disp;
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    79
    CL_SetupGL setup_gl;
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    80
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    81
    try {
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    82
        // parse arugments
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    83
        parse_args(argc, argv);
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    84
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    85
        // our engine
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    86
        Engine engine;
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    87
        
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    88
        // setup graphics
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    89
        if (arg_graphics)
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    90
            engine.setupGraphics();
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    91
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    92
        // setup either network server, client or singleplayer
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    93
        if (arg_server) {
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    94
            engine.setupNetworkServer(arg_port);
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    95
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    96
        } else if (!arg_connect.empty()) {
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    97
            engine.setupNetworkClient(arg_connect, arg_port);
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    98
        
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
    99
        } else {
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
   100
            engine.setupSinglePlayer();
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   101
        }
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   102
358
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
   103
        // run the main loop
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
   104
        engine.run();
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
   105
        
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
   106
        // succesful return
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
   107
        return 0;
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
   108
    
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
   109
    } catch (ArgumentError &e) {
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
   110
        std::cerr << e.what() << std::endl;
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
   111
        args.print_help();
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   112
358
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
   113
        // XXX: handle --help
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
   114
        return 1;
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
   115
    } catch (CL_Error &e) {
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
   116
        std::cerr << "main: CL_Error:" << e.message << std::endl;
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   117
358
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
   118
        return 1;
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   119
358
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
   120
    } catch (std::exception &e) {
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
   121
        std::cerr << "FATAL [uncaught_exception] " << e.what() << std::endl;
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   122
358
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
   123
        return 1;
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
   124
    }
37b18b779ffb PIMP MAH DOXYGEN
terom
parents: 267
diff changeset
   125
}
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   126