Exemplo n.º 1
0
/* 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);
		}
	}
}
Exemplo n.º 2
0
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);
	}
}