mirror of
https://git.xeondev.com/LR/S.git
synced 2026-03-21 23:22:21 +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 ChangeSceneBegin = struct {};
|
||||||
|
|
||||||
|
pub const CurrentSceneModified = struct {};
|
||||||
|
|
||||||
pub const CharBagTeamModified = struct {
|
pub const CharBagTeamModified = struct {
|
||||||
team_index: usize,
|
team_index: usize,
|
||||||
modification: enum {
|
modification: enum {
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ pub fn onSceneSetTrackPoint(
|
|||||||
assets: *const Assets,
|
assets: *const Assets,
|
||||||
scene: Player.Component(.scene),
|
scene: Player.Component(.scene),
|
||||||
change_scene_tx: logic.event.Sender(.change_scene_begin),
|
change_scene_tx: logic.event.Sender(.change_scene_begin),
|
||||||
|
cur_scene_modified_tx: logic.event.Sender(.current_scene_modified),
|
||||||
) !void {
|
) !void {
|
||||||
const log = std.log.scoped(.scene_set_track_point);
|
const log = std.log.scoped(.scene_set_track_point);
|
||||||
|
|
||||||
@@ -45,6 +46,7 @@ pub fn onSceneSetTrackPoint(
|
|||||||
validation_config.position.z,
|
validation_config.position.z,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
try cur_scene_modified_tx.send(.{});
|
||||||
try change_scene_tx.send(.{});
|
try change_scene_tx.send(.{});
|
||||||
|
|
||||||
log.info(
|
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