Client/scripts/match/map.gd

66 lines
1.9 KiB
GDScript3
Raw Normal View History

2025-03-10 13:25:09 +01:00
extends Node2D
@export var tile_set: TileSet
@export var player_map: Node2D
@export var player_tower_map: TileMapLayer
@export var opponent_map: Node2D
@export var opponent_tower_map: TileMapLayer
@export var map_size := Vector2i(10, 20)
@export var camera: Camera2D
var clicked: bool = false
var clicked_pos: Vector2
func _ready() -> void:
player_tower_map.tile_set = tile_set
opponent_tower_map.tile_set = tile_set
player_tower_map.clear()
opponent_tower_map.clear()
MatchChannel.connect("on_match_update", on_match_update)
func _process(_delta: float) -> void:
# gdlint:ignore = max-line-length
var new_zoom := float(get_window().size.y) / float(map_size.y * tile_set.tile_size.y)
camera.zoom = Vector2(new_zoom, new_zoom)
var new_base_postion := get_window().size / 2 / new_zoom
camera.position = new_base_postion
self.position.x = new_base_postion.x - map_size.x * tile_set.tile_size.x
opponent_map.position.x = map_size.x * tile_set.tile_size.x
func _input(_event) -> void:
if Input.is_action_just_pressed("place"):
clicked_pos = get_global_mouse_position()
clicked = true
func _physics_process(_delta: float) -> void:
if clicked:
clicked = false
var pos: Vector2i = world_to_game_pos(clicked_pos)
if pos == Vector2i(-1, -1):
return
MatchChannel.send_request_place(pos.x, pos.y)
func on_match_update(msg: TowerPlacedMessage) -> void:
if msg.map == TowerPlacedMessage.GamePlayerMaps.PLAYER:
player_tower_map.set_cell(Vector2i(msg.x, msg.y), 1, Vector2i(0, 0))
else:
opponent_tower_map.set_cell(Vector2i(msg.x, msg.y), 1, Vector2i(0, 0))
func world_to_game_pos(world_pos: Vector2) -> Vector2i:
if (
world_pos.x < self.position.x
|| world_pos.x > self.position.x + map_size.x * tile_set.tile_size.x
):
return Vector2i(-1, -1)
return Vector2i(
(world_pos.x - self.position.x) / tile_set.tile_size.x,
world_pos.y / tile_set.tile_size.y,
)