Пример #1
0
void CGameClear::update_game_over_message()
{
	auto game_over_message = std::make_shared<CMessage>(CMessage(_font)
		.style(STYLE::GameOver)
		.center_message("GAME CLEAR"));
	const sf::Vector2f& game_over_message_pos = game_over_message->get_position();
	const sf::Rect<float> game_over_message_rect = game_over_message->get_global_bounds();


	std::stringstream game_over_ss;
	game_over_ss << "SCORE " << _score;
	auto game_over_score = std::make_shared<CMessage>(CMessage(_font)
		.style(STYLE::GameOverScore)
		.message(game_over_ss.str()));
	game_over_score->set_position(sf::Vector2f(game_over_message_pos.x, game_over_message_pos.y + game_over_message_rect.height + 15/*offset*/));

	const sf::Vector2f& game_over_score_pos = game_over_score->get_position();
	const sf::Rect<float> game_over_score_rect = game_over_score->get_global_bounds();


	std::stringstream game_play_time_ss;
    game_play_time_ss.precision(3);
    game_play_time_ss.setf(std::ios::fixed, std::ios::floatfield);
	game_play_time_ss << "TIME "<<_flight_time;
	auto game_over_play_time = std::make_shared<CMessage>(CMessage(_font)
		.style(STYLE::GameOverScore)
		.message(game_play_time_ss.str()));
	game_over_play_time->set_position(sf::Vector2f(game_over_score_pos.x, game_over_score_pos.y + game_over_score_rect.height + 5 /*offset*/));

	_messages.push_back(std::move(game_over_message));
	_messages.push_back(std::move(game_over_score));
	_messages.push_back(std::move(game_over_play_time));
}
Пример #2
0
void CScoreBoard::update_score_board_message(long long const& my_score, float const& my_flight_time)
{
    nlohmann::json record_board;

    //read scores from file
    std::ifstream record_reader(CBundle::ResourcePath() + "score.json");
    if (record_reader.is_open()) {
        record_board<<record_reader;
        record_reader.close();
    }

    auto score_title = std::make_shared<CMessage>(CMessage(_font)
                                                  .style(STYLE::GameOver)
                                                  .center_message("GAME SCORE"));
    sf::Vector2f pos((screen_size.x/2) - (score_title->get_global_bounds().width / 2),
                     screen_size.y/10);
    score_title->set_position(pos);

    float x = 0;
    float y = score_title->get_global_bounds().top + score_title->get_global_bounds().height + 15/*offset*/;

    _messages.push_back(std::move(score_title));

    for (auto i = record_board.begin(); i != record_board.end(); ++i) {
        std::stringstream score_line;
        long score = i->operator[]("score");
        float time = i->operator[]("play_time");
        score_line<< "Score : "<<std::setfill(' ') << std::setw(5)<<score
        <<" / "
        <<"Time (in Sec) : "<<std::setprecision(3)<<std::setfill(' ') << std::setw(5)<<time;

        auto message = std::make_shared<CMessage>(CMessage(_font)
                                                  .style(STYLE::GameOverScore)
                                                  .center_message(score_line.str()));

		if (score == my_score && time == my_flight_time) {
			message->style(STYLE::GameOverScoreMine);
		}

        const sf::Rect<float> message_rect = message->get_global_bounds();

        x = (x == 0)? (screen_size.x/2) - (message_rect.width / 2): x;
        sf::Vector2f pos(x, y);
        y += message_rect.height + 15 /*offset*/;

        message->set_position(pos);
        _messages.push_back(std::move(message));
    }
}
Пример #3
0
CMessage CMessageLoop::Get_Message()
{
    if(MessageStore)
    {
        First();
        CMessage Temp = *MessageStore->MyMsg;
        if(MessageStore && MessageStore->Next)
        {
            MessageStore = MessageStore->Next;
            delete MessageStore->Prev->MyMsg;
            MessageStore->Prev->MyMsg = 0;
            delete MessageStore->Prev;
            MessageStore->Prev = 0;
        }
        else if(MessageStore && MessageStore->Next == 0 && MessageStore->Prev == 0)
        {
            delete MessageStore->MyMsg;
            MessageStore->MyMsg = 0;
            delete MessageStore;
            MessageStore = 0;
        }
        return Temp;
    }
    return CMessage();
}
Пример #4
0
//更新选择框
void CChoosePanel::Update(float dt)
{
	static int nLastId = 0;

	if (m_pAnimBackInfo->IsPlaying())
	{
		m_pAnimBackInfo->Update(dt);

		if (!m_pAnimBackInfo->IsPlaying())
		{
			if (m_bStartAnim)
			{
				m_pAnimBackInfo->SetMode(HGEANIM_REV);
			}
			else
			{
				m_pAnimBackInfo->SetMode(HGEANIM_FWD);

				__ClearItem();
				
				SetVisible(false);
			}
			m_bStartAnim = !m_bStartAnim;
		}
	}
	
	int nId=m_pGui->Update(dt);
	if (nId == -1)
	{
		//关闭选择状态
		__SetChoosing(false);
		//向顶层通告选择结果
		_SendMsg(CMessage(DEMO_MSG::MSG_CHOOSE_RESULT, nLastId));
		//开启关闭动画
		m_pAnimBackInfo->Play();
	}
	else if(nId)
	{ 
		nLastId = nId;

		m_pGui->Leave(); 
	}
}
Пример #5
0
bool CScript::RunCommand(char* strCmd)
{
	std::string strCmdName = GetCommandName(strCmd);
	int i;

	for(i=0; i<m_nCommandNum; i++)
	{
		if (stricmp(strCmdName.c_str(),m_Commands[i].m_strCmdName.c_str()) == 0)
			break;
	}
	//若未在命令名称列表中找到对应的命令,直接返回false
	if(i == m_nCommandNum)
		return false;

	switch(m_Commands[i].m_nId)
	{
	case DEMO::CMD_RETURN:
		{
			
		}
		break;
		//移动玩家角色和NPC
	case DEMO::CMD_MOVE_PLAYER_TO:        //MovePlayerTo("PlayerName",x,y)
	case DEMO::CMD_MOVE_NPC_TO:            //MoveNpcTo("NpcName",x,y)
		{
			std::string name = GetStringParam(strCmd, 0);
			int p1 = GetIntParam(strCmd, 1);
			int p2 = GetIntParam(strCmd, 2);

			CMessage msg(DEMO_MSG::MSG_SET_OBJECT_MOVE, 0, Int2To1(p1,p2), &name);
			_SendMsg(msg);

		}
		break;
		//设置玩家角色和NPC朝向
	case DEMO::CMD_SET_PLAYER_DIR:         //SetPlayerDir("name","left/right/up/down/left_up/left_down/right_up/right_down")
	case DEMO::CMD_SET_NPC_DIR:            //SetNpcDir("name","left...")
		{
			std::string name = GetStringParam(strCmd, 0);
			std::string dir = GetStringParam(strCmd, 1);

			size_t nDir = StrToDirection(dir.c_str());

			CMessage msg(DEMO_MSG::MSG_SET_OBJECT_DIR, nDir, 0, &name);
			_SendMsg(msg);
		}
		break;
		//设置是否显示玩家角色和NPC,0不显示,1显示
	case DEMO::CMD_SET_PLAYER_SHOW:         //SetPlayerShow("name",0/1)
	case DEMO::CMD_SET_NPC_SHOW:          //SetNpcShow("name",0/1)
		{
			std::string name = GetStringParam(strCmd, 0);
			int p1 = GetIntParam(strCmd, 1);

			CMessage msg(DEMO_MSG::MSG_SET_OBJECT_SHOW, p1, 0, &name);
			_SendMsg(msg);
		}
		break;
		//设置指定玩家和NPC的坐标(x,y)
	case DEMO::CMD_SET_NPC_POS:            //SetNpcPos("NpcName",x,y)
	case DEMO::CMD_SET_PLAYER_POS:
		{
			std::string name = GetStringParam(strCmd, 0);
			int p1 = GetIntParam(strCmd, 1);
			int p2 = GetIntParam(strCmd, 2);
			
			CMessage msg(DEMO_MSG::MSG_SET_OBJECT_POS, Int2To1(p1,p2), 0, &name);
			_SendMsg(msg);
		}
		break;
		//根据名称设置当前玩家角色
	case DEMO::CMD_SET_CURRENT_PLAYER:
		{
			std::string name = GetStringParam(strCmd, 0);

			CMessage msg(DEMO_MSG::MSG_SET_CURRENT_PLAYER, 0, 0, &name);
			_SendMsg(msg);
		}
		break;
		//设置当前镜头左上角的世界坐标
	case DEMO::CMD_SET_CAMERA_TO:          //SetCameraTo(x,y)
		{
			int p1 = GetIntParam(strCmd, 0);
			int p2 = GetIntParam(strCmd, 1);

			_SendMsg(CMessage(DEMO_MSG::MSG_SET_CAMERA_TO, p1, p2));
//			cout << "(" << p1 << ", " << p2 << ")";
		}
		break;
		//对话命令
	case DEMO::CMD_SAY:                   //Say("content","PicPath")
		{
			std::string strContent = GetStringParam(strCmd, 0);
			std::string strName = GetStringParam(strCmd, 1);

			CMessage msg(DEMO_MSG::MSG_SAY, 0, 0, &strContent, &strName);
			_SendMsg(msg);
		}
		break;
	case DEMO::CMD_DELAY:                  //Delay(time)
		{
			int p1 = GetIntParam(strCmd, 0);

//			cout << "(" << p1 << ")";
		}
		break;
		//将地图镜头从当前移动到目的坐标(x,y)
	case DEMO::CMD_SCROLL_MAP_TO:          //ScrollMapTo(x,y)
		{
			int p1 = GetIntParam(strCmd, 0);
			int p2 = GetIntParam(strCmd, 1);

			_SendMsg(CMessage(DEMO_MSG::MSG_SCROLL_MAP, Int2To1(p1, p2)));
//			cout << "(" << p1 << ", " << p2 << ")";
		}
		break;
		//载入并切换到对应地图
	case DEMO::CMD_LOAD_MAP:               //LoadMap("MapPath")
		{
			std::string strMapPath = GetStringParam(strCmd, 0);

			_SendMsg(CMessage(DEMO_MSG::MSG_LOAD_MAP, 0, 0, &strMapPath));
//			cout << "(\"" << strMapPath << "\")";
		}
		break;

	case DEMO::CMD_SAVE_MAP:                //SaveMap("MapPath")
		{
			std::string strMapPath = GetStringParam(strCmd, 0);

//			cout << "(\"" << strMapPath << "\")";
		}
		break;
		//输出系统消息
	case DEMO::CMD_GAME_MESSAGE:            //GameMessage("content")
		{
			std::string strContent = GetStringParam(strCmd, 0);

			CMessage msg(DEMO_MSG::MSG_SHOW_GAME_MSG, 0, 0, &strContent);
			_SendMsg(msg);
//			cout << "(\"" << strContent << "\")";
		}
		break;
		//播放游戏音乐
	case DEMO::CMD_PLAY_MUSIC:              //PlaySound("MusicPath",0/1)
	case DEMO::CMD_PLAY_EFFECT:
		{
			std::string strMusicName = GetStringParam(strCmd, 0);
			int p1 = GetIntParam(strCmd, 1);

			CMessage msg(DEMO_MSG::MSG_PLAY_SOUND, p1, 0, &strMusicName);
			_SendMsg(msg);
//			cout << "(\"" << strMusicName << "\")";
		}
		break;
		//暂停游戏音乐
	case DEMO::CMD_STOP_MUSIC:             //StopSound()
		{
			std::string strMusicName = GetStringParam(strCmd, 0);

			CMessage msg(DEMO_MSG::MSG_STOP_MUSIC, 0, 0, &strMusicName);
			_SendMsg(msg);
		}
		//暂停游戏音乐
	case DEMO::CMD_STOP_EFFECT:            //StopEffect()
		{
			std::string strMusicName = GetStringParam(strCmd, 0);

			CMessage msg(DEMO_MSG::MSG_STOP_EFFECT, 0, 0, &strMusicName);
			_SendMsg(msg);
		}
		break;
		//设置游戏砖块对应属性的值
	case DEMO::CMD_SET_MAP_TILE:           //SetMapTile(x,y,"iTrap/tTrap/level/isBlock",value)
		{
			int x = GetIntParam(strCmd, 0);
			int y = GetIntParam(strCmd, 1);
			std::string strType = GetStringParam(strCmd, 2);
			int value = GetIntParam(strCmd, 3);

			_SendMsg(CMessage(DEMO_MSG::MSG_SET_MAP_TILE, Int2To1(x,y), value, &strType));
		}
		break;
		//锁定当前屏幕,1锁定,0解除锁定
	case DEMO::CMD_LOCK_SCREEN:             //LockScreen(0/1)
		{
			int p1 = GetIntParam(strCmd, 0);

			_SendMsg(CMessage(DEMO_MSG::MSG_LOCK_SCREEN, p1));
		}
		break;
		//开启选择框
	case DEMO::CMD_OPEN_CHOOSE_PANEL:
		{
			std::string strTitle = GetStringParam(strCmd, 0);
			int p1 = GetIntParam(strCmd, 1);

			_SendMsg(CMessage(DEMO_MSG::MSG_OPEN_CHOOSE_PANEL, p1, 0, &strTitle));
		}
		break;
		//设置选择框中的选项
	case DEMO::CMD_SET_CHOOSE_ITEM:
		{
			std::string strTitle = GetStringParam(strCmd, 0);
			int p1 = GetIntParam(strCmd, 1);

			_SendMsg(CMessage(DEMO_MSG::MSG_SET_CHOOSE_ITEM, p1, 0, &strTitle));
		}
		break;
		//暂停音乐
	case DEMO::CMD_PAUSE_MUSIC:
		{
			std::string strMusicName = GetStringParam(strCmd, 0);

			_SendMsg(CMessage(DEMO_MSG::MSG_PAUSE_MUSIC, 0, 0, &strMusicName));
		}
		break;
		//从暂停点,恢复播放音乐
	case DEMO::CMD_RESUME_MUSIC:
		{
			std::string strMusicName = GetStringParam(strCmd, 0);

			_SendMsg(CMessage(DEMO_MSG::MSG_RESUME_MUSIC, 0, 0, &strMusicName));
		}
		break;
		//设置音乐播放音量
	case DEMO::CMD_SET_MUSIC_VOLUME:
		{
			std::string strMusicName = GetStringParam(strCmd, 0);
			int p1 = GetIntParam(strCmd, 1);

			_SendMsg(CMessage(DEMO_MSG::MSG_SET_MUSIC_VOLUME, p1, 0, &strMusicName));
		}
		break;
		//将NPC恢复到其站立的上一个位置
	case DEMO::CMD_RECOVER_OBJ_POS:
		{
			std::string strObjName = GetStringParam(strCmd, 0);

			_SendMsg(CMessage(DEMO_MSG::MSG_RECOVER_OBJ_POS, 0, 0, &strObjName));
		}
		break;

	default:

		break;
	}

//	cout << endl; 

	return true;
}
Пример #6
0
CBuffer::size_type CBuffer::UpdateExactLine(const CString& sFormat,
                                            const CString& sText) {
    return UpdateExactLine(CMessage(sFormat, sText));
}
Пример #7
0
CBuffer::size_type CBuffer::UpdateLine(const CString& sMatch,
                                       const CString& sFormat,
                                       const CString& sText) {
    return UpdateLine(CMessage(sMatch).GetCommand(), CMessage(sFormat), sText);
}
Пример #8
0
void CGameMap::ReceiveMsg(CMessage msg)
{
    vector<Point>* paths = (vector<Point>* )(msg.p3);
//	paths->clear();
    Point start,goal;

    Point centerPos;

    Point* pPos;

    switch(msg.type)
    {
    //消息类型为寻路
    case DEMO_MSG::MSG_FIND_PATH:
        start.x = (msg.p1 & 0xFFFF0000) >> 16;
        start.y = (msg.p1 & 0x0000FFFF);

        goal.x = ((msg.p2 & 0xFFFF0000) >> 16);
        goal.y = (msg.p2 & 0x0000FFFF);

        FindPath(start, goal, paths, m_pAstar);
        break;
    //消息类型为地图移动
    case DEMO_MSG::MSG_CAMERA_MOVE:
        centerPos.x = msg.p1;
        centerPos.y = msg.p2;

        __AdjustCurrentXY(centerPos);

        break;
    //获取当前屏幕左上角的世界坐标
    case DEMO_MSG::MSG_GET_WORLD_XY:
        pPos = (Point*)msg.p3;

        pPos->x = m_CurrentXY.x;
        pPos->y = m_CurrentXY.y;
        break;
    //更新NPC的矩形区域
    case DEMO_MSG::MSG_UPDATE_OBJECT_RECT:
    {
        Point p1 = Int1TO2(msg.p1);
        Point p2 = Int1TO2(msg.p2);

        Rect rect(p1.x, p1.y , p2.x, p2.y);
        std::string* npcName = (std::string* )msg.p3;

        m_pRectList->UpdateNpcRect(const_cast<char* >(npcName->c_str()), rect);
    }
    break;
    //鼠标与NPC的交叉检测
    case DEMO_MSG::MSG_UPDATE_CURSOR:
    {
        Point cursorPos;
        cursorPos.x = msg.p1 / 1000.0;
        cursorPos.y = msg.p2 / 1000.0;

        //CRectList::TRectLists rectLists = m_pRectList->GetVisualRect(m_CurrentXY);

        bool* bUpdate = (bool*)msg.p3;
        std::string* strObjName = (std::string*)msg.p4;

        cursorPos.x += m_CurrentXY.x * DEMO::TILE_SIZE;
        cursorPos.y += m_CurrentXY.y * DEMO::TILE_SIZE;

        *bUpdate = m_pRectList->GetNpcUnderCursor(m_CurrentXY, cursorPos, strObjName);//__UpdateCursor(cursorPoint, rectLists, strObjName);
    }
    break;
    //移动游戏屏幕
    case DEMO_MSG::MSG_SCROLL_MAP:
    {
        if (__IsValidCameraPos(Int1TO2(msg.p1)))
            MoveTo(Int1TO2(msg.p1));
    }
    break;
    //锁定屏幕
    case DEMO_MSG::MSG_LOCK_SCREEN:
    {
        bool bLocked = (msg.p1 == 0) ? false : true;

        SetLockScreen(bLocked);
    }
    break;
    //检测玩家是否处于自动触发事件的触发点
    case DEMO_MSG::MSG_PLAYER_POS_TO_MAP:
    {
        Point playerPos = Int1TO2(msg.p1);

        int nEventType = m_MapData->GetTileAttr(playerPos.y, playerPos.x, DEMO::TILE_ATTR_TTRAP);
        int nEventId = m_MapData->GetTileAttr(playerPos.y, playerPos.x, DEMO::TILE_ATTR_ITRAP);

        if (nEventId > 0)
        {
            switch (nEventType)
            {
            case DEMO::TRAP_TYPE_VIRTUAL_STORY_EVENT:
                _SendMsg(CMessage(DEMO_MSG::MSG_CHECK_VIRTUAL_EVENT, nEventId));
                break;

            case DEMO::TRAP_TYPE_SCENE_CHANGE:
                _SendMsg(CMessage(DEMO_MSG::MSG_SCENE_CHANGE, nEventId));
                break;

            default:
                break;
            }
        }
    }
    break;
    //设置屏幕左上角的世界坐标
    case DEMO_MSG::MSG_SET_CAMERA_TO:
    {
        if (__IsValidCameraPos(Point(static_cast<float>(msg.p1), static_cast<float>(msg.p2))))
            SetCurrentXY(static_cast<float>(msg.p1), static_cast<float>(msg.p2));
    }
    break;
    //更新RectList中的NPC是否显示
    case DEMO_MSG::MSG_UPDATE_NPC_SHOW:
    {
        std::string* strNpcName = (std::string*)msg.p3;
        bool bIsShow = (msg.p1 == 0) ? false : true;

        m_pRectList->UpdateNpcShow(const_cast<char* >(strNpcName->c_str()), bIsShow);
    }
    break;
    //添加当前地图的常驻NPC
    case DEMO_MSG::MSG_ADD_MAP_NPC_NAME:
    {
        std::string* strNpcName = (std::string*)msg.p3;

        AddShowNpc(*strNpcName);
    }
    break;
    //获取地图常驻NPC列表
    case DEMO_MSG::MSG_GET_MAP_NPC_NAMES:
    {
        TNpcNameList* nameList = (TNpcNameList*)msg.p3;
        nameList->assign(m_NpcNameList.begin(), m_NpcNameList.end());

        /*for (TNpcNameList::iterator iter = m_NpcNameList.begin(); iter != m_NpcNameList.end(); iter++)
        {
        	nameList->push_back()
        }*/
    }
    break;
    //设置地图砖块对应属性的值
    case DEMO_MSG::MSG_SET_MAP_TILE:
    {
        Point pos = Int1TO2(msg.p1);
        std::string* strType = (std::string* )msg.p3;
        int value = msg.p2;

        std::transform(strType->begin(), strType->end(), strType->begin(), tolower);

        if (*strType == "itrap")
        {
            m_MapData->SetTileAttr(pos.y, pos.x, DEMO::TILE_ATTR_ITRAP, value);
        }
        else if (*strType == "ttrap")
        {
            m_MapData->SetTileAttr(pos.y, pos.x, DEMO::TILE_ATTR_TTRAP, value);
        }
        else if (*strType == "level")
        {
            m_MapData->SetTileAttr(pos.y, pos.x, DEMO::TILE_ATTR_LEVEL, value);
        }
        else if (*strType == "isblock")
        {
            m_MapData->SetTileAttr(pos.y, pos.x, DEMO::TILE_ATTR_ISBLOCKED, value);
        }
    }
    break;
    //删除NPC矩形区域
    case DEMO_MSG::MSG_DELETE_OBJ_RECT:
    {
        std::string* strName = (std::string* )msg.p3;
        m_pRectList->DeleteNpcRect(const_cast<char* >(strName->c_str()));
    }
    break;

    default:
        break;
    }
}
Пример #9
0
TEST(MessageTest, ToString) {
	EXPECT_EQ("CMD", CMessage("CMD").ToString());
	EXPECT_EQ("CMD p1", CMessage("CMD p1").ToString());
	EXPECT_EQ("CMD p1 p2", CMessage("CMD p1 p2").ToString());
	EXPECT_EQ("CMD :p p p", CMessage("CMD :p p p").ToString());
	EXPECT_EQ(":irc.znc.in", CMessage(":irc.znc.in").ToString());
	EXPECT_EQ(":irc.znc.in CMD", CMessage(":irc.znc.in CMD").ToString());
	EXPECT_EQ(":irc.znc.in CMD p1", CMessage(":irc.znc.in CMD p1").ToString());
	EXPECT_EQ(":irc.znc.in CMD p1 p2", CMessage(":irc.znc.in CMD p1 p2").ToString());
	EXPECT_EQ(":irc.znc.in CMD :p p p", CMessage(":irc.znc.in CMD :p p p").ToString());
	EXPECT_EQ(":irc.znc.in CMD :", CMessage(":irc.znc.in CMD :").ToString());

	EXPECT_EQ("CMD", CMessage(CNick(), "CMD").ToString());
	EXPECT_EQ("CMD p1", CMessage(CNick(), "CMD", {"p1"}).ToString());
	EXPECT_EQ("CMD p1 p2", CMessage(CNick(), "CMD", {"p1", "p2"}).ToString());
	EXPECT_EQ("CMD :p p p", CMessage(CNick(), "CMD", {"p p p"}).ToString());
	EXPECT_EQ(":irc.znc.in", CMessage(CNick(":irc.znc.in"), "").ToString());
	EXPECT_EQ(":irc.znc.in CMD", CMessage(CNick(":irc.znc.in"), "CMD").ToString());
	EXPECT_EQ(":irc.znc.in CMD p1", CMessage(CNick(":irc.znc.in"), "CMD", {"p1"}).ToString());
	EXPECT_EQ(":irc.znc.in CMD p1 p2", CMessage(CNick(":irc.znc.in"), "CMD", {"p1", "p2"}).ToString());
	EXPECT_EQ(":irc.znc.in CMD :p p p", CMessage(CNick(":irc.znc.in"), "CMD", {"p p p"}).ToString());
	EXPECT_EQ(":irc.znc.in CMD :", CMessage(CNick(":irc.znc.in"), "CMD", {""}).ToString());

	// #1045 - retain the colon if it was there
	EXPECT_EQ(":services. 328 user #chan http://znc.in", CMessage(":services. 328 user #chan http://znc.in").ToString());
	EXPECT_EQ(":services. 328 user #chan :http://znc.in", CMessage(":services. 328 user #chan :http://znc.in").ToString());
}
Пример #10
0
TEST(MessageTest, GetParams) {
	EXPECT_EQ("", CMessage("CMD").GetParams(0));
	EXPECT_EQ("", CMessage("CMD").GetParams(1));
	EXPECT_EQ("", CMessage("CMD").GetParams(-1));

	EXPECT_EQ("", CMessage("CMD").GetParams(0, 0));
	EXPECT_EQ("", CMessage("CMD").GetParams(1, 0));
	EXPECT_EQ("", CMessage("CMD").GetParams(-1, 0));

	EXPECT_EQ("", CMessage("CMD").GetParams(0, 1));
	EXPECT_EQ("", CMessage("CMD").GetParams(1, 1));
	EXPECT_EQ("", CMessage("CMD").GetParams(-1, 1));

	EXPECT_EQ("", CMessage("CMD").GetParams(0, 10));
	EXPECT_EQ("", CMessage("CMD").GetParams(1, 10));
	EXPECT_EQ("", CMessage("CMD").GetParams(-1, 10));

	EXPECT_EQ("p1 :p2 p3", CMessage("CMD p1 :p2 p3").GetParams(0));
	EXPECT_EQ(":p2 p3", CMessage("CMD p1 :p2 p3").GetParams(1));
	EXPECT_EQ("", CMessage("CMD p1 :p2 p3").GetParams(-1));

	EXPECT_EQ("", CMessage("CMD p1 :p2 p3").GetParams(0, 0));
	EXPECT_EQ("", CMessage("CMD p1 :p2 p3").GetParams(1, 0));
	EXPECT_EQ("", CMessage("CMD p1 :p2 p3").GetParams(-1, 0));

	EXPECT_EQ("p1", CMessage("CMD p1 :p2 p3").GetParams(0, 1));
	EXPECT_EQ(":p2 p3", CMessage("CMD p1 :p2 p3").GetParams(1, 1));
	EXPECT_EQ("", CMessage("CMD p1 :p2 p3").GetParams(-1, 1));

	EXPECT_EQ("p1 :p2 p3", CMessage("CMD p1 :p2 p3").GetParams(0, 10));
	EXPECT_EQ(":p2 p3", CMessage("CMD p1 :p2 p3").GetParams(1, 10));
	EXPECT_EQ("", CMessage("CMD p1 :p2 p3").GetParams(-1, 10));
}
Пример #11
0
TEST(MessageTest, Type) {
	EXPECT_EQ(CMessage::Type::Unknown, CMessage("FOO").GetType());
	EXPECT_EQ(CMessage::Type::Account, CMessage("ACCOUNT").GetType());
	EXPECT_EQ(CMessage::Type::Away, CMessage("AWAY").GetType());
	EXPECT_EQ(CMessage::Type::Capability, CMessage("CAP").GetType());
	EXPECT_EQ(CMessage::Type::Error, CMessage("ERROR").GetType());
	EXPECT_EQ(CMessage::Type::Invite, CMessage("INVITE").GetType());
	EXPECT_EQ(CMessage::Type::Join, CMessage("JOIN").GetType());
	EXPECT_EQ(CMessage::Type::Kick, CMessage("KICK").GetType());
	EXPECT_EQ(CMessage::Type::Mode, CMessage("MODE").GetType());
	EXPECT_EQ(CMessage::Type::Nick, CMessage("NICK").GetType());
	EXPECT_EQ(CMessage::Type::Notice, CMessage("NOTICE").GetType());
	EXPECT_EQ(CMessage::Type::Numeric, CMessage("123").GetType());
	EXPECT_EQ(CMessage::Type::Part, CMessage("PART").GetType());
	EXPECT_EQ(CMessage::Type::Ping, CMessage("PING").GetType());
	EXPECT_EQ(CMessage::Type::Pong, CMessage("PONG").GetType());
	EXPECT_EQ(CMessage::Type::Quit, CMessage("QUIT").GetType());
	EXPECT_EQ(CMessage::Type::Text, CMessage("PRIVMSG").GetType());
	EXPECT_EQ(CMessage::Type::Topic, CMessage("TOPIC").GetType());
	EXPECT_EQ(CMessage::Type::Wallops, CMessage("WALLOPS").GetType());

	CMessage msg;
	EXPECT_EQ(CMessage::Type::Unknown, msg.GetType());

	msg.SetCommand("PRIVMSG");
	EXPECT_EQ(CMessage::Type::Text, msg.GetType());

	msg.SetParams({"target", "\001ACTION foo\001"});
	EXPECT_EQ(CMessage::Type::Action, msg.GetType());

	msg.SetParam(1, "\001foo\001");
	EXPECT_EQ(CMessage::Type::CTCP, msg.GetType());

	msg.SetCommand("NOTICE");
	EXPECT_EQ(CMessage::Type::CTCP, msg.GetType());

	msg.SetParam(1, "foo");
	EXPECT_EQ(CMessage::Type::Notice, msg.GetType());
}