From da895e8542fcd19545287e4a99654f17c2d4c3d8 Mon Sep 17 00:00:00 2001 From: Guilherme Felipe Date: Thu, 3 Sep 2015 19:23:39 -0300 Subject: [PATCH 01/78] Fix for smoothing camera2D when you change zoom, fix #2074. --- scene/2d/camera_2d.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scene/2d/camera_2d.cpp b/scene/2d/camera_2d.cpp index 49683da226..52ae5d2954 100644 --- a/scene/2d/camera_2d.cpp +++ b/scene/2d/camera_2d.cpp @@ -57,7 +57,9 @@ void Camera2D::_update_scroll() { void Camera2D::set_zoom(const Vector2 &p_zoom) { zoom = p_zoom; + Point2 old_smoothed_camera_pos = smoothed_camera_pos; _update_scroll(); + smoothed_camera_pos = old_smoothed_camera_pos; }; Vector2 Camera2D::get_zoom() const { From abde648e6844fa328affed0f1002f56edb4ab69c Mon Sep 17 00:00:00 2001 From: Franklin Sobrinho Date: Sun, 18 Oct 2015 13:31:44 -0300 Subject: [PATCH 02/78] Small fixes in some editor dialogs --- .../animation_player_editor_plugin.cpp | 1 + .../plugins/canvas_item_editor_plugin.cpp | 60 +++++++++++-------- tools/editor/plugins/mesh_editor_plugin.cpp | 13 ++-- .../plugins/multimesh_editor_plugin.cpp | 20 ++----- .../editor/plugins/multimesh_editor_plugin.h | 8 +-- .../editor/plugins/spatial_editor_plugin.cpp | 42 ++++--------- 6 files changed, 65 insertions(+), 79 deletions(-) diff --git a/tools/editor/plugins/animation_player_editor_plugin.cpp b/tools/editor/plugins/animation_player_editor_plugin.cpp index f8c484e886..65565aae85 100644 --- a/tools/editor/plugins/animation_player_editor_plugin.cpp +++ b/tools/editor/plugins/animation_player_editor_plugin.cpp @@ -1279,6 +1279,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor) { add_child(file); name_dialog = memnew( ConfirmationDialog ); + name_dialog->set_title("Create New Animation"); name_dialog->set_hide_on_ok(false); add_child(name_dialog); name = memnew( LineEdit ); diff --git a/tools/editor/plugins/canvas_item_editor_plugin.cpp b/tools/editor/plugins/canvas_item_editor_plugin.cpp index d318f6f6fa..b03eed77b1 100644 --- a/tools/editor/plugins/canvas_item_editor_plugin.cpp +++ b/tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -41,9 +41,9 @@ class SnapDialog : public ConfirmationDialog { OBJ_TYPE(SnapDialog,ConfirmationDialog); - -protected: - friend class CanvasItemEditor; + +friend class CanvasItemEditor; + SpinBox *grid_offset_x; SpinBox *grid_offset_y; SpinBox *grid_step_x; @@ -58,63 +58,75 @@ public: Label *label; VBoxContainer *container; GridContainer *child_container; - + set_title("Configure Snap"); get_ok()->set_text("Close"); - container = memnew(VBoxContainer); + + container = memnew( VBoxContainer ); add_child(container); - - child_container = memnew(GridContainer); + set_child_rect(container); + + child_container = memnew( GridContainer ); child_container->set_columns(3); container->add_child(child_container); - - label = memnew(Label); + + label = memnew( Label ); label->set_text("Grid Offset:"); child_container->add_child(label); - grid_offset_x=memnew(SpinBox); + label->set_h_size_flags(SIZE_EXPAND_FILL); + + grid_offset_x = memnew( SpinBox ); grid_offset_x->set_min(-SPIN_BOX_GRID_RANGE); grid_offset_x->set_max(SPIN_BOX_GRID_RANGE); grid_offset_x->set_suffix("px"); child_container->add_child(grid_offset_x); - grid_offset_y=memnew(SpinBox); + + grid_offset_y = memnew( SpinBox ); grid_offset_y->set_min(-SPIN_BOX_GRID_RANGE); grid_offset_y->set_max(SPIN_BOX_GRID_RANGE); grid_offset_y->set_suffix("px"); child_container->add_child(grid_offset_y); - label = memnew(Label); + label = memnew( Label ); label->set_text("Grid Step:"); child_container->add_child(label); - grid_step_x=memnew(SpinBox); + label->set_h_size_flags(SIZE_EXPAND_FILL); + + grid_step_x = memnew( SpinBox ); grid_step_x->set_min(-SPIN_BOX_GRID_RANGE); grid_step_x->set_max(SPIN_BOX_GRID_RANGE); grid_step_x->set_suffix("px"); child_container->add_child(grid_step_x); - grid_step_y=memnew(SpinBox); + + grid_step_y = memnew( SpinBox ); grid_step_y->set_min(-SPIN_BOX_GRID_RANGE); grid_step_y->set_max(SPIN_BOX_GRID_RANGE); grid_step_y->set_suffix("px"); child_container->add_child(grid_step_y); - - container->add_child(memnew(HSeparator)); - child_container = memnew(GridContainer); + container->add_child( memnew( HSeparator ) ); + + child_container = memnew( GridContainer ); child_container->set_columns(2); container->add_child(child_container); - label = memnew(Label); + label = memnew( Label ); label->set_text("Rotation Offset:"); child_container->add_child(label); - rotation_offset=memnew(SpinBox); + label->set_h_size_flags(SIZE_EXPAND_FILL); + + rotation_offset = memnew( SpinBox ); rotation_offset->set_min(-SPIN_BOX_ROTATION_RANGE); rotation_offset->set_max(SPIN_BOX_ROTATION_RANGE); rotation_offset->set_suffix("deg"); child_container->add_child(rotation_offset); - - label = memnew(Label); + + label = memnew( Label ); label->set_text("Rotation Step:"); child_container->add_child(label); - rotation_step=memnew(SpinBox); + label->set_h_size_flags(SIZE_EXPAND_FILL); + + rotation_step = memnew( SpinBox ); rotation_step->set_min(-SPIN_BOX_ROTATION_RANGE); rotation_step->set_max(SPIN_BOX_ROTATION_RANGE); rotation_step->set_suffix("deg"); @@ -2278,7 +2290,7 @@ void CanvasItemEditor::_popup_callback(int p_op) { } break; case SNAP_CONFIGURE: { ((SnapDialog *)snap_dialog)->set_fields(snap_offset, snap_step, snap_rotation_offset, snap_rotation_step); - snap_dialog->popup_centered(Size2(200,160)); + snap_dialog->popup_centered(Size2(220,160)); } break; case ZOOM_IN: { zoom=zoom*(1.0/0.5); @@ -3173,7 +3185,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { p->add_item("Paste Pose",ANIM_PASTE_POSE); p->add_item("Clear Pose",ANIM_CLEAR_POSE,KEY_MASK_SHIFT|KEY_K); - snap_dialog = memnew(SnapDialog); + snap_dialog = memnew( SnapDialog ); snap_dialog->connect("confirmed",this,"_snap_changed"); add_child(snap_dialog); diff --git a/tools/editor/plugins/mesh_editor_plugin.cpp b/tools/editor/plugins/mesh_editor_plugin.cpp index 13d4c8db5a..34ccf79fee 100644 --- a/tools/editor/plugins/mesh_editor_plugin.cpp +++ b/tools/editor/plugins/mesh_editor_plugin.cpp @@ -160,7 +160,7 @@ void MeshInstanceEditor::_menu_option(int p_option) { } break; case MENU_OPTION_CREATE_OUTLINE_MESH: { - outline_dialog->popup_centered_minsize(); + outline_dialog->popup_centered(Vector2(200, 90)); } break; } @@ -231,14 +231,19 @@ MeshInstanceEditor::MeshInstanceEditor() { options->get_popup()->connect("item_pressed", this,"_menu_option"); outline_dialog = memnew( ConfirmationDialog ); - outline_dialog->set_title("Outline Size: "); + outline_dialog->set_title("Create Outline Mesh"); + + VBoxContainer *outline_dialog_vbc = memnew( VBoxContainer ); + outline_dialog->add_child(outline_dialog_vbc); + outline_dialog->set_child_rect(outline_dialog_vbc); + outline_size = memnew( SpinBox ); outline_size->set_min(0.001); outline_size->set_max(1024); outline_size->set_step(0.001); outline_size->set_val(0.05); - outline_dialog->add_child(outline_size); - outline_dialog->set_child_rect(outline_size); + outline_dialog_vbc->add_margin_child("Outline Size:",outline_size); + add_child(outline_dialog); outline_dialog->connect("confirmed",this,"_create_outline_mesh"); diff --git a/tools/editor/plugins/multimesh_editor_plugin.cpp b/tools/editor/plugins/multimesh_editor_plugin.cpp index 3c88b1d3a8..a5c823f8bd 100644 --- a/tools/editor/plugins/multimesh_editor_plugin.cpp +++ b/tools/editor/plugins/multimesh_editor_plugin.cpp @@ -289,7 +289,7 @@ void MultiMeshEditor::_menu_option(int p_option) { _last_pp_node=node; } - populate_dialog->popup_centered(Size2(250,395)); + populate_dialog->popup_centered(Size2(250,380)); } break; } @@ -325,10 +325,8 @@ MultiMeshEditor::MultiMeshEditor() { options = memnew( MenuButton ); - //add_child(options); SpatialEditor::get_singleton()->add_control_to_menu_panel(options); - options->set_area_as_parent_rect(); - + options->set_text("MultiMesh"); options->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon("MultiMeshInstance","EditorIcons")); @@ -373,12 +371,12 @@ MultiMeshEditor::MultiMeshEditor() { populate_axis->select(2); vbc->add_margin_child("Mesh Up Axis:",populate_axis); - populate_rotate_random = memnew( HScrollBar ); + populate_rotate_random = memnew( HSlider ); populate_rotate_random->set_max(1); populate_rotate_random->set_step(0.01); vbc->add_margin_child("Random Rotation:",populate_rotate_random); - populate_tilt_random = memnew( HScrollBar ); + populate_tilt_random = memnew( HSlider ); populate_tilt_random->set_max(1); populate_tilt_random->set_step(0.01); vbc->add_margin_child("Random Tilt:",populate_tilt_random); @@ -416,8 +414,7 @@ MultiMeshEditor::MultiMeshEditor() { std->connect("selected",this,"_browsed"); _last_pp_node=NULL; - //options->set_anchor(MARGIN_LEFT,Control::ANCHOR_END); - //options->set_anchor(MARGIN_RIGHT,Control::ANCHOR_END); + err_dialog = memnew( AcceptDialog ); add_child(err_dialog); } @@ -451,13 +448,6 @@ MultiMeshEditorPlugin::MultiMeshEditorPlugin(EditorNode *p_node) { multimesh_editor = memnew( MultiMeshEditor ); editor->get_viewport()->add_child(multimesh_editor); -// multimesh_editor->set_anchor(MARGIN_LEFT,Control::ANCHOR_END); -// multimesh_editor->set_anchor(MARGIN_RIGHT,Control::ANCHOR_END); - multimesh_editor->set_margin(MARGIN_LEFT,253); - multimesh_editor->set_margin(MARGIN_RIGHT,310); - multimesh_editor->set_margin(MARGIN_TOP,0); - multimesh_editor->set_margin(MARGIN_BOTTOM,10); - multimesh_editor->options->hide(); } diff --git a/tools/editor/plugins/multimesh_editor_plugin.h b/tools/editor/plugins/multimesh_editor_plugin.h index 4f0c0d008b..edc3dfd55f 100644 --- a/tools/editor/plugins/multimesh_editor_plugin.h +++ b/tools/editor/plugins/multimesh_editor_plugin.h @@ -42,10 +42,10 @@ class MultiMeshEditor : public Control { OBJ_TYPE(MultiMeshEditor, Control ); - friend class MultiMeshEditorPlugin; +friend class MultiMeshEditorPlugin; AcceptDialog *err_dialog; - MenuButton * options; + MenuButton * options; MultiMeshInstance *_last_pp_node; bool browsing_source; @@ -59,8 +59,8 @@ class MultiMeshEditor : public Control { ConfirmationDialog *populate_dialog; OptionButton *populate_axis; - HScrollBar *populate_rotate_random; - HScrollBar *populate_tilt_random; + HSlider *populate_rotate_random; + HSlider *populate_tilt_random; SpinBox *populate_scale_random; SpinBox *populate_scale; SpinBox *populate_amount; diff --git a/tools/editor/plugins/spatial_editor_plugin.cpp b/tools/editor/plugins/spatial_editor_plugin.cpp index 3ab9339265..f3458a768a 100644 --- a/tools/editor/plugins/spatial_editor_plugin.cpp +++ b/tools/editor/plugins/spatial_editor_plugin.cpp @@ -2725,7 +2725,7 @@ void SpatialEditor::_menu_item_pressed(int p_option) { } break; case MENU_TRANSFORM_CONFIGURE_SNAP: { - snap_dialog->popup_centered(Size2(200,160)); + snap_dialog->popup_centered(Size2(200,180)); } break; case MENU_TRANSFORM_LOCAL_COORDS: { @@ -3793,46 +3793,24 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { snap_dialog = memnew( ConfirmationDialog ); snap_dialog->set_title("Snap Settings"); add_child(snap_dialog); - Label *l = memnew(Label); - l->set_text("Translate Snap:"); - l->set_pos(Point2(5,5)); - snap_dialog->add_child(l); + + VBoxContainer *snap_dialog_vbc = memnew( VBoxContainer ); + snap_dialog->add_child(snap_dialog_vbc); + snap_dialog->set_child_rect(snap_dialog_vbc); snap_translate = memnew( LineEdit ); - snap_translate->set_anchor( MARGIN_RIGHT, ANCHOR_END ); - snap_translate->set_begin( Point2(15,22) ); - snap_translate->set_end( Point2(15,35) ); snap_translate->set_text("1"); - snap_dialog->add_child(snap_translate); - - l = memnew(Label); - l->set_text("Rotate Snap (deg.):"); - l->set_pos(Point2(5,45)); - snap_dialog->add_child(l); + snap_dialog_vbc->add_margin_child("Translate Snap:",snap_translate); snap_rotate = memnew( LineEdit ); - snap_rotate->set_anchor( MARGIN_RIGHT, ANCHOR_END ); - snap_rotate->set_begin( Point2(15,62) ); - snap_rotate->set_end( Point2(15,75) ); snap_rotate->set_text("5"); - snap_dialog->add_child(snap_rotate); - - - l = memnew(Label); - l->set_text("Scale Snap (%):"); - l->set_pos(Point2(5,85)); - snap_dialog->add_child(l); + snap_dialog_vbc->add_margin_child("Rotate Snap (deg.):",snap_rotate); snap_scale = memnew( LineEdit ); - snap_scale->set_anchor( MARGIN_RIGHT, ANCHOR_END ); - snap_scale->set_begin( Point2(15,102) ); - snap_scale->set_end( Point2(15,115) ); snap_scale->set_text("5"); - snap_dialog->add_child(snap_scale); + snap_dialog_vbc->add_margin_child("Scale Snap (%):",snap_scale); - //snap_dialog->get_cancel()->hide(); - - /* SNAP DIALOG */ + /* SETTINGS DIALOG */ settings_dialog = memnew( ConfirmationDialog ); settings_dialog->set_title("Viewport Settings"); @@ -3906,7 +3884,7 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { xform_dialog = memnew( ConfirmationDialog ); xform_dialog->set_title("Transform Change"); add_child(xform_dialog); - l = memnew(Label); + Label *l = memnew(Label); l->set_text("Translate:"); l->set_pos(Point2(5,5)); xform_dialog->add_child(l); From ec394950ff7c8213768c9dfb2668f5d65bfdc07a Mon Sep 17 00:00:00 2001 From: Franklin Sobrinho Date: Sun, 18 Oct 2015 15:13:17 -0300 Subject: [PATCH 03/78] Change MeshInstanceEditor outline dialog "Ok" button label --- tools/editor/plugins/mesh_editor_plugin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/editor/plugins/mesh_editor_plugin.cpp b/tools/editor/plugins/mesh_editor_plugin.cpp index 34ccf79fee..cea774f94b 100644 --- a/tools/editor/plugins/mesh_editor_plugin.cpp +++ b/tools/editor/plugins/mesh_editor_plugin.cpp @@ -212,7 +212,6 @@ MeshInstanceEditor::MeshInstanceEditor() { options = memnew( MenuButton ); - //add_child(options); SpatialEditor::get_singleton()->add_control_to_menu_panel(options); options->set_text("Mesh"); @@ -232,6 +231,7 @@ MeshInstanceEditor::MeshInstanceEditor() { outline_dialog = memnew( ConfirmationDialog ); outline_dialog->set_title("Create Outline Mesh"); + outline_dialog->get_ok()->set_text("Create"); VBoxContainer *outline_dialog_vbc = memnew( VBoxContainer ); outline_dialog->add_child(outline_dialog_vbc); From 4621d30d1b63c510c9928d073ef88be5b59248c0 Mon Sep 17 00:00:00 2001 From: firefly2442 Date: Sun, 18 Oct 2015 19:49:30 -0500 Subject: [PATCH 04/78] float to bool variable type, fixes: #2478 --- servers/visual/rasterizer.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers/visual/rasterizer.h b/servers/visual/rasterizer.h index 15c757665b..5063c1e19b 100644 --- a/servers/visual/rasterizer.h +++ b/servers/visual/rasterizer.h @@ -690,7 +690,7 @@ public: Rect2 rect; RID texture; float margin[4]; - float draw_center; + bool draw_center; Color color; CommandStyle() { draw_center=true; type = TYPE_STYLE; } }; From 0a45fb6311023ae39be74d71054fd0042a8ba183 Mon Sep 17 00:00:00 2001 From: firefly2442 Date: Sun, 18 Oct 2015 20:50:32 -0500 Subject: [PATCH 05/78] duplicate conditional check --- tools/editor/plugins/shader_graph_editor_plugin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/editor/plugins/shader_graph_editor_plugin.cpp b/tools/editor/plugins/shader_graph_editor_plugin.cpp index 684e7e32ef..3a7dc26466 100644 --- a/tools/editor/plugins/shader_graph_editor_plugin.cpp +++ b/tools/editor/plugins/shader_graph_editor_plugin.cpp @@ -2542,7 +2542,7 @@ void ShaderGraphView::_notification(int p_what) { void ShaderGraphView::add_node(int p_type, const Vector2 &location) { - if ((p_type==ShaderGraph::NODE_INPUT||p_type==ShaderGraph::NODE_INPUT) && graph->node_count(type, p_type)>0) + if (p_type==ShaderGraph::NODE_INPUT && graph->node_count(type, p_type)>0) return; List existing; From bb68dc5210205da32b721681667360d8f54e2ea9 Mon Sep 17 00:00:00 2001 From: firefly2442 Date: Sun, 18 Oct 2015 21:45:27 -0500 Subject: [PATCH 06/78] remove child variable that is duplicated from parent class --- modules/gdscript/gd_parser.h | 1 - servers/visual/rasterizer_dummy.h | 4 ---- 2 files changed, 5 deletions(-) diff --git a/modules/gdscript/gd_parser.h b/modules/gdscript/gd_parser.h index 134279b6d8..04f3dff3de 100644 --- a/modules/gdscript/gd_parser.h +++ b/modules/gdscript/gd_parser.h @@ -276,7 +276,6 @@ public: }; struct NewLineNode : public Node { - int line; NewLineNode() { type=TYPE_NEWLINE; } }; diff --git a/servers/visual/rasterizer_dummy.h b/servers/visual/rasterizer_dummy.h index 9249ad6256..ea39e9db6a 100644 --- a/servers/visual/rasterizer_dummy.h +++ b/servers/visual/rasterizer_dummy.h @@ -162,10 +162,6 @@ class RasterizerDummy : public Rasterizer { uint32_t format; uint32_t morph_format; - RID material; - bool material_owned; - - Surface() { packed=false; From f256e421b52f248f76a7cb116c49f781f089aa49 Mon Sep 17 00:00:00 2001 From: Julian Murgia - StraToN Date: Mon, 19 Oct 2015 12:26:19 +0200 Subject: [PATCH 07/78] Fixed minor bug : quicklty pointing alternatively Script button and Close button on a tab showed both buttons as hovered --- scene/gui/tabs.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scene/gui/tabs.cpp b/scene/gui/tabs.cpp index 6d84f028b3..10b1a626f0 100644 --- a/scene/gui/tabs.cpp +++ b/scene/gui/tabs.cpp @@ -103,11 +103,13 @@ void Tabs::_input_event(const InputEvent& p_event) { // test hovering right button and close button if (tabs[i].rb_rect.has_point(pos)) { rb_hover=i; + cb_hover=-1; hover_buttons = i; break; } else if (tabs[i].cb_rect.has_point(pos)) { cb_hover=i; + rb_hover=-1; hover_buttons = i; break; } From 1e36f36357ce2a44ffbb11276f0ce86a0dfe8606 Mon Sep 17 00:00:00 2001 From: Franklin Sobrinho Date: Mon, 19 Oct 2015 08:00:41 -0300 Subject: [PATCH 08/78] Bind missing FixedMaterial constants, fixes #2628 --- scene/resources/material.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp index bbb2a386f3..55bb4e9073 100644 --- a/scene/resources/material.cpp +++ b/scene/resources/material.cpp @@ -406,7 +406,6 @@ 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 ); @@ -417,6 +416,11 @@ void FixedMaterial::_bind_methods() { BIND_CONSTANT( FLAG_USE_POINT_SIZE ); BIND_CONSTANT( FLAG_DISCARD_ALPHA ); + BIND_CONSTANT( LIGHT_SHADER_LAMBERT ); + BIND_CONSTANT( LIGHT_SHADER_WRAP ); + BIND_CONSTANT( LIGHT_SHADER_VELVET ); + BIND_CONSTANT( LIGHT_SHADER_TOON ); + } From 4345009a0eb1d2416316581d362795096e40768a Mon Sep 17 00:00:00 2001 From: MarianoGNU Date: Mon, 19 Oct 2015 12:21:19 -0300 Subject: [PATCH 09/78] add missing default value --- scene/gui/texture_progress.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/scene/gui/texture_progress.cpp b/scene/gui/texture_progress.cpp index 0d549108fa..c92929d991 100644 --- a/scene/gui/texture_progress.cpp +++ b/scene/gui/texture_progress.cpp @@ -302,4 +302,5 @@ TextureProgress::TextureProgress() { mode=FILL_LEFT_TO_RIGHT; rad_center_off=Point2(); + rad_max_degrees=360; } From bf4bb3e17b731f1c726fef5e85fd9ea93b2acc3a Mon Sep 17 00:00:00 2001 From: MarianoGNU Date: Mon, 19 Oct 2015 15:26:00 -0300 Subject: [PATCH 10/78] Clamp filling angle instead of normalize --- scene/gui/texture_progress.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/scene/gui/texture_progress.cpp b/scene/gui/texture_progress.cpp index c92929d991..c8930add6e 100644 --- a/scene/gui/texture_progress.cpp +++ b/scene/gui/texture_progress.cpp @@ -233,11 +233,7 @@ float TextureProgress::get_radial_initial_angle() void TextureProgress::set_fill_degrees(float p_angle) { - while(p_angle>360) - p_angle-=360; - while (p_angle<0) - p_angle+=360; - rad_max_degrees=p_angle; + rad_max_degrees=CLAMP(p_angle,0,360); update(); } From 6df7d923797908ecf38684c0008c0e4b6475d884 Mon Sep 17 00:00:00 2001 From: MarianoGNU Date: Mon, 19 Oct 2015 17:46:13 -0300 Subject: [PATCH 11/78] Fix ButtonGroup broken layout --- scene/gui/button_group.cpp | 2 +- scene/gui/button_group.h | 6 ++-- .../resources/default_theme/default_theme.cpp | 4 +++ tools/editor/plugins/theme_editor_plugin.cpp | 36 +++++++++---------- 4 files changed, 25 insertions(+), 23 deletions(-) diff --git a/scene/gui/button_group.cpp b/scene/gui/button_group.cpp index 8d1fa80b84..c92d7f2696 100644 --- a/scene/gui/button_group.cpp +++ b/scene/gui/button_group.cpp @@ -155,6 +155,6 @@ void ButtonGroup::_bind_methods() { } -ButtonGroup::ButtonGroup() +ButtonGroup::ButtonGroup() : BoxContainer(true) { } diff --git a/scene/gui/button_group.h b/scene/gui/button_group.h index 24edf94994..74e847e937 100644 --- a/scene/gui/button_group.h +++ b/scene/gui/button_group.h @@ -29,14 +29,14 @@ #ifndef BUTTON_GROUP_H #define BUTTON_GROUP_H -#include "scene/gui/control.h" +#include "scene/gui/box_container.h" class BaseButton; -class ButtonGroup : public Control { +class ButtonGroup : public BoxContainer { - OBJ_TYPE(ButtonGroup,Control); + OBJ_TYPE(ButtonGroup,BoxContainer); Set buttons; diff --git a/scene/resources/default_theme/default_theme.cpp b/scene/resources/default_theme/default_theme.cpp index 5a99538a5f..9f25337c3d 100644 --- a/scene/resources/default_theme/default_theme.cpp +++ b/scene/resources/default_theme/default_theme.cpp @@ -299,6 +299,10 @@ void make_default_theme() { t->set_constant("hseparation","MenuButton", 3 ); + // ButtonGroup + + t->set_stylebox("panel","ButtonGroup", memnew( StyleBoxEmpty )); + // CheckBox Ref cbx_empty = memnew( StyleBoxEmpty ); diff --git a/tools/editor/plugins/theme_editor_plugin.cpp b/tools/editor/plugins/theme_editor_plugin.cpp index 55e8f164d6..63ba57bfc0 100644 --- a/tools/editor/plugins/theme_editor_plugin.cpp +++ b/tools/editor/plugins/theme_editor_plugin.cpp @@ -568,26 +568,24 @@ ThemeEditor::ThemeEditor() { CheckButton *cb = memnew( CheckButton ); cb->set_text("CheckButton"); first_vb->add_child(cb ); - CheckBox *cbx = memnew( CheckBox ); - cbx->set_text("CheckBox"); - first_vb->add_child(cbx ); + CheckBox *cbx = memnew( CheckBox ); + cbx->set_text("CheckBox"); + first_vb->add_child(cbx ); - /* TODO: This is not working properly, controls are overlapping*/ - /* - ButtonGroup *bg = memnew( ButtonGroup ); - bg->set_v_size_flags(SIZE_EXPAND_FILL); - VBoxContainer *gbvb = memnew( VBoxContainer ); - gbvb->set_v_size_flags(SIZE_EXPAND_FILL); - CheckBox *rbx1 = memnew( CheckBox ); - rbx1->set_text("CheckBox Radio1"); - rbx1->set_pressed(true); - gbvb->add_child(rbx1); - CheckBox *rbx2 = memnew( CheckBox ); - rbx2->set_text("CheckBox Radio2"); - gbvb->add_child(rbx2); - bg->add_child(gbvb); - first_vb->add_child(bg); - */ + + ButtonGroup *bg = memnew( ButtonGroup ); + bg->set_v_size_flags(SIZE_EXPAND_FILL); + VBoxContainer *gbvb = memnew( VBoxContainer ); + gbvb->set_v_size_flags(SIZE_EXPAND_FILL); + CheckBox *rbx1 = memnew( CheckBox ); + rbx1->set_text("CheckBox Radio1"); + rbx1->set_pressed(true); + gbvb->add_child(rbx1); + CheckBox *rbx2 = memnew( CheckBox ); + rbx2->set_text("CheckBox Radio2"); + gbvb->add_child(rbx2); + bg->add_child(gbvb); + first_vb->add_child(bg); MenuButton* test_menu_button = memnew( MenuButton ); test_menu_button->set_text("MenuButton"); From ad362fbc582fd8ff9239542971c60e670d0a689d Mon Sep 17 00:00:00 2001 From: firefly2442 Date: Mon, 19 Oct 2015 23:14:02 -0500 Subject: [PATCH 12/78] projects in the editor_settings.xml that are no longer found on disk will be removed --- tools/editor/project_manager.cpp | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/tools/editor/project_manager.cpp b/tools/editor/project_manager.cpp index 9f47291433..458b7b1133 100644 --- a/tools/editor/project_manager.cpp +++ b/tools/editor/project_manager.cpp @@ -480,20 +480,25 @@ void ProjectManager::_load_recent_projects() { bool favorite = (_name.begins_with("favorite_projects/"))?true:false; uint64_t last_modified = 0; - if (FileAccess::exists(conf)) + if (FileAccess::exists(conf)) { last_modified = FileAccess::get_modified_time(conf); - String fscache = path.plus_file(".fscache"); - if (FileAccess::exists(fscache)) { - uint64_t cache_modified = FileAccess::get_modified_time(fscache); - if ( cache_modified > last_modified ) - last_modified = cache_modified; - } - ProjectItem item(project, path, conf, last_modified, favorite); - if (favorite) - favorite_projects.push_back(item); - else - projects.push_back(item); + String fscache = path.plus_file(".fscache"); + if (FileAccess::exists(fscache)) { + uint64_t cache_modified = FileAccess::get_modified_time(fscache); + if ( cache_modified > last_modified ) + last_modified = cache_modified; + } + + ProjectItem item(project, path, conf, last_modified, favorite); + if (favorite) + favorite_projects.push_back(item); + else + projects.push_back(item); + } else { + //project doesn't exist on disk but it's in the XML settings file + EditorSettings::get_singleton()->erase(_name); //remove it + } } projects.sort(); @@ -601,6 +606,8 @@ void ProjectManager::_load_recent_projects() { erase_btn->set_disabled(selected_list.size()<1); open_btn->set_disabled(selected_list.size()<1); run_btn->set_disabled(selected_list.size()<1 || (selected_list.size()==1 && single_selected_main=="")); + + EditorSettings::get_singleton()->save(); } void ProjectManager::_open_project_confirm() { From 96cff3a73b4b4d2cbd24a848a9f4950d54dd271f Mon Sep 17 00:00:00 2001 From: firefly2442 Date: Wed, 21 Oct 2015 14:28:23 -0500 Subject: [PATCH 13/78] when creating project, save icon using resource location by default --- tools/editor/project_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/editor/project_manager.cpp b/tools/editor/project_manager.cpp index 9f47291433..ee5521b8e1 100644 --- a/tools/editor/project_manager.cpp +++ b/tools/editor/project_manager.cpp @@ -193,7 +193,7 @@ class NewProjectDialog : public ConfirmationDialog { f->store_line("\n"); f->store_line("[application]"); f->store_line("name=\""+project_name->get_text()+"\""); - f->store_line("icon=\"icon.png\""); + f->store_line("icon=\"res://icon.png\""); memdelete(f); From 580a88c3ced6aa59db50fea6b7b5e02330689b09 Mon Sep 17 00:00:00 2001 From: firefly2442 Date: Wed, 21 Oct 2015 14:29:52 -0500 Subject: [PATCH 14/78] fix icon locations in demo projects --- demos/2d/fog_of_war/engine.cfg | 2 +- demos/2d/polygon_path_finder_demo/engine.cfg | 2 +- demos/gui/input_mapping/engine.cfg | 1 - demos/misc/tween/engine.cfg | 2 +- demos/misc/window_management/engine.cfg | 2 +- 5 files changed, 4 insertions(+), 5 deletions(-) diff --git a/demos/2d/fog_of_war/engine.cfg b/demos/2d/fog_of_war/engine.cfg index 5c4307b5bc..1f56851c58 100644 --- a/demos/2d/fog_of_war/engine.cfg +++ b/demos/2d/fog_of_war/engine.cfg @@ -2,7 +2,7 @@ name="Fog of War" main_scene="res://fog.scn" -icon="icon.png" +icon="res://icon.png" [input] diff --git a/demos/2d/polygon_path_finder_demo/engine.cfg b/demos/2d/polygon_path_finder_demo/engine.cfg index 41c4adf701..de5593c417 100644 --- a/demos/2d/polygon_path_finder_demo/engine.cfg +++ b/demos/2d/polygon_path_finder_demo/engine.cfg @@ -2,4 +2,4 @@ name="polygon_path_finder_demo" main_scene="res://new_scene_poly_with_holes.scn" -icon="icon.png" +icon="res://icon.png" diff --git a/demos/gui/input_mapping/engine.cfg b/demos/gui/input_mapping/engine.cfg index 959c0ac7d5..6470ec6cd8 100644 --- a/demos/gui/input_mapping/engine.cfg +++ b/demos/gui/input_mapping/engine.cfg @@ -2,7 +2,6 @@ name="Input Mapping GUI" main_scene="res://controls.scn" -icon="icon.png" [display] diff --git a/demos/misc/tween/engine.cfg b/demos/misc/tween/engine.cfg index f97e540dbd..3d3d639964 100644 --- a/demos/misc/tween/engine.cfg +++ b/demos/misc/tween/engine.cfg @@ -2,7 +2,7 @@ name="Tween Demo" main_scene="res://main.xml" -icon="icon.png" +icon="res://icon.png" target_fps=60 [display] diff --git a/demos/misc/window_management/engine.cfg b/demos/misc/window_management/engine.cfg index 0a34231673..911d3fd4a1 100644 --- a/demos/misc/window_management/engine.cfg +++ b/demos/misc/window_management/engine.cfg @@ -2,7 +2,7 @@ name="Window Management" main_scene="res://window_management.scn" -icon="icon.png" +icon="res://icon.png" [display] From b86e3c3402c7a19ad34160ed36a1fae65dc43cca Mon Sep 17 00:00:00 2001 From: romulox_x Date: Wed, 21 Oct 2015 19:23:34 -0700 Subject: [PATCH 15/78] added low_memory_2d_mode, to indicate when 3D post processing buffers and viewport depth buffers should not be allocated --- drivers/gles2/rasterizer_gles2.cpp | 17 +++++++++++++---- drivers/gles2/rasterizer_gles2.h | 2 +- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/drivers/gles2/rasterizer_gles2.cpp b/drivers/gles2/rasterizer_gles2.cpp index d84ee5a758..9bcce156cd 100644 --- a/drivers/gles2/rasterizer_gles2.cpp +++ b/drivers/gles2/rasterizer_gles2.cpp @@ -4075,6 +4075,8 @@ void RasterizerGLES2::render_target_set_size(RID p_render_target,int p_width,int glDeleteTextures(1,&rt->color); rt->fbo=0; + rt->depth=0; + rt->color=0; rt->width=0; rt->height=0; rt->texture_ptr->tex_id=0; @@ -4094,12 +4096,14 @@ void RasterizerGLES2::render_target_set_size(RID p_render_target,int p_width,int glBindFramebuffer(GL_FRAMEBUFFER, rt->fbo); //depth - glGenRenderbuffers(1, &rt->depth); - glBindRenderbuffer(GL_RENDERBUFFER, rt->depth ); + if (!low_memory_2d) { + glGenRenderbuffers(1, &rt->depth); + glBindRenderbuffer(GL_RENDERBUFFER, rt->depth ); - glRenderbufferStorage(GL_RENDERBUFFER, use_depth24?_DEPTH_COMPONENT24_OES:GL_DEPTH_COMPONENT16, rt->width,rt->height); + glRenderbufferStorage(GL_RENDERBUFFER, use_depth24?_DEPTH_COMPONENT24_OES:GL_DEPTH_COMPONENT16, rt->width,rt->height); - glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rt->depth); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rt->depth); + } //color glGenTextures(1, &rt->color); @@ -10293,7 +10297,11 @@ void RasterizerGLES2::_update_framebuffer() { framebuffer.fbo=0; } +#ifdef TOOLS_ENABLED framebuffer.active=use_fbo; +#else + framebuffer.active=use_fbo && !low_memory_2d; +#endif framebuffer.width=dwidth; framebuffer.height=dheight; framebuffer.scale=scale; @@ -11203,6 +11211,7 @@ RasterizerGLES2::RasterizerGLES2(bool p_compress_arrays,bool p_keep_ram_copy,boo use_fp16_fb=bool(GLOBAL_DEF("rasterizer/fp16_framebuffer",true)); use_shadow_mapping=true; use_fast_texture_filter=!bool(GLOBAL_DEF("rasterizer/trilinear_mipmap_filter",true)); + low_memory_2d=bool(GLOBAL_DEF("rasterizer/low_memory_2d_mode",false)); skel_default.resize(1024*4); for(int i=0;i<1024/3;i++) { diff --git a/drivers/gles2/rasterizer_gles2.h b/drivers/gles2/rasterizer_gles2.h index 507e46ae75..85e49d4f39 100644 --- a/drivers/gles2/rasterizer_gles2.h +++ b/drivers/gles2/rasterizer_gles2.h @@ -105,7 +105,7 @@ class RasterizerGLES2 : public Rasterizer { float anisotropic_level; bool use_half_float; - + bool low_memory_2d; Vector skel_default; From 4e0511a8a0cb294d330f6fde0640365ae3173ab5 Mon Sep 17 00:00:00 2001 From: Brickcaster Date: Sat, 24 Oct 2015 21:47:48 -0400 Subject: [PATCH 16/78] Fix for negative coords. Regarding issue #2665 int() of negative numbers rounds up. Needed to add a condition to account for negative values. Thanks to Romulox_x for providing this solution. --- scene/2d/tile_map.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp index 418ee192b2..167b637bdc 100644 --- a/scene/2d/tile_map.cpp +++ b/scene/2d/tile_map.cpp @@ -1031,13 +1031,12 @@ Vector2 TileMap::world_to_map(const Vector2& p_pos) const{ switch(half_offset) { case HALF_OFFSET_X: { - if (int(ret.y)&1) { - + if ( ret.y > 0 ? int(ret.y)&1 : (int(ret.y)-1)&1 ) { ret.x-=0.5; } } break; case HALF_OFFSET_Y: { - if (int(ret.x)&1) { + if ( ret.x > 0 ? int(ret.x)&1 : (int(ret.x)-1)&1) { ret.y-=0.5; } } break; From cf995d5f0783b9c8fc6c4493e6298e59c559c9d1 Mon Sep 17 00:00:00 2001 From: neikeq Date: Sun, 25 Oct 2015 18:00:29 +0100 Subject: [PATCH 17/78] Tooltip for the Inspector's history button --- tools/editor/editor_node.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/editor/editor_node.cpp b/tools/editor/editor_node.cpp index a3d7cbd7cf..ecd4b402c8 100644 --- a/tools/editor/editor_node.cpp +++ b/tools/editor/editor_node.cpp @@ -5173,6 +5173,7 @@ EditorNode::EditorNode() { editor_history_menu = memnew( MenuButton ); + editor_history_menu->set_tooltip("History of recently edited objects"); editor_history_menu->set_icon( gui_base->get_icon("History","EditorIcons")); prop_editor_hb->add_child(editor_history_menu); editor_history_menu->connect("about_to_show",this,"_prepare_history"); From ca7cfa9b4c5fbd487c9b5bcf9143cbfce35287e7 Mon Sep 17 00:00:00 2001 From: eska Date: Sun, 25 Oct 2015 23:13:46 +0100 Subject: [PATCH 18/78] Add all collision shapes to a tile when converting scenes to TileSets --- tools/editor/plugins/tile_set_editor_plugin.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/tools/editor/plugins/tile_set_editor_plugin.cpp b/tools/editor/plugins/tile_set_editor_plugin.cpp index 39b0ef3c75..09115472a8 100644 --- a/tools/editor/plugins/tile_set_editor_plugin.cpp +++ b/tools/editor/plugins/tile_set_editor_plugin.cpp @@ -110,11 +110,15 @@ void TileSetEditor::_import_scene(Node *scene, Ref p_library, bool p_me if (!child2->cast_to()) continue; StaticBody2D *sb = child2->cast_to(); - if (sb->get_shape_count()==0) + int shape_count = sb->get_shape_count(); + if (shape_count==0) continue; - Ref collision=sb->get_shape(0); - if (collision.is_valid()) { - collisions.push_back(collision); + for (int shape_index=0; shape_index collision=sb->get_shape(shape_index); + if (collision.is_valid()) { + collisions.push_back(collision); + } } } From 3fbaa479e33466394cd243ab652bd1c4c082549a Mon Sep 17 00:00:00 2001 From: volzhs Date: Wed, 28 Oct 2015 15:48:37 +0900 Subject: [PATCH 19/78] improve android payments GodotPaymentV3 currently consumes purchased item right after purchasing. But, some in-app item should not consume like "remove ads permanently" So, I added "setAutoConsume(boolean)", "requestPurchased()", "consume(sku_string)". AutoConsume is true by default as before. usage: func _ready(): var payment = Globals.get_singleton("GodotPayments") payment.setPurchaseCallbackId(get_instance_ID()) payment.setAutoConsume(false) # default : true payment.requestPurchased() # callback : has_purchased payment.purchase("item_name") # callback : purchase_success, purchase_fail, purchase_cancel, purchase_owned payment.consume("item_name") # callback : consume_success func purchase_success(receipt, signature, sku): print("purchase_success : ", sku) func purchase_fail(): print("purchase_fail") func purchase_cancel(): print("purchase_cancel") func purchase_owned(sku): print("purchase_owned : ", sku) func consume_success(receipt, signature, sku): print("consume_success : ", sku) func has_purchased(receipt, signature, sku): if sku == "": print("has_purchased : nothing") else: print("has_purchased : ", sku) --- .../src/com/android/godot/GodotPaymentV3.java | 60 ++++++--- .../godot/payments/PaymentsManager.java | 127 ++++++++++++++---- .../android/godot/payments/PurchaseTask.java | 8 +- 3 files changed, 152 insertions(+), 43 deletions(-) diff --git a/platform/android/java/src/com/android/godot/GodotPaymentV3.java b/platform/android/java/src/com/android/godot/GodotPaymentV3.java index 0fd102ac55..0799e1e83d 100644 --- a/platform/android/java/src/com/android/godot/GodotPaymentV3.java +++ b/platform/android/java/src/com/android/godot/GodotPaymentV3.java @@ -27,7 +27,7 @@ public class GodotPaymentV3 extends Godot.SingletonBase { activity.getPaymentsManager().requestPurchase(sku, transactionId); } }); - }; + } /* public string requestPurchasedTicket(){ activity.getPaymentsManager() @@ -42,7 +42,7 @@ public class GodotPaymentV3 extends Godot.SingletonBase { public GodotPaymentV3(Activity p_activity) { - registerClass("GodotPayments", new String[] {"purchase", "setPurchaseCallbackId", "setPurchaseValidationUrlPrefix", "setTransactionId", "getSignature", "consumeUnconsumedPurchases"}); + registerClass("GodotPayments", new String[] {"purchase", "setPurchaseCallbackId", "setPurchaseValidationUrlPrefix", "setTransactionId", "getSignature", "consumeUnconsumedPurchases", "requestPurchased", "setAutoConsume", "consume"}); activity=(Godot) p_activity; } @@ -54,7 +54,6 @@ public class GodotPaymentV3 extends Godot.SingletonBase { activity.getPaymentsManager().consumeUnconsumedPurchases(); } }); - } private String signature; @@ -63,25 +62,26 @@ public class GodotPaymentV3 extends Godot.SingletonBase { } - public void callbackSuccess(String ticket, String signature){ -// Log.d(this.getClass().getName(), "PRE-Send callback to purchase success"); - GodotLib.callobject(purchaseCallbackId, "purchase_success", new Object[]{ticket, signature}); -// Log.d(this.getClass().getName(), "POST-Send callback to purchase success"); + public void callbackSuccess(String ticket, String signature, String sku){ +// Log.d(this.getClass().getName(), "PRE-Send callback to purchase success"); + GodotLib.callobject(purchaseCallbackId, "purchase_success", new Object[]{ticket, signature, sku}); +// Log.d(this.getClass().getName(), "POST-Send callback to purchase success"); } public void callbackSuccessProductMassConsumed(String ticket, String signature, String sku){ -// Log.d(this.getClass().getName(), "PRE-Send callback to consume success"); - GodotLib.calldeferred(purchaseCallbackId, "consume_success", new Object[]{ticket, signature, sku}); -// Log.d(this.getClass().getName(), "POST-Send callback to consume success"); +// Log.d(this.getClass().getName(), "PRE-Send callback to consume success"); + Log.d(this.getClass().getName(), "callbackSuccessProductMassConsumed > "+ticket+","+signature+","+sku); + GodotLib.calldeferred(purchaseCallbackId, "consume_success", new Object[]{ticket, signature, sku}); +// Log.d(this.getClass().getName(), "POST-Send callback to consume success"); } public void callbackSuccessNoUnconsumedPurchases(){ - GodotLib.calldeferred(purchaseCallbackId, "no_validation_required", new Object[]{}); + GodotLib.calldeferred(purchaseCallbackId, "no_validation_required", new Object[]{}); } public void callbackFail(){ - GodotLib.calldeferred(purchaseCallbackId, "purchase_fail", new Object[]{}); -// GodotLib.callobject(purchaseCallbackId, "purchase_fail", new Object[]{}); + GodotLib.calldeferred(purchaseCallbackId, "purchase_fail", new Object[]{}); +// GodotLib.callobject(purchaseCallbackId, "purchase_fail", new Object[]{}); } public void callbackCancel(){ @@ -89,6 +89,10 @@ public class GodotPaymentV3 extends Godot.SingletonBase { // GodotLib.callobject(purchaseCallbackId, "purchase_cancel", new Object[]{}); } + public void callbackAlreadyOwned(String sku){ + GodotLib.calldeferred(purchaseCallbackId, "purchase_owned", new Object[]{sku}); + } + public int getPurchaseCallbackId() { return purchaseCallbackId; } @@ -97,8 +101,6 @@ public class GodotPaymentV3 extends Godot.SingletonBase { this.purchaseCallbackId = purchaseCallbackId; } - - public String getPurchaseValidationUrlPrefix(){ return this.purchaseValidationUrlPrefix ; } @@ -107,12 +109,10 @@ public class GodotPaymentV3 extends Godot.SingletonBase { this.purchaseValidationUrlPrefix = url; } - public String getAccessToken() { return accessToken; } - public void setAccessToken(String accessToken) { this.accessToken = accessToken; } @@ -125,4 +125,30 @@ public class GodotPaymentV3 extends Godot.SingletonBase { return this.transactionId; } + // request purchased items are not consumed + public void requestPurchased(){ + activity.getPaymentsManager().setBaseSingleton(this); + activity.runOnUiThread(new Runnable() { + @Override + public void run() { + activity.getPaymentsManager().requestPurchased(); + } + }); + } + + // callback for requestPurchased() + public void callbackPurchased(String receipt, String signature, String sku){ + GodotLib.calldeferred(purchaseCallbackId, "has_purchased", new Object[]{receipt, signature, sku}); + } + + // consume item automatically after purchase. default is true. + public void setAutoConsume(boolean autoConsume){ + activity.getPaymentsManager().setAutoConsume(autoConsume); + } + + // consume a specific item + public void consume(String sku){ + activity.getPaymentsManager().consume(sku); + } } + diff --git a/platform/android/java/src/com/android/godot/payments/PaymentsManager.java b/platform/android/java/src/com/android/godot/payments/PaymentsManager.java index 5bf86d0b69..189f7108c1 100644 --- a/platform/android/java/src/com/android/godot/payments/PaymentsManager.java +++ b/platform/android/java/src/com/android/godot/payments/PaymentsManager.java @@ -25,10 +25,8 @@ import com.android.vending.billing.IInAppBillingService; public class PaymentsManager { public static final int BILLING_RESPONSE_RESULT_OK = 0; - - public static final int REQUEST_CODE_FOR_PURCHASE = 0x1001; - + private static boolean auto_consume = true; private Activity activity; IInAppBillingService mService; @@ -69,13 +67,12 @@ public class PaymentsManager { } @Override - public void onServiceConnected(ComponentName name, - IBinder service) { - mService = IInAppBillingService.Stub.asInterface(service); + public void onServiceConnected(ComponentName name, IBinder service) { + mService = IInAppBillingService.Stub.asInterface(service); } }; - public void requestPurchase(String sku, String transactionId){ + public void requestPurchase(final String sku, String transactionId){ new PurchaseTask(mService, Godot.getInstance()) { @Override @@ -88,6 +85,12 @@ public class PaymentsManager { protected void canceled() { godotPaymentV3.callbackCancel(); } + + @Override + protected void alreadyOwned() { + godotPaymentV3.callbackAlreadyOwned(sku); + } + }.purchase(sku, transactionId); } @@ -114,26 +117,82 @@ public class PaymentsManager { }.consumeItAll(); } + public void requestPurchased(){ + try{ + PaymentsCache pc = new PaymentsCache(Godot.getInstance()); + +// Log.d("godot", "requestPurchased for " + activity.getPackageName()); + Bundle bundle = mService.getPurchases(3, activity.getPackageName(), "inapp",null); + +/* + for (String key : bundle.keySet()) { + Object value = bundle.get(key); + Log.d("godot", String.format("%s %s (%s)", key, value.toString(), value.getClass().getName())); + } +*/ + + if (bundle.getInt("RESPONSE_CODE") == 0){ + + final ArrayList myPurchases = bundle.getStringArrayList("INAPP_PURCHASE_DATA_LIST"); + final ArrayList mySignatures = bundle.getStringArrayList("INAPP_DATA_SIGNATURE_LIST"); + + + if (myPurchases == null || myPurchases.size() == 0){ +// Log.d("godot", "No purchases!"); + godotPaymentV3.callbackPurchased("", "", ""); + return; + } + +// Log.d("godot", "# products are purchased:" + myPurchases.size()); + for (int i=0;i Date: Wed, 28 Oct 2015 10:34:02 -0300 Subject: [PATCH 20/78] Fix small memory leak --- tools/editor/script_editor_debugger.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/editor/script_editor_debugger.cpp b/tools/editor/script_editor_debugger.cpp index 8e0e7ddb49..60f2afa2c2 100644 --- a/tools/editor/script_editor_debugger.cpp +++ b/tools/editor/script_editor_debugger.cpp @@ -1376,7 +1376,6 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor){ vmem_refresh->connect("pressed",this,"_video_mem_request"); MarginContainer *vmmc = memnew( MarginContainer ); - vmmc = memnew( MarginContainer ); vmem_tree = memnew( Tree ); vmem_tree->set_v_size_flags(SIZE_EXPAND_FILL); vmem_tree->set_h_size_flags(SIZE_EXPAND_FILL); From 06e0eba4021975824fc7f3230461b7274886f61e Mon Sep 17 00:00:00 2001 From: eska Date: Wed, 28 Oct 2015 18:21:45 +0100 Subject: [PATCH 21/78] Set World2D default angular damp per global `physics_2d/default_angular_damp` --- scene/resources/world_2d.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scene/resources/world_2d.cpp b/scene/resources/world_2d.cpp index d8d9c5b675..3b1f1d2346 100644 --- a/scene/resources/world_2d.cpp +++ b/scene/resources/world_2d.cpp @@ -374,7 +374,7 @@ World2D::World2D() { Physics2DServer::get_singleton()->area_set_param(space,Physics2DServer::AREA_PARAM_GRAVITY,GLOBAL_DEF("physics_2d/default_gravity",98)); Physics2DServer::get_singleton()->area_set_param(space,Physics2DServer::AREA_PARAM_GRAVITY_VECTOR,GLOBAL_DEF("physics_2d/default_gravity_vector",Vector2(0,1))); Physics2DServer::get_singleton()->area_set_param(space,Physics2DServer::AREA_PARAM_LINEAR_DAMP,GLOBAL_DEF("physics_2d/default_density",0.1)); - Physics2DServer::get_singleton()->area_set_param(space,Physics2DServer::AREA_PARAM_ANGULAR_DAMP,GLOBAL_DEF("physics_2d/default_density",1)); + Physics2DServer::get_singleton()->area_set_param(space,Physics2DServer::AREA_PARAM_ANGULAR_DAMP,GLOBAL_DEF("physics_2d/default_angular_damp",1)); Physics2DServer::get_singleton()->space_set_param(space,Physics2DServer::SPACE_PARAM_CONTACT_RECYCLE_RADIUS,1.0); Physics2DServer::get_singleton()->space_set_param(space,Physics2DServer::SPACE_PARAM_CONTACT_MAX_SEPARATION,1.5); Physics2DServer::get_singleton()->space_set_param(space,Physics2DServer::SPACE_PARAM_BODY_MAX_ALLOWED_PENETRATION,0.3); From b0b0f35e2cc6b2e95672a672ea599a22bb53ebd4 Mon Sep 17 00:00:00 2001 From: neikeq Date: Thu, 29 Oct 2015 20:37:09 +0100 Subject: [PATCH 22/78] Added some demo icons --- demos/2d/area_input/engine.cfg | 1 + demos/2d/area_input/icon.png | Bin 0 -> 1684 bytes demos/2d/dynamic_collision_shapes/engine.cfg | 1 + demos/2d/dynamic_collision_shapes/icon.png | Bin 0 -> 844 bytes demos/2d/hdr/engine.cfg | 1 + demos/2d/hdr/icon.png | Bin 0 -> 2670 bytes demos/2d/isometric_light/engine.cfg | 1 + demos/2d/isometric_light/icon.png | Bin 0 -> 3638 bytes demos/2d/light_mask/engine.cfg | 1 + demos/2d/light_mask/icon.png | Bin 0 -> 3344 bytes demos/2d/lights_shadows/engine.cfg | 1 + demos/2d/lights_shadows/icon.png | Bin 0 -> 2733 bytes demos/2d/navpoly/engine.cfg | 1 + demos/2d/navpoly/icon.png | Bin 0 -> 2420 bytes demos/2d/normalmaps/engine.cfg | 1 + demos/2d/normalmaps/icon.png | Bin 0 -> 4876 bytes demos/2d/screen_space_shaders/engine.cfg | 1 + demos/2d/screen_space_shaders/icon.png | Bin 0 -> 3341 bytes demos/2d/sdf_font/engine.cfg | 1 + demos/2d/sdf_font/icon.png | Bin 0 -> 1534 bytes demos/2d/splash/engine.cfg | 1 + demos/2d/splash/icon.png | Bin 0 -> 3408 bytes demos/2d/sprite_shaders/engine.cfg | 1 + demos/2d/sprite_shaders/icon.png | Bin 0 -> 3934 bytes demos/3d/navmesh/icon.png | Bin 0 -> 2803 bytes demos/3d/sat_test/engine.cfg | 1 + demos/3d/sat_test/icon.png | Bin 0 -> 2699 bytes demos/gui/rich_text_bbcode/engine.cfg | 1 + demos/gui/rich_text_bbcode/icon.png | Bin 0 -> 2293 bytes demos/misc/instancing/engine.cfg | 1 + demos/misc/instancing/icon.png | Bin 0 -> 2185 bytes 31 files changed, 15 insertions(+) create mode 100644 demos/2d/area_input/icon.png create mode 100644 demos/2d/dynamic_collision_shapes/icon.png create mode 100644 demos/2d/hdr/icon.png create mode 100644 demos/2d/isometric_light/icon.png create mode 100644 demos/2d/light_mask/icon.png create mode 100644 demos/2d/lights_shadows/icon.png create mode 100644 demos/2d/navpoly/icon.png create mode 100644 demos/2d/normalmaps/icon.png create mode 100644 demos/2d/screen_space_shaders/icon.png create mode 100644 demos/2d/sdf_font/icon.png create mode 100644 demos/2d/splash/icon.png create mode 100644 demos/2d/sprite_shaders/icon.png create mode 100644 demos/3d/navmesh/icon.png create mode 100644 demos/3d/sat_test/icon.png create mode 100644 demos/gui/rich_text_bbcode/icon.png create mode 100644 demos/misc/instancing/icon.png diff --git a/demos/2d/area_input/engine.cfg b/demos/2d/area_input/engine.cfg index 3227e9278f..8fa2e15beb 100644 --- a/demos/2d/area_input/engine.cfg +++ b/demos/2d/area_input/engine.cfg @@ -2,3 +2,4 @@ name="Area 2D Input Events" main_scene="res://input.scn" +icon="res://icon.png" diff --git a/demos/2d/area_input/icon.png b/demos/2d/area_input/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d9bb88169321f8d5af74c5f0b30d7f1e24b454bd GIT binary patch literal 1684 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4rT@hhPm4t-!L#RZVvDXab;j&@WB9De^&eW z_-OuLr}=-a*55Un|JL|=dTaeysr7rckGrSl{|&y*?%H3MIqj=ZUR>nu=Ard#rS|8g znr{}U9d1`yQ||5MrS)Tl=Eo&^9~bGpS!8y1lKRz2Hm91DSC)CM$@KR1(fYPh{plR_ z2Q!VIPB%C+L1lfV^X^iIx^$NiKObLT4_9}+$8(LI&(gRv-Soj^wUb?H`&;ae*Q;)= zwLe^=y0Kb$LB3mJxLZ_^_S;1UujlGMn5}L- z$lue;)63CS{r?u-=kqmQ%+q*0TmSY<{TtJbA5BxgIYs@_M7?9ZmRGxt4|S{VZL(Zd zZ?&}AY+;4P>{82FB}y~0osz>n{C(8U_E=qLH{af-x~oxjd!6ypN|jY*HnU4THe}mY zCwnhRa?6Pc@AC`m^7XTKHCxwUyuRLiMzPt9BI`+omi>9weR*!v6YTP19I_%E(juZ7 zT@%V|k_ybylXbSR^eZqhFtC>d`2{oh{)G2Q-a-Rt66h5?*L>*bcH>=j?mmvKLJ(%iHI zLMq>4uPUB8t#w6T=DxKen~dTw%A&rsnXd}hF)}*WN-Oa{ zTf9_jDZ{KSNeLS39^T{Ic=9ykg;+)jZXcJbj<21kT_PFsi&`GMb<0>Fzv-vJiO!_M zx~CXo_CDUew=YGSG2Vq|fja|(`I%P?7pH6gO}kx{boYnIg{i9^GQ4?pbJCUu^Q3%V z3qhZfowIKLh?{UNE1^zo=8KoIOR^fi91!K&_1gL1*O}WS^%%@Ug&1}@IZBuKtzvlj z@y*{i+d_GEpUvIR5nlf@ao*iI9IaMW`&KaYnJU)FGdI|5otSI?U5rQ3QsUr(&+dP& zMsPOtDJuLb{5K(L*Ups;Z(Y3^KK%a{ZOoOB7;5?Ktb51e_nn%n=N)Z+F_~#biz<6; z^m&y9W!qQSJQcRv5W(VM-g)Zkh66YDZ;E;?C8y8imo$qzy*yida?qAr-SBtDEyS8(}<1IV|cM@c7?sebrB(p;@%ETk}0OxD% zbt~=F4;1vwm8|8HG&rtz=$c~oM<$)(b>C*GFi)EEr0~|=*3TJ_?w)=9+311sBenlr zY)f{{o*jG0RB}WAPSZDe+-ox3|8SK?v+Ys;!*u2Ddqa&$KeFT;zH>Yfe#76J6?3q4 zd5v_UUf9&nA9Xc$e3+Qsxbq%wL-7i(4~q(lxB`M2CpK>V)IUd3C-T#&1`+m#)zKb? z5;^+Tx<(4h8yHVNpDr1?eUq6Za|qi7-DUgMt28V*<}A_hB+}NxL8pdq+OFWK!ZXAJ z*_NE?VUWobDTom7kv`h>m52kx^Rvck0$PXLhu6&0?MK`Br7* zeBmvOYeI6Daj|7?>pjt5I*rL8{(9qYu9WEuM6Fpqc6w|!&A(81vi@Ysve08@rIue7eeaMqknrEh~u z+l~0Txz~j-IybJJt?|X!U~OjMi^oiiTeVcDxZikl{$8c$*4SAg)A^0=t>`KCcR1No zFv;lF9#hMP^;OGxI8TXQC|z}tLEw#YZ}5xtzpV3Ttj)91l{qN>r1eF9k1%uTmh^`v zw_l#od*e~!a%-6qTO7yYklQ)hNtIf2R-HR@=VAVR17BaQhN^@m+rt(bBtDj6_%3ep zcyZYiL(6%)1)ilat=YX+_O8~Hh2D-m_ZWCs1k2RECP(kI`Iebl`01HY!;?8q0-s9d zmg!{vy>VR9X0h1uFE7sSTKd{=xx{DlH#|1;W0$C1dvH>|c5z6N%k%W$>uJw@C#5{< n-FNE4S@FjYfA2s3-`=79<$tFqtB)`+Ffe$!`njxgN@xNAY^DdV literal 0 HcmV?d00001 diff --git a/demos/2d/dynamic_collision_shapes/engine.cfg b/demos/2d/dynamic_collision_shapes/engine.cfg index 536b75f2f2..76a074f346 100644 --- a/demos/2d/dynamic_collision_shapes/engine.cfg +++ b/demos/2d/dynamic_collision_shapes/engine.cfg @@ -2,3 +2,4 @@ name="Run-Time CollisionShape" main_scene="res://dynamic_colobjs.scn" +icon="res://icon.png" diff --git a/demos/2d/dynamic_collision_shapes/icon.png b/demos/2d/dynamic_collision_shapes/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ac01d401ba3d67a101279daf54aba35db9515b65 GIT binary patch literal 844 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4rT@hhPm4t-!L#R{15O6arN=>v2`tYC@Sjh z?c?p^`{tLBm#^;=5fN+WB1iW$Th}~$w;Wf`I1jH-4-a2oA5SmufG{_=PyYqnJtI85 zgT1_bqn({!2n)aeD`@FhWbc;k=I7_>>w7?6-qg0l)!W<0%PTa@wXxmovZUm7ad8K? zOego0$SAjTJG(+Ft1@%*YGdQ>iAF7kh7E>>6ZG`vXlWh4qI6M8>YS9+qjzEtL`9#8 zhN8PjD$N zv!AuZx~9Qu_A-;L2Xtp>Yp>X#vE_i$awVmmii#@~71zqj-gqi;`-ON-p??7b0~3d* zi(^Q{;kVPSZ<}o(;HtVo!|bR;^G3$+Qr{>2_%`j{>;LuMk0eT3m!#;Pah5w&clFc9 zna0g-3hK}IAF;4EH~L%Gc0s4PsUp;IMUm<}odeQAC}=eJ(Hz`)oC|_-!g-S{Ti9iRx({xvRU;1W~<1Leexg9`-&bjDcRS3U{=kK zUvEEuIwtg!GeKl)RDyTT`l_ZHhZ}m)ZwfgliLh_s{#d2WZMgM*wKVY17Y7Il+VS!H4t$dT zZN;Ze=S&%v7~VZTua*Dn38&9RwVvAaaR^~|6T%U%xNbO694GvWZoPCD!j&ejeZ+8d|`lDPaFjdw2Np)4uW!Gpg)+>lB`xouhGf)!cun zUt|@hJS|i!+k0vkvr)nfS>_bw`q@waOr2lUsNTG}uX#2D0|SGntDnm{r-UW|bOLEh literal 0 HcmV?d00001 diff --git a/demos/2d/hdr/engine.cfg b/demos/2d/hdr/engine.cfg index 3d8b4222d5..ab53a022f0 100644 --- a/demos/2d/hdr/engine.cfg +++ b/demos/2d/hdr/engine.cfg @@ -2,6 +2,7 @@ name="HDR for 2D" main_scene="res://beach_cave.scn" +icon="res://icon.png" [display] diff --git a/demos/2d/hdr/icon.png b/demos/2d/hdr/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2df0ec38e9e67a98f7b0d92f6385280911a2d4bd GIT binary patch literal 2670 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4rT@hhPm4t-!L#R{R;32ab;j&`2G90nUTt! zzke-F)l3YOElkv2|Ndp7uk`%?e|=rKd;kAG`v3pmzrX+g|9|}d|C#^)PaHq`|NsBz z&!3(?ee&x6{};}k`TzgFg|V8kv6`8Ynzfm_k*=JHfts*#EC~{r}&}QorN>|JwimZLAIV|Nme4|G$;FcFh0(C;$Kd z_5c5p|Nk@p|BwIw-_^P# z*2bo0T6g~cKlcBB^Z)4;B^XnHp>E{{Mf%|Nmb9|1Vjxu(Pw(uDm5TH#0RQ-a0(`>$h(& zU%tq{dgIE~%V$oXTDxxby!mtc`?~Aus%`SCGcr=F6H^irqK)mWjIB&w{Qp1y|Nk2| zub;nkVf(f%L30*Z#w5kWghfRJTlsnh__m;e8_|NsBt!+XD5Z}T2L3p{)|BrjT)E7; zd+w~6(`*_iIu{nX_4HbzV4`s(#+Dr zsLWKmq|~6eNYC&fT|Kp~KYwGs{0)5eE${6o`&9>{w(hN1wW4Istk_8toBMmbTHC{0 zTXGv}0t<7!(~^q5{eJf2`???By1#w9_5R)Cw{O9x!I&z_lf=5*c3lgm#Y-+Jsw`M!Nk+qO*FywPdK%87GlCC!@I zJZpMgYhz+dqutkk`#*g={r;Wf2}e-|1_tqxAirRSf4+Zi?_XqSxah}zU*FreZ{Oa( zf03`RXfpR&1_pK>PZ!6Kh{IE-rC7U^*s&~SSIed|3`TVaHb|bH;@Hr2HsIigM20uBwtsv0^1++c&#o{t zDmFAYJoH-4J;}34ZT7_uu3w8=jiuzJ%u+wyi~W4<&Z*e_M{aDqySx1R_wW2_spXUP zI^^x`*xu=1Udqk%W#z5J9}8D9^u$-2)iWbDA2aqv;=^FYUDwx`+Gcph@Z zHwB2aIn7#R)u@zVw4g~U`2rJ@PW&l`$4VB8Dk}9346j`k<7>EBFR5>s;Ae2bGJ`>x zVQCVBlCqML)D->oiVPoJy$=SqvOM|DQWC`Y_*OxZ`Nk z-IlwLrktx}Xli7xkpAhV%utqfMYnzbt|@GZ=FaQ3vN`ZbM)3ZLd*m&8-RX)M`!=K7 zuWMFc-nu|bjDe-AA#q8y>+Tsp_J*)rm&#j`7a;1pkzo_BE6)|BFLnpk9a~-={?M&y z=A6yx=k;C)G0bD({-))tylz|ebj}UM>I_Fu_*~O5e9AeYaYORjjT{U$wi_NCzCG7p zp1nOR@N6M-#@5!`AA|ZCA3Wpb{qX4H+@ggWs@YF$I_`KTYNt?x^7VakJ5Dh0zkBjl zO#Fbtjw5j$k(*4zxABx(` z8`|STKCpLN-g#!eI;@m;1AjyM_q_ko4n{LKrG@HTyVUA!bYN;e`}g!9Uf)^L#Fg>&N!@3iI0i12L+d@) zx3oW&;JhHxuwmQp_G>S1GS}rZ?3G(6I(g=9$pc9n!`%2eFKDdEoxM=Fim&m$Gy|Wj zfGX?DvmX|>6?9+hXQ-WhE%(00nnV-EN0saclr+0ijGS2*+>L%sRdYCA&-}vm2J2*{ z8DFdXCg{9t*x|iE?!lb~gNH1>Y6>ej!`8BFWw(7+#oobHrpF2^x#zVU+{n4Iv@?_Q!Ad6a zsFU9|on3EIy)cC7mx18t79$&hlO-R&MzDSHI`nc&p7{ejPJfULc7XABr%dHQxG4YDJ#S;_tlGD=uGT(n={9$i}lpO;D1B0ilpUXO@geCxN C9wEB` literal 0 HcmV?d00001 diff --git a/demos/2d/isometric_light/engine.cfg b/demos/2d/isometric_light/engine.cfg index 08393f1724..a5b053aa95 100644 --- a/demos/2d/isometric_light/engine.cfg +++ b/demos/2d/isometric_light/engine.cfg @@ -2,6 +2,7 @@ name="Isometric 2D + Lighting" main_scene="res://map.scn" +icon="res://icon.png" [input] diff --git a/demos/2d/isometric_light/icon.png b/demos/2d/isometric_light/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3de9749729eda77c7adbfcbc83404eff7fba310b GIT binary patch literal 3638 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 literal 0 HcmV?d00001 diff --git a/demos/2d/lights_shadows/engine.cfg b/demos/2d/lights_shadows/engine.cfg index 771288c209..80142633d3 100644 --- a/demos/2d/lights_shadows/engine.cfg +++ b/demos/2d/lights_shadows/engine.cfg @@ -2,6 +2,7 @@ name="2D Lighting" main_scene="res://light_shadows.scn" +icon="res://icon.png" [display] diff --git a/demos/2d/lights_shadows/icon.png b/demos/2d/lights_shadows/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c7f9e13bae9bf2213703973448987e3ba078cc8e GIT binary patch literal 2733 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4rT@hhPm4t-!L#ReGl*nab;j&xc~B6-;QOy z+m}9gc_TY_Vb_KQS-A^4H!R4^S@7V+jY<1gXXP&H+^}HM{#6fN-pI;b^yt;iJ1?$I zIkax#{#BhD7I$u1_~_NmyDzTgc%3b*A)s5<En`OCw$+bc-<-66^_`a&`**IIc4Tw^_BFj*);xZ7>;9`N zT^koo-n(`B(XEpYtnJ&jwrA_oThA}dJ9A>ziG34yZtB~F+ zulf7`|MNFD?!CHv{n@#>r;pA$xxaV&vUl%pJa~QW_VaV|&z_ySe|zonss}Hx-+Os+ z=JB0<+gEgLTJrV(|F{4DKYerU`m@t(ZXKU}>frRF+b8YbI_=2DDTmgdo4szr-sL@; zmw$MF^Xk(xmmZ%w|M2+4{VRL7tbFV-yFY!nx$W`AGY^g~IJbZ1@y%yut;@<=nwZ?%w6^{Dmxl-6-+l7> z)|U@ApTD_w_vMw_&o6DbcV@-4BTFwIntN);shR6~x2{lCwYc~H=eLhHPu$si^w#c) zJGb<0S$}2j+Cx*d)>r6tMjL1?Rs(T+=IijPi{Rhd38zYGHoqA zE?%x5|NlS#|M$?1o!cj@oY}m*Ys>5_e?Ol1_Uy>V2hZQ!nsaJT|F#XS8@nF;|8wu( z_iO(?U-04V+t1G4(6Mao-pQ-`cP**tTGF$9esKhrh8>q&GLqdWkn6MC+?YOWNdxr;l(9a zF0Q?N{>Z&^dv2cDeC_15^T(E*-LwAUt{qo)UR<%Qcf+QG3pUnIU*5lKLihIG$cVDs zNtsb)X>QIw?3`>L?p=6u_gqisnu?h-^QtEm&B*ie%1o_G_V+x+}^)`|9)RX!`oo6XwjlYz6TGL^e`~6dwRM!hD01LnH-%lDN*9M z{lX5V7X_CeDs|?j#`PTCq$}tps3fWq$o*FMt(&If3ATkB3sjDNQra%)60$jQx5T>c zFUxk_a+6*hD`IVCHJ^LY3zw41|10Hx^M%;E{?V)3|GY9jL`Wxc`!S9;Wvj1dZNGi~ z{;ty3S5}_8urc{((#DFPpH7^ZzPmhl<>aR9mi60e4hMCdStaVG8{)vks`BaQqg0W5 zWxB&Hg)yu$Gm}y`M7@k^bAkU2!4Jg^>mIK5XW1p_5xUX#_Yp4{ z1um1<%zPL46r&XFjjSI$b~&{@;nJ_@?RrzMNndG*5^NP#-(e87lD+2hh0=f5dM`ya zKa}TOZR*!3JXfP7jh)S9;jam~mu}`~MCg6}CdKoxprZXi#*x|F)_?xVi8w91kg?RM zvGLZ<{eRocR`SR@s1`IXYCc}EXL&o*&zqbgHJ^9b%sp3U&B`N^(c~iPrdzUajh|1* zD(*F}j~~vT{_9i;+Xa^m+#jZL+rEGPOfBnhTBv$Nes=bKwXa_viOKMBv+lTfw9_3H}_H}A9W4p41 zTR1ix_WqN9=Ktk~!3^yVjpYef4=M!wbKAsqdky#gP_9Qjsk4+O4eUg-d<3g262)&PYcF>JxVk$L?)Sw8(e%hlg<+U&;#`GYn7-~2cm zjg=-Yc2Sz_Q8M9N2J`L6=O5oI`K4ca{PE7t;9JV2rJ9{QT>3HW{}%Ax(b&Mv_4r(e z@l26MA*SoQEgGHFjBTH-y&bpydxIUr+z6kfJ(K_HR)1G0m@DM$?7Z{NOzt>Q7P$;2 z`J*2WU8!*SxIIU(akW?CuQ!6SakUIpiH1Tq*MAq>QT6oH)Yq}jm)GB6H{EeJFZO}> zpX#L?&xAijKPYBk{qSqsZoU*gnV(BIYw~jE+HlP`%lKkqZl2tDx4Qi8E#RGj+2+{y|r0hE;Bo* zD4?PyuqBd5(=W1WL7+vGdkhaB`=QPk4=i7Ha>UB4u`prlQ8G+BA;4s4l5M>$R)}e) z*UJm{U#IW=z2>BGi-OJhz2*0-%YS_Q@H?!*q2+YV&i|ih7XE*`{X6sLxgU-**}vMI zkj*Ws@*%x@bF&*mEB9rV z=4KgIqpTS1b_FS!DO+obbP6oF_OQA!m@7OL`5~jIswgVRusFHGUgLq~EauZpY#wvl z9)4)?57v?wxG7h_sMGY|AVcc^dd7OoaEoV5(^@|=oGavQOxbgY?Ez=_r|mHZs?M=z z2wuDPjkSN46_+oEjLg!!9}br}Hn<)Tj&O7E*I*ZBs$2Rk)P!B8wwU4Ht5;gA=eRnB z|1WW{JjlN0rg_fP+%4|RvUW_r7BeREzsPOqGhOiW?P_hE4>xr0d=P$++tB;-?U4)p zT=Tv(^M9PiA8~H(21f1!`hg0Q&e#|92z|F|R(m&3;qLS3xNlPz1+u(qonurvaZ}BK z!jnuF!ozA7Z1HEbZ1SD8P-fZofLz@mxe4_n;Erk+N3KhF<^1<(HXe6!SVL z2cJ(-*exM`OpKp-8uyPk-wI2A>|ji)I%cXOcAI%)1keBQUWU&vB^F5k(}|sLX#Q13 u>~iEHsnurBf4*+sSNL~&@S9KdjLYY&{33qhJ}(0U1B0ilpUXO@geCy#6r+^@ literal 0 HcmV?d00001 diff --git a/demos/2d/navpoly/engine.cfg b/demos/2d/navpoly/engine.cfg index 40515dd3d2..b750419915 100644 --- a/demos/2d/navpoly/engine.cfg +++ b/demos/2d/navpoly/engine.cfg @@ -2,6 +2,7 @@ name="Navigation Polygon (2D)" main_scene="res://navigation.scn" +icon="res://icon.png" [display] diff --git a/demos/2d/navpoly/icon.png b/demos/2d/navpoly/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..df7fb43633f292c0a881d426962211ae9907f4b2 GIT binary patch literal 2420 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4rT@hhPm4t-!L#R9t!XYarN=>S-Ji7s-16E z?s&6&>uXG9ffPX7%p3dBtrZp;0-7&9U*B zF>&c}iP;5ZUGYh|MHM}XsRg=*=~?*=*#(UmIW>AlSvvYD+Iop$5phXrMG49I>Dg78 zdG!XyIk`nGX<3!gv8j>KNy+IYQ86inW!;&%wW*mEnmTbQ8D+(l6H2NluGs#{&?G-4 zy|k=$s*zb?Mg5G(=wxH_;_|xbr8Sd_D*80EqnB=e%E@I_-@c@>Vb-#(&zEg}VPa9H zt`)g_+l$7|;~wD<;f7G-u_tMH?PW zo`0-o+Rm;i+m~#7I)BZ*rtVb>*WH`7{PMI#XE->`r!PJ?Z`I9?Nm~|geAqv0|AKXQ zT6)(k-tc(ts_Ro0oSZo4=C&OSjc?q2C_lMdQD z7s_%P8*u2lv8z|Hh}C!PD5+nSUAj0ee|8j`LQ3w`w7eN}n0b;}WjRXh4l*z>a29w( z7Bet#3xhBt!>lslR`TcnSKr%P&eVB&@#g6$+eb(J%KROl_Vr*x>iO+_c{lg7R|j^7Ptsgz z5MgnDzFqCNoXqO#-@7fpPm0`oD|T<{{@YvM9ByThI>`LRf1Zu({2lxD)ouIRVPenp zO?5;57kkSm@4|1`v0ZJhRShy_2<9sEG;XGK3%V$|Nm=E=I{GEs(w63d0O`0Hoe?DF7m9u=S~Nu7vFyc7>IEF z{JX#3w{Py8IS+Wez4y=fHuv4CM5*1DJW(~yv*xc0sGjiKEx=BI;mYHU8#iVu#KiX> zjPZCza=ozniVLpnAt| zgTETKp?cw8J{G#OZQRZ6)pqdP7Do5kTAk~cJMiEA&d-pfGwtM&t=YZ=MB$7j=abA5IGJ-JKdoHK(5151xX z``xxxpCl4qALey$b{4ldcjJCmcqZco2F;ig>P-@j;R0)#kM7*McXj_|wS#LOu@yOU zdo=LBHhvow`jnA@GsxkDY2q_Z77Y%))E)NA=C(+$QL8%td}`S0z{8v_yc||OQ7)4b zp3Saoay;_lwuzb#4~O}(-5;Ojq_Qz*$#y6lGx})aGt)0k&fsCe!Ul^sUvjT`?l5GQ zkuBT)?0I@rfV2D5N=5BsCJhJ9T>q-FM!}<5LgwLZ9o2}?I}=xd;oHcopb=Jt%M(nlOQPH_Mz(=e& zfmPAsd{OjwH{j&mTpt`l;=l5z`7)nu2w*zbITd_Da==zwX~p zd50Nu=lytW-{x!*-xDJcAD?Mds$}=F7cVzwh?!*MxGUv;lI8KDsEVZlK8E)ruP><3oP5#cz=u6L ztKY8GTViP!75!pkA9w!AGvd>`T|M^(&Gb6{SW;JPvq9GG>TiW#4-2mAjCoqLGso() zys$v0#>xznmDf)Hr$+i+4#-_-I~3RXRrP)=C&wvQk5m|{Y!hIa<}y5 z{`z>^!^T*scAaC2|w&^{w@VR`vUrG4H?zxUngWb|Tse`)bkpKTF$WnT4`)-2XP)N8kF z>YU%jKh|wd{!_7DBJ9f!jqvgw#l*KvUq09h&ewWfp8KUe@`HY>lgdo7pRZQca_MJl z`I~uZKK=hcMu8_^<6@7?nSa*UN@GYxCG;R_vK} zP4vb~7J*&Q#hL%y`N%$7P*%vKs_ei_trV?_`4T*eCGtr}p7V<-RoO(pv6}YL)lmBS zRD*jfY#AC@SY7owv+grSJUd!q66A5f?`0gr6alX%Q@q;3%Virxc_tJzO#IEvpdjEk z)pXypjK=J?{;9za8CWV99(-nF7Mkap&Rvxo_xpB(&6>qI9}A{vyxjbHk6Omm5WR=( zvDcg@PiXMeNWB`o%G^+zVTCr!hZl`ftp@ zvHreE$6vgtbJut|(dmOC!#@p{Lluhp-&f3d<$izF&HdaB{!BGuProj-uCqJBuu}4i s9ftz9WYrGiR}$izB>cT9nSRIzq=!$L>0hbOz`(%Z>FVdQ&MBb@01%{nX#fBK literal 0 HcmV?d00001 diff --git a/demos/2d/normalmaps/engine.cfg b/demos/2d/normalmaps/engine.cfg index f0002dc2b8..4f9f4f67f0 100644 --- a/demos/2d/normalmaps/engine.cfg +++ b/demos/2d/normalmaps/engine.cfg @@ -2,6 +2,7 @@ name="2D Normal Mapping" main_scene="res://normalmap.scn" +icon="res://icon.png" [display] diff --git a/demos/2d/normalmaps/icon.png b/demos/2d/normalmaps/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4e5d835005653fb24498adf8a4fb82baf6791067 GIT binary patch literal 4876 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 literal 0 HcmV?d00001 diff --git a/demos/2d/screen_space_shaders/engine.cfg b/demos/2d/screen_space_shaders/engine.cfg index 527e2f8f0a..383ca7bf11 100644 --- a/demos/2d/screen_space_shaders/engine.cfg +++ b/demos/2d/screen_space_shaders/engine.cfg @@ -2,6 +2,7 @@ name="Screen-Space Shaders" main_scene="res://screen_shaders.scn" +icon="res://icon.png" [display] diff --git a/demos/2d/screen_space_shaders/icon.png b/demos/2d/screen_space_shaders/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..65247f9ae7588542738d4ad6b33b178cf932969b GIT binary patch literal 3341 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 literal 0 HcmV?d00001 diff --git a/demos/2d/sdf_font/engine.cfg b/demos/2d/sdf_font/engine.cfg index bdf26ce741..bf983041fa 100644 --- a/demos/2d/sdf_font/engine.cfg +++ b/demos/2d/sdf_font/engine.cfg @@ -2,3 +2,4 @@ name="Signed Distance Field Font" main_scene="res://sdf.scn" +icon="res://icon.png" diff --git a/demos/2d/sdf_font/icon.png b/demos/2d/sdf_font/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..be9fefa8b0692ff7c8cb7a926e84e358cc2ab358 GIT binary patch literal 1534 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4rT@hhPm4t-!L#R$_Ds^xH2#>_+SIKjvlyk z{GgY&x2Koqgp!v2;^v8^t-XbfcTXIiQr;dC7wR7gZvP)LBk|Fr{qX4Z8F1q9wavj5zUZHHE^*|%)v&V@@i z&sw;mZ$@fj!o@v1&+giKe8a}3oXV!Ein^?_%Jjnch?vJ`kDuJU`QZB1yH+mSHgEC5 z_DR#KJKOVXt22tT(^Au8k`iKL=1%IL+tfF;yQ90Hp(HOiJ1+Iiwyhhc&tE%l_OhAN z7EPTzv!}bSxv9ObrlzF0Fgq(cGBPqO?C9q8d)BPjx^&UnDYIA2nK7}wrM|qhqM#r( zDq+WpC7Tw_ThKFsgXfJJ0|NtlNswPKgYS>q`xhDJ#BH3!z`)Y!>Eaj?ad_$U^lBkT zfd9@ zd}o4$L~@IPF!SOcSq*G$x2IY@Slzg$IjrW!xu>~mKV#}N9fT(B4qdrFbD~%agT|!g zEFO~H>~;^Bw;s!4_@TmkAVq?OAysBI$6*ErgWjUr2J{MdeQQ^$ZaANsR z#%M9m28D)$V(c}J5to@5?gR@q>UlLdG^{WUq^q}l~cIVmm=cY0NUFok7D z`mP6)-R$q_IdL!w&wDGs>wkPU(mnUX-&=n)cH5_DXKO}Do}D4FJ@;jTmeRM! z4M{DtBNVosYIcs(uzqoX|AH-V_Vh1|%niYlpF7x2c*t3uo2UQh;DW%F!n@>IMJgwJ zvAz?|)E6lx+q^w$rb%&A)E?!=SsupQCV4UFw@gYr!O;7HKQ-s6g~GSV%-;;!ycqJI zroQoCU0c?XaYQmfg)gi0qz$vF*ki6~mJ9Z#Zf-9KEO~1De~#*OpT)j;j&*XAzOYP` zdBE@?kbz^{Rfd8?$qtMM(ti63NOc`#dg|~+D>7Q?414=AowCU9UtZh#%xhqoGwV?E zQ)Sz-v`cXttN(5|FD2=eqISLQz|;*3(r?}}^8DzsvA>E@aZdD%b00#UtIwUjD(b<^ zmBCJ1?zo=t%4s l^VRVC*W>ra*Z%#_tdey+z0xg2f`Ng7!PC{xWt~$(69By{(cb_7 literal 0 HcmV?d00001 diff --git a/demos/2d/splash/engine.cfg b/demos/2d/splash/engine.cfg index cb50c7b1be..e461426305 100644 --- a/demos/2d/splash/engine.cfg +++ b/demos/2d/splash/engine.cfg @@ -2,6 +2,7 @@ name="Splash Screen" main_scene="res://splash.xml" +icon="res://icon.png" [display] diff --git a/demos/2d/splash/icon.png b/demos/2d/splash/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..88620eb35bc308b46f11b91c4c0e8978acbe6a66 GIT binary patch literal 3408 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 Dp<-_H literal 0 HcmV?d00001 diff --git a/demos/2d/sprite_shaders/engine.cfg b/demos/2d/sprite_shaders/engine.cfg index 09f9a59566..17bdada188 100644 --- a/demos/2d/sprite_shaders/engine.cfg +++ b/demos/2d/sprite_shaders/engine.cfg @@ -2,3 +2,4 @@ name="2D Shaders for Sprites" main_scene="res://sprite_shaders.scn" +icon="res://icon.png" diff --git a/demos/2d/sprite_shaders/icon.png b/demos/2d/sprite_shaders/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b044b31f931ff49ad301567bb69b942fce247b96 GIT binary patch literal 3934 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 literal 0 HcmV?d00001 diff --git a/demos/3d/navmesh/icon.png b/demos/3d/navmesh/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5b354f931cf6dbd6582c4c880fad25a7f0feb5d7 GIT binary patch literal 2803 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 literal 0 HcmV?d00001 diff --git a/demos/3d/sat_test/engine.cfg b/demos/3d/sat_test/engine.cfg index cc215c83e8..82c688635d 100644 --- a/demos/3d/sat_test/engine.cfg +++ b/demos/3d/sat_test/engine.cfg @@ -2,3 +2,4 @@ name="SAT Collision Test" main_scene="res://sat_test.xml" +icon="res://icon.png" diff --git a/demos/3d/sat_test/icon.png b/demos/3d/sat_test/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b89c5a7467de41aaa96e179c1886d83c5343e501 GIT binary patch literal 2699 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 literal 0 HcmV?d00001 diff --git a/demos/gui/rich_text_bbcode/engine.cfg b/demos/gui/rich_text_bbcode/engine.cfg index e0ea296f6d..5f68b6a0e6 100644 --- a/demos/gui/rich_text_bbcode/engine.cfg +++ b/demos/gui/rich_text_bbcode/engine.cfg @@ -2,3 +2,4 @@ name="Rich Text Label (BBCode)" main_scene="res://rich_text_bbcode.scn" +icon="res://icon.png" diff --git a/demos/gui/rich_text_bbcode/icon.png b/demos/gui/rich_text_bbcode/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..78358ba71b27b9de3d800aa1cec1cacb61519481 GIT binary patch literal 2293 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4rT@hhPm4t-!L#Rtq<@CaaC2-QdZXZ|Nnnu zV~c`#pUIykr(7?{3%`QrTf3jqPauU@^fwRJQzvtGDxv6_NvM@N^3hqscswThO$ zq@=vCu;isnmx_u?V`38A+`JT=+*H+d)MS;OJbAKd)8;vI=1%CJ*xlV56cp^|7ieN) zsj8&T@aNC-=g-fcJ-cDU#>B)F8*2x3X~n;P|Ni{>^WD35^XAQ;HEYg{88b7|vr|&i zlakUbENmJ6|Nr{+EAzYeuU@@;{P^+Bn>VjtzkcY@;eGq|ZQZ(U%9Lr+(FxJfalygi zK0X01uAUkqQon!yW_|kf>eZ{um#=7PX|1nstf;8Y%F0Pg%S=c}aB*?Bva++bwhzk;H%N##;eAlks z>(;GbvSjJRiIem5i^9S}y}f-+Ow1U+e`mdSpLhMnnwt93(uySua+>Pn@^YhO14ES! zOsf)gzJLG5^yw4F`3syUPaipQl&^0;|Ee_t3l`6xzficRfA!K#(Zr0h;+V+Dn3$NT zFSqbIg@69^=~Je}2bIS6<*YB+wmoOReuMqe zg)GxuMW_tkSH$OyQ5_Dx{~Dc1x=0lRTarmTN3@9B6keS8pmetx<^H|7L!R)57g?KINAR zHiieQ6{yT<*O^=~{TvW<7&mgnTnz?OaRe&8=TJO%uji-GUi7t3@y8M%`;5SvVe=5zf@4txVGnN(S z8&CzU`a}Ia~f0D%pPvy>&k0?sdIK z@{E5ZKeNQkq&zvI$uadbd-FNwQ%g&79B%ALZna21<-hoo&PSWF0^c~J?dJQK>^fI; z^tS{)VG&%?{&O-%)S6t^HKva``;<>usR=e6I{(p)XxPAuR^}wi4eLn)7!U^*WuOYTYuM2ee37{Suu`DV}|A~ zhLS=iUJtpzEqmDxNNGqHY+qBX_v7uBvK5Z2x17HBgYAHLf8W$})`)Jgd8`lf#It^X zu!@?|s{YgI_In1QWkzcbMof_n6JvN|I(6C>mKB?;=d^H&KRr>(+Gb?%by*@;%Zp$S zjuHm9XAvhKPpiB*_uW87P;&2ejecn%-{j38!@KzmuYpBP zHlxL}99{wciNS)0(;E6`CNA_nlA@yM#3JydTXw;1hGXx|d@ap|jdseOW-{!PlAq2{ zQrcaT%>3!!*{g+J*PZ?>me35@BGGm9^|QSl zkB?bdkMa2*sYlHdV&(_tNc#8s)DSv@M>te(J`c9NpbBlCvTv8K!Ztr8Dzh z=-U)(7_Qg(;M=9ZZ%)Pu+jg<-7Yk&|FgBPnV|9YWf>ecLZd(|+B6w!JRXHstr>*XB zp2?HLE`-waftA9UC%iP%Mz`W$6OsrK{%DSi|*ZWM4cS&ifa*iX50HY(PwqfL60TH&hcOn`k4<|4%c%5-A+|BI! Rhk=2C!PC{xWt~$(69As#Ajkj! literal 0 HcmV?d00001 diff --git a/demos/misc/instancing/engine.cfg b/demos/misc/instancing/engine.cfg index 52a28a3fce..76b0c97721 100644 --- a/demos/misc/instancing/engine.cfg +++ b/demos/misc/instancing/engine.cfg @@ -2,6 +2,7 @@ name="Scene Instancing Demo" main_scene="res://container.scn" +icon="res://icon.png" [physics_2d] diff --git a/demos/misc/instancing/icon.png b/demos/misc/instancing/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7a6de677c5f07f5779df9b8d0050863e40bb61da GIT binary patch literal 2185 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4rT@hhPm4t-!L#Rbp-f?xcd0`yvon#cALy? z*v#cMo!e<5SIiRbsKwk73%P^ma(hhW3Yo{{GlM&6C71s!u7KHGq4T-J7jXH`FMqDY6&>=z3HqO{CT39*S z+9lG*+uOs-+t=GOqkUUc<@(^#H9Rp3^&;jNh0W3ooX+dm&t~7xY1zYP*2-^NC2v(M zXq<2B8YV0smK5Oc>h9}Uvd%GorFis0o|t)NQFC}gXDbEHQV*KR?m1oEd$NqjBwn9B zS(iR3$6gVKULng)KFkdAb7DMM|VcRAl%LY-?+M~&Z*D`a?W@QO!Bnqj;n>of= zI7Pa6c;xo(jBnf=TEEFGXO(yE3bVAO3W-Zq6PE~u&sPeYtsOF3DR8Ec&vYgCiSmw} z($?*K?rj2=ZKk$$?#{LDjx`g*%GSq~d?+p!FfZN`S8z8sPu@KDaCY|M)lJ%Sfwo%3z}sRJcBQIihx}kmtl>DRi%SNMY?BswSSp_W!cM;lGEu$ z6GMwm6&7{|KRtbk3>%GqI{7%QxcaB+f3mI4(^*H{_fA%wQE*SuM(fS? zUut4{4>lU^^vqp+sW$w0{+26WPkny1MPhccU5WTjle&z`nm&odE(?`sDkfU1J`}3g z-gp)=ZQ8YyPc>$zi|O91PDy)xp`nk5_0Uq?1x3LVd{>@Z$ZxKx8G6sma+Uho8W~F? z$2+RBUh)z8t6dhb8gmBEkXf>+fO~=V?n}$;bPJQ5&S}h9y?V}sNwO9q3Obhq^0xlg z5xDJleqL_(R3omIkO^%KjGtJP^bW1MvstIu!=Wyts#1kJ@sp*K&+d0mXW69go$~O} zN)r~I3F#t+g40Y>A8{R@P@KWIS}TQ1Haw+8?9S58hpn5B8OHdSE^K8i_~En8PcYIj zb8GUQ3Dyi@a;6=B#a?~V$hubH_D8Z;=I8=BwgX)zQ$(AO#XHN$Z{NICJ>b@>h}j{! zavL7-+?QK&i{ri7!g~w_HyR?gtw~|c_^G=4&Wtr{)|@%>>xRw*ld}n5qbIEP{TZ}! z%ly_u3>kYvr_C}EP5Jw$SBjfq##Xbl$sb%8KWs>u+OzcWBe$UbU8Z;X{@l4U&CM>e zjq%pnO;es^G93A5!IC+fd5NyayiFB>l~bMAWRCt`y@2&j_CXn`gUvTPvkR;o!me&S zs?C_O=cbhS|G&TaHY`xdoa&<%c0*8wd5Q0=DK^Ye0uyG4PG4}Sxmf6#U%e2gc|z5y zDRG6=DhNnpnySFr-qn+ z%&b!5a}94iXBfq%eORKRzTC2b`;_(L#lh+_!8b}{)`k0RGThVrkc+#!xVKbH?b{+d z2Jb!lcZeNP_|B)GGwqO+=H#U^zUxo6S{I$38oRH$%|CC+(-lWbY#;iE@!nZ7w$~2wPD;P{_(8Lq_ysUd3`TB=u#^@!rn`x!C)vzfqs0=<5r)KBnaN1DAJkv$i&Y|?-wuDN;$`Q?~d0`F<%ZEJ;ub$*6Ok5ywOl*?O<^#96 zCP{NJCZFTpb5oZm{+{hkH%-yRf4o}^&>)O+^@9z!Ja}4b9os{mZ(4dxMx!q;;qA6mk zRiFO8wXU7N|IMwft2Yy=@hEIu% lhlMi_#9!lhu%D@h)lb_wd@q}d3IhWJgQu&X%Q~loCIAgusuBPI literal 0 HcmV?d00001 From 18392e28b6ab689ce334bc112f259b5d8be5c2ce Mon Sep 17 00:00:00 2001 From: Franklin Sobrinho Date: Thu, 29 Oct 2015 20:44:12 -0300 Subject: [PATCH 23/78] Fix "Align with view" undo, fixes #1443 --- tools/editor/plugins/spatial_editor_plugin.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tools/editor/plugins/spatial_editor_plugin.cpp b/tools/editor/plugins/spatial_editor_plugin.cpp index 3ab9339265..dadd8c3050 100644 --- a/tools/editor/plugins/spatial_editor_plugin.cpp +++ b/tools/editor/plugins/spatial_editor_plugin.cpp @@ -1957,11 +1957,11 @@ void SpatialEditorViewport::_menu_option(int p_option) { if (!se) continue; - Vector3 original_scale = sp->get_scale(); - sp->set_global_transform(camera_transform); - sp->set_scale(original_scale); - undo_redo->add_do_method(sp,"set_global_transform",sp->get_global_transform()); - undo_redo->add_undo_method(sp,"set_global_transform",se->original); + Transform xform = camera_transform; + xform.scale_basis(sp->get_scale()); + + undo_redo->add_do_method(sp,"set_global_transform",xform); + undo_redo->add_undo_method(sp,"set_global_transform",sp->get_global_transform()); } undo_redo->commit_action(); } break; From 8c0c279280015391e5620bd59428ccab99683224 Mon Sep 17 00:00:00 2001 From: Phobos Tro Date: Fri, 30 Oct 2015 19:56:07 +0800 Subject: [PATCH 24/78] Fixing memleaks in main/main.cpp --- main/main.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/main/main.cpp b/main/main.cpp index 9cd190a0e8..ef056d3219 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -796,7 +796,6 @@ Error Main::setup(const char *execpath,int argc, char *argv[],bool p_second_phas main_args.clear(); print_help(execpath); - if (performance) memdelete(performance); @@ -812,6 +811,8 @@ Error Main::setup(const char *execpath,int argc, char *argv[],bool p_second_phas memdelete(packed_data); if (file_access_network_client) memdelete(file_access_network_client); + if(path_remap) + memdelete(path_remap); // Note 1: *zip_packed_data live into *packed_data // Note 2: PackedData::~PackedData destroy this. @@ -820,7 +821,7 @@ Error Main::setup(const char *execpath,int argc, char *argv[],bool p_second_phas // memdelete( zip_packed_data ); //#endif - + unregister_core_driver_types(); unregister_core_types(); OS::get_singleton()->_cmdline.clear(); From 825bc8b2932acf779703fbfa541725ce432546b1 Mon Sep 17 00:00:00 2001 From: eska Date: Sun, 1 Nov 2015 10:33:28 +0100 Subject: [PATCH 25/78] Add default focus StyleBox to MenuButton --- scene/resources/default_theme/default_theme.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/scene/resources/default_theme/default_theme.cpp b/scene/resources/default_theme/default_theme.cpp index 7e36366e74..ce042eac99 100644 --- a/scene/resources/default_theme/default_theme.cpp +++ b/scene/resources/default_theme/default_theme.cpp @@ -311,6 +311,7 @@ void make_default_theme() { t->set_stylebox("pressed","MenuButton", sb_button_pressed ); t->set_stylebox("hover","MenuButton", sb_button_pressed ); t->set_stylebox("disabled","MenuButton", make_empty_stylebox(0,0,0,0) ); + t->set_stylebox("focus","MenuButton", sb_button_focus ); t->set_font("font","MenuButton", default_font ); From fc2c3bda5c637b82d00b42e5da948a09b8bd9aed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Sun, 1 Nov 2015 17:50:44 +0100 Subject: [PATCH 26/78] Fix arguments parsing in the main function Fixes #2611 which was a regression from 692216b86ab97db91e7ff3903ffc9ac8e37433f6. The bogus behaviour considered that if there were more than one arguments left to parse, they would be a pair of arguments (switch and its parameter), and thus skipped the next argument in all cases (thus potentially skipping a "-editor", which triggered #2611). This is fixed by checking first for arguments that don't expect a parameter, and only afterwards for arguments that expect a parameter. And if a "pair" of arguments is not valid, we no longer increment the counter. --- main/main.cpp | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/main/main.cpp b/main/main.cpp index 9cd190a0e8..3ef357e253 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -1007,8 +1007,21 @@ bool Main::start() { bool export_debug=false; List args = OS::get_singleton()->get_cmdline_args(); for (int i=0;i Date: Sun, 1 Nov 2015 20:53:26 +0100 Subject: [PATCH 27/78] Cosmetic fixes to SCons buildsystem - Removed trailing spaces - Made sure all indentation is done using tabs (fixes #39) - Potentially fixed an identation issue for openssl check --- SConstruct | 51 +++++++++++++++-------------- bin/tests/SCsub | 2 -- core/SCsub | 2 -- core/bind/SCsub | 2 -- core/io/SCsub | 2 -- core/math/SCsub | 2 -- core/os/SCsub | 2 -- drivers/SCsub | 1 - drivers/alsa/SCsub | 2 -- drivers/builtin_zlib/SCsub | 2 +- drivers/chibi/SCsub | 2 -- drivers/dds/SCsub | 1 - drivers/etc1/SCsub | 1 - drivers/gl_context/SCsub | 1 - drivers/gles2/shaders/SCsub | 2 -- drivers/jpg/SCsub | 1 - drivers/mpc/SCsub | 1 - drivers/nedmalloc/SCsub | 1 - drivers/nrex/SCsub | 2 -- drivers/ogg/SCsub | 1 - drivers/openssl/SCsub | 2 -- drivers/png/SCsub | 1 - drivers/squish/SCsub | 1 - drivers/theora/SCsub | 3 -- drivers/unix/SCsub | 2 -- drivers/vorbis/SCsub | 2 -- drivers/webp/SCsub | 1 - drivers/windows/SCsub | 2 -- main/SCsub | 2 -- modules/SCsub | 2 -- modules/gdscript/SCsub | 2 -- modules/gridmap/SCsub | 3 -- platform/android/SCsub | 4 +-- platform/bb10/SCsub | 1 - platform/flash/SCsub | 2 -- platform/windows/SCsub | 2 +- scene/2d/SCsub | 2 -- scene/3d/SCsub | 4 +-- scene/SCsub | 2 -- scene/animation/SCsub | 2 -- scene/audio/SCsub | 2 -- scene/gui/SCsub | 2 -- scene/io/SCsub | 2 -- scene/main/SCsub | 2 -- scene/resources/SCsub | 1 - scene/resources/default_theme/SCsub | 2 -- servers/SCsub | 2 -- servers/audio/SCsub | 2 -- servers/physics/SCsub | 2 -- servers/physics/joints/SCsub | 3 -- servers/physics_2d/SCsub | 1 - servers/spatial_sound/SCsub | 2 -- servers/spatial_sound_2d/SCsub | 2 -- servers/visual/SCsub | 2 -- tools/SCsub | 2 -- tools/collada/SCsub | 2 -- tools/doc/SCsub | 2 -- tools/docdump/SCsub | 2 -- tools/editor/SCsub | 11 +++---- tools/editor/fileserver/SCsub | 4 --- tools/editor/icons/SCsub | 19 +++++------ tools/editor/io_plugins/SCsub | 4 --- tools/editor/plugins/SCsub | 4 --- tools/freetype/SCsub | 4 +-- tools/pck/SCsub | 1 - 65 files changed, 46 insertions(+), 159 deletions(-) diff --git a/SConstruct b/SConstruct index 0087d97af3..05c53a15fc 100644 --- a/SConstruct +++ b/SConstruct @@ -59,7 +59,7 @@ platform_arg = ARGUMENTS.get("platform", False) if (os.name=="posix"): pass elif (os.name=="nt"): - if (os.getenv("VSINSTALLDIR")==None or platform_arg=="android"): + if (os.getenv("VSINSTALLDIR")==None or platform_arg=="android"): custom_tools=['mingw'] env_base=Environment(tools=custom_tools,ENV = {'PATH' : os.environ['PATH']}); @@ -185,7 +185,7 @@ if selected_platform in platform_list: if env['vsproj']=="yes": env.vs_incs = [] env.vs_srcs = [] - + def AddToVSProject( sources ): for x in sources: if type(x) == type(""): @@ -197,12 +197,12 @@ if selected_platform in platform_list: basename = pieces[0] basename = basename.replace('\\\\','/') env.vs_srcs = env.vs_srcs + [basename + ".cpp"] - env.vs_incs = env.vs_incs + [basename + ".h"] - #print basename - env.AddToVSProject = AddToVSProject - + env.vs_incs = env.vs_incs + [basename + ".h"] + #print basename + env.AddToVSProject = AddToVSProject + env.extra_suffix="" - + if env["extra_suffix"] != '' : env.extra_suffix += '.'+env["extra_suffix"] @@ -229,7 +229,7 @@ if selected_platform in platform_list: #must happen after the flags, so when flags are used by configure, stuff happens (ie, ssl on x11) detect.configure(env) - #env['platform_libsuffix'] = env['LIBSUFFIX'] + #env['platform_libsuffix'] = env['LIBSUFFIX'] suffix="."+selected_platform @@ -284,10 +284,11 @@ if selected_platform in platform_list: if (env['musepack']=='yes'): env.Append(CPPFLAGS=['-DMUSEPACK_ENABLED']); - if (env['openssl']!='no'): - env.Append(CPPFLAGS=['-DOPENSSL_ENABLED']); - if (env['openssl']=="builtin"): - env.Append(CPPPATH=['#drivers/builtin_openssl2']) + + if (env['openssl']!='no'): + env.Append(CPPFLAGS=['-DOPENSSL_ENABLED']); + if (env['openssl']=="builtin"): + env.Append(CPPPATH=['#drivers/builtin_openssl2']) if (env["builtin_zlib"]=='yes'): env.Append(CPPPATH=['#drivers/builtin_zlib/zlib']) @@ -337,7 +338,7 @@ if selected_platform in platform_list: if (env['colored']=='yes'): methods.colored(sys,env) - + if (env['etc1']=='yes'): env.Append(CPPFLAGS=['-DETC1_ENABLED']) @@ -356,22 +357,22 @@ if selected_platform in platform_list: SConscript("main/SCsub") SConscript("platform/"+selected_platform+"/SCsub"); # build selected platform - - # Microsoft Visual Studio Project Generation - if (env['vsproj'])=="yes": - + + # Microsoft Visual Studio Project Generation + if (env['vsproj'])=="yes": + AddToVSProject(env.core_sources) AddToVSProject(env.main_sources) - AddToVSProject(env.modules_sources) + AddToVSProject(env.modules_sources) AddToVSProject(env.scene_sources) AddToVSProject(env.servers_sources) AddToVSProject(env.tool_sources) - + #env['MSVS_VERSION']='9.0' env['MSVSBUILDCOM'] = "scons platform=" + selected_platform + " target=" + env["target"] + " bits=" + env["bits"] + " tools=yes" env['MSVSREBUILDCOM'] = "scons platform=" + selected_platform + " target=" + env["target"] + " bits=" + env["bits"] + " tools=yes vsproj=true" env['MSVSCLEANCOM'] = "scons --clean platform=" + selected_platform + " target=" + env["target"] + " bits=" + env["bits"] + " tools=yes" - + debug_variants = ['Debug|Win32']+['Debug|x64'] release_variants = ['Release|Win32']+['Release|x64'] release_debug_variants = ['Release_Debug|Win32']+['Release_Debug|x64'] @@ -382,11 +383,11 @@ if selected_platform in platform_list: targets = debug_targets + release_targets + release_debug_targets msvproj = env.MSVSProject(target = ['#godot' + env['MSVSPROJECTSUFFIX'] ], incs = env.vs_incs, - srcs = env.vs_srcs, - runfile = targets, - buildtarget = targets, - auto_build_solution=1, - variant = variants) + srcs = env.vs_srcs, + runfile = targets, + buildtarget = targets, + auto_build_solution=1, + variant = variants) else: diff --git a/bin/tests/SCsub b/bin/tests/SCsub index 6613df9c05..57c9bc63b2 100644 --- a/bin/tests/SCsub +++ b/bin/tests/SCsub @@ -10,5 +10,3 @@ Export('env') lib = env.Library("tests",env.tests_sources) env.Prepend(LIBS=[lib]) - - diff --git a/core/SCsub b/core/SCsub index d04041141c..4ce91c794f 100644 --- a/core/SCsub +++ b/core/SCsub @@ -63,5 +63,3 @@ SConscript('bind/SCsub'); lib = env.Library("core",env.core_sources) env.Prepend(LIBS=[lib]) - - diff --git a/core/bind/SCsub b/core/bind/SCsub index c6ba1fa537..7b4a6acbc0 100644 --- a/core/bind/SCsub +++ b/core/bind/SCsub @@ -3,5 +3,3 @@ Import('env') env.add_source_files(env.core_sources,"*.cpp") Export('env') - - diff --git a/core/io/SCsub b/core/io/SCsub index 5aecb4b915..3ff9b355a4 100644 --- a/core/io/SCsub +++ b/core/io/SCsub @@ -5,5 +5,3 @@ env.add_source_files(env.core_sources,"*.c") #env.core_sources.append("io/fastlz.c") Export('env') - - diff --git a/core/math/SCsub b/core/math/SCsub index c6ba1fa537..7b4a6acbc0 100644 --- a/core/math/SCsub +++ b/core/math/SCsub @@ -3,5 +3,3 @@ Import('env') env.add_source_files(env.core_sources,"*.cpp") Export('env') - - diff --git a/core/os/SCsub b/core/os/SCsub index c6ba1fa537..7b4a6acbc0 100644 --- a/core/os/SCsub +++ b/core/os/SCsub @@ -3,5 +3,3 @@ Import('env') env.add_source_files(env.core_sources,"*.cpp") Export('env') - - diff --git a/drivers/SCsub b/drivers/SCsub index bc46bf2cec..b9567dec1a 100644 --- a/drivers/SCsub +++ b/drivers/SCsub @@ -93,4 +93,3 @@ env.Prepend(LIBS=lib_list) #lib = env.Library("drivers",env.drivers_sources) #env.Prepend(LIBS=[lib]) - diff --git a/drivers/alsa/SCsub b/drivers/alsa/SCsub index bcd231579c..9fbb467baa 100644 --- a/drivers/alsa/SCsub +++ b/drivers/alsa/SCsub @@ -3,5 +3,3 @@ Import('env') env.add_source_files(env.drivers_sources,"*.cpp") Export('env') - - diff --git a/drivers/builtin_zlib/SCsub b/drivers/builtin_zlib/SCsub index c322b236ab..e5c81c0b3b 100644 --- a/drivers/builtin_zlib/SCsub +++ b/drivers/builtin_zlib/SCsub @@ -1,7 +1,7 @@ Import('env') zlib_sources = [ - + "builtin_zlib/zlib/adler32.c", "builtin_zlib/zlib/compress.c", "builtin_zlib/zlib/crc32.c", diff --git a/drivers/chibi/SCsub b/drivers/chibi/SCsub index bcd231579c..9fbb467baa 100644 --- a/drivers/chibi/SCsub +++ b/drivers/chibi/SCsub @@ -3,5 +3,3 @@ Import('env') env.add_source_files(env.drivers_sources,"*.cpp") Export('env') - - diff --git a/drivers/dds/SCsub b/drivers/dds/SCsub index e475de1dba..159829384f 100644 --- a/drivers/dds/SCsub +++ b/drivers/dds/SCsub @@ -8,4 +8,3 @@ dds_sources = [ env.drivers_sources+=dds_sources #env.add_source_files(env.drivers_sources, dds_sources) - diff --git a/drivers/etc1/SCsub b/drivers/etc1/SCsub index 251c3ffb86..4ce921ad9f 100644 --- a/drivers/etc1/SCsub +++ b/drivers/etc1/SCsub @@ -12,4 +12,3 @@ if (env["etc1"] != "no"): #env.add_source_files(env.drivers_sources, etc_sources) Export('env') - diff --git a/drivers/gl_context/SCsub b/drivers/gl_context/SCsub index 0177eec6a2..7cf8629fe1 100644 --- a/drivers/gl_context/SCsub +++ b/drivers/gl_context/SCsub @@ -3,4 +3,3 @@ Export('env'); env.add_source_files(env.drivers_sources,"*.cpp") env.add_source_files(env.drivers_sources,"*.c") - diff --git a/drivers/gles2/shaders/SCsub b/drivers/gles2/shaders/SCsub index 9679223b16..38177d725f 100644 --- a/drivers/gles2/shaders/SCsub +++ b/drivers/gles2/shaders/SCsub @@ -6,5 +6,3 @@ if env['BUILDERS'].has_key('GLSL120GLES'): env.GLSL120GLES('canvas_shadow.glsl'); env.GLSL120GLES('blur.glsl'); env.GLSL120GLES('copy.glsl'); - - diff --git a/drivers/jpg/SCsub b/drivers/jpg/SCsub index e1fcc5ea89..df91b10a02 100644 --- a/drivers/jpg/SCsub +++ b/drivers/jpg/SCsub @@ -10,4 +10,3 @@ jpg_sources = [ env.drivers_sources+=jpg_sources #env.add_source_files(env.drivers_sources, jpg_sources) - diff --git a/drivers/mpc/SCsub b/drivers/mpc/SCsub index af61d95e4c..32ffdb863f 100644 --- a/drivers/mpc/SCsub +++ b/drivers/mpc/SCsub @@ -19,4 +19,3 @@ env.add_source_files(env.drivers_sources,"*.cpp") #env.add_source_files(env.drivers_sources, mpc_sources) Export('env') - diff --git a/drivers/nedmalloc/SCsub b/drivers/nedmalloc/SCsub index 8c0028b41d..8e6edd1f96 100644 --- a/drivers/nedmalloc/SCsub +++ b/drivers/nedmalloc/SCsub @@ -3,4 +3,3 @@ Export('env'); env.add_source_files(env.drivers_sources,"*.cpp") #env.add_source_files(env.drivers_sources,"*.c") - diff --git a/drivers/nrex/SCsub b/drivers/nrex/SCsub index 2441d3061b..a00c7b86f4 100644 --- a/drivers/nrex/SCsub +++ b/drivers/nrex/SCsub @@ -1,4 +1,3 @@ - Import('env') sources = [ @@ -6,4 +5,3 @@ sources = [ 'regex.cpp', ] env.add_source_files(env.drivers_sources, sources) - diff --git a/drivers/ogg/SCsub b/drivers/ogg/SCsub index dd59890064..c85d4404f3 100644 --- a/drivers/ogg/SCsub +++ b/drivers/ogg/SCsub @@ -8,4 +8,3 @@ ogg_sources = [ if env['theora'] != "yes" or env['use_theoraplayer_binary'] != "yes": env.drivers_sources+=ogg_sources - diff --git a/drivers/openssl/SCsub b/drivers/openssl/SCsub index 7197364e01..6d3e7e6732 100644 --- a/drivers/openssl/SCsub +++ b/drivers/openssl/SCsub @@ -4,5 +4,3 @@ env.add_source_files(env.drivers_sources,"*.cpp") env.add_source_files(env.drivers_sources,"*.c") Export('env') - - diff --git a/drivers/png/SCsub b/drivers/png/SCsub index 7b937d4dfb..9ee066cbb2 100644 --- a/drivers/png/SCsub +++ b/drivers/png/SCsub @@ -38,4 +38,3 @@ env.drivers_sources+=png_sources #env.add_source_files(env.drivers_sources, png_sources) Export('env') - diff --git a/drivers/squish/SCsub b/drivers/squish/SCsub index d55a32ad5e..da39dc1ebc 100644 --- a/drivers/squish/SCsub +++ b/drivers/squish/SCsub @@ -21,4 +21,3 @@ if (env["tools"]=="yes"): #env.add_source_files(env.drivers_sources, squish_sources) Export('env') - diff --git a/drivers/theora/SCsub b/drivers/theora/SCsub index ecabce6c9d..faa1ede6a7 100644 --- a/drivers/theora/SCsub +++ b/drivers/theora/SCsub @@ -1,4 +1,3 @@ - Import('env') sources = [ @@ -34,5 +33,3 @@ sources = [ if env['use_theoraplayer_binary'] != "yes": env.drivers_sources += sources - - diff --git a/drivers/unix/SCsub b/drivers/unix/SCsub index bcd231579c..9fbb467baa 100644 --- a/drivers/unix/SCsub +++ b/drivers/unix/SCsub @@ -3,5 +3,3 @@ Import('env') env.add_source_files(env.drivers_sources,"*.cpp") Export('env') - - diff --git a/drivers/vorbis/SCsub b/drivers/vorbis/SCsub index 2c137629ac..4a16e80dfc 100644 --- a/drivers/vorbis/SCsub +++ b/drivers/vorbis/SCsub @@ -1,4 +1,3 @@ - Import('env') sources = [ @@ -37,4 +36,3 @@ env.drivers_sources += sources if env['theora'] != "yes" or env['use_theoraplayer_binary'] != "yes": env.drivers_sources += sources_lib - diff --git a/drivers/webp/SCsub b/drivers/webp/SCsub index 3ae046ff79..5596edbe09 100644 --- a/drivers/webp/SCsub +++ b/drivers/webp/SCsub @@ -61,4 +61,3 @@ env.drivers_sources+=webp_sources #env.add_source_files(env.drivers_sources, webp_sources) Export('env') - diff --git a/drivers/windows/SCsub b/drivers/windows/SCsub index bcd231579c..9fbb467baa 100644 --- a/drivers/windows/SCsub +++ b/drivers/windows/SCsub @@ -3,5 +3,3 @@ Import('env') env.add_source_files(env.drivers_sources,"*.cpp") Export('env') - - diff --git a/main/SCsub b/main/SCsub index 795c427c8d..fa60ffc3e8 100644 --- a/main/SCsub +++ b/main/SCsub @@ -8,5 +8,3 @@ Export('env') lib = env.Library("main",env.main_sources) env.Prepend(LIBS=[lib]) - - diff --git a/modules/SCsub b/modules/SCsub index d215f72c08..9215bfd48f 100644 --- a/modules/SCsub +++ b/modules/SCsub @@ -19,5 +19,3 @@ for x in env.module_list: lib = env_modules.Library("modules",env.modules_sources) env.Prepend(LIBS=[lib]) - - diff --git a/modules/gdscript/SCsub b/modules/gdscript/SCsub index d20da72b72..403fe68f66 100644 --- a/modules/gdscript/SCsub +++ b/modules/gdscript/SCsub @@ -3,5 +3,3 @@ Import('env') env.add_source_files(env.modules_sources,"*.cpp") Export('env') - - diff --git a/modules/gridmap/SCsub b/modules/gridmap/SCsub index 4cb47e7e67..211a043468 100644 --- a/modules/gridmap/SCsub +++ b/modules/gridmap/SCsub @@ -1,6 +1,3 @@ Import('env') env.add_source_files(env.modules_sources,"*.cpp") - - - diff --git a/platform/android/SCsub b/platform/android/SCsub index 6feeb8b365..834ee58adc 100644 --- a/platform/android/SCsub +++ b/platform/android/SCsub @@ -62,10 +62,10 @@ pp_baseout.write( manifest ) for x in env.android_source_files: - shutil.copy(x,abspath+"/java/src/com/android/godot") + shutil.copy(x,abspath+"/java/src/com/android/godot") for x in env.android_module_libraries: - shutil.copy(x,abspath+"/java/libs") + shutil.copy(x,abspath+"/java/libs") env_android.SharedLibrary("#bin/libgodot",[android_objects],SHLIBSUFFIX=env["SHLIBSUFFIX"]) diff --git a/platform/bb10/SCsub b/platform/bb10/SCsub index 24f2b5d242..81f6e726e4 100644 --- a/platform/bb10/SCsub +++ b/platform/bb10/SCsub @@ -19,4 +19,3 @@ if env['bb10_lgles_override'] == "yes": prog = None prog = env_bps.Program('#bin/godot', bb10_lib) - diff --git a/platform/flash/SCsub b/platform/flash/SCsub index b7aef3b65d..4e5f26d52a 100644 --- a/platform/flash/SCsub +++ b/platform/flash/SCsub @@ -36,5 +36,3 @@ java -jar $ALCHEMY/usr/lib/asc2.jar -md -strict -optimize -AS3 \ -import ../platform/flash/lib/libGL.abc \ ../platform/flash/Console.as """ - - diff --git a/platform/windows/SCsub b/platform/windows/SCsub index 1ad32e7989..e7d7285b43 100644 --- a/platform/windows/SCsub +++ b/platform/windows/SCsub @@ -13,7 +13,7 @@ common_win=[ env.Program('#bin/godot',['godot_win.cpp']+common_win,PROGSUFFIX=env["PROGSUFFIX"]) -# Microsoft Visual Studio Project Generation +# Microsoft Visual Studio Project Generation if (env['vsproj'])=="yes": env.vs_srcs = env.vs_srcs + ["platform/windows/godot_win.cpp"] for x in common_win: diff --git a/scene/2d/SCsub b/scene/2d/SCsub index 055d2f2474..bbe59b3054 100644 --- a/scene/2d/SCsub +++ b/scene/2d/SCsub @@ -3,5 +3,3 @@ Import('env') env.add_source_files(env.scene_sources,"*.cpp") Export('env') - - diff --git a/scene/3d/SCsub b/scene/3d/SCsub index 3c2144bedc..116e641593 100644 --- a/scene/3d/SCsub +++ b/scene/3d/SCsub @@ -4,10 +4,8 @@ Import('env') if (env["disable_3d"]=="yes"): env.scene_sources.append("3d/spatial.cpp") - env.scene_sources.append("3d/skeleton.cpp") + env.scene_sources.append("3d/skeleton.cpp") else: env.add_source_files(env.scene_sources,"*.cpp") Export('env') - - diff --git a/scene/SCsub b/scene/SCsub index 8c4f0499c4..6d1dd0044f 100644 --- a/scene/SCsub +++ b/scene/SCsub @@ -18,5 +18,3 @@ SConscript('io/SCsub'); lib = env.Library("scene",env.scene_sources) env.Prepend(LIBS=[lib]) - - diff --git a/scene/animation/SCsub b/scene/animation/SCsub index 055d2f2474..bbe59b3054 100644 --- a/scene/animation/SCsub +++ b/scene/animation/SCsub @@ -3,5 +3,3 @@ Import('env') env.add_source_files(env.scene_sources,"*.cpp") Export('env') - - diff --git a/scene/audio/SCsub b/scene/audio/SCsub index 055d2f2474..bbe59b3054 100644 --- a/scene/audio/SCsub +++ b/scene/audio/SCsub @@ -3,5 +3,3 @@ Import('env') env.add_source_files(env.scene_sources,"*.cpp") Export('env') - - diff --git a/scene/gui/SCsub b/scene/gui/SCsub index 055d2f2474..bbe59b3054 100644 --- a/scene/gui/SCsub +++ b/scene/gui/SCsub @@ -3,5 +3,3 @@ Import('env') env.add_source_files(env.scene_sources,"*.cpp") Export('env') - - diff --git a/scene/io/SCsub b/scene/io/SCsub index 055d2f2474..bbe59b3054 100644 --- a/scene/io/SCsub +++ b/scene/io/SCsub @@ -3,5 +3,3 @@ Import('env') env.add_source_files(env.scene_sources,"*.cpp") Export('env') - - diff --git a/scene/main/SCsub b/scene/main/SCsub index 055d2f2474..bbe59b3054 100644 --- a/scene/main/SCsub +++ b/scene/main/SCsub @@ -3,5 +3,3 @@ Import('env') env.add_source_files(env.scene_sources,"*.cpp") Export('env') - - diff --git a/scene/resources/SCsub b/scene/resources/SCsub index eaa282ae1a..bb9766e1ca 100644 --- a/scene/resources/SCsub +++ b/scene/resources/SCsub @@ -6,4 +6,3 @@ env.add_source_files(env.scene_sources,"*.c") Export('env') SConscript("default_theme/SCsub"); - diff --git a/scene/resources/default_theme/SCsub b/scene/resources/default_theme/SCsub index 055d2f2474..bbe59b3054 100644 --- a/scene/resources/default_theme/SCsub +++ b/scene/resources/default_theme/SCsub @@ -3,5 +3,3 @@ Import('env') env.add_source_files(env.scene_sources,"*.cpp") Export('env') - - diff --git a/servers/SCsub b/servers/SCsub index 3871c30cfa..d861847101 100644 --- a/servers/SCsub +++ b/servers/SCsub @@ -15,5 +15,3 @@ SConscript('spatial_sound_2d/SCsub'); lib = env.Library("servers",env.servers_sources) env.Prepend(LIBS=[lib]) - - diff --git a/servers/audio/SCsub b/servers/audio/SCsub index 16fe3a59ac..d31af2c1c4 100644 --- a/servers/audio/SCsub +++ b/servers/audio/SCsub @@ -3,5 +3,3 @@ Import('env') env.add_source_files(env.servers_sources,"*.cpp") Export('env') - - diff --git a/servers/physics/SCsub b/servers/physics/SCsub index 3b84c5ef18..95296eadbe 100644 --- a/servers/physics/SCsub +++ b/servers/physics/SCsub @@ -5,5 +5,3 @@ env.add_source_files(env.servers_sources,"*.cpp") Export('env') SConscript("joints/SCsub") - - diff --git a/servers/physics/joints/SCsub b/servers/physics/joints/SCsub index 97d6edea21..d31af2c1c4 100644 --- a/servers/physics/joints/SCsub +++ b/servers/physics/joints/SCsub @@ -3,6 +3,3 @@ Import('env') env.add_source_files(env.servers_sources,"*.cpp") Export('env') - - - diff --git a/servers/physics_2d/SCsub b/servers/physics_2d/SCsub index a2c2b51a61..ebb7f8be00 100644 --- a/servers/physics_2d/SCsub +++ b/servers/physics_2d/SCsub @@ -1,4 +1,3 @@ Import('env') env.add_source_files(env.servers_sources,"*.cpp") - diff --git a/servers/spatial_sound/SCsub b/servers/spatial_sound/SCsub index 16fe3a59ac..d31af2c1c4 100644 --- a/servers/spatial_sound/SCsub +++ b/servers/spatial_sound/SCsub @@ -3,5 +3,3 @@ Import('env') env.add_source_files(env.servers_sources,"*.cpp") Export('env') - - diff --git a/servers/spatial_sound_2d/SCsub b/servers/spatial_sound_2d/SCsub index 16fe3a59ac..d31af2c1c4 100644 --- a/servers/spatial_sound_2d/SCsub +++ b/servers/spatial_sound_2d/SCsub @@ -3,5 +3,3 @@ Import('env') env.add_source_files(env.servers_sources,"*.cpp") Export('env') - - diff --git a/servers/visual/SCsub b/servers/visual/SCsub index 16fe3a59ac..d31af2c1c4 100644 --- a/servers/visual/SCsub +++ b/servers/visual/SCsub @@ -3,5 +3,3 @@ Import('env') env.add_source_files(env.servers_sources,"*.cpp") Export('env') - - diff --git a/tools/SCsub b/tools/SCsub index ce7df2c35b..5613d8a6c9 100644 --- a/tools/SCsub +++ b/tools/SCsub @@ -17,5 +17,3 @@ if (env["tools"]!="no"): lib = env.Library("tool",env.tool_sources) env.Prepend(LIBS=[lib]) - - diff --git a/tools/collada/SCsub b/tools/collada/SCsub index c8eaa596d1..34524f10ef 100644 --- a/tools/collada/SCsub +++ b/tools/collada/SCsub @@ -3,5 +3,3 @@ Import('env') env.add_source_files(env.tool_sources,"*.cpp") Export('env') - - diff --git a/tools/doc/SCsub b/tools/doc/SCsub index c8eaa596d1..34524f10ef 100644 --- a/tools/doc/SCsub +++ b/tools/doc/SCsub @@ -3,5 +3,3 @@ Import('env') env.add_source_files(env.tool_sources,"*.cpp") Export('env') - - diff --git a/tools/docdump/SCsub b/tools/docdump/SCsub index c8eaa596d1..34524f10ef 100644 --- a/tools/docdump/SCsub +++ b/tools/docdump/SCsub @@ -3,5 +3,3 @@ Import('env') env.add_source_files(env.tool_sources,"*.cpp") Export('env') - - diff --git a/tools/editor/SCsub b/tools/editor/SCsub index 73ec530177..cd46ff8353 100644 --- a/tools/editor/SCsub +++ b/tools/editor/SCsub @@ -28,7 +28,7 @@ def make_doc_header(target,source,env): - + if (env["tools"]=="yes"): @@ -43,17 +43,16 @@ if (env["tools"]=="yes"): f.write(reg_exporters_inc) f.write(reg_exporters) f.close() - + env.Depends("#tools/editor/doc_data_compressed.h","#doc/base/classes.xml") env.Command("#tools/editor/doc_data_compressed.h","#doc/base/classes.xml",make_doc_header) #make_doc_header(env.File("#tools/editor/doc_data_raw.h").srcnode().abspath,env.File("#doc/base/classes.xml").srcnode().abspath,env) - + env.add_source_files(env.tool_sources,"*.cpp") - + Export('env') - SConscript('icons/SCsub'); + SConscript('icons/SCsub'); SConscript('plugins/SCsub'); SConscript('fileserver/SCsub'); SConscript('io_plugins/SCsub'); - diff --git a/tools/editor/fileserver/SCsub b/tools/editor/fileserver/SCsub index b525fb3f75..363a2ce4c0 100644 --- a/tools/editor/fileserver/SCsub +++ b/tools/editor/fileserver/SCsub @@ -1,7 +1,3 @@ Import('env') Export('env') env.add_source_files(env.tool_sources,"*.cpp") - - - - diff --git a/tools/editor/icons/SCsub b/tools/editor/icons/SCsub index aea053d22b..addf6879a2 100644 --- a/tools/editor/icons/SCsub +++ b/tools/editor/icons/SCsub @@ -9,30 +9,30 @@ def make_editor_icons_action(target, source, env): pixmaps = source s = cStringIO.StringIO() - + s.write("#include \"editor_icons.h\"\n\n") s.write("#include \"scene/resources/theme.h\"\n\n") for x in pixmaps: - + x=str(x) var_str=os.path.basename(x)[:-4]+"_png"; #print(var_str) - + s.write("static const unsigned char "+ var_str +"[]={\n"); - + pngf=open(x,"rb"); - + b=pngf.read(1); while(len(b)==1): s.write(hex(ord(b))) b=pngf.read(1); if (len(b)==1): s.write(",") - + s.write("\n};\n\n\n"); pngf.close(); - + s.write("static Ref make_icon(const uint8_t* p_png) {\n") s.write("\tRef texture( memnew( ImageTexture ) );\n") s.write("\ttexture->create_from_image( Image(p_png),ImageTexture::FLAG_FILTER );\n") @@ -42,14 +42,14 @@ def make_editor_icons_action(target, source, env): s.write("void editor_register_icons(Ref p_theme) {\n\n") for x in pixmaps: - + x=os.path.basename(str(x)) type=x[5:-4].title().replace("_",""); var_str=x[:-4]+"_png"; s.write("\tp_theme->set_icon(\""+type+"\",\"EditorIcons\",make_icon("+var_str+"));\n"); s.write("\n\n}\n\n"); - + f = open(dst,"wb") f.write(s.getvalue()) f.close() @@ -63,4 +63,3 @@ env.Alias('editor_icons',[env.MakeEditorIconsBuilder('#tools/editor/editor_icons env.tool_sources.append("#tools/editor/editor_icons.cpp") Export('env') - diff --git a/tools/editor/io_plugins/SCsub b/tools/editor/io_plugins/SCsub index b525fb3f75..363a2ce4c0 100644 --- a/tools/editor/io_plugins/SCsub +++ b/tools/editor/io_plugins/SCsub @@ -1,7 +1,3 @@ Import('env') Export('env') env.add_source_files(env.tool_sources,"*.cpp") - - - - diff --git a/tools/editor/plugins/SCsub b/tools/editor/plugins/SCsub index b525fb3f75..363a2ce4c0 100644 --- a/tools/editor/plugins/SCsub +++ b/tools/editor/plugins/SCsub @@ -1,7 +1,3 @@ Import('env') Export('env') env.add_source_files(env.tool_sources,"*.cpp") - - - - diff --git a/tools/freetype/SCsub b/tools/freetype/SCsub index a31b8c4602..65b4827f9c 100644 --- a/tools/freetype/SCsub +++ b/tools/freetype/SCsub @@ -65,7 +65,5 @@ if (env["freetype"]=="builtin"): # lib = env.Library("freetype_builtin",ft_sources) # env.Prepend(LIBS=[lib]) - + Export('env') - - diff --git a/tools/pck/SCsub b/tools/pck/SCsub index b1fed9a472..cf98ae145d 100644 --- a/tools/pck/SCsub +++ b/tools/pck/SCsub @@ -2,4 +2,3 @@ Import('env') if env["tools"] == "yes": env.add_source_files(env.tool_sources, "*.cpp") - From b54d96ceba19801f3ec59e1a611f74b428cdebe2 Mon Sep 17 00:00:00 2001 From: Saracen Date: Mon, 2 Nov 2015 13:16:28 +0000 Subject: [PATCH 28/78] Added ability to write directly to 4-dimensional position vector from within custom vertex shader code. Bugfixes to shader graph code generation concerning xforms. --- drivers/gles2/rasterizer_gles2.cpp | 3 + drivers/gles2/shader_compiler_gles2.cpp | 224 ++++++++++++------------ drivers/gles2/shader_compiler_gles2.h | 3 + scene/resources/shader_graph.cpp | 26 ++- servers/visual/shader_language.cpp | 1 + 5 files changed, 143 insertions(+), 114 deletions(-) diff --git a/drivers/gles2/rasterizer_gles2.cpp b/drivers/gles2/rasterizer_gles2.cpp index d84ee5a758..44175c2cc3 100644 --- a/drivers/gles2/rasterizer_gles2.cpp +++ b/drivers/gles2/rasterizer_gles2.cpp @@ -4641,6 +4641,9 @@ void RasterizerGLES2::_update_shader( Shader* p_shader) const { enablers.push_back("#define USE_TIME\n"); uses_time=true; } + if (vertex_flags.vertex_code_writes_position) { + enablers.push_back("#define VERTEX_SHADER_WRITE_POSITION\n"); + } material_shader.set_custom_shader_code(p_shader->custom_code_id,vertex_code, vertex_globals,fragment_code, light_code, fragment_globals,uniform_names,enablers); } else if (p_shader->mode==VS::SHADER_CANVAS_ITEM) { diff --git a/drivers/gles2/shader_compiler_gles2.cpp b/drivers/gles2/shader_compiler_gles2.cpp index d57512c936..c8f59ce22b 100644 --- a/drivers/gles2/shader_compiler_gles2.cpp +++ b/drivers/gles2/shader_compiler_gles2.cpp @@ -154,6 +154,9 @@ String ShaderCompilerGLES2::dump_node_code(SL::Node *p_node,int p_level,bool p_a if (vnode->name==vname_vertex && p_assign_left) { vertex_code_writes_vertex=true; } + if (vnode->name == vname_position && p_assign_left) { + vertex_code_writes_position = true; + } if (vnode->name==vname_color_interp) { flags->use_color_interp=true; } @@ -659,6 +662,7 @@ Error ShaderCompilerGLES2::compile(const String& p_code, ShaderLanguage::ShaderT uses_texpixel_size=false; uses_worldvec=false; vertex_code_writes_vertex=false; + vertex_code_writes_position = false; uses_shadow_color=false; uniforms=r_uniforms; flags=&r_flags; @@ -690,6 +694,7 @@ Error ShaderCompilerGLES2::compile(const String& p_code, ShaderLanguage::ShaderT r_flags.uses_texscreen=uses_texscreen; r_flags.uses_texpos=uses_texpos; r_flags.vertex_code_writes_vertex=vertex_code_writes_vertex; + r_flags.vertex_code_writes_position=vertex_code_writes_position; r_flags.uses_discard=uses_discard; r_flags.uses_screen_uv=uses_screen_uv; r_flags.uses_light=uses_light; @@ -778,125 +783,127 @@ ShaderCompilerGLES2::ShaderCompilerGLES2() { replace_table["texscreen"]= "texscreen"; replace_table["texpos"]= "texpos"; - mode_replace_table[0]["SRC_VERTEX"]="vertex_in.xyz"; - mode_replace_table[0]["SRC_NORMAL"]="normal_in"; - mode_replace_table[0]["SRC_TANGENT"]="tangent_in"; - mode_replace_table[0]["SRC_BINORMALF"]="binormalf"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["POSITION"] = "gl_Position"; - mode_replace_table[0]["VERTEX"]="vertex_interp"; - mode_replace_table[0]["NORMAL"]="normal_interp"; - mode_replace_table[0]["TANGENT"]="tangent_interp"; - mode_replace_table[0]["BINORMAL"]="binormal_interp"; - mode_replace_table[0]["UV"]="uv_interp.xy"; - mode_replace_table[0]["UV2"]="uv_interp.zw"; - mode_replace_table[0]["COLOR"]="color_interp"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["SRC_VERTEX"] = "vertex_in.xyz"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["SRC_NORMAL"] = "normal_in"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["SRC_TANGENT"]="tangent_in"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["SRC_BINORMALF"]="binormalf"; + + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["VERTEX"]="vertex_interp"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["NORMAL"]="normal_interp"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["TANGENT"]="tangent_interp"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["BINORMAL"]="binormal_interp"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["UV"]="uv_interp.xy"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["UV2"]="uv_interp.zw"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["COLOR"]="color_interp"; //@TODO convert to glsl stuff - mode_replace_table[0]["SPEC_EXP"]="vertex_specular_exp"; - mode_replace_table[0]["WORLD_MATRIX"]="world_transform"; - mode_replace_table[0]["INV_CAMERA_MATRIX"]="camera_inverse_transform"; - mode_replace_table[0]["PROJECTION_MATRIX"]="projection_transform"; - mode_replace_table[0]["MODELVIEW_MATRIX"]="modelview"; - mode_replace_table[0]["POINT_SIZE"]="gl_PointSize"; - mode_replace_table[0]["VAR1"]="var1_interp"; - mode_replace_table[0]["VAR2"]="var2_interp"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["SPEC_EXP"]="vertex_specular_exp"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["WORLD_MATRIX"]="world_transform"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["INV_CAMERA_MATRIX"]="camera_inverse_transform"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["PROJECTION_MATRIX"]="projection_transform"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["MODELVIEW_MATRIX"]="modelview"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["POINT_SIZE"]="gl_PointSize"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["VAR1"]="var1_interp"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["VAR2"]="var2_interp"; -// mode_replace_table[0]["SCREEN_POS"]="SCREEN_POS"; -// mode_replace_table[0]["SCREEN_SIZE"]="SCREEN_SIZE"; - mode_replace_table[0]["INSTANCE_ID"]="instance_id"; - mode_replace_table[0]["TIME"]="time"; +// mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["SCREEN_POS"]="SCREEN_POS"; +// mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["SCREEN_SIZE"]="SCREEN_SIZE"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["INSTANCE_ID"]="instance_id"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["TIME"]="time"; - mode_replace_table[1]["VERTEX"]="vertex"; - //mode_replace_table[1]["POSITION"]="IN_POSITION"; - mode_replace_table[1]["NORMAL"]="normal"; - mode_replace_table[1]["TANGENT"]="tangent"; - mode_replace_table[1]["POSITION"]="gl_Position"; - mode_replace_table[1]["BINORMAL"]="binormal"; - mode_replace_table[1]["NORMALMAP"]="normalmap"; - mode_replace_table[1]["NORMALMAP_DEPTH"]="normaldepth"; - mode_replace_table[1]["VAR1"]="var1_interp"; - mode_replace_table[1]["VAR2"]="var2_interp"; - mode_replace_table[1]["UV"]="uv"; - mode_replace_table[1]["UV2"]="uv2"; - mode_replace_table[1]["SCREEN_UV"]="screen_uv"; - mode_replace_table[1]["VAR1"]="var1_interp"; - mode_replace_table[1]["VAR2"]="var2_interp"; - mode_replace_table[1]["COLOR"]="color"; - mode_replace_table[1]["DIFFUSE"]="diffuse.rgb"; - mode_replace_table[1]["DIFFUSE_ALPHA"]="diffuse"; - mode_replace_table[1]["SPECULAR"]="specular"; - mode_replace_table[1]["EMISSION"]="emission"; - mode_replace_table[1]["SHADE_PARAM"]="shade_param"; - mode_replace_table[1]["SPEC_EXP"]="specular_exp"; - mode_replace_table[1]["GLOW"]="glow"; - mode_replace_table[1]["DISCARD"]="discard_"; - mode_replace_table[1]["POINT_COORD"]="gl_PointCoord"; - mode_replace_table[1]["INV_CAMERA_MATRIX"]="camera_inverse_transform"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["VERTEX"]="vertex"; + //mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["POSITION"]="IN_POSITION"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["NORMAL"]="normal"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["TANGENT"]="tangent"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["POSITION"]="gl_Position"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["BINORMAL"]="binormal"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["NORMALMAP"]="normalmap"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["NORMALMAP_DEPTH"]="normaldepth"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["VAR1"]="var1_interp"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["VAR2"]="var2_interp"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["UV"]="uv"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["UV2"]="uv2"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["SCREEN_UV"]="screen_uv"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["VAR1"]="var1_interp"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["VAR2"]="var2_interp"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["COLOR"]="color"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["DIFFUSE"]="diffuse.rgb"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["DIFFUSE_ALPHA"]="diffuse"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["SPECULAR"]="specular"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["EMISSION"]="emission"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["SHADE_PARAM"]="shade_param"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["SPEC_EXP"]="specular_exp"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["GLOW"]="glow"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["DISCARD"]="discard_"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["POINT_COORD"]="gl_PointCoord"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["INV_CAMERA_MATRIX"]="camera_inverse_transform"; - //mode_replace_table[1]["SCREEN_POS"]="SCREEN_POS"; - //mode_replace_table[1]["SCREEN_TEXEL_SIZE"]="SCREEN_TEXEL_SIZE"; - mode_replace_table[1]["TIME"]="time"; + //mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["SCREEN_POS"]="SCREEN_POS"; + //mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["SCREEN_TEXEL_SIZE"]="SCREEN_TEXEL_SIZE"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["TIME"]="time"; ////////////// - mode_replace_table[2]["NORMAL"]="normal"; - //mode_replace_table[2]["POSITION"]="IN_POSITION"; - mode_replace_table[2]["LIGHT_DIR"]="light_dir"; - mode_replace_table[2]["LIGHT_DIFFUSE"]="light_diffuse"; - mode_replace_table[2]["LIGHT_SPECULAR"]="light_specular"; - mode_replace_table[2]["EYE_VEC"]="eye_vec"; - mode_replace_table[2]["DIFFUSE"]="mdiffuse"; - mode_replace_table[2]["SPECULAR"]="specular"; - mode_replace_table[2]["SPECULAR_EXP"]="specular_exp"; - mode_replace_table[2]["SHADE_PARAM"]="shade_param"; - mode_replace_table[2]["LIGHT"]="light"; - mode_replace_table[2]["POINT_COORD"]="gl_PointCoord"; - mode_replace_table[2]["TIME"]="time"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["NORMAL"]="normal"; + //mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["POSITION"]="IN_POSITION"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["LIGHT_DIR"]="light_dir"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["LIGHT_DIFFUSE"]="light_diffuse"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["LIGHT_SPECULAR"]="light_specular"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["EYE_VEC"]="eye_vec"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["DIFFUSE"]="mdiffuse"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["SPECULAR"]="specular"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["SPECULAR_EXP"]="specular_exp"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["SHADE_PARAM"]="shade_param"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["LIGHT"]="light"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["POINT_COORD"]="gl_PointCoord"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["TIME"]="time"; - mode_replace_table[3]["SRC_VERTEX"]="src_vtx"; - mode_replace_table[3]["VERTEX"]="outvec.xy"; - mode_replace_table[3]["WORLD_VERTEX"]="outvec.xy"; - mode_replace_table[3]["UV"]="uv_interp"; - mode_replace_table[3]["COLOR"]="color_interp"; - mode_replace_table[3]["VAR1"]="var1_interp"; - mode_replace_table[3]["VAR2"]="var2_interp"; - mode_replace_table[3]["POINT_SIZE"]="gl_PointSize"; - mode_replace_table[3]["WORLD_MATRIX"]="modelview_matrix"; - mode_replace_table[3]["PROJECTION_MATRIX"]="projection_matrix"; - mode_replace_table[3]["EXTRA_MATRIX"]="extra_matrix"; - mode_replace_table[3]["TIME"]="time"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["SRC_VERTEX"]="src_vtx"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["VERTEX"]="outvec.xy"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["WORLD_VERTEX"]="outvec.xy"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["UV"]="uv_interp"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["COLOR"]="color_interp"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["VAR1"]="var1_interp"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["VAR2"]="var2_interp"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["POINT_SIZE"]="gl_PointSize"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["WORLD_MATRIX"]="modelview_matrix"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["PROJECTION_MATRIX"]="projection_matrix"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["EXTRA_MATRIX"]="extra_matrix"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["TIME"]="time"; - mode_replace_table[4]["POSITION"]="gl_Position"; - mode_replace_table[4]["NORMAL"]="normal"; - mode_replace_table[4]["NORMALMAP"]="normal_map"; - mode_replace_table[4]["NORMALMAP_DEPTH"]="normal_depth"; - mode_replace_table[4]["UV"]="uv_interp"; - mode_replace_table[4]["SRC_COLOR"]="color_interp"; - mode_replace_table[4]["COLOR"]="color"; - mode_replace_table[4]["TEXTURE"]="texture"; - mode_replace_table[4]["TEXTURE_PIXEL_SIZE"]="texpixel_size"; - mode_replace_table[4]["VAR1"]="var1_interp"; - mode_replace_table[4]["VAR2"]="var2_interp"; - mode_replace_table[4]["SCREEN_UV"]="screen_uv"; - mode_replace_table[4]["POINT_COORD"]="gl_PointCoord"; - mode_replace_table[4]["TIME"]="time"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["POSITION"]="gl_Position"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["NORMAL"]="normal"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["NORMALMAP"]="normal_map"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["NORMALMAP_DEPTH"]="normal_depth"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["UV"]="uv_interp"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["SRC_COLOR"]="color_interp"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["COLOR"]="color"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["TEXTURE"]="texture"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["TEXTURE_PIXEL_SIZE"]="texpixel_size"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["VAR1"]="var1_interp"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["VAR2"]="var2_interp"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["SCREEN_UV"]="screen_uv"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["POINT_COORD"]="gl_PointCoord"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["TIME"]="time"; - mode_replace_table[5]["POSITION"]="gl_Position"; - mode_replace_table[5]["NORMAL"]="normal"; - mode_replace_table[5]["UV"]="uv_interp"; - mode_replace_table[5]["COLOR"]="color"; - mode_replace_table[5]["TEXTURE"]="texture"; - mode_replace_table[5]["TEXTURE_PIXEL_SIZE"]="texpixel_size"; - mode_replace_table[5]["VAR1"]="var1_interp"; - mode_replace_table[5]["VAR2"]="var2_interp"; - mode_replace_table[5]["LIGHT_VEC"]="light_vec"; - mode_replace_table[5]["LIGHT_HEIGHT"]="light_height"; - mode_replace_table[5]["LIGHT_COLOR"]="light"; - mode_replace_table[5]["LIGHT_UV"]="light_uv"; - mode_replace_table[5]["LIGHT"]="light_out"; - mode_replace_table[5]["SHADOW"]="shadow_color"; - mode_replace_table[5]["SCREEN_UV"]="screen_uv"; - mode_replace_table[5]["POINT_COORD"]="gl_PointCoord"; - mode_replace_table[5]["TIME"]="time"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["POSITION"]="gl_Position"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["NORMAL"]="normal"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["UV"]="uv_interp"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["COLOR"]="color"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["TEXTURE"]="texture"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["TEXTURE_PIXEL_SIZE"]="texpixel_size"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["VAR1"]="var1_interp"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["VAR2"]="var2_interp"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["LIGHT_VEC"]="light_vec"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["LIGHT_HEIGHT"]="light_height"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["LIGHT_COLOR"]="light"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["LIGHT_UV"]="light_uv"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["LIGHT"]="light_out"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["SHADOW"]="shadow_color"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["SCREEN_UV"]="screen_uv"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["POINT_COORD"]="gl_PointCoord"; + mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["TIME"]="time"; @@ -917,6 +924,7 @@ ShaderCompilerGLES2::ShaderCompilerGLES2() { vname_var1_interp="VAR1"; vname_var2_interp="VAR2"; vname_vertex="VERTEX"; + vname_position = "POSITION"; vname_light="LIGHT"; vname_time="TIME"; vname_normalmap="NORMALMAP"; diff --git a/drivers/gles2/shader_compiler_gles2.h b/drivers/gles2/shader_compiler_gles2.h index 43902a7536..77532e03ff 100644 --- a/drivers/gles2/shader_compiler_gles2.h +++ b/drivers/gles2/shader_compiler_gles2.h @@ -55,6 +55,7 @@ private: bool uses_texpixel_size; bool uses_worldvec; bool vertex_code_writes_vertex; + bool vertex_code_writes_position; bool uses_shadow_color; bool sinh_used; @@ -76,6 +77,7 @@ private: StringName vname_var1_interp; StringName vname_var2_interp; StringName vname_vertex; + StringName vname_position; StringName vname_light; StringName vname_time; StringName vname_normalmap; @@ -107,6 +109,7 @@ public: bool uses_texpos; bool uses_normalmap; bool vertex_code_writes_vertex; + bool vertex_code_writes_position; bool uses_discard; bool uses_screen_uv; bool use_color_interp; diff --git a/scene/resources/shader_graph.cpp b/scene/resources/shader_graph.cpp index 49a1bdccb1..d5204f45d5 100644 --- a/scene/resources/shader_graph.cpp +++ b/scene/resources/shader_graph.cpp @@ -2083,7 +2083,7 @@ void ShaderGraph::_add_node_code(ShaderType p_type,Node *p_node,const Vectordefaults[slot]; \ - code+=String(typestr[3])+" "+p_inputs[slot]+"=mat4(\n";\ + code+=String(typestr[2])+" "+p_inputs[slot]+"=mat4(\n";\ code+="\tvec4(vec3("+rtos(xf.basis.get_axis(0).x)+","+rtos(xf.basis.get_axis(0).y)+","+rtos(xf.basis.get_axis(0).z)+"),0),\n";\ code+="\tvec4(vec3("+rtos(xf.basis.get_axis(1).x)+","+rtos(xf.basis.get_axis(1).y)+","+rtos(xf.basis.get_axis(1).z)+"),0),\n";\ code+="\tvec4(vec3("+rtos(xf.basis.get_axis(2).x)+","+rtos(xf.basis.get_axis(2).y)+","+rtos(xf.basis.get_axis(2).z)+"),0),\n";\ @@ -2393,15 +2393,29 @@ void ShaderGraph::_add_node_code(ShaderType p_type,Node *p_node,const Vectorid,0)+"=xform("+p_inputs[0]+","+p_inputs[1]+","+p_inputs[2]+","+","+p_inputs[3]+");\n"; + code += OUTNAME(p_node->id, 0) + "=mat4(" + + "vec4(" + p_inputs[0] + ".x," + p_inputs[0] + ".y," + p_inputs[0] + ".z, 0.0)," + "vec4(" + p_inputs[1] + ".x," + p_inputs[1] + ".y," + p_inputs[1] + ".z, 0.0)," + "vec4(" + p_inputs[2] + ".x," + p_inputs[2] + ".y," + p_inputs[2] + ".z, 0.0)," + "vec4(" + p_inputs[3] + ".x," + p_inputs[3] + ".y," + p_inputs[3] + ".z, 1.0));\n"; }break; case NODE_XFORM_TO_VEC: { DEF_MATRIX(0); - code += OUTNAME(p_node->id,0)+"="+p_inputs[0]+".x;\n"; - code += OUTNAME(p_node->id,1)+"="+p_inputs[0]+".y;\n"; - code += OUTNAME(p_node->id,2)+"="+p_inputs[0]+".z;\n"; - code += OUTNAME(p_node->id,3)+"="+p_inputs[0]+".o;\n"; + code += OUTNAME(p_node->id, 0) + ";\n"; + code += OUTNAME(p_node->id, 1) + ";\n"; + code += OUTNAME(p_node->id, 2) + ";\n"; + code += OUTNAME(p_node->id, 3) + ";\n"; + code += "{\n"; + code += "\tvec4 xform_row_01=" + p_inputs[0] + ".x;\n"; + code += "\tvec4 xform_row_02=" + p_inputs[0] + ".y;\n"; + code += "\tvec4 xform_row_03=" + p_inputs[0] + ".z;\n"; + code += "\tvec4 xform_row_04=" + p_inputs[0] + ".w;\n"; + code += "\t" + OUTVAR(p_node->id, 0) + "=vec3(xform_row_01.x, xform_row_01.y, xform_row_01.z);\n"; + code += "\t" + OUTVAR(p_node->id, 1) + "=vec3(xform_row_02.x, xform_row_02.y, xform_row_02.z);\n"; + code += "\t" + OUTVAR(p_node->id, 2) + "=vec3(xform_row_03.x, xform_row_03.y, xform_row_03.z);\n"; + code += "\t" + OUTVAR(p_node->id, 3) + "=vec3(xform_row_04.x, xform_row_04.y, xform_row_04.z);\n"; + code += "}\n"; }break; case NODE_SCALAR_INTERP: { DEF_SCALAR(0); diff --git a/servers/visual/shader_language.cpp b/servers/visual/shader_language.cpp index ea56306241..6532c3f0ac 100644 --- a/servers/visual/shader_language.cpp +++ b/servers/visual/shader_language.cpp @@ -1043,6 +1043,7 @@ const ShaderLanguage::BuiltinsDef ShaderLanguage::vertex_builtins_defs[]={ { "SRC_TANGENT", TYPE_VEC3}, { "SRC_BINORMALF", TYPE_FLOAT}, + { "POSITION", TYPE_VEC4 }, { "VERTEX", TYPE_VEC3}, { "NORMAL", TYPE_VEC3}, { "TANGENT", TYPE_VEC3}, From 56b7567b55df24ef0e78ecea6d2eea427d0ed066 Mon Sep 17 00:00:00 2001 From: Saracen Date: Mon, 19 Oct 2015 20:40:24 +0100 Subject: [PATCH 29/78] Added missing saving support to animation editor. --- .../animation_player_editor_plugin.cpp | 180 +++++++++++++++--- .../plugins/animation_player_editor_plugin.h | 22 ++- 2 files changed, 172 insertions(+), 30 deletions(-) diff --git a/tools/editor/plugins/animation_player_editor_plugin.cpp b/tools/editor/plugins/animation_player_editor_plugin.cpp index f8c484e886..6ab5af539a 100644 --- a/tools/editor/plugins/animation_player_editor_plugin.cpp +++ b/tools/editor/plugins/animation_player_editor_plugin.cpp @@ -27,7 +27,9 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "animation_player_editor_plugin.h" +#include "globals.h" #include "io/resource_loader.h" +#include "io/resource_saver.h" #include "os/keyboard.h" #include "tools/editor/editor_settings.h" @@ -98,6 +100,8 @@ void AnimationPlayerEditor::_notification(int p_what) { duplicate_anim->set_icon( get_icon("Duplicate","EditorIcons") ); autoplay->set_icon( get_icon("AutoPlay","EditorIcons") ); load_anim->set_icon( get_icon("Folder","EditorIcons") ); + save_anim->set_icon(get_icon("Save", "EditorIcons")); + save_anim->get_popup()->connect("item_pressed", this, "_animation_save_menu"); remove_anim->set_icon( get_icon("Remove","EditorIcons") ); edit_anim->set_icon( get_icon("Edit","EditorIcons") ); blend_anim->set_icon( get_icon("Blend","EditorIcons") ); @@ -367,8 +371,78 @@ void AnimationPlayerEditor::_animation_load() { } file->popup_centered_ratio(); + current_option = RESOURCE_LOAD; +} +void AnimationPlayerEditor::_animation_save_in_path(const Ref& p_resource, const String& p_path) { + + int flg = 0; + if (EditorSettings::get_singleton()->get("on_save/compress_binary_resources")) + flg |= ResourceSaver::FLAG_COMPRESS; + if (EditorSettings::get_singleton()->get("on_save/save_paths_as_relative")) + flg |= ResourceSaver::FLAG_RELATIVE_PATHS; + + String path = Globals::get_singleton()->localize_path(p_path); + Error err = ResourceSaver::save(path, p_resource, flg | ResourceSaver::FLAG_REPLACE_SUBRESOURCE_PATHS); + + if (err != OK) { + accept->set_text("Error saving resource!"); + accept->popup_centered_minsize(); + return; + } + // EditorFileSystem::get_singleton()->update_file(path,p_resource->get_type()); + + ((Resource*)p_resource.ptr())->set_path(path); + editor->emit_signal("resource_saved", p_resource); + +} + +void AnimationPlayerEditor::_animation_save(const Ref& p_resource) { + + if (p_resource->get_path().is_resource_file()) { + _animation_save_in_path(p_resource, p_resource->get_path()); + } + else { + _animation_save_as(p_resource); + } +} + +void AnimationPlayerEditor::_animation_save_as(const Ref& p_resource) { + + file->set_mode(EditorFileDialog::MODE_SAVE_FILE); + bool relpaths = (p_resource->has_meta("__editor_relpaths__") && p_resource->get_meta("__editor_relpaths__").operator bool()); + + List extensions; + ResourceSaver::get_recognized_extensions(p_resource, &extensions); + file->clear_filters(); + for (int i = 0; iadd_filter("*." + extensions[i] + " ; " + extensions[i].to_upper()); + } + + //file->set_current_path(current_path); + if (p_resource->get_path() != "") { + file->set_current_path(p_resource->get_path()); + if (extensions.size()) { + String ext = p_resource->get_path().extension().to_lower(); + if (extensions.find(ext) == NULL) { + file->set_current_path(p_resource->get_path().replacen("." + ext, "." + extensions.front()->get())); + } + } + } + else { + + String existing; + if (extensions.size()) { + existing = "new_" + p_resource->get_type().to_lower() + "." + extensions.front()->get().to_lower(); + } + file->set_current_path(existing); + + } + file->popup_centered_ratio(); + file->set_title("Save Resource As.."); + current_option = RESOURCE_SAVE; } void AnimationPlayerEditor::_animation_remove() { @@ -635,38 +709,55 @@ void AnimationPlayerEditor::_animation_edit() { //get_scene()->get_root_node()->call("_resource_selected",anim,""); } -void AnimationPlayerEditor::_file_selected(String p_file) { +void AnimationPlayerEditor::_dialog_action(String p_file) { - ERR_FAIL_COND(!player); + switch (current_option) { + case RESOURCE_LOAD: { + ERR_FAIL_COND(!player); - Ref res = ResourceLoader::load(p_file,"Animation"); - ERR_FAIL_COND(res.is_null()); - ERR_FAIL_COND( !res->is_type("Animation") ); - if (p_file.find_last("/")!=-1) { + Ref res = ResourceLoader::load(p_file, "Animation"); + ERR_FAIL_COND(res.is_null()); + ERR_FAIL_COND(!res->is_type("Animation")); + if (p_file.find_last("/") != -1) { - p_file=p_file.substr( p_file.find_last("/")+1, p_file.length() ); + p_file = p_file.substr(p_file.find_last("/") + 1, p_file.length()); + } + if (p_file.find_last("\\") != -1) { + + p_file = p_file.substr(p_file.find_last("\\") + 1, p_file.length()); + + } + + if (p_file.find(".") != -1) + p_file = p_file.substr(0, p_file.find(".")); + + undo_redo->create_action("Load Animation"); + undo_redo->add_do_method(player, "add_animation", p_file, res); + undo_redo->add_undo_method(player, "remove_animation", p_file); + if (player->has_animation(p_file)) { + undo_redo->add_undo_method(player, "add_animation", p_file, player->get_animation(p_file)); + + } + undo_redo->add_do_method(this, "_animation_player_changed", player); + undo_redo->add_undo_method(this, "_animation_player_changed", player); + undo_redo->commit_action(); + break; + } + case RESOURCE_SAVE: { + + String current = animation->get_item_text(animation->get_selected()); + if (current != "") { + Ref anim = player->get_animation(current); + + ERR_FAIL_COND(!anim->cast_to()) + + RES current_res = RES(anim->cast_to()); + + _animation_save_in_path(current_res, p_file); + } + } } - if (p_file.find_last("\\")!=-1) { - - p_file=p_file.substr( p_file.find_last("\\")+1, p_file.length() ); - - } - - if (p_file.find(".")!=-1) - p_file=p_file.substr(0,p_file.find(".")); - - undo_redo->create_action("Load Animation"); - undo_redo->add_do_method(player,"add_animation",p_file,res); - undo_redo->add_undo_method(player,"remove_animation",p_file); - if (player->has_animation(p_file)) { - undo_redo->add_undo_method(player,"add_animation",p_file,player->get_animation(p_file)); - - } - undo_redo->add_do_method(this,"_animation_player_changed",player); - undo_redo->add_undo_method(this,"_animation_player_changed",player); - undo_redo->commit_action(); - } void AnimationPlayerEditor::_scale_changed(const String& p_scale) { @@ -730,6 +821,8 @@ void AnimationPlayerEditor::_update_player() { blend_anim->set_disabled(animlist.size()==0); remove_anim->set_disabled(animlist.size()==0); resource_edit_anim->set_disabled(animlist.size()==0); + save_anim->set_disabled(animlist.size() == 0); + int active_idx=-1; for (List::Element *E=animlist.front();E;E=E->next()) { @@ -1072,6 +1165,23 @@ void AnimationPlayerEditor::_animation_tool_menu(int p_option) { } } +void AnimationPlayerEditor::_animation_save_menu(int p_option) { + + String current = animation->get_item_text(animation->get_selected()); + if (current != "") { + Ref anim = player->get_animation(current); + + switch (p_option) { + case ANIM_SAVE: + _animation_save(anim); + break; + case ANIM_SAVE_AS: + _animation_save_as(anim); + break; + } + } +} + void AnimationPlayerEditor::_unhandled_key_input(const InputEvent& p_ev) { if (is_visible() && p_ev.type==InputEvent::KEY && p_ev.key.pressed && !p_ev.key.echo && !p_ev.key.mod.alt && !p_ev.key.mod.control && !p_ev.key.mod.meta) { @@ -1117,7 +1227,7 @@ void AnimationPlayerEditor::_bind_methods() { ObjectTypeDB::bind_method(_MD("_animation_blend"),&AnimationPlayerEditor::_animation_blend); ObjectTypeDB::bind_method(_MD("_animation_edit"),&AnimationPlayerEditor::_animation_edit); ObjectTypeDB::bind_method(_MD("_animation_resource_edit"),&AnimationPlayerEditor::_animation_resource_edit); - ObjectTypeDB::bind_method(_MD("_file_selected"),&AnimationPlayerEditor::_file_selected); + ObjectTypeDB::bind_method(_MD("_dialog_action"),&AnimationPlayerEditor::_dialog_action); ObjectTypeDB::bind_method(_MD("_seek_value_changed"),&AnimationPlayerEditor::_seek_value_changed); ObjectTypeDB::bind_method(_MD("_animation_player_changed"),&AnimationPlayerEditor::_animation_player_changed); ObjectTypeDB::bind_method(_MD("_blend_edited"),&AnimationPlayerEditor::_blend_edited); @@ -1133,6 +1243,7 @@ void AnimationPlayerEditor::_bind_methods() { ObjectTypeDB::bind_method(_MD("_blend_editor_next_changed"),&AnimationPlayerEditor::_blend_editor_next_changed); ObjectTypeDB::bind_method(_MD("_unhandled_key_input"),&AnimationPlayerEditor::_unhandled_key_input); ObjectTypeDB::bind_method(_MD("_animation_tool_menu"),&AnimationPlayerEditor::_animation_tool_menu); + ObjectTypeDB::bind_method(_MD("_animation_save_menu"), &AnimationPlayerEditor::_animation_save_menu); @@ -1170,6 +1281,17 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor) { load_anim->set_tooltip("Load an animation from disk."); hb->add_child(load_anim); + save_anim = memnew(MenuButton); + save_anim->set_tooltip("Save the current animation"); + save_anim->get_popup()->add_item("Save", ANIM_SAVE); + save_anim->get_popup()->add_item("Save As..", ANIM_SAVE_AS); + save_anim->set_focus_mode(Control::FOCUS_NONE); + hb->add_child(save_anim); + + accept = memnew(AcceptDialog); + add_child(accept); + accept->connect("confirmed", this, "_menu_confirm_current"); + duplicate_anim = memnew( ToolButton ); hb->add_child(duplicate_anim); duplicate_anim->set_tooltip("Duplicate Animation"); @@ -1339,7 +1461,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor) { remove_anim->connect("pressed", this,"_animation_remove"); animation->connect("item_selected", this,"_animation_selected",Vector(),true); resource_edit_anim->connect("pressed", this,"_animation_resource_edit"); - file->connect("file_selected", this,"_file_selected"); + file->connect("file_selected", this,"_dialog_action"); seek->connect("value_changed", this, "_seek_value_changed",Vector(),true); scale->connect("text_entered", this, "_scale_changed",Vector(),true); editor->get_animation_editor()->connect("timeline_changed",this,"_animation_key_editor_seek"); diff --git a/tools/editor/plugins/animation_player_editor_plugin.h b/tools/editor/plugins/animation_player_editor_plugin.h index 5705742565..ac4d1ab6ba 100644 --- a/tools/editor/plugins/animation_player_editor_plugin.h +++ b/tools/editor/plugins/animation_player_editor_plugin.h @@ -55,6 +55,17 @@ class AnimationPlayerEditor : public VBoxContainer { TOOL_EDIT_RESOURCE }; + enum { + ANIM_SAVE, + ANIM_SAVE_AS + }; + + enum { + RESOURCE_LOAD, + RESOURCE_SAVE + }; + + OptionButton *animation; Button *stop; Button *play; @@ -70,6 +81,7 @@ class AnimationPlayerEditor : public VBoxContainer { Button *edit_anim; Button *resource_edit_anim; Button *load_anim; + MenuButton *save_anim; Button *blend_anim; Button *remove_anim; MenuButton *tool_anim; @@ -85,6 +97,8 @@ class AnimationPlayerEditor : public VBoxContainer { bool last_active; EditorFileDialog *file; + AcceptDialog *accept; + int current_option; struct BlendEditor { @@ -116,13 +130,18 @@ class AnimationPlayerEditor : public VBoxContainer { void _animation_rename(); void _animation_name_edited(); void _animation_load(); + + void _animation_save_in_path(const Ref& p_resource, const String& p_path); + void _animation_save(const Ref& p_resource); + void _animation_save_as(const Ref& p_resource); + void _animation_remove(); void _animation_blend(); void _animation_edit(); void _animation_duplicate(); void _animation_resource_edit(); void _scale_changed(const String& p_scale); - void _file_selected(String p_file); + void _dialog_action(String p_file); void _seek_frame_changed(const String& p_frame); void _seek_value_changed(float p_value); void _blend_editor_next_changed(const String& p_string); @@ -141,6 +160,7 @@ class AnimationPlayerEditor : public VBoxContainer { void _animation_key_editor_anim_len_changed(float p_new); void _unhandled_key_input(const InputEvent& p_ev); void _animation_tool_menu(int p_option); + void _animation_save_menu(int p_option); AnimationPlayerEditor(); protected: From 53c9e8301c41b8ede999a7596643e33e36d2ca40 Mon Sep 17 00:00:00 2001 From: Saracen Date: Fri, 18 Sep 2015 15:23:00 +0100 Subject: [PATCH 30/78] Ignore alpha materials in baked light ray-tracer. --- tools/editor/plugins/baked_light_baker.cpp | 174 +++++++++++++-------- tools/editor/plugins/baked_light_baker.h | 6 +- 2 files changed, 110 insertions(+), 70 deletions(-) diff --git a/tools/editor/plugins/baked_light_baker.cpp b/tools/editor/plugins/baked_light_baker.cpp index 4599dbfb54..261d862b37 100644 --- a/tools/editor/plugins/baked_light_baker.cpp +++ b/tools/editor/plugins/baked_light_baker.cpp @@ -115,6 +115,8 @@ void BakedLightBaker::_add_mesh(const Ref& p_mesh,const Ref& p_m if (!mat_map.has(mat)) { MeshMaterial mm; + mm.is_double_sided = mat->get_flag(Material::FLAG_DOUBLE_SIDED); + mm.use_alpha = false; Ref fm = mat; if (fm.is_valid()) { @@ -128,6 +130,8 @@ void BakedLightBaker::_add_mesh(const Ref& p_mesh,const Ref& p_m mm.specular.color=mm.specular.color.to_linear(); mm.specular.tex=_get_mat_tex(fm->get_texture(FixedMaterial::PARAM_SPECULAR)); + + mm.use_alpha = fm->get_fixed_flag(FixedMaterial::FLAG_USE_ALPHA); } else { mm.diffuse.color=Color(1,1,1,1); @@ -311,7 +315,12 @@ void BakedLightBaker::_parse_geometry(Node* p_node) { lights.push_back(dirl); } - } else if (p_node->cast_to()){ + } + else if (p_node->cast_to()){ + // Ignore meshes and lights contained in baked light samplers + return; + } + else if (p_node->cast_to()){ Spatial *sp = p_node->cast_to(); @@ -472,6 +481,7 @@ BakedLightBaker::BVH* BakedLightBaker::_parse_bvh(BVH** p_children, int p_size, BVH* right = _parse_bvh(&p_children[p_size/2],p_size-p_size/2,p_depth+1,max_depth); BVH *_new = memnew(BVH); + _new->id=-1; _new->aabb=aabb; _new->center=aabb.pos+aabb.size*0.5; _new->children[0]=left; @@ -488,6 +498,7 @@ void BakedLightBaker::_make_bvh() { int max_depth=0; for(int i=0;iid=i; bases[i]->leaf=&triangles[i]; bases[i]->aabb.pos=triangles[i].vertices[0]; bases[i]->aabb.expand_to(triangles[i].vertices[1]); @@ -949,7 +960,7 @@ void BakedLightBaker::_plot_light(ThreadStack& thread_stack,const Vector3& p_plo } -float BakedLightBaker::_throw_ray(ThreadStack& thread_stack,bool p_bake_direct,const Vector3& p_begin, const Vector3& p_end,float p_rest,const Color& p_light,float *p_att_curve,float p_att_pos,int p_att_curve_len,int p_bounces,bool p_first_bounce,bool p_only_dist) { +float BakedLightBaker::_throw_ray(ThreadStack& thread_stack, bool p_bake_direct, const Vector3& p_begin, const Vector3& p_end, float p_rest, const Color& p_light, float *p_att_curve, float p_att_pos, int p_att_curve_len, int p_bounces, bool p_first_bounce, bool p_only_dist, Vector &p_ignore_list) { uint32_t* stack = thread_stack.ray_stack; @@ -978,6 +989,7 @@ float BakedLightBaker::_throw_ray(ThreadStack& thread_stack,bool p_bake_direct,c Vector3 r_point; Vector3 end=p_end; + int triangle_id = -1; Triangle *triangle=NULL; //for(int i=0;ivertices[0],b.leaf->vertices[1],b.leaf->vertices[2]); + Face3 f3(b.leaf->vertices[0],b.leaf->vertices[1],b.leaf->vertices[2]); - Vector3 res; + Vector3 res; - if (f3.intersects_segment(p_begin,end,&res)) { + if (f3.intersects_segment(p_begin,end,&res)) { - float nd = n.dot(res); - if (nd0) - return -1; - - if (n.dot(r_normal)>0) - r_normal=-r_normal; + bool passthrough = false; //ok... Color diffuse_at_point(0.8,0.8,0.8); Color specular_at_point(0.0,0.0,0.0); + if (triangle->material) { + + if ((triangle->material->is_double_sided == true || triangle->material->use_alpha == true) && use_translucency == true) { + if (n.dot(r_normal)>0) + r_normal = -r_normal; + + if (triangle->material->use_alpha == true) + passthrough = true; + } + else { + if (n.dot(r_normal)>0) + return -1; + } + + //triangle->get_uv(r_point); + + diffuse_at_point = triangle->material->diffuse.get_color(uv); + specular_at_point = triangle->material->specular.get_color(uv); + } + else { + if (n.dot(r_normal)>0) + return -1; + } float dist = p_begin.distance_to(r_point); @@ -1139,23 +1176,18 @@ float BakedLightBaker::_throw_ray(ThreadStack& thread_stack,bool p_bake_direct,c //the multiplication can happen with more detail in the shader - - if (triangle->material) { - - //triangle->get_uv(r_point); - - diffuse_at_point=triangle->material->diffuse.get_color(uv); - specular_at_point=triangle->material->specular.get_color(uv); - } - - diffuse_at_point.r=res_light.r*diffuse_at_point.r; diffuse_at_point.g=res_light.g*diffuse_at_point.g; diffuse_at_point.b=res_light.b*diffuse_at_point.b; float ret=1e6; - if (p_bounces>0) { + if (passthrough == true && triangle_id !=-1) + { + p_ignore_list.push_back(triangle_id); + ret=_throw_ray(thread_stack, p_bake_direct, r_point, p_end, p_rest, p_light, p_att_curve, p_att_pos, p_att_curve_len, p_bounces, p_first_bounce, p_only_dist, p_ignore_list); + } + else if (p_bounces>0 ) { p_rest-=dist; @@ -1226,33 +1258,37 @@ float BakedLightBaker::_throw_ray(ThreadStack& thread_stack,bool p_bake_direct,c bool skip=false; - if (!p_first_bounce || p_bake_direct) { + if (passthrough == false) { + if (!p_first_bounce || p_bake_direct) { - float r = plot_size * cell_size*2; - if (dist0 && d 0 && d < r) { + //avoid accumulaiton of light on corners + //plot_light=plot_light.linear_interpolate(Color(0,0,0,0),1.0-sd/plot_size*plot_size); + skip = true; + + } + else { + //plot_light=Color(0,0,0,0); + } } } } diff --git a/tools/editor/plugins/baked_light_baker.h b/tools/editor/plugins/baked_light_baker.h index 8fbeeddc6a..58197283a2 100644 --- a/tools/editor/plugins/baked_light_baker.h +++ b/tools/editor/plugins/baked_light_baker.h @@ -92,6 +92,9 @@ public: Param diffuse; Param specular; Param emission; + + bool is_double_sided; + bool use_alpha; }; struct Triangle { @@ -154,6 +157,7 @@ public: struct BVH { + int id; AABB aabb; Vector3 center; Triangle *leaf; @@ -307,7 +311,7 @@ public: void _plot_light(ThreadStack& thread_stack,const Vector3& p_plot_pos,const AABB& p_plot_aabb,const Color& p_light,const Color& p_tint_light,bool p_only_full,const Plane& p_plane); //void _plot_light_point(const Vector3& p_plot_pos, Octant *p_octant, const AABB& p_aabb,const Color& p_light); - float _throw_ray(ThreadStack& thread_stack,bool p_bake_direct,const Vector3& p_begin, const Vector3& p_end,float p_rest,const Color& p_light,float *p_att_curve,float p_att_pos,int p_att_curve_len,int p_bounces,bool p_first_bounce=false,bool p_only_dist=false); + float _throw_ray(ThreadStack& thread_stack,bool p_bake_direct,const Vector3& p_begin, const Vector3& p_end,float p_rest,const Color& p_light,float *p_att_curve,float p_att_pos,int p_att_curve_len,int p_bounces,bool p_first_bounce=false,bool p_only_dist=false, Vector&p_ignore_list=Vector()); float total_light_area; From e723488aa3933ec0e56b8e09e44256f6dc5da344 Mon Sep 17 00:00:00 2001 From: Saracen Date: Sat, 31 Oct 2015 08:59:29 +0000 Subject: [PATCH 31/78] Moved deleting sample player in OS finalize methods to before deleting audio server to prevent crash when exiting. --- platform/bb10/os_bb10.cpp | 3 ++- platform/haiku/os_haiku.cpp | 3 ++- platform/server/os_server.cpp | 3 ++- platform/windows/os_windows.cpp | 3 ++- platform/winrt/os_winrt.cpp | 3 ++- platform/x11/os_x11.cpp | 3 ++- 6 files changed, 12 insertions(+), 6 deletions(-) diff --git a/platform/bb10/os_bb10.cpp b/platform/bb10/os_bb10.cpp index d89033b1df..c8e7ae561e 100644 --- a/platform/bb10/os_bb10.cpp +++ b/platform/bb10/os_bb10.cpp @@ -195,9 +195,10 @@ void OSBB10::finalize() { // memdelete(debugger_connection_console); //} + memdelete(sample_manager); + audio_server->finish(); memdelete(audio_server); - memdelete(sample_manager); visual_server->finish(); memdelete(visual_server); diff --git a/platform/haiku/os_haiku.cpp b/platform/haiku/os_haiku.cpp index 1edb23d504..ef483657ca 100644 --- a/platform/haiku/os_haiku.cpp +++ b/platform/haiku/os_haiku.cpp @@ -137,9 +137,10 @@ void OS_Haiku::finalize() { spatial_sound_2d_server->finish(); memdelete(spatial_sound_2d_server); + memdelete(sample_manager); + audio_server->finish(); memdelete(audio_server); - memdelete(sample_manager); visual_server->finish(); memdelete(visual_server); diff --git a/platform/server/os_server.cpp b/platform/server/os_server.cpp index 75e0878bac..8b831140d6 100644 --- a/platform/server/os_server.cpp +++ b/platform/server/os_server.cpp @@ -107,9 +107,10 @@ void OS_Server::finalize() { // memdelete(debugger_connection_console); //} + memdelete(sample_manager); + audio_server->finish(); memdelete(audio_server); - memdelete(sample_manager); visual_server->finish(); memdelete(visual_server); diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp index 438a5a6903..c6dae86222 100644 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp @@ -1373,9 +1373,10 @@ void OS_Windows::finalize() { // memdelete(debugger_connection_console); //} + memdelete(sample_manager); + audio_server->finish(); memdelete(audio_server); - memdelete(sample_manager); memdelete(input); diff --git a/platform/winrt/os_winrt.cpp b/platform/winrt/os_winrt.cpp index 3e06d9d59b..02de262508 100644 --- a/platform/winrt/os_winrt.cpp +++ b/platform/winrt/os_winrt.cpp @@ -326,10 +326,11 @@ void OSWinrt::finalize() { //if (debugger_connection_console) { // memdelete(debugger_connection_console); //} + + memdelete(sample_manager); audio_server->finish(); memdelete(audio_server); - memdelete(sample_manager); memdelete(input); diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp index 34bd1184a1..3218230d0b 100644 --- a/platform/x11/os_x11.cpp +++ b/platform/x11/os_x11.cpp @@ -452,9 +452,10 @@ void OS_X11::finalize() { // memdelete(debugger_connection_console); //} + memdelete(sample_manager); + audio_server->finish(); memdelete(audio_server); - memdelete(sample_manager); visual_server->finish(); memdelete(visual_server); From 957baf48dc86c6f4c6d00b74d384d7d7e636104b Mon Sep 17 00:00:00 2001 From: Saracen Date: Sun, 9 Aug 2015 17:43:44 +0100 Subject: [PATCH 32/78] BoneAttachment fix. --- scene/3d/skeleton.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scene/3d/skeleton.cpp b/scene/3d/skeleton.cpp index 4712ba308a..cb81228dff 100644 --- a/scene/3d/skeleton.cpp +++ b/scene/3d/skeleton.cpp @@ -250,7 +250,7 @@ void Skeleton::_notification(int p_what) { ERR_CONTINUE(!obj); Spatial *sp = obj->cast_to(); ERR_CONTINUE(!sp); - sp->set_transform(b.pose_global * b.rest_global_inverse); + sp->set_transform(b.pose_global); } } From e011bcf16291f55e1692a4d3092010c97923fcfc Mon Sep 17 00:00:00 2001 From: Saracen Date: Wed, 2 Sep 2015 13:11:34 +0100 Subject: [PATCH 33/78] Experimental retooling of AnimationTreePlayer to allow manual advancement. --- scene/animation/animation_tree_player.cpp | 96 +++++++++++++++++++++-- scene/animation/animation_tree_player.h | 19 ++++- 2 files changed, 105 insertions(+), 10 deletions(-) diff --git a/scene/animation/animation_tree_player.cpp b/scene/animation/animation_tree_player.cpp index 14f2110915..c7e259c3c6 100644 --- a/scene/animation/animation_tree_player.cpp +++ b/scene/animation/animation_tree_player.cpp @@ -29,6 +29,42 @@ #include "animation_tree_player.h" #include "animation_player.h" +#include "scene/scene_string_names.h" + + +void AnimationTreePlayer::set_animation_process_mode(AnimationProcessMode p_mode) { + + if (animation_process_mode == p_mode) + return; + + bool pr = processing; + if (pr) + _set_process(false); + animation_process_mode = p_mode; + if (pr) + _set_process(true); + +} + +AnimationTreePlayer::AnimationProcessMode AnimationTreePlayer::get_animation_process_mode() const{ + + return animation_process_mode; +} + +void AnimationTreePlayer::_set_process(bool p_process, bool p_force) +{ + if (processing == p_process && !p_force) + return; + + switch (animation_process_mode) { + + case ANIMATION_PROCESS_FIXED: set_fixed_process(p_process && active); break; + case ANIMATION_PROCESS_IDLE: set_process(p_process && active); break; + } + + processing = p_process; +} + bool AnimationTreePlayer::_set(const StringName& p_name, const Variant& p_value) { @@ -42,6 +78,11 @@ bool AnimationTreePlayer::_set(const StringName& p_name, const Variant& p_value) return true; } + if(String(p_name) == SceneStringNames::get_singleton()->playback_active) { + set_active(p_value); + return true; + } + if (String(p_name)!="data") return false; @@ -190,6 +231,11 @@ bool AnimationTreePlayer::_get(const StringName& p_name,Variant &r_ret) const { return true; } + if (String(p_name) == "playback/active") { + r_ret=is_active(); + return true; + } + if (String(p_name)!="data") return false; @@ -342,11 +388,24 @@ void AnimationTreePlayer::_get_property_list( List *p_list) const p_list->push_back( PropertyInfo(Variant::DICTIONARY,"data",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_STORAGE|PROPERTY_USAGE_NETWORK) ); } +void AnimationTreePlayer::advance(float p_time) { + + _process_animation(p_time); +} void AnimationTreePlayer::_notification(int p_what) { switch(p_what) { + case NOTIFICATION_ENTER_TREE: { + + if (!processing) { + //make sure that a previous process state was not saved + //only process if "processing" is set + set_fixed_process(false); + set_process(false); + } + } break; case NOTIFICATION_READY: { dirty_caches=true; if (master!=NodePath()) { @@ -354,7 +413,19 @@ void AnimationTreePlayer::_notification(int p_what) { } } break; case NOTIFICATION_PROCESS: { - _process_animation(); + if (animation_process_mode==ANIMATION_PROCESS_FIXED) + break; + + if (processing) + _process_animation( get_process_delta_time() ); + } break; + case NOTIFICATION_FIXED_PROCESS: { + + if (animation_process_mode==ANIMATION_PROCESS_IDLE) + break; + + if (processing) + _process_animation(get_fixed_process_delta_time()); } break; } @@ -656,10 +727,7 @@ float AnimationTreePlayer::_process_node(const StringName& p_node,AnimationNode } -void AnimationTreePlayer::_process_animation() { - - if (!active) - return; +void AnimationTreePlayer::_process_animation(float p_delta) { if (last_error!=CONNECT_OK) return; @@ -675,7 +743,7 @@ void AnimationTreePlayer::_process_animation() { _process_node(out_name,&prev, 1.0, 0, true ); reset_request=false; } else - _process_node(out_name,&prev, 1.0, get_process_delta_time(), false ); + _process_node(out_name,&prev, 1.0, p_delta, false ); if (dirty_caches) { //some animation changed.. ignore this pass @@ -1520,8 +1588,12 @@ void AnimationTreePlayer::recompute_caches() { void AnimationTreePlayer::set_active(bool p_active) { - active=p_active; - set_process(active); + if (active == p_active) + return; + + active = p_active; + processing = active; + _set_process(processing, true); } bool AnimationTreePlayer::is_active() const { @@ -1743,13 +1815,18 @@ void AnimationTreePlayer::_bind_methods() { ObjectTypeDB::bind_method(_MD("get_node_list"),&AnimationTreePlayer::_get_node_list); + ObjectTypeDB::bind_method(_MD("set_animation_process_mode","mode"),&AnimationTreePlayer::set_animation_process_mode); + ObjectTypeDB::bind_method(_MD("get_animation_process_mode"),&AnimationTreePlayer::get_animation_process_mode); + ObjectTypeDB::bind_method(_MD("advance", "delta"), &AnimationTreePlayer::advance); ObjectTypeDB::bind_method(_MD("reset"),&AnimationTreePlayer::reset); ObjectTypeDB::bind_method(_MD("recompute_caches"),&AnimationTreePlayer::recompute_caches); + ADD_PROPERTY(PropertyInfo(Variant::INT, "playback/process_mode", PROPERTY_HINT_ENUM, "Fixed,Idle"), _SCS("set_animation_process_mode"), _SCS("get_animation_process_mode")); + BIND_CONSTANT( NODE_OUTPUT ); BIND_CONSTANT( NODE_ANIMATION ); BIND_CONSTANT( NODE_ONESHOT ); @@ -1770,6 +1847,9 @@ AnimationTreePlayer::AnimationTreePlayer() { out_name="out"; out->pos=Point2(40,40); node_map.insert( out_name , out); + AnimationProcessMode animation_process_mode; + animation_process_mode = ANIMATION_PROCESS_IDLE; + processing = false; active=false; dirty_caches=true; reset_request=false; diff --git a/scene/animation/animation_tree_player.h b/scene/animation/animation_tree_player.h index 9e936304c6..9ea5ccf330 100644 --- a/scene/animation/animation_tree_player.h +++ b/scene/animation/animation_tree_player.h @@ -34,6 +34,7 @@ #include "scene/3d/spatial.h" #include "scene/3d/skeleton.h" #include "scene/main/misc.h" +#include "animation_player.h" class AnimationTreePlayer : public Node { @@ -42,7 +43,10 @@ class AnimationTreePlayer : public Node { OBJ_CATEGORY("Animation Nodes"); public: - + enum AnimationProcessMode { + ANIMATION_PROCESS_FIXED, + ANIMATION_PROCESS_IDLE, + }; enum NodeType { @@ -256,13 +260,15 @@ private: ConnectError last_error; AnimationNode *active_list; + AnimationProcessMode animation_process_mode; + bool processing; bool active; bool dirty_caches; Map node_map; // return time left to finish animation float _process_node(const StringName& p_node,AnimationNode **r_prev_anim, float p_weight,float p_step, bool p_seek=false,const HashMap *p_filter=NULL, float p_reverse_weight=0); - void _process_animation(); + void _process_animation(float p_delta); bool reset_request; ConnectError _cycle_test(const StringName &p_at_node); @@ -409,12 +415,21 @@ public: ConnectError get_last_error() const; + void set_animation_process_mode(AnimationProcessMode p_mode); + AnimationProcessMode get_animation_process_mode() const; + + void _set_process(bool p_process, bool p_force = false); + + void advance(float p_time); + AnimationTreePlayer(); ~AnimationTreePlayer(); }; VARIANT_ENUM_CAST( AnimationTreePlayer::NodeType ); +VARIANT_ENUM_CAST( AnimationTreePlayer::AnimationProcessMode ); + #endif // ANIMATION_TREE_PLAYER_H From 539bbd66549545ce67bd46d49a6693d854bea634 Mon Sep 17 00:00:00 2001 From: Saracen Date: Mon, 3 Aug 2015 19:36:20 +0100 Subject: [PATCH 34/78] Disable baked lighting sampling on shadeless materials. --- drivers/gles2/rasterizer_gles2.cpp | 118 +++++++++++++++-------------- 1 file changed, 61 insertions(+), 57 deletions(-) diff --git a/drivers/gles2/rasterizer_gles2.cpp b/drivers/gles2/rasterizer_gles2.cpp index d84ee5a758..b602cf33f0 100644 --- a/drivers/gles2/rasterizer_gles2.cpp +++ b/drivers/gles2/rasterizer_gles2.cpp @@ -6526,80 +6526,84 @@ void RasterizerGLES2::_render_list_forward(RenderList *p_render_list,const Trans material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_LIGHTMAP,false); material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_DP_SAMPLER,false); - if (e->instance->sampled_light.is_valid()) { + if (material->flags[VS::MATERIAL_FLAG_UNSHADED] == false && current_debug != VS::SCENARIO_DEBUG_SHADELESS) { - SampledLight *sl = sampled_light_owner.get(e->instance->sampled_light); - if (sl) { + if (e->instance->sampled_light.is_valid()) { - baked_light=NULL; //can't mix - material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_DP_SAMPLER,true); - glActiveTexture(GL_TEXTURE0+max_texture_units-3); - glBindTexture(GL_TEXTURE_2D,sl->texture); //bind the texture - sampled_light_dp_multiplier=sl->multiplier; - bind_dp_sampler=true; - } - } - - - if (!additive && baked_light) { - - if (baked_light->mode==VS::BAKED_LIGHT_OCTREE && baked_light->octree_texture.is_valid() && e->instance->baked_light_octree_xform) { - material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_OCTREE,true); - bind_baked_light_octree=true; - if (prev_baked_light!=baked_light) { - Texture *tex=texture_owner.get(baked_light->octree_texture); - if (tex) { - - glActiveTexture(GL_TEXTURE0+max_texture_units-3); - glBindTexture(tex->target,tex->tex_id); //bind the texture - } - if (baked_light->light_texture.is_valid()) { - Texture *texl=texture_owner.get(baked_light->light_texture); - if (texl) { - glActiveTexture(GL_TEXTURE0+max_texture_units-4); - glBindTexture(texl->target,texl->tex_id); //bind the light texture - } - } + SampledLight *sl = sampled_light_owner.get(e->instance->sampled_light); + if (sl) { + baked_light = NULL; //can't mix + material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_DP_SAMPLER, true); + glActiveTexture(GL_TEXTURE0 + max_texture_units - 3); + glBindTexture(GL_TEXTURE_2D, sl->texture); //bind the texture + sampled_light_dp_multiplier = sl->multiplier; + bind_dp_sampler = true; } - } else if (baked_light->mode==VS::BAKED_LIGHT_LIGHTMAPS) { + } - int lightmap_idx = e->instance->baked_lightmap_id; + if (!additive && baked_light) { - material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_LIGHTMAP,false); - bind_baked_lightmap=false; - - - if (baked_light->lightmaps.has(lightmap_idx)) { - - - RID texid = baked_light->lightmaps[lightmap_idx]; - - if (prev_baked_light!=baked_light || texid!=prev_baked_light_texture) { - - - Texture *tex = texture_owner.get(texid); + if (baked_light->mode == VS::BAKED_LIGHT_OCTREE && baked_light->octree_texture.is_valid() && e->instance->baked_light_octree_xform) { + material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_OCTREE, true); + bind_baked_light_octree = true; + if (prev_baked_light != baked_light) { + Texture *tex = texture_owner.get(baked_light->octree_texture); if (tex) { - glActiveTexture(GL_TEXTURE0+max_texture_units-3); - glBindTexture(tex->target,tex->tex_id); //bind the texture + glActiveTexture(GL_TEXTURE0 + max_texture_units - 3); + glBindTexture(tex->target, tex->tex_id); //bind the texture + } + if (baked_light->light_texture.is_valid()) { + Texture *texl = texture_owner.get(baked_light->light_texture); + if (texl) { + glActiveTexture(GL_TEXTURE0 + max_texture_units - 4); + glBindTexture(texl->target, texl->tex_id); //bind the light texture + } } - prev_baked_light_texture=texid; } + } + else if (baked_light->mode == VS::BAKED_LIGHT_LIGHTMAPS) { + + + int lightmap_idx = e->instance->baked_lightmap_id; + + material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_LIGHTMAP, false); + bind_baked_lightmap = false; + + + if (baked_light->lightmaps.has(lightmap_idx)) { + + + RID texid = baked_light->lightmaps[lightmap_idx]; + + if (prev_baked_light != baked_light || texid != prev_baked_light_texture) { + + + Texture *tex = texture_owner.get(texid); + if (tex) { + + glActiveTexture(GL_TEXTURE0 + max_texture_units - 3); + glBindTexture(tex->target, tex->tex_id); //bind the texture + } + + prev_baked_light_texture = texid; + } + + if (texid.is_valid()) { + material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_LIGHTMAP, true); + bind_baked_lightmap = true; + } - if (texid.is_valid()) { - material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_LIGHTMAP,true); - bind_baked_lightmap=true; } - } } - } - if (int(prev_baked_light!=NULL) ^ int(baked_light!=NULL)) { - rebind=true; + if (int(prev_baked_light != NULL) ^ int(baked_light != NULL)) { + rebind = true; + } } } From 0006f035ebb020227ad5b67faf4e04b723b1e0ec Mon Sep 17 00:00:00 2001 From: Saracen Date: Sat, 15 Aug 2015 07:47:22 +0100 Subject: [PATCH 35/78] Added alignment to LineEdit GUI control. --- scene/gui/line_edit.cpp | 119 +++++++++++++++++++++++++++++++++++----- scene/gui/line_edit.h | 21 ++++++- 2 files changed, 124 insertions(+), 16 deletions(-) diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp index 2b4d7db01e..310e2fee8b 100644 --- a/scene/gui/line_edit.cpp +++ b/scene/gui/line_edit.cpp @@ -145,6 +145,13 @@ void LineEdit::_input_event(InputEvent p_event) { int old_cursor_pos = cursor_pos; text = undo_text; + + Ref font = get_font("font"); + + cached_width = 0; + for (int i = 0; iget_char_size(text[i]).width; + if(old_cursor_pos > text.length()) { set_cursor_pos(text.length()); } else { @@ -164,6 +171,13 @@ void LineEdit::_input_event(InputEvent p_event) { selection_clear(); undo_text = text; text = text.substr(cursor_pos,text.length()-cursor_pos); + + Ref font = get_font("font"); + + cached_width = 0; + for (int i = 0; iget_char_size(text[i]).width; + set_cursor_pos(0); emit_signal("text_changed",text); _change_notify("text"); @@ -303,6 +317,18 @@ void LineEdit::_input_event(InputEvent p_event) { } } +void LineEdit::set_align(Align p_align) { + + ERR_FAIL_INDEX(p_align, 4); + align = p_align; + update(); +} + +LineEdit::Align LineEdit::get_align() const{ + + return align; +} + Variant LineEdit::get_drag_data(const Point2& p_point) { if (selection.drag_attempt && selection.enabled) { @@ -325,7 +351,13 @@ void LineEdit::drop_data(const Point2& p_point,const Variant& p_data){ if (p_data.get_type()==Variant::STRING) { set_cursor_at_pixel_pos(p_point.x); int selected = selection.end - selection.begin; + + Ref font = get_font("font"); + for (int i = selection.begin; iget_char_size(text[i]).width; + text.erase(selection.begin, selected); + append_at_cursor(p_data); selection.begin = cursor_pos-selected; selection.end = cursor_pos; @@ -365,8 +397,25 @@ void LineEdit::_notification(int p_what) { get_stylebox("focus")->draw( ci, Rect2( Point2(), size ) ); } - - int ofs=style->get_offset().x; + int x_ofs=0; + + switch (align) { + + case ALIGN_FILL: + case ALIGN_LEFT: { + + x_ofs=style->get_offset().x; + } break; + case ALIGN_CENTER: { + + x_ofs=x_ofs=int(size.width-(cached_width))/2; + } break; + case ALIGN_RIGHT: { + + x_ofs=x_ofs=int(size.width-style->get_offset().x-(cached_width)); + } break; + } + int ofs_max=width-style->get_minimum_size().width; int char_ofs=window_pos; @@ -391,29 +440,29 @@ void LineEdit::_notification(int p_what) { int char_width=font->get_char_size( cchar,next ).width; // end of widget, break! - if ( (ofs+char_width) > ofs_max ) + if ((x_ofs + char_width) > ofs_max) break; bool selected=selection.enabled && char_ofs>=selection.begin && char_ofscanvas_item_add_rect(ci,Rect2( Point2( ofs , y_ofs ),Size2( char_width, y_area )),selection_color); + VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2(x_ofs, y_ofs), Size2(char_width, y_area)), selection_color); - font->draw_char(ci,Point2( ofs , y_ofs+font_ascent ), cchar, next,selected?font_color_selected:font_color ); + font->draw_char(ci, Point2(x_ofs, y_ofs + font_ascent), cchar, next, selected ? font_color_selected : font_color); if (char_ofs==cursor_pos && has_focus()) VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2( - Point2( ofs , y_ofs ), Size2( 1, y_area ) ), cursor_color ); + Point2( x_ofs , y_ofs ), Size2( 1, y_area ) ), cursor_color ); - ofs+=char_width; + x_ofs+=char_width; char_ofs++; } if (char_ofs==cursor_pos && has_focus()) //may be at the end VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2( - Point2( ofs , y_ofs ), Size2( 1, y_area ) ), cursor_color ); + Point2( x_ofs , y_ofs ), Size2( 1, y_area ) ), cursor_color ); } break; case NOTIFICATION_FOCUS_ENTER: { @@ -484,9 +533,29 @@ void LineEdit::shift_selection_check_post(bool p_shift) { void LineEdit::set_cursor_at_pixel_pos(int p_x) { - int ofs=window_pos; - int pixel_ofs=get_stylebox("normal")->get_offset().x; - Ref font=get_font("font"); + Ref font = get_font("font"); + int ofs = window_pos; + Ref style = get_stylebox("normal"); + int pixel_ofs = 0; + Size2 size = get_size(); + + switch (align) { + + case ALIGN_FILL: + case ALIGN_LEFT: { + + pixel_ofs = int(style->get_offset().x); + } break; + case ALIGN_CENTER: { + + pixel_ofs=int(size.width-(cached_width))/2; + } break; + case ALIGN_RIGHT: { + + pixel_ofs=int(size.width-style->get_offset().x-(cached_width)); + } break; + } + while (ofs font = get_font("font"); + cached_width -= font->get_char_size(text[cursor_pos - 1]).width; text.erase( cursor_pos-1, 1 ); @@ -626,17 +697,22 @@ void LineEdit::append_at_cursor(String p_text) { if ( ( max_length <= 0 ) || (text.length()+p_text.length() <= max_length)) { undo_text = text; + + Ref font = get_font("font"); + + for (int i = 0; iget_char_size(p_text[i]).width; + String pre = text.substr( 0, cursor_pos ); String post = text.substr( cursor_pos, text.length()-cursor_pos ); text=pre+p_text+post; set_cursor_pos(cursor_pos+p_text.length()); - } - } void LineEdit::clear_internal() { + cached_width = 0; cursor_pos=0; window_pos=0; undo_text=""; @@ -676,6 +752,12 @@ void LineEdit::selection_delete() { if (selection.enabled) { undo_text = text; + + Ref font = get_font("font"); + + for (int i = selection.begin; iget_char_size(text[i]).width; + text.erase(selection.begin,selection.end-selection.begin); cursor_pos-=CLAMP( cursor_pos-selection.begin, 0, selection.end-selection.begin); @@ -789,6 +871,8 @@ bool LineEdit::is_text_field() const { void LineEdit::_bind_methods() { + ObjectTypeDB::bind_method(_MD("set_align", "align"), &LineEdit::set_align); + ObjectTypeDB::bind_method(_MD("get_align"), &LineEdit::get_align); ObjectTypeDB::bind_method(_MD("_input_event"),&LineEdit::_input_event); ObjectTypeDB::bind_method(_MD("clear"),&LineEdit::clear); @@ -809,15 +893,22 @@ void LineEdit::_bind_methods() { ADD_SIGNAL( MethodInfo("text_changed", PropertyInfo( Variant::STRING, "text" )) ); ADD_SIGNAL( MethodInfo("text_entered", PropertyInfo( Variant::STRING, "text" )) ); + BIND_CONSTANT(ALIGN_LEFT); + BIND_CONSTANT(ALIGN_CENTER); + BIND_CONSTANT(ALIGN_RIGHT); + BIND_CONSTANT(ALIGN_FILL); + ADD_PROPERTY( PropertyInfo( Variant::STRING, "text" ), _SCS("set_text"),_SCS("get_text") ); + ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "align", PROPERTY_HINT_ENUM, "Left,Center,Right,Fill"), _SCS("set_align"), _SCS("get_align")); ADD_PROPERTY( PropertyInfo( Variant::INT, "max_length" ), _SCS("set_max_length"),_SCS("get_max_length") ); ADD_PROPERTY( PropertyInfo( Variant::BOOL, "editable" ), _SCS("set_editable"),_SCS("is_editable") ); ADD_PROPERTY( PropertyInfo( Variant::BOOL, "secret" ), _SCS("set_secret"),_SCS("is_secret") ); - } LineEdit::LineEdit() { + align = ALIGN_LEFT; + cached_width = 0; cursor_pos=0; window_pos=0; max_length = 0; diff --git a/scene/gui/line_edit.h b/scene/gui/line_edit.h index b1c4c8f616..f28136d66e 100644 --- a/scene/gui/line_edit.h +++ b/scene/gui/line_edit.h @@ -36,7 +36,18 @@ class LineEdit : public Control { OBJ_TYPE( LineEdit, Control ); - + +public: + enum Align { + + ALIGN_LEFT, + ALIGN_CENTER, + ALIGN_RIGHT, + ALIGN_FILL + }; +private: + Align align; + bool editable; bool pass; @@ -46,6 +57,8 @@ class LineEdit : public Control { int cursor_pos; int window_pos; int max_length; // 0 for no maximum + + int cached_width; struct Selection { @@ -83,7 +96,8 @@ class LineEdit : public Control { protected: static void _bind_methods(); public: - + void set_align(Align p_align); + Align get_align() const; virtual Variant get_drag_data(const Point2& p_point); virtual bool can_drop_data(const Point2& p_point,const Variant& p_data) const; @@ -119,4 +133,7 @@ public: }; + +VARIANT_ENUM_CAST(LineEdit::Align); + #endif From e3c50ac63d57e484ae39761be54213cac8b4de4b Mon Sep 17 00:00:00 2001 From: Saracen Date: Wed, 2 Sep 2015 12:36:52 +0100 Subject: [PATCH 36/78] Aligned line edit fix. --- scene/gui/line_edit.cpp | 61 ++++++++++++++++++++++++++++------------- 1 file changed, 42 insertions(+), 19 deletions(-) diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp index 310e2fee8b..8cf761bd82 100644 --- a/scene/gui/line_edit.cpp +++ b/scene/gui/line_edit.cpp @@ -175,8 +175,10 @@ void LineEdit::_input_event(InputEvent p_event) { Ref font = get_font("font"); cached_width = 0; - for (int i = 0; iget_char_size(text[i]).width; + if (font != NULL) { + for (int i = 0; i < text.length(); i++) + cached_width += font->get_char_size(text[i]).width; + } set_cursor_pos(0); emit_signal("text_changed",text); @@ -353,8 +355,10 @@ void LineEdit::drop_data(const Point2& p_point,const Variant& p_data){ int selected = selection.end - selection.begin; Ref font = get_font("font"); - for (int i = selection.begin; iget_char_size(text[i]).width; + if (font != NULL) { + for (int i = selection.begin; i < selection.end; i++) + cached_width -= font->get_char_size(text[i]).width; + } text.erase(selection.begin, selected); @@ -559,7 +563,10 @@ void LineEdit::set_cursor_at_pixel_pos(int p_x) { while (ofsget_char_size( text[ofs] ).width; + int char_w = 0; + if (font != NULL) { + int char_w = font->get_char_size(text[ofs]).width; + } pixel_ofs+=char_w; if (pixel_ofs > p_x) { //found what we look for @@ -593,7 +600,9 @@ void LineEdit::delete_char() { if ((text.length()<=0) || (cursor_pos==0)) return; Ref font = get_font("font"); - cached_width -= font->get_char_size(text[cursor_pos - 1]).width; + if (font != NULL) { + cached_width -= font->get_char_size(text[cursor_pos - 1]).width; + } text.erase( cursor_pos-1, 1 ); @@ -664,13 +673,15 @@ void LineEdit::set_cursor_pos(int p_pos) { int width_to_cursor=0; int wp=window_pos; - for (int i=window_pos;iget_char_size( text[i] ).width; + if (font != NULL) { + for (int i=window_pos;iget_char_size( text[i] ).width; - while(width_to_cursor>=window_width && wpget_char_size( text[ wp ] ).width; - wp++; + while (width_to_cursor >= window_width && wp < text.length()) { + + width_to_cursor -= font->get_char_size(text[wp]).width; + wp++; + } } if (wp!=window_pos) @@ -699,9 +710,13 @@ void LineEdit::append_at_cursor(String p_text) { undo_text = text; Ref font = get_font("font"); - - for (int i = 0; iget_char_size(p_text[i]).width; + if (font != NULL) { + for (int i = 0; i < p_text.length(); i++) + cached_width += font->get_char_size(p_text[i]).width; + } + else { + cached_width = 0; + } String pre = text.substr( 0, cursor_pos ); String post = text.substr( cursor_pos, text.length()-cursor_pos ); @@ -753,10 +768,18 @@ void LineEdit::selection_delete() { undo_text = text; - Ref font = get_font("font"); - - for (int i = selection.begin; iget_char_size(text[i]).width; + if (text.size() > 0) + { + Ref font = get_font("font"); + if (font != NULL) { + for (int i = selection.begin; i < selection.end; i++) + cached_width -= font->get_char_size(text[i]).width; + } + } + else + { + cached_width = 0; + } text.erase(selection.begin,selection.end-selection.begin); cursor_pos-=CLAMP( cursor_pos-selection.begin, 0, selection.end-selection.begin); From 6bcc2e1f835c5e4f1c788f026e870019a4defff6 Mon Sep 17 00:00:00 2001 From: Saracen Date: Wed, 28 Oct 2015 20:03:10 +0000 Subject: [PATCH 37/78] Fixed broken set_loop_restart_time method in AudioStreamPlaybackOGGVorbis class. --- drivers/vorbis/audio_stream_ogg_vorbis.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/vorbis/audio_stream_ogg_vorbis.h b/drivers/vorbis/audio_stream_ogg_vorbis.h index 827d8b0be3..5dbada962a 100644 --- a/drivers/vorbis/audio_stream_ogg_vorbis.h +++ b/drivers/vorbis/audio_stream_ogg_vorbis.h @@ -85,7 +85,7 @@ public: virtual void stop(); virtual bool is_playing() const; - virtual void set_loop_restart_time(float p_time) { loop_restart_time=0; } + virtual void set_loop_restart_time(float p_time) { loop_restart_time=p_time; } virtual void set_paused(bool p_paused); virtual bool is_paused(bool p_paused) const; From 467ee040c485f317048d5aec97d5d6d0af1f54e7 Mon Sep 17 00:00:00 2001 From: Franklin Sobrinho Date: Wed, 4 Nov 2015 15:38:02 -0300 Subject: [PATCH 38/78] Fix Range exp_edit property --- scene/gui/range.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scene/gui/range.cpp b/scene/gui/range.cpp index ad708d16f0..7103ee651f 100644 --- a/scene/gui/range.cpp +++ b/scene/gui/range.cpp @@ -243,7 +243,7 @@ void Range::_bind_methods() { ADD_PROPERTY( PropertyInfo( Variant::REAL, "range/step" ), _SCS("set_step"), _SCS("get_step") ); ADD_PROPERTY( PropertyInfo( Variant::REAL, "range/page" ), _SCS("set_page"), _SCS("get_page") ); ADD_PROPERTY( PropertyInfo( Variant::REAL, "range/value" ), _SCS("set_val"), _SCS("get_val") ); - ADD_PROPERTY( PropertyInfo( Variant::REAL, "range/exp_edit" ), _SCS("set_exp_unit_value"), _SCS("is_unit_value_exp") ); + ADD_PROPERTY( PropertyInfo( Variant::BOOL, "range/exp_edit" ), _SCS("set_exp_unit_value"), _SCS("is_unit_value_exp") ); ADD_PROPERTY( PropertyInfo( Variant::BOOL, "rounded_values" ), _SCS("set_rounded_values"), _SCS("get_rounded_values") ); } From 8d48cf95b9408a0a54bb741c6b795d2e5179503d Mon Sep 17 00:00:00 2001 From: Franklin Sobrinho Date: Thu, 5 Nov 2015 12:20:45 -0300 Subject: [PATCH 39/78] Add Tree checkbox check/uncheck behavior when pressing enter --- scene/gui/tree.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index 5df6f2ced9..9789c83806 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -2266,9 +2266,12 @@ bool Tree::edit_selected() { TreeItem::Cell &c = s->cells[col]; + if (c.mode==TreeItem::CELL_MODE_CHECK) { - - if (c.mode==TreeItem::CELL_MODE_CUSTOM) { + s->set_checked(col, !c.checked); + item_edited(col,s); + return true; + } else if (c.mode==TreeItem::CELL_MODE_CUSTOM) { edited_item=s; edited_col=col; From 03d4c05150deb7e78444a8c7f893855c07c0f775 Mon Sep 17 00:00:00 2001 From: George Marques Date: Fri, 6 Nov 2015 16:07:34 -0200 Subject: [PATCH 40/78] Fix Opus driver build for VS2010 and VS2012 Fix #2744 --- drivers/opus/opus_config.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/opus/opus_config.h b/drivers/opus/opus_config.h index c6470e92c3..98c3e87cc6 100644 --- a/drivers/opus/opus_config.h +++ b/drivers/opus/opus_config.h @@ -7,12 +7,16 @@ /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 +#if (!defined( _MSC_VER ) || ( _MSC_VER >= 1800 )) + /* Define to 1 if you have the `lrint' function. */ #define HAVE_LRINT 1 /* Define to 1 if you have the `lrintf' function. */ #define HAVE_LRINTF 1 +#endif + /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 @@ -109,7 +113,11 @@ /* Define to the equivalent of the C99 'restrict' keyword, or to nothing if this is not supported. Do not define if restrict is supported directly. */ +#if (!defined( _MSC_VER ) || ( _MSC_VER >= 1800 )) #define restrict __restrict +#else +#undef restrict +#endif /* Work around a bug in Sun C++: it does not support _Restrict or __restrict__, even though the corresponding Sun C compiler ends up with "#define restrict _Restrict" or "#define restrict __restrict__" in the From d5fbd1d262fe8d38d550e23169af748e84667881 Mon Sep 17 00:00:00 2001 From: Franklin Sobrinho Date: Fri, 6 Nov 2015 18:52:15 -0300 Subject: [PATCH 41/78] Fix String content test --- core/variant_op.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/variant_op.cpp b/core/variant_op.cpp index 1cdf6d7319..763b8c11b4 100644 --- a/core/variant_op.cpp +++ b/core/variant_op.cpp @@ -2573,7 +2573,7 @@ bool Variant::in(const Variant& p_index, bool *r_valid) const { String idx=p_index; const String *str=reinterpret_cast(_data._mem); - return str->find("idx")!=-1; + return str->find(idx)!=-1; } } break; From 7828986b1c8583078038093ae9ab1b77f21ddde4 Mon Sep 17 00:00:00 2001 From: MarianoGNU Date: Fri, 6 Nov 2015 17:24:39 -0300 Subject: [PATCH 42/78] Add