示例#1
0
    public void RequestCharacterPortal(Point3d entryPoint, RoomPortal portal)
    {
        Debug.Log("GameWorldModel:requestCharacterPortal - Entering portal_id="
            +portal.portal_id+" at position ("+ entryPoint.x + ", " + entryPoint.y + ")");

        if (!IsCharacterPortalRequestPending)
        {
            GameData gameData = SessionData.GetInstance().CurrentGameData;
            CharacterEntity entity = GetCharacterEntity(CurrentCharacterID);
            AsyncCharacterPortalRequest characterPortalRequest = null;

            IsCharacterPortalRequestPending = true;

            characterPortalRequest = new AsyncCharacterPortalRequest(m_gameWorldController.gameObject, entity, entryPoint, portal);
            characterPortalRequest.Execute(
                (AsyncCharacterPortalRequest asyncRequest) =>
            {
                IsCharacterPortalRequestPending = false;

                switch (asyncRequest.ResultCode)
                {
                case AsyncCharacterPortalRequest.eResult.success:
                    {
                        Debug.Log("GameWorldModel:requestCharacterPortal - Portal Succeeded!");

                        // Tell anyone listening on IRC that the game state changed
                        m_gameWorldController.SendCharacterUpdatedGameEvent();

                        // Parse any incoming game events
                        if (asyncRequest.ServerResponse != null)
                        {
                            gameData.ParseEventResponse(asyncRequest.ServerResponse);
                        }

                        // If there were new events, notify the controller so that
                        // it can start playing the events back
                        if (!gameData.IsEventCursorAtLastEvent)
                        {
                            m_gameWorldController.OnGameHasNewEvents();
                        }
                    }
                    break;
                case AsyncCharacterPortalRequest.eResult.failed_path:
                case AsyncCharacterPortalRequest.eResult.failed_server_denied:
                    {
                        Debug.LogError("GameWorldModel:requestCharacterPortal - " + asyncRequest.ResultDetails);

                        m_gameWorldController.OnCharacterActionDisallowed(asyncRequest);
                    }
                    break;
                case AsyncCharacterPortalRequest.eResult.failed_server_connection:
                    {
                        Debug.LogError("GameWorldModel:requestCharacterPortal - " + asyncRequest.ResultDetails);

                        m_gameWorldController.OnRequestFailed("Connection Failed!");
                    }
                    break;
                }
            });
        }
    }
    public void RequestCharacterPortal(Point3d entryPoint, RoomPortal portal)
    {
        Debug.Log("GameWorldModel:requestCharacterPortal - Entering portal_id="
                  + portal.portal_id + " at position (" + entryPoint.x + ", " + entryPoint.y + ")");

        if (!IsCharacterPortalRequestPending)
        {
            GameData                    gameData = SessionData.GetInstance().CurrentGameData;
            CharacterEntity             entity   = GetCharacterEntity(CurrentCharacterID);
            AsyncCharacterPortalRequest characterPortalRequest = null;

            IsCharacterPortalRequestPending = true;

            characterPortalRequest = new AsyncCharacterPortalRequest(m_gameWorldController.gameObject, entity, entryPoint, portal);
            characterPortalRequest.Execute(
                (AsyncCharacterPortalRequest asyncRequest) =>
            {
                IsCharacterPortalRequestPending = false;

                switch (asyncRequest.ResultCode)
                {
                case AsyncCharacterPortalRequest.eResult.success:
                    {
                        Debug.Log("GameWorldModel:requestCharacterPortal - Portal Succeeded!");

                        // Tell anyone listening on IRC that the game state changed
                        m_gameWorldController.SendCharacterUpdatedGameEvent();

                        // Parse any incoming game events
                        if (asyncRequest.ServerResponse != null)
                        {
                            gameData.ParseEventResponse(asyncRequest.ServerResponse);
                        }

                        // If there were new events, notify the controller so that
                        // it can start playing the events back
                        if (!gameData.IsEventCursorAtLastEvent)
                        {
                            m_gameWorldController.OnGameHasNewEvents();
                        }
                    }
                    break;

                case AsyncCharacterPortalRequest.eResult.failed_path:
                case AsyncCharacterPortalRequest.eResult.failed_server_denied:
                    {
                        Debug.LogError("GameWorldModel:requestCharacterPortal - " + asyncRequest.ResultDetails);

                        m_gameWorldController.OnCharacterActionDisallowed(asyncRequest);
                    }
                    break;

                case AsyncCharacterPortalRequest.eResult.failed_server_connection:
                    {
                        Debug.LogError("GameWorldModel:requestCharacterPortal - " + asyncRequest.ResultDetails);

                        m_gameWorldController.OnRequestFailed("Connection Failed!");
                    }
                    break;
                }
            });
        }
    }