Example #1
0
    ///游戏过程中切换场景
    public void ChangeScene(short idTargetScene, short nSceneResID, ref fVector2 fvPos, int nDirection, byte bFlag)
    {
        if (GameProcedure.GetActiveProcedure() != GameProcedure.s_ProcMain)
        {
            //TDThrow("Must change scene at MAIN procedure");
            return;
        }

        //发送请求消息
        CGAskChangeScene msg = (CGAskChangeScene)NetManager.GetNetManager().CreatePacket((int)PACKET_DEFINE.PACKET_CG_ASKCHANGESCENE);

        msg.SourSceneID = GetActiveSceneID();
        msg.DestSceneID = idTargetScene;

        NetManager.GetNetManager().SendPacket(msg);


        //目标场景名
        //DBC_DEFINEHANDLE(s_pSceneDBC, DBC_SCENE_DEFINE);
        //const _DBC_SCENE_DEFINE* pSceneDef =
        //    (const _DBC_SCENE_DEFINE*)s_pSceneDBC->Search_First_Column_Equ(
        //    _DBC_SCENE_DEFINE::SCENE_SERVER_ID_COLUMN, nSceneResID);

        ////通知UI,关闭相应窗口
        //CGameProcedure::s_pEventSystem->PushEvent(GE_PLAYER_LEAVE_WORLD,
        //    pSceneDef ? pSceneDef->szName : "");

        _DBC_SCENE_DEFINE pSceneDef = m_SceneDBC.Search_Index_EQU(nSceneResID);

        CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_PLAYER_LEAVE_WORLD, pSceneDef != null ? pSceneDef.szName : "");

        //---
        //保存状态
        m_idNextScene = idTargetScene;
        m_fvNextPos   = fvPos;
        //	m_fNextDir = (FLOAT)((nDirection%36)*2.0f*TDU_PI/36.0f);
        //  INT idDefaultSkill = CActionSystem::GetMe()->GetDefaultAction() ? CActionSystem::GetMe()->GetDefaultAction()->GetDefineID() : 0;
        //
        //  CGameProcedure::s_pVariableSystem->SetAs_Int("DefaultSkill",idDefaultSkill);
        //	CActionSystem::GetMe()->SaveAction();


        m_Station = bFlag == 1 ? WORLD_STATION.WS_RELIVE : WORLD_STATION.WS_ASK_CHANGE_SCANE;
    }
Example #2
0
 public CScene(_DBC_SCENE_DEFINE pSceneDef, LoadScene loadBehaviour)
 {
     m_pTheDefine        = pSceneDef;
     mLoadSceneBehaviour = loadBehaviour;
 }
Example #3
0
    /**
     *  进入某场景
     *  \param nSceneID
     *      场景ID/玩家城市id
     *  \param nResID
     *      场景的客户端资源ID
     *
     *  \param nCityLevel
     *      玩家城市等级,如果小于0,表示是普通场景!
     */
    public bool EnterScene(int nSceneID, int nResID, int nCityLevel)
    {
        //LogManager.Log("EnterScene(): int WorldManager");
        //必须在进入场景流程中
        if (GameProcedure.GetActiveProcedure() != GameProcedure.s_ProcEnter)
        {
            LogManager.Log("Must enter scene at ENTER procedure");
            return(false);
        }

        _DBC_SCENE_DEFINE pSceneDef = null;

        //如果是玩家城市
        bool bUserCity = (nCityLevel >= 0);

        if (bUserCity)
        {
            //查找城市场景
            for (int i = 0; i < (int)DBC.COMMON_DBC <_DBC_SCENE_DEFINE> .DataNum; i++)
            {
                _DBC_SCENE_DEFINE pTempSceneDef = SceneDBC.Search_Index_EQU(i);

                //Id和等级相同
                if (pTempSceneDef.nSceneResID == nResID && pTempSceneDef.nCityLevel == nCityLevel)
                {
                    pSceneDef = pTempSceneDef;
                    break;
                }
            }
        }
        else
        {
            //查找场景定义
            pSceneDef = SceneDBC.Search_Index_EQU(nResID);
        }

        if (pSceneDef == null)
        {
            LogManager.LogError("(CWorldManager::EnterScene) Invalid scene ID:" + nResID);
            return(false);
        }

        //首先离开现有的场景
        if (ActiveScene != null)
        {
            //相同的场景
            if (GetActiveSceneID() == nSceneID)
            {
                //LogManager.Log("Enter The Same Scene");
                return(false);
            }

            // 移除寻路轨迹 [9/21/2011 Sun]
            //ClearAllFreeProjTex();

            //删除当前场景
            m_pActiveScene.LeaveScene();

            m_pActiveScene = null;
        }

        m_nActiveSceneID = (short)nSceneID;
        //创建新的场景
        m_pActiveScene = new CScene(pSceneDef, mLoadSceneBehaviour);

        //加载新的场景, 加载静态物体定义
        m_pActiveScene.Initial();

        ////进入场景
        m_pActiveScene.EnterScene();

        m_Station = WORLD_STATION.WS_ENTER;
        ////产生进入场景的事件
        CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_SCENE_TRANSED, ActiveScene.GetSceneDefine().szSceneMap);

        return(true);
    }