aboutsummaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
Diffstat (limited to 'client')
-rw-r--r--client/game.gd1
-rw-r--r--client/map/item.gd2
-rw-r--r--client/map/map.gd4
-rw-r--r--client/map/tiles/counter.gd49
-rw-r--r--client/map/tiles/counter_base.gd6
-rw-r--r--client/map/tiles/cutting_board.gd2
-rw-r--r--client/map/tiles/door.gd2
-rw-r--r--client/map/tiles/floor.gd2
-rw-r--r--client/map/tiles/flour_counter.gd12
-rw-r--r--client/map/tiles/full_tile.gd8
-rw-r--r--client/map/tiles/oven.gd2
-rw-r--r--client/map/tiles/raw_steak_crate.gd2
-rw-r--r--client/map/tiles/sink.gd6
-rw-r--r--client/map/tiles/stove.gd2
-rw-r--r--client/map/tiles/table.gd2
-rw-r--r--client/map/tiles/tomato_crate.gd2
-rw-r--r--client/map/tiles/trash.gd2
-rw-r--r--client/map/tiles/wall.gd8
-rw-r--r--client/map/tiles/wall_tile.gd57
-rw-r--r--client/map/tiles/window.gd4
-rw-r--r--client/menu/credits_menu.gd2
-rw-r--r--client/menu/main_menu.gd7
-rw-r--r--client/multiplayer.gd9
-rw-r--r--client/player/controllable_player.gd6
-rw-r--r--client/player/marker.gd2
-rw-r--r--client/player/player.gd15
26 files changed, 97 insertions, 119 deletions
diff --git a/client/game.gd b/client/game.gd
index eb338eaa..52856898 100644
--- a/client/game.gd
+++ b/client/game.gd
@@ -25,6 +25,7 @@ var marker_target = Vector3(0,0,0)
var players := {}
# Called when the node enters the scene tree for the first time.
func _ready():
+ Multiplayer.connect_client()
await Multiplayer.init
if Multiplayer.player_id == -1:
push_error("multiplayer has not been initialized")
diff --git a/client/map/item.gd b/client/map/item.gd
index 757019c9..fd00f9fa 100644
--- a/client/map/item.gd
+++ b/client/map/item.gd
@@ -26,7 +26,7 @@ func _init(idx: int, owned_by_: Node3D):
progress_instance.visible = false
match Multiplayer.item_names[idx]:
var t:
- add_child(load("res://models/prefabs/map/bag.tscn").instantiate())
+ #add_child(load("res://models/prefabs/map/bag.tscn").instantiate())
var mesh = MeshInstance3D.new()
var text = TextMesh.new()
var mat = StandardMaterial3D.new()
diff --git a/client/map/map.gd b/client/map/map.gd
index 1155a70c..c027fd4a 100644
--- a/client/map/map.gd
+++ b/client/map/map.gd
@@ -15,13 +15,15 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
+@tool
class_name Map
extends Node3D
var tile_by_pos: Dictionary = {}
func _ready():
- Multiplayer.connect("update_map", update)
+ if !Engine.is_editor_hint():
+ Multiplayer.connect("update_map", update)
func update(pos, tile_name, neighbors):
var instance: Floor
diff --git a/client/map/tiles/counter.gd b/client/map/tiles/counter.gd
index c3032e4f..6783d486 100644
--- a/client/map/tiles/counter.gd
+++ b/client/map/tiles/counter.gd
@@ -16,7 +16,7 @@
class_name Counter
extends FullTile
-var counters = [
+const counters: Array = [
"counter",
"pan",
"sink",
@@ -36,41 +36,30 @@ static func interact_target() -> Vector3:
func _init(rename: String, neighbors: Array):
super(rename, neighbors)
- var facing = 0
- var edges = neighbors.duplicate()
- for i in range(4):
- var i_name = tile_name(edges[i])
- if Counter.is_counter(i_name):
- edges[i] = "counter"
- else:
- edges[i] = tile_name(edges[i])
-
- var series: int = 0
- var last_series: int = 0
- var adj: Array = []
- for i in range(4):
- if edges[i] == "floor":
- last_series += 1
- adj.append(i)
- if last_series > series:
- series = last_series
- else:
- last_series = 0
-
- var count = 4 - adj.size()
+ var facing: int = 0
+ var max_series: int = 0
+ var max_idx: int = 0
+ for start in range(4):
+ var series = 0
+ for i in range(4):
+ if tile_name(neighbors[(start + i) % 4]) == "floor":
+ series += 1
+ else:
+ break
+ if series > max_series:
+ max_series = series
+ max_idx = start
# we can neither find out whether it is an inner corner nor an outer corner
# backsplash
- if series == 1&&count == 3:
- facing = adj[0] % 4
-
- if edges[(adj[0] + 2) % 4] == "wall":
+ facing = max_idx
+ if max_series == 1:
+ if WallTile.is_wall(tile_name(neighbors[(max_idx + 2) % 4])):
kind = CounterKind.STRAIGHT_BACKSPLASH
else:
kind = CounterKind.STRAIGHT
- elif series == 2&&count == 2:
- facing = (adj[0] + 1) % 4
+ elif max_series == 2:
kind = CounterKind.OUTER_CORNER
turn_facing(facing)
@@ -78,4 +67,4 @@ func _init(rename: String, neighbors: Array):
static func is_counter(tile_name_t) -> bool:
if tile_name_t == null:
return false
- return tile_name_t.ends_with("crate")||counters.has(tile_name_t)
+ return tile_name_t.ends_with("crate") or counters.has(tile_name_t)
diff --git a/client/map/tiles/counter_base.gd b/client/map/tiles/counter_base.gd
index ebeebb3b..a4eb6864 100644
--- a/client/map/tiles/counter_base.gd
+++ b/client/map/tiles/counter_base.gd
@@ -20,8 +20,8 @@ func _init(rename: String, neighbors: Array):
super(rename, neighbors)
match kind:
CounterKind.OUTER_CORNER:
- base.add_child(load("res://models/prefabs/map/kitchencounter_outercorner.tscn").instantiate())
+ base.add_child(load("res://map/tiles/counter_outer_corner.res").instantiate())
CounterKind.STRAIGHT:
- base.add_child(load("res://models/prefabs/map/kitchencounter_straight_A.tscn").instantiate())
+ base.add_child(load("res://map/tiles/counter_straight.res").instantiate())
CounterKind.STRAIGHT_BACKSPLASH:
- base.add_child(load("res://models/prefabs/map/kitchencounter_straight_A_backsplash.tscn").instantiate())
+ base.add_child(load("res://tiles/counter_straight_backsplash.tscn").instantiate())
diff --git a/client/map/tiles/cutting_board.gd b/client/map/tiles/cutting_board.gd
index 944a7a9f..098cc06c 100644
--- a/client/map/tiles/cutting_board.gd
+++ b/client/map/tiles/cutting_board.gd
@@ -18,4 +18,4 @@ extends CounterBase
func _init(rename: String, neighbors: Array):
super(rename, neighbors)
- base.add_child(load("res://models/prefabs/map/cuttingboard.tscn").instantiate())
+ base.add_child(load("res://map/cutting_board.tscn").instantiate())
diff --git a/client/map/tiles/door.gd b/client/map/tiles/door.gd
index cfba08b7..d3f977ad 100644
--- a/client/map/tiles/door.gd
+++ b/client/map/tiles/door.gd
@@ -23,5 +23,5 @@ func _init(rename: String, neighbors: Array):
for i in range(4):
if tile_name(neighbors[i]) == "door":
facing = i % 4
- base.add_child(load("res://models/prefabs/map/door.tscn").instantiate())
+ base.add_child(load("res://map/door.tscn").instantiate())
turn_facing(facing)
diff --git a/client/map/tiles/floor.gd b/client/map/tiles/floor.gd
index fec68cbd..69a347db 100644
--- a/client/map/tiles/floor.gd
+++ b/client/map/tiles/floor.gd
@@ -28,7 +28,7 @@ enum Facing {
}
func _init(rename: String, _neighbors: Array):
- var floor_tile = load("res://models/prefabs/map/floor_kitchen_small.tscn").instantiate()
+ var floor_tile = load("res://map/floor.tscn").instantiate()
floor_tile.position += Vector3(0.5, 0, 0.5)
add_child(floor_tile)
base.name = "Base"
diff --git a/client/map/tiles/flour_counter.gd b/client/map/tiles/flour_counter.gd
index 4bf2b1f3..237d0c66 100644
--- a/client/map/tiles/flour_counter.gd
+++ b/client/map/tiles/flour_counter.gd
@@ -18,9 +18,9 @@ extends CounterBase
func _init(rename: String, neighbors: Array):
super(rename, neighbors)
- var bag = load("res://models/prefabs/map/bag.tscn").instantiate()
- # this is supposed to be overridden
- @warning_ignore("static_called_on_instance")
- bag.position = interact_target()
- bag.rotation_degrees.y = 45
- base.add_child(bag)
+ # var bag = load("res://models/prefabs/map/bag.tscn").instantiate()
+ # # this is supposed to be overridden
+ # @warning_ignore("static_called_on_instance")
+ # bag.position = interact_target()
+ # bag.rotation_degrees.y = 45
+ # base.add_child(bag)
diff --git a/client/map/tiles/full_tile.gd b/client/map/tiles/full_tile.gd
index cc2b887b..3155913e 100644
--- a/client/map/tiles/full_tile.gd
+++ b/client/map/tiles/full_tile.gd
@@ -28,11 +28,3 @@ func _init(rename: String, neighbors: Array):
static_body.add_child(shape)
static_body.name = "Body"
base.add_child(static_body)
-
-# 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
diff --git a/client/map/tiles/oven.gd b/client/map/tiles/oven.gd
index 88da3adb..e68e809c 100644
--- a/client/map/tiles/oven.gd
+++ b/client/map/tiles/oven.gd
@@ -18,4 +18,4 @@ extends Counter
func _init(rename: String, neighbors: Array):
super(rename, neighbors)
- base.add_child(load("res://models/prefabs/map/oven.tscn").instantiate())
+ base.add_child(load("res://map/oven.tscn").instantiate())
diff --git a/client/map/tiles/raw_steak_crate.gd b/client/map/tiles/raw_steak_crate.gd
index 8ff93d6b..6287271b 100644
--- a/client/map/tiles/raw_steak_crate.gd
+++ b/client/map/tiles/raw_steak_crate.gd
@@ -18,4 +18,4 @@ extends Crate
func _init(rename: String, neighbors: Array):
super(rename, neighbors)
- base.add_child(load("res://models/prefabs/map/crate_steak.tscn").instantiate())
+ base.add_child(load("res://map/raw_steak_crate.tscn").instantiate())
diff --git a/client/map/tiles/sink.gd b/client/map/tiles/sink.gd
index e4eaff60..145c97c9 100644
--- a/client/map/tiles/sink.gd
+++ b/client/map/tiles/sink.gd
@@ -20,8 +20,8 @@ func _init(rename: String, neighbors: Array):
super(rename, neighbors)
match kind:
CounterKind.STRAIGHT:
- base.add_child(load("res://models/prefabs/map/kitchencounter_sink.tscn").instantiate())
+ base.add_child(load("res://map/sink.tscn").instantiate())
CounterKind.STRAIGHT_BACKSPLASH:
- base.add_child(load("res://models/prefabs/map/kitchencounter_sink_backsplash.tscn").instantiate())
+ base.add_child(load("res://map/sink_backsplash.tscn").instantiate())
_:
- base.add_child(load("res://models/prefabs/map/kitchencounter_sink.tscn").instantiate())
+ base.add_child(load("res://map/sink.tscn").instantiate())
diff --git a/client/map/tiles/stove.gd b/client/map/tiles/stove.gd
index 93fad5a3..45204964 100644
--- a/client/map/tiles/stove.gd
+++ b/client/map/tiles/stove.gd
@@ -18,4 +18,4 @@ extends Counter
func _init(rename: String, neighbors: Array):
super(rename, neighbors)
- base.add_child(load("res://models/prefabs/map/stove_single.tscn").instantiate())
+ base.add_child(load("res://map/stove.tscn").instantiate())
diff --git a/client/map/tiles/table.gd b/client/map/tiles/table.gd
index 533223a4..3446991d 100644
--- a/client/map/tiles/table.gd
+++ b/client/map/tiles/table.gd
@@ -18,4 +18,4 @@ extends FullTile
func _init(rename: String, neighbors: Array):
super(rename, neighbors)
- base.add_child(load("res://models/prefabs/map/table_round_A_small.tscn").instantiate())
+ base.add_child(load("res://map/table.tscn").instantiate())
diff --git a/client/map/tiles/tomato_crate.gd b/client/map/tiles/tomato_crate.gd
index 078d0ba2..876588da 100644
--- a/client/map/tiles/tomato_crate.gd
+++ b/client/map/tiles/tomato_crate.gd
@@ -18,4 +18,4 @@ extends Crate
func _init(rename: String, neighbors: Array):
super(rename, neighbors)
- base.add_child(load("res://models/prefabs/map/crate_tomatoes.tscn").instantiate())
+ base.add_child(load("res://map/tomato_crate.tscn").instantiate())
diff --git a/client/map/tiles/trash.gd b/client/map/tiles/trash.gd
index fed1a502..b156c366 100644
--- a/client/map/tiles/trash.gd
+++ b/client/map/tiles/trash.gd
@@ -18,4 +18,4 @@ extends Crate
func _init(rename: String, neighbors: Array):
super(rename, neighbors)
- base.add_child(load("res://models/prefabs/map/crate_trash.tscn").instantiate())
+ base.add_child(load("res://models/prefabs/map/trash.tscn").instantiate())
diff --git a/client/map/tiles/wall.gd b/client/map/tiles/wall.gd
index 0201d4d6..21e28843 100644
--- a/client/map/tiles/wall.gd
+++ b/client/map/tiles/wall.gd
@@ -20,10 +20,10 @@ func _init(rename: String, neighbors: Array):
super(rename, neighbors)
match kind:
WallKind.STRAIGHT:
- base.add_child(load("res://models/prefabs/map/wall_straight.tscn").instantiate())
+ base.add_child(load("res://map/wall_straight.tscn").instantiate())
WallKind.OUTER_CORNER:
- base.add_child(load("res://models/prefabs/map/wall_corner.tscn").instantiate())
+ base.add_child(load("res://map/wall_corner.tscn").instantiate())
WallKind.T:
- base.add_child(load("res://models/prefabs/map/wall_t.tscn").instantiate())
+ base.add_child(load("res://map/wall_t.tscn").instantiate())
WallKind.CROSS:
- base.add_child(load("res://models/prefabs/map/wall_cross.tscn").instantiate())
+ base.add_child(load("res://map/wall_cross.tscn").instantiate())
diff --git a/client/map/tiles/wall_tile.gd b/client/map/tiles/wall_tile.gd
index 6cc5253a..85e3e6ff 100644
--- a/client/map/tiles/wall_tile.gd
+++ b/client/map/tiles/wall_tile.gd
@@ -35,44 +35,33 @@ var facing: int = 0
func _init(rename: String, neighbors: Array):
super(rename, neighbors)
- var edges = neighbors.duplicate()
+ var max_series: int = 0
+ var max_idx: int = 0
+ for start in range(4):
+ var series = 0
+ for i in range(4):
+ var i_name = tile_name(neighbors[(start + i) % 4])
+ if is_wall(i_name):
+ series += 1
+ else:
+ break
+ if series > max_series:
+ max_series = series
+ max_idx = start
- var series: int = 0
- var last_series: int = 0
- var adj: Array = []
-
- for i in range(4):
- var i_name = tile_name(edges[i])
- if is_wall(i_name):
- edges[i] = "wall"
- else:
- edges[i] = tile_name(edges[i])
-
- for i in range(4):
- if edges[i] != "wall":
- last_series += 1
- adj.append(i)
- if last_series > series:
- series = last_series
- else:
- last_series = 0
-
- var count = 4 - adj.size()
-
- if series == 1&&count == 2:
- facing = adj[0]
+ if max_series == 1:
+ facing = max_idx
kind = WallKind.STRAIGHT
- elif series == 2&&count == 2:
- facing = adj[0]
+ elif max_series == 2:
+ facing = max_idx
kind = WallKind.OUTER_CORNER
- elif series == 1&&count == 3:
- facing = adj[0]
+ elif max_series == 3:
+ facing = max_idx
kind = WallKind.T
- elif series == 0&&count == 4:
- facing = adj[0]
+ elif max_series == 4:
+ facing = max_idx
kind = WallKind.CROSS
turn_facing(facing)
-func is_wall(_s: String):
- return false # TODO
-
+static func is_wall(tile_name_t) -> bool:
+ return WALLS.has(tile_name_t)
diff --git a/client/map/tiles/window.gd b/client/map/tiles/window.gd
index b2926080..7747bbcd 100644
--- a/client/map/tiles/window.gd
+++ b/client/map/tiles/window.gd
@@ -23,7 +23,7 @@ func _init(rename: String, neighbors: Array):
super(rename, neighbors)
match kind:
WallKind.STRAIGHT:
- base.add_child(load("res://models/prefabs/map/window.tscn").instantiate())
+ base.add_child(load("res://map/window.tscn").instantiate())
WallKind.OUTER_CORNER:
push_warning("There is no corner window!")
- base.add_child(load("res://models/prefabs/map/window.tscn").instantiate())
+ base.add_child(load("res://map/window.tscn").instantiate())
diff --git a/client/menu/credits_menu.gd b/client/menu/credits_menu.gd
index a48d5461..3949b5c0 100644
--- a/client/menu/credits_menu.gd
+++ b/client/menu/credits_menu.gd
@@ -16,4 +16,4 @@
extends Control
func _on_back_pressed():
- $SceneTransition.transition_to("res://scenes/main_menu.tscn")
+ $SceneTransition.transition_to("res://menu/main_menu.tscn")
diff --git a/client/menu/main_menu.gd b/client/menu/main_menu.gd
index df09cf7f..cb32f175 100644
--- a/client/menu/main_menu.gd
+++ b/client/menu/main_menu.gd
@@ -16,9 +16,6 @@
#
extends Control
-@onready var quick_connect = $side/margin/options/quick_connect
-@onready var quit_button = $side/margin/options/quit
-
func _ready():
quick_connect.grab_focus()
if OS.has_feature("web"):
@@ -28,7 +25,7 @@ func _on_quit_pressed():
get_tree().quit()
func _on_credits_pressed():
- $SceneTransition.transition_to("res://scenes/credits_menu.tscn")
+ $SceneTransition.transition_to("res://menu/credits_menu.tscn")
func _on_connect_pressed():
connect_to($side/options/connect/uri.text)
@@ -46,4 +43,4 @@ func _on_quick_connect_pressed():
func connect_to(url):
print("Connecting to %s" % url)
Multiplayer.url = url
- $SceneTransition.transition_to("res://scenes/game.tscn")
+ $SceneTransition.transition_to("res://game.tscn")
diff --git a/client/multiplayer.gd b/client/multiplayer.gd
index 534ef663..7ccfd377 100644
--- a/client/multiplayer.gd
+++ b/client/multiplayer.gd
@@ -29,6 +29,8 @@ signal take_item(tile: Vector2i, player: int)
signal put_item(tile: Vector2i, player: int)
signal set_tile_item(tile: Vector2i, item: int)
signal remove_tile_item(tile: Vector2i)
+signal set_player_item(player: int, item: int)
+signal remove_player_item(player: int)
signal set_progress(tile: Vector2i, progress: float, warn: bool)
signal set_finished(tile: Vector2i, warn: bool)
@@ -44,7 +46,8 @@ var player_id = -1
var tileid_by_pos: Dictionary = {}
-func connectClient(url: String):
+var url = ""
+func connect_client():
socket.connect_to_url(url)
connected = true
@@ -103,8 +106,8 @@ func handle_packet(bytes: PackedByteArray):
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)
+ var player = decoded["player"]
+ emit_signal("put_item", tile, player)
"set_active":
var tile = pos_to_vec2i(decoded["tile"])
var warn = decoded["warn"]
diff --git a/client/player/controllable_player.gd b/client/player/controllable_player.gd
index 4c157349..bb9c75e8 100644
--- a/client/player/controllable_player.gd
+++ b/client/player/controllable_player.gd
@@ -32,7 +32,7 @@ func _ready():
add_child(timer)
timer.start()
timer.connect("timeout", func():
- Multiplayer.send_position(Vector2(position.x, position.z), rotation.y)
+ Multiplayer.send_position(position_, rotation_)
)
func _process(delta):
@@ -53,7 +53,7 @@ func _process(delta):
func update(dt: float, input: Vector2):
var direction = input.limit_length(1.);
- rotation.y = atan2(self.facing.x, self.facing.y);
+ rotation_ = atan2(self.facing.x, self.facing.y);
if direction.length() > 0.1:
self.facing = direction + (self.facing - direction) * exp(-dt * 10.);
self.velocity_ += direction * dt * PLAYER_SPEED;
@@ -76,7 +76,7 @@ func collide(dt: float):
self.position_ += (PLAYER_SIZE - d) * grad;
self.velocity_ -= grad * grad.dot(self.velocity_)
-
+
for player: Player in game.players.values():
var diff = self.position_ - player.position_
var d = diff.length()
diff --git a/client/player/marker.gd b/client/player/marker.gd
index fa11ff98..6e3e6ffa 100644
--- a/client/player/marker.gd
+++ b/client/player/marker.gd
@@ -16,7 +16,7 @@
class_name Marker
extends Node3D
-@onready var _cube: MeshInstance3D = $Cubew
+@onready var _cube: MeshInstance3D = $Cube
func set_interactive(val: bool):
var mat: ShaderMaterial = _cube.get_active_material(0)
diff --git a/client/player/player.gd b/client/player/player.gd
index 423855e9..b8982aa7 100644
--- a/client/player/player.gd
+++ b/client/player/player.gd
@@ -22,11 +22,15 @@ const PLAYER_SIZE: float = 0.4
const SPEED: float = 25.
var game: Game
+var rotation_ = 0.
+var rotation_anim = 0.
var position_ = Vector2(0, 0)
+var position_anim = Vector2(0, 0)
-var mesh = preload("res://scenes/player.tscn").instantiate()
+var mesh = preload("res://player/player.tscn").instantiate()
-var hand: Node3D = null
+var hand: Item = null
+var hand_base: Node3D = Node3D.new()
var _anim_angle: float = 0.0
@@ -40,6 +44,9 @@ func _init(_id: int, new_name: String, pos: Vector2, _character: int, new_game:
name = new_name
game = new_game
+ hand_base.position = HAND_BASE_POSITION
+ add_child(hand_base)
+
func update_position(new_position: Vector2, new_rotation: float):
position_ = new_position
rotation_ = new_rotation
@@ -63,9 +70,7 @@ func take_item(tile: Floor):
if hand != null:
push_error("already holding an item")
var i = tile.take_item()
- if i == null:
- push_error("tile is null")
- hand = i
+ set_item(i)
func put_item(tile: Floor):
var i = remove_item()