From c08638c2640f42e2c044657845b8892fd2cb97a8 Mon Sep 17 00:00:00 2001 From: shmyga Date: Tue, 26 Aug 2014 09:53:40 +0400 Subject: [PATCH] - --- src/client/haxe/ru/m/tankz/core/PlayerTank.hx | 27 +++++++++++++++---- src/client/haxe/ru/m/tankz/core/Tank.hx | 5 +--- src/client/haxe/ru/m/tankz/game/Tankz.hx | 17 ++++++------ 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/src/client/haxe/ru/m/tankz/core/PlayerTank.hx b/src/client/haxe/ru/m/tankz/core/PlayerTank.hx index 4d33177..dcd4df5 100644 --- a/src/client/haxe/ru/m/tankz/core/PlayerTank.hx +++ b/src/client/haxe/ru/m/tankz/core/PlayerTank.hx @@ -8,27 +8,44 @@ import flash.Lib; class PlayerTank extends Tank { private var keyBinding:Map; + private var moveQueue:Array; public function new(position:Point, keyBinding:Map) { super(position); this.keyBinding = keyBinding; + moveQueue = new Array(); Lib.current.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); Lib.current.stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp); } private function onKeyDown(event:KeyboardEvent):Void { switch (keyBinding.get(event.keyCode)) { - case TankAction.MOVE_LEFT: move(Direction.LEFT); - case TankAction.MOVE_TOP: move(Direction.TOP); - case TankAction.MOVE_RIGHT: move(Direction.RIGHT); - case TankAction.MOVE_BOTTOM: move(Direction.BOTTOM); + case TankAction.MOVE(direction): + if (moveQueue.indexOf(event.keyCode) == -1) { + moveQueue.unshift(event.keyCode); + updateMove(); + } case TankAction.SHOT: shot(); } } private function onKeyUp(event:KeyboardEvent):Void { - if (keyBinding.exists(event.keyCode)) { + switch (keyBinding.get(event.keyCode)) { + case TankAction.MOVE(direction): + moveQueue.remove(event.keyCode); + updateMove(); + case _: {}; + } + } + + private function updateMove():Void { + if (moveQueue.length == 0) { stop(); + } else { + switch (keyBinding.get(moveQueue[0])) { + case TankAction.MOVE(direction): move(direction); + case _: {}; + } } } } diff --git a/src/client/haxe/ru/m/tankz/core/Tank.hx b/src/client/haxe/ru/m/tankz/core/Tank.hx index d740ad0..df02a40 100755 --- a/src/client/haxe/ru/m/tankz/core/Tank.hx +++ b/src/client/haxe/ru/m/tankz/core/Tank.hx @@ -3,10 +3,7 @@ package ru.m.tankz.core; import flash.geom.Point; enum TankAction { - MOVE_LEFT; - MOVE_TOP; - MOVE_RIGHT; - MOVE_BOTTOM; + MOVE(direction:Direction); SHOT; } diff --git a/src/client/haxe/ru/m/tankz/game/Tankz.hx b/src/client/haxe/ru/m/tankz/game/Tankz.hx index 87e89da..84c2284 100755 --- a/src/client/haxe/ru/m/tankz/game/Tankz.hx +++ b/src/client/haxe/ru/m/tankz/game/Tankz.hx @@ -1,5 +1,6 @@ package ru.m.tankz.game; +import ru.m.tankz.core.Direction; import ru.m.tankz.core.IMobileEntity; import flash.geom.Point; import flash.ui.Keyboard; @@ -31,17 +32,17 @@ class Tankz implements ITankz { map = new TankzMap(config.map); tanks = [ new PlayerTank(new Point(0, 0), [ - Keyboard.A => TankAction.MOVE_LEFT, - Keyboard.S => TankAction.MOVE_BOTTOM, - Keyboard.W => TankAction.MOVE_TOP, - Keyboard.D => TankAction.MOVE_RIGHT, + Keyboard.A => TankAction.MOVE(Direction.LEFT), + Keyboard.S => TankAction.MOVE(Direction.BOTTOM), + Keyboard.W => TankAction.MOVE(Direction.TOP), + Keyboard.D => TankAction.MOVE(Direction.RIGHT), Keyboard.SPACE => TankAction.SHOT ]), new PlayerTank(new Point(100, 0), [ - Keyboard.LEFT => TankAction.MOVE_LEFT, - Keyboard.DOWN => TankAction.MOVE_BOTTOM, - Keyboard.UP => TankAction.MOVE_TOP, - Keyboard.RIGHT => TankAction.MOVE_RIGHT, + Keyboard.LEFT => TankAction.MOVE(Direction.LEFT), + Keyboard.DOWN => TankAction.MOVE(Direction.BOTTOM), + Keyboard.UP => TankAction.MOVE(Direction.TOP), + Keyboard.RIGHT => TankAction.MOVE(Direction.RIGHT), Keyboard.SHIFT => TankAction.SHOT ]) ];