/* ActionSpecialPanel::openLines * Loads special/trigger/arg values from [lines] *******************************************************************/ void ActionSpecialPanel::openLines(vector<MapObject*>& lines) { if (lines.empty()) return; // Special int special = lines[0]->intProperty("special"); MapObject::multiIntProperty(lines, "special", special); setSpecial(special); // Args if (panel_args) { int args[5] = { -1, -1, -1, -1, -1 }; MapObject::multiIntProperty(lines, "arg0", args[0]); MapObject::multiIntProperty(lines, "arg1", args[1]); MapObject::multiIntProperty(lines, "arg2", args[2]); MapObject::multiIntProperty(lines, "arg3", args[3]); MapObject::multiIntProperty(lines, "arg4", args[4]); panel_args->setValues(args); } // Trigger (UDMF) if (show_trigger) { if (!cb_triggers.empty()) { for (unsigned a = 0; a < triggers_udmf.size(); a++) { bool set; if (MapObject::multiBoolProperty(lines, triggers_udmf[a], set)) cb_triggers[a]->SetValue(set); else cb_triggers[a]->Set3StateValue(wxCHK_UNDETERMINED); } } // Trigger (Hexen) else if (choice_trigger) { int trigger = theGameConfiguration->spacTriggerIndexHexen((MapLine*)lines[0]); for (unsigned a = 1; a < lines.size(); a++) { if (trigger != theGameConfiguration->spacTriggerIndexHexen((MapLine*)lines[a])) { trigger = -1; break; } } if (trigger >= 0) choice_trigger->SetSelection(trigger); } } }
void ChrsGrid::crushLastChr() { //得到消除后,应该生成的特殊类型 int special_type = getSpecial(m_SelectedChrs.size() - 1); auto last_chr = m_SelectedChrs.back(); if (special_type != 0) { auto new_chr = createAChr(last_chr->getX(), last_chr->getY()); new_chr->setSpecial(special_type); m_ChrsBox[last_chr->getX()][last_chr->getY()] = new_chr; //进入动作,完成后在添加新元素,开始掉落 new_chr->setScale(0.01); auto scalebigger = ScaleTo::create(0.1, 1.2); auto scalesmaller = ScaleTo::create(0.2, 1); auto call = CallFunc::create([this]() { //清空临时已选汉字集合, 更改主界面的letter label的显示 m_SelectedChrs.clear(); getGameScene()->setLetterLabel(getStringFromChrs(&m_SelectedChrs), false); //根据阵列空余添加新汉字元素至新汉字盒子,位于顶部,等待掉落 addNewChrs(); //使汉字掉落,同时开启掉落状态捕捉函数,掉落完后判断步数是否结束 dropChrs(); schedule(schedule_selector(ChrsGrid::onChrsDropping), 0.1); }); auto action = Sequence::create(scalebigger, scalesmaller, call, nullptr); new_chr->runAction(action); } else { //清空临时已选汉字集合, 更改主界面的letter label的显示 m_SelectedChrs.clear(); getGameScene()->setLetterLabel(getStringFromChrs(&m_SelectedChrs), false); //根据阵列空余添加新汉字元素至新汉字盒子,位于顶部,等待掉落 addNewChrs(); //使汉字掉落,同时开启掉落状态捕捉函数,掉落完后判断步数是否结束 dropChrs(); schedule(schedule_selector(ChrsGrid::onChrsDropping), 0.1); } }