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 |