diff --git a/src/client/haxe/ru/m/tankz/storage/SettingsStorage.hx b/src/client/haxe/ru/m/tankz/storage/SettingsStorage.hx index 764c834..3161ad5 100644 --- a/src/client/haxe/ru/m/tankz/storage/SettingsStorage.hx +++ b/src/client/haxe/ru/m/tankz/storage/SettingsStorage.hx @@ -11,21 +11,10 @@ import ru.m.tankz.control.Control.TankAction; class SettingsStorage extends SharedObjectStorage { - public var screenGamepad(get, set):Bool; - public function new() { super("settings-2"); } - private function get_screenGamepad():Bool { - return read("screenGamepad"); - } - - private function set_screenGamepad(value:Bool):Bool { - write("screenGamepad", value); - return value; - } - public function getActionConfig(index:Int):ActionConfig { return exists('action:$index') ? read('action:$index') : getDefaultActionConfig(index); } diff --git a/src/client/haxe/ru/m/tankz/view/GameFrame.hx b/src/client/haxe/ru/m/tankz/view/GameFrame.hx index db83b1f..e7a0268 100644 --- a/src/client/haxe/ru/m/tankz/view/GameFrame.hx +++ b/src/client/haxe/ru/m/tankz/view/GameFrame.hx @@ -1,5 +1,6 @@ package ru.m.tankz.view; +import ru.m.control.DeviceType; import haxework.view.frame.FrameSwitcher; import haxework.view.VGroupView; import ru.m.control.IControlBus; @@ -28,13 +29,21 @@ import ru.m.tankz.view.GamepadView; @:provide var record:GameRecord; @:provide var switcher:FrameSwitcher; @:provide var gameStorage:GameStorage; - @:provide var settings:SettingsStorage; + @:provide static var settings:SettingsStorage; @:provide var game:IGame; @:provide static var bus:IControlBus; public function onShow():Void { - gamepad.visible = settings.screenGamepad; + gamepad.visible = false; + for (i in 0...1) { + switch settings.getActionConfig(i).device { + case GAMEPAD(GamepadView.ID): + gamepad.visible = true; + break; + case _: + } + } bus.connect(gamepad); gameView.type = game.type; soundManager.config = game.config; diff --git a/src/client/haxe/ru/m/tankz/view/GamepadView.hx b/src/client/haxe/ru/m/tankz/view/GamepadView.hx index 13ed27c..5f97d7e 100644 --- a/src/client/haxe/ru/m/tankz/view/GamepadView.hx +++ b/src/client/haxe/ru/m/tankz/view/GamepadView.hx @@ -1,7 +1,8 @@ package ru.m.tankz.view; -import flash.events.MouseEvent; import flash.display.Graphics; +import flash.display.Stage; +import flash.events.MouseEvent; import flash.events.TouchEvent; import haxework.signal.Signal; import haxework.view.skin.ISkin; @@ -42,7 +43,7 @@ class GamepadSkin implements ISkin { } class GamepadView extends SpriteView implements IControlDevice { - public static var ID:Int = -128; + public static var ID(default, never):Int = -128; public var type(default, null):DeviceType; public var signal(default, null):Signal2; @@ -50,9 +51,7 @@ class GamepadView extends SpriteView implements IControlDevice { public var areas(default, null):Array; public var currentAreas(default, null):Map; - private static function touchSupport():Bool { - return false; - } + private var stage:Stage; public function new() { super(); @@ -67,8 +66,9 @@ class GamepadView extends SpriteView implements IControlDevice { private function onMouseDown(event:MouseEvent):Void { onMouseMove(event); - content.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); - content.stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); + stage = event.relatedObject.stage; + stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); + stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); } private function onMouseMove(event:MouseEvent):Void { @@ -78,14 +78,15 @@ class GamepadView extends SpriteView implements IControlDevice { private function onMouseUp(event:MouseEvent):Void { endTouch(-1); - content.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); - content.stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp); + stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); + stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp); } private function onTouchBegin(event:TouchEvent):Void { onTouchMove(event); - content.stage.addEventListener(TouchEvent.TOUCH_MOVE, onTouchMove); - content.stage.addEventListener(TouchEvent.TOUCH_END, onTouchEnd); + stage = event.relatedObject.stage; + stage.addEventListener(TouchEvent.TOUCH_MOVE, onTouchMove); + stage.addEventListener(TouchEvent.TOUCH_END, onTouchEnd); } private function onTouchMove(event:TouchEvent):Void { @@ -96,8 +97,8 @@ class GamepadView extends SpriteView implements IControlDevice { private function onTouchEnd(event:TouchEvent):Void { endTouch(event.touchPointID); if (Lambda.count(currentAreas) == 0) { - content.stage.removeEventListener(TouchEvent.TOUCH_MOVE, onTouchMove); - content.stage.removeEventListener(TouchEvent.TOUCH_END, onTouchEnd); + stage.removeEventListener(TouchEvent.TOUCH_MOVE, onTouchMove); + stage.removeEventListener(TouchEvent.TOUCH_END, onTouchEnd); } } @@ -152,5 +153,7 @@ class GamepadView extends SpriteView implements IControlDevice { }); } - public function dispose():Void {} + public function dispose():Void { + stage = null; + } } diff --git a/src/client/haxe/ru/m/tankz/view/SettingsFrame.hx b/src/client/haxe/ru/m/tankz/view/SettingsFrame.hx index f98c211..8d143de 100644 --- a/src/client/haxe/ru/m/tankz/view/SettingsFrame.hx +++ b/src/client/haxe/ru/m/tankz/view/SettingsFrame.hx @@ -1,26 +1,7 @@ package ru.m.tankz.view; -import haxework.view.ToggleButtonView; import haxework.view.VGroupView; -import ru.m.tankz.storage.SettingsStorage; @:template class SettingsFrame extends VGroupView { public static var ID(default, never):String = "settings"; - - @:view("gamepad") private var gamepadButton:ToggleButtonView; - - @:provide private static var settings:SettingsStorage; - - public function onShow():Void { - gamepadButton.on = settings.screenGamepad; - } - - private function toggleGamepad():Void { - gamepadButton.on = settings.screenGamepad = !settings.screenGamepad; - if (settings.screenGamepad) { - settings.setActionConffig(0, SettingsStorage.gamepadConfig(GamepadView.ID)); - } else { - settings.setActionConffig(0, SettingsStorage.getDefaultActionConfig(0)); - } - } } diff --git a/src/client/haxe/ru/m/tankz/view/SettingsFrame.yaml b/src/client/haxe/ru/m/tankz/view/SettingsFrame.yaml index d2a3e03..c771dae 100644 --- a/src/client/haxe/ru/m/tankz/view/SettingsFrame.yaml +++ b/src/client/haxe/ru/m/tankz/view/SettingsFrame.yaml @@ -2,20 +2,28 @@ views: - $type: haxework.view.VGroupView skinId: container + geometry.padding: 20 views: - $type: haxework.view.LabelView skinId: text.header text: Settings - - id: gamepad - $type: haxework.view.ToggleButtonView - skinId: button.simple - text: Screen Gamepad Disabled - onText: Screen Gamepad Enabled - +onPress: $code:toggleGamepad() - - $type: haxework.view.HGroupView - layout.margin: 20 - views: - - $type: ru.m.tankz.view.settings.SettingsEditor - controlIndex: 0 - - $type: ru.m.tankz.view.settings.SettingsEditor - controlIndex: 1 + - $type: haxework.view.ScrollView + geometry.size.stretch: true + scroll: + $type: haxework.view.list.VScrollBarView + skinId: scroll.vertical + view: + $type: haxework.view.GroupView + geometry.size.stretch: true + layout: + $type: haxework.view.layout.TailLayout + vAlign: top + margin: 20 + overflow: true + views: + - id: settings0 + $type: ru.m.tankz.view.settings.SettingsEditor + controlIndex: 0 + - id: settings1 + $type: ru.m.tankz.view.settings.SettingsEditor + controlIndex: 1 diff --git a/src/client/haxe/ru/m/tankz/view/settings/SettingsEditor.hx b/src/client/haxe/ru/m/tankz/view/settings/SettingsEditor.hx index f5f97e1..244e8be 100644 --- a/src/client/haxe/ru/m/tankz/view/settings/SettingsEditor.hx +++ b/src/client/haxe/ru/m/tankz/view/settings/SettingsEditor.hx @@ -1,5 +1,8 @@ package ru.m.tankz.view.settings; +import haxe.EnumTools.EnumValueTools; +import haxework.view.GroupView; +import haxework.view.ButtonGroup; import haxework.view.DataView; import haxework.view.LabelView; import haxework.view.VGroupView; @@ -16,16 +19,32 @@ import ru.m.tankz.view.settings.ActionView; @:view var label:LabelView; @:view var list:DataView; + @:view var panel:GroupView; + @:view var device:ButtonGroup; @:provide static var storage:SettingsStorage; private function set_controlIndex(value: Int): Int { this.controlIndex = value; label.text = 'Player ${controlIndex+1}'; - list.data = bindingToArray(storage.getActionConfig(controlIndex).binding); + var config = storage.getActionConfig(controlIndex); + list.data = bindingToArray(config.binding); + device.data = [KEYBOARD, GAMEPAD(GamepadView.ID)]; + device.selected = config.device; + panel.visible = list.visible = EnumValueTools.equals(config.device, KEYBOARD); return this.controlIndex; } + private function onDeviceSelect(value:DeviceType):Void { + var config = switch value { + case GAMEPAD(id): SettingsStorage.gamepadConfig(id); + case KEYBOARD | NONE: SettingsStorage.getDefaultActionConfig(controlIndex); + } + panel.visible = list.visible = EnumValueTools.equals(config.device, KEYBOARD); + storage.setActionConffig(controlIndex, config); + controlIndex = controlIndex; + } + private function viewFactory(index:Int, value:ActionItem) { var view = new ActionView(); view.item_index = index; diff --git a/src/client/haxe/ru/m/tankz/view/settings/SettingsEditor.yaml b/src/client/haxe/ru/m/tankz/view/settings/SettingsEditor.yaml index b9bee76..921b266 100644 --- a/src/client/haxe/ru/m/tankz/view/settings/SettingsEditor.yaml +++ b/src/client/haxe/ru/m/tankz/view/settings/SettingsEditor.yaml @@ -1,10 +1,20 @@ layout.margin: 10 layout.hAlign: center +geometry.size.width: 400 views: - id: label $type: haxework.view.LabelView skinId: text - - $type: haxework.view.HGroupView + - id: device + $type: haxework.view.ButtonGroup + geometry.size.width: 100% + layout: + $type: haxework.view.layout.TailLayout + margin: 3 + buttonSkinId: button.simple + +onDataSelect: $this:onDeviceSelect + - id: panel + $type: haxework.view.HGroupView layout.margin: 10 views: - id: change