summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/bind/core_bind.cpp6
-rw-r--r--core/bind/core_bind.h1
-rw-r--r--doc/base/classes.xml7
-rw-r--r--drivers/gles3/rasterizer_scene_gles3.cpp2
-rw-r--r--modules/visual_script/visual_script_builtin_funcs.cpp2
-rw-r--r--platform/android/java/src/org/godotengine/godot/input/GodotTextInputWrapper.java49
-rw-r--r--scene/gui/tree.cpp5
-rw-r--r--scene/gui/tree.h1
-rw-r--r--scene/main/scene_main_loop.cpp5
-rw-r--r--scene/main/scene_main_loop.h1
10 files changed, 38 insertions, 41 deletions
diff --git a/core/bind/core_bind.cpp b/core/bind/core_bind.cpp
index 54ab51657b..79cfae0a3a 100644
--- a/core/bind/core_bind.cpp
+++ b/core/bind/core_bind.cpp
@@ -1221,6 +1221,11 @@ PoolVector<Vector3> _Geometry::get_closest_points_between_segments(const Vector3
return r;
}
+Vector2 _Geometry::get_closest_point_to_segment_2d(const Vector2& p_point, const Vector2& p_a,const Vector2& p_b) {
+
+ Vector2 s[2]={p_a,p_b};
+ return Geometry::get_closest_point_to_segment_2d(p_point,s);
+}
Vector3 _Geometry::get_closest_point_to_segment(const Vector3& p_point, const Vector3& p_a,const Vector3& p_b) {
Vector3 s[2]={p_a,p_b};
@@ -1342,6 +1347,7 @@ void _Geometry::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_closest_points_between_segments_2d","p1","q1","p2","q2"),&_Geometry::get_closest_points_between_segments_2d);
ClassDB::bind_method(D_METHOD("get_closest_points_between_segments","p1","p2","q1","q2"),&_Geometry::get_closest_points_between_segments);
+ ClassDB::bind_method(D_METHOD("get_closest_point_to_segment_2d","point","s1","s2"),&_Geometry::get_closest_point_to_segment_2d);
ClassDB::bind_method(D_METHOD("get_closest_point_to_segment","point","s1","s2"),&_Geometry::get_closest_point_to_segment);
ClassDB::bind_method(D_METHOD("get_uv84_normal_bit","normal"),&_Geometry::get_uv84_normal_bit);
diff --git a/core/bind/core_bind.h b/core/bind/core_bind.h
index 00cbb254d6..4241912ddd 100644
--- a/core/bind/core_bind.h
+++ b/core/bind/core_bind.h
@@ -334,6 +334,7 @@ public:
Variant segment_intersects_segment_2d(const Vector2& p_from_a,const Vector2& p_to_a,const Vector2& p_from_b,const Vector2& p_to_b);
PoolVector<Vector2> get_closest_points_between_segments_2d( const Vector2& p1,const Vector2& q1, const Vector2& p2,const Vector2& q2);
PoolVector<Vector3> get_closest_points_between_segments(const Vector3& p1,const Vector3& p2,const Vector3& q1,const Vector3& q2);
+ Vector2 get_closest_point_to_segment_2d(const Vector2& p_point, const Vector2& p_a,const Vector2& p_b);
Vector3 get_closest_point_to_segment(const Vector3& p_point, const Vector3& p_a,const Vector3& p_b);
Variant ray_intersects_triangle( const Vector3& p_from, const Vector3& p_dir, const Vector3& p_v0,const Vector3& p_v1,const Vector3& p_v2);
Variant segment_intersects_triangle( const Vector3& p_from, const Vector3& p_to, const Vector3& p_v0,const Vector3& p_v1,const Vector3& p_v2);
diff --git a/doc/base/classes.xml b/doc/base/classes.xml
index 4e4fb3cd23..17f45c64a2 100644
--- a/doc/base/classes.xml
+++ b/doc/base/classes.xml
@@ -35451,6 +35451,13 @@
Returns true if this SceneTree's [NetworkedMultiplayerPeer] is in server mode (listening for connections).
</description>
</method>
+ <method name="has_network_peer" qualifiers="const">
+ <return type="bool">
+ </return>
+ <description>
+ Returns true if there is a [NetworkedMultiplayerPeer] set (with [method SceneTree.set_network_peer]).
+ </description>
+ </method>
<method name="is_paused" qualifiers="const">
<return type="bool">
</return>
diff --git a/drivers/gles3/rasterizer_scene_gles3.cpp b/drivers/gles3/rasterizer_scene_gles3.cpp
index 73adeaf723..03a5834ca7 100644
--- a/drivers/gles3/rasterizer_scene_gles3.cpp
+++ b/drivers/gles3/rasterizer_scene_gles3.cpp
@@ -2806,7 +2806,7 @@ void RasterizerSceneGLES3::_copy_to_front_buffer(Environment *env) {
//no environment, simply convert from linear to srgb
storage->shaders.copy.set_conditional(CopyShaderGLES3::LINEAR_TO_SRGB,true);
} else {
- /* Why are both statements equal? */
+ /* FIXME: Why are both statements equal? */
storage->shaders.copy.set_conditional(CopyShaderGLES3::LINEAR_TO_SRGB,true);
}
diff --git a/modules/visual_script/visual_script_builtin_funcs.cpp b/modules/visual_script/visual_script_builtin_funcs.cpp
index 1acd5bff8d..f9780400d8 100644
--- a/modules/visual_script/visual_script_builtin_funcs.cpp
+++ b/modules/visual_script/visual_script_builtin_funcs.cpp
@@ -329,7 +329,7 @@ PropertyInfo VisualScriptBuiltinFunc::get_input_value_port_info(int p_idx) const
case LOGIC_CLAMP: {
if (p_idx==0)
return PropertyInfo(Variant::REAL,"a");
- else if (p_idx==0) // is it ok to test p_idx == 0 twice?
+ else if (p_idx==0) // FIXME: is it ok to test p_idx == 0 twice?
return PropertyInfo(Variant::REAL,"min");
else
return PropertyInfo(Variant::REAL,"max");
diff --git a/platform/android/java/src/org/godotengine/godot/input/GodotTextInputWrapper.java b/platform/android/java/src/org/godotengine/godot/input/GodotTextInputWrapper.java
index 80cded6fb5..3c8207fae1 100644
--- a/platform/android/java/src/org/godotengine/godot/input/GodotTextInputWrapper.java
+++ b/platform/android/java/src/org/godotengine/godot/input/GodotTextInputWrapper.java
@@ -49,7 +49,6 @@ public class GodotTextInputWrapper implements TextWatcher, OnEditorActionListene
// ===========================================================
private final GodotView mView;
private final GodotEditText mEdit;
- private String mText;
private String mOriginText;
// ===========================================================
@@ -81,52 +80,28 @@ public class GodotTextInputWrapper implements TextWatcher, OnEditorActionListene
@Override
public void afterTextChanged(final Editable s) {
- if (this.isFullScreenEdit()) {
- return;
- }
- //if (BuildConfig.DEBUG) {
- //Log.d(TAG, "afterTextChanged: " + s);
- //}
- int nModified = s.length() - this.mText.length();
- if (nModified > 0) {
- final String insertText = s.subSequence(this.mText.length(), s.length()).toString();
- for(int i = 0; i < insertText.length(); i++) {
- int ch = insertText.codePointAt(i);
- GodotLib.key(0, ch, true);
- GodotLib.key(0, ch, false);
- }
- /*
- if (BuildConfig.DEBUG) {
- Log.d(TAG, "insertText(" + insertText + ")");
- }
- */
- } else {
- for (; nModified < 0; ++nModified) {
- GodotLib.key(KeyEvent.KEYCODE_DEL, 0, true);
- GodotLib.key(KeyEvent.KEYCODE_DEL, 0, false);
- /*
- if (BuildConfig.DEBUG) {
- Log.d(TAG, "deleteBackward");
- }
- */
- }
- }
- this.mText = s.toString();
}
@Override
public void beforeTextChanged(final CharSequence pCharSequence, final int start, final int count, final int after) {
- /*
- if (BuildConfig.DEBUG) {
- Log.d(TAG, "beforeTextChanged(" + pCharSequence + ")start: " + start + ",count: " + count + ",after: " + after);
+ //Log.d(TAG, "beforeTextChanged(" + pCharSequence + ")start: " + start + ",count: " + count + ",after: " + after);
+
+ for (int i=0;i<count;i++){
+ GodotLib.key(KeyEvent.KEYCODE_DEL, 0, true);
+ GodotLib.key(KeyEvent.KEYCODE_DEL, 0, false);
}
- */
- this.mText = pCharSequence.toString();
}
@Override
public void onTextChanged(final CharSequence pCharSequence, final int start, final int before, final int count) {
+ //Log.d(TAG, "onTextChanged(" + pCharSequence + ")start: " + start + ",count: " + count + ",before: " + before);
+
+ for (int i=start;i<start+count;i++){
+ int ch = pCharSequence.charAt(i);
+ GodotLib.key(0, ch, true);
+ GodotLib.key(0, ch, false);
+ }
}
diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp
index cd93c13c99..292efdcc01 100644
--- a/scene/gui/tree.cpp
+++ b/scene/gui/tree.cpp
@@ -848,7 +848,6 @@ void Tree::update_cache() {
cache.title_button_color = get_color("title_button_color");
v_scroll->set_custom_step(cache.font->get_height());
- cache.click_item=get_selected();
}
@@ -1611,6 +1610,7 @@ int Tree::propagate_mouse_event(const Point2i &p_pos,int x_ofs,int y_ofs,bool p_
cache.click_id=c.buttons[j].id;
cache.click_item=p_item;
cache.click_column=col;
+ cache.click_pos=get_global_mouse_pos()-get_global_pos();
update();
//emit_signal("button_pressed");
return -1;
@@ -2391,6 +2391,8 @@ void Tree::_gui_input(InputEvent p_event) {
if (cache.click_type==Cache::CLICK_BUTTON) {
+ // make sure in case of wrong reference after reconstructing whole TreeItems
+ cache.click_item=get_item_at_pos(cache.click_pos);
emit_signal("button_pressed",cache.click_item,cache.click_column,cache.click_id);
}
@@ -2971,7 +2973,6 @@ void Tree::clear() {
selected_item=NULL;
edited_item=NULL;
popup_edited_item=NULL;
- selected_item=NULL;
update();
};
diff --git a/scene/gui/tree.h b/scene/gui/tree.h
index 351cc4cb50..14bd2efbaa 100644
--- a/scene/gui/tree.h
+++ b/scene/gui/tree.h
@@ -409,6 +409,7 @@ friend class TreeItem;
TreeItem *click_item;
int click_column;
int hover_index;
+ Point2 click_pos;
} cache;
diff --git a/scene/main/scene_main_loop.cpp b/scene/main/scene_main_loop.cpp
index 418eb92ee2..093359ab16 100644
--- a/scene/main/scene_main_loop.cpp
+++ b/scene/main/scene_main_loop.cpp
@@ -1803,6 +1803,10 @@ bool SceneTree::is_network_server() const {
}
+bool SceneTree::has_network_peer() const {
+ return network_peer.is_valid();
+}
+
int SceneTree::get_network_unique_id() const {
ERR_FAIL_COND_V(!network_peer.is_valid(),0);
@@ -2310,6 +2314,7 @@ void SceneTree::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_network_peer","peer:NetworkedMultiplayerPeer"),&SceneTree::set_network_peer);
ClassDB::bind_method(D_METHOD("is_network_server"),&SceneTree::is_network_server);
+ ClassDB::bind_method(D_METHOD("has_network_peer"),&SceneTree::has_network_peer);
ClassDB::bind_method(D_METHOD("get_network_unique_id"),&SceneTree::get_network_unique_id);
ClassDB::bind_method(D_METHOD("set_refuse_new_network_connections","refuse"),&SceneTree::set_refuse_new_network_connections);
ClassDB::bind_method(D_METHOD("is_refusing_new_network_connections"),&SceneTree::is_refusing_new_network_connections);
diff --git a/scene/main/scene_main_loop.h b/scene/main/scene_main_loop.h
index fec8534b40..7f69f5eef7 100644
--- a/scene/main/scene_main_loop.h
+++ b/scene/main/scene_main_loop.h
@@ -447,6 +447,7 @@ public:
void set_network_peer(const Ref<NetworkedMultiplayerPeer>& p_network_peer);
bool is_network_server() const;
+ bool has_network_peer() const;
int get_network_unique_id() const;
void set_refuse_new_network_connections(bool p_refuse);