diff options
Diffstat (limited to 'client/scripts')
| -rw-r--r-- | client/scripts/controllable_player.gd | 18 | ||||
| -rw-r--r-- | client/scripts/game.gd | 8 | ||||
| -rw-r--r-- | client/scripts/marker.gd | 8 | ||||
| -rw-r--r-- | client/scripts/multiplayer.gd | 53 | 
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] | 
