[add] PresetFrame

This commit is contained in:
2020-01-22 18:01:12 +03:00
parent eed23961f7
commit 843a0e840d
8 changed files with 103 additions and 33 deletions

44
package-lock.json generated
View File

@@ -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",

View File

@@ -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,
}

View File

@@ -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);

View File

@@ -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<ImageId> {
@:template class GameFrame extends FrameView<GamePreset> {
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();

View File

@@ -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 {

View File

@@ -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<ImageId> {
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);
}
}

View File

@@ -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()

View File

@@ -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}