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)); }
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)); } }
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(); }
//更新选择框 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(); } }
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; }
CBuffer::size_type CBuffer::UpdateExactLine(const CString& sFormat, const CString& sText) { return UpdateExactLine(CMessage(sFormat, sText)); }
CBuffer::size_type CBuffer::UpdateLine(const CString& sMatch, const CString& sFormat, const CString& sText) { return UpdateLine(CMessage(sMatch).GetCommand(), CMessage(sFormat), sText); }
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; } }
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()); }
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)); }
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()); }