示例#1
0
bool MapObject::boolProperty(string key)
{
	// If the property exists already, return it
	if (properties[key].hasValue())
		return properties[key].getBoolValue();

	// Otherwise check the game configuration for a default value
	else
	{
		UDMFProperty* prop = theGameConfiguration->getUDMFProperty(key, type);
		if (prop)
			return prop->getDefaultValue().getBoolValue();
		else
			return false;
	}
}
示例#2
0
/* ThingPropsPanel::setupExtraFlagsTab
 * Creates and sets up the 'Extra Flags' tab
 *******************************************************************/
wxPanel* ThingPropsPanel::setupExtraFlagsTab()
{
	// Create panel
	wxPanel* panel = new wxPanel(stc_tabs, -1);

	// Setup sizer
	wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL);
	panel->SetSizer(sizer);

	// Init flags
	wxGridBagSizer* gb_sizer_flags = new wxGridBagSizer(4, 4);
	sizer->Add(gb_sizer_flags, 1, wxEXPAND|wxALL, 10);
	int row = 0;
	int col = 0;

	// Get all extra flag names
	vector<string> flags;
	for (unsigned a = 0; a < udmf_flags_extra.size(); a++)
	{
		UDMFProperty* prop = theGameConfiguration->getUDMFProperty(udmf_flags_extra[a], MOBJ_THING);
		flags.push_back(prop->getName());
	}

	// Add flag checkboxes
	int flag_mid = flags.size() / 3;
	if (flags.size() % 3 == 0) flag_mid--;
	for (unsigned a = 0; a < flags.size(); a++)
	{
		wxCheckBox* cb_flag = new wxCheckBox(panel, -1, flags[a], wxDefaultPosition, wxDefaultSize, wxCHK_3STATE);
		gb_sizer_flags->Add(cb_flag, wxGBPosition(row++, col), wxDefaultSpan, wxEXPAND);
		cb_flags_extra.push_back(cb_flag);

		if (row > flag_mid)
		{
			row = 0;
			col++;
		}
	}

	gb_sizer_flags->AddGrowableCol(0, 1);
	gb_sizer_flags->AddGrowableCol(1, 1);
	gb_sizer_flags->AddGrowableCol(2, 1);

	return panel;
}
示例#3
0
/* ActionSpecialPanel::setupSpecialPanel
 * Creates and sets up the action special panel
 *******************************************************************/
void ActionSpecialPanel::setupSpecialPanel()
{
	// Create panel
	panel_action_special = new wxPanel(this, -1);
	wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL);
	panel_action_special->SetSizer(sizer);

	// Special box
	text_special = new NumberTextCtrl(panel_action_special);
	sizer->Add(text_special, 0, wxEXPAND|wxALL, 4);
	text_special->Bind(wxEVT_TEXT, &ActionSpecialPanel::onSpecialTextChanged, this);

	// Action specials tree
	tree_specials = new ActionSpecialTreeView(panel_action_special);
	sizer->Add(tree_specials, 1, wxEXPAND|wxALL, 4);

	if (show_trigger)
	{
		// UDMF Triggers
		if (theMapEditor->currentMapDesc().format == MAP_UDMF)
		{
			// Get all UDMF properties
			vector<udmfp_t> props = theGameConfiguration->allUDMFProperties(MOBJ_LINE);
			sort(props.begin(), props.end());

			// Get all UDMF trigger properties
			vector<string> triggers;
			NamedFlexGridMap named_flexgrids;
			for (unsigned a = 0; a < props.size(); a++)
			{
				UDMFProperty* property = props[a].property;
				if (!property->isTrigger())
					continue;

				string group = property->getGroup();
				wxFlexGridSizer* frame_sizer = named_flexgrids[group];
				if (!frame_sizer)
				{
					wxStaticBox* frame_triggers = new wxStaticBox(panel_action_special, -1, group);
					wxStaticBoxSizer* sizer_triggers = new wxStaticBoxSizer(frame_triggers, wxVERTICAL);
					sizer->Add(sizer_triggers, 0, wxEXPAND|wxTOP, 4);

					frame_sizer = new wxFlexGridSizer(3);
					frame_sizer->AddGrowableCol(0, 1);
					frame_sizer->AddGrowableCol(1, 1);
					frame_sizer->AddGrowableCol(2, 1);
					sizer_triggers->Add(frame_sizer, 1, wxEXPAND|wxALL, 4);

					named_flexgrids.find(group)->second = frame_sizer;
				}

				wxCheckBox* cb_trigger = new wxCheckBox(panel_action_special, -1, property->getName(), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE);
				frame_sizer->Add(cb_trigger, 0, wxEXPAND);

				triggers.push_back(property->getName());
				triggers_udmf.push_back(property->getProperty());
				cb_triggers.push_back(cb_trigger);
			}
		}

		// Hexen trigger
		else if (theMapEditor->currentMapDesc().format == MAP_HEXEN)
		{
			// Add triggers dropdown
			wxBoxSizer* hbox = new wxBoxSizer(wxHORIZONTAL);
			sizer->Add(hbox, 0, wxEXPAND|wxTOP, 4);

			hbox->Add(new wxStaticText(panel_action_special, -1, "Special Trigger:"), 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);
			choice_trigger = new wxChoice(panel_action_special, -1, wxDefaultPosition, wxDefaultSize, theGameConfiguration->allSpacTriggers());
			hbox->Add(choice_trigger, 1, wxEXPAND);
		}
	}
}