Scene* SGSkirmishInfo::createScene(std::string& content) { Scene* scene = Scene::create(); SGSkirmishInfo* info_layer = SGSkirmishInfo::create(); Size win_size = Director::getInstance()->getVisibleSize(); RenderTexture* render_texture = RenderTexture::create(win_size.width, win_size.height); render_texture->begin(); Director::getInstance()->getRunningScene()->visit(); render_texture->end(); render_texture->setPosition(Vec2(win_size.width/2, win_size.height/2)); info_layer->addChild(render_texture); // step 1: create the dialog window backgound texture; Sprite* dialog_win = Sprite::create(DIALOG_WINDOW_BACKGROUND); Size dialog_size(win_size.width * 0.25f, win_size.height * 0.25f); dialog_win->setTextureRect(Rect(0, 0, dialog_size.width, dialog_size.height)); Texture2D::TexParams params = { GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT }; dialog_win->getTexture()->setTexParameters(params); dialog_win->setAnchorPoint(Vec2(0.5f, 0.5f)); dialog_win->setPosition(Vec2(win_size.width/2, win_size.height/2)); // step2: show the info content: std::string chinese_content; rapidjson::Document info_json; std::string res_json_file = FileUtils::getInstance()->fullPathForFilename(INFO_TEXT_JSON_FILE); std::string json_data = FileUtils::getInstance()->getStringFromFile(res_json_file.c_str()); info_json.Parse<rapidjson::kParseDefaultFlags>(json_data.c_str()); if (info_json.HasParseError()) { log("Parsing info_json resource json file error!! %s", info_json.GetParseError()); return NULL; } else if (info_json.IsObject()) { const rapidjson::Value &res_list = info_json["Info"]; if (res_list.IsArray()) { for (int i = 0; i < res_list.Size(); i++) { const rapidjson::Value &val = res_list[i]; if (content == val["name"].GetString()) { chinese_content = val["text"].GetString(); break; } } } } LabelTTF* content_ttf = LabelTTF::create(chinese_content, TEXT_FONT_NAME, TEXT_FONT_SIZE); content_ttf->setHorizontalAlignment(TextHAlignment::LEFT); content_ttf->setColor(Color3B::BLACK); content_ttf->setAnchorPoint(Vec2(0.0f, 1.0f)); content_ttf->setPosition(Vec2(40.0f, dialog_win->getContentSize().height - 20.0f)); dialog_win->addChild(content_ttf); info_layer->addChild(dialog_win); scene->addChild(info_layer); return scene; }
bool SGSControlPanel::init() { if (!Sprite::initWithFile(DIALOG_WINDOW_BACKGROUND)) { return false; } Size win_size = Director::getInstance()->getVisibleSize(); Size dialog_size(win_size.height/3, win_size.height/3); setTextureRect(Rect(0, 0, dialog_size.width, dialog_size.height)); Texture2D::TexParams params = { GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT }; getTexture()->setTexParameters(params); setAnchorPoint(Vec2::ANCHOR_BOTTOM_RIGHT); setPosition(Vec2(win_size.width, win_size.height/3)); return true; }
/* ********************************** @ Implemented by Daniel Santos @ Note: * ***********************************/ void Universe::Universe::setUpTextAndDialog() { sf::Vector2f dialog_size(600, 150); sf::Vector2f dialog_pos(window_.getSize().x-dialog_size.x, window_.getSize().y-dialog_size.y); dialogBox_.setSize(dialog_size); dialogBox_.setPosition(dialog_pos); dialogBox_.setFillColor(sf::Color(255, 255, 255, 150)); fontTime_.loadFromFile("res/fonts.otf"); textTime_.setFont(fontTime_); textTime_.setString("0"); dialogText_.setFont(fontTime_); dialogText_.setString("Click on a body"); dialogText_.setColor(sf::Color::Black); // The number 10 is a litte padding for the text in the dialog dialogText_.setPosition(dialog_pos.x+10, dialog_pos.y); }
Scene* SGDramaSceneSelectScene::creatScene(const char* hero_name, const char* content, int* ret_add) { Scene* scene = Scene::create(); SGDramaSceneSelectScene* select_layer = SGDramaSceneSelectScene::create(); Size win_size = Director::getInstance()->getWinSize(); RenderTexture* render_texture = RenderTexture::create(win_size.width, win_size.height); render_texture->begin(); Director::getInstance()->getRunningScene()->visit(); render_texture->end(); render_texture->setPosition(Vec2(win_size.width/2, win_size.height/2)); select_layer->addChild(render_texture); // Create the select dialog window // step 1: create the dialog window backgound texture; Sprite* dialog_win = Sprite::create(SELECT_WINDOW_BACKGROUND); Size dialog_size(win_size.width * 0.666f, win_size.height * 0.1928f); dialog_win->setTextureRect(Rect(0, 0, dialog_size.width, dialog_size.height)); Texture2D::TexParams params = { GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT }; dialog_win->getTexture()->setTexParameters(params); dialog_win->setAnchorPoint(Vec2::ANCHOR_MIDDLE); dialog_win->setPosition(Vec2(win_size.width/2, win_size.height/2)); // step 2: create hero face image; std::string hero_face_res = SG_HERO_FACE_RES_PATH; hero_face_res.append(SGHeroResourceUtils::getInstance()->getHeroResObj(hero_name)->res_name); hero_face_res.append(".png"); Sprite* face = Sprite::create(hero_face_res); face->setPosition(Vec2(dialog_size.width * 0.1f ,dialog_size.height/2)); dialog_win->addChild(face); // step 3: create dialog content background LayerColor* content_bg_layer = LayerColor::create(Color4B::WHITE, dialog_size.width * 0.75f ,dialog_size.height * 0.6667f); content_bg_layer->setPosition(Vec2(dialog_size.width * 0.2333f ,dialog_size.height * 0.0714f)); Size content_bg_layer_size = content_bg_layer->getContentSize(); dialog_win->addChild(content_bg_layer); // step 4: create each menu item std::string select_items = content; std::string::size_type start_pos = 0; std::string::size_type pos = 0; std::string separator = "\\n"; std::string null_str = " "; Menu* select_menu; int menu_size = 0; MenuItemLabel *menu_item1, *menu_item2, *menu_item3; while ((pos = select_items.find(separator, start_pos)) != std::string::npos){ //speak.replace( pos, srcLen, des_str ); std::string one_item_content = select_items.substr(start_pos, pos - start_pos); //one_item_content.replace(one_item_content.find(separator, 0), separator.size(), null_str); LabelTTF* label = LabelTTF::create(one_item_content, TEXT_FONT_NAME, TEXT_FONT_SIZE); label->setColor(Color3B::BLACK); menu_size++; switch (menu_size) { case 1: menu_item1 = MenuItemLabel::create(label, CC_CALLBACK_1(SGDramaSceneSelectScene::menuItem1Callback, select_layer)); break; case 2: menu_item2 = MenuItemLabel::create(label, CC_CALLBACK_1(SGDramaSceneSelectScene::menuItem2Callback, select_layer)); break; case 3: menu_item3 = MenuItemLabel::create(label, CC_CALLBACK_1(SGDramaSceneSelectScene::menuItem3Callback, select_layer)); default: break; } start_pos = pos + separator.size(); } switch (menu_size) { case 2: select_menu = Menu::create(menu_item1, menu_item2, NULL); break; case 3: select_menu = Menu::create(menu_item1, menu_item2, menu_item3, NULL); break; default: break; } select_menu->alignItemsVertically(); select_menu->setPosition(content_bg_layer_size.width/2, content_bg_layer_size.height/2); content_bg_layer->addChild(select_menu); select_layer->addChild(dialog_win); scene->addChild(select_layer); select_layer->__ret = ret_add; return scene; }