More moving stuff around
git-svn-id: https://aklabs.dyndns.org/svn/aklabs/trunk/games/spaceshooter@52 eb184899-6090-47d4-a65b-558f62f6ea1c
This commit is contained in:
110
cpp/GameLogic.cpp
Normal file
110
cpp/GameLogic.cpp
Normal file
@@ -0,0 +1,110 @@
|
||||
#include "GameLogic.h"
|
||||
|
||||
ControlMap::ControlMap()
|
||||
{
|
||||
this->controlType = CONTROL_TYPE_KEYBOARD;
|
||||
this->joystick = NULL;
|
||||
this->moveUp = CONTROL_KEY_MOVEUP;
|
||||
this->moveDown = CONTROL_KEY_MOVEDOWN;
|
||||
this->moveLeft = CONTROL_KEY_MOVELEFT;
|
||||
this->moveRight = CONTROL_KEY_MOVERIGHT;
|
||||
this->fire = CONTROL_KEY_FIRE;
|
||||
this->lastFireButtonState = 0;
|
||||
}
|
||||
|
||||
GameOptions::GameOptions()
|
||||
{
|
||||
this->enemyBaseShootChance = 2;
|
||||
this->difficultyLevel = 1;
|
||||
this->bossExplodeLength = 5000;
|
||||
this->playerBaseSpeed.x = 3;
|
||||
this->playerBaseSpeed.y = 3;
|
||||
this->playerBaseSpeed.z = 0;
|
||||
this->enemyBaseSpeed.x = 1;
|
||||
this->enemyBaseSpeed.y = 1;
|
||||
this->enemyBaseSpeed.z = 0;
|
||||
this->playerStartLives = 3;
|
||||
this->playerStartHealth = 100;
|
||||
this->playerBaseDamage = 5;
|
||||
this->playMusic = 0;
|
||||
this->playSound = 0;
|
||||
this->playerShieldTime = 5000;
|
||||
this->bossBaseTrip = 10000;
|
||||
this->playerFailTime = 5000;
|
||||
this->musicVolume = 80;
|
||||
this->soundVolume = 60;
|
||||
this->enemyBaseSpawnInterval = 1000;
|
||||
this->enemyBaseSpawnChance = 5;
|
||||
}
|
||||
|
||||
GameStatus::GameStatus()
|
||||
{
|
||||
this->enemyVelocity.x = 0;
|
||||
this->enemyVelocity.y = 0;
|
||||
this->enemyVelocity.z = 0;
|
||||
this->status = GAMESTATE_TITLEMENU;
|
||||
this->curLevel = 0;
|
||||
this->levelTimer = 0;
|
||||
this->levelScore = 0;
|
||||
this->levelPowerups = 0;
|
||||
this->levelLives = 0;
|
||||
this->bossOnScreen = 0;
|
||||
this->enemyShootChance = 2;
|
||||
this->weaponSpeed = 100;
|
||||
this->enemySpawnChance = 5;
|
||||
this->enemySpawnInterval = 1000;
|
||||
this->enemyLastSpawned = 0;
|
||||
this->powerDropChance = 100;
|
||||
this->bossExplodeTimer = 0;
|
||||
this->running = 1;
|
||||
}
|
||||
|
||||
void GameStatus::nextLevel(Player *player1, Player *player2, int curLevel)
|
||||
{
|
||||
GameOptions &opts = GameOptions::NewSingleton();
|
||||
Player *player = player1;
|
||||
if ( curLevel != -1 ) {
|
||||
this->curLevel = curLevel;
|
||||
}
|
||||
this->enemyShootChance = (opts.enemyBaseShootChance * (curLevel+1));
|
||||
this->enemyWeaponSpeed = (opts.enemyBaseWeaponSpeed * (curLevel+1)) + opts.difficultyLevel;
|
||||
this->enemySpawnChance = (opts.enemyBaseSpawnChance + (curLevel+1)) + opts.difficultyLevel;
|
||||
this->enemySpawnInterval = opts.enemyBaseSpawnInterval - (curLevel * -50);
|
||||
this->enemyVelocity.x = opts.enemyBaseSpeed.x + ((curLevel+1)/3) + opts.difficultyLevel;
|
||||
this->enemyVelocity.y = opts.enemyBaseSpeed.y + ((curLevel+1)/3) + opts.difficultyLevel;
|
||||
this->enemyVelocity.z = opts.enemyBaseSpeed.z + ((curLevel+1)/3) + opts.difficultyLevel;
|
||||
this->powerDropChance = (curLevel+1);
|
||||
if ( player2 == NULL ) {
|
||||
this->levelScore = player1->score;
|
||||
} else {
|
||||
this->levelScore = (player1->score + player2->score)/2;
|
||||
}
|
||||
while ( player != NULL ) {
|
||||
if ( curLevel == 0 ) {
|
||||
player->score = 0;
|
||||
player->setVelocity((Vector){opts.playerBaseSpeed.x + opts.difficultyLevel, opts.playerBaseSpeed.y + opts.difficultyLevel, 0} );
|
||||
player->health = opts.playerStartHealth;
|
||||
player->lives = opts.playerStartLives;
|
||||
this->enemySpawnChance *= opts.difficultyLevel;
|
||||
this->enemyWeaponSpeed *= opts.difficultyLevel;
|
||||
this->enemySpawnInterval /= opts.difficultyLevel;
|
||||
this->enemyVelocity.y += opts.difficultyLevel;
|
||||
} else {
|
||||
player->score += 100 * this->levelPowerups;
|
||||
player->score -= ( 200 * this->levelLives);
|
||||
player->score -= (unsigned int)(1000 * ((float)(SDL_GetTicks() - this->levelTimer) / 60000));
|
||||
player->score += 10000 * this->curLevel;
|
||||
}
|
||||
if ( player == player2 ) {
|
||||
break;
|
||||
}
|
||||
player = player2;
|
||||
}
|
||||
this->levelTimer = SDL_GetTicks();
|
||||
this->levelLives = 0;
|
||||
this->levelPowerups = 0;
|
||||
if ( curLevel != 0 )
|
||||
this->curLevel += 1;
|
||||
else
|
||||
this->curLevel = curLevel;
|
||||
}
|
||||
Reference in New Issue
Block a user