2010-07-31 06:23:38 +00:00
|
|
|
/* ScummVM - Graphic Adventure Engine
|
|
|
|
*
|
|
|
|
* ScummVM is the legal property of its developers, whose names
|
|
|
|
* are too numerous to list here. Please refer to the COPYRIGHT
|
|
|
|
* file distributed with this source distribution.
|
|
|
|
*
|
|
|
|
* 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.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2010-08-06 13:13:25 +00:00
|
|
|
/*
|
2010-07-31 09:53:02 +00:00
|
|
|
* This code is based on Broken Sword 2.5 engine
|
|
|
|
*
|
|
|
|
* Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer
|
|
|
|
*
|
|
|
|
* Licensed under GNU GPL v2
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2010-07-31 06:23:38 +00:00
|
|
|
#include "common/system.h"
|
2011-01-23 14:49:50 +00:00
|
|
|
|
|
|
|
#include "sword25/sword25.h" // for kDebugScript
|
2010-07-30 09:02:39 +00:00
|
|
|
#include "sword25/gfx/graphicengine.h"
|
2010-07-31 06:23:38 +00:00
|
|
|
#include "sword25/fmv/movieplayer.h"
|
2010-07-30 09:02:39 +00:00
|
|
|
#include "sword25/input/inputengine.h"
|
2010-07-31 06:23:38 +00:00
|
|
|
#include "sword25/kernel/kernel.h"
|
|
|
|
#include "sword25/kernel/persistenceservice.h"
|
2010-10-25 22:41:25 +00:00
|
|
|
#include "sword25/math/geometry.h"
|
2010-07-30 09:02:39 +00:00
|
|
|
#include "sword25/package/packagemanager.h"
|
2010-10-25 22:41:25 +00:00
|
|
|
#include "sword25/script/luascript.h"
|
2010-07-31 06:23:38 +00:00
|
|
|
#include "sword25/sfx/soundengine.h"
|
|
|
|
|
|
|
|
namespace Sword25 {
|
2010-07-29 19:53:02 +00:00
|
|
|
|
2010-10-19 21:03:33 +00:00
|
|
|
Kernel *Kernel::_instance = 0;
|
2010-07-29 19:53:02 +00:00
|
|
|
|
2010-08-18 12:58:22 +00:00
|
|
|
Kernel::Kernel() :
|
2010-10-25 22:41:25 +00:00
|
|
|
_resourceManager(NULL),
|
|
|
|
_initSuccess(false),
|
|
|
|
_gfx(0),
|
|
|
|
_sfx(0),
|
|
|
|
_input(0),
|
|
|
|
_package(0),
|
|
|
|
_script(0),
|
2011-05-17 10:03:46 +00:00
|
|
|
_fmv(0),
|
|
|
|
_rnd("sword25")
|
2010-10-25 22:41:25 +00:00
|
|
|
{
|
2010-08-06 13:13:25 +00:00
|
|
|
|
2010-10-25 22:41:25 +00:00
|
|
|
_instance = this;
|
2010-07-29 19:53:02 +00:00
|
|
|
|
2010-07-31 06:23:38 +00:00
|
|
|
// Create the resource manager
|
2010-10-25 22:41:25 +00:00
|
|
|
_resourceManager = new ResourceManager(this);
|
2010-07-29 19:53:02 +00:00
|
|
|
|
2011-05-25 15:17:11 +00:00
|
|
|
// Initialize the script engine
|
2010-10-25 22:41:25 +00:00
|
|
|
_script = new LuaScriptEngine(this);
|
|
|
|
if (!_script || !_script->init()) {
|
2010-10-19 21:03:33 +00:00
|
|
|
_initSuccess = false;
|
2010-07-29 19:53:02 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2010-07-31 06:23:38 +00:00
|
|
|
// Register kernel script bindings
|
2010-10-19 21:03:33 +00:00
|
|
|
if (!registerScriptBindings()) {
|
2011-01-23 14:49:50 +00:00
|
|
|
error("Script bindings could not be registered.");
|
2010-10-19 21:03:33 +00:00
|
|
|
_initSuccess = false;
|
2010-07-29 19:53:02 +00:00
|
|
|
return;
|
|
|
|
}
|
2011-01-23 14:49:50 +00:00
|
|
|
debugC(kDebugScript, "Script bindings registered.");
|
2010-07-29 19:53:02 +00:00
|
|
|
|
2010-10-25 22:41:25 +00:00
|
|
|
_input = new InputEngine(this);
|
|
|
|
assert(_input);
|
2010-08-06 13:13:25 +00:00
|
|
|
|
2010-10-25 22:41:25 +00:00
|
|
|
_gfx = new GraphicEngine(this);
|
|
|
|
assert(_gfx);
|
2010-08-06 13:13:25 +00:00
|
|
|
|
2010-10-25 22:41:25 +00:00
|
|
|
_sfx = new SoundEngine(this);
|
|
|
|
assert(_sfx);
|
2010-08-06 13:13:25 +00:00
|
|
|
|
2010-10-25 22:41:25 +00:00
|
|
|
_package = new PackageManager(this);
|
|
|
|
assert(_package);
|
2010-07-29 19:53:02 +00:00
|
|
|
|
2010-10-25 22:41:25 +00:00
|
|
|
_geometry = new Geometry(this);
|
|
|
|
assert(_geometry);
|
2010-07-29 19:53:02 +00:00
|
|
|
|
2010-10-25 22:41:25 +00:00
|
|
|
_fmv = new MoviePlayer(this);
|
|
|
|
assert(_fmv);
|
2010-07-29 19:53:02 +00:00
|
|
|
|
2010-10-25 22:41:25 +00:00
|
|
|
_initSuccess = true;
|
2010-07-29 19:53:02 +00:00
|
|
|
}
|
|
|
|
|
2010-10-25 22:41:25 +00:00
|
|
|
Kernel::~Kernel() {
|
|
|
|
// Services are de-registered in reverse order of creation
|
2010-07-29 19:53:02 +00:00
|
|
|
|
2010-10-25 22:41:25 +00:00
|
|
|
delete _input;
|
|
|
|
_input = 0;
|
2010-07-29 19:53:02 +00:00
|
|
|
|
2010-10-25 22:41:25 +00:00
|
|
|
delete _gfx;
|
|
|
|
_gfx = 0;
|
2010-07-29 19:53:02 +00:00
|
|
|
|
2010-10-25 22:41:25 +00:00
|
|
|
delete _sfx;
|
|
|
|
_sfx = 0;
|
2010-07-29 19:53:02 +00:00
|
|
|
|
2010-10-25 22:41:25 +00:00
|
|
|
delete _package;
|
|
|
|
_package = 0;
|
2010-07-29 19:53:02 +00:00
|
|
|
|
2010-10-25 22:41:25 +00:00
|
|
|
delete _geometry;
|
|
|
|
_geometry = 0;
|
2010-07-29 19:53:02 +00:00
|
|
|
|
2010-10-25 22:41:25 +00:00
|
|
|
delete _fmv;
|
|
|
|
_fmv = 0;
|
2010-07-29 19:53:02 +00:00
|
|
|
|
2010-10-25 22:41:25 +00:00
|
|
|
delete _script;
|
|
|
|
_script = 0;
|
2010-07-29 19:53:02 +00:00
|
|
|
|
2010-10-25 22:41:25 +00:00
|
|
|
// Resource-Manager freigeben
|
|
|
|
delete _resourceManager;
|
2010-07-29 19:53:02 +00:00
|
|
|
}
|
|
|
|
|
2010-07-31 06:23:38 +00:00
|
|
|
/**
|
|
|
|
* Returns a random number
|
2010-08-06 13:13:25 +00:00
|
|
|
* @param Min The minimum allowed value
|
|
|
|
* @param Max The maximum allowed value
|
2010-07-31 06:23:38 +00:00
|
|
|
*/
|
2010-10-19 21:03:33 +00:00
|
|
|
int Kernel::getRandomNumber(int min, int max) {
|
2011-01-23 15:01:24 +00:00
|
|
|
assert(min <= max);
|
2010-07-31 06:23:38 +00:00
|
|
|
|
2010-10-19 21:03:33 +00:00
|
|
|
return min + _rnd.getRandomNumber(max - min + 1);
|
2010-07-29 19:53:02 +00:00
|
|
|
}
|
|
|
|
|
2010-07-31 06:23:38 +00:00
|
|
|
/**
|
|
|
|
* Returns the elapsed time since startup in milliseconds
|
|
|
|
*/
|
2010-10-19 21:03:33 +00:00
|
|
|
uint Kernel::getMilliTicks() {
|
2010-07-31 06:23:38 +00:00
|
|
|
return g_system->getMillis();
|
2010-07-29 19:53:02 +00:00
|
|
|
}
|
|
|
|
|
2010-07-31 06:23:38 +00:00
|
|
|
/**
|
2010-10-19 09:44:13 +00:00
|
|
|
* Returns a pointer to the active Gfx Service, or NULL if no Gfx service is active.
|
2010-07-31 06:23:38 +00:00
|
|
|
*/
|
2010-10-19 21:03:33 +00:00
|
|
|
GraphicEngine *Kernel::getGfx() {
|
2010-10-25 22:41:25 +00:00
|
|
|
return _gfx;
|
2010-07-29 19:53:02 +00:00
|
|
|
}
|
|
|
|
|
2010-07-31 06:23:38 +00:00
|
|
|
/**
|
2010-10-19 09:44:13 +00:00
|
|
|
* Returns a pointer to the active Sfx Service, or NULL if no Sfx service is active.
|
2010-07-31 06:23:38 +00:00
|
|
|
*/
|
2010-10-19 21:03:33 +00:00
|
|
|
SoundEngine *Kernel::getSfx() {
|
2010-10-25 22:41:25 +00:00
|
|
|
return _sfx;
|
2010-07-29 19:53:02 +00:00
|
|
|
}
|
|
|
|
|
2010-07-31 06:23:38 +00:00
|
|
|
/**
|
2010-10-19 09:44:13 +00:00
|
|
|
* Returns a pointer to the active input service, or NULL if no input service is active.
|
2010-07-31 06:23:38 +00:00
|
|
|
*/
|
2010-10-19 21:03:33 +00:00
|
|
|
InputEngine *Kernel::getInput() {
|
2010-10-25 22:41:25 +00:00
|
|
|
return _input;
|
2010-07-29 19:53:02 +00:00
|
|
|
}
|
|
|
|
|
2010-07-31 06:23:38 +00:00
|
|
|
/**
|
2010-10-19 09:44:13 +00:00
|
|
|
* Returns a pointer to the active package manager, or NULL if no manager is active.
|
2010-07-31 06:23:38 +00:00
|
|
|
*/
|
2010-10-19 21:03:33 +00:00
|
|
|
PackageManager *Kernel::getPackage() {
|
2010-10-25 22:41:25 +00:00
|
|
|
return _package;
|
2010-07-29 19:53:02 +00:00
|
|
|
}
|
|
|
|
|
2010-07-31 06:23:38 +00:00
|
|
|
/**
|
2010-10-19 09:44:13 +00:00
|
|
|
* Returns a pointer to the script engine, or NULL if it is not active.
|
2010-07-31 06:23:38 +00:00
|
|
|
*/
|
2010-10-19 21:03:33 +00:00
|
|
|
ScriptEngine *Kernel::getScript() {
|
2010-10-25 22:41:25 +00:00
|
|
|
return _script;
|
2010-07-29 19:53:02 +00:00
|
|
|
}
|
|
|
|
|
2010-07-31 06:23:38 +00:00
|
|
|
/**
|
2010-10-19 09:44:13 +00:00
|
|
|
* Returns a pointer to the movie player, or NULL if it is not active.
|
2010-07-31 06:23:38 +00:00
|
|
|
*/
|
2010-10-19 21:03:33 +00:00
|
|
|
MoviePlayer *Kernel::getFMV() {
|
2010-10-25 22:41:25 +00:00
|
|
|
return _fmv;
|
2010-07-29 19:53:02 +00:00
|
|
|
}
|
|
|
|
|
2010-10-19 21:03:33 +00:00
|
|
|
void Kernel::sleep(uint msecs) const {
|
|
|
|
g_system->delayMillis(msecs);
|
2010-07-29 19:53:02 +00:00
|
|
|
}
|
2010-07-31 06:23:38 +00:00
|
|
|
|
|
|
|
} // End of namespace Sword25
|