diff options
author | Daniel Weipert <git@mail.dweipert.de> | 2025-02-08 23:44:34 +0100 |
---|---|---|
committer | Daniel Weipert <git@mail.dweipert.de> | 2025-02-08 23:44:34 +0100 |
commit | f6c81b065cf4d7f1302a50f2f72cfab32204a1ec (patch) | |
tree | 7690bae73a7bf54ed973a8c8480ba104d8ab413f /stage/stage.gd | |
parent | d24180c58e9e1d6149f0ac41d4f4bbaf674bdbd3 (diff) |
next commit
Diffstat (limited to 'stage/stage.gd')
-rw-r--r-- | stage/stage.gd | 116 |
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) |