diff options
Diffstat (limited to 'client/scripts')
| -rw-r--r-- | client/scripts/controllable_player.gd | 16 | ||||
| -rw-r--r-- | client/scripts/game.gd | 46 | ||||
| -rw-r--r-- | client/scripts/tiles/floor.gd | 27 | 
3 files changed, 88 insertions, 1 deletions
| diff --git a/client/scripts/controllable_player.gd b/client/scripts/controllable_player.gd index 59f4c3de..d0852846 100644 --- a/client/scripts/controllable_player.gd +++ b/client/scripts/controllable_player.gd @@ -21,6 +21,9 @@ func _process(delta):  	var input = Vector2(Input.get_axis("left", "right"), Input.get_axis("forward", "backwards")).normalized()  	input = input.rotated(-game.camera.angle_target)  	update(delta, input) +	position_anim = position_ +	rotation_anim = rotation_ +	mark_interact_target()  	super(delta)  func update(dt: float, input: Vector2): @@ -64,3 +67,16 @@ func aabb_point_distance(min: Vector2, max: Vector2, p: Vector2) -> float:  func update_position(_new_position: Vector2, _new_rotation: float):  	pass + +func mark_interact_target(): +	var target = Vector2i( +		int(floor(position.x + sin(rotation.y))), +		int(floor(position.z + cos(rotation.y))) +	) +	var tile_idx = str(target) +	if game.map.tile_by_pos.has(tile_idx): +		var t: Floor = game.map.tile_by_pos[tile_idx] +		game.marker.visible = true +		game.marker_target = t.item_base.global_position +	else: +		game.marker.visible = false diff --git a/client/scripts/game.gd b/client/scripts/game.gd index 0403e7c4..f363c894 100644 --- a/client/scripts/game.gd +++ b/client/scripts/game.gd @@ -2,7 +2,9 @@ class_name Game  extends Node3D  @onready var camera: FollowCamera = $FollowCamera -@onready var map: Node3D = $Map +@onready var map: Map = $Map +@onready var marker: Node3D = $Marker +var marker_target = Vector3(0,0,0)  var players := {}  # Called when the node enters the scene tree for the first time. @@ -34,5 +36,47 @@ func _ready():  			players.erase(id)  			player.queue_free()  	) +	 +	Multiplayer.connect("set_tile_item", func(tile: Vector2i, item: int): +		var t: Floor = map.tile_by_pos[str(tile)] +		var i = Item.new(item, t.item_base) +		add_child(i) +		i.name = Multiplayer.item_names[item] +		t.put_item(i) +	) + +	Multiplayer.connect("remove_tile_item", func(tile: Vector2i): +		var t: Floor = map.tile_by_pos[str(tile)] +		t.take_item().queue_free() +	) + +	Multiplayer.connect("set_player_item", func(player: int, item: int): +		var p: Player = players[player] +		var i = Item.new(item, p.hand_base) +		add_child(i) +		i.name = Multiplayer.item_names[item] +		p.set_item(i) +	) + +	Multiplayer.connect("remove_player_item", func(player: int): +		var p: Player = players[player] +		p.remove_item().queue_free() +	) + +	Multiplayer.connect("take_item", func(tile: Vector2i, player: int): +		var t: Floor = map.tile_by_pos[str(tile)] +		var p: Player = players[player] +		p.take_item(t) +	) + +	Multiplayer.connect("put_item", func(tile: Vector2i, player: int): +		var t: FullTile = map.tile_by_pos[str(tile)] +		var p: Player = players[player] +		p.put_item(t) +	)  	Multiplayer.send_join("Blub", 1) + + +func _process(delta): +	marker.position = lerp(marker.position, marker_target, delta * 40.0) diff --git a/client/scripts/tiles/floor.gd b/client/scripts/tiles/floor.gd index ba09d40b..0c4af8a0 100644 --- a/client/scripts/tiles/floor.gd +++ b/client/scripts/tiles/floor.gd @@ -2,6 +2,8 @@ class_name Floor  extends Node3D  var base = Node3D.new() +var item: Item = null +var item_base: Node3D  enum Facing {  	NEG_Y = 0, @@ -16,6 +18,11 @@ func _init(rename: String, _neighbors: Array):  	base.position += Vector3(0.5, 0, 0.5)  	add_child(base)  	self.name = rename +	var item_base_ = Node3D.new() +	item_base_.position = interact_target() +	item_base_.name = "ItemBase" +	base.add_child(item_base_) +	item_base = item_base_  func turn_facing(facing: Facing):  	base.rotate_y(facing * 0.5 * PI + PI) @@ -24,3 +31,23 @@ func tile_name(idx):  	if idx == null:  		return null  	return Multiplayer.tile_names[idx] + + +# defines where items go when interacting +static func interact_target() -> Vector3: +	return Vector3(0, 0, 0) + +# actions when interacting, e.g. animations +func interact(): +	pass + +func put_item(i: Item): +	if item != null: +		push_error("already holding an item") +	item = i +	i.owned_by = item_base + +func take_item() -> Item: +	var i = item +	item = null +	return i | 
