[client] update SoundManager
This commit is contained in:
@@ -5,24 +5,30 @@ import flash.media.Sound;
|
|||||||
import flash.media.SoundChannel;
|
import flash.media.SoundChannel;
|
||||||
import flash.media.SoundTransform;
|
import flash.media.SoundTransform;
|
||||||
import openfl.utils.Assets;
|
import openfl.utils.Assets;
|
||||||
|
import ru.m.tankz.config.Config;
|
||||||
import ru.m.tankz.game.GameEvent;
|
import ru.m.tankz.game.GameEvent;
|
||||||
import ru.m.tankz.game.IGame;
|
import ru.m.tankz.game.IGame;
|
||||||
|
|
||||||
class SoundManager implements GameListener {
|
class SoundManager implements GameListener {
|
||||||
private static var TAG(default, never):String = 'SoundManager';
|
private static var TAG(default, never):String = "SoundManager";
|
||||||
|
|
||||||
#if flash
|
#if flash
|
||||||
private static var type:String = 'mp3';
|
private static var type:String = "mp3";
|
||||||
#else
|
#else
|
||||||
private static var type:String = 'ogg';
|
private static var type:String = "ogg";
|
||||||
#end
|
#end
|
||||||
|
|
||||||
|
public var config(default, default):Config;
|
||||||
public var volume(default, set):Float = 1;
|
public var volume(default, set):Float = 1;
|
||||||
public var mute(default, set):Bool = false;
|
public var mute(default, set):Bool = false;
|
||||||
|
|
||||||
private var channels:Array<SoundChannel>;
|
private var channels:Array<SoundChannel>;
|
||||||
private var transform:SoundTransform;
|
private var transform:SoundTransform;
|
||||||
|
|
||||||
|
private var humanTanks:Array<Int>;
|
||||||
|
private var humanBullets:Array<Int>;
|
||||||
|
private var liveBonuses:Array<Int>;
|
||||||
|
|
||||||
public function new() {
|
public function new() {
|
||||||
channels = [];
|
channels = [];
|
||||||
updateSoundTransform();
|
updateSoundTransform();
|
||||||
@@ -77,30 +83,44 @@ class SoundManager implements GameListener {
|
|||||||
public function onGameEvent(event:GameEvent):Void {
|
public function onGameEvent(event:GameEvent):Void {
|
||||||
switch event {
|
switch event {
|
||||||
case START(_):
|
case START(_):
|
||||||
play('start');
|
play("start");
|
||||||
case SPAWN(BULLET(_)):
|
humanTanks = [];
|
||||||
if (false /*ToDo: human tank*/) {
|
liveBonuses = [];
|
||||||
play('shot');
|
humanBullets = [];
|
||||||
|
case SPAWN(BULLET(id, _, playerId, _)):
|
||||||
|
if (config.isHuman(playerId)) {
|
||||||
|
play("shot");
|
||||||
|
humanBullets.push(id);
|
||||||
|
}
|
||||||
|
case SPAWN(TANK(id, _, playerId, _)):
|
||||||
|
if (config.isHuman(playerId)) {
|
||||||
|
humanTanks.push(id);
|
||||||
|
}
|
||||||
|
case SPAWN(BONUS(id, _, type)):
|
||||||
|
play("bonus_add");
|
||||||
|
if (type == "live") {
|
||||||
|
liveBonuses.push(id);
|
||||||
}
|
}
|
||||||
case SPAWN(BONUS(_, _)):
|
|
||||||
play('bonus_add');
|
|
||||||
case HIT(TANK(_, _)):
|
case HIT(TANK(_, _)):
|
||||||
play('bullet_hit');
|
play("bullet_hit");
|
||||||
case DESTROY(TANK(_, _)):
|
case HIT(CELL(_, _, shot)):
|
||||||
if (true /*ToDo: human tank*/) {
|
if (humanBullets.indexOf(shot.bulletId) > -1) {
|
||||||
play('boom_player');
|
//play("bullet_block");
|
||||||
|
}
|
||||||
|
case DESTROY(TANK(id, _)):
|
||||||
|
if (humanTanks.indexOf(id) > -1) {
|
||||||
|
play("boom_player");
|
||||||
} else {
|
} else {
|
||||||
play('boom_bot');
|
play("boom_bot");
|
||||||
}
|
}
|
||||||
case DESTROY(EAGLE(_, _)):
|
case DESTROY(EAGLE(_, _)):
|
||||||
play('boom_player');
|
play("boom_player");
|
||||||
case DESTROY(BONUS(_, _)):
|
case DESTROY(BONUS(id, _)):
|
||||||
// ToDo: bonus type
|
play("bonus_get");
|
||||||
play('bonus_get');
|
if (liveBonuses.indexOf(id) > -1) {
|
||||||
if (false /*ToDo: bonus.type == 'life'*/) {
|
play("live");
|
||||||
play('live');
|
|
||||||
} else {
|
} else {
|
||||||
play('bonus_get');
|
play("bonus_get");
|
||||||
}
|
}
|
||||||
case _:
|
case _:
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,37 +47,31 @@ import ru.m.tankz.view.game.GameView;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function start(state:GameState):Void {
|
private function buildGame(state:GameState):Void {
|
||||||
gameView.type = state.type;
|
gameView.type = state.type;
|
||||||
game = new Game(state);
|
game = new Game(state);
|
||||||
|
soundManager.config = game.config;
|
||||||
gameView.render.config = game.config;
|
gameView.render.config = game.config;
|
||||||
game.connect(gameView.render);
|
game.connect(gameView.render);
|
||||||
game.connect(soundManager);
|
game.connect(soundManager);
|
||||||
game.connect(this);
|
|
||||||
if (gameView.panel != null) {
|
if (gameView.panel != null) {
|
||||||
game.connect(gameView.panel);
|
game.connect(gameView.panel);
|
||||||
}
|
}
|
||||||
//game.connect(new GameTracer());
|
}
|
||||||
|
|
||||||
|
private function start(state:GameState):Void {
|
||||||
|
buildGame(state);
|
||||||
|
game.connect(this);
|
||||||
recorder = new GameRecorder();
|
recorder = new GameRecorder();
|
||||||
game.connect(recorder);
|
game.connect(recorder);
|
||||||
runner = new GameRunner(game);
|
runner = new GameRunner(game);
|
||||||
runner.start(state);
|
runner.start(state);
|
||||||
gameView.render.draw();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function play(record:GameRecord):Void {
|
private function play(record:GameRecord):Void {
|
||||||
gameView.type = record.info.type;
|
buildGame(record.state);
|
||||||
game = new Game(record.state);
|
|
||||||
gameView.render.config = game.config;
|
|
||||||
game.connect(gameView.render);
|
|
||||||
game.connect(soundManager);
|
|
||||||
//game.connect(this);
|
|
||||||
if (gameView.panel != null) {
|
|
||||||
game.connect(gameView.panel);
|
|
||||||
}
|
|
||||||
player = new GamePlayer(game, record);
|
player = new GamePlayer(game, record);
|
||||||
player.start();
|
player.start();
|
||||||
gameView.render.draw();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function stop():Void {
|
private function stop():Void {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package ru.m.tankz.config;
|
package ru.m.tankz.config;
|
||||||
|
|
||||||
import haxework.color.Color;
|
import haxework.color.Color;
|
||||||
|
import ru.m.tankz.control.Controller;
|
||||||
import ru.m.tankz.Type;
|
import ru.m.tankz.Type;
|
||||||
|
|
||||||
typedef CompleteRule = {
|
typedef CompleteRule = {
|
||||||
@@ -222,4 +223,12 @@ class Config {
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function isHuman(playerId:PlayerId) {
|
||||||
|
var controller:Controller = AController.fromString(getPlayer(playerId).control);
|
||||||
|
return switch controller {
|
||||||
|
case HUMAN(_): true;
|
||||||
|
case _: false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user