Пример #1
0
mono::string CScriptbind_LevelSystem::GetDefaultGameType(ILevelInfo *pLevelInfo)
{
	if(auto pGameType = pLevelInfo->GetDefaultGameType())
		return ToMonoString(pGameType->name);

	return ToMonoString("");
}
Пример #2
0
mono::string CScriptbind_Console::GetCVarString(mono::string name)
{
	if(ICVar *pCVar = gEnv->pConsole->GetCVar(ToCryString(name)))
		return (mono::string )ToMonoString(pCVar->GetString());

	return (mono::string )ToMonoString("");
}
Пример #3
0
mono::string CScriptbind_Entity::GetStaticObjectFilePath(IEntity *pEntity, int slot)
{
	if(IStatObj *pStatObj = pEntity->GetStatObj(slot))
		return ToMonoString(pStatObj->GetFilePath());
	else if(ICharacterInstance *pCharacter = pEntity->GetCharacter(0))
		return ToMonoString(pCharacter->GetFilePath());

	return ToMonoString("");
}
Пример #4
0
mono::string CScriptbind_Entity::GetAttachmentObject(IAttachment *pAttachment)
{
	if(IAttachmentObject *pObject = pAttachment->GetIAttachmentObject())
	{
		if(ICharacterInstance *pCharacterInstance = pObject->GetICharacterInstance())
			return ToMonoString(pCharacterInstance->GetFilePath());
		else if(IStatObj *pStatObj = pObject->GetIStatObj())
			return ToMonoString(pStatObj->GetFilePath());
	}

	return nullptr;
}
Пример #5
0
mono::object ToMonoObject(ScriptAnyValue anyValue)
{
	switch(anyValue.type)
	{
	case ANY_TSTRING:
		return (mono::object)ToMonoString(anyValue.str);
	case ANY_TNUMBER:
		return (mono::object)mono_value_box(mono_domain_get(), mono_get_single_class(), &anyValue.number);
	case ANY_TBOOLEAN:
		return (mono::object)mono_value_box(mono_domain_get(), mono_get_boolean_class(), &anyValue.b);
	case ANY_TVECTOR:
		{
			IMonoClass *pVec3Class = g_pScriptSystem->GetCryBraryAssembly()->GetClass("Vec3");

			Vec3 vec(anyValue.vec3.x, anyValue.vec3.y, anyValue.vec3.z);
			return pVec3Class->BoxObject(&vec)->GetManagedObject();
		}
	case ANY_TTABLE:
		return (mono::object)anyValue.table;
	default:
		break;
	}

	return nullptr;
}
Пример #6
0
void CScriptbind_CrySerialize::ValueString(ISerialize *ser, mono::string name, mono::string &str, int policy)
{
	TSerialize serialize = TSerialize(ser);
	if(!ser->IsReading())
		serialize.Value(ToCryString(name), ToCryString(str), policy);
	else
	{
		string cryStr;
		serialize.Value(ToCryString(name), cryStr, policy);
		str = ToMonoString(cryStr.c_str());
	}
}
Пример #7
0
IMPLEMENT_RMI(CMonoActor, ClScriptRMI)
{
	IMonoClass *pActorClass = g_pScriptSystem->GetCryBraryAssembly()->GetClass("Entity");

	IMonoArray *pNetworkArgs = CreateMonoArray(3);
	pNetworkArgs->Insert(ToMonoString(params.methodName.c_str()));
	pNetworkArgs->Insert(params.pArgs);
	pNetworkArgs->Insert(params.targetId);

	pActorClass->InvokeArray(nullptr, "OnRemoteInvocation", pNetworkArgs);

	return true;
}
Пример #8
0
IMPLEMENT_RMI(CMonoEntityExtension, SvScriptRMI)
{
	IMonoClass *pEntityClass = g_pScriptSystem->GetCryBraryAssembly()->GetClass("Entity");

	IMonoArray *pNetworkArgs = CreateMonoArray(3);
	pNetworkArgs->Insert(ToMonoString(params.methodName.c_str()));
	pNetworkArgs->InsertMonoObject(params.args);
	pNetworkArgs->Insert(params.targetId);

	pEntityClass->InvokeArray(nullptr, "OnRemoteInvocation", pNetworkArgs);
	pNetworkArgs->Release();

	return true;
}
Пример #9
0
mono::string CScriptbind_Entity::GetAttachmentName(IAttachment *pAttachment)
{
	return ToMonoString(pAttachment->GetName());
}
Пример #10
0
mono::string CScriptbind_Entity::GetEntityLinkName(IEntityLink *pLink)
{
	return ToMonoString(pLink->name);
}
Пример #11
0
mono::string CScriptbind_Entity::GetName(IEntity *pEntity)
{
	return ToMonoString(pEntity->GetName());
}
Пример #12
0
bool CScriptSystem::Reload()
{
	if((!m_bFirstReload && g_pMonoCVars->mono_realtimeScripting == 0) || m_bReloading)
		return false;

	m_bReloading = true;

	if(!m_bFirstReload)
	{
		for each(auto listener in m_listeners)
			listener->OnReloadStart();

		m_pScriptManager->CallMethod("Serialize");
	}

	IMonoDomain *pScriptDomain = CreateDomain("ScriptDomain", nullptr, true);

	IMonoAssembly *pCryBraryAssembly = pScriptDomain->LoadAssembly(PathUtils::GetBinaryPath() + "CryBrary.dll");

	IMonoArray *pCtorParams = CreateMonoArray(2);
	pCtorParams->InsertAny(m_bFirstReload);
	pCtorParams->InsertMonoString(ToMonoString(PathUtils::GetConfigPath()));

	IMonoObject *pScriptManager = *pCryBraryAssembly->GetClass("ScriptManager", "CryEngine.Initialization")->CreateInstance(pCtorParams);
	SAFE_RELEASE(pCtorParams);

	auto result = pScriptManager->CallMethod("Initialize", m_bFirstReload);
	if(result == nullptr)
		return false;

	IMonoObject *pResult = *result;
	auto reloadResult = pResult->Unbox<EScriptReloadResult>();
	SAFE_RELEASE(pResult);

	switch(reloadResult)
	{
	case EScriptReloadResult_Success:
		{
			// revert previous domain
			if(!m_bFirstReload)
				m_pScriptDomain->Release();

			m_pScriptDomain = pScriptDomain;
			m_pScriptManager = pScriptManager;
			m_pCryBraryAssembly = pCryBraryAssembly;

			CacheManagedResources();

			if(!m_bFirstReload)
				m_pScriptManager->CallMethod("Deserialize");

			// Set Network.Editor etc.
			IMonoClass *pClass = m_pCryBraryAssembly->GetClass("Game");

			IMonoArray *pArgs = CreateMonoArray(2);
			pArgs->Insert(gEnv->IsEditor());
			pArgs->Insert(gEnv->IsDedicated());
			pClass->GetMethod("InitializeGameStatics", 2)->InvokeArray(nullptr, pArgs);
			SAFE_RELEASE(pArgs);

			m_pScriptManager->CallMethod("ProcessWaitingScripts", m_bFirstReload);

			for each(auto listener in m_listeners)
				listener->OnReloadComplete();

			if(!m_bFirstReload && gEnv->IsEditor())
				gEnv->pFlowSystem->ReloadAllNodeTypes();

			m_bReloading = false;
			m_bDetectedChanges = false;

			return true;
		}
		break;
	case EScriptReloadResult_Retry:
		{
			m_bReloading = false;
			return Reload();
		}
	case EScriptReloadResult_Revert:
		{
			pScriptDomain->Release();
			m_pScriptDomain->SetActive();

			m_bReloading = false;

			m_bDetectedChanges = false;

			return false;
		}
		break;
	case EScriptReloadResult_Abort:
		{
			gEnv->pSystem->Quit();

			m_bReloading = false;
		}
		break;
	}

	return false;
}
Пример #13
0
mono::string CFlowManager::GetPortValueString(CFlowNode *pFlowNode, int index)
{
    return (mono::string)ToMonoString(pFlowNode->GetPortString(index));
}
Пример #14
0
mono::string CScriptbind_LevelSystem::GetDisplayName(ILevelInfo *pLevelInfo)
{
	return ToMonoString(pLevelInfo->GetDisplayName());
}
Пример #15
0
mono::string CScriptbind_LevelSystem::GetPaks(ILevelInfo *pLevelInfo)
{
	return ToMonoString(pLevelInfo->GetPaks());
}