Added Enigma game
This commit is contained in:
126
project/jni/application/enigma/src/game.cpp
Normal file
126
project/jni/application/enigma/src/game.cpp
Normal file
@@ -0,0 +1,126 @@
|
||||
/*
|
||||
* Copyright (C) 2002,2003,2004 Daniel Heck
|
||||
*
|
||||
* 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.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
*/
|
||||
#include "game.hh"
|
||||
#include "errors.hh"
|
||||
#include "main.hh"
|
||||
#include "options.hh"
|
||||
#include "video.hh"
|
||||
#include "client.hh"
|
||||
#include "server.hh"
|
||||
#include "world.hh"
|
||||
#include "sound.hh"
|
||||
#include "lev/PersistentIndex.hh"
|
||||
|
||||
#include "ecl_sdl.hh"
|
||||
#include <cassert>
|
||||
|
||||
using namespace enigma;
|
||||
using namespace std;
|
||||
|
||||
|
||||
/* -------------------- Global variables -------------------- */
|
||||
|
||||
namespace
|
||||
{
|
||||
Uint32 last_tick_time;
|
||||
}
|
||||
|
||||
|
||||
/* -------------------- Level previews -------------------- */
|
||||
|
||||
bool game::DrawLevelPreview (ecl::GC &gc, lev::Proxy *levelProxy)
|
||||
{
|
||||
bool success = false;
|
||||
|
||||
sound::TempDisableSound();
|
||||
try {
|
||||
server::Msg_LoadLevel (levelProxy, true);
|
||||
|
||||
display::DrawAll(gc);
|
||||
success = true;
|
||||
}
|
||||
catch (XLevelLoading &err) {
|
||||
// log the message as we cannot display it on the screen
|
||||
Log << "DrawLevelPreview load error:\n" << err.what();
|
||||
success = false;
|
||||
}
|
||||
sound::TempReEnableSound();
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* -------------------- Functions -------------------- */
|
||||
|
||||
void game::StartGame ()
|
||||
{
|
||||
lev::Index *ind = lev::Index::getCurrentIndex();
|
||||
server::InitNewGame();
|
||||
|
||||
video::HideMouse();
|
||||
sdl::TempInputGrab grab(enigma::Nograb ? SDL_GRAB_OFF : SDL_GRAB_ON);
|
||||
|
||||
server::Msg_LoadLevel(ind->getCurrent(), false);
|
||||
|
||||
double dtime = 0;
|
||||
last_tick_time=SDL_GetTicks();
|
||||
while (!client::AbortGameP()) {
|
||||
try {
|
||||
client::Tick (dtime);
|
||||
server::Tick (dtime);
|
||||
}
|
||||
catch (XLevelRuntime& err) {
|
||||
client::Msg_Error (string("Server Error: level runtime error:\n")
|
||||
+ err.what());
|
||||
server::Msg_Panic(true);
|
||||
}
|
||||
|
||||
int sleeptime = 10 - (SDL_GetTicks()-last_tick_time);
|
||||
if (sleeptime >= 3) // only sleep if relatively idle
|
||||
SDL_Delay(sleeptime);
|
||||
|
||||
Uint32 current_tick_time = SDL_GetTicks();
|
||||
dtime = (current_tick_time - last_tick_time)/1000.0;
|
||||
|
||||
if (abs(1-dtime/0.01) < 0.2) {
|
||||
// less than 20% deviation from desired frame time?
|
||||
dtime = 0.01;
|
||||
last_tick_time += 10;
|
||||
} else {
|
||||
last_tick_time = current_tick_time;
|
||||
}
|
||||
|
||||
if (dtime > 500.0) /* Time has done something strange, perhaps
|
||||
run backwards */
|
||||
dtime = 0.0;
|
||||
// else if (dtime > 0.5)
|
||||
// dtime = 0.5;
|
||||
}
|
||||
// add last played level
|
||||
lev::PersistentIndex::addCurrentToHistory();
|
||||
|
||||
video::ShowMouse();
|
||||
}
|
||||
|
||||
void game::ResetGameTimer()
|
||||
{
|
||||
last_tick_time=SDL_GetTicks();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user