diff --git a/Project.xml b/Project.xml
index 747cc70a2..289c6215e 100644
--- a/Project.xml
+++ b/Project.xml
@@ -124,6 +124,7 @@
+
diff --git a/source/Controls.hx b/source/Controls.hx
index 3ca24646b..82a44af0f 100644
--- a/source/Controls.hx
+++ b/source/Controls.hx
@@ -872,7 +872,7 @@ class FlxActionInputDigitalMobileSwipeGameplay extends FlxActionInputDigital
public function new(swipeDir:Int = FlxObject.ANY, Trigger:FlxInputState, ?swipeLength:Float = 90)
{
- super(MOBILE, swipeDir, Trigger);
+ super(OTHER, swipeDir, Trigger);
activateLength = swipeLength;
}
diff --git a/source/CoolUtil.hx b/source/CoolUtil.hx
index 2034545e8..afdefa09f 100644
--- a/source/CoolUtil.hx
+++ b/source/CoolUtil.hx
@@ -7,6 +7,7 @@ import flixel.math.FlxPoint;
import flixel.math.FlxRect;
import flixel.system.FlxAssets.FlxGraphicAsset;
import haxe.Json;
+import haxe.format.JsonParser;
import lime.math.Rectangle;
import lime.utils.Assets;
@@ -88,6 +89,21 @@ class CoolUtil
return lerp * (FlxG.elapsed / (1 / 60));
}
+ /**
+ * Hashlink json encoding fix for some wacky bullshit
+ * https://github.com/HaxeFoundation/haxe/issues/6930#issuecomment-384570392
+ */
+ public static function coolJSON(fileData:String)
+ {
+ var cont = fileData;
+ function is(n:Int, what:Int)
+ return cont.charCodeAt(n) == what;
+ return JsonParser.parse(cont.substr(if (is(0, 65279)) /// looks like a HL target, skipping only first character here:
+ 1 else if (is(0, 239) && is(1, 187) && is(2, 191)) /// it seems to be Neko or PHP, start from position 3:
+ 3 else /// all other targets, that prepare the UTF string correctly
+ 0));
+ }
+
/*
* frame dependant lerp kinda lol
*/
diff --git a/source/animate/AnimateTimeline.hx b/source/animate/AnimateTimeline.hx
index 13008dda7..70fc3f5a7 100644
--- a/source/animate/AnimateTimeline.hx
+++ b/source/animate/AnimateTimeline.hx
@@ -1,7 +1,7 @@
package animate;
-import animate.FlxSymbol.Parsed;
-import animate.FlxSymbol.Timeline;
+// import animate.FlxSymbol.Parsed;
+// import animate.FlxSymbol.Timeline;
import flixel.FlxCamera;
import flixel.FlxSprite;
import flixel.group.FlxGroup.FlxTypedGroup;
@@ -13,7 +13,7 @@ import lime.utils.Assets;
class AnimateTimeline extends FlxTypedGroup
{
- var coolParsed:Parsed;
+ // var coolParsed:Parsed;
var playhead:FlxSprite;
public var curFrame(default, set):Int;
@@ -31,45 +31,47 @@ class AnimateTimeline extends FlxTypedGroup
{
super();
- hudCamShit = new FlxCamera();
- hudCamShit.bgColor = FlxColor.TRANSPARENT;
- FlxG.cameras.add(hudCamShit, false);
+ /* hudCamShit = new FlxCamera();
+ hudCamShit.bgColor = FlxColor.TRANSPARENT;
+ FlxG.cameras.add(hudCamShit, false);
- playhead = new FlxSprite(0, -12).makeGraphic(2, 10, FlxColor.MAGENTA);
- add(playhead);
+ playhead = new FlxSprite(0, -12).makeGraphic(2, 10, FlxColor.MAGENTA);
+ add(playhead);
- hudCamShit.follow(playhead);
- hudCamShit.setScrollBounds(0, null, -14, null);
+ hudCamShit.follow(playhead);
+ hudCamShit.setScrollBounds(0, null, -14, null);
- curFrame = 0;
+ curFrame = 0;
- coolParsed = cast Json.parse(Assets.getText(parsed));
+ coolParsed = cast Json.parse(Assets.getText(parsed));
- var layerNum:Int = 0;
- for (layer in coolParsed.AN.TL.L)
- {
- var frameNum:Int = 0;
+ var layerNum:Int = 0;
+ for (layer in coolParsed.AN.TL.L)
+ {
+ var frameNum:Int = 0;
- for (frame in layer.FR)
- {
- var coolFrame:TimelineFrame = new TimelineFrame((frame.I * 12) + 12 * 5, layerNum * 12, frame.DU, frame);
- add(coolFrame);
- frameNum++;
- }
+ for (frame in layer.FR)
+ {
+ var coolFrame:TimelineFrame = new TimelineFrame((frame.I * 12) + 12 * 5, layerNum * 12, frame.DU, frame);
+ add(coolFrame);
+ frameNum++;
+ }
- var layerName:FlxText = new FlxText(0, layerNum * 12, 0, layer.LN, 10);
- layerName.color = FlxColor.PURPLE;
- layerName.scrollFactor.x = 0;
+ var layerName:FlxText = new FlxText(0, layerNum * 12, 0, layer.LN, 10);
+ layerName.color = FlxColor.PURPLE;
+ layerName.scrollFactor.x = 0;
- var layerBG:FlxSprite = new FlxSprite(0, layerNum * 12).makeGraphic(12 * 4, 12);
- layerBG.scrollFactor.x = 0;
+ var layerBG:FlxSprite = new FlxSprite(0, layerNum * 12).makeGraphic(12 * 4, 12);
+ layerBG.scrollFactor.x = 0;
- add(layerBG);
- add(layerName);
+ add(layerBG);
+ add(layerName);
- layerNum++;
- }
+ layerNum++;
+ }
+
- this.cameras = [hudCamShit];
+ this.cameras = [hudCamShit];
+ */
}
}
diff --git a/source/animate/FlxAnimate.hx b/source/animate/FlxAnimate.hx
index bd99a70c5..8d0558c39 100644
--- a/source/animate/FlxAnimate.hx
+++ b/source/animate/FlxAnimate.hx
@@ -2,17 +2,19 @@ package animate;
// import animateAtlasPlayer.assets.AssetManager;
// import animateAtlasPlayer.core.Animation;
-import animate.FlxSymbol.Parsed;
+import animate.ParseAnimate.AnimJson;
+import animate.ParseAnimate.Sprite;
+import animate.ParseAnimate.Spritemap;
+import flixel.FlxCamera;
import flixel.FlxSprite;
import flixel.graphics.FlxGraphic;
import flixel.graphics.frames.FlxAtlasFrames;
+import flixel.graphics.frames.FlxFrame.FlxFrameAngle;
+import flixel.math.FlxMatrix;
import flixel.math.FlxPoint;
import flixel.math.FlxRect;
import flixel.system.FlxAssets.FlxGraphicAsset;
-import haxe.Json;
-import haxe.Utf8;
import haxe.format.JsonParser;
-import lime.text.UTF8String;
import openfl.Assets;
import openfl.display.BitmapData;
import openfl.geom.Rectangle;
@@ -25,16 +27,30 @@ class FlxAnimate extends FlxSymbol
var swagFrames:Array = [];
+ var jsonAnim:AnimJson;
+
public function new(x:Float, y:Float)
{
- var folder:String = 'tightBarsLol';
- coolParse = cast Json.parse(Assets.getText(Paths.file('images/' + folder + '/Animation.json')));
+ super(x, y);
- // reverses the layers, for proper rendering!
- coolParse.AN.TL.L.reverse();
- super(x, y, coolParse);
+ var folder:String = "tightBarsLol";
+
+ frames = FlxAnimate.fromAnimate(Paths.file('images/' + folder + "/spritemap1.png"), Paths.file('images/$folder/spritemap1.json'));
+
+ jsonAnim = cast CoolUtil.coolJSON(Assets.getText(Paths.file('images/$folder/Animation.json')));
+ ParseAnimate.generateSymbolmap(jsonAnim.SD.S);
+ ParseAnimate.parseTimeline(jsonAnim.AN.TL, 0, 0);
+
+ /* var folder:String = 'tightestBars';
+ coolParse = cast Json.parse(Assets.getText(Paths.file('images/' + folder + '/Animation.json')));
+
+ // reverses the layers, for proper rendering!
+ coolParse.AN.TL.L.reverse();
+ super(x, y, coolParse);
+
+ frames = FlxAnimate.fromAnimate(Paths.file('images/' + folder + '/spritemap1.png'), Paths.file('images/' + folder + '/spritemap1.json'));
+ */
- frames = FlxAnimate.fromAnimate(Paths.file('images/' + folder + '/spritemap1.png'), Paths.file('images/' + folder + '/spritemap1.json'));
// frames
}
@@ -43,27 +59,48 @@ class FlxAnimate extends FlxSymbol
// having this commented out fixes some wacky scaling bullshit?
// super.draw();
- if (FlxG.keys.justPressed.ONE)
- {
- trace("-------------------------------------");
- trace('CUR FRAME: ' + daFrame);
- trace('--------------');
- }
+ // renderFrame(coolParse.AN.TL, coolParse, true);
- renderFrame(coolParse.AN.TL, coolParse, true);
+ actualFrameRender();
+ }
- if (FlxG.keys.justPressed.E)
+ function actualFrameRender()
+ {
+ for (i in ParseAnimate.frameList)
{
- for (shit in FlxSymbol.nestedShit.keys())
+ var spr:FlxSymbol = new FlxSymbol(0, 0); // redo this to recycle from a list later
+ spr.frames = frames;
+ spr.frame = spr.frames.getByName(i);
+
+ if (FlxG.keys.justPressed.I)
{
- for (spr in FlxSymbol.nestedShit.get(shit))
+ trace('\n\n\nSPR OLD: ' + spr._matrix);
+ }
+
+ ParseAnimate.matrixMap.get(i).reverse();
+
+ for (swagMatrix in ParseAnimate.matrixMap.get(i))
+ {
+ var alsoSwag:FlxMatrix = new FlxMatrix(swagMatrix[0], swagMatrix[1], swagMatrix[4], swagMatrix[5], swagMatrix[12], swagMatrix[13]);
+ spr.matrixExposed = true;
+
+ spr.transformMatrix.concat(alsoSwag);
+
+ if (FlxG.keys.justPressed.I)
{
- trace(shit);
- spr.draw();
+ trace(i + ": " + swagMatrix);
}
}
- FlxSymbol.nestedShit.clear();
+ if (FlxG.keys.justPressed.I)
+ {
+ trace('SPR NEW: ' + spr._matrix);
+ }
+
+ // trace('MATRIX ' + spr._matrix);
+ // spr
+
+ spr.draw();
}
}
@@ -73,6 +110,8 @@ class FlxAnimate extends FlxSymbol
var frameTickTypeShit:Float = 0;
var animFrameRate:Int = 24;
+ // redo all the matrix animation stuff
+
override function update(elapsed:Float)
{
super.update(elapsed);
@@ -89,16 +128,22 @@ class FlxAnimate extends FlxSymbol
{
changeFrame(1);
frameTickTypeShit = 0;
+ ParseAnimate.resetFrameList();
+ ParseAnimate.parseTimeline(jsonAnim.AN.TL, 0, daFrame);
}
}
if (FlxG.keys.justPressed.RIGHT)
+ {
changeFrame(1);
+
+ ParseAnimate.resetFrameList();
+ ParseAnimate.parseTimeline(jsonAnim.AN.TL, 0, daFrame);
+ }
if (FlxG.keys.justPressed.LEFT)
changeFrame(-1);
}
- // This stuff is u
public static function fromAnimate(Source:FlxGraphicAsset, Description:String):FlxAtlasFrames
{
var graphic:FlxGraphic = FlxG.bitmap.add(Source);
@@ -114,11 +159,11 @@ class FlxAnimate extends FlxSymbol
frames = new FlxAtlasFrames(graphic);
- var data:AnimateObject;
+ var data:Spritemap;
var json:String = Description;
- trace(json);
+ // trace(json);
var funnyJson:Dynamic = {};
if (Assets.exists(json))
@@ -126,12 +171,14 @@ class FlxAnimate extends FlxSymbol
// trace(json);
- data = cast funnyJson.ATLAS;
+ // data = c
- for (sprite in data.SPRITES)
+ data = cast funnyJson;
+
+ for (sprite in data.ATLAS.SPRITES)
{
// probably nicer way to do this? Oh well
- var swagSprite:AnimateSprite = sprite.SPRITE;
+ var swagSprite:Sprite = sprite.SPRITE;
var rect = FlxRect.get(swagSprite.x, swagSprite.y, swagSprite.w, swagSprite.h);
@@ -147,10 +194,6 @@ class FlxAnimate extends FlxSymbol
}
}
-/**
- * HL json encoding fix for some wacky bullshit
- * https://github.com/HaxeFoundation/haxe/issues/6930#issuecomment-384570392
- */
class JaySon
{
public static function parseFile(name:String)
@@ -164,18 +207,3 @@ class JaySon
0));
}
}
-
-typedef AnimateObject =
-{
- SPRITES:Array
-}
-
-typedef AnimateSprite =
-{
- var name:String;
- var x:Int;
- var y:Int;
- var w:Int;
- var h:Int;
- var rotated:Bool;
-}
diff --git a/source/animate/FlxSymbol.hx b/source/animate/FlxSymbol.hx
index a54dc8a96..4236d4ed7 100644
--- a/source/animate/FlxSymbol.hx
+++ b/source/animate/FlxSymbol.hx
@@ -1,5 +1,12 @@
package animate;
+import animate.ParseAnimate.AnimJson;
+import animate.ParseAnimate.Animation;
+import animate.ParseAnimate.Frame;
+import animate.ParseAnimate.Sprite;
+import animate.ParseAnimate.Spritemap;
+import animate.ParseAnimate.SymbolDictionary;
+import animate.ParseAnimate.Timeline;
import flixel.FlxCamera;
import flixel.FlxSprite;
import flixel.graphics.frames.FlxFrame.FlxFrameAngle;
@@ -8,11 +15,11 @@ import flixel.math.FlxMath;
import flixel.math.FlxMatrix;
import flixel.math.FlxPoint;
import lime.system.System;
+import openfl.Assets;
import openfl.geom.Matrix;
class FlxSymbol extends FlxSprite
{
- public var coolParse:Parsed;
public var oldMatrix:Array = [];
// Loop types shit
@@ -27,21 +34,11 @@ class FlxSymbol extends FlxSprite
public var daLoopType:String = 'LP'; // LP by default, is set below!!!
- public function new(x:Float, y:Float, coolParsed:Parsed)
+ public function new(x:Float, y:Float)
{
super(x, y);
- // trace(System.deviceModel);
- // trace(System.deviceVendor);
- // trace(System.platformLabel);
- // trace(System.platformName);
-
- this.coolParse = coolParsed;
-
- var hasSymbolDictionary:Bool = Reflect.hasField(coolParse, "SD");
-
- if (hasSymbolDictionary)
- symbolAtlasShit = parseSymbolDictionary(coolParse);
+ var spritemap:Map = ParseAnimate.genSpritemap(Assets.getText(Paths.file('images/tightestBars/spritemap1.json')));
}
var symbolAtlasShit:Map = new Map();
@@ -54,7 +51,7 @@ class FlxSymbol extends FlxSprite
public var transformMatrix:Matrix = new Matrix();
- function renderFrame(TL:Timeline, coolParsed:Parsed, ?traceShit:Bool = false)
+ function renderFrame(TL:Timeline, ?traceShit:Bool = false)
{
for (layer in TL.L)
{
@@ -142,7 +139,7 @@ class FlxSymbol extends FlxSprite
var m3d = element.ASI.M3D;
var dumbassMatrix:Matrix = new Matrix(m3d[0], m3d[1], m3d[4], m3d[5], m3d[12], m3d[13]);
- var spr:FlxSymbol = new FlxSymbol(0, 0, coolParsed);
+ var spr:FlxSymbol = new FlxSymbol(0, 0);
spr.setPosition(x, y);
matrixExposed = true;
spr.frames = frames;
@@ -160,18 +157,13 @@ class FlxSymbol extends FlxSprite
// spr.origin.x += origin.x;
// spr.origin.y += origin.y;
- // spr.antialiasing = true;
+ spr.antialiasing = true;
spr.draw();
-
- if (FlxG.keys.justPressed.ONE)
- {
- trace("ASI - " + layer.LN + ": " + element.ASI.N);
- }
}
else
{
var nestedSymbol = symbolMap.get(element.SI.SN);
- var nestedShit:FlxSymbol = new FlxSymbol(x, y, coolParse);
+ var nestedShit:FlxSymbol = new FlxSymbol(x, y);
nestedShit.frames = frames;
var swagMatrix:FlxMatrix = new FlxMatrix(element.SI.M3D[0], element.SI.M3D[1], element.SI.M3D[4], element.SI.M3D[5], element.SI.M3D[12],
@@ -202,11 +194,10 @@ class FlxSymbol extends FlxSprite
nestedShit.firstFrame = element.SI.FF;
// nestedShit.daFrame += nestedShit.firstFrame;
-
nestedShit.daLoopType = element.SI.LP;
nestedShit.daFrame = daFrame;
nestedShit.scrollFactor.set(1, 1);
- nestedShit.renderFrame(nestedSymbol.TL, coolParsed);
+ nestedShit.renderFrame(nestedSymbol.TL);
// renderFrame(nestedSymbol.TL, coolParsed);
}
@@ -221,38 +212,25 @@ class FlxSymbol extends FlxSprite
daFrame += frameChange;
}
- function parseSymbolDictionary(coolParsed:Parsed):Map
- {
- var awesomeMap:Map = new Map();
- for (symbol in coolParsed.SD.S)
- {
- symbolMap.set(symbol.SN, symbol);
-
- var symbolName = symbol.SN;
-
- // one time reverse?
- symbol.TL.L.reverse();
-
- for (layer in symbol.TL.L)
- {
- for (frame in layer.FR)
- {
- for (element in frame.E)
- {
- if (Reflect.hasField(element, 'ASI'))
- {
- awesomeMap.set(symbolName, element.ASI.N);
- }
- }
- }
- }
- }
-
- return awesomeMap;
- }
-
function getFrame() {}
+ /**
+ _frame.prepareMatrix(_matrix, FlxFrameAngle.ANGLE_0, checkFlipX(), checkFlipY());
+ _matrix.translate(-origin.x, -origin.y);
+ _matrix.scale(scale.x, scale.y);
+
+ if (bakedRotationAngle <= 0)
+ {
+ updateTrig();
+
+ if (angle != 0)
+ _matrix.rotateWithTrig(_cosAngle, _sinAngle);
+ }
+
+ _point.add(origin.x, origin.y);
+
+
+ camera.drawPixels(_frame, framePixels, _matrix, colorTransform, blend, antialiasing, shader);**/
override function drawComplex(camera:FlxCamera):Void
{
_frame.prepareMatrix(_matrix, FlxFrameAngle.ANGLE_0, checkFlipX(), checkFlipY());
@@ -273,16 +251,19 @@ class FlxSymbol extends FlxSprite
_matrix.rotateWithTrig(_cosAngle, _sinAngle);
}
- // updateSkewMatrix();
+ updateSkewMatrix();
_matrix.concat(_skewMatrix);
}
_point.addPoint(origin);
- if (isPixelPerfectRender(camera))
- _point.floor();
-
_matrix.translate(_point.x, _point.y);
- camera.drawPixels(_frame, framePixels, _matrix, colorTransform, blend, antialiasing);
+
+ if (isPixelPerfectRender(camera))
+ {
+ _matrix.tx = Math.floor(_matrix.tx);
+ _matrix.ty = Math.floor(_matrix.ty);
+ }
+ camera.drawPixels(_frame, framePixels, _matrix, colorTransform, blend, antialiasing, shader);
}
var _skewMatrix:Matrix = new Matrix();
@@ -293,7 +274,7 @@ class FlxSymbol extends FlxSprite
* Bool flag showing whether transformMatrix is used for rendering or not.
* False by default, which means that transformMatrix isn't used for rendering
*/
- public var matrixExposed:Bool = false;
+ public var matrixExposed:Bool = true;
public var skew(default, null):FlxPoint = FlxPoint.get();
@@ -308,110 +289,88 @@ class FlxSymbol extends FlxSprite
}
}
}
-
// TYPEDEFS FOR ANIMATION.JSON PARSING
-
-typedef Parsed =
-{
- var MD:Metadata;
- var AN:Animation;
- var SD:SymbolDictionary; // Doesn't always have symbol dictionary!!
-}
-
-typedef Metadata =
-{
- /** Framerate */
- var FRT:Int;
-}
-
-/** Basically treated like one big symbol*/
-typedef Animation =
-{
- /** symbolName */
- var SN:String;
-
- var TL:Timeline;
-
- /** IDK what STI stands for, Symbole Type Instance?
- Anyways, it is NOT used in SYMBOLS, only the main AN animation
- */
- var STI:Dynamic;
-}
-
-/** DISCLAIMER, MAY NOT ACTUALLY BE CALLED
- SYMBOL TYPE ISNTANCE, IM JUST MAKING ASSUMPTION!! */
-typedef SymbolTypeInstance =
-{
- // var TL:Timeline;
- // var SN:String;
-}
-
-typedef SymbolDictionary =
-{
- var S:Array;
-}
-
-typedef Timeline =
-{
- /** Layers */
- var L:Array;
-}
-
-// Singular layer, not to be confused with LAYERS
-typedef Layer =
-{
- var LN:String;
-
- /** Frames */
- var FR:Array;
-}
-
-typedef Frame =
-{
- /** Frame index*/
- var I:Int;
-
- /** Duration, in frames*/
- var DU:Int;
-
- /** Elements*/
- var E:Array;
-}
-
-typedef Element =
-{
- var SI:SymbolInstance;
- var ASI:AtlasSymbolInstance;
-}
-
-/**
- Symbol instance, for SYMBOLS and refers to SYMBOLS
- */
-typedef SymbolInstance =
-{
- var SN:String;
-
- /** SymbolType (Graphic, Movieclip, Button)*/
- var ST:String;
-
- /** First frame*/
- var FF:Int;
-
- /** Loop type (Loop, play once, single frame)*/
- var LP:String;
-
- var TRP:TransformationPoint;
- var M3D:Array;
-}
-
-typedef AtlasSymbolInstance =
-{
- var N:String;
- var M3D:Array;
-}
-
-typedef TransformationPoint =
-{
- var x:Float;
- var y:Float;
-}
+// typedef Parsed =
+// {
+// var MD:Metadata;
+// var AN:Animation;
+// var SD:SymbolDictionary; // Doesn't always have symbol dictionary!!
+// }
+// typedef Metadata =
+// {
+// /** Framerate */
+// var FRT:Int;
+// }
+// /** Basically treated like one big symbol*/
+// typedef Animation =
+// {
+// /** symbolName */
+// var SN:String;
+// var TL:Timeline;
+// /** IDK what STI stands for, Symbole Type Instance?
+// Anyways, it is NOT used in SYMBOLS, only the main AN animation
+// */
+// var STI:Dynamic;
+// }
+// /** DISCLAIMER, MAY NOT ACTUALLY BE CALLED
+// SYMBOL TYPE ISNTANCE, IM JUST MAKING ASSUMPTION!! */
+// typedef SymbolTypeInstance =
+// {
+// // var TL:Timeline;
+// // var SN:String;
+// }
+// typedef SymbolDictionary =
+// {
+// var S:Array;
+// }
+// typedef Timeline =
+// {
+// /** Layers */
+// var L:Array;
+// }
+// // Singular layer, not to be confused with LAYERS
+// typedef Layer =
+// {
+// var LN:String;
+// /** Frames */
+// var FR:Array;
+// }
+// typedef Frame =
+// {
+// /** Frame index*/
+// var I:Int;
+// /** Duration, in frames*/
+// var DU:Int;
+// /** Elements*/
+// var E:Array;
+// }
+// typedef Element =
+// {
+// var SI:SymbolInstance;
+// var ASI:AtlasSymbolInstance;
+// }
+// /**
+// Symbol instance, for SYMBOLS and refers to SYMBOLS
+// */
+// typedef SymbolInstance =
+// {
+// var SN:String;
+// /** SymbolType (Graphic, Movieclip, Button)*/
+// var ST:String;
+// /** First frame*/
+// var FF:Int;
+// /** Loop type (Loop, play once, single frame)*/
+// var LP:String;
+// var TRP:TransformationPoint;
+// var M3D:Array;
+// }
+// typedef AtlasSymbolInstance =
+// {
+// var N:String;
+// var M3D:Array;
+// }
+// typedef TransformationPoint =
+// {
+// var x:Float;
+// var y:Float;
+// }
diff --git a/source/animate/ParseAnimate.hx b/source/animate/ParseAnimate.hx
new file mode 100644
index 000000000..a0de50a01
--- /dev/null
+++ b/source/animate/ParseAnimate.hx
@@ -0,0 +1,280 @@
+package animate;
+
+import haxe.format.JsonParser;
+import openfl.Assets;
+import sys.io.File;
+
+class ParseAnimate
+{
+ // make list of frames needed to render (with ASI)
+ // make GIANT list of all the frames ever and have them in order?
+ public static var symbolMap:Map = new Map();
+ public static var actualSprites:Map = new Map();
+
+ public static function init()
+ {
+ // Main.gids
+ var folder:String = 'tightestBars';
+
+ // var spritemap:Spritemap =
+ // var spritemap:Spritemap = genSpritemap('test/$folder/spritemap1.json');
+
+ actualSprites = genSpritemap('test/$folder/spritemap1.json');
+
+ var animation:AnimJson = cast CoolUtil.coolJSON(Assets.getText('src/$folder/Animation.json'));
+
+ generateSymbolmap(animation.SD.S);
+
+ trace("\n\nANIMATION SHIT\n");
+
+ var timelineLength:Int = 0;
+ for (lyr in animation.AN.TL.L)
+ timelineLength = Std.int(Math.max(lyr.FR.length, timelineLength));
+
+ var content:String = animation.AN.TL.L[0].LN;
+ content += "TOTAL FRAMES NEEDED: " + timelineLength + "\n";
+
+ for (frm in 0...timelineLength)
+ {
+ trace('FRAME NUMBER ' + frm);
+ try
+ {
+ parseTimeline(animation.AN.TL, 1, frm);
+ content += 'Good write on frame: ' + frm + "\n";
+ }
+ catch (e)
+ {
+ content += "BAD WRITE : " + frm + "\n";
+ content += "\t" + e + "\n";
+ trace(e);
+ }
+
+ // File.saveContent("output.txt", content);
+ }
+
+ parseTimeline(animation.AN.TL, 1, 0);
+ trace(actualSprites);
+ }
+
+ /**
+ * a MAP of SPRITES, not to be confused with Spritemap... lol
+ */
+ public static function genSpritemap(json:String):Map
+ {
+ var sprShitty:Spritemap = cast CoolUtil.coolJSON(json);
+ var sprMap:Map = new Map();
+
+ for (spr in sprShitty.ATLAS.SPRITES)
+ sprMap.set(spr.SPRITE.name, spr.SPRITE);
+ return sprMap;
+ }
+
+ public static function generateSymbolmap(symbols:Array)
+ {
+ for (symbol in symbols)
+ {
+ // trace(symbol.SN + "has: " + symbol.TL.L.length + " LAYERS");
+
+ symbolMap.set(symbol.SN, symbol);
+ // parseTimeline(symbol.TL);
+ }
+ }
+
+ public static var curLoopType:String;
+
+ /**
+ * Stuff for debug parsing
+ */
+ public static var depthTypeBeat:String = "";
+
+ public static var frameList:Array = [];
+ public static var matrixMap:Map>> = new Map();
+
+ // for loop stuf
+ public static var matrixHelp:Array> = [];
+
+ public static function resetFrameList()
+ {
+ frameList = [];
+ matrixMap.clear();
+ }
+
+ public static function parseTimeline(TL:Timeline, tabbed:Int = 0, ?frameInput:Int)
+ {
+ var strTab:String = "";
+ for (i in 0...tabbed)
+ strTab += '\t';
+
+ for (layer in TL.L)
+ {
+ var frameArray:Array = [];
+ var frameMap:Map = new Map();
+
+ for (frms in layer.FR)
+ {
+ for (i in 0...frms.DU)
+ frameArray.push(frms.I);
+
+ frameMap.set(frms.I, frms);
+ }
+
+ if (frameInput == null)
+ frameInput = 0;
+
+ if (curLoopType == "LP")
+ frameInput = frameArray[frameInput % frameArray.length];
+ else
+ frameInput = frameArray[frameInput];
+
+ var frame:Frame = frameMap.get(frameInput);
+
+ for (element in frame.E)
+ {
+ if (Reflect.hasField(element, "ASI"))
+ {
+ frameList.push(element.ASI.N);
+ matrixHelp.push(element.ASI.M3D);
+ matrixMap.set(element.ASI.N, matrixHelp);
+
+ matrixHelp = [];
+
+ depthTypeBeat = "";
+ curLoopType = "";
+ }
+ else
+ {
+ matrixHelp.push(element.SI.M3D);
+ depthTypeBeat += "->" + element.SI.SN;
+ curLoopType = element.SI.LP;
+ parseTimeline(symbolMap.get(element.SI.SN).TL, tabbed + 1, element.SI.FF);
+ }
+ }
+ }
+ }
+}
+
+typedef AnimJson =
+{
+ AN:Animation,
+ SD:SymbolDictionary,
+ MD:MetaData
+}
+
+typedef Animation =
+{
+ N:String,
+ SN:String,
+ TL:Timeline
+}
+
+typedef SymbolDictionary =
+{
+ S:Array
+}
+
+typedef Symbol =
+{
+ /**Symbol name*/
+ SN:String,
+
+ TL:Timeline
+}
+
+typedef Timeline =
+{
+ L:Array
+}
+
+typedef Layer =
+{
+ LN:String,
+ FR:Array
+}
+
+typedef Frame =
+{
+ E:Array,
+ I:Int,
+ DU:Int
+}
+
+typedef Element =
+{
+ SI:SymbolInstance,
+ ASI:AlsoSymbolInstance
+ // lmfao idk what ASI stands for lmfaoo, i dont think its "also"
+}
+
+typedef SymbolInstance =
+{
+ SN:String,
+
+ /**Symbol type, prob either G (graphic), or movie clip?*/
+ ST:String,
+
+ /**First frame*/
+ FF:Int,
+
+ /**Loop type, loop ping pong, etc.*/
+ LP:String,
+
+ /**3D matrix*/
+ M3D:Array,
+
+ TRP:
+ {
+ x:Float, y:Float
+ }
+}
+
+typedef AlsoSymbolInstance =
+{
+ N:String,
+ M3D:Array
+}
+
+typedef MetaData =
+{
+ /**
+ * Framerate
+ */
+ FRT:Int
+}
+
+// SPRITEMAP BULLSHIT
+typedef Spritemap =
+{
+ ATLAS:
+ {
+ SPRITES:Array
+ },
+ meta:Meta
+}
+
+typedef SpriteBullshit =
+{
+ SPRITE:Sprite
+}
+
+typedef Sprite =
+{
+ name:String,
+ x:Int,
+ y:Int,
+ w:Int,
+ h:Int,
+ rotated:Bool
+}
+
+typedef Meta =
+{
+ app:String,
+ verstion:String,
+ image:String,
+ format:String,
+ size:
+ {
+ w:Int, h:Float
+ },
+ resolution:Float
+}