?? sys.cpp
字號:
/* miscellaneous
* Template CS game
* (C)2001 Mat Sutcliffe. See license.txt for license info (GPL).
*/
#include <cssysdef.h>
#include <imap/parser.h>
#include <iutil/plugin.h>
#include <iutil/vfs.h>
#include <ivideo/fontserv.h>
#include <igraphic/imageio.h>
#include <csengine/engine.h>
#include <cstool/initapp.h>
#include <iutil/cfgmgr.h>
#include <csutil/cfgfile.h>
#include <ivaria/conout.h>
#include <ivaria/conin.h>
#include <ivideo/graph3d.h>
#include <iutil/strvec.h>
#include <ivaria/reporter.h>
#include "sys.h"
iObjectRegistry *GlobalObjReg; // a hack, please don't use outside of this file
System::System(iObjectRegistry *objreg) {
GlobalObjReg = objreg;
plugmgr = CS_QUERY_REGISTRY(objreg, iPluginManager);
csRef<iConfigManager> conf (CS_QUERY_REGISTRY(objreg, iConfigManager));
if (! conf->Load("game.cfg", NULL, 1, 1)) exit(1);
char tmp[64];
# define REQUEST(clas) CS_REQUEST_PLUGIN(conf->GetStr("System.Plugins." #clas, tmp), clas)
bool ok = csInitializer::RequestPlugins(objreg,
REQUEST(iGraphics3D),
REQUEST(iConsoleOutput),
REQUEST(iConsoleInput),
CS_REQUEST_END);
require(ok, "Requesting Plugins");
csRef<iVFS> vfs (CS_QUERY_REGISTRY(objreg, iVFS));
csConfigFile cf;
if (cf.Load("/this/uservfs.cfg", vfs)) {
csRef<iConfigIterator> iter (cf.Enumerate("VFS.Mount."));
while (iter->Next()) vfs->Mount(iter->GetKey(), iter->GetStr());
}
conout = CS_QUERY_REGISTRY(objreg, iConsoleOutput);
}
System::~System() {
plugmgr->Clear();
}
void System::report(const char *desc, int severity) {
csRef<iReporter> rep (CS_QUERY_REGISTRY(GlobalObjReg, iReporter));
if (rep) {
rep->Report(severity, "crystalspace.application.game", desc);
} else {
fprintf(stderr, "Error: %s\n"
"Furthermore, standard error reporting plugin failed.", desc);
}
if (severity == SYS_ERROR) exit(1);
}
void System::conprint(const char *text) {
csRef<iConsoleOutput> con
(CS_QUERY_REGISTRY(GlobalObjReg, iConsoleOutput));
if (con) {
con->PutText(text);
con->DecRef();
}
}
void System::require(bool state, const char *desc) {
if (state) return;
else {
fprintf(stderr, "Failed Require: %s\n", desc);
exit(1);
}
}
bool System::savegame(const char *file, gamedata_t *data, size_t size) {
csRef<iVFS> vfs (CS_QUERY_REGISTRY(GlobalObjReg, iVFS));
vfs->ChDir("/save");
char *f = new char[strlen(file) + 5];
strcpy(f, file);
strcat(f, ".sav");
bool ret = vfs->WriteFile(f, (char *)data, size);
delete[] f;
return ret;
}
gamedata_t* System::loadgame(const char *file, size_t size) {
csRef<iVFS> vfs (CS_QUERY_REGISTRY(GlobalObjReg, iVFS));
vfs->ChDir("/save");
char *f = new char[strlen(file) + 5];
strcpy(f, file);
strcat(f, ".sav");
csRef<iDataBuffer> buff (vfs->ReadFile(f));
gamedata_t *ret = (gamedata_t *)&*buff;
delete[] f;
return ret;
}
csPtr<iStrVector> System::listsaves() {
csRef<iVFS> vfs (CS_QUERY_REGISTRY(GlobalObjReg, iVFS));
vfs->ChDir("/save");
csRef<iStrVector> ret (vfs->FindFiles("."));
for (int i = 0; i < ret->Length(); i++) {
char *ext = strchr(ret->Get(i), '.');
if (ext && strncasecmp(ext, ".sav", 4)) ret->Delete(i);
*ext = 0;
}
ret->QuickSort();
return csPtr<iStrVector> (ret);
}
bool System::deletesave(const char *file) {
csRef<iVFS> vfs (CS_QUERY_REGISTRY(GlobalObjReg, iVFS));
vfs->ChDir("/save");
bool ret = vfs->DeleteFile(file);
return ret;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -