From dc1279f6365a8e82f8716568cc43f277cbaa20a9 Mon Sep 17 00:00:00 2001 From: shmyga Date: Thu, 13 Jun 2019 16:23:22 +0300 Subject: [PATCH] [editor] MapFrame rework --- package.json | 2 +- src/client/resources/image/map/wood-dark.png | Bin 0 -> 9606 bytes src/client/resources/image/map/wood.png | Bin 0 -> 8306 bytes src/common/haxe/ru/m/tankz/config/Config.hx | 2 +- src/common/haxe/ru/m/tankz/map/Grid.hx | 4 +- src/common/resources/death/config.yaml | 3 +- .../resources/death/levels/level003.txt | 4 + .../haxe/ru/m/tankz/editor/view/MapFrame.hx | 135 ++++++++---------- .../haxe/ru/m/tankz/editor/view/MapFrame.yaml | 49 ++++--- 9 files changed, 97 insertions(+), 102 deletions(-) create mode 100644 src/client/resources/image/map/wood-dark.png create mode 100644 src/client/resources/image/map/wood.png create mode 100644 src/common/resources/death/levels/level003.txt diff --git a/package.json b/package.json index ebc27ae..d1e3cc0 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tankz", - "version": "0.14.3", + "version": "0.14.4", "private": true, "devDependencies": { "dateformat": "^3.0.3", diff --git a/src/client/resources/image/map/wood-dark.png b/src/client/resources/image/map/wood-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..1ae7d9d4952f1b08f85078518a57d0144ce0b59e GIT binary patch literal 9606 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 literal 0 HcmV?d00001 diff --git a/src/client/resources/image/map/wood.png b/src/client/resources/image/map/wood.png new file mode 100644 index 0000000000000000000000000000000000000000..ff3fcb54a921b5dbbb13b16f6af011e38f965679 GIT binary patch literal 8306 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 literal 0 HcmV?d00001 diff --git a/src/common/haxe/ru/m/tankz/config/Config.hx b/src/common/haxe/ru/m/tankz/config/Config.hx index 17cce70..9aa3d79 100644 --- a/src/common/haxe/ru/m/tankz/config/Config.hx +++ b/src/common/haxe/ru/m/tankz/config/Config.hx @@ -42,7 +42,7 @@ typedef BrickConfig = { var type:BrickType; var index:Int; var layer:Int; - var armor:Int; + var armor:Float; } typedef BulletConfig = { diff --git a/src/common/haxe/ru/m/tankz/map/Grid.hx b/src/common/haxe/ru/m/tankz/map/Grid.hx index 54ece06..bbdc095 100644 --- a/src/common/haxe/ru/m/tankz/map/Grid.hx +++ b/src/common/haxe/ru/m/tankz/map/Grid.hx @@ -15,10 +15,10 @@ class GridCell { public var position(default, null):Point; public var rect(default, null):Rectangle; public var layer:Int; - public var armor:Int; + public var armor:Float; public var destroyed(default, set):Bool; - public function new(cellX:Int, cellY:Int, width:Int, height:Int, layer:Int, armor:Int) { + public function new(cellX:Int, cellY:Int, width:Int, height:Int, layer:Int, armor:Float) { this.cellX = cellX; this.cellY = cellY; this.position = new Point(cellX, cellY); diff --git a/src/common/resources/death/config.yaml b/src/common/resources/death/config.yaml index 219e7ed..d215c76 100644 --- a/src/common/resources/death/config.yaml +++ b/src/common/resources/death/config.yaml @@ -1,5 +1,5 @@ game: - levels: 3 + levels: 4 friendlyFire: true complete: - team: alpha @@ -20,6 +20,7 @@ bricks: - {type: water, index: 3, layer: 1, armor: 0} - {type: armor, index: 4, layer: 2, armor: 2} - {type: brick, index: 5, layer: 2, armor: 1} + - {type: wood, index: 6, layer: 2, armor: 0.5} player: default: &player diff --git a/src/common/resources/death/levels/level003.txt b/src/common/resources/death/levels/level003.txt new file mode 100644 index 0000000..bc22bed --- /dev/null +++ b/src/common/resources/death/levels/level003.txt @@ -0,0 +1,4 @@ +name: "" +points: [{x: 2, y: 8, direction: right, index: 0, team: alpha, type: tank}, {x: 8, y: 2, direction: right, index: 0, team: beta, type: tank}, {x: 20, y: 2, direction: right, index: 0, team: gamma, type: tank}, {x: 26, y: 8, direction: right, index: 0, team: delta, type: tank}, {x: 26, y: 20, direction: right, index: 0, team: epsilon, type: tank}, {x: 20, y: 26, direction: right, index: 0, team: zeta, type: tank}, {x: 8, y: 26, direction: right, index: 0, team: eta, type: tank}, {x: 2, y: 20, direction: right, index: 0, team: theta, type: tank}] +size: {width: 30, height: 30} +data: "222222666666222222666666222222222222666666222222666666222222220000660066000000660066000022220000660066000000660066000022220000666666000000666666000022220000666666000000666666000022666666333333555555333333666666666666333333555555333333666666660066330000000000000033660066660066330000000000000033660066666666330000000000000033666666666666330000000000000033666666220000550000333333000055000022220000550000333333000055000022220000550000330033000055000022220000550000330033000055000022220000550000333333000055000022220000550000333333000055000022666666330000000000000033666666666666330000000000000033666666660066330000000000000033660066660066330000000000000033660066666666333333555555333333666666666666333333555555333333666666220000666666000000666666000022220000666666000000666666000022220000660066000000660066000022220000660066000000660066000022222222666666222222666666222222222222666666222222666666222222" diff --git a/src/editor/haxe/ru/m/tankz/editor/view/MapFrame.hx b/src/editor/haxe/ru/m/tankz/editor/view/MapFrame.hx index a7f2093..55dc7a5 100644 --- a/src/editor/haxe/ru/m/tankz/editor/view/MapFrame.hx +++ b/src/editor/haxe/ru/m/tankz/editor/view/MapFrame.hx @@ -1,9 +1,7 @@ package ru.m.tankz.editor.view; -import haxework.view.ButtonView; import haxework.view.DataView; import haxework.view.InputView; -import haxework.view.LabelView; import haxework.view.VGroupView; import ru.m.tankz.bundle.IConfigBundle; import ru.m.tankz.config.Config; @@ -12,7 +10,6 @@ import ru.m.tankz.editor.view.map.BrickView; import ru.m.tankz.editor.view.map.MapEditView; import ru.m.tankz.editor.view.map.SpawnPointView; import ru.m.tankz.preset.ClassicGame; -import ru.m.tankz.preset.DotaGame; import ru.m.tankz.Type; import ru.m.tankz.util.LevelUtil; @@ -20,11 +17,9 @@ import ru.m.tankz.util.LevelUtil; public static inline var ID = 'map'; public static inline var TAG = 'map'; - @:view var gameClassicButton:ButtonView; - @:view var gameDotaButton:ButtonView; - @:view var openButton:ButtonView; - @:view var saveButton:ButtonView; - @:view var fileNameLabel:LabelView; + public var type(default, set):GameType; + private var fileName:String; + @:view var levelName:InputView; @:view var mapView:MapEditView; @:view var spawnPointList:DataView; @@ -36,80 +31,66 @@ import ru.m.tankz.util.LevelUtil; @:provide var config:Config; public function init():Void { - var resetSelected = function() { - for (v in brickList.views) { - cast(v, BrickView).selected = false; - } - for (v in spawnPointList.views) { - cast(v, SpawnPointView).selected = false; - } - }; - - brickList.onItemSelect.connect(function(index:Int, value:BrickConfig, item:BrickView):Void { - mapView.brush = Brush.BRICK(item.data); - resetSelected(); - item.selected = true; - }); - - spawnPointList.onItemSelect.connect(function(index:Int, value:SpawnPoint, item:SpawnPointView):Void { - mapView.brush = Brush.POINT(item.data); - resetSelected(); - item.selected = true; - }); - - setGameType(ClassicGame.TYPE); + fileName = "level000.txt"; + type = ClassicGame.TYPE; } - /*public function onShow():Void { - if (config == null) { - setGameType(ClassicGame.TYPE); + private function set_type(value:GameType):GameType { + if (type != value) { + type = value; + config = configBundle.get(type); + mapView.config = config; + brickList.data = config.bricks.filter(function(brick) return brick.index > -1); + spawnPointList.data = config.points; + selectBrick(brickList.data[0]); + resetSize(); } - }*/ - - private function setGameType(type:GameType):Void { - config = configBundle.get(type); - - mapView.config = config; - - brickList.data = config.bricks.filter(function(brick) return brick.index > -1); - spawnPointList.data = config.points; - - mapView.brush = Brush.BRICK(brickList.data[0]); - cast(brickList.views[0], BrickView).selected = true; + return type; } - public function onPress(v:ButtonView):Void { - switch (v.id) { - case 'gameClassicButton': - setGameType(ClassicGame.TYPE); - case 'gameDotaButton': - setGameType(DotaGame.TYPE); - case 'openButton': - L.d(TAG, 'OPEN'); - FileUtil.browse().then(function(content:FileContent) { - fileNameLabel.text = content.name; - var data = LevelUtil.loads(config, content.content); - mapView.gridSize = data.size; - mapView.data = data; - levelName.text = data.name; - if (data.size != null) { - widthInput.text = Std.string(data.size.width); - heightInput.text = Std.string(data.size.height); - } else { - widthInput.text = ""; - heightInput.text = ""; - } - }); - case 'saveButton': - L.d(TAG, 'SAVE'); - var data = mapView.data; - data.name = levelName.text; - FileUtil.save({ - name: fileNameLabel.text, - content: LevelUtil.dumps(config, data), - }); - case _: + private function updateSelected(brick:BrickConfig = null, point:SpawnPoint = null) { + for (v in brickList.dataViews) { + v.selected = v.data == brick; } + for (v in spawnPointList.dataViews) { + v.selected = v.data == point; + } + } + + private function selectBrick(brick:BrickConfig):Void { + mapView.brush = BRICK(brick); + updateSelected(brick); + } + + private function selectSpawnPoint(point:SpawnPoint):Void { + mapView.brush = POINT(point); + updateSelected(null, point); + } + + private function open():Void { + FileUtil.browse().then(function(content:FileContent) { + fileName = content.name; + var data = LevelUtil.loads(config, content.content); + mapView.gridSize = data.size; + mapView.data = data; + levelName.text = data.name; + if (data.size != null) { + widthInput.text = Std.string(data.size.width); + heightInput.text = Std.string(data.size.height); + } else { + widthInput.text = Std.string(config.map.grid.width); + heightInput.text = Std.string(config.map.grid.height); + } + }); + } + + private function save():Void { + var data = mapView.data; + data.name = levelName.text; + FileUtil.save({ + name: fileName, + content: LevelUtil.dumps(config, data), + }); } private function applySize():Void { @@ -117,6 +98,8 @@ import ru.m.tankz.util.LevelUtil; } private function resetSize():Void { + widthInput.text = Std.string(config.map.grid.width); + heightInput.text = Std.string(config.map.grid.height); mapView.gridSize = null; } } diff --git a/src/editor/haxe/ru/m/tankz/editor/view/MapFrame.yaml b/src/editor/haxe/ru/m/tankz/editor/view/MapFrame.yaml index 125def6..b9328cd 100644 --- a/src/editor/haxe/ru/m/tankz/editor/view/MapFrame.yaml +++ b/src/editor/haxe/ru/m/tankz/editor/view/MapFrame.yaml @@ -11,43 +11,48 @@ views: - $type: haxework.view.ButtonView skinId: button.simple text: Classic - +onPress: $code:setGameType('classic') + +onPress: $code:function(_) type = 'classic' - $type: haxework.view.ButtonView skinId: button.simple text: DotA - +onPress: $code:setGameType('dota') + +onPress: $code:function(_) type = 'dota' - $type: haxework.view.ButtonView skinId: button.simple text: DeathMatch - +onPress: $code:setGameType('death') - - id: fileNameLabel - $type: haxework.view.LabelView - skinId: text - text: level000.txt - - id: levelName - $type: haxework.view.InputView - skinId: text.box - geometry.size.width: 300 - geometry.size.height: 26 - text: "" + +onPress: $code:function(_) type = 'death' - $type: haxework.view.HGroupView + layout.vAlign: middle views: + - $type: haxework.view.LabelView + skinId: text + text: "Name:" + - id: levelName + $type: haxework.view.InputView + skinId: text.box + geometry.size.width: 300 + geometry.size.height: 26 + text: "" + - $type: haxework.view.LabelView + skinId: text + text: "Size:" + geometry.margin.left: 20 - id: width $type: haxework.view.InputView skinId: text.box geometry.size.fixed: [50, 26] + - $type: haxework.view.LabelView + skinId: text + text: "x" - id: height $type: haxework.view.InputView skinId: text.box geometry.size.fixed: [50, 26] - $type: haxework.view.ButtonView - skinId: button.simple - text: apply - +onPress: "$code:applySize()" + skinId: button.start.small + +onPress: $code:applySize() - $type: haxework.view.ButtonView - skinId: button.simple - text: reset - +onPress: "$code:resetSize()" + skinId: button.close.small + +onPress: $code:resetSize() # map - $type: haxework.view.HGroupView views: @@ -59,6 +64,7 @@ views: hAlign: center margin: 5 factory: $code:ru.m.tankz.editor.view.map.SpawnPointView.factory + +onDataSelect: $this:selectSpawnPoint - id: mapView $type: ru.m.tankz.editor.view.map.MapEditView - id: brickList @@ -69,6 +75,7 @@ views: hAlign: center margin: 5 factory: $code:ru.m.tankz.editor.view.map.BrickView.factory + +onDataSelect: $this:selectBrick - $type: haxework.view.HGroupView layout.margin: 5 views: @@ -76,9 +83,9 @@ views: $type: haxework.view.ButtonView skinId: button.simple text: Open - +onPress: $this:onPress + +onPress: $code:open() - id: saveButton $type: haxework.view.ButtonView skinId: button.simple text: Save - +onPress: $this:onPress + +onPress: $code:save()