コード例 #1
0
void CScriptEntity::SetScriptControl(const bool bScriptControl, shared_str caSciptName)
{
	if (!(
		(
			(m_bScriptControl && !bScriptControl) || 
			(!m_bScriptControl && bScriptControl)
		) &&
			(
				bScriptControl || 
				(
					xr_strlen(*m_caScriptName) && 
					!xr_strcmp(caSciptName,m_caScriptName)
				)
			)
		)) {
		ai().script_engine().script_log(eLuaMessageTypeError,"Invalid sequence of taking an entity under script control");
		return;
	}

	if (bScriptControl && !can_script_capture()) return;

	if (bScriptControl && !m_bScriptControl)
		object().add_visual_callback			(&ActionCallback);
	else
		if (!bScriptControl && m_bScriptControl)
			object().remove_visual_callback		(&ActionCallback);

	m_bScriptControl	= bScriptControl;
	m_caScriptName		= caSciptName;
/* 
#ifdef DEBUG
	if (bScriptControl)
		ai().script_engine().script_log			(ScriptStorage::eLuaMessageTypeInfo,"Script %s set object %s under its control",*caSciptName,*object().cName());
	else
		ai().script_engine().script_log			(ScriptStorage::eLuaMessageTypeInfo,"Script %s freed object %s from its control",*caSciptName,*object().cName());
#endif
*/
	if (!bScriptControl)
		ResetScriptData(this);
}
コード例 #2
0
ファイル: script_entity.cpp プロジェクト: vasilenkomike/xray
void CScriptEntity::reinit()
{
    ResetScriptData			();

    set_script_capture		();
}
コード例 #3
0
ファイル: script_entity.cpp プロジェクト: vasilenkomike/xray
void CScriptEntity::init()
{
    m_current_sound						= 0;
    ResetScriptData						();
}
コード例 #4
0
ファイル: script_entity.cpp プロジェクト: vasilenkomike/xray
CScriptEntity::~CScriptEntity()
{
    ResetScriptData						();
}
コード例 #5
0
ファイル: script_entity.cpp プロジェクト: vasilenkomike/xray
void CScriptEntity::ProcessScripts()
{
    CScriptEntityAction	*l_tpEntityAction = 0;
#ifdef DEBUG
    bool			empty_queue = m_tpActionQueue.empty();
#endif
    while (!m_tpActionQueue.empty()) {
        l_tpEntityAction= m_tpActionQueue.front();
        VERIFY		(l_tpEntityAction);
#ifdef _DEBUG
//		if (!xr_strcmp("m_stalker_wounded",*object().cName()))
//			Msg			("%6d Processing action : %s",Device.dwTimeGlobal,*l_tpEntityAction->m_tAnimationAction.m_caAnimationToPlay);
#endif

        if (m_tpCurrentEntityAction != l_tpEntityAction)
            l_tpEntityAction->initialize	();

        m_tpCurrentEntityAction	= l_tpEntityAction;

        if (!l_tpEntityAction->CheckIfActionCompleted())
            break;

#ifdef _DEBUG
//		if (!xr_strcmp("m_stalker_wounded",*object().cName()))
//			Msg			("%6d Action completed : %s",Device.dwTimeGlobal,*l_tpEntityAction->m_tAnimationAction.m_caAnimationToPlay);
#endif

        vfFinishAction(l_tpEntityAction);

#ifdef DEBUG
        if (psAI_Flags.is(aiLua))
            Msg("Entity Action removed!!!");
#endif
        if (true /*psAI_Flags.is(aiLua)*/ )
        {
            object().callback(GameObject::eActionTypeRemoved)(object().lua_game_object(),u32(eActionTypeRemoved));
        }

        xr_delete	(l_tpEntityAction);
        m_tpActionQueue.erase(m_tpActionQueue.begin());
    }

    if (m_tpActionQueue.empty()) {
#ifdef DEBUG
        if (empty_queue)
            ai().script_engine().script_log	(ScriptStorage::eLuaMessageTypeInfo,"Object %s has an empty script queue!",*object().cName());
#endif
        return;
    }

    try {
        bool			l_bCompleted;
        l_bCompleted	= l_tpEntityAction->m_tWatchAction.m_bCompleted;
        bfAssignWatch	(l_tpEntityAction);
        if (l_tpEntityAction->m_tWatchAction.m_bCompleted && !l_bCompleted)
            object().callback(GameObject::eActionTypeWatch)(object().lua_game_object(),u32(eActionTypeWatch));

        l_bCompleted	= l_tpEntityAction->m_tAnimationAction.m_bCompleted;
        bfAssignAnimation(l_tpEntityAction);

        l_bCompleted	= l_tpEntityAction->m_tSoundAction.m_bCompleted;
        bfAssignSound	(l_tpEntityAction);
        if (l_tpEntityAction->m_tSoundAction.m_bCompleted && !l_bCompleted)
            object().callback(GameObject::eActionTypeSound)(object().lua_game_object(),u32(eActionTypeSound));


        l_bCompleted	= l_tpEntityAction->m_tParticleAction.m_bCompleted;
        bfAssignParticles(l_tpEntityAction);
        if (l_tpEntityAction->m_tParticleAction.m_bCompleted && !l_bCompleted)
            object().callback(GameObject::eActionTypeParticle)(object().lua_game_object(),u32(eActionTypeParticle));

        l_bCompleted	= l_tpEntityAction->m_tObjectAction.m_bCompleted;
        bfAssignObject	(l_tpEntityAction);
        if (l_tpEntityAction->m_tObjectAction.m_bCompleted && !l_bCompleted)
            object().callback(GameObject::eActionTypeObject)(object().lua_game_object(),u32(eActionTypeObject));

        l_bCompleted	= l_tpEntityAction->m_tMovementAction.m_bCompleted;
        bfAssignMovement(l_tpEntityAction);
        if (l_tpEntityAction->m_tMovementAction.m_bCompleted && !l_bCompleted)
            object().callback(GameObject::eActionTypeMovement)(object().lua_game_object(),u32(eActionTypeMovement), -1);

        // ”становить выбранную анимацию
        if (!l_tpEntityAction->m_tAnimationAction.m_bCompleted)
            bfScriptAnimation	();

        bfAssignMonsterAction(l_tpEntityAction);
    }
    catch(...) {
        ResetScriptData		();
    }
}