From f999c66fea301343f03930e4b71d471c6e4031dd Mon Sep 17 00:00:00 2001 From: shmyga Date: Mon, 17 Jun 2019 20:43:14 +0300 Subject: [PATCH] [client] use touch events in GamepadView --- src/client/haxe/ru/m/tankz/Init.hx | 16 +++++++ .../haxe/ru/m/tankz/view/GamepadView.hx | 47 ++++++++++--------- 2 files changed, 42 insertions(+), 21 deletions(-) diff --git a/src/client/haxe/ru/m/tankz/Init.hx b/src/client/haxe/ru/m/tankz/Init.hx index de745a7..1aa3b04 100644 --- a/src/client/haxe/ru/m/tankz/Init.hx +++ b/src/client/haxe/ru/m/tankz/Init.hx @@ -1,5 +1,7 @@ package ru.m.tankz; +import lime.ui.Joystick; +import lime.ui.Gamepad; import haxework.animate.FadeAnimate; import haxework.animate.UnFadeAnimate; import haxework.resources.IResources; @@ -62,5 +64,19 @@ class Init { connection = buildConnection(); networkManager = new NetworkManager(); + + for (device in Gamepad.devices) { + trace('gamepad', device); + } + Gamepad.onConnect.add(function(device) { + trace('connect gamepad', device); + }); + + for (device in Joystick.devices) { + trace('joystick', device); + } + Joystick.onConnect.add(function(device) { + trace('connect joystick', device); + }); } } diff --git a/src/client/haxe/ru/m/tankz/view/GamepadView.hx b/src/client/haxe/ru/m/tankz/view/GamepadView.hx index 89bca81..0a44912 100644 --- a/src/client/haxe/ru/m/tankz/view/GamepadView.hx +++ b/src/client/haxe/ru/m/tankz/view/GamepadView.hx @@ -1,7 +1,7 @@ package ru.m.tankz.view; import flash.display.Graphics; -import flash.events.MouseEvent; +import flash.events.TouchEvent; import haxework.signal.Signal; import haxework.view.skin.ISkin; import haxework.view.SpriteView; @@ -49,51 +49,56 @@ class GamepadView extends SpriteView { public var actionSignal(default, null):Signal2; public var areas(default, null):Array; - public var currentArea(default, null):ActionArea; + public var currentAreas(default, null):Map; public function new() { super(); + areas = []; + currentAreas = new Map(); actionSignal = new Signal2(); skin = [new GamepadSkin(0x00ff00)]; - content.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); + content.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin); } - private function onMouseDown(event:MouseEvent):Void { - onMouseMove(event); - content.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); - content.stage.addEventListener(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); } - private function onMouseMove(event:MouseEvent):Void { + private function onTouchMove(event:TouchEvent):Void { var point = new Point(event.localX, event.localY); - if (currentArea != null) { - if (!currentArea.rect.contain(point)) { - actionSignal.emit(currentArea.action, false); - currentArea = null; + if (currentAreas.exists(event.touchPointID)) { + var area = currentAreas[event.touchPointID]; + if (!area.rect.contain(point)) { + currentAreas.remove(event.touchPointID); + actionSignal.emit(area.action, false); } } for (area in areas) { if (area.rect.contain(point)) { - currentArea = area; - actionSignal.emit(currentArea.action, true); + currentAreas[event.touchPointID] = area; + actionSignal.emit(area.action, true); break; } } } - private function onMouseUp(event:MouseEvent):Void { - content.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); - content.stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp); - if (currentArea != null) { - actionSignal.emit(currentArea.action, false); - currentArea = null; + private function onTouchEnd(event:TouchEvent):Void { + if (currentAreas.exists(event.touchPointID)) { + actionSignal.emit(currentAreas[event.touchPointID].action, false); + currentAreas.remove(event.touchPointID); + } + if (Lambda.count(currentAreas) == 0) { + content.stage.removeEventListener(TouchEvent.TOUCH_MOVE, onTouchMove); + content.stage.removeEventListener(TouchEvent.TOUCH_END, onTouchEnd); } } override public function update():Void { super.update(); areas = []; - var size = Math.min(width, height) / 8; + var size = Math.min(width, height) / 7; var padding = size / 2; areas.push({ action: GamepadAction.UP,