1-6 player splitscreen multiplayer addon
5-6 player implemented
| -rw-r--r-- | addons/splitter/package.json | 2 | ||||
| -rw-r--r-- | addons/splitter/screen.gd | 6 | ||||
| -rw-r--r-- | addons/splitter/viewport.gd | 17 | ||||
| -rw-r--r-- | test.gd | 9 |
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: @@ -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() |