本文整理汇总了C++中UndoRedo类的典型用法代码示例。如果您正苦于以下问题:C++ UndoRedo类的具体用法?C++ UndoRedo怎么用?C++ UndoRedo使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了UndoRedo类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: _press_a_key_confirm
void EditorSettingsDialog::_press_a_key_confirm() {
if (last_wait_for_key.type!=InputEvent::KEY)
return;
InputEvent ie;
ie.type=InputEvent::KEY;
ie.key.scancode=last_wait_for_key.key.scancode;
ie.key.mod=last_wait_for_key.key.mod;
Ref<ShortCut> sc = EditorSettings::get_singleton()->get_shortcut(shortcut_configured);
UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
ur->create_action("Change Shortcut '"+shortcut_configured+"'");
ur->add_do_method(sc.ptr(),"set_shortcut",ie);
ur->add_undo_method(sc.ptr(),"set_shortcut",sc->get_shortcut());
ur->add_do_method(this,"_update_shortcuts");
ur->add_undo_method(this,"_update_shortcuts");
ur->add_do_method(this,"_settings_changed");
ur->add_undo_method(this,"_settings_changed");
ur->commit_action();
}
开发者ID:03050903,项目名称:godot,代码行数:25,代码来源:settings_config_dialog.cpp
示例2: _press_a_key_confirm
void EditorSettingsDialog::_press_a_key_confirm() {
if (last_wait_for_key.is_null())
return;
Ref<InputEventKey> ie;
ie.instance();
ie->set_scancode(last_wait_for_key->get_scancode());
ie->set_shift(last_wait_for_key->get_shift());
ie->set_control(last_wait_for_key->get_control());
ie->set_alt(last_wait_for_key->get_alt());
ie->set_metakey(last_wait_for_key->get_metakey());
Ref<ShortCut> sc = EditorSettings::get_singleton()->get_shortcut(shortcut_configured);
UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
ur->create_action("Change Shortcut '" + shortcut_configured + "'");
ur->add_do_method(sc.ptr(), "set_shortcut", ie);
ur->add_undo_method(sc.ptr(), "set_shortcut", sc->get_shortcut());
ur->add_do_method(this, "_update_shortcuts");
ur->add_undo_method(this, "_update_shortcuts");
ur->add_do_method(this, "_settings_changed");
ur->add_undo_method(this, "_settings_changed");
ur->commit_action();
}
开发者ID:GalanCM,项目名称:godot,代码行数:25,代码来源:settings_config_dialog.cpp
示例3: memnew
void MeshInstanceEditor::_create_outline_mesh() {
Ref<Mesh> mesh = node->get_mesh();
if (mesh.is_null()) {
err_dialog->set_text(TTR("MeshInstance lacks a Mesh!"));
err_dialog->popup_centered_minsize();
return;
}
Ref<Mesh> mesho = mesh->create_outline(outline_size->get_val());
if (mesho.is_null()) {
err_dialog->set_text(TTR("Could not create outline!"));
err_dialog->popup_centered_minsize();
return;
}
MeshInstance *mi = memnew( MeshInstance );
mi->set_mesh(mesho);
Node *owner=node->get_owner();
if (get_tree()->get_edited_scene_root()==node) {
owner=node;
}
UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
ur->create_action(TTR("Create Outline"));
ur->add_do_method(node,"add_child",mi);
ur->add_do_method(mi,"set_owner",owner);
ur->add_do_reference(mi);
ur->add_undo_method(node,"remove_child",mi);
ur->commit_action();
}
开发者ID:SasoriOlkof,项目名称:godot,代码行数:35,代码来源:mesh_instance_editor_plugin.cpp
示例4: Vector2
void EditorAudioBus::_effect_edited() {
if (updating_bus)
return;
TreeItem *effect = effects->get_edited();
if (!effect)
return;
if (effect->get_metadata(0) == Variant()) {
Rect2 area = effects->get_item_rect(effect);
effect_options->set_position(effects->get_global_position() + area.position + Vector2(0, area.size.y));
effect_options->popup();
//add effect
} else {
int index = effect->get_metadata(0);
updating_bus = true;
UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
ur->create_action(TTR("Select Audio Bus Send"));
ur->add_do_method(AudioServer::get_singleton(), "set_bus_effect_enabled", get_index(), index, effect->is_checked(0));
ur->add_undo_method(AudioServer::get_singleton(), "set_bus_effect_enabled", get_index(), index, AudioServer::get_singleton()->is_bus_effect_enabled(get_index(), index));
ur->add_do_method(buses, "_update_bus", get_index());
ur->add_undo_method(buses, "_update_bus", get_index());
ur->commit_action();
updating_bus = false;
}
}
开发者ID:louisVottero,项目名称:godot,代码行数:30,代码来源:editor_audio_buses.cpp
示例5: _add_bus
void EditorAudioBuses::_add_bus() {
UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
//need to simulate new name, so we can undi :(
ur->create_action(TTR("Add Audio Bus"));
ur->add_do_method(AudioServer::get_singleton(), "set_bus_count", AudioServer::get_singleton()->get_bus_count() + 1);
ur->add_undo_method(AudioServer::get_singleton(), "set_bus_count", AudioServer::get_singleton()->get_bus_count());
ur->add_do_method(this, "_update_buses");
ur->add_undo_method(this, "_update_buses");
ur->commit_action();
}
开发者ID:louisVottero,项目名称:godot,代码行数:12,代码来源:editor_audio_buses.cpp
示例6: _set_impl
bool MultiNodeEdit::_set_impl(const StringName &p_name, const Variant &p_value, const String &p_field) {
Node *es = EditorNode::get_singleton()->get_edited_scene();
if (!es)
return false;
String name = p_name;
if (name == "scripts") { // script set is intercepted at object level (check Variant Object::get() ) ,so use a different name
name = "script";
}
UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
ur->create_action(TTR("MultiNode Set") + " " + String(name));
for (const List<NodePath>::Element *E = nodes.front(); E; E = E->next()) {
if (!es->has_node(E->get()))
continue;
Node *n = es->get_node(E->get());
if (!n)
continue;
if (p_value.get_type() == Variant::NODE_PATH) {
Node *tonode = n->get_node(p_value);
NodePath p_path = n->get_path_to(tonode);
ur->add_do_property(n, name, p_path);
} else {
Variant new_value;
if (p_field == "") {
// whole value
new_value = p_value;
} else {
// only one field
new_value = fieldwise_assign(n->get(name), p_value, p_field);
}
ur->add_do_property(n, name, new_value);
}
ur->add_undo_property(n, name, n->get(name));
}
ur->add_do_method(EditorNode::get_singleton()->get_inspector(), "refresh");
ur->add_undo_method(EditorNode::get_singleton()->get_inspector(), "refresh");
ur->commit_action();
return true;
}
开发者ID:KellyThomas,项目名称:godot,代码行数:48,代码来源:multi_node_edit.cpp
示例7: _reset_bus_volume
void EditorAudioBuses::_reset_bus_volume(Object *p_which) {
EditorAudioBus *bus = Object::cast_to<EditorAudioBus>(p_which);
int index = bus->get_index();
UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
ur->create_action(TTR("Reset Bus Volume"));
ur->add_do_method(AudioServer::get_singleton(), "set_bus_volume_db", index, 0.f);
ur->add_undo_method(AudioServer::get_singleton(), "set_bus_volume_db", index, AudioServer::get_singleton()->get_bus_volume_db(index));
ur->add_do_method(this, "_update_buses");
ur->add_undo_method(this, "_update_buses");
ur->commit_action();
}
开发者ID:louisVottero,项目名称:godot,代码行数:13,代码来源:editor_audio_buses.cpp
示例8: _send_selected
void EditorAudioBus::_send_selected(int p_which) {
updating_bus = true;
UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
ur->create_action("Select Audio Bus Send");
ur->add_do_method(AudioServer::get_singleton(), "set_bus_send", get_index(), send->get_item_text(p_which));
ur->add_undo_method(AudioServer::get_singleton(), "set_bus_send", get_index(), AudioServer::get_singleton()->get_bus_send(get_index()));
ur->add_do_method(buses, "_update_bus", get_index());
ur->add_undo_method(buses, "_update_bus", get_index());
ur->commit_action();
updating_bus = false;
}
开发者ID:louisVottero,项目名称:godot,代码行数:14,代码来源:editor_audio_buses.cpp
示例9: _bypass_toggled
void EditorAudioBus::_bypass_toggled() {
updating_bus = true;
UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
ur->create_action(TTR("Toggle Audio Bus Bypass Effects"));
ur->add_do_method(AudioServer::get_singleton(), "set_bus_bypass_effects", get_index(), bypass->is_pressed());
ur->add_undo_method(AudioServer::get_singleton(), "set_bus_bypass_effects", get_index(), AudioServer::get_singleton()->is_bus_bypassing_effects(get_index()));
ur->add_do_method(buses, "_update_bus", get_index());
ur->add_undo_method(buses, "_update_bus", get_index());
ur->commit_action();
updating_bus = false;
}
开发者ID:louisVottero,项目名称:godot,代码行数:14,代码来源:editor_audio_buses.cpp
示例10: _delete_effect_pressed
void EditorAudioBus::_delete_effect_pressed(int p_option) {
TreeItem *item = effects->get_selected();
if (!item)
return;
if (item->get_metadata(0).get_type() != Variant::INT)
return;
int index = item->get_metadata(0);
UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
ur->create_action(TTR("Delete Bus Effect"));
ur->add_do_method(AudioServer::get_singleton(), "remove_bus_effect", get_index(), index);
ur->add_undo_method(AudioServer::get_singleton(), "add_bus_effect", get_index(), AudioServer::get_singleton()->get_bus_effect(get_index(), index), index);
ur->add_undo_method(AudioServer::get_singleton(), "set_bus_effect_enabled", get_index(), index, AudioServer::get_singleton()->is_bus_effect_enabled(get_index(), index));
ur->add_do_method(buses, "_update_bus", get_index());
ur->add_undo_method(buses, "_update_bus", get_index());
ur->commit_action();
}
开发者ID:louisVottero,项目名称:godot,代码行数:20,代码来源:editor_audio_buses.cpp
示例11: _volume_db_changed
void EditorAudioBus::_volume_db_changed(float p_db) {
if (updating_bus)
return;
updating_bus = true;
UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
ur->create_action(TTR("Change Audio Bus Volume"), UndoRedo::MERGE_ENDS);
ur->add_do_method(AudioServer::get_singleton(), "set_bus_volume_db", get_index(), p_db);
ur->add_undo_method(AudioServer::get_singleton(), "set_bus_volume_db", get_index(), AudioServer::get_singleton()->get_bus_volume_db(get_index()));
ur->add_do_method(buses, "_update_bus", get_index());
ur->add_undo_method(buses, "_update_bus", get_index());
ur->commit_action();
updating_bus = false;
}
开发者ID:louisVottero,项目名称:godot,代码行数:17,代码来源:editor_audio_buses.cpp
示例12: create_physical_skeleton
void SkeletonEditor::create_physical_skeleton() {
UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
Node *owner = skeleton == get_tree()->get_edited_scene_root() ? skeleton : skeleton->get_owner();
const int bc = skeleton->get_bone_count();
if (!bc) {
return;
}
Vector<BoneInfo> bones_infos;
bones_infos.resize(bc);
for (int bone_id = 0; bc > bone_id; ++bone_id) {
const int parent = skeleton->get_bone_parent(bone_id);
const int parent_parent = skeleton->get_bone_parent(parent);
if (parent < 0) {
bones_infos.write[bone_id].relative_rest = skeleton->get_bone_rest(bone_id);
} else {
bones_infos.write[bone_id].relative_rest = bones_infos[parent].relative_rest * skeleton->get_bone_rest(bone_id);
/// create physical bone on parent
if (!bones_infos[parent].physical_bone) {
bones_infos.write[parent].physical_bone = create_physical_bone(parent, bone_id, bones_infos);
ur->create_action(TTR("Create physical bones"));
ur->add_do_method(skeleton, "add_child", bones_infos[parent].physical_bone);
ur->add_do_reference(bones_infos[parent].physical_bone);
ur->add_undo_method(skeleton, "remove_child", bones_infos[parent].physical_bone);
ur->commit_action();
bones_infos[parent].physical_bone->set_bone_name(skeleton->get_bone_name(parent));
bones_infos[parent].physical_bone->set_owner(owner);
bones_infos[parent].physical_bone->get_child(0)->set_owner(owner); // set shape owner
/// Create joint between parent of parent
if (-1 != parent_parent) {
bones_infos[parent].physical_bone->set_joint_type(PhysicalBone::JOINT_TYPE_PIN);
}
}
}
}
}
开发者ID:Paulloz,项目名称:godot,代码行数:50,代码来源:skeleton_editor_plugin.cpp
示例13: _drop_at_index
void EditorAudioBuses::_drop_at_index(int p_bus, int p_index) {
UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
//need to simulate new name, so we can undi :(
ur->create_action(TTR("Move Audio Bus"));
ur->add_do_method(AudioServer::get_singleton(), "move_bus", p_bus, p_index);
int final_pos;
if (p_index == p_bus) {
final_pos = p_bus;
} else if (p_index == -1) {
final_pos = AudioServer::get_singleton()->get_bus_count() - 1;
} else if (p_index < p_bus) {
final_pos = p_index;
} else {
final_pos = p_index - 1;
}
ur->add_undo_method(AudioServer::get_singleton(), "move_bus", final_pos, p_bus);
ur->add_do_method(this, "_update_buses");
ur->add_undo_method(this, "_update_buses");
ur->commit_action();
}
开发者ID:louisVottero,项目名称:godot,代码行数:23,代码来源:editor_audio_buses.cpp
示例14: ERR_FAIL_COND
void EditorAudioBus::_effect_add(int p_which) {
if (updating_bus)
return;
StringName name = effect_options->get_item_metadata(p_which);
Object *fx = ClassDB::instance(name);
ERR_FAIL_COND(!fx);
AudioEffect *afx = Object::cast_to<AudioEffect>(fx);
ERR_FAIL_COND(!afx);
Ref<AudioEffect> afxr = Ref<AudioEffect>(afx);
afxr->set_name(effect_options->get_item_text(p_which));
UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
ur->create_action(TTR("Add Audio Bus Effect"));
ur->add_do_method(AudioServer::get_singleton(), "add_bus_effect", get_index(), afxr, -1);
ur->add_undo_method(AudioServer::get_singleton(), "remove_bus_effect", get_index(), AudioServer::get_singleton()->get_bus_effect_count(get_index()));
ur->add_do_method(buses, "_update_bus", get_index());
ur->add_undo_method(buses, "_update_bus", get_index());
ur->commit_action();
}
开发者ID:louisVottero,项目名称:godot,代码行数:23,代码来源:editor_audio_buses.cpp
示例15: _ramp_changed
void GradientEditorPlugin::_ramp_changed() {
if (gradient_ref.is_valid()) {
UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
//Not sure if I should convert this data to PoolVector
Vector<float> new_offsets = ramp_editor->get_offsets();
Vector<Color> new_colors = ramp_editor->get_colors();
Vector<float> old_offsets = gradient_ref->get_offsets();
Vector<Color> old_colors = gradient_ref->get_colors();
if (old_offsets.size() != new_offsets.size())
ur->create_action(TTR("Add/Remove Color Ramp Point"));
else
ur->create_action(TTR("Modify Color Ramp"), UndoRedo::MERGE_ENDS);
ur->add_do_method(this, "undo_redo_gradient", new_offsets, new_colors);
ur->add_undo_method(this, "undo_redo_gradient", old_offsets, old_colors);
ur->commit_action();
//color_ramp_ref->set_points(ramp_editor->get_points());
}
}
开发者ID:Bonfi96,项目名称:godot,代码行数:23,代码来源:gradient_editor_plugin.cpp
示例16: mbpos
bool PathEditorPlugin::forward_spatial_input_event(Camera *p_camera, const InputEvent &p_event) {
if (!path)
return false;
Ref<Curve3D> c = path->get_curve();
if (c.is_null())
return false;
Transform gt = path->get_global_transform();
Transform it = gt.affine_inverse();
static const int click_dist = 10; //should make global
if (p_event.type == InputEvent::MOUSE_BUTTON) {
const InputEventMouseButton &mb = p_event.mouse_button;
Point2 mbpos(mb.x, mb.y);
if (mb.pressed && mb.button_index == BUTTON_LEFT && (curve_create->is_pressed() || (curve_edit->is_pressed() && mb.mod.control))) {
//click into curve, break it down
Vector3Array v3a = c->tesselate();
int idx = 0;
int rc = v3a.size();
int closest_seg = -1;
Vector3 closest_seg_point;
float closest_d = 1e20;
if (rc >= 2) {
Vector3Array::Read r = v3a.read();
if (p_camera->unproject_position(gt.xform(c->get_point_pos(0))).distance_to(mbpos) < click_dist)
return false; //nope, existing
for (int i = 0; i < c->get_point_count() - 1; i++) {
//find the offset and point index of the place to break up
int j = idx;
if (p_camera->unproject_position(gt.xform(c->get_point_pos(i + 1))).distance_to(mbpos) < click_dist)
return false; //nope, existing
while (j < rc && c->get_point_pos(i + 1) != r[j]) {
Vector3 from = r[j];
Vector3 to = r[j + 1];
real_t cdist = from.distance_to(to);
from = gt.xform(from);
to = gt.xform(to);
if (cdist > 0) {
Vector2 s[2];
s[0] = p_camera->unproject_position(from);
s[1] = p_camera->unproject_position(to);
Vector2 inters = Geometry::get_closest_point_to_segment_2d(mbpos, s);
float d = inters.distance_to(mbpos);
if (d < 10 && d < closest_d) {
closest_d = d;
closest_seg = i;
Vector3 ray_from = p_camera->project_ray_origin(mbpos);
Vector3 ray_dir = p_camera->project_ray_normal(mbpos);
Vector3 ra, rb;
Geometry::get_closest_points_between_segments(ray_from, ray_from + ray_dir * 4096, from, to, ra, rb);
closest_seg_point = it.xform(rb);
}
}
j++;
}
if (idx == j)
idx++; //force next
else
idx = j; //swap
if (j == rc)
break;
}
}
UndoRedo *ur = editor->get_undo_redo();
if (closest_seg != -1) {
//subdivide
ur->create_action(TTR("Split Path"));
ur->add_do_method(c.ptr(), "add_point", closest_seg_point, Vector3(), Vector3(), closest_seg + 1);
ur->add_undo_method(c.ptr(), "remove_point", closest_seg + 1);
ur->commit_action();
return true;
} else {
Vector3 org;
if (c->get_point_count() == 0)
org = path->get_transform().get_origin();
else
org = gt.xform(c->get_point_pos(c->get_point_count()));
Plane p(org, p_camera->get_transform().basis.get_axis(2));
Vector3 ray_from = p_camera->project_ray_origin(mbpos);
Vector3 ray_dir = p_camera->project_ray_normal(mbpos);
Vector3 inters;
if (p.intersects_ray(ray_from, ray_dir, &inters)) {
//.........这里部分代码省略.........
开发者ID:allkhor,项目名称:godot,代码行数:101,代码来源:path_editor_plugin.cpp
示例17: commit_handle
void PathSpatialGizmo::commit_handle(int p_idx, const Variant &p_restore, bool p_cancel) {
Ref<Curve3D> c = path->get_curve();
if (c.is_null())
return;
UndoRedo *ur = SpatialEditor::get_singleton()->get_undo_redo();
if (p_idx < c->get_point_count()) {
if (p_cancel) {
c->set_point_pos(p_idx, p_restore);
return;
}
ur->create_action(TTR("Set Curve Point Pos"));
ur->add_do_method(c.ptr(), "set_point_pos", p_idx, c->get_point_pos(p_idx));
ur->add_undo_method(c.ptr(), "set_point_pos", p_idx, p_restore);
ur->commit_action();
return;
}
p_idx = p_idx - c->get_point_count() + 1;
int idx = p_idx / 2;
int t = p_idx % 2;
Vector3 ofs;
if (p_cancel) {
return;
}
if (t == 0) {
if (p_cancel) {
c->set_point_in(p_idx, p_restore);
return;
}
ur->create_action(TTR("Set Curve In Pos"));
ur->add_do_method(c.ptr(), "set_point_in", idx, c->get_point_in(idx));
ur->add_undo_method(c.ptr(), "set_point_in", idx, p_restore);
ur->commit_action();
} else {
if (p_cancel) {
c->set_point_out(idx, p_restore);
return;
}
ur->create_action(TTR("Set Curve Out Pos"));
ur->add_do_method(c.ptr(), "set_point_out", idx, c->get_point_out(idx));
ur->add_undo_method(c.ptr(), "set_point_out", idx, p_restore);
ur->commit_action();
}
}
开发者ID:allkhor,项目名称:godot,代码行数:59,代码来源:path_editor_plugin.cpp
示例18: switch
void CSGShapeSpatialGizmoPlugin::commit_handle(EditorSpatialGizmo *p_gizmo, int p_idx, const Variant &p_restore, bool p_cancel) {
CSGShape *cs = Object::cast_to<CSGShape>(p_gizmo->get_spatial_node());
if (Object::cast_to<CSGSphere>(cs)) {
CSGSphere *s = Object::cast_to<CSGSphere>(cs);
if (p_cancel) {
s->set_radius(p_restore);
return;
}
UndoRedo *ur = SpatialEditor::get_singleton()->get_undo_redo();
ur->create_action(TTR("Change Sphere Shape Radius"));
ur->add_do_method(s, "set_radius", s->get_radius());
ur->add_undo_method(s, "set_radius", p_restore);
ur->commit_action();
}
if (Object::cast_to<CSGBox>(cs)) {
CSGBox *s = Object::cast_to<CSGBox>(cs);
if (p_cancel) {
switch (p_idx) {
case 0: s->set_width(p_restore); break;
case 1: s->set_height(p_restore); break;
case 2: s->set_depth(p_restore); break;
}
return;
}
UndoRedo *ur = SpatialEditor::get_singleton()->get_undo_redo();
ur->create_action(TTR("Change Box Shape Extents"));
static const char *method[3] = { "set_width", "set_height", "set_depth" };
float current = 0;
switch (p_idx) {
case 0: current = s->get_width(); break;
case 1: current = s->get_height(); break;
case 2: current = s->get_depth(); break;
}
ur->add_do_method(s, method[p_idx], current);
ur->add_undo_method(s, method[p_idx], p_restore);
ur->commit_action();
}
if (Object::cast_to<CSGCylinder>(cs)) {
CSGCylinder *s = Object::cast_to<CSGCylinder>(cs);
if (p_cancel) {
if (p_idx == 0)
s->set_radius(p_restore);
else
s->set_height(p_restore);
return;
}
UndoRedo *ur = SpatialEditor::get_singleton()->get_undo_redo();
if (p_idx == 0) {
ur->create_action(TTR("Change Cylinder Radius"));
ur->add_do_method(s, "set_radius", s->get_radius());
ur->add_undo_method(s, "set_radius", p_restore);
} else {
ur->create_action(TTR("Change Cylinder Height"));
ur->add_do_method(s, "set_height", s->get_height());
ur->add_undo_method(s, "set_height", p_restore);
}
ur->commit_action();
}
if (Object::cast_to<CSGTorus>(cs)) {
CSGTorus *s = Object::cast_to<CSGTorus>(cs);
if (p_cancel) {
if (p_idx == 0)
s->set_inner_radius(p_restore);
else
s->set_outer_radius(p_restore);
return;
}
UndoRedo *ur = SpatialEditor::get_singleton()->get_undo_redo();
if (p_idx == 0) {
ur->create_action(TTR("Change Torus Inner Radius"));
ur->add_do_method(s, "set_inner_radius", s->get_inner_radius());
ur->add_undo_method(s, "set_inner_radius", p_restore);
} else {
ur->create_action(TTR("Change Torus Outer Radius"));
ur->add_do_method(s, "set_outer_radius", s->get_outer_radius());
ur->add_undo_method(s, "set_outer_radius", p_restore);
}
ur->commit_action();
}
}
开发者ID:93i,项目名称:godot,代码行数:92,代码来源:csg_gizmos.cpp
示例19: commit_handle
void PathSpatialGizmo::commit_handle(int p_idx, const Variant &p_restore, bool p_cancel) {
Ref<Curve3D> c = path->get_curve();
if (c.is_null())
return;
UndoRedo *ur = SpatialEditor::get_singleton()->get_undo_redo();
if (p_idx < c->get_point_count()) {
if (p_cancel) {
c->set_point_position(p_idx, p_restore);
return;
}
ur->create_action(TTR("Set Curve Point Position"));
ur->add_do_method(c.ptr(), "set_point_position", p_idx, c->get_point_position(p_idx));
ur->add_undo_method(c.ptr(), "set_point_position", p_idx, p_restore);
ur->commit_action();
return;
}
p_idx = p_idx - c->get_point_count() + 1;
int idx = p_idx / 2;
int t = p_idx % 2;
if (t == 0) {
if (p_cancel) {
c->set_point_in(p_idx, p_restore);
return;
}
ur->create_action(TTR("Set Curve In Position"));
ur->add_do_method(c.ptr(), "set_point_in", idx, c->get_point_in(idx));
ur->add_undo_method(c.ptr(), "set_point_in", idx, p_restore);
if (PathEditorPlugin::singleton->mirror_angle_enabled()) {
ur->add_do_method(c.ptr(), "set_point_out", idx, PathEditorPlugin::singleton->mirror_length_enabled() ? -c->get_point_in(idx) : (-c->get_point_in(idx).normalized() * orig_out_length));
ur->add_undo_method(c.ptr(), "set_point_out", idx, PathEditorPlugin::singleton->mirror_length_enabled() ? -static_cast<Vector3>(p_restore) : (-static_cast<Vector3>(p_restore).normalized() * orig_out_length));
}
ur->commit_action();
} else {
if (p_cancel) {
c->set_point_out(idx, p_restore);
return;
}
ur->create_action(TTR("Set Curve Out Position"));
ur->add_do_method(c.ptr(), "set_point_out", idx, c->get_point_out(idx));
ur->add_undo_method(c.ptr(), "set_point_out", idx, p_restore);
if (PathEditorPlugin::singleton->mirror_angle_enabled()) {
ur->add_do_method(c.ptr(), "set_point_in", idx, PathEditorPlugin::singleton->mirror_length_enabled() ? -c->get_point_out(idx) : (-c->get_point_out(idx).normalized() * orig_in_length));
ur->add_undo_method(c.ptr(), "set_point_in", idx, PathEditorPlugin::singleton->mirror_length_enabled() ? -static_cast<Vector3>(p_restore) : (-static_cast<Vector3>(p_restore).normalized() * orig_in_length));
}
ur->commit_action();
}
}
开发者ID:KellyThomas,项目名称:godot,代码行数:62,代码来源:path_editor_plugin.cpp
示例20: ERR_FAIL_COND
void EditorSettingsDialog::_shortcut_button_pressed(Object* p_item,int p_column,int p_idx) {
TreeItem *ti=p_item->cast_to<TreeItem>();
ERR_FAIL_COND(!ti);
String item = ti->get_metadata(0);
Ref<ShortCut> sc = EditorSettings::get_singleton()->get_shortcut(item);
if (p_idx==0) {
press_a_key_label->set_text(TTR("Press a Key.."));
last_wait_for_key=InputEvent();
press_a_key->popup_centered(Size2(250,80)*EDSCALE);
press_a_key->grab_focus();
press_a_key->get_ok()->set_focus_mode(FOCUS_NONE);
press_a_key->get_cancel()->set_focus_mode(FOCUS_NONE);
shortcut_configured=item;
} else if (p_idx==1) {//erase
if (!sc.is_valid())
return; //pointless, there is nothing
UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
ur->create_action("Erase Shortcut");
ur->add_do_method(sc.ptr(),"set_shortcut",InputEvent());
ur->add_undo_method(sc.ptr(),"set_shortcut",sc->get_shortcut());
ur->add_do_method(this,"_update_shortcuts");
ur->add_undo_method(this,"_update_shortcuts");
ur->add_do_method(this,"_settings_changed");
ur->add_undo_method(this,"_settings_changed");
ur->commit_action();
} else if (p_idx==2) {//revert to original
if (!sc.is_valid())
return; //pointless, there is nothing
InputEvent original = sc->get_meta("original");
UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
ur->create_action("Restore Shortcut");
ur->add_do_method(sc.ptr(),"set_shortcut",original);
ur->add_undo_method(sc.ptr(),"set_shortcut",sc->get_shortcut());
ur->add_do_method(this,"_update_shortcuts");
ur->add_undo_method(this,"_update_shortcuts");
ur->add_do_method(this,"_settings_changed");
ur->add_undo_method(this,"_settings_changed");
ur->commit_action();
}
}
开发者ID:03050903,项目名称:godot,代码行数:47,代码来源:settings_config_dialog.cpp
注:本文中的UndoRedo类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论