I like the part when the bookmark said its color picker time and then started coloring all over the place

This commit is contained in:
Furo
2024-11-28 18:03:19 +01:00
parent eefbb97d5a
commit 66953e4609
6 changed files with 199 additions and 10 deletions
+1
View File
@@ -61,6 +61,7 @@ typedef ChartNote = {
typedef ChartBookmark = {
var time:Float;
var name:String;
var color:String;
}
typedef ChartEvent = {
+9
View File
@@ -1046,6 +1046,15 @@ final class CoolUtil
}
return result;
}
/**
* Gets the luminance of the given color
* @param color Color to use
* @return Number between 0 and 1
*/
public static function getLuminance(color:FlxColor):Float {
return (0.2126*color.redFloat + 0.7152*color.greenFloat + 0.0722*color.blueFloat);
}
}
/**
+20 -9
View File
@@ -18,6 +18,7 @@ import funkin.editors.ui.UIContextMenu.UIContextMenuOptionSpr;
import funkin.editors.ui.UIState;
import funkin.editors.ui.UITopMenu.UITopMenuButton;
import haxe.Json;
import flixel.util.FlxColor;
class Charter extends UIState {
public static var __song:String;
@@ -1729,13 +1730,19 @@ class Charter extends UIState {
}
function _bookmarks_add(_) {
var currentBookmarks:Array<ChartBookmark> = getBookmarkList();
var newBookmarks:Array<ChartBookmark> = getBookmarkList();
newBookmarks.push({time: curStepFloat, name: "New Bookmark"});
PlayState.SONG.bookmarks = newBookmarks;
updateBookmarks();
undos.addToUndo(CEditBookmarks(currentBookmarks, newBookmarks));
FlxG.state.openSubState(new CharterBookmarkCreation(curStepFloat, function(success:Bool, name:String, color:FlxColor, daStep:Float)
{
if (success)
{
var currentBookmarks:Array<ChartBookmark> = getBookmarkList();
var newBookmarks:Array<ChartBookmark> = getBookmarkList();
newBookmarks.push({time: daStep, name: name, color: color.toWebString()});
PlayState.SONG.bookmarks = newBookmarks;
updateBookmarks();
undos.addToUndo(CEditBookmarks(currentBookmarks, newBookmarks));
}
}));
}
function _bookmarks_edit_list(_)
FlxG.state.openSubState(new CharterBookmarkList()); //idk why its FlxG.state but it looks so off lmfao
@@ -1763,7 +1770,8 @@ class Charter extends UIState {
__bookmarkObjects.clear();
for (b in getBookmarkList())
{
var bookmarkcolor = 0xff911dd9;//PURPLE TO SEE IT BETTER
var bookmarkcolor:FlxColor = b.color != null ? FlxColor.fromString(b.color) : 0xff9d00ff;
var luminance = CoolUtil.getLuminance(bookmarkcolor);
var sprites = [];
for (str in strumLines.members)
@@ -1777,11 +1785,14 @@ class Charter extends UIState {
sprites.push(bookmarkspr);
}
var bookmarkText = new UIText(strumLines.members[0].x + 4, 0, 400, b.name, 15, bookmarkcolor);
var bookmarkText = new UIText(strumLines.members[0].x + 4, 0, 400, b.name, 15, bookmarkcolor, true);
bookmarkText.y = sprites[0].y - (bookmarkText.height + 2);
bookmarkText.camera = charterCamera;
add(bookmarkText);
if (luminance < 0.5)
bookmarkText.borderColor = 0x88FFFFFF;
__bookmarkObjects.push([sprites, bookmarkText]);
}
@@ -0,0 +1,65 @@
package funkin.editors.charter;
import flixel.util.FlxColor;
import flixel.math.FlxPoint;
import funkin.backend.chart.ChartData.ChartBookmark;
class CharterBookmarkCreation extends UISubstateWindow {
public var saveButton:UIButton;
public var closeButton:UIButton;
public var textBox:UITextBox;
public var colorPicker:UICompactColorwheel;
var callback:Bool->String->FlxColor->Float->Void;
var bookmarkStep:Float = 0;
override public function new(step:Float, close:Bool->String->FlxColor->Float->Void)
{
super();
winWidth = 320;
winHeight = 250;
winTitle = 'Creating New Bookmark';
callback = close;
bookmarkStep = step;
}
public override function create() {
FlxG.sound.music.pause();
Charter.instance.vocals.pause();
function addLabelOn(ui:UISprite, text:String):UIText {
var text:UIText = new UIText(ui.x, ui.y - 24, 0, text);
ui.members.push(text);
return text;
}
super.create();
textBox = new UITextBox(windowSpr.x + 20, windowSpr.y + 70, "New Bookmark", 276);
textBox.antialiasing = true;
add(textBox);
addLabelOn(textBox, "Bookmark Name:");
colorPicker = new UICompactColorwheel(textBox.x, textBox.y + textBox.bHeight + 34, flixel.util.FlxColor.RED);
add(colorPicker);
addLabelOn(colorPicker, "Bookmark Color:");
saveButton = new UIButton(windowSpr.x + windowSpr.bWidth - 20 - 125, windowSpr.y + windowSpr.bHeight - 16 - 32, "Save & Close", function() {
callback(true, textBox.label.text, colorPicker.curColor, bookmarkStep);
close();
}, 125);
add(saveButton);
closeButton = new UIButton(saveButton.x - 20, saveButton.y, "Close", function() {
callback(false, "", FlxColor.TRANSPARENT, -1);
close();
}, 125);
add(closeButton);
closeButton.color = 0xFFFF0000;
closeButton.x -= closeButton.bWidth;
}
}
@@ -48,7 +48,7 @@ class CharterBookmarkList extends UISubstateWindow {
public function saveList() {
var oldList:Array<ChartBookmark> = Charter.instance.getBookmarkList();
var newList:Array<ChartBookmark> = [for (btn in bookmarkList.buttons.members) {time: btn.bookmark.time, name: btn.textBox.label.text}];
var newList:Array<ChartBookmark> = [for (btn in bookmarkList.buttons.members) {time: btn.bookmark.time, name: btn.textBox.label.text, color: btn.bookmark.color}];
PlayState.SONG.bookmarks = newList;
Charter.instance.updateBookmarks();
@@ -0,0 +1,103 @@
package funkin.editors.ui;
import flixel.util.FlxColor;
import flixel.math.FlxPoint;
import funkin.editors.ui.UIColorwheel.UIColorWheelSelector;
using flixel.util.FlxSpriteUtil;
class UICompactColorwheel extends UISliceSprite {
var colorSlider:FlxSprite;
var colorSliderSelector:UIColorWheelSelector;
var whiteColorButton:UIButton;
public var curColor:Null<FlxColor>;
public var curColorString:String = "#FFFFFF";
public var hue:Float;
public function new (x:Float, y:Float, ?color:Int) {
super(x, y, Std.int((12.5 * 3) + 116), Std.int((12.5 * 2) + (16)), 'editors/ui/inputbox');
curColor = cast color;
hue = curColor.hue;
colorSlider = new FlxSprite(x + 12.5, y + 12.5).makeGraphic(100, 16, FlxColor.TRANSPARENT);
colorSlider.drawRoundRect(0, 0, 100, 16, 10, 10, FlxColor.WHITE);
colorSlider.pixels.lock();
for (pixelx in 0...Std.int(colorSlider.width)) {
var color:Int = FlxColor.fromHSB(pixelx / (colorSlider.width-1) * 360, 1, 1);
for (pixely in 0...Std.int(colorSlider.height))
if (colorSlider.pixels.getPixel32(pixelx, pixely) != FlxColor.TRANSPARENT) colorSlider.pixels.setPixel32(pixelx, pixely, color);
}
colorSlider.pixels.unlock();
whiteColorButton = new UIButton(colorSlider.x + colorSlider.width + 12.5, colorSlider.y, null, () -> {
setColor(FlxColor.WHITE);
}, 16, 16);
whiteColorButton.colorTransform.color = FlxColor.WHITE;
colorSliderSelector = new UIColorWheelSelector(colorSlider.x, colorSlider.y);
colorSlider.antialiasing = true;
for (item in [colorSlider, colorSliderSelector, whiteColorButton])
members.push(item);
updateColor(false);
}
inline function updateColorSliderPickerSelector()
colorSliderSelector.selector.setPosition(colorSlider.x + (hue / 360 * (colorSlider.width-1)) - 8, colorSlider.y);
inline function updateColorSliderMouse(mousePos:FlxPoint)
hue = (mousePos.x / colorSlider.width) * 360;
function setColor(newColor:FlxColor) {
this.color = curColor = colorSliderSelector.curColor = newColor;
}
public function updateColor(checkChanged:Bool = true) {
if(checkChanged) colorChanged = true;
setColor(FlxColor.fromHSB(hue, 1, 1));
updateColorSliderPickerSelector();
curColorString = curColor.toWebString();
}
// For Character Editor
public var colorChanged:Bool = false;
// Make the colorwheel feel better
static inline var hitBoxExtenstion:Float = 8;
var selectedSprite = null;
public override function update(elapsed:Float) {
var mousePos = FlxG.mouse.getScreenPosition(__lastDrawCameras[0], FlxPoint.get());
if (hovered && FlxG.mouse.justPressed) {
for (sprite in [colorSlider]) {
var spritePos:FlxPoint = sprite.getScreenPosition(FlxPoint.get(), __lastDrawCameras[0]);
if (FlxMath.inBounds(mousePos.x, spritePos.x - (hitBoxExtenstion/2), spritePos.x - (hitBoxExtenstion/2) + (sprite.width + hitBoxExtenstion)) && FlxMath.inBounds(mousePos.y, spritePos.y - (hitBoxExtenstion/2), spritePos.y - (hitBoxExtenstion/2) + (sprite.height + hitBoxExtenstion))) {
selectedSprite = sprite;
break;
}
}
}
if (selectedSprite != null) {
var spritePos:FlxPoint = selectedSprite.getScreenPosition(FlxPoint.get(), __lastDrawCameras[0]);
mousePos -= FlxPoint.weak(spritePos.x, spritePos.y);
mousePos.set(CoolUtil.bound(mousePos.x, 0, selectedSprite.width), CoolUtil.bound(mousePos.y, 0, selectedSprite.height));
if (selectedSprite == colorSlider) updateColorSliderMouse(mousePos);
updateColor();
spritePos.put();
if (FlxG.mouse.justReleased) selectedSprite = null;
}
mousePos.put();
super.update(elapsed);
}
}