#include "mesher.h" CompoundTransvoxel::CompoundTransvoxel() : VoxelMesherTransvoxel() { } CompoundTransvoxel::~CompoundTransvoxel() { } void CompoundTransvoxel::build(VoxelMesher::Output &output, const VoxelMesher::Input &input) { VoxelMesherTransvoxel::build(output, input); } Ref CompoundTransvoxel::duplicate(bool p_subresources) const { return VoxelMesherTransvoxel::duplicate(p_subresources); } int CompoundTransvoxel::get_used_channels_mask() const { return VoxelMesherTransvoxel::get_used_channels_mask(); } void CompoundTransvoxelInspector::open_scene(Object *button) { CompoundTransvoxel *obj = Object::cast_to(button->get_meta("what")); fd->set_meta("what", obj); fd->popup_centered_ratio(); } CompoundTransvoxelInspector::CompoundTransvoxelInspector(): EditorInspectorPlugin() { } void CompoundTransvoxel::_bind_methods() { } void CompoundTransvoxelInspector::_bind_methods() { ClassDB::bind_method(D_METHOD("open_scene", "button"), &CompoundTransvoxelInspector::open_scene); } bool CompoundTransvoxelInspector::can_handle(Object *p_object) { return Object::cast_to(p_object) != NULL; } void CompoundTransvoxelInspector::scenes_selected(const PoolVector &p_paths) { struct CompoundTransvoxel::place_item it; for (int i = 0; i < p_paths.size(); i++) { Ref t = Ref(ResourceLoader::load(p_paths[i])); ERR_CONTINUE_MSG(!t.is_valid(), "'" + p_paths[i] + "' is not a valid scene."); it.scene = t; } } void CompoundTransvoxelInspector::parse_begin(Object *p_object) { int i; CompoundTransvoxel *obj = Object::cast_to(p_object); if (!obj) return; VBoxContainer *control = memnew(VBoxContainer); fd = memnew(EditorFileDialog); fd->set_access(EditorFileDialog::ACCESS_RESOURCES); fd->set_mode(EditorFileDialog::MODE_OPEN_FILE); fd->set_resizable(true); List extensions; ResourceLoader::get_recognized_extensions_for_type("Texture", &extensions); for (List::Element *E = extensions.front(); E; E = E->next()) { fd->add_filter("*." + E->get() + " ; " + E->get().to_upper()); } fd->connect("files_selected", this, "scenes_selected"); control->add_child(fd); for (i = 0; i < obj->items.size(); i++) { HBoxContainer *vcontrol = memnew(HBoxContainer); Button *open_scene = memnew(Button); open_scene->set_text("Select scene..."); open_scene->connect("pressed", this, "open_scene", Node::make_binds(open_scene)); open_scene->set_meta("what", &obj->items[i]); vcontrol->add_child(open_scene); Label *l1 = memnew(Label); l1->set_text("scene path: "); vcontrol->add_child(l1); /* full instance */ Label *l2 = memnew(Label); l2->set_text("full instance: "); vcontrol->add_child(l2); CheckBox *cb1 = memnew(CheckBox); vcontrol->add_child(cb1); /* use collision */ Label *l3 = memnew(Label); l3->set_text("use collision: "); vcontrol->add_child(l3); CheckBox *cb2 = memnew(CheckBox); vcontrol->add_child(cb2); /* priority */ Label *l4 = memnew(Label); l4->set_text("priority: "); vcontrol->add_child(l4); #if 0 SpinBox *sb1 = memnew(SpinBox); vcontrol->add_child(sb1); #endif control->add_child(vcontrol); } Button *addbutton = memnew(Button); addbutton->set_text("+"); control->add_child(addbutton); add_custom_control(control); }