Nexus-Mods / NexusMods.App

Home of the development of the Nexus Mods App
https://nexus-mods.github.io/NexusMods.App/
GNU General Public License v3.0
884 stars 44 forks source link

As a user, I want to apply changes to my loadout #421

Open Greg-Nexus opened 1 year ago

Greg-Nexus commented 1 year ago

User story

As a user

I want to apply changes to my loadout

So that I can launch my game with the loadout applied

Requirements

Implement the GUI for applying loadout changes.

For the purposes of this issue, a simple 'Apply' button on the UI will suffice.

Design

Design issue: #994

DOD

Scenario 1

Given I am using the App to manage a game (e.g. Skyrim)

When I make changes to the mods for the game\ And use the 'Apply' button on the UI

Then those changes are saved

Epic:

Al12rs commented 1 year ago

@Greg-Nexus milestone 1 mentions applying mod and running the game. There is currently no way to trigger the apply from the UI. So this issue probably needs adding there. (Running the game is also missing btw).

I would suggest for milestone 1 a simple apply button under the Run button. UI/UX to be improved for future milestones. Automatic apply would both require more effort and be quite inconvenient for developers during everyday app development/testing.

Greg-Nexus commented 1 year ago

@captainsandypants Would you be able to update this issue with a design?

Al12rs commented 11 months ago

Some more context for how the App works following up on meeting, with timing information:

General data

Mod DL archives sizes:

Can be from 1kb to ~3GB. These aren't terribly uncommon for popular games, especially older ones (Textures).

Disk speeds:

App architecture

This is how a mod gets managed by the app:

Apply considerations

Since the disk isn't touched until an Apply operation is completed, users could get confused by not seeing the mod files in the game folder after a mod was installed and enabled. UI should make the need for Apply operation evident.

There are two main ways Apply operation could be performed:

We want to support both ways, through a user setting.

In both cases, during Apply operation the UI should remain unlocked. Users should be able to continue making new changes. This is possible since the changes are applied to new versions of the Loadout in memory, not the Old Loadout that is still Applying.

Apply operations should be cancellable.

Users should be able to queue multiple Apply operations. The maximum queue length is 2, in progress and next. After the second one is queued, subsequent applies simply replace the second queued item since they would overrule it anyways.

While cancelling the first one might seem like a good idea, this isn't likely to actually be useful as rollback of all changes already made to the disk is likely take as much time as it took to apply them. Also cancel of Apply is likely to be more error prone than most operations.

Importance of good Apply design:

The fact that the App requires this long Apply operation could be considered the main weakness of the App when compared to other mod managers.

Vortex Deployment phase just writes some links, which is much faster than copying over files, vortex could honestly be faster than it is doing this. MO2 doesn't have any kind of deployment whatsoever and all operations are pretty instant, there is just a small indexing delay when starting the game, which is only noticeable for larger setups.

This big Apply overhead is the main downside of installing files directly to the game folder instead of using links or Virtual File System solutions. The constant delay and loading could put people off using the App, especially if they come from other managers that don't have this issue. This is why having a good UI solution for this is important.

Operations that require an apply before changes are visible to the game:

Al12rs commented 11 months ago

@captainsandypants @Greg-Nexus See above for some details on Apply operations after our meeting yesterday.

Al12rs commented 7 months ago

Possible states for apply button on a loadout are a combination of these:

We will also want in the future: