238 lines
6.5 KiB
C++
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
|