1-6 player splitscreen multiplayer addon
5-6 player implemented
bendn 2023-02-01
parent 72f4cd9 · commit 9a254ac
-rw-r--r--addons/splitter/package.json2
-rw-r--r--addons/splitter/screen.gd6
-rw-r--r--addons/splitter/viewport.gd17
-rw-r--r--test.gd9
4 files changed, 24 insertions, 10 deletions
diff --git a/addons/splitter/package.json b/addons/splitter/package.json
index 5b1a652..ab4ac29 100644
--- a/addons/splitter/package.json
+++ b/addons/splitter/package.json
@@ -1,6 +1,6 @@
{
"name": "@bendn/splitter",
- "version": "1.0.4",
+ "version": "1.0.5",
"description": "small addon for splitscreen multiplayer",
"main": "screen.gd",
"scripts": {
diff --git a/addons/splitter/screen.gd b/addons/splitter/screen.gd
index ed6a02a..4673b1d 100644
--- a/addons/splitter/screen.gd
+++ b/addons/splitter/screen.gd
@@ -21,7 +21,7 @@ func resize_players():
p.resize_port(get_window().size)
func join() -> PlayerViewport:
- if len(players) > 3:
+ if len(players) > 5:
push_error("no slots")
return
var player := PlayerViewport.new(len(players) + 1)
@@ -31,8 +31,8 @@ func join() -> PlayerViewport:
set_process(true)
return player
-func leave(id: int) -> void:
- var p := players.pop_at(4 - id)
+func leave() -> void:
+ var p := players.pop_at(-1)
if p == null:
push_error("no player")
return
diff --git a/addons/splitter/viewport.gd b/addons/splitter/viewport.gd
index adad49e..12db31f 100644
--- a/addons/splitter/viewport.gd
+++ b/addons/splitter/viewport.gd
@@ -24,17 +24,30 @@ func resize_port(area: Vector2) -> void:
2: _size(Vector2(area.x, area.y / 2)) # split vertically instead of horizontally
3: _size(Vector2(area.x, area.y / 2) if id == 3 else area / 2)
4: _size(area / 2)
+ 5: _size(area / 2 if id == 5 or id == 4 else Vector2(area.x / 3, area.y / 2))
+ 6: _size(Vector2(area.x / 3, area.y / 2))
if id == 1:
global_position = Vector2.ZERO
else:
match player_count:
+ 2, 4: match id:
+ 2: global_position = Vector2(0, size.y)
+ 3: global_position = Vector2(area.x / 2, 0)
+ 4: global_position = size
3: match id:
2: global_position = Vector2(area.x / 2, 0)
3: global_position = Vector2(0, size.y)
- _: match id:
+ 5: match id:
+ 2: global_position = Vector2(size.x, 0)
+ 3: global_position = Vector2(size.x * 2, 0)
+ 4: global_position = Vector2(0, size.y)
+ 5: global_position = size
+ 6: match id:
2: global_position = Vector2(0, size.y)
- 3: global_position = Vector2(area.x / 2, 0)
+ 3: global_position = Vector2(size.x, 0)
4: global_position = size
+ 5: global_position = Vector2(size.x * 2, 0)
+ 6: global_position = Vector2(size.x * 2, size.y)
func kill() -> void:
diff --git a/test.gd b/test.gd
index 744dab8..a88a593 100644
--- a/test.gd
+++ b/test.gd
@@ -2,13 +2,14 @@ extends Splitscreen
func _ready() -> void:
super()
- for i in 4:
- await get_tree().create_timer(1).timeout
+ for i in 6:
var cam := Camera3D.new()
var p := join()
p.viewport.add_child(cam)
var l := Label.new(); l.position += Vector2.ONE * 10; l.add_theme_font_size_override("font_size", 80); l.text = str(p.id)
p.add_child(l)
- for i in 4:
+ await get_tree().create_timer(1).timeout
+ for i in 6:
await get_tree().create_timer(2).timeout
- leave(i + 1)
+ leave()
+ get_tree().quit()