summaryrefslogtreecommitdiff
path: root/stage/stage.gd
diff options
context:
space:
mode:
Diffstat (limited to 'stage/stage.gd')
-rw-r--r--stage/stage.gd116
1 files changed, 90 insertions, 26 deletions
diff --git a/stage/stage.gd b/stage/stage.gd
index b2d4736..9b1689f 100644
--- a/stage/stage.gd
+++ b/stage/stage.gd
@@ -3,11 +3,11 @@ extends Node2D
var grid := AStarGrid2D.new()
+var teams: Dictionary[String, Team] = {}
@onready var grid_selector: GridSelector = %GridSelector
-# Called when the node enters the scene tree for the first time.
func _ready() -> void:
grid.region = $Ground.get_used_rect()
grid.cell_size = $Floor.tile_set.tile_size
@@ -21,59 +21,123 @@ func _ready() -> void:
# pre-set floor tiles as walkable
for tile in $Floor.get_used_cells():
grid.set_point_solid(tile, false)
-
-
-# Called every frame. 'delta' is the elapsed time since the previous frame.
-func _process(_delta: float) -> void:
- pass
+
+ grid_selector.move_mode_max_range = Network.current_player.current_move_points
+
+ # teams
+ var team_one := Team.new()
+ team_one.placement_tile_source_id = 1
+ team_one.placement_tile_atlas_coordinates = Vector2(1, 6)
+ team_one.placement_tile_alternative_tile = 0
+ var team_two := Team.new()
+ team_two.placement_tile_source_id = 1
+ team_two.placement_tile_atlas_coordinates = Vector2(3, 6)
+ team_two.placement_tile_alternative_tile = 0
+ teams["1"] = team_one
+ teams["2"] = team_two
+
+ if multiplayer.is_server():
+ Network.local_player.set_current_team_name("1")
+ else:
+ Network.local_player.set_current_team_name("2")
+
+ grid_selector.current_team = Network.local_player.current_team_name
+
+ # remote selector
+ Network.current_player_changed.connect(func():
+ if Network.is_my_turn():
+ %RemoteSelector.visible = false
+ _on_grid_selector_moved($Ground.local_to_map(%GridSelector.global_position))
+ else:
+ await get_tree().process_frame
+ %RemoteSelector.modulate = Network.current_player.get_color()
+ %RemoteSelector.visible = true
+ )
+ %RemoteSelector.modulate = Network.current_player.get_color()
+ if Network.is_my_turn():
+ %RemoteSelector.visible = false
func _input(event: InputEvent) -> void:
- if event.is_action_pressed("menu"):
+ if event.is_action_pressed("menu") and Network.is_my_turn():
$HUDMain.visible = true
grid_selector.process_mode = Node.PROCESS_MODE_DISABLED
$HUDMain/PanelContainer/VBoxContainer/Button.grab_focus()
-
- if event.is_action_pressed("test_4"):
- var teams := ["1", "2"]
- var tiles := [Vector2i(1,6), Vector2i(3,6)]
- grid_selector.placement_tile_atlas_coordinates = tiles[(tiles.find(grid_selector.placement_tile_atlas_coordinates) + 1) % tiles.size()]
- grid_selector.current_team = teams[(teams.find(grid_selector.current_team) + 1) % teams.size()]
-func _on_grid_selector_placed_tiles(grid_positions: Array) -> void:
+@rpc("any_peer", "call_local")
+func place_tiles(grid_positions: Array, team: String) -> void:
+ for p in grid_positions:
+ $Floor.set_cell(
+ p,
+ teams[team].placement_tile_source_id,
+ teams[team].placement_tile_atlas_coordinates,
+ teams[team].placement_tile_alternative_tile
+ )
+
for p in grid_positions:
grid.set_point_solid(p, false)
+ grid_selector.current_state.draw($Ground.local_to_map(grid_selector.base_position))
+ grid_selector.adjust_height(%RemoteSelector)
+
+
+@rpc("any_peer", "call_local")
+func place_unit(unit_position: Vector2, team: String) -> void:
var unit = preload("res://unit/unit.tscn").instantiate()
- unit.global_position = %GridSelector.global_position + $Floor.position
- unit.current_team = grid_selector.current_team
- add_child(unit)
+ unit.global_position = unit_position + $Floor.position
+ unit.current_team = team
+ unit.modulate = Network.current_player.get_color()
+ add_child(unit, true)
# block unit tile for movement
- grid.set_point_solid($Ground.local_to_map(%GridSelector.global_position), true)
+ grid.set_point_solid($Ground.local_to_map(unit_position), true)
+
+
+@rpc("any_peer", "call_remote")
+func move_unit(unit_node_path: String, path: Array) -> void:
+ var unit: Node2D = get_node(unit_node_path)
+ var tween = get_tree().create_tween()
+ for p in path.slice(1): # remove starting position
+ tween.tween_property(unit, "global_position", p + $Floor.position, 0.1)
+ await tween.finished
+
+ # clear previous tile and set new tile solid
+ grid.set_point_solid($Ground.local_to_map(path[0]), false)
+ grid.set_point_solid($Ground.local_to_map(path[path.size() - 1]), true)
+
+
+func _on_grid_selector_placed_tiles(grid_positions: Array) -> void:
+ place_tiles.rpc(grid_positions, Network.current_player.current_team_name)
+ place_unit.rpc(%GridSelector.global_position, Network.current_player.current_team_name)
grid_selector.current_state = grid_selector.state_select
func _on_grid_selector_move_mode_confirmed(path: Array) -> void:
grid_selector.process_mode = Node.PROCESS_MODE_DISABLED
- var unit: Node2D = grid_selector.current_entity
- var tween = get_tree().create_tween()
- for p in path.slice(1): # remove starting position
- tween.tween_property(unit, "global_position", p + $Floor.position, 0.1)
+ move_unit.rpc(grid_selector.current_entity.get_path(), path)
+ await move_unit(grid_selector.current_entity.get_path(), path)
- await tween.finished
grid_selector.process_mode = Node.PROCESS_MODE_INHERIT
grid_selector.current_state = grid_selector.get_node("StateSelect")
grid_selector.current_state.draw($Ground.local_to_map(path[path.size() - 1]))
- # clear previous tile and set new tile solid
- grid.set_point_solid($Ground.local_to_map(path[0]), false)
- grid.set_point_solid($Ground.local_to_map(path[path.size() - 1]), true)
+ Network.current_player.set_current_move_points(Network.current_player.current_move_points - (path.size() - 1))
+ grid_selector.move_mode_max_range = Network.current_player.current_move_points
func _on_grid_selector_range_select_confirmed(grid_position: Vector2i, entity: Node2D) -> void:
entity.queue_free()
grid.set_point_solid(grid_position, false)
+
+
+func _on_grid_selector_moved(grid_position: Vector2i) -> void:
+ if Network.is_my_turn():
+ move_remote_selector.rpc(grid_position)
+
+@rpc("any_peer", "call_remote")
+func move_remote_selector(grid_position: Vector2i) -> void:
+ %RemoteSelector.global_position = $Ground.map_to_local(grid_position)
+ grid_selector.adjust_height(%RemoteSelector)