Skip to content

Commit

Permalink
flxanimate support!
Browse files Browse the repository at this point in the history
  • Loading branch information
charlesisfeline committed Nov 10, 2023
1 parent c76cf35 commit 4f409e6
Show file tree
Hide file tree
Showing 8 changed files with 229 additions and 25 deletions.
1 change: 1 addition & 0 deletions Project.xml
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@
<haxelib name="SScript" if="HSCRIPT_ALLOWED"/>
<haxelib name="hxCodec" if="VIDEOS_ALLOWED"/>
<haxelib name="discord_rpc" if="desktop"/>
<haxelib name="flxanimate"/>
<haxelib name="tjson" />

<!-- Enables a terminal log prompt on debug builds -->
Expand Down
7 changes: 7 additions & 0 deletions hmm.json
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,13 @@
"name": "hxcpp-debug-server",
"type": "haxelib",
"version": null
},
{
"name": "flxanimate",
"type": "git",
"dir": null,
"ref": "dev",
"url": "https://github.com/ShadowMario/flxanimate"
},
{
"name": "discord_rpc",
Expand Down
3 changes: 3 additions & 0 deletions source/backend/Paths.hx
Original file line number Diff line number Diff line change
Expand Up @@ -338,6 +338,9 @@ class Paths

if (FileSystem.exists(mods(Mods.currentModDirectory + '/' + key)) || FileSystem.exists(mods(key)))
return true;

if (FileSystem.exists(mods('$key')))
return true;
}
#end

Expand Down
4 changes: 4 additions & 0 deletions source/import.hx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ import llua.*;
import llua.Lua;
#end

#if flxanimate
import flxanimate.*;
#end

#if ACHIEVEMENTS_ALLOWED
import backend.Achievements;
#end
Expand Down
155 changes: 155 additions & 0 deletions source/psychlua/FlxAnimateFunctions.hx
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
package psychlua;

package psychlua;

import openfl.utils.Assets;

#if (LUA_ALLOWED && flxanimate)
class FlxAnimateFunctions
{
public static function implement(funk:FunkinLua)
{
var lua:State = funk.lua;
Lua_helper.add_callback(lua, "makeFlxAnimateSprite", function(tag:String, ?x:Float = 0, ?y:Float = 0, ?loadFolder:String = null) {
tag = tag.replace('.', '');
var lastSprite = PlayState.instance.variables.get(tag);
if(lastSprite != null)
{
lastSprite.kill();
PlayState.instance.remove(lastSprite);
lastSprite.destroy();
}

var mySprite:ModchartAnimateSprite = new ModchartAnimateSprite(x, y);
if(loadFolder != null) loadAtlasCustom(mySprite, loadFolder);
PlayState.instance.variables.set(tag, mySprite);
mySprite.active = true;
});

Lua_helper.add_callback(lua, "loadAnimateAtlas", function(tag:String, folderOrImg:Dynamic, ?spriteJson:Dynamic = null, ?animationJson:Dynamic = null) {
var spr:FlxAnimate = PlayState.instance.variables.get(tag);
if(spr != null) loadAtlasCustom(spr, folderOrImg, spriteJson, animationJson);
});

Lua_helper.add_callback(lua, "addAnimationBySymbol", function(tag:String, name:String, symbol:String, ?framerate:Float = 24, ?loop:Bool = false, ?matX:Float = 0, ?matY:Float = 0)
{
var obj:Dynamic = PlayState.instance.variables.get(tag);
if(cast (obj, FlxAnimate) == null) return false;

obj.anim.addBySymbol(name, symbol, framerate, loop, matX, matY);
if(obj.anim.lastPlayedAnim == null)
{
if(obj.playAnim != null) obj.playAnim(name, true); //is ModchartAnimateSprite
else obj.animation.play(name, true);
}
return true;
});

Lua_helper.add_callback(lua, "addAnimationBySymbolIndices", function(tag:String, name:String, symbol:String, ?indices:Any = null, ?framerate:Float = 24, ?loop:Bool = false, ?matX:Float = 0, ?matY:Float = 0)
{
var obj:Dynamic = PlayState.instance.variables.get(tag);
if(cast (obj, FlxAnimate) == null) return false;

if(indices == null)
indices = [0];
else if(Std.isOfType(indices, String))
{
var strIndices:Array<String> = cast (indices, String).trim().split(',');
var myIndices:Array<Int> = [];
for (i in 0...strIndices.length) {
myIndices.push(Std.parseInt(strIndices[i]));
}
indices = myIndices;
}

obj.anim.addBySymbolIndices(name, symbol, indices, framerate, loop, matX, matY);
if(obj.anim.lastPlayedAnim == null)
{
if(obj.playAnim != null) obj.playAnim(name, true); //is ModchartAnimateSprite
else obj.animation.play(name, true);
}
return true;
});
}

private static function loadAtlasCustom(spr:FlxAnimate, folderOrImg:Dynamic, spriteJson:Dynamic = null, animationJson:Dynamic = null)
{
var changedAnimJson = false;
var changedAtlasJson = false;
var changedImage = false;

if(spriteJson != null)
{
changedAtlasJson = true;
spriteJson = File.getContent(spriteJson);
}

if(animationJson != null)
{
changedAnimJson = true;
animationJson = File.getContent(animationJson);
}

// is folder or image path
if(Std.isOfType(folderOrImg, String))
{
var originalPath:String = folderOrImg;
for (i in 0...10)
{
var st:String = '$i';
if(i == 0) st = '';

if(!changedAtlasJson)
{
spriteJson = getContentFromFile('images/$originalPath/spritemap$st.json');
if(spriteJson != null)
{
//trace('found Sprite Json');
changedImage = true;
changedAtlasJson = true;
folderOrImg = Paths.image('$originalPath/spritemap$st');
break;
}
}
else if(Paths.fileExists('images/$originalPath/spritemap$st.png', IMAGE))
{
//trace('found Sprite PNG');
changedImage = true;
folderOrImg = Paths.image('$originalPath/spritemap$st');
break;
}
}

if(!changedImage)
{
//trace('Changing folderOrImg to FlxGraphic');
changedImage = true;
folderOrImg = Paths.image(originalPath);
}

if(!changedAnimJson)
{
//trace('found Animation Json');
changedAnimJson = true;
animationJson = getContentFromFile('images/$originalPath/Animation.json');
}
}

//trace(folderOrImg);
//trace(spriteJson);
//trace(animationJson);
spr.loadAtlasEx(folderOrImg, spriteJson, animationJson);
}

private static function getContentFromFile(path:String):String
{
var onAssets:Bool = false;
var path:String = Paths.getPath(path, TEXT, true);
if(FileSystem.exists(path) || (onAssets = true && Assets.exists(path, TEXT)))
{
return !onAssets ? File.getContent(path) : Assets.getText(path);
}
return null;
}
}
#end
28 changes: 17 additions & 11 deletions source/psychlua/FunkinLua.hx
Original file line number Diff line number Diff line change
Expand Up @@ -1061,7 +1061,8 @@ class FunkinLua {
}
else
{
obj.animation.play(name, forced, reverse, startFrame);
if(obj.anim != null) obj.anim.play(name, forced, reverse, startFrame); //FlxAnimate
else obj.animation.play(name, forced, reverse, startFrame);
return true;
}
return false;
Expand All @@ -1088,18 +1089,22 @@ class FunkinLua {
}
});
Lua_helper.add_callback(lua, "addLuaSprite", function(tag:String, front:Bool = false) {
if(game.modchartSprites.exists(tag)) {
var shit:ModchartSprite = game.modchartSprites.get(tag);
if(front)
LuaUtils.getTargetInstance().add(shit);
var mySprite:FlxSprite = null;
if(game.modchartSprites.exists(tag)) mySprite = game.modchartSprites.get(tag);
else if(game.variables.exists(tag)) mySprite = game.variables.get(tag);

if(mySprite == null) return false;

if(front)
LuaUtils.getTargetInstance().add(mySprite);
else
{
if(!game.isDead)
game.insert(game.members.indexOf(LuaUtils.getLowestCharacterGroup()), mySprite);
else
{
if(!game.isDead)
game.insert(game.members.indexOf(LuaUtils.getLowestCharacterGroup()), shit);
else
GameOverSubstate.instance.insert(GameOverSubstate.instance.members.indexOf(GameOverSubstate.instance.boyfriend), shit);
}
GameOverSubstate.instance.insert(GameOverSubstate.instance.members.indexOf(GameOverSubstate.instance.boyfriend), mySprite);
}
return true;
});
Lua_helper.add_callback(lua, "setGraphicSize", function(obj:String, x:Int, y:Int = 0, updateHitbox:Bool = true) {
if(game.getLuaObject(obj)!=null) {
Expand Down Expand Up @@ -1552,6 +1557,7 @@ class FunkinLua {
ReflectionFunctions.implement(this);
TextFunctions.implement(this);
ExtraFunctions.implement(this);
#if flxanimate FlxAnimateFunctions.implement(this); #end
CustomSubstate.implement(this);
ShaderFunctions.implement(this);
DeprecatedFunctions.implement(this);
Expand Down
28 changes: 28 additions & 0 deletions source/psychlua/ModchartAnimateSprite.hx
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package psychlua;

package psychlua;

#if flxanimate
class ModchartAnimateSprite extends FlxAnimate
{
public var animOffsets:Map<String, Array<Float>> = new Map<String, Array<Float>>();
public function new(?x:Float = 0, ?y:Float = 0, ?path:String, ?settings:FlxAnimate.Settings)
{
super(x, y, path, settings);
antialiasing = ClientPrefs.data.antialiasing;
}

public function playAnim(name:String, forced:Bool = false, ?reverse:Bool = false, ?startFrame:Int = 0)
{
anim.play(name, forced, reverse, startFrame);

var daOffset = animOffsets.get(name);
if (animOffsets.exists(name)) offset.set(daOffset[0], daOffset[1]);
}

public function addOffset(name:String, x:Float, y:Float)
{
animOffsets.set(name, [x, y]);
}
}
#end
28 changes: 14 additions & 14 deletions source/substates/PauseSubState.hx
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,9 @@ class PauseSubState extends MusicBeatSubstate

FlxG.sound.list.add(pauseMusic);

var bg:FlxSprite = new FlxSprite().makeGraphic(FlxG.width, FlxG.height, FlxColor.BLACK);
var bg:FlxSprite = new FlxSprite().makeGraphic(1, 1, FlxColor.BLACK);
bg.scale.set(FlxG.width, FlxG.height);
bg.updateHitbox();
bg.alpha = 0;
bg.scrollFactor.set();
add(bg);
Expand Down Expand Up @@ -133,7 +135,9 @@ class PauseSubState extends MusicBeatSubstate
grpMenuShit = new FlxTypedGroup<Alphabet>();
add(grpMenuShit);

missingTextBG = new FlxSprite().makeGraphic(FlxG.width, FlxG.height, FlxColor.BLACK);
missingTextBG = new FlxSprite().makeGraphic(1, 1, FlxColor.BLACK);
missingTextBG.scale.set(FlxG.width, FlxG.height);
missingTextBG.updateHitbox();
missingTextBG.alpha = 0.6;
missingTextBG.visible = false;
add(missingTextBG);
Expand All @@ -159,19 +163,15 @@ class PauseSubState extends MusicBeatSubstate
super.update(elapsed);
updateSkipTextStuff();

var upP = controls.UI_UP_P;
var downP = controls.UI_DOWN_P;
var accepted = controls.ACCEPT;

if (upP)
{
changeSelection(-1);
}
if (downP)
{
changeSelection(1);
if(controls.BACK){
close();
return;
}

updateSkipTextStuff();
if(controls.UI_UP_P) changeSelection(-1);
if(controls.UI_DOWN_P) changeSelection(1);

var daSelected:String = menuItems[curSelected];
switch (daSelected)
{
Expand Down Expand Up @@ -203,7 +203,7 @@ class PauseSubState extends MusicBeatSubstate
}
}

if (accepted && (cantUnpause <= 0 || !controls.controllerMode))
if (controls.ACCEPT && (cantUnpause <= 0 || !controls.controllerMode))
{
if (menuItems == difficultyChoices)
{
Expand Down

0 comments on commit 4f409e6

Please sign in to comment.