diff options
Diffstat (limited to 'client/game.gd')
| -rw-r--r-- | client/game.gd | 53 | 
1 files changed, 20 insertions, 33 deletions
| diff --git a/client/game.gd b/client/game.gd index 76ea21f0..b36b40a0 100644 --- a/client/game.gd +++ b/client/game.gd @@ -19,17 +19,19 @@ extends Node3D  @onready var camera: FollowCamera = $FollowCamera  @onready var mp: Multiplayer = $Multiplayer +@onready var map: Map = $Map  @onready var marker: Marker = $Marker +  var marker_target = Vector3(0,0,0)  var player_id: int = -1  var item_names: Array = []  var tile_names: Array = [] +var tile_id_by_name: Dictionary = {}  var tile_collide: Array = []  var tile_interact: Array = []  var item_idx_from_name: Dictionary = {} -var tile_by_pos: Dictionary = {}  var players := {} @@ -56,6 +58,9 @@ func _ready():  			tile_names = tile_names_  			tile_collide = tile_collide_  			tile_interact = tile_interact_ +			tile_id_by_name = {} +			for id in tile_names.size(): +				tile_id_by_name[tile_names[id]] = id  			item_idx_from_name.clear()  			for i in range(item_names.size()): @@ -78,8 +83,7 @@ func _ready():  	)  	mp.set_tile.connect(set_tile) - -	mp.remove_tile.connect(remove_tile_if_exists) +	mp.remove_tile.connect(set_tile)  	mp.position.connect(func(player: int, pos: Vector2, rot: float):  		var player_instance: Player = players[player] @@ -98,7 +102,7 @@ func _ready():  	)  	mp.set_tile_item.connect(func(tile: Vector2i, item: int): -		var t: Tile = tile_by_pos[str(tile)][1] +		var t: Tile = map.get_tile_instance(tile)  		var i = ItemFactory.produce(item_names[item], t.item_base)  		add_child(i)  		i.name = item_names[item] @@ -106,7 +110,7 @@ func _ready():  	)  	mp.remove_tile_item.connect(func(tile: Vector2i): -		var t: Tile = tile_by_pos[str(tile)][1] +		var t: Tile = map.get_tile_instance(tile)  		t.take_item().queue_free()  	) @@ -124,24 +128,24 @@ func _ready():  	)  	mp.take_item.connect(func(tile: Vector2i, player: int): -		var t: Tile = tile_by_pos[str(tile)][1] +		var t: Tile = map.get_tile_instance(tile)  		var p: Player = players[player]  		p.take_item(t)  	)  	mp.put_item.connect(func(tile: Vector2i, player: int): -		var t: Tile = tile_by_pos[str(tile)][1] +		var t: Tile = map.get_tile_instance(tile)  		var p: Player = players[player]  		p.put_item(t)  	)  	mp.set_progress.connect(func(tile: Vector2i, progress: float, warn: bool): -		var t: Tile = tile_by_pos[str(tile)][1] +		var t: Tile = map.get_tile_instance(tile)  		t.progress(progress, warn)  	)  	mp.set_finished.connect(func(tile: Vector2i, warn: bool): -		var t: Tile = tile_by_pos[str(tile)][1] +		var t: Tile = map.get_tile_instance(tile)  		t.finish(warn)  	) @@ -166,33 +170,16 @@ func _process(delta):  	marker.position = lerp(marker.position, marker_target, delta * 40.0)  func get_tile_collision(pos: Vector2i) -> bool: -	var t = tile_by_pos.get(str(pos)) +	var t = map.get_tile_name(pos)  	if t == null: return true -	else: return tile_collide[t[0]] +	else: return tile_collide[tile_id_by_name[t]]  func get_tile_interactive(pos: Vector2i) -> bool: -	var t = tile_by_pos.get(str(pos)) +	var t = map.get_tile_name(pos)  	if t == null: return false -	else: return tile_interact[t[0]] - -func set_tile(tile: Vector2i, kind: int, neighbors: Array): -	remove_tile_if_exists(tile) -	var node_name = str(tile) -	var tile_name: String = tile_names[kind] -	neighbors = neighbors.map(func (x): return tile_names[x] if x != null else null) -	var instance: Tile = TileFactory.produce(tile_name, node_name, neighbors) +	else: return tile_interact[tile_id_by_name[t]] -	instance.position = Vector3(tile[0], 0, tile[1]) -	tile_by_pos[node_name] = [kind, instance] -	add_child(instance) +func set_tile(tile: Vector2i, kind = null, neighbors = null): +	if neighbors != null: neighbors = neighbors.map(func (x): return tile_names[x] if x != null else null) +	map.set_tile(tile, tile_names[kind], neighbors) -func remove_tile_if_exists(pos: Vector2i): -	var node_name = str(pos) -	var current = tile_by_pos.get(node_name) -	if current != null: -		var tile: Tile = current[1] -		if tile.item != null: -			tile.item.queue_free() -		tile_by_pos.erase(node_name) -		tile.name += "_queued_free" -		tile.queue_free() | 
