aboutsummaryrefslogtreecommitdiff
path: root/client/game.gd
diff options
context:
space:
mode:
Diffstat (limited to 'client/game.gd')
-rw-r--r--client/game.gd53
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()