mirror of
https://github.com/Relintai/pandemonium_engine.git
synced 2025-03-03 03:44:19 +01:00
Moved AnimationPlayerEditor::singleton to private, and added getter method for it.
This commit is contained in:
parent
7e451e0f30
commit
ed5024d3c3
@ -2865,7 +2865,7 @@ void AnimationTrackEdit::_gui_input(const Ref<InputEvent> &p_event) {
|
||||
menu->add_separator();
|
||||
menu->add_icon_item(get_icon("Duplicate", "EditorIcons"), TTR("Duplicate Key(s)"), MENU_KEY_DUPLICATE);
|
||||
|
||||
AnimationPlayer *player = AnimationPlayerEditor::singleton->get_player();
|
||||
AnimationPlayer *player = AnimationPlayerEditor::get_singleton()->get_player();
|
||||
if (!player->has_animation("RESET") || animation != player->get_animation("RESET")) {
|
||||
menu->add_icon_item(get_icon("Reload", "EditorIcons"), TTR("Add RESET Value(s)"), MENU_KEY_ADD_RESET);
|
||||
}
|
||||
@ -3502,7 +3502,7 @@ void AnimationTrackEditor::_query_insert(const InsertData &p_id) {
|
||||
insert_data.push_back(p_id);
|
||||
|
||||
bool reset_allowed = true;
|
||||
AnimationPlayer *player = AnimationPlayerEditor::singleton->get_player();
|
||||
AnimationPlayer *player = AnimationPlayerEditor::get_singleton()->get_player();
|
||||
if (player->has_animation("RESET") && player->get_animation("RESET") == animation) {
|
||||
// Avoid messing with the reset animation itself
|
||||
reset_allowed = false;
|
||||
@ -3732,7 +3732,7 @@ void AnimationTrackEditor::insert_node_value_key(Node *p_node, const String &p_p
|
||||
String path = root->get_path_to(node);
|
||||
|
||||
if (Object::cast_to<AnimationPlayer>(node) && p_property == "current_animation") {
|
||||
if (node == AnimationPlayerEditor::singleton->get_player()) {
|
||||
if (node == AnimationPlayerEditor::get_singleton()->get_player()) {
|
||||
EditorNode::get_singleton()->show_warning(TTR("AnimationPlayer can't animate itself, only other players."));
|
||||
return;
|
||||
}
|
||||
@ -3833,7 +3833,7 @@ void AnimationTrackEditor::insert_value_key(const String &p_property, const Vari
|
||||
String path = root->get_path_to(node);
|
||||
|
||||
if (Object::cast_to<AnimationPlayer>(node) && p_property == "current_animation") {
|
||||
if (node == AnimationPlayerEditor::singleton->get_player()) {
|
||||
if (node == AnimationPlayerEditor::get_singleton()->get_player()) {
|
||||
EditorNode::get_singleton()->show_warning(TTR("AnimationPlayer can't animate itself, only other players."));
|
||||
return;
|
||||
}
|
||||
@ -3913,7 +3913,7 @@ void AnimationTrackEditor::insert_value_key(const String &p_property, const Vari
|
||||
}
|
||||
|
||||
Ref<Animation> AnimationTrackEditor::_create_and_get_reset_animation() {
|
||||
AnimationPlayer *player = AnimationPlayerEditor::singleton->get_player();
|
||||
AnimationPlayer *player = AnimationPlayerEditor::get_singleton()->get_player();
|
||||
if (player->has_animation("RESET")) {
|
||||
return player->get_animation("RESET");
|
||||
} else {
|
||||
@ -3921,9 +3921,9 @@ Ref<Animation> AnimationTrackEditor::_create_and_get_reset_animation() {
|
||||
reset_anim.instance();
|
||||
reset_anim->set_length(ANIM_MIN_LENGTH);
|
||||
undo_redo->add_do_method(player, "add_animation", "RESET", reset_anim);
|
||||
undo_redo->add_do_method(AnimationPlayerEditor::singleton, "_animation_player_changed", player);
|
||||
undo_redo->add_do_method(AnimationPlayerEditor::get_singleton(), "_animation_player_changed", player);
|
||||
undo_redo->add_undo_method(player, "remove_animation", "RESET");
|
||||
undo_redo->add_undo_method(AnimationPlayerEditor::singleton, "_animation_player_changed", player);
|
||||
undo_redo->add_undo_method(AnimationPlayerEditor::get_singleton(), "_animation_player_changed", player);
|
||||
return reset_anim;
|
||||
}
|
||||
}
|
||||
@ -4607,7 +4607,7 @@ void AnimationTrackEditor::_new_track_node_selected(NodePath p_path) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (node == AnimationPlayerEditor::singleton->get_player()) {
|
||||
if (node == AnimationPlayerEditor::get_singleton()->get_player()) {
|
||||
EditorNode::get_singleton()->show_warning(TTR("AnimationPlayer can't animate itself, only other players."));
|
||||
return;
|
||||
}
|
||||
@ -5379,7 +5379,7 @@ void AnimationTrackEditor::_anim_duplicate_keys(bool transpose) {
|
||||
}
|
||||
|
||||
void AnimationTrackEditor::_edit_menu_about_to_show() {
|
||||
AnimationPlayer *player = AnimationPlayerEditor::singleton->get_player();
|
||||
AnimationPlayer *player = AnimationPlayerEditor::get_singleton()->get_player();
|
||||
edit->get_popup()->set_item_disabled(edit->get_popup()->get_item_index(EDIT_APPLY_RESET), !player->can_apply_reset());
|
||||
}
|
||||
|
||||
@ -5783,7 +5783,7 @@ void AnimationTrackEditor::_edit_menu_pressed(int p_option) {
|
||||
goto_prev_step(false);
|
||||
} break;
|
||||
case EDIT_APPLY_RESET: {
|
||||
AnimationPlayerEditor::singleton->get_player()->apply_reset(true);
|
||||
AnimationPlayerEditor::get_singleton()->get_player()->apply_reset(true);
|
||||
|
||||
} break;
|
||||
case EDIT_OPTIMIZE_ANIMATION: {
|
||||
@ -5803,9 +5803,9 @@ void AnimationTrackEditor::_edit_menu_pressed(int p_option) {
|
||||
case EDIT_CLEAN_UP_ANIMATION_CONFIRM: {
|
||||
if (cleanup_all->is_pressed()) {
|
||||
List<StringName> names;
|
||||
AnimationPlayerEditor::singleton->get_player()->get_animation_list(&names);
|
||||
AnimationPlayerEditor::get_singleton()->get_player()->get_animation_list(&names);
|
||||
for (List<StringName>::Element *E = names.front(); E; E = E->next()) {
|
||||
_cleanup_animation(AnimationPlayerEditor::singleton->get_player()->get_animation(E->get()));
|
||||
_cleanup_animation(AnimationPlayerEditor::get_singleton()->get_player()->get_animation(E->get()));
|
||||
}
|
||||
} else {
|
||||
_cleanup_animation(animation);
|
||||
|
@ -6775,7 +6775,7 @@ EditorNode::EditorNode() {
|
||||
add_child(editor_interface);
|
||||
|
||||
//more visually meaningful to have this later
|
||||
raise_bottom_panel_item(AnimationPlayerEditor::singleton);
|
||||
raise_bottom_panel_item(AnimationPlayerEditor::get_singleton());
|
||||
|
||||
add_editor_plugin(memnew(ShaderEditorPlugin(this)));
|
||||
|
||||
|
@ -347,7 +347,7 @@ void InspectorDock::_menu_expandall() {
|
||||
}
|
||||
|
||||
void InspectorDock::_property_keyed(const String &p_keyed, const Variant &p_value, bool p_advance) {
|
||||
AnimationPlayerEditor::singleton->get_track_editor()->insert_value_key(p_keyed, p_value, p_advance);
|
||||
AnimationPlayerEditor::get_singleton()->get_track_editor()->insert_value_key(p_keyed, p_value, p_advance);
|
||||
}
|
||||
|
||||
void InspectorDock::_transform_keyed(Object *sp, const String &p_sub, const Transform &p_key) {
|
||||
@ -355,7 +355,7 @@ void InspectorDock::_transform_keyed(Object *sp, const String &p_sub, const Tran
|
||||
if (!s) {
|
||||
return;
|
||||
}
|
||||
AnimationPlayerEditor::singleton->get_track_editor()->insert_transform_key(s, p_sub, p_key);
|
||||
AnimationPlayerEditor::get_singleton()->get_track_editor()->insert_transform_key(s, p_sub, p_key);
|
||||
}
|
||||
|
||||
void InspectorDock::_warning_pressed() {
|
||||
@ -515,7 +515,7 @@ void InspectorDock::go_back() {
|
||||
void InspectorDock::update_keying() {
|
||||
bool valid = false;
|
||||
|
||||
if (AnimationPlayerEditor::singleton->get_track_editor()->has_keying()) {
|
||||
if (AnimationPlayerEditor::get_singleton()->get_track_editor()->has_keying()) {
|
||||
EditorHistory *editor_history = EditorNode::get_singleton()->get_editor_history();
|
||||
if (editor_history->get_path_size() >= 1) {
|
||||
Object *obj = ObjectDB::get_instance(editor_history->get_path_object(0));
|
||||
|
@ -340,7 +340,7 @@ void AnimationPlayerEditor::_animation_selected(int p_which) {
|
||||
|
||||
autoplay->set_pressed(current == player->get_autoplay());
|
||||
|
||||
AnimationPlayerEditor::singleton->get_track_editor()->update_keying();
|
||||
AnimationPlayerEditor::get_singleton()->get_track_editor()->update_keying();
|
||||
EditorNode::get_singleton()->update_keying();
|
||||
_animation_key_editor_seek(timeline_position, false);
|
||||
}
|
||||
@ -888,7 +888,7 @@ void AnimationPlayerEditor::_update_player() {
|
||||
pin->set_disabled(player == nullptr);
|
||||
|
||||
if (!player) {
|
||||
AnimationPlayerEditor::singleton->get_track_editor()->update_keying();
|
||||
AnimationPlayerEditor::get_singleton()->get_track_editor()->update_keying();
|
||||
EditorNode::get_singleton()->update_keying();
|
||||
return;
|
||||
}
|
||||
|
@ -69,6 +69,7 @@ class AnimationPlayerEditor : public VBoxContainer {
|
||||
EditorNode *editor;
|
||||
AnimationPlayerEditorPlugin *plugin;
|
||||
AnimationPlayer *player;
|
||||
static AnimationPlayerEditor *singleton;
|
||||
|
||||
enum {
|
||||
TOOL_NEW_ANIM,
|
||||
@ -248,7 +249,7 @@ protected:
|
||||
|
||||
public:
|
||||
AnimationPlayer *get_player() const;
|
||||
static AnimationPlayerEditor *singleton;
|
||||
static AnimationPlayerEditor *get_singleton() { return singleton; }
|
||||
|
||||
bool is_pinned() const { return pin->is_pressed(); }
|
||||
void unpin() { pin->set_pressed(false); }
|
||||
|
@ -541,7 +541,7 @@ Object *CanvasItemEditor::_get_editor_data(Object *p_what) {
|
||||
}
|
||||
|
||||
void CanvasItemEditor::_keying_changed() {
|
||||
if (AnimationPlayerEditor::singleton->get_track_editor()->is_visible_in_tree()) {
|
||||
if (AnimationPlayerEditor::get_singleton()->get_track_editor()->is_visible_in_tree()) {
|
||||
animation_hb->show();
|
||||
} else {
|
||||
animation_hb->hide();
|
||||
@ -4170,7 +4170,7 @@ void CanvasItemEditor::_notification(int p_what) {
|
||||
select_sb->set_default_margin(Margin(i), 4);
|
||||
}
|
||||
|
||||
AnimationPlayerEditor::singleton->get_track_editor()->connect("visibility_changed", this, "_keying_changed");
|
||||
AnimationPlayerEditor::get_singleton()->get_track_editor()->connect("visibility_changed", this, "_keying_changed");
|
||||
_keying_changed();
|
||||
get_tree()->connect("node_added", this, "_tree_changed", varray());
|
||||
get_tree()->connect("node_removed", this, "_tree_changed", varray());
|
||||
@ -4782,13 +4782,13 @@ void CanvasItemEditor::_insert_animation_keys(bool p_location, bool p_rotation,
|
||||
Node2D *n2d = Object::cast_to<Node2D>(canvas_item);
|
||||
|
||||
if (key_pos && p_location) {
|
||||
AnimationPlayerEditor::singleton->get_track_editor()->insert_node_value_key(n2d, "position", n2d->get_position(), p_on_existing);
|
||||
AnimationPlayerEditor::get_singleton()->get_track_editor()->insert_node_value_key(n2d, "position", n2d->get_position(), p_on_existing);
|
||||
}
|
||||
if (key_rot && p_rotation) {
|
||||
AnimationPlayerEditor::singleton->get_track_editor()->insert_node_value_key(n2d, "rotation_degrees", Math::rad2deg(n2d->get_rotation()), p_on_existing);
|
||||
AnimationPlayerEditor::get_singleton()->get_track_editor()->insert_node_value_key(n2d, "rotation_degrees", Math::rad2deg(n2d->get_rotation()), p_on_existing);
|
||||
}
|
||||
if (key_scale && p_scale) {
|
||||
AnimationPlayerEditor::singleton->get_track_editor()->insert_node_value_key(n2d, "scale", n2d->get_scale(), p_on_existing);
|
||||
AnimationPlayerEditor::get_singleton()->get_track_editor()->insert_node_value_key(n2d, "scale", n2d->get_scale(), p_on_existing);
|
||||
}
|
||||
|
||||
if (n2d->has_meta("_edit_bone_") && n2d->get_parent_item()) {
|
||||
@ -4814,13 +4814,13 @@ void CanvasItemEditor::_insert_animation_keys(bool p_location, bool p_rotation,
|
||||
if (has_chain && ik_chain.size()) {
|
||||
for (List<Node2D *>::Element *F = ik_chain.front(); F; F = F->next()) {
|
||||
if (key_pos) {
|
||||
AnimationPlayerEditor::singleton->get_track_editor()->insert_node_value_key(F->get(), "position", F->get()->get_position(), p_on_existing);
|
||||
AnimationPlayerEditor::get_singleton()->get_track_editor()->insert_node_value_key(F->get(), "position", F->get()->get_position(), p_on_existing);
|
||||
}
|
||||
if (key_rot) {
|
||||
AnimationPlayerEditor::singleton->get_track_editor()->insert_node_value_key(F->get(), "rotation_degrees", Math::rad2deg(F->get()->get_rotation()), p_on_existing);
|
||||
AnimationPlayerEditor::get_singleton()->get_track_editor()->insert_node_value_key(F->get(), "rotation_degrees", Math::rad2deg(F->get()->get_rotation()), p_on_existing);
|
||||
}
|
||||
if (key_scale) {
|
||||
AnimationPlayerEditor::singleton->get_track_editor()->insert_node_value_key(F->get(), "scale", F->get()->get_scale(), p_on_existing);
|
||||
AnimationPlayerEditor::get_singleton()->get_track_editor()->insert_node_value_key(F->get(), "scale", F->get()->get_scale(), p_on_existing);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -4830,13 +4830,13 @@ void CanvasItemEditor::_insert_animation_keys(bool p_location, bool p_rotation,
|
||||
Control *ctrl = Object::cast_to<Control>(canvas_item);
|
||||
|
||||
if (key_pos) {
|
||||
AnimationPlayerEditor::singleton->get_track_editor()->insert_node_value_key(ctrl, "rect_position", ctrl->get_position(), p_on_existing);
|
||||
AnimationPlayerEditor::get_singleton()->get_track_editor()->insert_node_value_key(ctrl, "rect_position", ctrl->get_position(), p_on_existing);
|
||||
}
|
||||
if (key_rot) {
|
||||
AnimationPlayerEditor::singleton->get_track_editor()->insert_node_value_key(ctrl, "rect_rotation", ctrl->get_rotation_degrees(), p_on_existing);
|
||||
AnimationPlayerEditor::get_singleton()->get_track_editor()->insert_node_value_key(ctrl, "rect_rotation", ctrl->get_rotation_degrees(), p_on_existing);
|
||||
}
|
||||
if (key_scale) {
|
||||
AnimationPlayerEditor::singleton->get_track_editor()->insert_node_value_key(ctrl, "rect_size", ctrl->get_size(), p_on_existing);
|
||||
AnimationPlayerEditor::get_singleton()->get_track_editor()->insert_node_value_key(ctrl, "rect_size", ctrl->get_size(), p_on_existing);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2174,7 +2174,7 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!AnimationPlayerEditor::singleton->get_track_editor()->has_keying()) {
|
||||
if (!AnimationPlayerEditor::get_singleton()->get_track_editor()->has_keying()) {
|
||||
set_message(TTR("Keying is disabled (no key inserted)."));
|
||||
return;
|
||||
}
|
||||
|
@ -1946,8 +1946,8 @@ void SceneTreeDock::_do_reparent(Node *p_new_parent, int p_position_in_parent, V
|
||||
|
||||
editor_data->get_undo_redo().add_do_method(this, "_set_owners", edited_scene, owners);
|
||||
|
||||
if (AnimationPlayerEditor::singleton->get_track_editor()->get_root() == node) {
|
||||
editor_data->get_undo_redo().add_do_method(AnimationPlayerEditor::singleton->get_track_editor(), "set_root", node);
|
||||
if (AnimationPlayerEditor::get_singleton()->get_track_editor()->get_root() == node) {
|
||||
editor_data->get_undo_redo().add_do_method(AnimationPlayerEditor::get_singleton()->get_track_editor(), "set_root", node);
|
||||
}
|
||||
|
||||
editor_data->get_undo_redo().add_undo_method(new_parent, "remove_child", node);
|
||||
@ -1972,8 +1972,8 @@ void SceneTreeDock::_do_reparent(Node *p_new_parent, int p_position_in_parent, V
|
||||
editor_data->get_undo_redo().add_undo_method(node->get_parent(), "add_child", node);
|
||||
editor_data->get_undo_redo().add_undo_method(node->get_parent(), "move_child", node, child_pos);
|
||||
editor_data->get_undo_redo().add_undo_method(this, "_set_owners", edited_scene, owners);
|
||||
if (AnimationPlayerEditor::singleton->get_track_editor()->get_root() == node) {
|
||||
editor_data->get_undo_redo().add_undo_method(AnimationPlayerEditor::singleton->get_track_editor(), "set_root", node);
|
||||
if (AnimationPlayerEditor::get_singleton()->get_track_editor()->get_root() == node) {
|
||||
editor_data->get_undo_redo().add_undo_method(AnimationPlayerEditor::get_singleton()->get_track_editor(), "set_root", node);
|
||||
}
|
||||
|
||||
if (p_keep_global_xform) {
|
||||
@ -2165,8 +2165,8 @@ void SceneTreeDock::_delete_confirm(bool p_cut) {
|
||||
editor_data->get_undo_redo().add_do_method(n->get_parent(), "remove_child", n);
|
||||
editor_data->get_undo_redo().add_undo_method(n->get_parent(), "add_child", n);
|
||||
editor_data->get_undo_redo().add_undo_method(n->get_parent(), "move_child", n, n->get_index());
|
||||
if (AnimationPlayerEditor::singleton->get_track_editor()->get_root() == n) {
|
||||
editor_data->get_undo_redo().add_undo_method(AnimationPlayerEditor::singleton->get_track_editor(), "set_root", n);
|
||||
if (AnimationPlayerEditor::get_singleton()->get_track_editor()->get_root() == n) {
|
||||
editor_data->get_undo_redo().add_undo_method(AnimationPlayerEditor::get_singleton()->get_track_editor(), "set_root", n);
|
||||
}
|
||||
editor_data->get_undo_redo().add_undo_method(this, "_set_owners", edited_scene, owners);
|
||||
editor_data->get_undo_redo().add_undo_reference(n);
|
||||
|
@ -128,7 +128,7 @@ void SceneTreeEditor::_cell_button_pressed(Object *p_item, int p_column, int p_i
|
||||
undo_redo->commit_action();
|
||||
} else if (p_id == BUTTON_PIN) {
|
||||
if (n->is_class("AnimationPlayer")) {
|
||||
AnimationPlayerEditor::singleton->unpin();
|
||||
AnimationPlayerEditor::get_singleton()->unpin();
|
||||
_update_tree();
|
||||
}
|
||||
|
||||
@ -432,7 +432,7 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent, bool p_scroll
|
||||
|
||||
_update_visibility_color(p_node, item);
|
||||
} else if (p_node->is_class("AnimationPlayer")) {
|
||||
bool is_pinned = AnimationPlayerEditor::singleton->get_player() == p_node && AnimationPlayerEditor::singleton->is_pinned();
|
||||
bool is_pinned = AnimationPlayerEditor::get_singleton()->get_player() == p_node && AnimationPlayerEditor::get_singleton()->is_pinned();
|
||||
|
||||
if (is_pinned) {
|
||||
item->add_button(0, get_icon("Pin", "EditorIcons"), BUTTON_PIN, false, TTR("AnimationPlayer is pinned.\nClick to unpin."));
|
||||
|
@ -378,7 +378,7 @@ void ModuleBoneTransformEditor::_key_button_pressed() {
|
||||
// Need to normalize the basis before you key it
|
||||
Transform tform = compute_transform_from_vector3s();
|
||||
tform.orthonormalize();
|
||||
AnimationPlayerEditor::singleton->get_track_editor()->insert_transform_key(skeleton, name, tform);
|
||||
AnimationPlayerEditor::get_singleton()->get_track_editor()->insert_transform_key(skeleton, name, tform);
|
||||
}
|
||||
|
||||
void ModuleBoneTransformEditor::_checkbox_toggled(const bool p_toggled) {
|
||||
@ -455,14 +455,14 @@ void ModuleSkeletonEditor::insert_keys(bool p_all_bones) {
|
||||
if (name.empty())
|
||||
continue;
|
||||
|
||||
if (!p_all_bones && !AnimationPlayerEditor::singleton->get_track_editor()->has_transform_key(skeleton, name)) {
|
||||
if (!p_all_bones && !AnimationPlayerEditor::get_singleton()->get_track_editor()->has_transform_key(skeleton, name)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Need to normalize the basis before you key it
|
||||
Transform tform = skeleton->get_bone_pose(i);
|
||||
tform.orthonormalize();
|
||||
AnimationPlayerEditor::singleton->get_track_editor()->insert_transform_key(skeleton, name, tform);
|
||||
AnimationPlayerEditor::get_singleton()->get_track_editor()->insert_transform_key(skeleton, name, tform);
|
||||
}
|
||||
}
|
||||
|
||||
@ -833,7 +833,7 @@ void ModuleSkeletonEditor::create_editors() {
|
||||
|
||||
rest_mode = false;
|
||||
|
||||
set_keyable(AnimationPlayerEditor::singleton->get_track_editor()->has_keying());
|
||||
set_keyable(AnimationPlayerEditor::get_singleton()->get_track_editor()->has_keying());
|
||||
|
||||
if (skeleton) {
|
||||
skeleton->add_child(pointsm);
|
||||
@ -866,7 +866,7 @@ void ModuleSkeletonEditor::create_editors() {
|
||||
|
||||
pose_editor = memnew(ModuleBoneTransformEditor(skeleton));
|
||||
pose_editor->set_label(TTR("Bone Pose"));
|
||||
pose_editor->set_keyable(AnimationPlayerEditor::singleton->get_track_editor()->has_keying());
|
||||
pose_editor->set_keyable(AnimationPlayerEditor::get_singleton()->get_track_editor()->has_keying());
|
||||
// pose_editor->set_toggle_enabled(true);
|
||||
pose_editor->set_visible(false);
|
||||
add_child(pose_editor);
|
||||
@ -1002,7 +1002,7 @@ void ModuleSkeletonEditor::set_rest_mode_toggled(const bool pressed) {
|
||||
skeleton->set_bone_enabled(i, !rest_mode);
|
||||
}
|
||||
|
||||
set_keyable(AnimationPlayerEditor::singleton->get_track_editor()->has_keying() && !rest_mode);
|
||||
set_keyable(AnimationPlayerEditor::get_singleton()->get_track_editor()->has_keying() && !rest_mode);
|
||||
}
|
||||
|
||||
ModuleSkeletonEditor::ModuleSkeletonEditor(ModuleEditorInspectorPluginSkeleton *e_plugin, EditorNode *p_editor, Skeleton *p_skeleton) :
|
||||
|
Loading…
Reference in New Issue
Block a user