diff options
Diffstat (limited to 'core')
| -rw-r--r-- | core/io/compression.cpp | 19 | ||||
| -rw-r--r-- | core/io/compression.h | 2 | ||||
| -rw-r--r-- | core/io/packet_peer_udp.cpp | 7 | ||||
| -rw-r--r-- | core/io/packet_peer_udp.h | 4 | ||||
| -rw-r--r-- | core/message_queue.cpp | 10 | ||||
| -rw-r--r-- | core/os/input_event.h | 6 |
6 files changed, 34 insertions, 14 deletions
diff --git a/core/io/compression.cpp b/core/io/compression.cpp index e04d1d162..652f60966 100644 --- a/core/io/compression.cpp +++ b/core/io/compression.cpp @@ -104,19 +104,21 @@ int Compression::get_max_compressed_buffer_size(int p_src_size, Mode p_mode) { ERR_FAIL_V(-1); } -void Compression::decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *p_src, int p_src_size, Mode p_mode) { +int Compression::decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *p_src, int p_src_size, Mode p_mode) { switch (p_mode) { case MODE_FASTLZ: { + int ret_size=0; + if (p_dst_max_size < 16) { uint8_t dst[16]; - fastlz_decompress(p_src, p_src_size, dst, 16); + ret_size = fastlz_decompress(p_src, p_src_size, dst, 16); copymem(p_dst, dst, p_dst_max_size); } else { - fastlz_decompress(p_src, p_src_size, p_dst, p_dst_max_size); + ret_size = fastlz_decompress(p_src, p_src_size, p_dst, p_dst_max_size); } - return; + return ret_size; } break; case MODE_DEFLATE: { @@ -127,7 +129,7 @@ void Compression::decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t * strm.avail_in = 0; strm.next_in = Z_NULL; int err = inflateInit(&strm); - ERR_FAIL_COND(err != Z_OK); + ERR_FAIL_COND_V(err != Z_OK, -1); strm.avail_in = p_src_size; strm.avail_out = p_dst_max_size; @@ -135,11 +137,12 @@ void Compression::decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t * strm.next_out = p_dst; err = inflate(&strm, Z_FINISH); + int total = strm.total_out; inflateEnd(&strm); - ERR_FAIL_COND(err != Z_STREAM_END); - return; + ERR_FAIL_COND_V(err != Z_STREAM_END, -1); + return total; } break; } - ERR_FAIL(); + ERR_FAIL_V(-1); } diff --git a/core/io/compression.h b/core/io/compression.h index b5f0db9e9..a982a074b 100644 --- a/core/io/compression.h +++ b/core/io/compression.h @@ -41,7 +41,7 @@ public: static int compress(uint8_t *p_dst, const uint8_t *p_src, int p_src_size, Mode p_mode = MODE_FASTLZ); static int get_max_compressed_buffer_size(int p_src_size, Mode p_mode = MODE_FASTLZ); - static void decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *p_src, int p_src_size, Mode p_mode = MODE_FASTLZ); + static int decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *p_src, int p_src_size, Mode p_mode = MODE_FASTLZ); Compression(); }; diff --git a/core/io/packet_peer_udp.cpp b/core/io/packet_peer_udp.cpp index 0ef6722f9..a1b7e6b5e 100644 --- a/core/io/packet_peer_udp.cpp +++ b/core/io/packet_peer_udp.cpp @@ -32,6 +32,11 @@ PacketPeerUDP *(*PacketPeerUDP::_create)() = NULL; +void PacketPeerUDP::set_blocking_mode(bool p_enable) { + + blocking = p_enable; +} + String PacketPeerUDP::_get_packet_ip() const { return get_packet_address(); @@ -79,4 +84,6 @@ PacketPeerUDP *PacketPeerUDP::create() { } PacketPeerUDP::PacketPeerUDP() { + + blocking = true; } diff --git a/core/io/packet_peer_udp.h b/core/io/packet_peer_udp.h index 5a8edab01..9b2901e4d 100644 --- a/core/io/packet_peer_udp.h +++ b/core/io/packet_peer_udp.h @@ -37,6 +37,8 @@ class PacketPeerUDP : public PacketPeer { OBJ_TYPE(PacketPeerUDP, PacketPeer); protected: + bool blocking; + static PacketPeerUDP *(*_create)(); static void _bind_methods(); @@ -45,6 +47,8 @@ protected: Error _set_send_address(const String &p_address, int p_port); public: + void set_blocking_mode(bool p_enable); + virtual Error listen(int p_port, IP_Address p_bind_address = IP_Address("*"), int p_recv_buffer_size = 65536) = 0; virtual void close() = 0; virtual Error wait() = 0; diff --git a/core/message_queue.cpp b/core/message_queue.cpp index 171f9fbfc..821414be0 100644 --- a/core/message_queue.cpp +++ b/core/message_queue.cpp @@ -49,9 +49,10 @@ Error MessageQueue::push_call(ObjectID p_id, const StringName &p_method, const V type = ObjectDB::get_instance(p_id)->get_type(); print_line("failed method: " + type + ":" + p_method + " target ID: " + itos(p_id)); statistics(); + ERR_EXPLAIN("Message queue out of memory. Try increasing 'message_queue_size_kb' in project settings"); + ERR_FAIL_V(ERR_OUT_OF_MEMORY); } - ERR_FAIL_COND_V((buffer_end + room_needed) >= buffer_size, ERR_OUT_OF_MEMORY); Message *msg = memnew_placement(&buffer[buffer_end], Message); msg->args = p_argcount; msg->instance_ID = p_id; @@ -99,10 +100,10 @@ Error MessageQueue::push_set(ObjectID p_id, const StringName &p_prop, const Vari type = ObjectDB::get_instance(p_id)->get_type(); print_line("failed set: " + type + ":" + p_prop + " target ID: " + itos(p_id)); statistics(); + ERR_EXPLAIN("Message queue out of memory. Try increasing 'message_queue_size_kb' in project settings"); + ERR_FAIL_V(ERR_OUT_OF_MEMORY); } - ERR_FAIL_COND_V((buffer_end + room_needed) >= buffer_size, ERR_OUT_OF_MEMORY); - Message *msg = memnew_placement(&buffer[buffer_end], Message); msg->args = 1; msg->instance_ID = p_id; @@ -132,9 +133,10 @@ Error MessageQueue::push_notification(ObjectID p_id, int p_notification) { type = ObjectDB::get_instance(p_id)->get_type(); print_line("failed notification: " + itos(p_notification) + " target ID: " + itos(p_id)); statistics(); + ERR_EXPLAIN("Message queue out of memory. Try increasing 'message_queue_size_kb' in project settings"); + ERR_FAIL_V(ERR_OUT_OF_MEMORY); } - ERR_FAIL_COND_V((buffer_end + room_needed) >= buffer_size, ERR_OUT_OF_MEMORY); Message *msg = memnew_placement(&buffer[buffer_end], Message); msg->type = TYPE_NOTIFICATION; diff --git a/core/os/input_event.h b/core/os/input_event.h index 5b89d0d69..8d8623f41 100644 --- a/core/os/input_event.h +++ b/core/os/input_event.h @@ -203,6 +203,7 @@ struct InputEventMouse { struct InputEventMouseButton : public InputEventMouse { + double factor; int button_index; bool pressed; //otherwise released bool doubleclick; //last even less than doubleclick time @@ -287,7 +288,10 @@ struct InputEvent { InputEvent xform_by(const Matrix32 &p_xform) const; bool operator==(const InputEvent &p_event) const; operator String() const; - InputEvent() { zeromem(this, sizeof(InputEvent)); } + InputEvent() { + zeromem(this, sizeof(InputEvent)); + mouse_button.factor = 1; + } }; #endif |
