diff options
Diffstat (limited to 'client/game.gd')
-rw-r--r-- | client/game.gd | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/client/game.gd b/client/game.gd index e5c14fdb..c1f515fe 100644 --- a/client/game.gd +++ b/client/game.gd @@ -48,6 +48,7 @@ var tile_names: Array = [] var tile_index_by_name: Dictionary = {} var tile_walkable: Dictionary = {} var tile_placeable_items: Dictionary = {} +var tile_interactable_empty: Dictionary = {} var maps: Array = [] var bot_algos: Array var text_message_history: Array[TextMessage] = [] @@ -95,6 +96,8 @@ func handle_packet(p): tile_names = p["data"]["tile_names"] tile_walkable = {} for tile in p["data"]["tile_walkable"]: tile_walkable[int(tile)] = true + tile_interactable_empty = {} + for tile in p["data"]["tile_interactable_empty"]: tile_interactable_empty[int(tile)] = true tile_placeable_items = {} for tile in p["data"]["tile_placeable_items"]: tile_placeable_items[int(tile)] = p["data"]["tile_placeable_items"][tile].map(func(x): return int(x)) @@ -428,14 +431,19 @@ func get_tile_collision(pos: Vector2i) -> bool: if t == null: return true else: return not tile_walkable.has(tile_index_by_name[t]) -func get_tile_interactive(pos: Vector2i, item = null) -> bool: - var t = map.get_tile_name(pos) - if t == null: return false - else: - if map.get_tile_instance(pos).item != null: return true - if !tile_placeable_items.has(tile_index_by_name[t]): return true - if item == null: return false # TODO change to true then always supplied - return item_index_by_name[item] in tile_placeable_items[tile_index_by_name[t]] +func get_tile_interactive(pos: Vector2i, hands: Array) -> bool: + var tile_name = map.get_tile_name(pos) + if tile_name == null: return false + var tile = tile_index_by_name[tile_name] + if map.get_tile_instance(pos).item != null: return true + if !tile_placeable_items.has(tile): return true + for hand in hands: + if hand == null: + if tile_interactable_empty.has(tile): return true + else: + if item_index_by_name[hand.item_name] in tile_placeable_items[tile]: return true + return false + func update_center(): $FollowCamera.autozoom = spectating_mode == SpectatingMode.CENTER and join_state == JoinState.SPECTATING |