Merge branch 'new-editors' of https://github.com/FNF-CNE-Devs/CodenameEngine-Dev into new-editors

This commit is contained in:
Frakits
2024-07-25 13:14:06 +03:00
5 changed files with 128 additions and 53 deletions
@@ -136,7 +136,7 @@ class CharacterAnimButton extends UIButton {
playIcon.antialiasing = false;
members.push(playIcon);
deleteButton = new UIButton(0, 0, "", null, 28*2,24);
deleteButton = new UIButton(0, 0, "", () -> {parent.deleteAnimation(this);}, 28*2,24);
deleteButton.frames = Paths.getFrames("editors/ui/grayscale-button");
deleteButton.color = 0xFFAC3D3D;
members.push(deleteButton);
@@ -215,6 +215,11 @@ class CharacterAnimButton extends UIButton {
public function changeName(newName:String) @:privateAccess {
if (newName == anim) return;
if (parent.character.getNameList().indexOf(newName) != -1) {
nameTextBox.label.text = anim;
return;
}
if (parent.character.animateAtlas != null) {
var animSymbol:SymbolStuff = parent.character.animateAtlas.anim.animsMap[anim];
@@ -1,5 +1,6 @@
package funkin.editors.character;
import funkin.backend.utils.XMLUtil.AnimData;
import flixel.animation.FlxAnimation;
import flixel.graphics.FlxGraphic;
import openfl.geom.Rectangle;
@@ -16,9 +17,11 @@ class CharacterAnimsWindow extends UIButtonList<CharacterAnimButton> {
public var displayAnimsFramesList:Map<String, {scale:Float, animBounds:Rectangle, frame:Int}> = [];
public var animButtons:Map<String, CharacterAnimButton> = [];
public var animsList:Array<String> = [];
public function new(x:Float, y:Float, character:CharacterGhost) {
super(x, y, Std.int(500-16), 419, "", FlxPoint.get(Std.int(500-16-32), 208));
this.character = character;
cameraSpacing = 0;
frames = Paths.getFrames('editors/ui/inputbox');
@@ -35,26 +38,16 @@ class CharacterAnimsWindow extends UIButtonList<CharacterAnimButton> {
alpha = 0.7;
@:privateAccess
for (name => anim in displayWindowSprite.animation._animations)
buildAnimDisplay(name, anim);
for (anim in character.getAnimOrder()) {
var button:CharacterAnimButton = new CharacterAnimButton(0, 0, character.animDatas.get(anim), this);
add(button); animButtons.set(anim, button);
}
this.character = character;
for (anim in character.getAnimOrder())
addAnimation(character.animDatas.get(anim));
addButton.callback = generateAnimation;
}
public var ghosts:Array<String> = [];
public override function update(elapsed:Float) {
super.update(elapsed);
// if (CharacterEditor.instance.draggingCharacter && ghosts[0] != character.getAnimName()) {
// if (ghosts.indexOf(character.getAnimName()) != -1)
// ghosts.remove(character.getAnimName());
// ghosts.insert(0, character.getAnimName());
// }
animsList = [for (button in buttons) button.anim];
character.ghosts = ghosts;
}
@@ -67,4 +60,48 @@ class CharacterAnimsWindow extends UIButtonList<CharacterAnimButton> {
displayAnimsFramesList.set(name, {frame: anim.frames.getDefault([0])[0], scale: 104/animBounds.height, animBounds: animBounds});
}
public function deleteAnimation(button:CharacterAnimButton) {
if (buttons.members.length <= 1) return;
if (character.getAnimName() == button.anim)
@:privateAccess CharacterEditor.instance._animation_down(null);
character.removeAnimation(button.anim);
if (character.animOffsets.exists(button.anim)) character.animOffsets.remove(button.anim);
if (character.animDatas.exists(button.anim)) character.animDatas.remove(button.anim);
remove(button); button.destroy();
}
public function generateAnimation() {
var animName:String = "New Anim";
var animNames:Array<String> = character.getNameList();
var newAnimCount:Int = 0;
while (animNames.indexOf(animName) != -1) {
newAnimCount++;
animName = 'New Anim - $newAnimCount';
}
var animData:AnimData = {
name: animName,
anim: character.frames.getByIndex(0).name,
fps: 24, loop: false,
x: 0, y: 0,
indices: [],
animType: NONE,
};
addAnimation(animData);
}
public function addAnimation(animData:AnimData, animID:Int = -1) @:privateAccess {
XMLUtil.addAnimToSprite(character, animData);
buildAnimDisplay(animData.name, character.animation._animations[animData.name]);
var newButton:CharacterAnimButton = new CharacterAnimButton(0, 0, animData, this);
newButton.alpha = 0.25; animButtons.set(animData.name, newButton);
if (animID == -1) add(newButton);
else insert(newButton, animID);
}
}
@@ -264,29 +264,24 @@ class CharacterEditor extends UIState {
uiGroup.cameras = [uiCamera];
add(cameraHoverDummy = new CameraHoverDummy(uiGroup, FlxPoint.weak(0, 0)));
characterPropertiesWindow = new CharacterPropertiesWindow((FlxG.width-(432)), 23+12+10, character);
characterPropertiesWindow = new CharacterPropertiesWindow((FlxG.width-(440)-16) - (((500-16)-(440))/2), 23+12+10, character);
uiGroup.add(characterPropertiesWindow);
topMenuSpr = new UITopMenu(topMenu);
uiGroup.add(topMenuSpr);
// dragOffsetsCheckbox = new UICheckbox(FlxG.width - 440, 5, "Drag Offsets With Mouse?", false, 0, true);
// uiGroup.add(dragOffsetsCheckbox);
// lockCameraCheckbox = new UICheckbox(FlxG.width - 200, 5, "Lock Camera?", false, 0, true);
// uiGroup.add(lockCameraCheckbox);
animationText = new UIText(0, 0, 0, "");
uiGroup.add(animationText);
characterAnimsWindow = new CharacterAnimsWindow(characterPropertiesWindow.x - 60, characterPropertiesWindow.y+224+16, character);
characterAnimsWindow = new CharacterAnimsWindow((FlxG.width-(500-16)-16), characterPropertiesWindow.y+224+16, character);
uiGroup.add(characterAnimsWindow);
add(uiGroup);
playAnimation(character.getAnimOrder()[0]);
_view_focus_character(null);
changeStage("stage");
_view_focus_character(null);
if(Framerate.isLoaded) {
Framerate.fpsCounter.alpha = 0.4;
@@ -300,6 +295,7 @@ class CharacterEditor extends UIState {
override function destroy() {
_point.put();
draggingOffset.put();
clipboard.put();
super.destroy();
if(Framerate.isLoaded) {
@@ -360,7 +356,7 @@ class CharacterEditor extends UIState {
inline function handleMouseOffsets() {
if (draggingCharacter) {
cameraHoverDummy.cursor = #if (mac) DRAG; #elseif (linux) DRAG; #else MOVE; #end
cameraHoverDummy.cursor = #if (mac) DRAG; #elseif (linux) DRAG; #else BUTTON; #end
if (FlxG.mouse.justReleased) {
draggingOffset.x /= character.scale.x;
@@ -426,6 +422,9 @@ class CharacterEditor extends UIState {
}
function buildCharacter():String {
if (character.extra.exists(StageEditor.exID("bounds")))
character.extra.remove(StageEditor.exID("bounds"));
var charXML:Xml = character.buildXML([
for (button in characterAnimsWindow.buttons.members)
button.anim
@@ -434,8 +433,13 @@ class CharacterEditor extends UIState {
return "<!DOCTYPE codename-engine-character>\n" + Printer.print(charXML, true);
}
function _edit_copy_offset(_) {}
function _edit_paste_offset(_) {}
var clipboard:FlxPoint = FlxPoint.get();
function _edit_copy_offset(_) {
clipboard.copyFrom(character.animOffsets[character.getAnimName()]);
}
function _edit_paste_offset(_) {
_set_offset(clipboard.x, clipboard.y);
}
function _edit_undo(_) {}
function _edit_redo(_) {}
@@ -459,9 +463,15 @@ class CharacterEditor extends UIState {
}
function _change_offset(x:Float, y:Float) {
_set_offset(
character.animOffsets[character.getAnimName()].x - x,
character.animOffsets[character.getAnimName()].y - y
);
}
function _set_offset(x:Float, y:Float) {
characterAnimsWindow.animButtons.get(character.getAnimName()).changeOffset(
FlxMath.roundDecimal(character.animOffsets[character.getAnimName()].x - x, 2),
FlxMath.roundDecimal(character.animOffsets[character.getAnimName()].y - y, 2)
FlxMath.roundDecimal(x, 2), FlxMath.roundDecimal(y, 2)
);
}
@@ -507,7 +517,9 @@ class CharacterEditor extends UIState {
remove(character);
if (__stage == null) {
updateStagePositions(["NONE"]);
updateStagePositions([]);
changeStagePosition("NONE");
add(character);
} else {
stage = new Stage(__stage, this, false);
@@ -543,24 +555,28 @@ class CharacterEditor extends UIState {
}
public function changeStagePosition(position:String) {
if (stage == null) return;
if (stage.characterPoses.exists(stagePosition))
stage.characterPoses[stagePosition].revertCharacter(character);
stagePosition = position.toLowerCase();
remove(character);
if (stage.characterPoses.exists(stagePosition))
stage.applyCharStuff(character, stagePosition, 0);
_animation_play(null);
if (stage != null && position != "NONE") {
if (stage.characterPoses.exists(stagePosition))
stage.characterPoses[stagePosition].revertCharacter(character);
stagePosition = position.toLowerCase();
remove(character);
if (stage.characterPoses.exists(stagePosition))
stage.applyCharStuff(character, stagePosition, 0);
_animation_play(null);
} else
stagePosition = position.toLowerCase();
characterPropertiesWindow.testAsDropDown.index = characterPropertiesWindow.testAsDropDown.options.indexOf(stagePosition.toUpperCase());
characterPropertiesWindow.testAsDropDown.label.text = stagePosition.toUpperCase();
}
public function changeCharacterDesginedAs(player:Bool) @:privateAccess {
if (stage == null) return;
if (stage == null) {
changeCharacterIsPlayer(player);
return;
}
if (stage.characterPoses.exists(stagePosition))
stage.characterPoses[stagePosition].revertCharacter(character);
@@ -645,8 +661,21 @@ class CharacterEditor extends UIState {
character.stopAnimation();
}
function _animation_up(_) {}
function _animation_down(_) {}
function _animation_up(_)
playAnimation(
characterAnimsWindow.animsList[
FlxMath.wrap(
characterAnimsWindow.animsList.indexOf(character.getAnimName()) - 1,
0, characterAnimsWindow.animsList.length-1
)]
);
function _animation_down(_)
playAnimation(
characterAnimsWindow.animsList[FlxMath.wrap(
characterAnimsWindow.animsList.indexOf(character.getAnimName()) + 1,
0, characterAnimsWindow.animsList.length-1
)]
);
public function playAnimation(anim:String) {
character.playAnim(anim, true);
@@ -8,6 +8,7 @@ class CharacterPropertiesWindow extends UISliceSprite {
public var positionXStepper:UINumericStepper;
public var positionYStepper:UINumericStepper;
public var scaleStepper:UINumericStepper;
public var editCharacterButton:UIButton;
public var flipXCheckbox:UICheckbox;
public var cameraXStepper:UINumericStepper;
@@ -17,7 +18,7 @@ class CharacterPropertiesWindow extends UISliceSprite {
public var designedAsDropDown:UIDropDown;
public function new(x:Float, y:Float, character:Character) @:privateAccess {
super(x, y, 424, 204+20, "editors/ui/inputbox");
super(x, y, 424+16, 204+20, "editors/ui/inputbox");
function addLabelOn(ui:UISprite, text:String)
members.push(new UIText(ui.x, ui.y - 24, 0, text));
@@ -39,7 +40,7 @@ class CharacterPropertiesWindow extends UISliceSprite {
};
members.push(positionYStepper);
scaleStepper = new UINumericStepper(positionYStepper.x+104+16, positionYStepper.y, character.scale.x, 0.001, 2, 0, null, 104);
scaleStepper = new UINumericStepper(positionYStepper.x+104-32+26, positionYStepper.y, character.scale.x, 0.001, 2, 0, null, 90);
scaleStepper.onChange = (text:String) -> {
@:privateAccess scaleStepper.__onChange(text);
this.changeScale(scaleStepper.value);
@@ -47,7 +48,10 @@ class CharacterPropertiesWindow extends UISliceSprite {
members.push(scaleStepper);
addLabelOn(scaleStepper, "Scale");
flipXCheckbox = new UICheckbox(scaleStepper.x, scaleStepper.y+32+14, "Flipped?", character.isPlayer ? !character.__baseFlipped : character.__baseFlipped);
editCharacterButton = new UIButton(scaleStepper.x + 90 -32 + 26, scaleStepper.y, "Edit Info", null);
members.push(editCharacterButton);
flipXCheckbox = new UICheckbox(scaleStepper.x+22, scaleStepper.y+32+14, "Flipped?", character.isPlayer ? !character.__baseFlipped : character.__baseFlipped);
flipXCheckbox.onChecked = (checked:Bool) -> {this.changeFlipX(checked);};
members.push(flipXCheckbox);
@@ -68,25 +72,25 @@ class CharacterPropertiesWindow extends UISliceSprite {
};
members.push(cameraYStepper);
antialiasingCheckbox = new UICheckbox(scaleStepper.x, flipXCheckbox.y+32, "Antialiased?", character.antialiasing);
antialiasingCheckbox = new UICheckbox(scaleStepper.x+22, flipXCheckbox.y+32, "Antialiased?", character.antialiasing);
antialiasingCheckbox.onChecked = (checked:Bool) -> {this.changeAntialiasing(checked);};
members.push(antialiasingCheckbox);
testAsDropDown = new UIDropDown(cameraXStepper.x, cameraXStepper.y+32+32+4, 170, 32, ["BOYFRIEND", "DAD"], character.playerOffsets ? 0 : 1);
testAsDropDown = new UIDropDown(cameraXStepper.x, cameraXStepper.y+32+32+4, 193, 32, ["BOYFRIEND", "DAD"], character.playerOffsets ? 0 : 1);
testAsDropDown.onChange = (index:Int) -> {
CharacterEditor.instance.changeStagePosition(testAsDropDown.options[index]);
};
members.push(testAsDropDown);
addLabelOn(testAsDropDown, "Test Character As...");
testAsDropDown.bWidth = 170; //REFUSES TO FUCKING SET TO 170 PIECE OF SHIT!!
testAsDropDown.bWidth = 193; //REFUSES TO FUCKING SET TO 170 PIECE OF SHIT!!
designedAsDropDown = new UIDropDown(scaleStepper.x, testAsDropDown.y, 170, 32, ["BOYFRIEND", "DAD"], character.playerOffsets ? 0 : 1);
designedAsDropDown = new UIDropDown(testAsDropDown.x+193+22, testAsDropDown.y, 193, 32, ["BOYFRIEND", "DAD"], character.playerOffsets ? 0 : 1);
designedAsDropDown.onChange = (index:Int) -> {
CharacterEditor.instance.changeCharacterDesginedAs(designedAsDropDown.options[index] == "BOYFRIEND");
};
members.push(designedAsDropDown);
addLabelOn(designedAsDropDown, "Char Desgined As...");
designedAsDropDown.bWidth = 170;
designedAsDropDown.bWidth = 193;
alpha = 0.7;
+1 -1
View File
@@ -75,7 +75,7 @@ class Options
public static var characterHitbox:Bool = true;
public static var characterCamera:Bool = true;
public static var characterAxis:Bool = true;
public static var characterDragging:Bool = true;
public static var characterDragging:Bool = false;
/**
* PLAYER 1 CONTROLS