-
This commit is contained in:
@@ -8,27 +8,44 @@ import flash.Lib;
|
|||||||
class PlayerTank extends Tank {
|
class PlayerTank extends Tank {
|
||||||
|
|
||||||
private var keyBinding:Map<Int, TankAction>;
|
private var keyBinding:Map<Int, TankAction>;
|
||||||
|
private var moveQueue:Array<Int>;
|
||||||
|
|
||||||
public function new(position:Point, keyBinding:Map<Int, TankAction>) {
|
public function new(position:Point, keyBinding:Map<Int, TankAction>) {
|
||||||
super(position);
|
super(position);
|
||||||
this.keyBinding = keyBinding;
|
this.keyBinding = keyBinding;
|
||||||
|
moveQueue = new Array<Int>();
|
||||||
Lib.current.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
|
Lib.current.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
|
||||||
Lib.current.stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
|
Lib.current.stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function onKeyDown(event:KeyboardEvent):Void {
|
private function onKeyDown(event:KeyboardEvent):Void {
|
||||||
switch (keyBinding.get(event.keyCode)) {
|
switch (keyBinding.get(event.keyCode)) {
|
||||||
case TankAction.MOVE_LEFT: move(Direction.LEFT);
|
case TankAction.MOVE(direction):
|
||||||
case TankAction.MOVE_TOP: move(Direction.TOP);
|
if (moveQueue.indexOf(event.keyCode) == -1) {
|
||||||
case TankAction.MOVE_RIGHT: move(Direction.RIGHT);
|
moveQueue.unshift(event.keyCode);
|
||||||
case TankAction.MOVE_BOTTOM: move(Direction.BOTTOM);
|
updateMove();
|
||||||
|
}
|
||||||
case TankAction.SHOT: shot();
|
case TankAction.SHOT: shot();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function onKeyUp(event:KeyboardEvent):Void {
|
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();
|
stop();
|
||||||
|
} else {
|
||||||
|
switch (keyBinding.get(moveQueue[0])) {
|
||||||
|
case TankAction.MOVE(direction): move(direction);
|
||||||
|
case _: {};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,10 +3,7 @@ package ru.m.tankz.core;
|
|||||||
import flash.geom.Point;
|
import flash.geom.Point;
|
||||||
|
|
||||||
enum TankAction {
|
enum TankAction {
|
||||||
MOVE_LEFT;
|
MOVE(direction:Direction);
|
||||||
MOVE_TOP;
|
|
||||||
MOVE_RIGHT;
|
|
||||||
MOVE_BOTTOM;
|
|
||||||
SHOT;
|
SHOT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package ru.m.tankz.game;
|
package ru.m.tankz.game;
|
||||||
|
|
||||||
|
import ru.m.tankz.core.Direction;
|
||||||
import ru.m.tankz.core.IMobileEntity;
|
import ru.m.tankz.core.IMobileEntity;
|
||||||
import flash.geom.Point;
|
import flash.geom.Point;
|
||||||
import flash.ui.Keyboard;
|
import flash.ui.Keyboard;
|
||||||
@@ -31,17 +32,17 @@ class Tankz implements ITankz {
|
|||||||
map = new TankzMap(config.map);
|
map = new TankzMap(config.map);
|
||||||
tanks = [
|
tanks = [
|
||||||
new PlayerTank(new Point(0, 0), [
|
new PlayerTank(new Point(0, 0), [
|
||||||
Keyboard.A => TankAction.MOVE_LEFT,
|
Keyboard.A => TankAction.MOVE(Direction.LEFT),
|
||||||
Keyboard.S => TankAction.MOVE_BOTTOM,
|
Keyboard.S => TankAction.MOVE(Direction.BOTTOM),
|
||||||
Keyboard.W => TankAction.MOVE_TOP,
|
Keyboard.W => TankAction.MOVE(Direction.TOP),
|
||||||
Keyboard.D => TankAction.MOVE_RIGHT,
|
Keyboard.D => TankAction.MOVE(Direction.RIGHT),
|
||||||
Keyboard.SPACE => TankAction.SHOT
|
Keyboard.SPACE => TankAction.SHOT
|
||||||
]),
|
]),
|
||||||
new PlayerTank(new Point(100, 0), [
|
new PlayerTank(new Point(100, 0), [
|
||||||
Keyboard.LEFT => TankAction.MOVE_LEFT,
|
Keyboard.LEFT => TankAction.MOVE(Direction.LEFT),
|
||||||
Keyboard.DOWN => TankAction.MOVE_BOTTOM,
|
Keyboard.DOWN => TankAction.MOVE(Direction.BOTTOM),
|
||||||
Keyboard.UP => TankAction.MOVE_TOP,
|
Keyboard.UP => TankAction.MOVE(Direction.TOP),
|
||||||
Keyboard.RIGHT => TankAction.MOVE_RIGHT,
|
Keyboard.RIGHT => TankAction.MOVE(Direction.RIGHT),
|
||||||
Keyboard.SHIFT => TankAction.SHOT
|
Keyboard.SHIFT => TankAction.SHOT
|
||||||
])
|
])
|
||||||
];
|
];
|
||||||
|
|||||||
Reference in New Issue
Block a user