Files
tankz/src/client/haxe/ru/m/animate/Animate.hx

57 lines
1.4 KiB
Haxe

package ru.m.animate;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.PixelSnapping;
typedef Frame = {
var image:BitmapData;
var length:Int;
}
class Animate extends Bitmap {
public var playing(default, default):Bool;
public var frames(default, set):Array<Frame>;
private var sequence:Array<BitmapData>;
private var index:Int;
@:provide private static var manager:AnimateManager;
public function new(?frames:Array<Frame>) {
super(null, PixelSnapping.AUTO, true);
this.frames = frames == null ? [] : frames;
manager.add(this);
}
public function set_frames(value:Array<Frame>):Array<Frame> {
sequence = [];
index = 0;
if (value != null) {
frames = value;
for (frame in frames) {
sequence = sequence.concat([for (i in 0...frame.length) frame.image]);
}
bitmapData = sequence[0];
} else {
bitmapData = null;
}
return frames;
}
public function update():Void {
if (++index >= sequence.length) {
index = 0;
}
var nextBitmapData = sequence[index];
x -= (nextBitmapData.width - bitmapData.width) / 2;
y -= (nextBitmapData.height - bitmapData.height) / 2;
bitmapData = nextBitmapData;
}
public function dispose():Void {
manager.remove(this);
}
}