summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-06-27 17:53:01 +0200
committermetamuffin <metamuffin@disroot.org>2024-06-27 17:53:01 +0200
commitb6713492c6f571ba9897532f129924f438909a07 (patch)
tree44561d18026ba0bb5ca7a357a6bb007b0637f44e
parent5b34f8a894e4214df9efd6d5911b8be2d1c4a8be (diff)
downloadhurrycurry-b6713492c6f571ba9897532f129924f438909a07.tar
hurrycurry-b6713492c6f571ba9897532f129924f438909a07.tar.bz2
hurrycurry-b6713492c6f571ba9897532f129924f438909a07.tar.zst
fade to black while baking
-rw-r--r--client/game.gd37
-rw-r--r--client/game.tscn1
-rw-r--r--client/map/map.gd7
-rw-r--r--client/menu/menu_manager.tscn1
-rw-r--r--client/menu/scene_transition.gd23
-rw-r--r--client/multiplayer.gd4
-rw-r--r--server/src/game.rs2
-rw-r--r--server/src/protocol.rs3
-rw-r--r--test-client/protocol.ts1
9 files changed, 53 insertions, 26 deletions
diff --git a/client/game.gd b/client/game.gd
index b36b40a0..756ff978 100644
--- a/client/game.gd
+++ b/client/game.gd
@@ -21,22 +21,20 @@ extends Node3D
@onready var mp: Multiplayer = $Multiplayer
@onready var map: Map = $Map
@onready var marker: Marker = $Marker
-
-var marker_target = Vector3(0,0,0)
+@onready var environment = $WorldEnvironment
+@onready var transition: SceneTransition = $SceneTransition
var player_id: int = -1
var item_names: Array = []
+var item_index_by_name: Dictionary = {}
var tile_names: Array = []
-var tile_id_by_name: Dictionary = {}
+var tile_index_by_name: Dictionary = {}
var tile_collide: Array = []
var tile_interact: Array = []
-var item_idx_from_name: Dictionary = {}
-
+var marker_target = Vector3(0,0,0)
var players := {}
-@onready var environment = $WorldEnvironment
-
func _ready():
if !Global.on_vulkan():
environment.environment.tonemap_exposure = 0.5
@@ -58,13 +56,13 @@ func _ready():
tile_names = tile_names_
tile_collide = tile_collide_
tile_interact = tile_interact_
- tile_id_by_name = {}
+ tile_index_by_name = {}
for id in tile_names.size():
- tile_id_by_name[tile_names[id]] = id
+ tile_index_by_name[tile_names[id]] = id
- item_idx_from_name.clear()
+ item_index_by_name.clear()
for i in range(item_names.size()):
- item_idx_from_name[item_names[i]] = i
+ item_index_by_name[item_names[i]] = i
)
await mp.init
@@ -83,7 +81,7 @@ func _ready():
)
mp.set_tile.connect(set_tile)
- mp.remove_tile.connect(set_tile)
+ mp.remove_tile.connect(func (pos): map.clear_tile(pos))
mp.position.connect(func(player: int, pos: Vector2, rot: float):
var player_instance: Player = players[player]
@@ -166,18 +164,29 @@ func _ready():
mp.send_join(Global.profile["username"], Global.profile["character"])
+ mp.set_ingame.connect(func (state):
+ if state:
+ await transition.fade_out()
+ map.gi_bake()
+ await transition.fade_in()
+ map.autobake = true
+ else:
+ map.autobake = false
+ await transition.fade_out()
+ )
+
func _process(delta):
marker.position = lerp(marker.position, marker_target, delta * 40.0)
func get_tile_collision(pos: Vector2i) -> bool:
var t = map.get_tile_name(pos)
if t == null: return true
- else: return tile_collide[tile_id_by_name[t]]
+ else: return tile_collide[tile_index_by_name[t]]
func get_tile_interactive(pos: Vector2i) -> bool:
var t = map.get_tile_name(pos)
if t == null: return false
- else: return tile_interact[tile_id_by_name[t]]
+ else: return tile_interact[tile_index_by_name[t]]
func set_tile(tile: Vector2i, kind = null, neighbors = null):
if neighbors != null: neighbors = neighbors.map(func (x): return tile_names[x] if x != null else null)
diff --git a/client/game.tscn b/client/game.tscn
index ff6b8da5..7c90d833 100644
--- a/client/game.tscn
+++ b/client/game.tscn
@@ -44,5 +44,6 @@ visible = false
[node name="SceneTransition" parent="." instance=ExtResource("5_yg6cl")]
ingame = true
+auto_fade_in = false
[node name="Map" parent="." instance=ExtResource("6_prg6t")]
diff --git a/client/map/map.gd b/client/map/map.gd
index 32b267d7..7e09e969 100644
--- a/client/map/map.gd
+++ b/client/map/map.gd
@@ -2,7 +2,7 @@ class_name Map
extends Node3D
var tile_by_pos: Dictionary = {}
-var baking = false
+var autobake = false
func get_tile_name(pos: Vector2i):
var e = tile_by_pos.get(str(pos))
@@ -18,10 +18,10 @@ func set_tile(pos: Vector2i, name_: String, neighbors: Array = [null,null,null,n
add_child(tile)
tile.position = Vector3(pos.x, 0, pos.y)
tile_by_pos[str(pos)] = [pos, name_, tile, neighbors]
- if not baking: voxelgi_timer.start(1)
+ if autobake: voxelgi_timer.start(1)
return tile
-func remove_tile_if_exists(pos: Vector2i):
+func clear_tile(pos: Vector2i):
var tile = get_tile_instance(pos)
if tile == null: return
if tile.item != null: tile.item.queue_free()
@@ -33,7 +33,6 @@ func remove_tile_if_exists(pos: Vector2i):
@onready var voxelgi: VoxelGI = $VoxelGI
func _ready():
- if baking: return
voxelgi_timer.connect("timeout", gi_bake)
func gi_bake():
diff --git a/client/menu/menu_manager.tscn b/client/menu/menu_manager.tscn
index 18e13282..56cc6442 100644
--- a/client/menu/menu_manager.tscn
+++ b/client/menu/menu_manager.tscn
@@ -32,4 +32,3 @@ layout_mode = 1
[node name="SceneTransition" parent="." instance=ExtResource("6_p4u45")]
visible = false
layout_mode = 1
-auto_fade_in = false
diff --git a/client/menu/scene_transition.gd b/client/menu/scene_transition.gd
index 30c7e1df..66b6c4e4 100644
--- a/client/menu/scene_transition.gd
+++ b/client/menu/scene_transition.gd
@@ -16,20 +16,29 @@
class_name SceneTransition
extends ColorRect
-@onready var anim = $animation
+@onready var anim: AnimationPlayer = $animation
@export var ingame = false
@export var auto_fade_in := true
+var black = true
+var fading = false
+
func _ready():
- if auto_fade_in:
- fade_in()
- else:
- visible = false
+ visible = true
+ if auto_fade_in: fade_in()
func fade_in():
- visible = true
- anim.play("fade_in")
+ if black: anim.play("fade_in"); fading = true
+ black = false
+ if fading: await anim.animation_finished
+ fading = false
+
+func fade_out():
+ if not black: anim.play("fade_out"); fading = true
+ black = true
+ if fading: await anim.animation_finished
+ fading = false
func transition_to(path: String):
await out()
diff --git a/client/multiplayer.gd b/client/multiplayer.gd
index 0d9697e8..ecb987d6 100644
--- a/client/multiplayer.gd
+++ b/client/multiplayer.gd
@@ -41,6 +41,7 @@ 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)
+signal set_ingame(state: bool)
signal connection_closed(reason: String)
@@ -164,6 +165,9 @@ func handle_packet(bytes: PackedByteArray):
push_error("neither text nor item provided")
else:
emit_signal("clear_message", player)
+ "set_ingame":
+ var state = decoded["state"]
+ emit_signal("set_ingame", state)
"error":
var message = decoded["message"]
push_warning("server error: %s" % message)
diff --git a/server/src/game.rs b/server/src/game.rs
index 4cb5c450..23900559 100644
--- a/server/src/game.rs
+++ b/server/src/game.rs
@@ -79,6 +79,7 @@ impl Game {
}
fn unload(&mut self) {
+ self.packet_out.push_back(PacketC::SetIngame { state: false });
for (id, _) in self.players.drain() {
self.packet_out.push_back(PacketC::RemovePlayer { id })
}
@@ -196,6 +197,7 @@ impl Game {
.map(|d| d.completed)
.unwrap_or_default(),
});
+ out.push(PacketC::SetIngame { state: true });
out
}
diff --git a/server/src/protocol.rs b/server/src/protocol.rs
index 92e2a639..16c379b9 100644
--- a/server/src/protocol.rs
+++ b/server/src/protocol.rs
@@ -134,6 +134,9 @@ pub enum PacketC {
demands_failed: usize,
demands_completed: usize,
},
+ SetIngame {
+ state: bool,
+ },
Error {
message: String,
},
diff --git a/test-client/protocol.ts b/test-client/protocol.ts
index 41ab518d..ba6a630c 100644
--- a/test-client/protocol.ts
+++ b/test-client/protocol.ts
@@ -49,6 +49,7 @@ export type PacketC =
| { type: "update_map", tile: Vec2, kind: TileIndex | null, neighbors: [TileIndex | null] } // A map tile was changed
| { type: "communicate", player: PlayerID, message?: Message } // A player wants to communicate something, message is null when cleared
| { type: "score", demands_failed: number, demands_completed: number, } // Supplies information for score OSD
+ | { type: "set_ingame", state: boolean } // Set to false when entering the game or switching maps
| { type: "error", message?: Message } // Your client did something wrong.
export type Message =