Git Product home page Git Product logo

Comments (3)

numberlesstim avatar numberlesstim commented on August 15, 2024

Further, if in the above steps you instead move the root tank, it will both remove the second tank and move the root tank back to the original place. Maybe that is a better example.

from kspcommunityfixes.

gotmachine avatar gotmachine commented on August 15, 2024

So...

It's not really a "merging" of steps, but more an oversight of the consequences of inverting the undo/redo logic.

Basically, what the patch does is invert the core undo/redo logic from capturing state after events to capturing it before events.

However, I only moved at which point the state is captured for attach/detach events, not for offset/rotate events, which means you end up with twice the same state captured (in your reproduction steps, you will notice that you have to undo twice at step 3 for step 4 to happen), and the state before offsetting/rotating not being captured at all.

Now that I'm looking at it, there are actually more events that result in the same issue (same repro steps, just change step 2 with the following actions) :

  • Switching between part variants
  • Removing parts from symmetry
  • Adding/removing part actions to action groups, and resetting part actions on the selected part
  • Using the reset button of the stage manager

This will need quite a bit of work to fix them all. Basically, we need to move the call to EditorLogic.SetBackup() before the actions take place (instead of after).

  • Offset/Rotate gizmo
    The backup is created from callbacks called from the gizmo components OnMoveEnd / OnRotateEnd methods, triggered when the gizmo is released. The gizmos do have a On*Start method, but unfortunately they aren't hooked to a callback, and those are generic components that can potentially be used elsewhere. We can still patch those methods, and compare the gizmo instance to the EditorLogic.gizmo* fields.
  • Switching between part variants
    Requires moving the SetBackup() call at the beginning of the ModulePartVariants.onVariantChanged method
    Doesn't work because the field is already set when ModulePartVariants.onVariantChanged, so the changes will be saved to the backup anyway. Alternatively, we patch UIPartActionVariantSelector.SelectVariant()
  • Removing parts from symmetry
    Requires moving the SetBackup() call at the beginning of the Part.RemoveFromSymmetry method
  • Adding/removing part actions to action groups, and resetting part actions on the selected part
    Requires moving the SetBackup() call at the beginning of the EditorActionGroups ResetPart, AddActionToGroup and RemoveActionFromGroup methods
  • Using the reset button of the stage manager
    Requires moving the SetBackup() call at the beginning of the StageManager.Reset method
    Actually after further testing, it seems the backup is already created before the action, so nothing to fix here

from kspcommunityfixes.

gotmachine avatar gotmachine commented on August 15, 2024

Fix released in 1.35.0

from kspcommunityfixes.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.