[all] fixes for LevelPack
This commit is contained in:
@@ -1,10 +1,5 @@
|
||||
package ru.m.tankz.bundle;
|
||||
|
||||
import haxe.io.BytesInput;
|
||||
import haxe.zip.Entry;
|
||||
import haxe.zip.Reader;
|
||||
import lime.utils.Bytes;
|
||||
import lime.utils.CompressionAlgorithm;
|
||||
import openfl.Assets;
|
||||
import ru.m.tankz.config.Config;
|
||||
import ru.m.tankz.Type;
|
||||
@@ -14,25 +9,12 @@ class LevelBundle implements ILevelBundle {
|
||||
|
||||
public function new() {}
|
||||
|
||||
private function extract(entry:Entry):LevelConfig {
|
||||
var bytes:Bytes = entry.data;
|
||||
if (entry.compressed) {
|
||||
bytes = bytes.decompress(CompressionAlgorithm.DEFLATE);
|
||||
}
|
||||
var level = LevelUtil.loads(bytes.toString());
|
||||
if (level.id == null) {
|
||||
level.id = Std.parseInt(entry.fileName.split("level").pop());
|
||||
}
|
||||
return level;
|
||||
}
|
||||
|
||||
public function get(type:GameType, name:String):LevelPack {
|
||||
var data = Assets.getBytes('levels/${type}_${name}.zip');
|
||||
var files = Reader.readZip(new BytesInput(data));
|
||||
var bytes = Assets.getBytes('levels/${type}_${name}.zip');
|
||||
return {
|
||||
type: type,
|
||||
name: name,
|
||||
data: Lambda.array(files.map(extract)),
|
||||
data: LevelUtil.unpack(bytes),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,18 +1,19 @@
|
||||
package ru.m.tankz.local;
|
||||
|
||||
import ru.m.tankz.local.LocalControlFactory;
|
||||
import ru.m.tankz.config.Config;
|
||||
import ru.m.tankz.game.GameEvent;
|
||||
import ru.m.tankz.game.GameRunner;
|
||||
import ru.m.tankz.game.GameState;
|
||||
import ru.m.tankz.game.record.GameRecorder;
|
||||
import ru.m.tankz.local.LocalControlFactory;
|
||||
import ru.m.tankz.storage.RecordStorage;
|
||||
|
||||
class LocalGame extends GameRunner {
|
||||
@:provide var recordStorage:RecordStorage;
|
||||
private var recorder:GameRecorder;
|
||||
|
||||
public function new(state:GameState) {
|
||||
super(state);
|
||||
public function new(state:GameState, level:LevelConfig) {
|
||||
super(state, level);
|
||||
controlFactory = new LocalControlFactory();
|
||||
recorder = new GameRecorder();
|
||||
connect(recorder);
|
||||
|
||||
@@ -14,7 +14,7 @@ class NetworkGame extends Game {
|
||||
private var network:NetworkManager;
|
||||
|
||||
public function new(network:NetworkManager) {
|
||||
super(new GameState(network.room.game.type, 0));
|
||||
super(new GameState(network.room.game.type, 0), null);
|
||||
this.network = network;
|
||||
this.controlFactory = new NetworkControlFactory();
|
||||
network.gameEventSignal.connect(onGameEventProto);
|
||||
|
||||
@@ -115,7 +115,8 @@ class Render extends SpriteView implements IRender {
|
||||
|
||||
public function onGameEvent(event:GameEvent):Void {
|
||||
switch event {
|
||||
case START(_):
|
||||
case START(_, level):
|
||||
gridSize = level.size;
|
||||
content.addEventListener(Event.ENTER_FRAME, onEnterFrame);
|
||||
case COMPLETE(_, _):
|
||||
content.removeEventListener(Event.ENTER_FRAME, onEnterFrame);
|
||||
|
||||
@@ -31,7 +31,6 @@ import ru.m.tankz.view.game.GameView;
|
||||
gameView.type = game.type;
|
||||
soundManager.config = game.config;
|
||||
gameView.render.config = game.config;
|
||||
gameView.render.gridSize = game.state.level.size;
|
||||
game.connect(gameView.render);
|
||||
game.connect(soundManager);
|
||||
if (gameView.panel != null) {
|
||||
|
||||
@@ -34,10 +34,9 @@ import ru.m.tankz.view.popup.LevelPopup;
|
||||
}
|
||||
|
||||
private function start(level:LevelConfig, preset:GamePreset, control:ControlPreset):Void {
|
||||
state.level = level;
|
||||
state.presetId = preset.id;
|
||||
state.controls = control.values;
|
||||
game = new LocalGame(state);
|
||||
game = new LocalGame(state, level);
|
||||
switcher.change(GameFrame.ID);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package ru.m.tankz.view;
|
||||
|
||||
import haxework.view.ButtonView;
|
||||
import haxework.view.DataView;
|
||||
import haxework.view.frame.FrameSwitcher;
|
||||
import haxework.view.LabelView;
|
||||
@@ -18,7 +17,6 @@ import ru.m.tankz.view.common.LifeView;
|
||||
|
||||
@:provide var frames:FrameSwitcher;
|
||||
@:provide var state:GameState;
|
||||
@:provide("next") var nextState:GameState;
|
||||
@:provide var game:IGame;
|
||||
|
||||
private function playerViewFactory(index:Int, player:PlayerState) {
|
||||
@@ -35,14 +33,11 @@ import ru.m.tankz.view.common.LifeView;
|
||||
|
||||
public function onShow() {
|
||||
resultView.data = Lambda.array(state.players);
|
||||
levelLabel.text = 'Level ${state.levelId}';
|
||||
//levelLabel.text = 'Level ${state.levelId}'; // ToDo: level?
|
||||
}
|
||||
|
||||
private function next() {
|
||||
if (nextState != null) {
|
||||
game = new GameRunner(nextState);
|
||||
frames.change(GameFrame.ID);
|
||||
}
|
||||
//ToDo: next level?
|
||||
}
|
||||
|
||||
private function close() {
|
||||
|
||||
@@ -21,7 +21,6 @@ import ru.m.tankz.view.common.LifeView;
|
||||
private var player2Id:PlayerId = new PlayerId(ClassicGame.HUMAN, 1);
|
||||
|
||||
public function refresh(state:GameState):Void {
|
||||
level.text = 'Level ${state.levelId}';
|
||||
bot.life = state.getTeamLife(ClassicGame.BOT);
|
||||
player1.life = state.getPlayerLife(player1Id);
|
||||
player1.score = state.getPlayerScore(player1Id);
|
||||
@@ -36,7 +35,8 @@ import ru.m.tankz.view.common.LifeView;
|
||||
|
||||
public function onGameEvent(event:GameEvent):Void {
|
||||
switch event {
|
||||
case START(state):
|
||||
case START(state, level):
|
||||
this.level.text = 'Level ${level.id}';
|
||||
refresh(state);
|
||||
case CHANGE(TEAM_LIFE(teamId, life)):
|
||||
if (teamId == ClassicGame.BOT) {
|
||||
|
||||
@@ -16,8 +16,8 @@ import ru.m.tankz.view.common.LifeView;
|
||||
|
||||
public function onGameEvent(event:GameEvent):Void {
|
||||
switch event {
|
||||
case START(state):
|
||||
level.text = 'Level ${state.levelId}';
|
||||
case START(state, level):
|
||||
this.level.text = 'Level ${level.id}';
|
||||
players.data = Lambda.array(state.players);
|
||||
case _:
|
||||
for (view in players.views) {
|
||||
|
||||
@@ -17,7 +17,6 @@ import ru.m.tankz.view.common.LifeView;
|
||||
@:view var level:LabelView;
|
||||
|
||||
public function refresh(state:GameState):Void {
|
||||
level.text = 'Level ${state.levelId}';
|
||||
radiant.life = state.getTeamLife(DotaGame.RADIANT);
|
||||
radiant.score = state.getTeamScore(DotaGame.RADIANT);
|
||||
dire.life = state.getTeamLife(DotaGame.DIRE);
|
||||
@@ -34,7 +33,8 @@ import ru.m.tankz.view.common.LifeView;
|
||||
|
||||
public function onGameEvent(event:GameEvent):Void {
|
||||
switch event {
|
||||
case START(state):
|
||||
case START(state, level):
|
||||
this.level.text = 'Level ${level.id}';
|
||||
refresh(state);
|
||||
case CHANGE(TEAM_LIFE(teamId, life)):
|
||||
getLifeView(teamId).life = life;
|
||||
|
||||
@@ -30,7 +30,7 @@ import ru.m.tankz.view.popup.CreateGamePopup;
|
||||
private function create():Void {
|
||||
CreateGamePopup.instance.show().then(function(result) {
|
||||
if (result != null) {
|
||||
network.createGame(result.type, result.level);
|
||||
network.createGame(result.type, result.level.id);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -4,22 +4,25 @@ import haxework.view.DataView;
|
||||
import haxework.view.popup.PopupView;
|
||||
import haxework.view.ToggleButtonView;
|
||||
import ru.m.tankz.bundle.IConfigBundle;
|
||||
import ru.m.tankz.bundle.ILevelBundle;
|
||||
import ru.m.tankz.config.Config;
|
||||
import ru.m.tankz.Type;
|
||||
|
||||
private typedef Result = {
|
||||
var type:GameType;
|
||||
var level:LevelId;
|
||||
var level:LevelConfig;
|
||||
}
|
||||
|
||||
@:template class CreateGamePopup extends PopupView<Result> {
|
||||
|
||||
@:view("type") var typeView:DataView<GameType, ToggleButtonView>;
|
||||
@:view("level") var levelView:DataView<LevelId, ToggleButtonView>;
|
||||
@:view("level") var levelView:DataView<LevelConfig, ToggleButtonView>;
|
||||
|
||||
@:provide var configBundle:IConfigBundle;
|
||||
@:provide static var configBundle:IConfigBundle;
|
||||
@:provide static var levelBundle:ILevelBundle;
|
||||
|
||||
private var type:GameType;
|
||||
private var level:LevelId;
|
||||
private var level:LevelConfig;
|
||||
|
||||
override private function onShow():Void {
|
||||
super.onShow();
|
||||
@@ -43,18 +46,18 @@ private typedef Result = {
|
||||
for (v in typeView.dataViews) {
|
||||
v.on = v == view;
|
||||
}
|
||||
levelView.data = [for (i in 0...configBundle.get(type).game.levels) i];
|
||||
onLevelSelect(0, 0, levelView.dataViews[0]);
|
||||
levelView.data = levelBundle.get(value, "standard").data;
|
||||
onLevelSelect(0, levelView.data[0], levelView.dataViews[0]);
|
||||
}
|
||||
|
||||
private function levelViewFactory(index:Int, value:LevelId):ToggleButtonView {
|
||||
private function levelViewFactory(index:Int, value:LevelConfig):ToggleButtonView {
|
||||
var result = new ToggleButtonView();
|
||||
result.skinId = "button.level";
|
||||
result.text = Std.string(value);
|
||||
result.text = Std.string(value.id);
|
||||
return result;
|
||||
}
|
||||
|
||||
private function onLevelSelect(index:Int, level:LevelId, view:ToggleButtonView):Void {
|
||||
private function onLevelSelect(index:Int, level:LevelConfig, view:ToggleButtonView):Void {
|
||||
this.level = level;
|
||||
for (v in levelView.dataViews) {
|
||||
v.on = v == view;
|
||||
|
||||
Reference in New Issue
Block a user