console.cpp

来自「3D游戏模板」· C++ 代码 · 共 68 行

CPP
68
字号
/* console io
 * Template CS game
 * (C)2001 Mat Sutcliffe. See license.txt for license info (GPL)
 */

#include <cssysdef.h>
#include <iutil/objreg.h>
#include <iutil/cfgmgr.h>
#include <csutil/cfgfile.h>
#include <ivaria/conin.h>
#include <ivaria/conout.h>

#include "console.h"
#include "sys.h"

SCF_IMPLEMENT_IBASE(Console::PerformCallback)
	SCF_IMPLEMENTS_INTERFACE(iConsoleExecCallback)
SCF_IMPLEMENT_IBASE_END

Console::Console(iObjectRegistry *objreg) {
	conout = CS_QUERY_REGISTRY(objreg, iConsoleOutput);
	conin = CS_QUERY_REGISTRY(objreg, iConsoleInput);

	conin->Bind(conout);
	Console::PerformCallback* cb = new Console::PerformCallback(objreg);
	conin->SetExecuteCallback(cb);
	cb->DecRef ();

	conout->AutoUpdate(0);
	conout->SetTransparency(1);
	hide();
}

Console::PerformCallback::PerformCallback (iObjectRegistry *objreg) { 
	SCF_CONSTRUCT_IBASE (NULL);
	conf = new csConfigFile ();
	csRef<iConfigManager> confmgr (CS_QUERY_REGISTRY(objreg, iConfigManager));
	confmgr->AddDomain(conf, iConfigManager::ConfigPriorityCmdLine);
}

void Console::PerformCallback::Execute(const char *cmd) {
	char *val = strchr(cmd, '=');
	if (val) {
		*val = 0;
		if (! strchr(cmd + 1, '.')) {
			char prefix[64] = GAME ".Bind.";
			cmd = strncat(prefix, cmd, 48);
		}
		conf->SetStr(cmd, ++val);
	}
}

void Console::show() {
	conout->SetVisible(1);
	visible = 1;
}

void Console::hide() {
	conout->SetVisible(0);
	visible = 0;
}

bool Console::toggle() {
	if (conout->GetVisible()) hide(); else show();
	return visible;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?