aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/input_map.cpp6
-rw-r--r--core/input_map.h2
-rw-r--r--core/register_core_types.cpp2
-rw-r--r--core/variant.h1
-rw-r--r--core/variant_op.cpp54
5 files changed, 59 insertions, 6 deletions
diff --git a/core/input_map.cpp b/core/input_map.cpp
index 09cb7ce42..ad1403a64 100644
--- a/core/input_map.cpp
+++ b/core/input_map.cpp
@@ -106,7 +106,7 @@ List<StringName> InputMap::get_actions() const {
return actions;
}
-List<InputEvent>::Element *InputMap::_find_event(List<InputEvent> &p_list,const InputEvent& p_event) const {
+List<InputEvent>::Element *InputMap::_find_event(List<InputEvent> &p_list,const InputEvent& p_event, bool p_mod_ignore=false) const {
for (List<InputEvent>::Element *E=p_list.front();E;E=E->next()) {
@@ -122,7 +122,7 @@ List<InputEvent>::Element *InputMap::_find_event(List<InputEvent> &p_list,const
case InputEvent::KEY: {
- same=(e.key.scancode==p_event.key.scancode && e.key.mod == p_event.key.mod);
+ same=(e.key.scancode==p_event.key.scancode && (p_mod_ignore || e.key.mod == p_event.key.mod));
} break;
case InputEvent::JOYSTICK_BUTTON: {
@@ -229,7 +229,7 @@ bool InputMap::event_is_action(const InputEvent& p_event, const StringName& p_ac
return p_event.action.action==E->get().id;
}
- return _find_event(E->get().inputs,p_event)!=NULL;
+ return _find_event(E->get().inputs,p_event,!p_event.is_pressed())!=NULL;
}
const Map<StringName, InputMap::Action>& InputMap::get_action_map() const {
diff --git a/core/input_map.h b/core/input_map.h
index 21c479588..a974f6f10 100644
--- a/core/input_map.h
+++ b/core/input_map.h
@@ -46,7 +46,7 @@ private:
mutable Map<StringName, Action> input_map;
mutable Map<int,StringName> input_id_map;
- List<InputEvent>::Element *_find_event(List<InputEvent> &p_list,const InputEvent& p_event) const;
+ List<InputEvent>::Element *_find_event(List<InputEvent> &p_list,const InputEvent& p_event, bool p_mod_ignore) const;
Array _get_action_list(const StringName& p_action);
Array _get_actions();
diff --git a/core/register_core_types.cpp b/core/register_core_types.cpp
index 4c9d12178..3d15eb44a 100644
--- a/core/register_core_types.cpp
+++ b/core/register_core_types.cpp
@@ -34,6 +34,7 @@
#include "os/main_loop.h"
#include "io/packet_peer.h"
#include "math/a_star.h"
+#include "math/triangle_mesh.h"
#include "globals.h"
#include "object_type_db.h"
#include "geometry.h"
@@ -134,6 +135,7 @@ void register_core_types() {
ObjectTypeDB::register_type<PHashTranslation>();
ObjectTypeDB::register_type<UndoRedo>();
ObjectTypeDB::register_type<HTTPClient>();
+ ObjectTypeDB::register_type<TriangleMesh>();
ObjectTypeDB::register_virtual_type<ResourceInteractiveLoader>();
diff --git a/core/variant.h b/core/variant.h
index 90be593bd..ccb8c5e3d 100644
--- a/core/variant.h
+++ b/core/variant.h
@@ -336,6 +336,7 @@ public:
OP_MULTIPLY,
OP_DIVIDE,
OP_NEGATE,
+ OP_POSITIVE,
OP_MODULE,
OP_STRING_CONCAT,
//bitwise
diff --git a/core/variant_op.cpp b/core/variant_op.cpp
index fd64b58bd..73ed85db1 100644
--- a/core/variant_op.cpp
+++ b/core/variant_op.cpp
@@ -97,6 +97,12 @@ case m_name: {\
_RETURN( -p_a._data.m_type);\
};
+#define DEFAULT_OP_NUM_POS(m_name,m_type)\
+case m_name: {\
+\
+ _RETURN( p_a._data.m_type);\
+};
+
#define DEFAULT_OP_NUM_VEC(m_op,m_name,m_type)\
case m_name: {\
switch(p_b.type) {\
@@ -136,6 +142,10 @@ case m_name: {\
_RETURN( -*reinterpret_cast<const m_type*>(p_a._data._mem));\
}
+#define DEFAULT_OP_LOCALMEM_POS(m_name,m_type)\
+case m_name: {\
+ _RETURN( *reinterpret_cast<const m_type*>(p_a._data._mem));\
+}
#define DEFAULT_OP_LOCALMEM_NUM(m_op,m_name,m_type)\
case m_name: {switch(p_b.type) {\
@@ -740,6 +750,48 @@ void Variant::evaluate(const Operator& p_op, const Variant& p_a, const Variant&
}
} break;
+ case OP_POSITIVE: {
+ // Simple case when user defines variable as +value.
+ switch(p_a.type) {
+
+ DEFAULT_OP_FAIL(NIL);
+ DEFAULT_OP_FAIL(STRING);
+ DEFAULT_OP_FAIL(RECT2);
+ DEFAULT_OP_FAIL(MATRIX32);
+ DEFAULT_OP_FAIL(_AABB);
+ DEFAULT_OP_FAIL(MATRIX3);
+ DEFAULT_OP_FAIL(TRANSFORM);
+ DEFAULT_OP_NUM_POS(BOOL,_bool);
+ DEFAULT_OP_NUM_POS(INT,_int);
+ DEFAULT_OP_NUM_POS(REAL,_real);
+ DEFAULT_OP_LOCALMEM_POS(VECTOR3,Vector3);
+ DEFAULT_OP_LOCALMEM_POS(PLANE,Plane);
+ DEFAULT_OP_LOCALMEM_POS(QUAT,Quat);
+ DEFAULT_OP_LOCALMEM_POS(VECTOR2,Vector2);
+
+ DEFAULT_OP_FAIL(COLOR);
+ DEFAULT_OP_FAIL(IMAGE);
+ DEFAULT_OP_FAIL(NODE_PATH);
+ DEFAULT_OP_FAIL(_RID);
+ DEFAULT_OP_FAIL(OBJECT);
+ DEFAULT_OP_FAIL(INPUT_EVENT);
+ DEFAULT_OP_FAIL(DICTIONARY);
+ DEFAULT_OP_FAIL(ARRAY);
+ DEFAULT_OP_FAIL(RAW_ARRAY);
+ DEFAULT_OP_FAIL(INT_ARRAY);
+ DEFAULT_OP_FAIL(REAL_ARRAY);
+ DEFAULT_OP_FAIL(STRING_ARRAY);
+ DEFAULT_OP_FAIL(VECTOR2_ARRAY);
+ DEFAULT_OP_FAIL(VECTOR3_ARRAY);
+ DEFAULT_OP_FAIL(COLOR_ARRAY);
+ case VARIANT_MAX: {
+ r_valid=false;
+ return;
+
+ } break;
+
+ }
+ } break;
case OP_NEGATE: {
switch(p_a.type) {
@@ -778,9 +830,7 @@ void Variant::evaluate(const Operator& p_op, const Variant& p_a, const Variant&
return;
} break;
-
}
-
} break;
case OP_MODULE: {
if (p_a.type==INT && p_b.type==INT) {