aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/game.gd6
-rw-r--r--client/global.gd4
-rw-r--r--client/map/deep_fryer_basket.resbin14285 -> 14274 bytes
-rw-r--r--client/map/items/basket.gd7
-rw-r--r--client/map/items/basket.tscn2
-rw-r--r--client/map/items/deep_frying.tscn26
-rw-r--r--client/map/items/item.gd9
-rw-r--r--client/map/tiles/deep_fryer.gd5
-rw-r--r--client/map/tiles/floor_like.gd1
-rw-r--r--client/map/tiles/tile.gd10
-rw-r--r--client/player/player.gd4
-rw-r--r--data/maps/debug.yaml2
12 files changed, 65 insertions, 11 deletions
diff --git a/client/game.gd b/client/game.gd
index efb75c9f..7289eed0 100644
--- a/client/game.gd
+++ b/client/game.gd
@@ -189,6 +189,9 @@ func handle_packet(p):
var i = ItemFactory.produce(item_names[p.item], t.item_base)
i.animate_spawn()
i.position = t.item_base.global_position
+ i.rotation.y = t.item_base.global_rotation.y + PI
+ i.position_target = i.position
+ i.rotation_target = i.rotation.y
add_child(i)
i.name = item_names[p.item]
t.set_item(i)
@@ -198,6 +201,9 @@ func handle_packet(p):
var i = ItemFactory.produce(item_names[p.item], pl.hand_base[h])
i.animate_spawn()
i.position = pl.hand_base[h].global_position
+ i.rotation.y = pl.hand_base[h].global_rotation.y
+ i.position_target = i.position
+ i.rotation_target = i.rotation.y
add_child(i)
i.name = item_names[p.item]
pl.set_item(i, h)
diff --git a/client/global.gd b/client/global.gd
index a3f6de6b..35fd215e 100644
--- a/client/global.gd
+++ b/client/global.gd
@@ -97,13 +97,13 @@ static func interpolate_angle(current, target, dt) -> float:
return target + (current - target) * exp(-dt)
# TODO not working in all cases yet but there was an attempt
-static func interpolate_angle_closest_quarter(current, target, dt):
+static func angle_closest_quarter(current, target) -> float:
current = fmod(current, PI * 2)
target = fmod(target, PI * 2)
while abs(target - current) > PI / 4.:
if target - current < 0: target += PI / 2
else: target -= PI / 2
- return target + (current - target) * exp(-dt)
+ return target
func find_menu(node: Node) -> Menu:
if node is Menu: return node
diff --git a/client/map/deep_fryer_basket.res b/client/map/deep_fryer_basket.res
index afcb1889..40f1c05d 100644
--- a/client/map/deep_fryer_basket.res
+++ b/client/map/deep_fryer_basket.res
Binary files differ
diff --git a/client/map/items/basket.gd b/client/map/items/basket.gd
index 459d6b81..d90ab25e 100644
--- a/client/map/items/basket.gd
+++ b/client/map/items/basket.gd
@@ -17,12 +17,15 @@ class_name Basket
extends Item
var steam: CPUParticles3D = load("res://map/items/steam.tscn").instantiate()
+var bubbles: CPUParticles3D = load("res://map/items/deep_frying.tscn").instantiate()
func _init(owned_by_: Node3D, contents: Array):
super(owned_by_)
add_child(load("res://map/items/basket.tscn").instantiate())
base.add_child(steam)
-
+ base.add_child(bubbles)
+ base.position.y = .15
+
for i in contents:
match i:
_:
@@ -31,6 +34,7 @@ func _init(owned_by_: Node3D, contents: Array):
func progress(position_: float, speed: float, warn: bool):
super(position_, speed, warn)
steam.emitting = true
+ bubbles.emitting = true
if warn:
steam.color = Color(.2, .2, .2)
else:
@@ -39,6 +43,7 @@ func progress(position_: float, speed: float, warn: bool):
func finish():
super()
steam.emitting = false
+ bubbles.emitting = false
static func base_position() -> Vector3:
return Vector3(0.,0.015, 0.)
diff --git a/client/map/items/basket.tscn b/client/map/items/basket.tscn
index c6f92a50..2fcd336d 100644
--- a/client/map/items/basket.tscn
+++ b/client/map/items/basket.tscn
@@ -5,5 +5,5 @@
[node name="Basket" type="Node3D"]
[node name="Mesh" type="MeshInstance3D" parent="."]
-transform = Transform3D(0.75, 0, 0, 0, 0.75, 0, 0, 0, 0.75, 0, 0, 0)
+transform = Transform3D(-0.75, 0, -6.556708e-08, 0, 0.75, 0, 6.556708e-08, 0, -0.75, 0, 0, 0)
mesh = ExtResource("1_7yj46")
diff --git a/client/map/items/deep_frying.tscn b/client/map/items/deep_frying.tscn
new file mode 100644
index 00000000..81a4ccfb
--- /dev/null
+++ b/client/map/items/deep_frying.tscn
@@ -0,0 +1,26 @@
+[gd_scene load_steps=3 format=3 uid="uid://c2g5ncvn45263"]
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_3xkdk"]
+albedo_color = Color(0.9153118, 0.62961817, 0.44200557, 1)
+roughness = 0.0
+
+[sub_resource type="SphereMesh" id="SphereMesh_iygiy"]
+material = SubResource("StandardMaterial3D_3xkdk")
+radius = 0.1
+height = 0.2
+
+[node name="DeepFrying" type="CPUParticles3D"]
+emitting = false
+mesh = SubResource("SphereMesh_iygiy")
+emission_shape = 6
+emission_ring_axis = Vector3(0, 1, 0)
+emission_ring_height = 0.1
+emission_ring_radius = 0.1
+emission_ring_inner_radius = 0.05
+emission_ring_cone_angle = 90.0
+direction = Vector3(0, 1, 0)
+gravity = Vector3(0, -1, 0)
+initial_velocity_min = 0.2
+initial_velocity_max = 0.4
+scale_amount_min = 0.2
+scale_amount_max = 0.5
diff --git a/client/map/items/item.gd b/client/map/items/item.gd
index bf61966f..ea5b3937 100644
--- a/client/map/items/item.gd
+++ b/client/map/items/item.gd
@@ -20,6 +20,8 @@ const CHECKMARK: PackedScene = preload("uid://bdbw8whs3data")
var owned_by: Node3D
var base: Node3D = Node3D.new()
+var rotation_target: float = 0.
+var position_target: Vector3 = Vector3(0., 0., 0.)
var progress_instance: Progress3D = preload("res://map/progress/progress.tscn").instantiate()
var take_sound: PlayRandom = preload("res://audio/play_random.tscn").instantiate()
@@ -63,12 +65,11 @@ func _process(delta):
var player_owned = owned_by.get_parent().get_parent() is Player
player_owned_timer = player_owned_timer + delta if player_owned else 0.
var anim_speed = 10.0 * exp(player_owned_timer * 3.0) # infinity is fine. G.interpolate can handle it
- position = G.interpolate(position, owned_by.global_position, delta * anim_speed)
- if player_owned: rotation.y = G.interpolate_angle(rotation.y, owned_by.global_rotation.y, delta * anim_speed)
- else: rotation.y = G.interpolate_angle_closest_quarter(rotation.y, owned_by.global_rotation.y, delta * anim_speed)
+ position = G.interpolate(position, position_target, delta * anim_speed)
+ rotation.y = G.interpolate_angle(rotation.y, rotation_target, delta * anim_speed)
if creation_timer != null:
creation_timer += delta * 10.0
- if creation_timer > 1:
+ if creation_timer > 1:
scale = Vector3.ONE
creation_timer = null
else: scale = Vector3.ONE * creation_timer
diff --git a/client/map/tiles/deep_fryer.gd b/client/map/tiles/deep_fryer.gd
index b5951630..82204cb8 100644
--- a/client/map/tiles/deep_fryer.gd
+++ b/client/map/tiles/deep_fryer.gd
@@ -22,5 +22,10 @@ func _init(ctx: TileFactory.TileCC):
super(ctx)
base.add_child(deep_fryer)
+func set_item(i: Item):
+ super(i)
+ if i != null:
+ i.rotation_target = item_base.global_rotation.y + PI
+
static func interact_target() -> Vector3:
return Vector3(0., 0.55, 0.)
diff --git a/client/map/tiles/floor_like.gd b/client/map/tiles/floor_like.gd
index d3da5fe0..228a95e9 100644
--- a/client/map/tiles/floor_like.gd
+++ b/client/map/tiles/floor_like.gd
@@ -13,6 +13,7 @@
# 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/>.
#
+@abstract
class_name FloorLike
extends Tile
diff --git a/client/map/tiles/tile.gd b/client/map/tiles/tile.gd
index 7cf7be9b..9d4d732e 100644
--- a/client/map/tiles/tile.gd
+++ b/client/map/tiles/tile.gd
@@ -77,9 +77,15 @@ func pass_to(tile: Tile):
tile.set_item(i)
func set_item(i: Item):
- if item != null: item.remove()
+ if item != null:
+ if i != null:
+ i.rotation.y = item.rotation.y
+ i.rotation_target = item.rotation_target
+ item.remove()
item = i
- if i != null: i.owned_by = item_base
+ if i != null:
+ i.owned_by = item_base
+ i.position_target = item_base.global_position
func take_item() -> Item:
var i = item
diff --git a/client/player/player.gd b/client/player/player.gd
index 94034352..58ae9732 100644
--- a/client/player/player.gd
+++ b/client/player/player.gd
@@ -166,6 +166,10 @@ func pass_to(player: Player, hfrom: int, hto: int):
player.set_item(i, hto)
func _process(delta):
+ for h in hand.size():
+ if hand[h] != null:
+ hand[h].rotation_target = hand_base[h].global_rotation.y
+ hand[h].position_target = hand_base[h].global_position
_anim_angle = fmod(_anim_angle + delta, TAU)
position_anim = G.interpolate(position_anim, position_, delta * 10)
rotation_anim = G.interpolate_angle(rotation_anim, rotation_, delta * 10)
diff --git a/data/maps/debug.yaml b/data/maps/debug.yaml
index 474a3aec..985697dd 100644
--- a/data/maps/debug.yaml
+++ b/data/maps/debug.yaml
@@ -21,7 +21,7 @@ map:
- "..0123456789ß?Ü........."
- "....................¹..."
- "..⌷fRY.ST™o..X......⌷..."
- - "..s⌷⌷⌷ɷ⌷⌷zz.........²..."
+ - "..s⌷⌷⌷ɷ⌷⌷™z.........²..."
- "................³......."
- "..ppppbpppp............."
- "..ccccɷcccc..'''''''''''"