[add] (render) add CompleteView

This commit is contained in:
2020-03-16 17:11:36 +03:00
parent 3252394f07
commit 2e62e6ab7b
8 changed files with 99 additions and 26 deletions

View File

@@ -1,6 +1,6 @@
{
"name": "puzzlez",
"version": "0.4.1",
"version": "0.4.2",
"private": true,
"devDependencies": {
"dateformat": "^3.0.3",

View File

@@ -0,0 +1,68 @@
package ru.m.puzzlez.render;
import flash.display.Shape;
import flash.geom.Matrix;
import ru.m.puzzlez.core.GamePreset;
class CompleteView extends Shape {
public var parts:Array<PartView>;
public var preset:GamePreset;
public function new() {
super();
parts = [];
}
public function addChild(part:PartView):Void {
if (part.parent != null) {
part.parent.removeChild(part);
}
parts.push(part);
}
public function redraw():Void {
if (preset == null) {
return;
}
var partWidth = preset.imageRect.width / preset.grid.width;
var partHeight = preset.imageRect.height / preset.grid.height;
graphics.clear();
graphics.lineStyle(2, 0xCCCCCC);
graphics.beginFill(0x555555, 0.4);
graphics.drawRect(0, 0, preset.imageRect.width, preset.imageRect.height);
graphics.endFill();
graphics.lineStyle();
for (partView in parts) {
var part = partView.part;
if (partView.currentImage != null) {
var image = partView.currentImage;
var m = new Matrix();
m.translate(partView.x, partView.y);
graphics.beginBitmapFill(image, m, false, true);
graphics.drawRect(m.tx, m.ty, image.width, image.height);
graphics.endFill();
}
var rect = part.rect.clone();
rect.x = part.gridX * part.rect.width;
rect.y = part.gridY * part.rect.height;
var path = RenderUtil.builder.build(rect, part.bounds);
for (value in RenderUtil.borderSettings) {
graphics.lineStyle(1, value.color, value.opacity);
path.move(value.offset.x, value.offset.y).draw(graphics);
graphics.lineStyle();
}
}
}
public function clean():Void {
preset = null;
parts = [];
graphics.clear();
}
}

View File

@@ -1,5 +1,6 @@
package ru.m.puzzlez.render;
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.display.PixelSnapping;
import flash.display.Sprite;
@@ -10,6 +11,7 @@ import ru.m.puzzlez.render.RenderUtil;
class PartView extends Sprite {
public var id(default, null):Int;
public var part(default, null):Part;
public var position(default, set):Point;
public var completed(default, default):Bool;
public var target(default, null):Point;
@@ -29,11 +31,21 @@ class PartView extends Sprite {
return image;
}
private var size:Point;
public var currentImage(get, never):BitmapData;
private function get_currentImage():BitmapData {
if (image == null) {
return null;
}
return completed ? image.borderedImage : image.shadedImage;
}
public var size(default, null):Point;
public function new(part:Part) {
super();
this.id = part.id;
this.part = part;
this.size = part.rect.size.clone();
this.target = new Point(part.gridX * size.x, part.gridY * size.y);
}
@@ -52,6 +64,7 @@ class PartView extends Sprite {
public function complete():Void {
position = target;
completed = true;
refresh();
redraw();
}
@@ -66,7 +79,7 @@ class SpritePartView extends PartView {
if (image == null) {
return;
}
var image = completed ? image.borderedImage : image.shadedImage;
var image = currentImage;
graphics.clear();
graphics.beginBitmapFill(image, null, false, true);
graphics.drawRect(0, 0, image.width, image.height);
@@ -84,6 +97,6 @@ class BitmapPartView extends PartView {
}
override private function redraw():Void {
bitmap.bitmapData = completed ? image.borderedImage : image.shadedImage;
bitmap.bitmapData = currentImage;
}
}

View File

@@ -45,7 +45,7 @@ class Render extends SpriteView implements IRender {
private var progress:ProgressView;
private var container:Sprite;
private var tableView:Sprite;
private var imageView:Sprite;
private var imageView:CompleteView;
private var parts:Map<Int, PartView>;
private var activePart:PartView;
private var activePoint:Point;
@@ -63,7 +63,7 @@ class Render extends SpriteView implements IRender {
signal = new Signal();
tableView = new Sprite();
tableView.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
imageView = new Sprite();
imageView = new CompleteView();
tableView.addChild(imageView);
container.addChild(tableView);
parts = new Map();
@@ -80,6 +80,7 @@ class Render extends SpriteView implements IRender {
var part:PartView = parts[id];
part.complete();
imageView.addChild(part);
imageView.redraw();
case COMPLETE:
AlertView.alert("Complete!");
case _:
@@ -105,12 +106,8 @@ class Render extends SpriteView implements IRender {
imageView.x = state.preset.imageRect.x;
imageView.y = state.preset.imageRect.y;
imageView.graphics.clear();
imageView.graphics.lineStyle(2, 0xCCCCCC);
imageView.graphics.beginFill(0x555555, 0.4);
imageView.graphics.drawRect(0, 0, state.preset.imageRect.width, state.preset.imageRect.height);
imageView.graphics.endFill();
imageView.graphics.lineStyle();
imageView.preset = state.preset;
imageView.redraw();
progress.text = "Loading image";
content.addChild(progress.content);
imageStorage.resolve(state.preset.imageId).then(onImageResolved);
@@ -128,6 +125,7 @@ class Render extends SpriteView implements IRender {
if (progress.content.parent != null) {
progress.content.parent.removeChild(progress.content);
}
imageView.redraw();
}
});
}
@@ -227,5 +225,6 @@ class Render extends SpriteView implements IRender {
}
}
parts = new Map();
imageView.clean();
}
}

View File

@@ -106,8 +106,8 @@ class RenderUtil {
var image = new BitmapData(Std.int(geometry.rect.width), Std.int(geometry.rect.height), true, 0x00000000);
image.draw(canvas, null, null, null, null, true);
var shadedImage = drawShadow(image, path, shadowSettings);
var borderedImage = drawBorder(image, path, borderSettings);
return {borderedImage: borderedImage, shadedImage: shadedImage};
//var borderedImage = drawBorder(image, path, borderSettings);
return {borderedImage: image, shadedImage: shadedImage};
}
public static function containRectangle(source:Rectangle, target:Rectangle):Rectangle {

View File

@@ -95,7 +95,11 @@ import ru.m.puzzlez.view.popup.PreviewPopup;
ConfirmView.confirm("Exit?");
}).then(result -> {
if (result) {
switcher.change(StartFrame.ID);
if (game.state.status == COMPLETE) {
switcher.change(GameListFrame.ID, COMPLETE);
} else {
switcher.back();
}
}
});
}

View File

@@ -65,12 +65,6 @@ import ru.m.puzzlez.view.PuzzleImageView;
}
private function refresh():Void {
data = {
page: page,
total: data != null ? data.total : 0,
data: [],
};
data.data = [];
loading.promise = storage.getIndexPage(page).then(data -> this.data = data);
}

View File

@@ -95,11 +95,6 @@ import ru.m.puzzlez.view.PuzzleImageView;
}
private function refresh():Void {
data = {
page: page,
total: data != null ? data.total : 0,
data: [],
};
loading.promise = source.source.getIndexPage(page).then(data -> this.data = data);
}