aboutsummaryrefslogtreecommitdiff
path: root/client/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'client/scripts')
-rw-r--r--client/scripts/controllable_player.gd18
-rw-r--r--client/scripts/game.gd8
-rw-r--r--client/scripts/marker.gd8
-rw-r--r--client/scripts/multiplayer.gd53
4 files changed, 57 insertions, 30 deletions
diff --git a/client/scripts/controllable_player.gd b/client/scripts/controllable_player.gd
index 819e7a08..4cedbdbb 100644
--- a/client/scripts/controllable_player.gd
+++ b/client/scripts/controllable_player.gd
@@ -23,7 +23,8 @@ func _process(delta):
update(delta, input)
position_anim = position_
rotation_anim = rotation_
- interact()
+ if not Input.is_action_pressed("interact")||Input.is_action_just_pressed("interact"):
+ interact()
super(delta)
func update(dt: float, input: Vector2):
@@ -75,14 +76,17 @@ func interact():
)
var tile_idx = str(target)
var t: Floor = game.map.tile_by_pos.get(tile_idx)
- if Input.is_action_just_pressed("interact"):
- Multiplayer.send_interact(target, true)
- if t != null:
- t.interact()
- elif Input.is_action_just_released("interact"):
- Multiplayer.send_interact(target, false)
if t != null:
game.marker.visible = true
game.marker_target = t.item_base.global_position
+ if Multiplayer.get_tile_interactive(target):
+ game.marker.set_interactive(true)
+ if Input.is_action_just_pressed("interact"):
+ Multiplayer.send_interact(target, true)
+ t.interact()
+ elif Input.is_action_just_released("interact"):
+ Multiplayer.send_interact(target, false)
+ else:
+ game.marker.set_interactive(false)
else:
game.marker.visible = false
diff --git a/client/scripts/game.gd b/client/scripts/game.gd
index 1c966fa6..ff90065e 100644
--- a/client/scripts/game.gd
+++ b/client/scripts/game.gd
@@ -3,7 +3,7 @@ extends Node3D
@onready var camera: FollowCamera = $FollowCamera
@onready var map: Map = $Map
-@onready var marker: Node3D = $Marker
+@onready var marker: Marker = $Marker
var marker_target = Vector3(0,0,0)
var players := {}
@@ -13,13 +13,13 @@ func _ready():
if Multiplayer.player_id == -1:
push_error("multiplayer has not been initialized")
Multiplayer.connect("add_player",
- func(player: int, name: String, pos: Vector2, character: int):
+ func(player: int, player_name: String, pos: Vector2, character: int):
var player_instance: Player
if player == Multiplayer.player_id:
- player_instance = ControllablePlayer.new(player, name, pos, character, self)
+ player_instance = ControllablePlayer.new(player, player_name, pos, character, self)
camera.target = player_instance
else:
- player_instance = Player.new(player, name, pos, character, self)
+ player_instance = Player.new(player, player_name, pos, character, self)
players[player] = player_instance
add_child(player_instance)
)
diff --git a/client/scripts/marker.gd b/client/scripts/marker.gd
new file mode 100644
index 00000000..0127cd5b
--- /dev/null
+++ b/client/scripts/marker.gd
@@ -0,0 +1,8 @@
+class_name Marker
+extends Node3D
+
+@onready var _cube: MeshInstance3D = $Cube
+
+func set_interactive(val: bool):
+ var mat: ShaderMaterial = _cube.get_active_material(0)
+ mat.set_shader_parameter("interactive", val)
diff --git a/client/scripts/multiplayer.gd b/client/scripts/multiplayer.gd
index 4dbce890..3d360cf8 100644
--- a/client/scripts/multiplayer.gd
+++ b/client/scripts/multiplayer.gd
@@ -25,7 +25,6 @@ var tile_interact = []
var item_idx_from_name: Dictionary = {}
var player_id = -1
-var other_players = {}
var tileid_by_pos: Dictionary = {}
func connectClient(url: String):
@@ -71,39 +70,46 @@ func handle_packet(bytes: PackedByteArray):
var id = decoded["id"]
var player_name = decoded["name"]
var pos = decoded["position"]
- var char = decoded["character"]
- other_players[id] = [player_name, char]
- emit_signal("add_player", id, player_name, pos_to_vec2(pos), char)
+ var character = decoded["character"]
+ emit_signal("add_player", id, player_name, pos_to_vec2(pos), character)
"remove_player":
var id = decoded["id"]
- other_players.erase(id)
emit_signal("remove_player", id)
"position":
- var id = decoded["player"]
+ var player = decoded["player"]
var pos = decoded["pos"]
var rot = decoded["rot"]
- emit_signal("position", id, pos_to_vec2(pos), rot)
+ emit_signal("position", player, pos_to_vec2(pos), rot)
"take_item":
var tile = pos_to_vec2i(decoded["tile"])
- var player_id = decoded["player"]
- emit_signal("take_item", tile, player_id)
+ var player = decoded["player"]
+ emit_signal("take_item", tile, player)
"put_item":
var tile = pos_to_vec2i(decoded["tile"])
var player_id = decoded["player"]
emit_signal("take_item", tile, player_id)
- "set_progress":
+ "set_active":
var tile = pos_to_vec2i(decoded["tile"])
var warn = decoded["warn"]
- if decoded.has("progress")&&decoded["progress"] != null:
+ var progress = decoded.get("progress")
+ if progress != null:
emit_signal("set_progress", tile, decoded["progress"], warn)
else:
emit_signal("set_finished", tile, warn)
"set_tile_item":
var tile = pos_to_vec2i(decoded["tile"])
- if decoded.has("item")&&decoded["item"] != null:
- emit_signal("set_tile_item", tile, decoded["item"])
+ var item = decoded.get("item")
+ if item != null:
+ emit_signal("set_tile_item", tile, item)
else:
- emit_signal("remove_tile_name", tile)
+ emit_signal("remove_tile_item", tile)
+ "set_player_item":
+ var player = decoded["player"]
+ var item = decoded.get("item")
+ if item != null:
+ emit_signal("set_player_item", player, decoded["item"])
+ else:
+ emit_signal("remove_player_item", player)
"update_map":
var tile: int = decoded["tile"]
var pos: Array = decoded["pos"]
@@ -112,12 +118,16 @@ func handle_packet(bytes: PackedByteArray):
emit_signal("update_map", pos, tile_names[tile], neighbors)
"communicate":
var player = decoded["player"]
- if decoded.has("message"):
- var message: Dictionary = decoded["message"]
- if message.has("item"):
- emit_signal("item_message", player, message["item"])
+ var message = decoded.get("message")
+ if message != null:
+ var item = message.get("item")
+ var text = message.get("text")
+ if item != null:
+ emit_signal("item_message", player, item)
+ elif text != null:
+ emit_signal("text_message", player, text)
else:
- emit_signal("text_message", player, message["text"])
+ push_error("neither text nor item provided")
else:
emit_signal("clear_message", player)
_:
@@ -168,3 +178,8 @@ func get_tile_collision(pos: Vector2i) -> bool:
var t = tileid_by_pos[str(pos)]
if t == null: return false
else: return tile_collide[t]
+
+func get_tile_interactive(pos: Vector2i) -> bool:
+ var t = tileid_by_pos[str(pos)]
+ if t == null: return false
+ else: return tile_interact[t]