⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sys.cpp

📁 3D游戏模板
💻 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 + -