mirror of
https://git.xeondev.com/LR/S.git
synced 2026-03-22 15:42:39 +01:00
feat(scene): implement saving for scene component
Keep in mind that the movement itself isn't acknowledged by the server yet. However, teleport transitions are now persistent.
This commit is contained in:
@@ -2,6 +2,8 @@ pub const Login = struct {};
|
||||
|
||||
pub const ChangeSceneBegin = struct {};
|
||||
|
||||
pub const CurrentSceneModified = struct {};
|
||||
|
||||
pub const CharBagTeamModified = struct {
|
||||
team_index: usize,
|
||||
modification: enum {
|
||||
|
||||
@@ -11,6 +11,7 @@ pub fn onSceneSetTrackPoint(
|
||||
assets: *const Assets,
|
||||
scene: Player.Component(.scene),
|
||||
change_scene_tx: logic.event.Sender(.change_scene_begin),
|
||||
cur_scene_modified_tx: logic.event.Sender(.current_scene_modified),
|
||||
) !void {
|
||||
const log = std.log.scoped(.scene_set_track_point);
|
||||
|
||||
@@ -45,6 +46,7 @@ pub fn onSceneSetTrackPoint(
|
||||
validation_config.position.z,
|
||||
};
|
||||
|
||||
try cur_scene_modified_tx.send(.{});
|
||||
try change_scene_tx.send(.{});
|
||||
|
||||
log.info(
|
||||
|
||||
@@ -36,3 +36,31 @@ pub fn saveCharBagTeams(
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
pub fn saveCurrentScene(
|
||||
_: logic.event.Receiver(.current_scene_modified),
|
||||
scene: Player.Component(.scene),
|
||||
player_id: logic.World.PlayerId,
|
||||
io: Io,
|
||||
) !void {
|
||||
const data_dir = fs.persistence.openPlayerDataDir(io, player_id.uid.view()) catch |err| switch (err) {
|
||||
error.Canceled => |e| return e,
|
||||
else => |e| {
|
||||
log.err(
|
||||
"failed to open data dir for player with uid {s}: {t}",
|
||||
.{ player_id.uid.view(), e },
|
||||
);
|
||||
return;
|
||||
},
|
||||
};
|
||||
|
||||
defer data_dir.close(io);
|
||||
|
||||
fs.persistence.saveSceneComponent(io, data_dir, scene.data) catch |err| switch (err) {
|
||||
error.Canceled => |e| return e,
|
||||
else => |e| {
|
||||
log.err("save failed: {t}", .{e});
|
||||
return;
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user