Skip to content

Commit

Permalink
add setCharFrame + cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
Geokureli committed Feb 16, 2024
1 parent 976e608 commit 4308c1c
Showing 1 changed file with 41 additions and 40 deletions.
81 changes: 41 additions & 40 deletions flixel/graphics/frames/FlxBitmapFont.hx
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ class FlxBitmapFont extends FlxFramesCollection
throw 'Invalid font data!';
}

font.addCharFrame(char.id, frame, FlxPoint.get(char.xoffset, char.yoffset), char.xadvance);
font.addCharFrame(char.id, frame, FlxPoint.weak(char.xoffset, char.yoffset), char.xadvance);

if (char.id == SPACE_CODE)
{
Expand Down Expand Up @@ -266,24 +266,13 @@ class FlxBitmapFont extends FlxFramesCollection
var frameWidth:Int = Std.int(frame.frame.width);
var frameHeight:Int = Std.int(frame.frame.height);
var letterIdx:Int = 0;
var charCode:Int;
var numLetters:Int = letters.uLength();
var rect:FlxRect;
var offset:FlxPoint;
var xAdvance:Int;

var cy:Int = 0;
var cx:Int;

var gx:Int;
var gy:Int;
var gw:Int;
var gh:Int;

while (cy < frameHeight && letterIdx < numLetters)
{
var rowHeight:Int = 0;
cx = 0;
var cx = 0;

while (cx < frameWidth && letterIdx < numLetters)
{
Expand All @@ -293,8 +282,8 @@ class FlxBitmapFont extends FlxFramesCollection
if (bmd.getPixel(Std.int(p.x), Std.int(p.y)) != cast globalBGColor)
{
// found non bg pixel
gx = cx;
gy = cy;
var gx = cx;
var gy = cy;

p.setTo(gx, gy);
transformPoint(p, frame);
Expand All @@ -317,15 +306,14 @@ class FlxBitmapFont extends FlxFramesCollection
transformPoint(p, frame);
}

gw = gx - cx;
gh = gy - cy;
final gw = gx - cx;
final gh = gy - cy;

charCode = letters.uCharCodeAt(letterIdx);
rect = FlxRect.get(cx, cy, gw, gh);
offset = FlxPoint.get(0, 0);
xAdvance = gw;
final charCode = letters.uCharCodeAt(letterIdx);
final rect = FlxRect.get(cx, cy, gw, gh);
final xAdvance = gw;

font.addCharFrame(charCode, rect, offset, xAdvance);
font.addCharFrame(charCode, rect, xAdvance);

if (charCode == SPACE_CODE)
{
Expand Down Expand Up @@ -404,7 +392,7 @@ class FlxBitmapFont extends FlxFramesCollection
* @param spacing Spaces between characters in the font set. Default is `null` which means no spaces.
* @return Generated bitmap font object.
*/
public static function fromMonospace(source:FlxBitmapFontGraphicAsset, ?letters:String, charSize:FlxPoint, ?region:FlxRect,
public static function fromMonospace(source:FlxBitmapFontGraphicAsset, ?letters:UnicodeString, charSize:FlxPoint, ?region:FlxRect,
?spacing:FlxPoint):FlxBitmapFont
{
var graphic:FlxGraphic = null;
Expand Down Expand Up @@ -453,20 +441,17 @@ class FlxBitmapFont extends FlxFramesCollection
font.fontName = graphic.key;
font.lineHeight = font.size = charHeight;

var charRect:FlxRect;
var offset:FlxPoint;
var xAdvance:Int = charWidth;
final xAdvance:Int = charWidth;
font.spaceWidth = xAdvance;
var letterIndex:Int = 0;
var numLetters:Int = letters.uLength();
var numLetters:Int = letters.length;

for (j in 0...numRows)
{
for (i in 0...numCols)
{
charRect = FlxRect.get(startX + i * spacedWidth, startY + j * spacedHeight, charWidth, charHeight);
offset = FlxPoint.get(0, 0);
font.addCharFrame(letters.uCharCodeAt(letterIndex), charRect, offset, xAdvance);
final charRect = FlxRect.get(startX + i * spacedWidth, startY + j * spacedHeight, charWidth, charHeight);
font.addCharFrame(letters.uCharCodeAt(letterIndex), charRect, xAdvance);
letterIndex++;

if (letterIndex >= numLetters)
Expand All @@ -488,24 +473,40 @@ class FlxBitmapFont extends FlxFramesCollection
* @param offset Offset before rendering this char.
* @param xAdvance How much cursor will jump after this char.
*/
function addCharFrame(charCode:Int, frame:FlxRect, offset:FlxPoint, xAdvance:Int):Void
function addCharFrame(charCode:Int, frame:FlxRect, ?offset:FlxPoint, xAdvance:Int):Void
{
var charName:String = new UnicodeBuffer().addChar(charCode).toString();
final charName:String = new UnicodeBuffer().addChar(charCode).toString();
if (frame.width == 0 || frame.height == 0 || getByName(charName) != null)
return;
var charFrame:FlxFrame = this.frame.subFrameTo(frame);

setCharFrame(charCode, frame, xAdvance, offset);
}

/**
* Sets the frame for the specified char
*
* @param charCode The char code
* @param frame The desired frame of the char
* @param xAdvance How far right the next character should be
* @param offset An optional frame offset from top left corner
*/
public function setCharFrame(charCode:Int, frame:FlxRect, xAdvance:Int, ?offset:FlxPoint):Void
{
final charName:String = new UnicodeBuffer().addChar(charCode).toString();
if (frame.width == 0 || frame.height == 0)
FlxG.log.error('Invalid frame size: $frame for char "$charName" in font "$fontName"');

final charFrame:FlxFrame = this.frame.subFrameTo(frame);

var w:Float = charFrame.sourceSize.x;
var h:Float = charFrame.sourceSize.y;
w += (offset.x > 0) ? offset.x : 0;
h += (offset.y > 0) ? offset.y : 0;
final w:Float = charFrame.sourceSize.x + (offset != null && offset.x > 0 ? offset.x : 0);
final h:Float = charFrame.sourceSize.y + (offset != null && offset.y > 0 ? offset.y : 0);
charFrame.sourceSize.set(w, h);
charFrame.offset.addPoint(offset);
if (offset != null)
charFrame.offset.addPoint(offset);//calls putWeak
charFrame.name = charName;
pushFrame(charFrame);
pushFrame(charFrame, true);
charMap.set(charCode, charFrame);
charAdvance.set(charCode, xAdvance);
offset.put();
}

function updateSourceHeight():Void
Expand Down

0 comments on commit 4308c1c

Please sign in to comment.