[client] update SoundManager

This commit is contained in:
2019-05-20 22:02:13 +03:00
parent 17823ede11
commit 7984d8282c
3 changed files with 58 additions and 35 deletions

View File

@@ -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 _:
} }

View File

@@ -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 {

View File

@@ -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;
}
}
} }