[render] add background choise button

This commit is contained in:
2020-02-21 15:25:17 +03:00
parent db78b5cff4
commit 449f1e6d00
10 changed files with 150 additions and 1 deletions

View File

@@ -4,6 +4,7 @@ import haxework.App;
import haxework.log.TraceLogger;
import ru.m.puzzlez.storage.GameStorage;
import ru.m.puzzlez.storage.ImageStorage;
import ru.m.puzzlez.storage.SettingsStorage;
import ru.m.puzzlez.view.PuzzlezAppView;
import ru.m.update.Updater;
@@ -15,6 +16,7 @@ class PuzzlezApp extends App {
// ToDo: fix @:provide macro
GameStorage;
ImageStorage;
SettingsStorage;
Const.init();
L.push(new TraceLogger());
updater = new Updater(Const.VERSION, "https://shmyga.ru/repo/puzzlez/packages.json");

View File

@@ -0,0 +1,10 @@
package ru.m.puzzlez.render;
import haxework.color.Color;
import ru.m.puzzlez.core.Id;
enum Background {
NONE;
COLOR(color:Color);
IMAGE(id:ImageId);
}

View File

@@ -1,5 +1,6 @@
package ru.m.puzzlez.render;
import ru.m.puzzlez.storage.SettingsStorage;
import flash.display.BitmapData;
import flash.display.PNGEncoderOptions;
import flash.display.Sprite;
@@ -23,6 +24,8 @@ class Render extends SpriteView implements IRender {
public var signal(default, null):Signal<GameEvent>;
public var scale(get, set):Float;
@:provide static var settings:SettingsStorage;
private function get_scale():Float {
return tableView.scaleX;
}
@@ -97,7 +100,7 @@ class Render extends SpriteView implements IRender {
imageView.y = state.preset.imageRect.y;
imageView.graphics.clear();
imageView.graphics.lineStyle(2, 0xCCCCCC);
imageView.graphics.beginFill(0x555555);
imageView.graphics.beginFill(0x555555, 0.6);
imageView.graphics.drawRect(0, 0, state.preset.imageRect.width, state.preset.imageRect.height);
imageView.graphics.endFill();
imageView.graphics.lineStyle();
@@ -132,6 +135,19 @@ class Render extends SpriteView implements IRender {
}
}
override public function redraw():Void {
switch settings.background {
case Background.NONE:
super.redraw();
case Background.COLOR(color):
content.graphics.clear();
content.graphics.beginFill(color);
content.graphics.drawRect(0, 0, width, height);
content.graphics.endFill();
case Background.IMAGE(id):
}
}
private function onMouseDown(event:MouseEvent):Void {
var point:FlashPoint = new FlashPoint(event.stageX, event.stageY);
var objects = tableView.getObjectsUnderPoint(point);

View File

@@ -0,0 +1,24 @@
package ru.m.puzzlez.storage;
import haxework.storage.SharedObjectStorage;
import ru.m.puzzlez.render.Background;
@:provide class SettingsStorage extends SharedObjectStorage {
private inline static var VERSION = 1;
private inline static var BACKGROUND_KEY = "background";
public var background(get, set):Background;
private inline function get_background():Background {
return exists(BACKGROUND_KEY) ? read(BACKGROUND_KEY) : NONE;
}
private inline function set_background(value:Background):Background {
write(BACKGROUND_KEY, value);
return value;
}
public function new() {
super('setting/${VERSION}');
}
}

View File

@@ -1,14 +1,18 @@
package ru.m.puzzlez.view;
import haxe.Timer;
import haxework.color.Color;
import haxework.view.frame.FrameSwitcher;
import haxework.view.frame.FrameView;
import ru.m.puzzlez.core.Game;
import ru.m.puzzlez.core.GameEvent;
import ru.m.puzzlez.core.GameState;
import ru.m.puzzlez.core.IGame;
import ru.m.puzzlez.render.Background;
import ru.m.puzzlez.render.IRender;
import ru.m.puzzlez.storage.GameStorage;
import ru.m.puzzlez.storage.SettingsStorage;
import ru.m.view.ColorPopup;
@:template class GameFrame extends FrameView<GameState> {
public static var ID = "game";
@@ -17,6 +21,7 @@ import ru.m.puzzlez.storage.GameStorage;
private var game:IGame;
@:provide var switcher:FrameSwitcher;
@:provide var storage:GameStorage;
@:provide var settings:SettingsStorage;
private var saveTimer:Timer;
@@ -69,6 +74,15 @@ import ru.m.puzzlez.storage.GameStorage;
}
}
private function choiseBackground():Void {
ColorPopup.choise().then((color:Null<Color>) -> {
if (color != null) {
settings.background = COLOR(color);
render.toRedraw();
}
});
}
private function back():Void {
switcher.back();
}

View File

@@ -9,6 +9,12 @@ views:
$type: ru.m.puzzlez.render.Render
geometry.width: 100%
geometry.height: 100%
- $type: haxework.view.form.ButtonView
text: Background
geometry.position: absolute
geometry.hAlign: left
geometry.vAlign: top
+onPress: ~choiseBackground()
- $type: haxework.view.form.ButtonView
text: Back
geometry.position: absolute

View File

@@ -0,0 +1,13 @@
package ru.m.view;
import promhx.Promise;
import haxework.color.Color;
import haxework.view.popup.PopupView;
@:template class ColorPopup extends PopupView<Color> {
public static function choise(message:String = null):Promise<Color> {
var result = new ColorPopup();
return result.show();
}
}

View File

@@ -0,0 +1,28 @@
---
view:
$type: haxework.view.group.VGroupView
geometry.width: 400
geometry.height: 200
geometry.padding: 10
geometry.hAlign: center
geometry.vAlign: middle
style: frame
views:
- $type: haxework.view.group.HGroupView
geometry.width: 100%
layout.margin: 10
views:
- id: header
$type: haxework.view.form.LabelView
- id: image
$type: ru.m.view.ColorView
+onSelect: ~close
- $type: haxework.view.group.HGroupView
geometry.width: 100%
layout.hAlign: center
layout.margin: 10
views:
- $type: haxework.view.form.ButtonView
text: OK
+onPress: ~close('ok')
visible: false

View File

@@ -0,0 +1,36 @@
package ru.m.view;
import flash.events.MouseEvent;
import haxework.color.Color;
import haxework.signal.Signal;
import haxework.view.ImageView;
import openfl.Assets;
class ColorView extends ImageView {
public var onSelect(default, null):Signal<Color> = new Signal();
public function new() {
super(Assets.getBitmapData("resources/colors.png"));
content.cacheAsBitmap = true;
content.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
}
private function onMouseDown(event:MouseEvent):Void {
content.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
content.stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
onMouseMove(event);
}
private function onMouseMove(event:MouseEvent):Void {
if (event.localX >= width || event.localY >= height) {
return;
}
onSelect.emit(image.getPixel32(Std.int(event.localX), Std.int(event.localY)));
}
private function onMouseUp(event:MouseEvent):Void {
content.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
content.stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
}
}

BIN
src/resources/colors.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB