optimize adding additional jigsaw sprites
This commit is contained in:
@@ -39,6 +39,7 @@ import haxe.ds.Option;
|
||||
import jigsawx.JigsawPiece;
|
||||
import jigsawx.Jigsawx;
|
||||
import jigsawx.math.Vec2;
|
||||
import kiss_flixel.DragToSelectPlugin;
|
||||
|
||||
typedef StartPuzzleFunc = (Int, Int) -> Void;
|
||||
|
||||
|
@@ -266,12 +266,22 @@
|
||||
(set pieceCamera.scroll save.data.scroll))
|
||||
|
||||
(unless (and (= lastRewardFileIndex rewardFileIndex) (= lastTotalPoints (m.totalPoints)))
|
||||
// When the current puzzle has changed:
|
||||
(unless (= lastRewardFileIndex rewardFileIndex)
|
||||
(set rewardSprite
|
||||
(new FlxSprite 0 0
|
||||
(BitmapData.fromFile
|
||||
currentRewardFile.path)))
|
||||
(when rewardSprites
|
||||
(remove rewardSprites))
|
||||
|
||||
(set matchingPiecesLeft (new Map))
|
||||
(set matchingPiecesRight (new Map))
|
||||
(set matchingPiecesUp (new Map))
|
||||
(set matchingPiecesDown (new Map))
|
||||
(set pieceData (new Map))
|
||||
(set connectedPieces (new Map))
|
||||
(set indexMap (new Map))
|
||||
(set spriteMap (new Map))
|
||||
|
||||
(rewardSprite.setGraphicSize FlxG.width 0)
|
||||
(rewardSprite.updateHitbox)
|
||||
(when (> rewardSprite.height FlxG.height)
|
||||
@@ -281,10 +291,19 @@
|
||||
|
||||
(unless save.data.zoom
|
||||
(set pieceCamera.zoom rewardSprite.scale.x))
|
||||
(when rewardSprites
|
||||
#{
|
||||
var plugin = FlxG.plugins.get(DragToSelectPlugin);
|
||||
plugin.clearEnabledSprites();
|
||||
}#
|
||||
(rewardSprites.destroy)
|
||||
(remove rewardSprites)
|
||||
(set rewardSprites null)))
|
||||
|
||||
(unless rewardSprites
|
||||
(set rewardSprites (new FlxTypedGroup))
|
||||
// add rewardSprites group before enabling drag-to-select on instances
|
||||
(add rewardSprites)
|
||||
(add rewardSprites))
|
||||
|
||||
(doFor map [matchingPiecesLeft matchingPiecesRight matchingPiecesUp matchingPiecesDown]
|
||||
(map.clear))
|
||||
@@ -325,10 +344,12 @@
|
||||
angle (ifLet [angle (dictGet (the Map<Int,Float> save.data.storedAngles) i)]
|
||||
angle
|
||||
(nth startingAngles i))
|
||||
s (new KissExtendedSprite pos.x pos.y)
|
||||
&mut s (dictGet spriteMap i)
|
||||
source (new FlxSprite)
|
||||
mask (new FlxSprite)
|
||||
sourceRect (new Rectangle (/ jig.xy.x ros) (/ jig.xy.y ros) (/ jig.wh.x ros) (/ jig.wh.y ros))]
|
||||
(unless s
|
||||
(set s (new KissExtendedSprite pos.x pos.y))
|
||||
(set s.angle angle)
|
||||
(set s.priorityID i)
|
||||
(dictSet (the Map<Int,FlxPoint> save.data.storedPositions) i pos)
|
||||
@@ -384,7 +405,7 @@
|
||||
(set s.cameras [pieceCamera])
|
||||
|
||||
|
||||
(rewardSprites.add s)))
|
||||
(rewardSprites.add s))))
|
||||
(doFor row (range PUZZLE_HEIGHT)
|
||||
(doFor col (range PUZZLE_WIDTH)
|
||||
(let [id (nth indexGrid row col)]
|
||||
|
@@ -29,6 +29,19 @@ class DragToSelectPlugin extends FlxBasic {
|
||||
super();
|
||||
}
|
||||
|
||||
public function clearEnabledSprites(?state:FlxState) {
|
||||
if (state == null) state = FlxG.state;
|
||||
dragStates[state].enabledSprites = [];
|
||||
dragStates[state].selectedSprites = [];
|
||||
}
|
||||
|
||||
// Don't use this on a whole list of sprites! It will be O(N^2)
|
||||
public function disableSprite(s: KissExtendedSprite, ?state:FlxState) {
|
||||
if (state == null) state = FlxG.state;
|
||||
dragStates[state].enabledSprites.remove(s);
|
||||
dragStates[state].selectedSprites.remove(s);
|
||||
}
|
||||
|
||||
public function enableSprite(s:KissExtendedSprite, ?state:FlxState, ?camera:FlxCamera) {
|
||||
if (state == null) state = FlxG.state;
|
||||
if (camera == null) camera = FlxG.camera;
|
||||
|
@@ -115,8 +115,19 @@ class KissExtendedSprite extends flixel.addons.display.FlxExtendedSprite {
|
||||
plugin.enableSprite(this, state, thisCamera());
|
||||
_dragToSelectEnabled = true;
|
||||
}
|
||||
public function disableDragToSelect(?state:FlxState) {
|
||||
var plugin = FlxG.plugins.get(DragToSelectPlugin);
|
||||
plugin.disableSprite(this, state);
|
||||
_dragToSelectEnabled = false;
|
||||
}
|
||||
|
||||
override function update(elapsed:Float) {
|
||||
public override function destroy() {
|
||||
if (_dragToSelectEnabled)
|
||||
disableDragToSelect();
|
||||
super.destroy();
|
||||
}
|
||||
|
||||
public override function update(elapsed:Float) {
|
||||
#if debug
|
||||
// color = (mouseOver && pixelPerfect(_dragPixelPerfectAlpha)) ? FlxColor.LIME : FlxColor.WHITE;
|
||||
#end
|
||||
|
Reference in New Issue
Block a user