package funkin.editors.character; import flixel.util.FlxColor; import flixel.math.FlxPoint; import funkin.backend.utils.XMLUtil.AnimData; import funkin.game.Character; class CharacterProperties extends UISubstateWindow { public var char:Character; public var ghostChar:Character; public var charData:CharacterData; public var applyButton:UIButton; public var cancelButton:UIButton; public var editor:CharacterEditor; public var curAnimData:AnimData; public var spriteFile:UITextBox; public var gameOverChar:UITextBox; public var healthIcon:UITextBox; public var iconColor:UITextBox; public var flipX:UICheckbox; public var isPlayer:UICheckbox; public var isGF:UICheckbox; public var antialiasing:UICheckbox; public var scale:UITextBox; public var holdTime:UITextBox; public function new(char:Character, ghostChar, editor:CharacterEditor) { super(); this.char = char; this.ghostChar = ghostChar; this.charData = char.characterData; this.editor = editor; } public override function create() { winTitle = 'Character Properties'; winWidth = 960; super.create(); // Offsets var y_ofs = 60; var x_ofs = 60; var y_text_ofs = 20; // Character Properties spriteFile = new UITextBox(windowSpr.x + 50, windowSpr.y + 10 + y_ofs, charData.sprite); add(spriteFile); add(new UIText(spriteFile.x, spriteFile.y - y_text_ofs, -1, "Image/Atlas file: ")); gameOverChar = new UITextBox(spriteFile.x + spriteFile.bWidth + x_ofs, spriteFile.y, charData.gameOverChar); add(gameOverChar); add(new UIText(gameOverChar.x, gameOverChar.y - y_text_ofs, -1, "Game Over character: ")); healthIcon = new UITextBox(spriteFile.x, spriteFile.y + y_ofs, charData.icon); add(healthIcon); add(new UIText(healthIcon.x, healthIcon.y - y_text_ofs, -1, "Health Icon: ")); iconColor = new UITextBox(healthIcon.x + healthIcon.bWidth + x_ofs, healthIcon.y, CharacterConfig.rgbToString(charData.iconColor)); add(iconColor); add(new UIText(iconColor.x, iconColor.y - y_text_ofs, -1, "Icon color (RGB): ")); flipX = new UICheckbox(healthIcon.x, healthIcon.y + y_ofs, "Flip X", charData.flipX); add(flipX); antialiasing = new UICheckbox(flipX.x + flipX.field.width + x_ofs, flipX.y, "Antialiasing", charData.antialiasing); add(antialiasing); isPlayer = new UICheckbox(flipX.x, flipX.y + y_ofs, "Playable Character", charData.isPlayer); add(isPlayer); isGF = new UICheckbox(isPlayer.x + isPlayer.field.width + x_ofs, isPlayer.y, "GF Character", charData.isGF); add(isGF); scale = new UITextBox(isPlayer.x, isPlayer.y + y_ofs, Std.string(charData.scale)); add(scale); add(new UIText(scale.x, scale.y - y_text_ofs, -1, "Scale: ")); holdTime = new UITextBox(scale.x + scale.bWidth + y_ofs, scale.y, Std.string(charData.holdTime)); add(holdTime); add(new UIText(holdTime.x, holdTime.y - y_text_ofs, -1, "Hold time: ")); // Apply / Cancel buttons applyButton = new UIButton(windowSpr.x - x_ofs - 70, windowSpr.y, "Apply", function() { updateProperties(spriteFile.label.text, healthIcon.label.text, CharacterConfig.stringToRGB(healthIcon.label.text), flipX.checked, antialiasing.checked, isPlayer.checked, isGF.checked, Std.parseFloat(scale.label.text), Std.parseFloat(holdTime.label.text), gameOverChar.label.text); }); add(applyButton); cancelButton = new UIButton(applyButton.x, applyButton.y + y_ofs, "Cancel", function() { close(); }); add(cancelButton); } public function updateProperties(sprite:String, healthIcon:String, iconColor:FlxColor, flipX:Bool, antialiasing:Bool, isPlayer:Bool, isGF:Bool, scale:Float, holdTime:Float, gameOverChar:String) { // Character Data charData.sprite = sprite; charData.icon = healthIcon; charData.iconColor = iconColor; charData.flipX = flipX; charData.antialiasing = antialiasing; charData.isPlayer = isPlayer; charData.isGF = isGF; charData.scale = scale; charData.holdTime = holdTime; charData.gameOverChar = gameOverChar; editor.reloadChar(!char.isPlayer, charData); editor.reloadStage(); editor.loadCross(); } }