]> Untitled Git - lightcycles.git/blob - map/world.gd
Godot 4.4 update
[lightcycles.git] / map / world.gd
1 extends Node3D
2
3
4 @onready var _screen: SplitScreenContainer = $SplitScreenContainer
5 @onready var _topdown_camera: Camera3D = $topdown_camera
6
7 var _player_wall_tscn = preload("res://player/player_wall.tscn")
8 var _player_wall_map = {}
9 var _player_color_map = {}
10
11 var _input_map = [
12         {
13                 "left": "player1_left",
14                 "right": "player1_right",
15                 "restart": "player1_restart"
16         },
17         {
18                 "left": "player2_left",
19                 "right": "player2_right",
20                 "restart": "player2_restart"
21         }
22 ]
23
24 func _ready() -> void:
25         var players: Array[Player] = [$Player1, $Player2]
26         
27         _screen.set_splitscreen(players)
28         _screen.set_map(_topdown_camera)
29         
30         for player in players:
31                 player.set_input_map(_input_map.pop_front())
32                 _player_color_map[player] = player.color
33                 _player_add_wall(player)
34
35
36 func _input(event: InputEvent) -> void:
37         if event.is_action_pressed("ui_cancel"):
38                 get_tree().quit()
39
40
41 func _process(_delta: float) -> void:
42         for player: Player in _player_wall_map.keys():
43                 var wall: PlayerWall = _player_wall_map[player]
44                 wall.scale = Vector3(1, 1, (player.global_position - wall.global_position).length())
45
46
47 func _player_add_wall(player: Player) -> void:
48         var wall: PlayerWall = _player_wall_tscn.instantiate()
49         
50         # start new wall from origin position
51         add_child(wall)
52         wall.set_color(_player_color_map[player])
53         wall.global_position = player.global_position
54         wall.global_rotation = player.global_rotation
55         
56         _player_wall_map[player] = wall
57
58
59 func _on_player_destroyed(player: Player) -> void:
60         print("Player \"" + player.name + "\" destroyed")
61
62
63 func _on_player_player_restart(player: Player) -> void:
64         print("Player \"" + player.name + "\" wants to restart")
65         get_tree().reload_current_scene()