This repository has been archived on 2026-05-18. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
spaceshooter/cpp/GameLogic.h
2010-07-29 01:46:34 +00:00

117 lines
4.6 KiB
C++

#ifndef __GAMELOGIC_H__
#define __GAMELOGIC_H__
#include <SDL.h>
#include <libgame/libgame.h>
#include "Character.h"
#define GAMESTATE_TITLEMENU 0
#define GAMESTATE_PLAYSINGLE 1
#define GAMESTATE_PLAYMULTI 2
#define GAMESTATE_FAILSCREEN 3
#define GAMESTATE_HELPSCREEN 4
#define GAMESTATE_CREDITSCREEN 5
#define GAMESTATE_OPTIONSCREEN 6
#define CONTROL_TYPE_KEYBOARD 0
#define CONTROL_TYPE_JOYSTICK 1
#define CONTROL_TYPE_NONE 2
// --------- some defines for default control configurations
#define CONTROL_KEY_MOVELEFT SDLK_LEFT
#define CONTROL_KEY_MOVERIGHT SDLK_RIGHT
#define CONTROL_KEY_MOVEDOWN SDLK_DOWN
#define CONTROL_KEY_MOVEUP SDLK_UP
#define CONTROL_KEY_FIRE SDLK_SPACE
// the CONTROL_JS_Px_MOVEx defines refer to state maps for the joystick hats
// ... controlling the spaceships via control stick currently isn't supported
#define CONTROL_JS_MOVELEFT SDL_HAT_LEFT
#define CONTROL_JS_MOVERIGHT SDL_HAT_RIGHT
#define CONTROL_JS_MOVEUP SDL_HAT_UP
#define CONTROL_JS_MOVEDOWN SDL_HAT_DOWN
// this refers to a button pressed on the joystick for firing
#define CONTROL_JS_FIRE 1
struct ControlMap
{
int controlType; // one of the CONTROL_TYPE defines
SDL_Joystick *joystick; // if CONTROL_JOYSTICK, this is the joystick opened for this control map
int moveUp;
int moveDown;
int moveLeft;
int moveRight;
int fire;
// used by the joystick monitoring stuff
int lastFireButtonState;
ControlMap();
};
class GameOptions
{
protected:
GameOptions();
public:
static GameOptions &NewSingleton()
{
static GameOptions singleton;
return singleton;
}
int difficultyLevel; // integer from 1+ specifying the difficulty of the game
Uint32 bossExplodeLength; // default 5000, specifies how long the boss should explode (and fade) for
Vector playerBaseSpeed; // base movement speed for the player
Vector enemyBaseSpeed; // base movement speed for enemies
int enemyBaseShootChance; // base chance that an enemy will fire
int enemyBaseWeaponSpeed; // base speed of the enemy's weapons
int enemyBaseSpawnChance; // base spawn chance of the enemy ships
int enemyBaseSpawnInterval; // base spawn interval for enemies
int playerStartLives; // base number of lives for the player
int playerStartHealth; // base health for the player
int playerBaseDamage; // base weapon damage for the player's laser bolts
int playMusic; // 1 = play background music, 0 = stop background music
int playSound; // 1 = play sound effects, 0 = don't play sound effects
int playerShieldTime; // defaults to 5000 (5 seconds), fade time for the player shield effect
int bossBaseTrip; // determines at what interval (default 10,000) that the boss should appear
int playerFailTime; // amount of time to wait after the player loses all lives (default 5000) before showing the fail screen
int musicVolume; // 1 - 128
int soundVolume; // 1 - 128
ControlMap controlMaps[2]; // idx 0 = player 1, idx 1 = player 2
};
// options and values that can change during gameplay should go here (i.e. things that
// don't get set directly in the Options screen); everything else should go into the
// GameOptions struct, above
class GameStatus
{
protected:
GameStatus();
public:
static GameStatus &NewSingleton()
{
static GameStatus singleton;
return singleton;
}
int running; // is the game still running? (are we exiting)
void nextLevel(Player *player1, Player *player2, int curLevel = -1);
Vector enemyVelocity; // current speed of enemies on this level
int enemyWeaponSpeed;
int status; // game status flags
int curLevel; // current level (1, 2, 3, etc)
Uint32 levelTimer; // time currently spent on this level
int levelScore; // score for the previous level (used when calculating score)
int levelPowerups; // the number of powerups you got this level (for score)
int levelLives; // the number of lives you used this level (for score)
int bossOnScreen; // 0 = boss is not on screen, 1 = boss is on screen
int enemyShootChance; // chance per update that an enemy will fire (currently stupid)
Uint32 weaponSpeed; // player weapon shoot speed
int enemySpawnChance; // chance per update that an enemy will spawn
Uint32 enemySpawnInterval; // minimum time in milliseconds between enemy spawns
Uint32 enemyLastSpawned; // last SDL_GetTicks when an enemy was spawned
int powerDropChance; // integer from 0 to 100 specifying the chance that a powerup will spawn when an enemy dies
Uint32 bossExplodeTimer; // used to track how long the boss has been exploding
};
#endif // __GAMELOGIC_H__