From 2e62e6ab7b1ba5d1059c98510962bff7761d6738 Mon Sep 17 00:00:00 2001 From: shmyga Date: Mon, 16 Mar 2020 17:11:36 +0300 Subject: [PATCH] [add] (render) add CompleteView --- package.json | 2 +- src/haxe/ru/m/puzzlez/render/CompleteView.hx | 68 ++++++++++++++++++++ src/haxe/ru/m/puzzlez/render/PartView.hx | 19 +++++- src/haxe/ru/m/puzzlez/render/Render.hx | 15 ++--- src/haxe/ru/m/puzzlez/render/RenderUtil.hx | 4 +- src/haxe/ru/m/puzzlez/view/GameFrame.hx | 6 +- src/haxe/ru/m/puzzlez/view/GameListFrame.hx | 6 -- src/haxe/ru/m/puzzlez/view/ImageListFrame.hx | 5 -- 8 files changed, 99 insertions(+), 26 deletions(-) create mode 100644 src/haxe/ru/m/puzzlez/render/CompleteView.hx diff --git a/package.json b/package.json index ee095ec..dfc78d3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "puzzlez", - "version": "0.4.1", + "version": "0.4.2", "private": true, "devDependencies": { "dateformat": "^3.0.3", diff --git a/src/haxe/ru/m/puzzlez/render/CompleteView.hx b/src/haxe/ru/m/puzzlez/render/CompleteView.hx new file mode 100644 index 0000000..a522ff6 --- /dev/null +++ b/src/haxe/ru/m/puzzlez/render/CompleteView.hx @@ -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; + 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(); + } +} diff --git a/src/haxe/ru/m/puzzlez/render/PartView.hx b/src/haxe/ru/m/puzzlez/render/PartView.hx index 8e6303c..0fa613d 100644 --- a/src/haxe/ru/m/puzzlez/render/PartView.hx +++ b/src/haxe/ru/m/puzzlez/render/PartView.hx @@ -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; } } diff --git a/src/haxe/ru/m/puzzlez/render/Render.hx b/src/haxe/ru/m/puzzlez/render/Render.hx index fd77cd4..369ca2a 100644 --- a/src/haxe/ru/m/puzzlez/render/Render.hx +++ b/src/haxe/ru/m/puzzlez/render/Render.hx @@ -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; 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(); } } diff --git a/src/haxe/ru/m/puzzlez/render/RenderUtil.hx b/src/haxe/ru/m/puzzlez/render/RenderUtil.hx index 134274b..cddbf6d 100644 --- a/src/haxe/ru/m/puzzlez/render/RenderUtil.hx +++ b/src/haxe/ru/m/puzzlez/render/RenderUtil.hx @@ -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 { diff --git a/src/haxe/ru/m/puzzlez/view/GameFrame.hx b/src/haxe/ru/m/puzzlez/view/GameFrame.hx index 6d028b5..75df905 100644 --- a/src/haxe/ru/m/puzzlez/view/GameFrame.hx +++ b/src/haxe/ru/m/puzzlez/view/GameFrame.hx @@ -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(); + } } }); } diff --git a/src/haxe/ru/m/puzzlez/view/GameListFrame.hx b/src/haxe/ru/m/puzzlez/view/GameListFrame.hx index 5a4a05a..ca4b3a5 100644 --- a/src/haxe/ru/m/puzzlez/view/GameListFrame.hx +++ b/src/haxe/ru/m/puzzlez/view/GameListFrame.hx @@ -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); } diff --git a/src/haxe/ru/m/puzzlez/view/ImageListFrame.hx b/src/haxe/ru/m/puzzlez/view/ImageListFrame.hx index bfc5cd4..ce537f9 100644 --- a/src/haxe/ru/m/puzzlez/view/ImageListFrame.hx +++ b/src/haxe/ru/m/puzzlez/view/ImageListFrame.hx @@ -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); }