summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/os/dir_access.cpp2
-rw-r--r--core/os/input.cpp6
-rw-r--r--core/os/input.h5
-rw-r--r--core/os/os.h1
-rw-r--r--core/variant.h1
-rw-r--r--core/variant_call.cpp26
-rw-r--r--modules/gdscript/gd_script.cpp6
-rw-r--r--modules/gdscript/gd_tokenizer.cpp3
-rw-r--r--platform/osx/os_osx.h1
-rw-r--r--platform/osx/os_osx.mm6
-rw-r--r--platform/windows/os_windows.cpp16
-rw-r--r--platform/windows/os_windows.h1
-rw-r--r--platform/x11/os_x11.cpp13
-rw-r--r--platform/x11/os_x11.h1
-rw-r--r--servers/visual/shader_language.cpp18
15 files changed, 94 insertions, 12 deletions
diff --git a/core/os/dir_access.cpp b/core/os/dir_access.cpp
index 3ab4d4bb7f..53fe792c46 100644
--- a/core/os/dir_access.cpp
+++ b/core/os/dir_access.cpp
@@ -155,7 +155,7 @@ Error DirAccess::make_dir_recursive(String p_dir) {
full_dir=dir;
}
- int slices = full_dir.get_slice_count("/");
+ //int slices = full_dir.get_slice_count("/");
int pos = 0;
while (pos < full_dir.length()) {
diff --git a/core/os/input.cpp b/core/os/input.cpp
index 3712690cc1..4151c1b5a8 100644
--- a/core/os/input.cpp
+++ b/core/os/input.cpp
@@ -60,6 +60,7 @@ void Input::_bind_methods() {
ObjectTypeDB::bind_method(_MD("get_mouse_button_mask"),&Input::get_mouse_button_mask);
ObjectTypeDB::bind_method(_MD("set_mouse_mode","mode"),&Input::set_mouse_mode);
ObjectTypeDB::bind_method(_MD("get_mouse_mode"),&Input::get_mouse_mode);
+ ObjectTypeDB::bind_method(_MD("warp_mouse_pos","to"),&Input::warp_mouse_pos);
BIND_CONSTANT( MOUSE_MODE_VISIBLE );
BIND_CONSTANT( MOUSE_MODE_HIDDEN );
@@ -304,6 +305,11 @@ int InputDefault::get_mouse_button_mask() const {
return OS::get_singleton()->get_mouse_button_state();
}
+void InputDefault::warp_mouse_pos(const Vector2& p_to) {
+
+ OS::get_singleton()->warp_mouse_pos(p_to);
+}
+
void InputDefault::iteration(float p_step) {
diff --git a/core/os/input.h b/core/os/input.h
index b837a1f68f..1cb0f35d96 100644
--- a/core/os/input.h
+++ b/core/os/input.h
@@ -69,6 +69,8 @@ public:
virtual Point2 get_mouse_speed() const=0;
virtual int get_mouse_button_mask() const=0;
+ virtual void warp_mouse_pos(const Vector2& p_to)=0;
+
virtual Vector3 get_accelerometer()=0;
virtual void action_press(const StringName& p_action)=0;
@@ -128,6 +130,9 @@ public:
virtual Point2 get_mouse_speed() const;
virtual int get_mouse_button_mask() const;
+ virtual void warp_mouse_pos(const Vector2& p_to);
+
+
void parse_input_event(const InputEvent& p_event);
void set_accelerometer(const Vector3& p_accel);
void set_joy_axis(int p_device,int p_axis,float p_value);
diff --git a/core/os/os.h b/core/os/os.h
index 24e2b4f2d4..71f53330c7 100644
--- a/core/os/os.h
+++ b/core/os/os.h
@@ -136,6 +136,7 @@ public:
virtual MouseMode get_mouse_mode() const;
+ virtual void warp_mouse_pos(const Point2& p_to) {}
virtual Point2 get_mouse_pos() const=0;
virtual int get_mouse_button_state() const=0;
virtual void set_window_title(const String& p_title)=0;
diff --git a/core/variant.h b/core/variant.h
index 3cfecb9388..f651e38352 100644
--- a/core/variant.h
+++ b/core/variant.h
@@ -387,6 +387,7 @@ public:
static Variant construct(const Variant::Type,const Variant** p_args,int p_argcount,CallError &r_error);
void get_method_list(List<MethodInfo> *p_list) const;
+ bool has_method(const StringName& p_method) const;
void set_named(const StringName& p_index, const Variant& p_value, bool *r_valid=NULL);
Variant get_named(const StringName& p_index, bool *r_valid=NULL) const;
diff --git a/core/variant_call.cpp b/core/variant_call.cpp
index 8fbccc87ae..e0ae7e2114 100644
--- a/core/variant_call.cpp
+++ b/core/variant_call.cpp
@@ -1012,6 +1012,32 @@ Variant Variant::construct(const Variant::Type p_type,const Variant** p_args,int
return Variant();
}
+
+bool Variant::has_method(const StringName& p_method) const {
+
+
+ if (type==OBJECT) {
+ Object *obj = operator Object*();
+ if (!obj)
+ return false;
+#ifdef DEBUG_ENABLED
+ if (ScriptDebugger::get_singleton()) {
+ if (ObjectDB::instance_validate(obj)) {
+#endif
+ return obj->has_method(p_method);
+#ifdef DEBUG_ENABLED
+
+ }
+ }
+#endif
+ }
+
+
+ const _VariantCall::TypeFunc &fd = _VariantCall::type_funcs[type];
+ return fd.functions.has(p_method);
+
+}
+
void Variant::get_method_list(List<MethodInfo> *p_list) const {
diff --git a/modules/gdscript/gd_script.cpp b/modules/gdscript/gd_script.cpp
index 92962fa3f7..10053d4260 100644
--- a/modules/gdscript/gd_script.cpp
+++ b/modules/gdscript/gd_script.cpp
@@ -510,7 +510,11 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a
*dst = src->get_named(*index,&valid);
if (!valid) {
- err_text="Invalid get index '"+index->operator String()+"' (on base: '"+_get_var_type(src)+"').";
+ if (src->has_method(*index)) {
+ err_text="Invalid get index '"+index->operator String()+"' (on base: '"+_get_var_type(src)+"'). Did you mean '."+index->operator String()+"()' ?";
+ } else {
+ err_text="Invalid get index '"+index->operator String()+"' (on base: '"+_get_var_type(src)+"').";
+ }
break;
}
diff --git a/modules/gdscript/gd_tokenizer.cpp b/modules/gdscript/gd_tokenizer.cpp
index bd0beb3138..7a1d6814ba 100644
--- a/modules/gdscript/gd_tokenizer.cpp
+++ b/modules/gdscript/gd_tokenizer.cpp
@@ -284,7 +284,8 @@ void GDTokenizerText::_advance() {
while(GETCHAR(0)!='\n') {
code_pos++;
if (GETCHAR(0)==0) { //end of file
- _make_error("Unterminated Comment");
+ //_make_error("Unterminated Comment");
+ _make_token(TK_EOF);
return;
}
}
diff --git a/platform/osx/os_osx.h b/platform/osx/os_osx.h
index 5b203f1560..5df85bca2a 100644
--- a/platform/osx/os_osx.h
+++ b/platform/osx/os_osx.h
@@ -129,6 +129,7 @@ public:
virtual void set_mouse_show(bool p_show);
virtual void set_mouse_grab(bool p_grab);
virtual bool is_mouse_grab_enabled() const;
+ virtual void warp_mouse_pos(const Point2& p_to);
virtual Point2 get_mouse_pos() const;
virtual int get_mouse_button_state() const;
virtual void set_window_title(const String& p_title);
diff --git a/platform/osx/os_osx.mm b/platform/osx/os_osx.mm
index 12f98cebe2..c09dadc066 100644
--- a/platform/osx/os_osx.mm
+++ b/platform/osx/os_osx.mm
@@ -1067,6 +1067,12 @@ bool OS_OSX::is_mouse_grab_enabled() const {
return mouse_grab;
}
+
+void OS_OSX::warp_mouse_pos(const Point2& p_to) {
+
+//not done, must be done
+}
+
Point2 OS_OSX::get_mouse_pos() const {
return Vector2(mouse_x,mouse_y);
diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp
index a12cd67403..78c40c56d9 100644
--- a/platform/windows/os_windows.cpp
+++ b/platform/windows/os_windows.cpp
@@ -1323,11 +1323,25 @@ void OS_Windows::set_mouse_mode(MouseMode p_mode) {
OS_Windows::MouseMode OS_Windows::get_mouse_mode() const{
+
return mouse_mode;
}
+void OS_Windows::warp_mouse_pos(const Point2& p_to) {
+
+ if (p_mode==MOUSE_MODE_CAPTURED) {
+
+ old_x=p_to.x;
+ old_y=p_to.y;
+ } else {
+
+ SetCursorPos(p_to.x, p_to.y);
+ }
+
+}
+
Point2 OS_Windows::get_mouse_pos() const {
return Point2(old_x, old_y);
@@ -1836,7 +1850,7 @@ String OS_Windows::get_data_dir() const {
if (has_environment("APPDATA")) {
bool use_godot = Globals::get_singleton()->get("application/use_shared_user_dir");
- if (use_godot)
+ if (!use_godot)
return (OS::get_singleton()->get_environment("APPDATA")+"/"+an).replace("\\","/");
else
return (OS::get_singleton()->get_environment("APPDATA")+"/Godot/app_userdata/"+an).replace("\\","/");
diff --git a/platform/windows/os_windows.h b/platform/windows/os_windows.h
index 1a41b9d77d..433d29a84d 100644
--- a/platform/windows/os_windows.h
+++ b/platform/windows/os_windows.h
@@ -209,6 +209,7 @@ public:
void set_mouse_mode(MouseMode p_mode);
MouseMode get_mouse_mode() const;
+ virtual void warp_mouse_pos(const Point2& p_to);
virtual Point2 get_mouse_pos() const;
virtual int get_mouse_button_state() const;
virtual void set_window_title(const String& p_title);
diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp
index e0dc594441..4c45fcfaaf 100644
--- a/platform/x11/os_x11.cpp
+++ b/platform/x11/os_x11.cpp
@@ -461,6 +461,19 @@ void OS_X11::set_mouse_mode(MouseMode p_mode) {
}
+void OS_X11::warp_mouse_pos(const Point2& p_to) {
+
+ if (mouse_mode==MOUSE_MODE_CAPTURED) {
+
+ last_mouse_pos=p_to;
+ } else {
+
+ XWarpPointer(x11_display, None, x11_window,
+ 0,0,0,0, (int)p_to.x, (int)p_to.y);
+ }
+
+}
+
OS::MouseMode OS_X11::get_mouse_mode() const {
return mouse_mode;
diff --git a/platform/x11/os_x11.h b/platform/x11/os_x11.h
index fedf41ad0f..2ffca0e042 100644
--- a/platform/x11/os_x11.h
+++ b/platform/x11/os_x11.h
@@ -179,6 +179,7 @@ public:
void set_mouse_mode(MouseMode p_mode);
MouseMode get_mouse_mode() const;
+ virtual void warp_mouse_pos(const Point2& p_to);
virtual Point2 get_mouse_pos() const;
virtual int get_mouse_button_state() const;
virtual void set_window_title(const String& p_title);
diff --git a/servers/visual/shader_language.cpp b/servers/visual/shader_language.cpp
index 169429af81..14d35e89b1 100644
--- a/servers/visual/shader_language.cpp
+++ b/servers/visual/shader_language.cpp
@@ -134,6 +134,8 @@ ShaderLanguage::Token ShaderLanguage::read_token(const CharType* p_text,int p_le
while(GETCHAR(r_chars+1)!='\n' && GETCHAR(r_chars+1)!=0) {
r_chars++;
}
+ r_chars++;
+ //r_line++;
return Token();
@@ -981,17 +983,17 @@ const ShaderLanguage::OperatorDef ShaderLanguage::operator_defs[]={
{OP_NEG,TYPE_VEC4,{TYPE_VEC4,TYPE_VOID}},
{OP_NOT,TYPE_BOOL,{TYPE_BOOL,TYPE_VOID}},
{OP_CMP_EQ,TYPE_BOOL,{TYPE_BOOL,TYPE_BOOL}},
- {OP_CMP_EQ,TYPE_FLOAT,{TYPE_FLOAT,TYPE_FLOAT}},
- {OP_CMP_EQ,TYPE_VEC2,{TYPE_VEC3,TYPE_VEC2}},
- {OP_CMP_EQ,TYPE_VEC3,{TYPE_VEC3,TYPE_VEC3}},
- {OP_CMP_EQ,TYPE_VEC4,{TYPE_VEC3,TYPE_VEC4}},
+ {OP_CMP_EQ,TYPE_BOOL,{TYPE_FLOAT,TYPE_FLOAT}},
+ {OP_CMP_EQ,TYPE_BOOL,{TYPE_VEC3,TYPE_VEC2}},
+ {OP_CMP_EQ,TYPE_BOOL,{TYPE_VEC3,TYPE_VEC3}},
+ {OP_CMP_EQ,TYPE_BOOL,{TYPE_VEC3,TYPE_VEC4}},
//{OP_CMP_EQ,TYPE_MAT3,{TYPE_MAT4,TYPE_MAT3}}, ??
//{OP_CMP_EQ,TYPE_MAT4,{TYPE_MAT4,TYPE_MAT4}}, ??
{OP_CMP_NEQ,TYPE_BOOL,{TYPE_BOOL,TYPE_BOOL}},
- {OP_CMP_NEQ,TYPE_FLOAT,{TYPE_FLOAT,TYPE_FLOAT}},
- {OP_CMP_NEQ,TYPE_VEC3,{TYPE_VEC2,TYPE_VEC2}},
- {OP_CMP_NEQ,TYPE_VEC3,{TYPE_VEC3,TYPE_VEC3}},
- {OP_CMP_NEQ,TYPE_VEC3,{TYPE_VEC4,TYPE_VEC4}},
+ {OP_CMP_NEQ,TYPE_BOOL,{TYPE_FLOAT,TYPE_FLOAT}},
+ {OP_CMP_NEQ,TYPE_BOOL,{TYPE_VEC2,TYPE_VEC2}},
+ {OP_CMP_NEQ,TYPE_BOOL,{TYPE_VEC3,TYPE_VEC3}},
+ {OP_CMP_NEQ,TYPE_BOOL,{TYPE_VEC4,TYPE_VEC4}},
//{OP_CMP_NEQ,TYPE_MAT4,{TYPE_MAT4,TYPE_MAT4}}, //?
{OP_CMP_LEQ,TYPE_BOOL,{TYPE_FLOAT,TYPE_FLOAT}},
{OP_CMP_GEQ,TYPE_BOOL,{TYPE_FLOAT,TYPE_FLOAT}},