From 843a0e840d12d0169d1a7f6332241a6bb805df8d Mon Sep 17 00:00:00 2001 From: shmyga Date: Wed, 22 Jan 2020 18:01:12 +0300 Subject: [PATCH] [add] PresetFrame --- package-lock.json | 44 +++++++++---------- src/haxe/ru/m/puzzlez/core/GameUtil.hx | 8 ++-- src/haxe/ru/m/puzzlez/render/Render.hx | 1 + src/haxe/ru/m/puzzlez/view/GameFrame.hx | 9 ++-- src/haxe/ru/m/puzzlez/view/ImagesFrame.hx | 6 ++- src/haxe/ru/m/puzzlez/view/PresetFrame.hx | 44 +++++++++++++++++++ src/haxe/ru/m/puzzlez/view/PresetFrame.yaml | 23 ++++++++++ .../ru/m/puzzlez/view/PuzzlezAppView.yaml | 1 + 8 files changed, 103 insertions(+), 33 deletions(-) create mode 100644 src/haxe/ru/m/puzzlez/view/PresetFrame.hx create mode 100644 src/haxe/ru/m/puzzlez/view/PresetFrame.yaml diff --git a/package-lock.json b/package-lock.json index 496dadc..f12f977 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "puzzlez", - "version": "0.0.1", + "version": "0.1.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -124,9 +124,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", + "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -480,9 +480,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", + "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -1078,9 +1078,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", + "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -2836,9 +2836,9 @@ } }, "gulp-haxetool": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/gulp-haxetool/-/gulp-haxetool-0.1.3.tgz", - "integrity": "sha512-oaJIOHc1TGBsFEjuVV6ON1050umCZbpy61ph1Qt6/p+f5NO2WWnbVFhoH+0dL2GedCHEiuihbzpVzV1DT9jsXg==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/gulp-haxetool/-/gulp-haxetool-0.1.4.tgz", + "integrity": "sha512-/GAw7E6wwaB4jI+o7HqM0/TXJhbW5BqzuktJpUZJukfKn60n9tx3fpem/jABe4tYmNNRrt716hnbcRFXJKKjfQ==", "dev": true, "requires": { "ansi-colors": "^1.1.0", @@ -4627,9 +4627,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", + "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -5475,9 +5475,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", + "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -6164,9 +6164,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", + "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", "dev": true, "requires": { "inherits": "^2.0.3", diff --git a/src/haxe/ru/m/puzzlez/core/GameUtil.hx b/src/haxe/ru/m/puzzlez/core/GameUtil.hx index 237b0b7..c1c2002 100644 --- a/src/haxe/ru/m/puzzlez/core/GameUtil.hx +++ b/src/haxe/ru/m/puzzlez/core/GameUtil.hx @@ -63,15 +63,15 @@ class BoundsMap { class GameUtil { - public static function buildPreset(image:ImageId):GamePreset { - var size = 8; + public static function buildPreset(image:ImageId, width:Int = 8, height:Int = 8):GamePreset { var offsetX = 500; var offsetY = 200; - var imageRect = new Rectangle(offsetX, offsetY, 1024, 1024); + var s = width / height; + var imageRect = new Rectangle(offsetX, offsetY, 1024, 1024 / s); var tableRect = new Rectangle(0, 0, imageRect.width + offsetX * 2, imageRect.height + offsetY * 2); return { image:image, - grid: {width: size, height: size}, + grid: {width: width, height: height}, tableRect: tableRect, imageRect: imageRect, } diff --git a/src/haxe/ru/m/puzzlez/render/Render.hx b/src/haxe/ru/m/puzzlez/render/Render.hx index 4c36cb7..cca3ca3 100644 --- a/src/haxe/ru/m/puzzlez/render/Render.hx +++ b/src/haxe/ru/m/puzzlez/render/Render.hx @@ -79,6 +79,7 @@ class Render extends SpriteView implements IRender { table.addChild(partView); } + table.graphics.clear(); table.graphics.lineStyle(2, 0xCCCCCC); table.graphics.beginFill(0x555555); table.graphics.drawRect(state.preset.imageRect.x, state.preset.imageRect.y, state.preset.imageRect.width, state.preset.imageRect.height); diff --git a/src/haxe/ru/m/puzzlez/view/GameFrame.hx b/src/haxe/ru/m/puzzlez/view/GameFrame.hx index c107368..f7ec076 100644 --- a/src/haxe/ru/m/puzzlez/view/GameFrame.hx +++ b/src/haxe/ru/m/puzzlez/view/GameFrame.hx @@ -3,12 +3,11 @@ package ru.m.puzzlez.view; import haxework.view.frame.FrameSwitcher; import haxework.view.frame.FrameView; import ru.m.puzzlez.core.Game; -import ru.m.puzzlez.core.GameUtil; -import ru.m.puzzlez.core.Id; +import ru.m.puzzlez.core.GamePreset; import ru.m.puzzlez.core.IGame; import ru.m.puzzlez.render.IRender; -@:template class GameFrame extends FrameView { +@:template class GameFrame extends FrameView { public static var ID = "game"; @:view private var render:IRender; @@ -19,9 +18,9 @@ import ru.m.puzzlez.render.IRender; super(ID); } - override public function onShow(image:ImageId):Void { + override public function onShow(preset:GamePreset):Void { onHide(); - game = new Game(GameUtil.buildPreset(image)); + game = new Game(preset); game.signal.connect(render.onGameEvent); render.signal.connect(game.signal.emit); game.start(); diff --git a/src/haxe/ru/m/puzzlez/view/ImagesFrame.hx b/src/haxe/ru/m/puzzlez/view/ImagesFrame.hx index 8db45bc..8776109 100644 --- a/src/haxe/ru/m/puzzlez/view/ImagesFrame.hx +++ b/src/haxe/ru/m/puzzlez/view/ImagesFrame.hx @@ -46,7 +46,9 @@ import ru.m.puzzlez.storage.ImageStorage; result.fillType = FillType.COVER; result.setSize(192, 128); result.image = Assets.getBitmapData("resources/icon.png"); - imageStorage.resolve(image, true).then(function(image) result.image = image); + imageStorage.resolve(image, true) + .then(function(image) result.image = image) + .catchError(function(error) L.e("ImageStorage", "", error)); return result; } @@ -60,7 +62,7 @@ import ru.m.puzzlez.storage.ImageStorage; } private function start(image:ImageId):Void { - switcher.change(GameFrame.ID, image); + switcher.change(PresetFrame.ID, image); } private function back():Void { diff --git a/src/haxe/ru/m/puzzlez/view/PresetFrame.hx b/src/haxe/ru/m/puzzlez/view/PresetFrame.hx new file mode 100644 index 0000000..5be8b69 --- /dev/null +++ b/src/haxe/ru/m/puzzlez/view/PresetFrame.hx @@ -0,0 +1,44 @@ +package ru.m.puzzlez.view; +import haxework.view.form.InputView; +import openfl.Assets; +import haxework.view.ImageView; +import haxework.view.frame.FrameSwitcher; +import haxework.view.frame.FrameView; +import ru.m.puzzlez.core.GameUtil; +import ru.m.puzzlez.core.Id; +import ru.m.puzzlez.storage.ImageStorage; + +@:template class PresetFrame extends FrameView { + public static var ID = "preset"; + + @:view("image") var imageView:ImageView; + @:view("width") var widthView:InputView; + @:view("height") var heightView:InputView; + + @:provide var imageStorage:ImageStorage; + @:provide var switcher:FrameSwitcher; + + private var imageId:ImageId; + + public function new() { + super(ID); + widthView.text = "8"; + heightView.text = "8"; + } + + override public function onShow(data:ImageId):Void { + super.onShow(data); + imageId = data; + imageView.image = Assets.getBitmapData("resources/icon.png"); + imageStorage.resolve(imageId).then(function(image) imageView.image = image); + } + + private function start():Void { + var preset = GameUtil.buildPreset(imageId, Std.parseInt(widthView.text), Std.parseInt(heightView.text)); + switcher.change(GameFrame.ID, preset); + } + + private function back():Void { + switcher.change(ImagesFrame.ID); + } +} diff --git a/src/haxe/ru/m/puzzlez/view/PresetFrame.yaml b/src/haxe/ru/m/puzzlez/view/PresetFrame.yaml new file mode 100644 index 0000000..a763d78 --- /dev/null +++ b/src/haxe/ru/m/puzzlez/view/PresetFrame.yaml @@ -0,0 +1,23 @@ +--- +style: frame +views: + - id: image + $type: haxework.view.ImageView + stretch: false + fillType: cover + geometry.stretch: true + - id: width + $type: haxework.view.form.InputView + geometry.width: 100 + - id: height + $type: haxework.view.form.InputView + geometry.width: 100 + - $type: haxework.view.form.ButtonView + text: Start + +onPress: ~start() + - $type: haxework.view.form.ButtonView + text: Back + geometry.position: absolute + geometry.hAlign: right + geometry.vAlign: top + +onPress: ~back() diff --git a/src/haxe/ru/m/puzzlez/view/PuzzlezAppView.yaml b/src/haxe/ru/m/puzzlez/view/PuzzlezAppView.yaml index 429a517..c2ef373 100644 --- a/src/haxe/ru/m/puzzlez/view/PuzzlezAppView.yaml +++ b/src/haxe/ru/m/puzzlez/view/PuzzlezAppView.yaml @@ -7,4 +7,5 @@ views: factory: _start_: {$class: ru.m.puzzlez.view.StartFrame} _images_: {$class: ru.m.puzzlez.view.ImagesFrame} + _preset_: {$class: ru.m.puzzlez.view.PresetFrame} _game_: {$class: ru.m.puzzlez.view.GameFrame}