diff options
Diffstat (limited to 'scene')
36 files changed, 143 insertions, 252 deletions
diff --git a/scene/2d/animated_sprite.cpp b/scene/2d/animated_sprite.cpp index c062a6d1fc..73774e12d9 100644 --- a/scene/2d/animated_sprite.cpp +++ b/scene/2d/animated_sprite.cpp @@ -318,7 +318,7 @@ void AnimatedSprite::_validate_property(PropertyInfo& property) const { if (property.name=="frame") { - property.hint=PROPERTY_HINT_RANGE; + property.hint=PROPERTY_HINT_SPRITE_FRAME; if (frames->has_animation(animation)) { property.hint_string="0,"+itos(frames->get_frame_count(animation)-1)+",1"; diff --git a/scene/2d/camera_2d.cpp b/scene/2d/camera_2d.cpp index 85256be940..f98a50e3e0 100644 --- a/scene/2d/camera_2d.cpp +++ b/scene/2d/camera_2d.cpp @@ -44,7 +44,6 @@ void Camera2D::_update_scroll() { if (current) { Matrix32 xform = get_camera_transform(); - RID vp = viewport->get_viewport(); if (viewport) { viewport->set_canvas_transform( xform ); } @@ -409,6 +408,35 @@ void Camera2D::force_update_scroll() { _update_scroll(); } +void Camera2D::reset_smoothing() { + + smoothed_camera_pos = camera_pos; + _update_scroll(); +} + +void Camera2D::align() { + + Size2 screen_size = get_viewport_rect().size; + screen_size=get_viewport_rect().size; + Point2 current_camera_pos = get_global_transform().get_origin(); + if (anchor_mode==ANCHOR_MODE_DRAG_CENTER) { + if (h_ofs<0) { + camera_pos.x = current_camera_pos.x + screen_size.x * 0.5 * drag_margin[MARGIN_RIGHT] * h_ofs; + } else { + camera_pos.x = current_camera_pos.x + screen_size.x * 0.5 * drag_margin[MARGIN_LEFT] * h_ofs; + } + if (v_ofs<0) { + camera_pos.y = current_camera_pos.y + screen_size.y * 0.5 * drag_margin[MARGIN_TOP] * v_ofs; + } else { + camera_pos.y = current_camera_pos.y + screen_size.y * 0.5 * drag_margin[MARGIN_BOTTOM] * v_ofs; + } + } else if (anchor_mode==ANCHOR_MODE_FIXED_TOP_LEFT){ + + camera_pos=current_camera_pos; + } + + _update_scroll(); +} void Camera2D::set_follow_smoothing(float p_speed) { @@ -544,6 +572,8 @@ void Camera2D::_bind_methods() { ObjectTypeDB::bind_method(_MD("is_follow_smoothing_enabled"),&Camera2D::is_follow_smoothing_enabled); ObjectTypeDB::bind_method(_MD("force_update_scroll"),&Camera2D::force_update_scroll); + ObjectTypeDB::bind_method(_MD("reset_smoothing"),&Camera2D::reset_smoothing); + ObjectTypeDB::bind_method(_MD("align"),&Camera2D::align); ObjectTypeDB::bind_method(_MD("_set_old_smoothing","follow_smoothing"),&Camera2D::_set_old_smoothing); diff --git a/scene/2d/camera_2d.h b/scene/2d/camera_2d.h index 22e5bc382a..b3f55d798d 100644 --- a/scene/2d/camera_2d.h +++ b/scene/2d/camera_2d.h @@ -128,6 +128,8 @@ public: Vector2 get_camera_pos() const; void force_update_scroll(); + void reset_smoothing(); + void align(); Camera2D(); }; diff --git a/scene/2d/navigation2d.cpp b/scene/2d/navigation2d.cpp index b4332cc75d..82c1327a8f 100644 --- a/scene/2d/navigation2d.cpp +++ b/scene/2d/navigation2d.cpp @@ -552,7 +552,6 @@ debug path if (p_optimize) { //string pulling - Polygon *apex_poly=end_poly; Vector2 apex_point=end_point; Vector2 portal_left=apex_point; Vector2 portal_right=apex_point; @@ -613,12 +612,9 @@ debug path //print_line("***ADVANCE LEFT"); } else { - //_clip_path(path,apex_poly,portal_right,right_poly); - apex_point=portal_right; p=right_poly; left_poly=p; - apex_poly=p; portal_left=apex_point; portal_right=apex_point; if (path[path.size()-1].distance_to(apex_point)>CMP_EPSILON) @@ -637,12 +633,9 @@ debug path //print_line("***ADVANCE RIGHT"); } else { - //_clip_path(path,apex_poly,portal_left,left_poly); - apex_point=portal_left; p=left_poly; right_poly=p; - apex_poly=p; portal_right=apex_point; portal_left=apex_point; if (path[path.size()-1].distance_to(apex_point)>CMP_EPSILON) diff --git a/scene/2d/sprite.cpp b/scene/2d/sprite.cpp index 27aa08ec5b..c5b338bf59 100644 --- a/scene/2d/sprite.cpp +++ b/scene/2d/sprite.cpp @@ -288,6 +288,17 @@ Rect2 Sprite::get_item_rect() const { } + +void Sprite::_validate_property(PropertyInfo& property) const { + + if (property.name=="frame") { + + property.hint=PROPERTY_HINT_SPRITE_FRAME; + + property.hint_string="0,"+itos(vframes*hframes-1)+",1"; + } +} + void Sprite::_bind_methods() { ObjectTypeDB::bind_method(_MD("set_texture","texture:Texture"),&Sprite::set_texture); diff --git a/scene/2d/sprite.h b/scene/2d/sprite.h index f789538b1d..32d3f476d1 100644 --- a/scene/2d/sprite.h +++ b/scene/2d/sprite.h @@ -61,6 +61,8 @@ protected: static void _bind_methods();; + virtual void _validate_property(PropertyInfo& property) const; + public: virtual void edit_set_pivot(const Point2& p_pivot); diff --git a/scene/2d/visibility_notifier_2d.cpp b/scene/2d/visibility_notifier_2d.cpp index 12524a2192..5411950976 100644 --- a/scene/2d/visibility_notifier_2d.cpp +++ b/scene/2d/visibility_notifier_2d.cpp @@ -270,9 +270,6 @@ void VisibilityEnabler2D::_notification(int p_what){ return; - Node *from = this; - //find where current scene starts - for (Map<Node*,Variant>::Element *E=nodes.front();E;E=E->next()) { if (!visible) @@ -293,14 +290,7 @@ void VisibilityEnabler2D::_change_node_state(Node* p_node,bool p_enabled) { RigidBody2D *rb = p_node->cast_to<RigidBody2D>(); if (rb) { - if (p_enabled) { - RigidBody2D::Mode mode = RigidBody2D::Mode(nodes[p_node].operator int()); - //rb->set_mode(mode); - rb->set_sleeping(false); - } else { - //rb->set_mode(RigidBody2D::MODE_STATIC); - rb->set_sleeping(true); - } + rb->set_sleeping(!p_enabled); } } diff --git a/scene/3d/physics_joint.cpp b/scene/3d/physics_joint.cpp index 3f03b2aab3..084d96975f 100644 --- a/scene/3d/physics_joint.cpp +++ b/scene/3d/physics_joint.cpp @@ -369,9 +369,6 @@ RID HingeJoint::_configure_joint(PhysicsBody *body_a,PhysicsBody *body_b) { Transform gt = get_global_transform(); - Vector3 hingepos = gt.origin; - Vector3 hingedir = gt.basis.get_axis(2); - Transform ainv = body_a->get_global_transform().affine_inverse(); Transform local_a = ainv * gt; @@ -532,9 +529,6 @@ RID SliderJoint::_configure_joint(PhysicsBody *body_a,PhysicsBody *body_b) { Transform gt = get_global_transform(); - Vector3 sliderpos = gt.origin; - Vector3 sliderdir = gt.basis.get_axis(2); - Transform ainv = body_a->get_global_transform().affine_inverse(); Transform local_a = ainv * gt; diff --git a/scene/3d/sprite_3d.cpp b/scene/3d/sprite_3d.cpp index 8c86c4bf35..74cab30b17 100644 --- a/scene/3d/sprite_3d.cpp +++ b/scene/3d/sprite_3d.cpp @@ -585,6 +585,17 @@ Rect2 Sprite3D::get_item_rect() const { return Rect2(ofs,s); } + +void Sprite3D::_validate_property(PropertyInfo& property) const { + + if (property.name=="frame") { + + property.hint=PROPERTY_HINT_SPRITE_FRAME; + + property.hint_string="0,"+itos(vframes*hframes-1)+",1"; + } +} + void Sprite3D::_bind_methods() { ObjectTypeDB::bind_method(_MD("set_texture","texture:Texture"),&Sprite3D::set_texture); diff --git a/scene/3d/sprite_3d.h b/scene/3d/sprite_3d.h index 41e6ba804a..31f8ec020f 100644 --- a/scene/3d/sprite_3d.h +++ b/scene/3d/sprite_3d.h @@ -158,6 +158,8 @@ class Sprite3D : public SpriteBase3D { protected: virtual void _draw(); static void _bind_methods(); + + virtual void _validate_property(PropertyInfo& property) const; public: diff --git a/scene/3d/vehicle_body.cpp b/scene/3d/vehicle_body.cpp index 6ccf07db1e..7c7957640f 100644 --- a/scene/3d/vehicle_body.cpp +++ b/scene/3d/vehicle_body.cpp @@ -488,7 +488,6 @@ real_t VehicleBody::_ray_cast(int p_idx,PhysicsDirectBodyState *s) { void VehicleBody::_update_suspension(PhysicsDirectBodyState *s) { - real_t deltaTime = s->get_step(); real_t chassisMass = mass; for (int w_it=0; w_it<wheels.size(); w_it++) @@ -596,21 +595,16 @@ void VehicleBody::_resolve_single_bilateral(PhysicsDirectBodyState *s, const Vec b2invinertia, b2invmass); - real_t jacDiagAB = jac.getDiagonal(); - real_t jacDiagABInv = real_t(1.) / jacDiagAB; - real_t rel_vel = jac.getRelativeVelocity( s->get_linear_velocity(), s->get_transform().basis.transposed().xform(s->get_angular_velocity()), b2lv, b2trans.xform(b2av)); - real_t a; - a=jacDiagABInv; rel_vel = normal.dot(vel); - //todo: move this into proper structure + //TODO: move this into proper structure real_t contactDamping = real_t(0.4); #define ONLY_USE_LINEAR_MASS #ifdef ONLY_USE_LINEAR_MASS @@ -642,16 +636,16 @@ VehicleBody::btVehicleWheelContactPoint::btVehicleWheelContactPoint(PhysicsDirec denom0= s->get_inverse_mass() + frictionDirectionWorld.dot(vec); } + /* TODO: Why is this code unused? if (body1) { Vector3 r0 = frictionPosWorld - body1->get_global_transform().origin; Vector3 c0 = (r0).cross(frictionDirectionWorld); Vector3 vec = s->get_inverse_inertia_tensor().xform_inv(c0).cross(r0); //denom1= body1->get_inverse_mass() + frictionDirectionWorld.dot(vec); - denom1=0; } - + */ real_t relaxation = 1.f; m_jacDiagABInv = relaxation/(denom0+denom1); diff --git a/scene/3d/visibility_notifier.cpp b/scene/3d/visibility_notifier.cpp index 60097ad482..f3b5cde0eb 100644 --- a/scene/3d/visibility_notifier.cpp +++ b/scene/3d/visibility_notifier.cpp @@ -221,9 +221,6 @@ void VisibilityEnabler::_notification(int p_what){ return; - Node *from = this; - //find where current scene starts - for (Map<Node*,Variant>::Element *E=nodes.front();E;E=E->next()) { if (!visible) @@ -242,17 +239,9 @@ void VisibilityEnabler::_change_node_state(Node* p_node,bool p_enabled) { { RigidBody *rb = p_node->cast_to<RigidBody>(); - if (rb) { - - if (p_enabled) { - RigidBody::Mode mode = RigidBody::Mode(nodes[p_node].operator int()); - //rb->set_mode(mode); - rb->set_sleeping(false); - } else { - //rb->set_mode(RigidBody::MODE_STATIC); - rb->set_sleeping(true); - } - } + if (rb) + + rb->set_sleeping(!p_enabled); } { diff --git a/scene/gui/dialogs.cpp b/scene/gui/dialogs.cpp index 6342391383..4dbc106834 100644 --- a/scene/gui/dialogs.cpp +++ b/scene/gui/dialogs.cpp @@ -62,7 +62,6 @@ void WindowDialog::_input_event(const InputEvent& p_event) { Point2 rel( p_event.mouse_motion.relative_x, p_event.mouse_motion.relative_y ); Point2 pos = get_pos(); - Size2 size = get_size(); pos+=rel; @@ -409,7 +408,6 @@ AcceptDialog::AcceptDialog() { ok->set_text(RTR("OK")); hbc->add_child(ok); hbc->add_spacer(); - //add_child(ok); ok->connect("pressed", this,"_ok"); diff --git a/scene/gui/graph_edit.cpp b/scene/gui/graph_edit.cpp index ee3b8913b4..06b1c42690 100644 --- a/scene/gui/graph_edit.cpp +++ b/scene/gui/graph_edit.cpp @@ -774,7 +774,6 @@ void GraphEdit::set_zoom(float p_zoom) { Vector2 sbofs = (Vector2( h_scroll->get_val(), v_scroll->get_val() ) + get_size()/2)/zoom; - float prev_zoom = zoom; zoom = p_zoom; top_layer->update(); diff --git a/scene/gui/label.cpp b/scene/gui/label.cpp index 2d4438c48c..0431d824fa 100644 --- a/scene/gui/label.cpp +++ b/scene/gui/label.cpp @@ -144,7 +144,6 @@ void Label::_notification(int p_what) { if (!wc) return; - int c = 0; int line=0; int line_to=lines_skipped + (lines_visible>0?lines_visible:1); while(wc) { @@ -536,7 +535,9 @@ void Label::set_text(const String& p_string) { if (percent_visible<1) visible_chars=get_total_character_count()*percent_visible; update(); - minimum_size_changed(); + if (!autowrap) { + minimum_size_changed(); + } } diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp index c025e4c706..6c47072b33 100644 --- a/scene/gui/line_edit.cpp +++ b/scene/gui/line_edit.cpp @@ -31,6 +31,7 @@ #include "os/os.h" #include "print_string.h" #include "label.h" +#include "translation.h" #ifdef TOOLS_ENABLED #include "tools/editor/editor_settings.h" #endif @@ -947,7 +948,7 @@ String LineEdit::get_text() const { void LineEdit::set_placeholder(String p_text) { - placeholder = p_text; + placeholder = XL_MESSAGE(p_text); update(); } @@ -980,10 +981,6 @@ void LineEdit::set_cursor_pos(int p_pos) { cursor_pos=p_pos; -// if (cursor_pos>(window_pos+get_window_length())) { -// set_window_pos(cursor_pos-get_window_lengt//h()); -// } - if (!is_inside_tree()) { window_pos=cursor_pos; @@ -1002,7 +999,6 @@ void LineEdit::set_cursor_pos(int p_pos) { if (window_width<0) return; - int width_to_cursor=0; int wp=window_pos; if (font.is_valid()) { diff --git a/scene/gui/progress_bar.cpp b/scene/gui/progress_bar.cpp index 02da8ff27e..8af94c3638 100644 --- a/scene/gui/progress_bar.cpp +++ b/scene/gui/progress_bar.cpp @@ -51,7 +51,6 @@ void ProgressBar::_notification(int p_what) { Ref<StyleBox> fg = get_stylebox("fg"); Ref<Font> font = get_font("font"); Color font_color=get_color("font_color"); - Color font_color_shadow=get_color("font_color_shadow"); draw_style_box(bg,Rect2(Point2(),get_size())); float r = get_unit_value(); @@ -63,7 +62,6 @@ void ProgressBar::_notification(int p_what) { } if (percent_visible) { - int fh=font->get_height(); String txt=itos(int(get_unit_value()*100))+"%"; font->draw_halign(get_canvas_item(),Point2(0,font->get_ascent()+(get_size().height-font->get_height())/2),HALIGN_CENTER,get_size().width,txt,font_color); } diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp index 786ce27a0c..3a9ed4c6c3 100644 --- a/scene/gui/rich_text_label.cpp +++ b/scene/gui/rich_text_label.cpp @@ -270,7 +270,6 @@ if (m_height > line_height) {\ if (p_mode!=PROCESS_CACHE) { lh=line<l.height_caches.size()?l.height_caches[line]:1; } - bool found_space=false; while (c[end]!=0 && !(end && c[end-1]==' ' && c[end]!=' ')) { @@ -284,30 +283,13 @@ if (m_height > line_height) {\ } w+=cw; - - if (c[end]==' ') { - - fw+=cw; - /* - if (p_mode==PROCESS_CACHE) { - fw+=cw; - } else if (align==ALIGN_FILL && line<l.space_caches.size() && l.space_caches[line]>0) { - //print_line(String(c,end)+": "+itos(l.offset_caches[line])+"/"+itos(l.space_caches[line])); - //sub_space=cw; - found_space=true; - } else { - fw+=cw; - }*/ - } else { - fw+=cw; - } + fw+=cw; end++; } ENSURE_WIDTH(w); - //print_line("END: "+String::chr(c[end])+"."); if (end && c[end-1]==' ') { if (p_mode==PROCESS_CACHE) { spaces_size+=font->get_char_size(' ').width; @@ -319,27 +301,17 @@ if (m_height > line_height) {\ } spaces++; - /* - if (found_space) { - int ln = MIN(l.offset_caches.size()-1,line); - - fw+=l.offset_caches[ln]/l.space_caches[ln]; - }*/ - } { - int ofs=0; for(int i=0;i<end;i++) { int pofs=wofs+ofs; - - if (p_mode==PROCESS_POINTER && r_click_char && p_click_pos.y>=p_ofs.y+y && p_click_pos.y<=p_ofs.y+y+lh) { //int o = (wofs+w)-p_click_pos.x; @@ -354,15 +326,6 @@ if (m_height > line_height) {\ if (p_click_pos.x-cw/2>p_ofs.x+align_ofs+pofs) { rchar=int((&c[i])-cf); - //print_line("GOT: "+itos(rchar)); - - - //if (i==end-1 && p_click_pos.x+cw/2 > pofs) - // rchar++; - //int o = (wofs+w)-p_click_pos.x; - - // if (o>cw/2) - // rchar++; } @@ -402,12 +365,9 @@ if (m_height > line_height) {\ } - //print_line("draw char: "+String::chr(c[i])); - if (underline) { Color uc=color; uc.a*=0.5; - //VS::get_singleton()->canvas_item_add_line(ci,Point2(pofs,y+ascent+2),Point2(pofs+cw,y+ascent+2),uc); int uy = y+lh-fh+ascent+2; VS::get_singleton()->canvas_item_add_line(ci,p_ofs+Point2(align_ofs+pofs,uy),p_ofs+Point2(align_ofs+pofs+cw,uy),uc); } @@ -462,28 +422,6 @@ if (m_height > line_height) {\ if (p_mode!=PROCESS_CACHE) lh = line<l.height_caches.size()?l.height_caches[line]:1; - -#if 0 - if (p_mode==PROCESS_POINTER && r_click_item ) { - //previous last "wrapped" line - int pl = line-1; - if (pl<0 || lines[pl].height_caches.size()==0) - break; - int py=lines[pl].offset_caches[ lines[pl].offset_caches.size() -1 ]; - int ph=lines[pl].height_caches[ lines[pl].height_caches.size() -1 ]; - print_line("py: "+itos(py)); - print_line("ph: "+itos(ph)); - - rchar=0; - if (p_click_pos.y>=py && p_click_pos.y<=py+ph) { - if (r_outside) *r_outside=true; - *r_click_item=it; - *r_click_char=rchar; - return; - } - } - -#endif } break; case ITEM_TABLE: { @@ -493,7 +431,6 @@ if (m_height > line_height) {\ int vseparation=get_constant("table_vseparation"); Color ccolor = _find_color(table,p_base_color); Vector2 draw_ofs = Point2(wofs,y); - int max_y=get_size().height; if (p_mode==PROCESS_CACHE) { @@ -1825,7 +1762,6 @@ bool RichTextLabel::search(const String& p_string,bool p_from_selection) { charidx=selection.to_char+1; } - int line=-1; while(it) { if (it->type==ITEM_TEXT) { @@ -1941,11 +1877,30 @@ bool RichTextLabel::is_using_bbcode() const { return use_bbcode; } + +String RichTextLabel::get_text() { + String text = ""; + Item *it = main; + while (it) { + if (it->type == ITEM_TEXT) { + ItemText *t = static_cast<ItemText*>(it); + text += t->text; + } else if (it->type == ITEM_NEWLINE) { + text += "\n"; + } else if (it->type == ITEM_INDENT) { + text += "\t"; + } + it=_get_next_item(it,true); + } + return text; +} + void RichTextLabel::_bind_methods() { ObjectTypeDB::bind_method(_MD("_input_event"),&RichTextLabel::_input_event); ObjectTypeDB::bind_method(_MD("_scroll_changed"),&RichTextLabel::_scroll_changed); + ObjectTypeDB::bind_method(_MD("get_text"),&RichTextLabel::get_text); ObjectTypeDB::bind_method(_MD("add_text","text"),&RichTextLabel::add_text); ObjectTypeDB::bind_method(_MD("add_image","image:Texture"),&RichTextLabel::add_image); ObjectTypeDB::bind_method(_MD("newline"),&RichTextLabel::add_newline); diff --git a/scene/gui/rich_text_label.h b/scene/gui/rich_text_label.h index 635fe87ad4..5147905a0e 100644 --- a/scene/gui/rich_text_label.h +++ b/scene/gui/rich_text_label.h @@ -280,6 +280,7 @@ protected: public: + String get_text(); void add_text(const String& p_text); void add_image(const Ref<Texture>& p_image); void add_newline(); diff --git a/scene/gui/scroll_container.cpp b/scene/gui/scroll_container.cpp index 9bf93aff77..190e8e141f 100644 --- a/scene/gui/scroll_container.cpp +++ b/scene/gui/scroll_container.cpp @@ -177,7 +177,6 @@ void ScrollContainer::_input_event(const InputEvent& p_input_event) { void ScrollContainer::_update_scrollbar_pos() { - Size2 size = get_size(); Size2 hmin = h_scroll->get_combined_minimum_size(); Size2 vmin = v_scroll->get_combined_minimum_size(); diff --git a/scene/gui/tab_container.cpp b/scene/gui/tab_container.cpp index 5eb579f1d2..0e0339c488 100644 --- a/scene/gui/tab_container.cpp +++ b/scene/gui/tab_container.cpp @@ -40,8 +40,6 @@ int TabContainer::_get_top_margin() const { int h = MAX( tab_bg->get_minimum_size().height,tab_fg->get_minimum_size().height); -// h+=MIN( get_constant("label_valign_fg"), get_constant("label_valign_bg") ); - int ch = font->get_height();; for(int i=0;i<get_child_count();i++) { @@ -207,9 +205,7 @@ void TabContainer::_notification(int p_what) { Ref<StyleBox> tab_bg = get_stylebox("tab_bg"); Ref<StyleBox> tab_fg = get_stylebox("tab_fg"); Ref<Texture> incr = get_icon("increment"); - Ref<Texture> incr_hl = get_icon("increment_hilite"); Ref<Texture> decr = get_icon("decrement"); - Ref<Texture> decr_hl = get_icon("decrement_hilite"); Ref<Texture> menu = get_icon("menu"); Ref<Texture> menu_hl = get_icon("menu_hl"); Ref<Font> font = get_font("font"); @@ -219,9 +215,6 @@ void TabContainer::_notification(int p_what) { int side_margin = get_constant("side_margin"); int top_margin = _get_top_margin(); - int label_valign_fg = get_constant("label_valign_fg"); - int label_valign_bg = get_constant("label_valign_bg"); - Size2 top_size = Size2( size.width, top_margin ); @@ -338,17 +331,14 @@ void TabContainer::_notification(int p_what) { Ref<StyleBox> sb; - int va; Color col; if (idx==current) { sb=tab_fg; - va=label_valign_fg; col=color_fg; } else { sb=tab_bg; - va=label_valign_bg; col=color_bg; } @@ -371,23 +361,7 @@ void TabContainer::_notification(int p_what) { } font->draw(ci, Point2i( lpos.x, sb->get_margin(MARGIN_TOP)+((sb_rect.size.y-sb_ms.y)-font->get_height())/2+font->get_ascent() ), s, col ); - //ofs+=sb_ms.x+w; - - /* - int sb_mw = sb->get_minimum_size().width; - int font_ofs = sb_mw / 2; - - Rect2i rect =Rect2( ofs, 0, w+sb_mw, top_margin); - rect.size - sb->draw(ci,rect); - rect.y+=va; - rect.height+=va; - int font_y = (rect.height - font->get_height())/2; - - font->draw(ci, Point2( ofs+font_ofs, va+font_y ), s, col ); - -*/ idx++; } @@ -477,7 +451,6 @@ void TabContainer::set_current_tab(int p_current) { ERR_FAIL_INDEX( p_current, get_tab_count() ); - //printf("DEBUG %p: set_current_tab to %i\n", this, p_current); current=p_current; int idx=0; @@ -560,7 +533,6 @@ Control* TabContainer::get_current_tab_control() const { void TabContainer::remove_child_notify(Node *p_child) { int tc = get_tab_count(); -// bool set_curent=false; if (current==tc-1) { current--; if (current<0) @@ -705,9 +677,6 @@ Size2 TabContainer::get_minimum_size() const { if (c->is_set_as_toplevel()) continue; - //if (!c->has_meta("_tab_name")) - // continue; - if (!c->is_visible()) continue; diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index e106f0dfc6..55e1a2cc52 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -4122,7 +4122,7 @@ void TextEdit::_update_completion_candidates() { } } - if (l[cursor.column - 1] == '(' && !pre_keyword && !completion_strings[0].begins_with("\"")) { + if (cursor.column > 0 && l[cursor.column - 1] == '(' && !pre_keyword && !completion_strings[0].begins_with("\"")) { cancel = true; } @@ -4137,16 +4137,28 @@ void TextEdit::_update_completion_candidates() { completion_options.clear(); completion_index=0; completion_base=s; - int ci_match=0; Vector<float> sim_cache; for(int i=0;i<completion_strings.size();i++) { + if (s == completion_strings[i]) { + // A perfect match, stop completion + _cancel_completion(); + return; + } if (s.is_subsequence_ofi(completion_strings[i])) { // don't remove duplicates if no input is provided if (s != "" && completion_options.find(completion_strings[i]) != -1) { continue; } // Calculate the similarity to keep completions in good order - float similarity = s.similarity(completion_strings[i]); + float similarity; + if (completion_strings[i].to_lower().begins_with(s.to_lower())) { + // Substrings are the best candidates + similarity = 1.1; + } else { + // Otherwise compute the similarity + similarity = s.to_lower().similarity(completion_strings[i].to_lower()); + } + int comp_size = completion_options.size(); if (comp_size == 0) { completion_options.push_back(completion_strings[i]); @@ -4156,8 +4168,8 @@ void TextEdit::_update_completion_candidates() { int pos = 0; do { comp_sim = sim_cache[pos++]; - } while(pos < comp_size && similarity <= comp_sim); - pos--; // Pos will be off by one + } while(pos < comp_size && similarity < comp_sim); + pos = similarity > comp_sim ? pos - 1 : pos; // Pos will be off by one completion_options.insert(pos, completion_strings[i]); sim_cache.insert(pos, similarity); } diff --git a/scene/gui/texture_button.cpp b/scene/gui/texture_button.cpp index c885b2d73e..df2f5edd48 100644 --- a/scene/gui/texture_button.cpp +++ b/scene/gui/texture_button.cpp @@ -76,10 +76,7 @@ void TextureButton::_notification(int p_what) { switch( p_what ) { case NOTIFICATION_DRAW: { - RID canvas_item = get_canvas_item(); DrawMode draw_mode = get_draw_mode(); -// if (normal.is_null()) -// break; Ref<Texture> texdraw; diff --git a/scene/gui/texture_frame.cpp b/scene/gui/texture_frame.cpp index 143f0e83b8..4aa45af863 100644 --- a/scene/gui/texture_frame.cpp +++ b/scene/gui/texture_frame.cpp @@ -37,9 +37,6 @@ void TextureFrame::_notification(int p_what) { return; - - RID ci = get_canvas_item(); - switch(stretch_mode) { case STRETCH_SCALE_ON_EXPAND: { Size2 s=expand?get_size():texture->get_size(); @@ -85,23 +82,6 @@ void TextureFrame::_notification(int p_what) { } - -/* - Vector<Point2> points; - points.resize(4); - points[0]=Point2(0,0); - points[1]=Point2(s.x,0); - points[2]=Point2(s.x,s.y); - points[3]=Point2(0,s.y); - Vector<Point2> uvs; - uvs.resize(4); - uvs[0]=Point2(0,0); - uvs[1]=Point2(1,0); - uvs[2]=Point2(1,1); - uvs[3]=Point2(0,1); - - VisualServer::get_singleton()->canvas_item_add_primitive(ci,points,Vector<Color>(),uvs,texture->get_rid()); -*/ } } diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index db14c15db8..a3d6ac9714 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -973,22 +973,12 @@ int Tree::draw_item(const Point2i& p_pos,const Point2& p_draw_ofs, const Size2& /* Draw label, if height fits */ - Point2i guide_from; bool skip=(p_item==root && hide_root); - // printf("skip (%p == %p && %i) %i\n",p_item,root,hide_root,skip); if (!skip && (p_pos.y+label_h-cache.offset.y)>0) { - // printf("entering\n"); - - int height=label_h; - - Point2i guide_space=Point2i( cache.guide_width , height ); - - - if (!hide_folding && p_item->childs) { //has childs, draw the guide box Ref<Texture> arrow; @@ -1345,7 +1335,7 @@ int Tree::_count_selected_items(TreeItem* p_from) const { return count; } -void Tree::select_single_item(TreeItem *p_selected,TreeItem *p_current,int p_col,TreeItem *p_prev,bool *r_in_range) { +void Tree::select_single_item(TreeItem *p_selected, TreeItem *p_current, int p_col, TreeItem *p_prev, bool *r_in_range, bool p_force_deselect) { TreeItem::Cell &selected_cell=p_selected->cells[p_col]; @@ -1419,7 +1409,7 @@ void Tree::select_single_item(TreeItem *p_selected,TreeItem *p_current,int p_col } else { - if (r_in_range && *r_in_range) { + if (r_in_range && *r_in_range && !p_force_deselect) { if (!c.selected && c.selectable) { @@ -1427,7 +1417,7 @@ void Tree::select_single_item(TreeItem *p_selected,TreeItem *p_current,int p_col emit_signal("multi_selected",p_current,i,true); } - } else if (!r_in_range){ + } else if (!r_in_range || p_force_deselect){ if (select_mode==SELECT_MULTI && c.selected) emit_signal("multi_selected",p_current,i,false); c.selected=false; @@ -1446,7 +1436,7 @@ void Tree::select_single_item(TreeItem *p_selected,TreeItem *p_current,int p_col while (c) { - select_single_item(p_selected,c,p_col,p_prev,r_in_range); + select_single_item(p_selected,c,p_col,p_prev,r_in_range,p_current->is_collapsed() || p_force_deselect); c=c->next; } @@ -1660,7 +1650,6 @@ int Tree::propagate_mouse_event(const Point2i &p_pos,int x_ofs,int y_ofs,bool p_ /* editing */ bool bring_up_editor=force_select_on_already_selected ? (c.selected && already_selected) : c.selected; - bool bring_up_value_editor=false; String editor_text=c.text; switch (c.mode) { @@ -1711,9 +1700,6 @@ int Tree::propagate_mouse_event(const Point2i &p_pos,int x_ofs,int y_ofs,bool p_ bring_up_editor=false; } else { - Ref<Texture> updown = cache.updown; - - if (x >= (col_width-item_h/2)) { /* touching the combo */ @@ -1760,7 +1746,6 @@ int Tree::propagate_mouse_event(const Point2i &p_pos,int x_ofs,int y_ofs,bool p_ } else { editor_text=String::num( p_item->cells[col].val, Math::decimals( p_item->cells[col].step ) ); - bring_up_value_editor=false; if (select_mode==SELECT_MULTI && get_tree()->get_last_event_id() == focus_in_id) bring_up_editor=false; @@ -2279,7 +2264,7 @@ void Tree::_input_event(InputEvent p_event) { update(); } - if (pressing_for_editor && popup_edited_item && popup_edited_item->get_cell_mode(popup_edited_item_col)==TreeItem::CELL_MODE_RANGE) { + if (pressing_for_editor && popup_edited_item && (popup_edited_item->get_cell_mode(popup_edited_item_col)==TreeItem::CELL_MODE_RANGE || popup_edited_item->get_cell_mode(popup_edited_item_col)==TreeItem::CELL_MODE_RANGE_EXPRESSION)) { //range drag if (!range_drag_enabled) { diff --git a/scene/gui/tree.h b/scene/gui/tree.h index 0172546c1d..f5100ab5b6 100644 --- a/scene/gui/tree.h +++ b/scene/gui/tree.h @@ -331,7 +331,7 @@ friend class TreeItem; // void draw_item_text(String p_text,const Ref<Texture>& p_icon,int p_icon_max_w,bool p_tool,Rect2i p_rect,const Color& p_color); void draw_item_rect(const TreeItem::Cell& p_cell,const Rect2i& p_rect,const Color& p_color); int draw_item(const Point2i& p_pos,const Point2& p_draw_ofs, const Size2& p_draw_size,TreeItem *p_item); - void select_single_item(TreeItem *p_selected,TreeItem *p_current,int p_col,TreeItem *p_prev=NULL,bool *r_in_range=NULL); + void select_single_item(TreeItem *p_selected,TreeItem *p_current,int p_col,TreeItem *p_prev=NULL,bool *r_in_range=NULL,bool p_force_deselect=false); int propagate_mouse_event(const Point2i &p_pos,int x_ofs,int y_ofs,bool p_doubleclick,TreeItem *p_item,int p_button,const InputModifierState& p_mod); void text_editor_enter(String p_text); void _text_editor_modal_close(); diff --git a/scene/gui/video_player.cpp b/scene/gui/video_player.cpp index e9ff76bd91..1be847929d 100644 --- a/scene/gui/video_player.cpp +++ b/scene/gui/video_player.cpp @@ -116,7 +116,6 @@ void VideoPlayer::_notification(int p_notification) { case NOTIFICATION_ENTER_TREE: { - //set_idle_process(false); //don't annoy if (stream.is_valid() && autoplay && !get_tree()->is_editor_hint()) { play(); } @@ -141,13 +140,6 @@ void VideoPlayer::_notification(int p_notification) { playback->update(delta); - /*int prev_width = texture->get_width(); - stream->pop_frame(texture); - if (prev_width == 0) { - update(); - minimum_size_changed(); - };*/ - } break; case NOTIFICATION_DRAW: { @@ -158,8 +150,6 @@ void VideoPlayer::_notification(int p_notification) { return; Size2 s=expand?get_size():texture->get_size(); - RID ci = get_canvas_item(); - printf("drawing with size %f, %f\n", s.x, s.y); draw_texture_rect(texture,Rect2(Point2(),s),false); } break; diff --git a/scene/main/node.cpp b/scene/main/node.cpp index bea6e75aef..55106f5ee7 100644 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -1206,7 +1206,6 @@ void Node::add_to_group(const StringName& p_identifier,bool p_persistent) { GroupData gd; - SceneTree::Group *gptr=NULL; if (data.tree) { gd.group=data.tree->add_to_group(p_identifier,this); } else { @@ -1513,7 +1512,7 @@ int Node::get_position_in_parent() const { -Node *Node::duplicate(bool p_use_instancing) const { +Node *Node::_duplicate(bool p_use_instancing) const { Node *node=NULL; @@ -1592,9 +1591,21 @@ Node *Node::duplicate(bool p_use_instancing) const { node->add_child(dup); } + return node; } +Node *Node::duplicate(bool p_use_instancing) const { + + Node* dupe = _duplicate(p_use_instancing); + + if (dupe) { + _duplicate_signals(this,dupe); + } + + return dupe; +} + void Node::_duplicate_and_reown(Node* p_new_parent, const Map<Node*,Node*>& p_reown_map) const { @@ -1664,12 +1675,13 @@ void Node::_duplicate_and_reown(Node* p_new_parent, const Map<Node*,Node*>& p_re void Node::_duplicate_signals(const Node* p_original,Node* p_copy) const { - if (this!=p_original && get_owner()!=p_original) + if (this!=p_original && (get_owner()!=p_original && get_owner()!=p_original->get_owner())) return; List<Connection> conns; get_all_signal_connections(&conns); + for (List<Connection>::Element *E=conns.front();E;E=E->next()) { if (E->get().flags&CONNECT_PERSIST) { @@ -1678,14 +1690,17 @@ void Node::_duplicate_signals(const Node* p_original,Node* p_copy) const { Node *copy = p_copy->get_node(p); Node *target = E->get().target->cast_to<Node>(); - if (!target) + if (!target) { continue; + } NodePath ptarget = p_original->get_path_to(target); Node *copytarget = p_copy->get_node(ptarget); + if (copy && copytarget) { copy->connect(E->get().signal,copytarget,E->get().method,E->get().binds,CONNECT_PERSIST); } + } } diff --git a/scene/main/node.h b/scene/main/node.h index dcc3829d15..10cfc5f9e6 100644 --- a/scene/main/node.h +++ b/scene/main/node.h @@ -138,6 +138,8 @@ private: void _duplicate_signals(const Node* p_original,Node* p_copy) const; void _duplicate_and_reown(Node* p_new_parent, const Map<Node*,Node*>& p_reown_map) const; + Node *_duplicate(bool p_use_instancing) const; + Array _get_children() const; Array _get_groups() const; diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index c6a32d5568..bb6e6e289b 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -1083,7 +1083,7 @@ void Viewport::_propagate_exit_world(Node *p_node) { Spatial *s = p_node->cast_to<Spatial>(); if (s) { - s->notification(Spatial::NOTIFICATION_EXIT_WORLD,false); + s->notification(Spatial::NOTIFICATION_EXIT_WORLD, true); } else { Viewport *v = p_node->cast_to<Viewport>(); if (v) { diff --git a/scene/main/viewport.h b/scene/main/viewport.h index aaa640e0e6..22a97a9888 100644 --- a/scene/main/viewport.h +++ b/scene/main/viewport.h @@ -39,6 +39,7 @@ */ class Camera; +class Camera2D; class Listener; class Control; class CanvasItem; diff --git a/scene/resources/animation.cpp b/scene/resources/animation.cpp index 098801bcf5..1d15b6f2bc 100644 --- a/scene/resources/animation.cpp +++ b/scene/resources/animation.cpp @@ -1997,9 +1997,6 @@ void Animation::_transform_track_optimize(int p_idx,float p_alowed_linear_err,fl void Animation::optimize(float p_allowed_linear_err,float p_allowed_angular_err,float p_angle_max) { - - int total_tt=0; - for(int i=0;i<tracks.size();i++) { if (tracks[i]->type==TYPE_TRANSFORM) diff --git a/scene/resources/dynamic_font.cpp b/scene/resources/dynamic_font.cpp index c3b40f7add..67587a8f8b 100644 --- a/scene/resources/dynamic_font.cpp +++ b/scene/resources/dynamic_font.cpp @@ -434,7 +434,7 @@ void DynamicFontAtSize::_update_char(CharType p_char) { int w = slot->bitmap.width; int h = slot->bitmap.rows; - int p = slot->bitmap.pitch; + //int p = slot->bitmap.pitch; int yofs=slot->bitmap_top; int xofs=slot->bitmap_left; int advance=slot->advance.x>>6; diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp index e56314c1f8..f6213f74e8 100644 --- a/scene/resources/material.cpp +++ b/scene/resources/material.cpp @@ -406,10 +406,10 @@ void FixedMaterial::_bind_methods() { BIND_CONSTANT( PARAM_SHADE_PARAM ); BIND_CONSTANT( PARAM_MAX ); - BIND_CONSTANT( TEXCOORD_SPHERE ); BIND_CONSTANT( TEXCOORD_UV ); BIND_CONSTANT( TEXCOORD_UV_TRANSFORM ); BIND_CONSTANT( TEXCOORD_UV2 ); + BIND_CONSTANT( TEXCOORD_SPHERE ); BIND_CONSTANT( FLAG_USE_ALPHA ); BIND_CONSTANT( FLAG_USE_COLOR_ARRAY ); diff --git a/scene/resources/mesh.cpp b/scene/resources/mesh.cpp index a1a1f0a935..921466585d 100644 --- a/scene/resources/mesh.cpp +++ b/scene/resources/mesh.cpp @@ -30,7 +30,8 @@ #include "scene/resources/concave_polygon_shape.h" #include "scene/resources/convex_polygon_shape.h" #include "surface_tool.h" -static const char*_array_name[]={ + +static const char* _array_name[]={ "vertex_array", "normal_array", "tangent_array", @@ -847,7 +848,6 @@ Ref<Mesh> Mesh::create_outline(float p_margin) const { } { - int tc=0; DVector<int>::Write ir; DVector<int> indices =arrays[ARRAY_INDEX]; bool has_indices=false; diff --git a/scene/resources/packed_scene.cpp b/scene/resources/packed_scene.cpp index 4f5eed8796..c36480420b 100644 --- a/scene/resources/packed_scene.cpp +++ b/scene/resources/packed_scene.cpp @@ -471,7 +471,6 @@ Error SceneState::_parse_node(Node *p_owner,Node *p_node,int p_parent_idx, Map<S } } #endif - int subscene_prop_search_from=0; // all setup, we then proceed to check all properties for the node // and save the ones that are worth saving @@ -479,8 +478,6 @@ Error SceneState::_parse_node(Node *p_owner,Node *p_node,int p_parent_idx, Map<S List<PropertyInfo> plist; p_node->get_property_list(&plist); - bool saved_script=false; - for (List<PropertyInfo>::Element *E=plist.front();E;E=E->next()) { @@ -528,23 +525,7 @@ Error SceneState::_parse_node(Node *p_owner,Node *p_node,int p_parent_idx, Map<S break; } } -#if 0 -// this workaround ended up causing problems: -https://github.com/godotengine/godot/issues/3127 - if (saved_script && exists && p_node->get_script_instance()) { - //if this is an overriden value by another script, save it anyway - //as the script change will erase it - //https://github.com/godotengine/godot/issues/2958 - - bool valid=false; - p_node->get_script_instance()->get_property_type(name,&valid); - if (valid) { - exists=false; - isdefault=false; - } - } -#endif if (exists) { @@ -577,9 +558,6 @@ https://github.com/godotengine/godot/issues/3127 } } - if (name=="script/script") - saved_script=true; - NodeData::Property prop; prop.name=_nm_get_string( name,name_map); prop.value=_vm_get_variant( value, variant_map); |