mirror of
https://github.com/ninjamuffin99/Funkin.git
synced 2025-08-30 18:34:51 +00:00
80 lines
2.9 KiB
Haxe
80 lines
2.9 KiB
Haxe
package funkin.util;
|
|
|
|
import flixel.FlxG;
|
|
import openfl.display.BitmapData;
|
|
import openfl.geom.Matrix;
|
|
import openfl.geom.Point;
|
|
import openfl.geom.Rectangle;
|
|
|
|
class BitmapUtil
|
|
{
|
|
public static function createResultsBar():BitmapData
|
|
{
|
|
final width:Int = Math.ceil(FlxG.width * 1.011);
|
|
final mainBitmap = new BitmapData(width, Math.ceil(width / 8.7), true, 0xFF000000);
|
|
final bitmap = new BitmapData(width, Math.ceil(width / 8.7), true, 0);
|
|
final rect = mainBitmap.rect.clone();
|
|
final matrix = new Matrix();
|
|
|
|
matrix.rotate(-3.8 * Math.PI / 180);
|
|
matrix.translate(-15, 0);
|
|
rect.width -= 15;
|
|
|
|
bitmap.draw(mainBitmap, matrix, rect, true);
|
|
return bitmap;
|
|
}
|
|
|
|
/**
|
|
* Scales the bitmap at a specific position.
|
|
* @param bitmap The original bitmap to scale.
|
|
* @param scale The desired scale for the bitmap part (X Scale only).
|
|
* @param scalePosition The position of where it should scale the bitmap, If null it'll use the middle of the bitmap.
|
|
* @return A new BitmapData scaled at the specified position.
|
|
*/
|
|
public static function scalePart(bitmap:BitmapData, scale:Float, ?scalePosition:Float):BitmapData
|
|
{
|
|
if (scalePosition == null) scalePosition = bitmap.width / 2;
|
|
final scaledPartWidth:Int = Math.ceil(scalePosition * scale);
|
|
final finalBitmap:BitmapData = new BitmapData(Math.ceil(bitmap.width + scalePosition), bitmap.height, true, 0);
|
|
|
|
final matrix:Matrix = new Matrix();
|
|
final rect:Rectangle = bitmap.rect.clone();
|
|
matrix.scale(scale, 1);
|
|
rect.width = scaledPartWidth;
|
|
finalBitmap.draw(bitmap, matrix, rect, true);
|
|
|
|
final rect:Rectangle = bitmap.rect.clone();
|
|
rect.x = scalePosition;
|
|
finalBitmap.copyPixels(bitmap, rect, new Point(scaledPartWidth, 0));
|
|
|
|
return finalBitmap;
|
|
}
|
|
|
|
/**
|
|
* Scales the bitmap by adding a specific width at a specific position.
|
|
* @param bitmap The original bitmap to modify.
|
|
* @param additionalWidth The desired additional width to add to the bitmap.
|
|
* @param scalePosition The position of where it should scale the bitmap, If null it'll use the middle of the bitmap.
|
|
* @return A new BitmapData scaled at the specified position.
|
|
*/
|
|
public static function scalePartByWidth(bitmap:BitmapData, additionalWidth:Float, ?scalePosition:Float):BitmapData
|
|
{
|
|
if (scalePosition == null) scalePosition = bitmap.width / 2;
|
|
final scaledPartWidth:Int = Math.ceil(scalePosition + additionalWidth);
|
|
final scale:Float = scaledPartWidth / scalePosition;
|
|
final finalBitmap:BitmapData = new BitmapData(Math.ceil(bitmap.width + additionalWidth), bitmap.height, true, 0);
|
|
|
|
final matrix:Matrix = new Matrix();
|
|
final rect:Rectangle = bitmap.rect.clone();
|
|
matrix.scale(scale, 1);
|
|
rect.width = scaledPartWidth;
|
|
finalBitmap.draw(bitmap, matrix, rect, true);
|
|
|
|
final rect:Rectangle = bitmap.rect.clone();
|
|
rect.x = scalePosition;
|
|
finalBitmap.copyPixels(bitmap, rect, new Point(scaledPartWidth, 0));
|
|
|
|
return finalBitmap;
|
|
}
|
|
}
|