[client] added SoundManager

This commit is contained in:
2018-02-20 17:47:04 +03:00
parent 2e856c1256
commit 22e7965442
5 changed files with 66 additions and 0 deletions

View File

@@ -1,5 +1,6 @@
package ru.m.tankz;
import ru.m.tankz.sound.SoundManager;
import flash.events.KeyboardEvent;
import flash.text.Font;
import flash.ui.Keyboard;
@@ -86,6 +87,7 @@ class Client implements IConnectionHandler {
Provider.setFactory(IConfigBundle, ConfigBundle);
Provider.setFactory(ILevelBundle, LevelBundle);
Provider.setFactory(SaveStorage, SaveStorage);
Provider.setFactory(SoundManager, SoundManager);
Provider.setFactory(Game, ClassicGame, ClassicGame.TYPE);
Provider.setFactory(Game, DotaGame, DotaGame.TYPE);

View File

@@ -1,5 +1,6 @@
package ru.m.tankz.frame;
import ru.m.tankz.sound.SoundManager;
import flash.events.Event;
import haxe.ds.Option;
import haxe.Timer;
@@ -45,6 +46,7 @@ class GameFrame extends VGroupView implements ViewBuilder implements IPacketHand
throw 'Unsupported game type "${save.state.type}"';
}
game.engine.listeners.push(render);
game.engine.listeners.push(Provider.get(SoundManager));
game.start(save).then(onGameStateChange).endThen(onGameComplete);
content.addEventListener(Event.ENTER_FRAME, redraw);
//Provider.get(IConnection).packetHandler.addListener(this);

View File

@@ -0,0 +1,59 @@
package ru.m.tankz.sound;
import ru.m.tankz.core.EntityType;
import ru.m.tankz.engine.Engine;
import flash.media.Sound;
import openfl.utils.Assets;
class SoundManager implements EngineListener {
private static var TAG(default, never):String = 'SoundManager';
public function new() {}
public function play(id:String):Void {
L.d(TAG, 'player: ${id}');
var sound:Sound = Assets.getSound('resources/sounds/${id}.mp3');
sound.play();
}
public function onSpawn(entity:EntityType):Void {
switch entity {
case EntityType.BULLET(_.tank.playerId.team => 'human'):
play('shot');
case EntityType.BONUS(_):
play('bonus_add');
case _:
}
}
public function onChange(entity:EntityType, ?change:EntityChange):Void {
switch [entity, change] {
case [EntityType.TANK(_), EntityChange.HIT]:
play('bullet_hit');
case [EntityType.TANK(_), EntityChange.LIVE_UP]:
play('live');
case [EntityType.EAGLE(_), EntityChange.DEATH]:
play('boom_player');
case _:
}
}
public function onCollision(entity:EntityType, with:EntityType):Void {
switch [entity, with] {
case [EntityType.BULLET(_), EntityType.CELL(cell)]:
//play('bullet_wall');
case _:
}
}
public function onDestroy(entity:EntityType):Void {
switch entity {
case EntityType.TANK(_):
play('boom_bot');
case EntityType.BONUS(_):
play('bonus_get');
case _:
}
}
}