Browse Source

UDP Fixes
-=-=-=-=-

Curse the day I decided to port UDP code, as it ended up
being two nights of work. At least It's done now (I hope).

-Fixed UDP Support, API seems stable
-Added UDP Chat demo (chat that can lose your packets, heh)
-Added helpers to areas and bodies to get list of collided bodies and contained bodies.
-Sped up screen/viewport capture code.
-Added code to save an image as PNG
-Small fix so scripts register their singletons after modules did.

Juan Linietsky 10 years ago
parent
commit
cd7bdd93db
4 changed files with 77 additions and 0 deletions
  1. 72 0
      misc/udp_chat/chat.gd
  2. BIN
      misc/udp_chat/chat.scn
  3. 5 0
      misc/udp_chat/engine.cfg
  4. BIN
      misc/udp_chat/icon.png

+ 72 - 0
misc/udp_chat/chat.gd

@@ -0,0 +1,72 @@
+
+extends Panel
+
+# Really simple UDP chat client, not intended as a chat example!!
+# (UDP can lose packets and you won't normally find out, so don't do a chat this way)
+# This is just a demo that shows how to use the UDP class.
+
+var udp = PacketPeerUDP.new()
+
+func _process(delta):
+
+	if (not udp.is_listening()):
+		return
+		
+	while(udp.get_available_packet_count()>0):
+		var packet = udp.get_var()
+		if (typeof(packet)==TYPE_STRING):
+				var host = udp.get_packet_ip()
+				var port = udp.get_packet_port()
+				get_node("chat/text").add_text("("+host+":"+str(port)+":) "+packet)
+				get_node("chat/text").newline()
+					
+			
+
+func _ready():
+	# Initalization here
+	get_node("chat").add_style_override("panel",get_stylebox("bg","Tree"))	
+	set_process(true)
+
+
+
+func send_message(text):
+	if (udp.is_listening()):
+		udp.put_var(text)
+	
+
+func _on_connect_toggled( pressed ):
+
+
+	if (pressed):
+		var err = udp.listen( get_node("listen_port").get_val() )
+		if (err!=OK):
+			get_node("status").set_text("Error:\nCan't Listen.")
+			get_node("connect").set_pressed(false)
+		else:
+			get_node("status").set_text("Connected.")
+			get_node("connect").set_text("Disconnect")
+			err = udp.set_send_address(get_node("remote_host").get_text(),get_node("remote_port").get_val())
+			if (err!=OK):
+				get_node("status").set_text("Error:\nCan't Resolve.")
+				get_node("connect").set_pressed(false)
+			else:
+				send_message("* "+get_node("user_name").get_text()+" entered chat.")			
+	else:
+	
+		udp.close()
+		get_node("status").set_text("Disconnected.")
+		get_node("connect").set_text("Connect")
+	
+
+
+
+func _on_entry_line_text_entered( text ):
+	_on_entry_button_pressed();
+
+func _on_entry_button_pressed():
+	var msg = get_node("entry_line").get_text()
+	if (msg==""):
+		return
+	send_message(get_node("user_name").get_text()+"> "+msg)
+	
+	get_node("entry_line").set_text("")

BIN
misc/udp_chat/chat.scn


+ 5 - 0
misc/udp_chat/engine.cfg

@@ -0,0 +1,5 @@
+[application]
+
+name="UDP Chat"
+main_scene="res://chat.scn"
+icon="res://icon.png"

BIN
misc/udp_chat/icon.png