Files
commandergenius/project/jni/application/gav/gav-0.9.0/Configuration.h
2010-11-12 13:32:08 +02:00

238 lines
6.5 KiB
C++

/* -*- C++ -*- */
/*
GAV - Gpl Arcade Volleyball
Copyright (C) 2002
GAV team (http://sourceforge.net/projects/gav/)
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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* Configuration options */
#include <string>
#include <sstream>
#include "aarg.h"
#ifndef __CONFIGURATION_H__
#define __CONFIGURATION_H__
#define MAX_PLAYERS (4)
#define DEFAULT_FPS (50)
#define DEFAULT_WINNING_SCORE (15)
#define DEFAULT_BALL_AMPLIFY 5
#define DEFAULT_FRAME_SKIP 0
#define DEFAULT_THEME "classic"
#define DEFAULT_FULLSCREEN false
#define DEFAULT_SOUND true
#define DEFAULT_NPLAYERFRAMES 4
#define DEFAULT_PLAYERSTILLB 1
#define DEFAULT_PLAYERSTILLE 1
#define DEFAULT_PLAYERSTILLP 0
#define DEFAULT_PLAYERRUNB 2
#define DEFAULT_PLAYERRUNE 3
#define DEFAULT_PLAYERRUNP 250
#define DEFAULT_PLAYERJMPB 4
#define DEFAULT_PLAYERJMPE 4
#define DEFAULT_PLAYERJMPP 0
#define DEFAULT_NBALLFRAMES 4
#define DEFAULT_BALLPERIOD 1000
#define BALL_SPEED_INC 3
#define DEFAULT_CONF_FILENAME ".gav"
#define ALTERNATIVE_CONF_FILENAME "gav.ini"
#define ENVIRONMENT_WIDTH (640)
#define ENVIRONMENT_HEIGHT (400)
#define BIG_ENVIRONMENT_WIDTH (1000)
#define BIG_ENVIRONMENT_HEIGHT (400)
enum { PLAYER_NONE, PLAYER_HUMAN, PLAYER_COMPUTER};
enum { MONITOR_NORMAL, MONITOR_OLD, MONITOR_VERYOLD, MONITOR_VERYVERYOLD};
typedef struct PlayerFrameConf_s {
unsigned short nPlayerFrames;
unsigned short playerStillB;
unsigned short playerStillE;
unsigned short playerStillP;
unsigned short playerRunB;
unsigned short playerRunE;
unsigned short playerRunP;
unsigned short playerJmpB;
unsigned short playerJmpE;
unsigned short playerJmpP;
} PlayerFrameConf_t;
typedef struct BallFrameConf_s {
unsigned short nBallFrames;
unsigned short ballPeriod;
} BallFrameConf_t;
typedef struct Resolution_s {
unsigned short x;
unsigned short y;
float ratioX;
float ratioY;
} Resolution_t;
typedef struct Environment_s {
unsigned short w;
unsigned short h;
} Environment_t;
class Configuration {
public:
int left_nplayers;
int right_nplayers;
int left_players[MAX_PLAYERS/2];
int right_players[MAX_PLAYERS/2];
PlayerFrameConf_t playerFrameConf;
BallFrameConf_t ballFrameConf;
Resolution_t resolution;
Resolution_t desiredResolution;
Environment_t env;
std::string currentTheme;
/* Constants that depend on the screen size */
int SCREEN_WIDTH;
int SCREEN_HEIGHT;
float SPEEDY;
int FLOOR_ORD;
int SPEED_MULTIPLIER;
int NET_X;
int NET_Y;
int CEILING;
int LEFT_WALL;
int RIGHT_WALL;
int DEFAULT_SPEED;
/* To add: something meaningful to record the controls... */
bool sound;
int winning_score;
int monitor_type;
unsigned int frame_skip; // one every frame_skip + 1 are actually drawn
unsigned int fps; // fps of the update (not graphical)
unsigned int mill_per_frame; // caches the # of msecs per frame (1000/fps)
bool bgBig; // if the background is big
bool fullscreen;
unsigned int ballAmplify;
Configuration() : left_nplayers(1), right_nplayers(1),
sound(DEFAULT_SOUND),
winning_score(DEFAULT_WINNING_SCORE) {
monitor_type = MONITOR_NORMAL;
frame_skip = DEFAULT_FRAME_SKIP;
fps = DEFAULT_FPS;
mill_per_frame = 1000 / fps;
left_players[0] = PLAYER_HUMAN;
right_players[0] = PLAYER_COMPUTER;
for ( int i = 1; i < MAX_PLAYERS/2; i++ ) {
left_players[i] = PLAYER_NONE;
right_players[i] = PLAYER_NONE;
}
bgBig = false;
fullscreen = DEFAULT_FULLSCREEN;
ballAmplify = DEFAULT_BALL_AMPLIFY;
setDefaultFrameConf();
currentTheme = "classic";
scaleFactors(ENVIRONMENT_WIDTH, ENVIRONMENT_HEIGHT);
env.w = ENVIRONMENT_WIDTH;
env.h = ENVIRONMENT_HEIGHT;
setDesiredResolution(ENVIRONMENT_WIDTH, ENVIRONMENT_HEIGHT);
setResolution(ENVIRONMENT_WIDTH, ENVIRONMENT_HEIGHT);
}
void scaleFactors(int width, int height) {
SCREEN_WIDTH = width;
SCREEN_HEIGHT = height;
SPEEDY = ((float) SCREEN_HEIGHT / 2.5);
FLOOR_ORD = SCREEN_HEIGHT -(SCREEN_HEIGHT / 200);
NET_X = width / 2 - width / 80;
NET_Y = height / 2 + ( 3*height / 200 );
CEILING = (int) (height / 17);
LEFT_WALL = (int) (width / 80);
RIGHT_WALL = (int) (width - width / 40);
DEFAULT_SPEED = (int) (bgBig)?(width/4):(25*width/64);
}
inline void setResolution(int w, int h) {
resolution.x = w;
resolution.y = h;
resolution.ratioX = (float) resolution.x / (float) env.w;
resolution.ratioY = (float) resolution.y / (float) env.h;
}
inline void setResolutionToDesired() {
setResolution(desiredResolution.x, desiredResolution.y);
}
inline void setDesiredResolution(int w, int h) {
desiredResolution.x = w;
desiredResolution.y = h;
desiredResolution.ratioX = (float) desiredResolution.x / (float) env.w;
desiredResolution.ratioY = (float) desiredResolution.y / (float) env.h;
}
inline void setDefaultFrameConf() {
playerFrameConf.nPlayerFrames = DEFAULT_NPLAYERFRAMES;
playerFrameConf.playerStillB = DEFAULT_PLAYERSTILLB;
playerFrameConf.playerStillE = DEFAULT_PLAYERSTILLE;
playerFrameConf.playerStillP = DEFAULT_PLAYERSTILLP;
playerFrameConf.playerRunB = DEFAULT_PLAYERRUNB;
playerFrameConf.playerRunE = DEFAULT_PLAYERRUNE;
playerFrameConf.playerRunP = DEFAULT_PLAYERRUNP;
playerFrameConf.playerJmpB = DEFAULT_PLAYERJMPB;
playerFrameConf.playerJmpE = DEFAULT_PLAYERJMPE;
playerFrameConf.playerJmpP = DEFAULT_PLAYERJMPP;
ballFrameConf.nBallFrames = DEFAULT_NBALLFRAMES;
ballFrameConf.ballPeriod = DEFAULT_BALLPERIOD;
}
inline void setFps(int val) {
fps = val;
mill_per_frame = 1000 / val;
}
std::string toString(int v) {
std::ostringstream os;
os << v;
return os.str();
}
int loadConfiguration();
int saveConfiguration(std::string fname);
int createConfigurationFile();
std::string confFileName();
//void scaleFactors(int width, int height);
};
#endif