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

View File

@@ -9,10 +9,12 @@ import ru.m.tankz.Type;
class Bullet extends MobileEntity {
public var playerId(default, null):PlayerId;
public var tankId(default, null):Int;
public var tank(default, null):Tank;
public var config(default, null):BulletConfig;
public function new(tank:Tank) {
this.playerId = tank.playerId;
this.tank = tank;
this.config = tank.config.bullet;
super(new Rectangle(0, 0, config.width, config.height), config.speed, Direction.RIGHT);
this.tankId = tank.id;

View File

@@ -15,6 +15,7 @@ import ru.m.tankz.map.LevelMap;
enum EntityChange {
DEATH;
HIT;
LIVE_UP;
}