mirror of
https://github.com/godotengine/godot-demo-projects.git
synced 2026-01-07 16:30:06 +01:00
This makes demos render correctly on hiDPI displays, while also demonstrating how to handle multiple resolutions. The 3D in 2D demo now uses "3D No-Effects" for the 3D viewport, which is faster to render. Thanks to this, 4× MSAA is now enabled for a better result. The background loading demo now uses mipmaps for better-looking images. The material testers demo now samples mouse input in a resolution-independent manner when panning. Default clear colors were also changed in some projects for visual consistency with the project's theme.
103 lines
3.0 KiB
GDScript
103 lines
3.0 KiB
GDScript
extends Control
|
|
|
|
const DEFAULT_PORT = 8910 # some random number, pick your port properly
|
|
|
|
#### Network callbacks from SceneTree ####
|
|
|
|
# callback from SceneTree
|
|
func _player_connected(_id):
|
|
#someone connected, start the game!
|
|
var pong = load("res://pong.tscn").instance()
|
|
pong.connect("game_finished", self, "_end_game", [], CONNECT_DEFERRED) # connect deferred so we can safely erase it from the callback
|
|
|
|
get_tree().get_root().add_child(pong)
|
|
hide()
|
|
|
|
func _player_disconnected(_id):
|
|
|
|
if get_tree().is_network_server():
|
|
_end_game("Client disconnected")
|
|
else:
|
|
_end_game("Server disconnected")
|
|
|
|
# callback from SceneTree, only for clients (not server)
|
|
func _connected_ok():
|
|
# will not use this one
|
|
pass
|
|
|
|
# callback from SceneTree, only for clients (not server)
|
|
func _connected_fail():
|
|
|
|
_set_status("Couldn't connect",false)
|
|
|
|
get_tree().set_network_peer(null) #remove peer
|
|
|
|
get_node("panel/join").set_disabled(false)
|
|
get_node("panel/host").set_disabled(false)
|
|
|
|
func _server_disconnected():
|
|
_end_game("Server disconnected")
|
|
|
|
##### Game creation functions ######
|
|
|
|
func _end_game(with_error=""):
|
|
if has_node("/root/pong"):
|
|
#erase pong scene
|
|
get_node("/root/pong").free() # erase immediately, otherwise network might show errors (this is why we connected deferred above)
|
|
show()
|
|
|
|
get_tree().set_network_peer(null) #remove peer
|
|
|
|
get_node("panel/join").set_disabled(false)
|
|
get_node("panel/host").set_disabled(false)
|
|
|
|
_set_status(with_error, false)
|
|
|
|
func _set_status(text, isok):
|
|
#simple way to show status
|
|
if isok:
|
|
get_node("panel/status_ok").set_text(text)
|
|
get_node("panel/status_fail").set_text("")
|
|
else:
|
|
get_node("panel/status_ok").set_text("")
|
|
get_node("panel/status_fail").set_text(text)
|
|
|
|
func _on_host_pressed():
|
|
var host = NetworkedMultiplayerENet.new()
|
|
host.set_compression_mode(NetworkedMultiplayerENet.COMPRESS_RANGE_CODER)
|
|
var err = host.create_server(DEFAULT_PORT, 1) # max: 1 peer, since it's a 2 players game
|
|
if err != OK:
|
|
#is another server running?
|
|
_set_status("Can't host, address in use.",false)
|
|
return
|
|
|
|
get_tree().set_network_peer(host)
|
|
get_node("panel/join").set_disabled(true)
|
|
get_node("panel/host").set_disabled(true)
|
|
_set_status("Waiting for player..", true)
|
|
|
|
func _on_join_pressed():
|
|
var ip = get_node("panel/address").get_text()
|
|
if not ip.is_valid_ip_address():
|
|
_set_status("IP address is invalid", false)
|
|
return
|
|
|
|
var host = NetworkedMultiplayerENet.new()
|
|
host.set_compression_mode(NetworkedMultiplayerENet.COMPRESS_RANGE_CODER)
|
|
host.create_client(ip, DEFAULT_PORT)
|
|
get_tree().set_network_peer(host)
|
|
|
|
_set_status("Connecting..", true)
|
|
|
|
|
|
### INITIALIZER ####
|
|
|
|
func _ready():
|
|
# connect all the callbacks related to networking
|
|
get_tree().connect("network_peer_connected", self, "_player_connected")
|
|
get_tree().connect("network_peer_disconnected", self, "_player_disconnected")
|
|
get_tree().connect("connected_to_server", self, "_connected_ok")
|
|
get_tree().connect("connection_failed", self, "_connected_fail")
|
|
get_tree().connect("server_disconnected", self, "_server_disconnected")
|
|
|