Code Monkey home page Code Monkey logo

bakka-editor-avalonia's Introduction

If you're here, I recommend you check out MercuryMapper instead. :)


BAKKA Editor Avalonia Port Fork

Download Latest Stable Build <-- click this link if you're a normal person that just wants to run this thing

Download Latest Nightly Build <-- click this link if you want to see (potentially) cool new stuff that's still cooking in the oven

A Marvelously simple and scuffed editor, but this time it's cross-platform (tested on Windows, Linux, and macOS)! Currently mostly up-to-date with upstream v2.1.8.

For the most part, this is a port of the Windows Forms code, with "MVVM" in place to connect the dots into the old Windows Forms parts. It's horrible. There is some work to slowly start moving things to MVVM. If you are a developer, consider this caution tape in text form. Contributions/PRs are welcome and they will be reviewed (and merged) ASAP.

Non-Upstream Features

  • Hardware-accelerated rendering and uncapped FPS (with a bunch of optimizations for performance)
  • Built-in FLAC support
  • Badly-implemented and very, very approximate hitsounds
  • Dark mode, thanks to FluentAvalonia
  • You can actually type in the number boxes (is this a feature?)
  • Checks and prompts for a "End of Chart" note before saving
  • Customizable note colors
  • Hold Note baking (smooth out holds to be more accurate)
  • Handles hi-speed gimmicks accurately
  • Slide note arrows
  • Cursor depth (change which beat notes are placed on)
  • Optional cursor-following (cursor tracking mode) for note placing
  • Highly WIP localization support - do not translate yet!

Cross Platform Code Warnings

This depends on ManagedBass. Since BASS doesn't have WASM support, the Web project is just the default Avalonia template. It might be as simple as adding another sound engine (IBakkaSoundEngine).

Neither the iOS nor Android projects function properly at this time. iOS support was worked on long ago, but is mostly nonfunctional today.

Credits / Attribution

  • Goatgarien - Wrote the original editor and gave lots of support
  • Original editor contributors
  • Yasu3D - literally rewrote all the rendering stuff like 3 times to make it much more game-accurate
  • CardBreaker - cursor depth, active cursor tracking
  • kevqiu - ported code from upstream PR #17 (Notes on Beat list view)
  • yellowberryHN - ported code from upstream PR #18 (Place Note on Drag)
  • All the people who reported bugs and feedback

bakka-editor-avalonia's People

Contributors

cardbreaker avatar raymonf avatar yasu3d avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

bakka-editor-avalonia's Issues

Editing Gimmicks doesn't change anything

Steps to reproduce:

  • Place Gimmick
  • Edit Gimmick
    -> Gimmick values like Measure/Beat, Hi-Speed, BPM, etc. will not change.

Affects all gimmick types as far as I can tell. Tested with Hi-Speed, Time Sig and BPM.

Update labels to correct values when locale changes

Right now, Avalonia will reset the text to the default value in the bound dynamic resource. When we get a locale change, we need to send out an event that updates all the labels on the view to the correct locale and values.

Ideally, we should refactor this all to move the logic that belongs in the view model out of the view layer.

Undoing a Hold End note is wonky

  • place hold start

  • place hold segment

  • place hold end

  • undo

  • place hold segment

  • place hold end

Result is:
start - segment - end - end

Intended result should be:
start - segment - segment - end

Cause:
If you end a hold and undo, the End Hold Checkbox appears unchecked, but the Current Note to be placed "Current Selection" is still an End Hold.

Mouse position based cursor/note placement

I want to look into a more intuitive mouse position based cursor instead of the slider based one. Discussion is welcome. I plan to play around with the idea in my free time. I have the following thoughts about it:

  • Cursor should actively follow the mouse position when hovered over the circle view.
  • Single click should add a note with the cursor size and position.
  • Click and hold should increase/decrease cursor size as it does now. Release should place the note. Right click while holding left click can cancel placement but retain cursor size changes.
  • Some may still prefer the slider method. This alternate behavior could be a togglable setting.
  • With an actively moving cursor, it may be tough to remember where you last placed a note in the previous beat. My proposed solution is to add an extra ring outside the main ring. This ring is only visible in editor mode. Starting playback will hide it. Alternatively, we could just toggle the outer ring in the View settings. This outer ring will show the last beat that had notes (and some indicator about how far away it was?)

Componentize main view parts

The main view should not have all the junk that it does in it.

Eventually, pieces should be moved to individual controls/components.

Color palette presets

  • Quick apply all colors for a preset
    • Original (game)
    • BAKKA
    • etc?
  • User-defined palettes
    • Creating custom palettes
    • Saving palettes
    • Loading palettes

BUG - HiSpeed model lags behind view by 1 update

If you increase/decrease hispeed, the actual value will lag behind by 1 click.
So increasing it from 1.5 to 1.55 does nothing (skCircle.HiSpeed stays 1.5)
Increasing it from 1.55 to 1.6 changes skCircle.HiSpeed to 1.55.

Tooltips :)

Was suggested by @SourRail in person earlier today, could definitely be useful to explain what some buttons do.

Avalonia Tooltips look quite straightforward, Ill handle implementation soon if ray's too busy

Make all gimmick **notes** visible

Hi-Speed, Stop, Reverse and Mask notes aren't actually visible in the editor.
Would be nice if you could actually see them after placing.

Maybe have an option to show or hide all gimmick notes?

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.