feat(client): add render scaling
This commit is contained in:
@@ -32,6 +32,7 @@ class Render extends SpriteView implements IRender {
|
|||||||
private var mapWidth(get, null):Float;
|
private var mapWidth(get, null):Float;
|
||||||
private var mapHeight(get, null):Float;
|
private var mapHeight(get, null):Float;
|
||||||
|
|
||||||
|
private var container:Sprite;
|
||||||
private var backgroundLayer:Sprite;
|
private var backgroundLayer:Sprite;
|
||||||
private var groundLayer:Sprite;
|
private var groundLayer:Sprite;
|
||||||
private var entryLayer:Sprite;
|
private var entryLayer:Sprite;
|
||||||
@@ -46,16 +47,18 @@ class Render extends SpriteView implements IRender {
|
|||||||
public function new() {
|
public function new() {
|
||||||
super();
|
super();
|
||||||
items = new Map();
|
items = new Map();
|
||||||
|
container = new Sprite();
|
||||||
|
content.addChild(container);
|
||||||
backgroundLayer = new Sprite();
|
backgroundLayer = new Sprite();
|
||||||
groundLayer = new Sprite();
|
groundLayer = new Sprite();
|
||||||
entryLayer = new Sprite();
|
entryLayer = new Sprite();
|
||||||
upLayer = new Sprite();
|
upLayer = new Sprite();
|
||||||
upperLayer = new Sprite();
|
upperLayer = new Sprite();
|
||||||
content.addChild(backgroundLayer);
|
container.addChild(backgroundLayer);
|
||||||
content.addChild(groundLayer);
|
container.addChild(groundLayer);
|
||||||
content.addChild(entryLayer);
|
container.addChild(entryLayer);
|
||||||
content.addChild(upLayer);
|
container.addChild(upLayer);
|
||||||
content.addChild(upperLayer);
|
container.addChild(upperLayer);
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,14 +72,12 @@ class Render extends SpriteView implements IRender {
|
|||||||
|
|
||||||
private function set_config(value:Config):Config {
|
private function set_config(value:Config):Config {
|
||||||
config = value;
|
config = value;
|
||||||
setSize(mapWidth, mapHeight, "render");
|
|
||||||
drawBackground();
|
drawBackground();
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function set_gridSize(value:GridSize):GridSize {
|
private function set_gridSize(value:GridSize):GridSize {
|
||||||
gridSize = value;
|
gridSize = value;
|
||||||
setSize(mapWidth, mapHeight, "render");
|
|
||||||
drawBackground();
|
drawBackground();
|
||||||
return gridSize;
|
return gridSize;
|
||||||
}
|
}
|
||||||
@@ -89,6 +90,13 @@ class Render extends SpriteView implements IRender {
|
|||||||
g.endFill();
|
g.endFill();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override public function redraw():Void {
|
||||||
|
var scale = Math.min(width / mapWidth, height / mapHeight);
|
||||||
|
container.scaleX = content.scaleY = scale;
|
||||||
|
container.x = (width - (mapWidth * scale)) / 2;
|
||||||
|
container.y = (height - (mapHeight * scale)) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
public function draw():Void {
|
public function draw():Void {
|
||||||
for (item in items) {
|
for (item in items) {
|
||||||
item.update();
|
item.update();
|
||||||
|
|||||||
@@ -1,12 +1,9 @@
|
|||||||
---
|
---
|
||||||
style: container
|
style: container
|
||||||
overflow.x: crop
|
|
||||||
overflow.y: crop
|
|
||||||
views:
|
views:
|
||||||
- id: game
|
- id: game
|
||||||
$type: ru.m.tankz.view.game.GameViewContainer
|
$type: hw.view.group.GroupView
|
||||||
layout.hAlign: center
|
geometry.stretch: true
|
||||||
layout.vAlign: middle
|
|
||||||
- id: gamepad
|
- id: gamepad
|
||||||
$type: ru.m.tankz.view.gamepad.GamepadView
|
$type: ru.m.tankz.view.gamepad.GamepadView
|
||||||
geometry.position: absolute
|
geometry.position: absolute
|
||||||
|
|||||||
@@ -1,16 +1,19 @@
|
|||||||
---
|
---
|
||||||
|
geometry.stretch: true
|
||||||
views:
|
views:
|
||||||
- id: left
|
- id: left
|
||||||
$type: hw.view.group.GroupView
|
$type: hw.view.group.GroupView
|
||||||
layout.vAlign: middle
|
layout.vAlign: middle
|
||||||
geometry.height: 100%
|
geometry.height: 100%
|
||||||
geometry.width: 50%
|
geometry.width: 25%
|
||||||
- id: render
|
- id: render
|
||||||
$type: ru.m.tankz.render.Render
|
$type: ru.m.tankz.render.Render
|
||||||
|
geometry.height: 100%
|
||||||
|
geometry.width: 50%
|
||||||
- id: right
|
- id: right
|
||||||
$type: hw.view.group.VGroupView
|
$type: hw.view.group.VGroupView
|
||||||
geometry.height: 100%
|
geometry.height: 100%
|
||||||
geometry.width: 50%
|
geometry.width: 25%
|
||||||
geometry.padding: 5
|
geometry.padding: 5
|
||||||
layout.vAlign: top
|
layout.vAlign: top
|
||||||
layout.margin: 5
|
layout.margin: 5
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
---
|
---
|
||||||
|
geometry.stretch: true
|
||||||
views:
|
views:
|
||||||
- id: top
|
- id: top
|
||||||
$type: hw.view.group.HGroupView
|
$type: hw.view.group.HGroupView
|
||||||
@@ -18,3 +19,4 @@ views:
|
|||||||
factory: ~TeamView.viewFactory
|
factory: ~TeamView.viewFactory
|
||||||
- id: render
|
- id: render
|
||||||
$type: ru.m.tankz.render.Render
|
$type: ru.m.tankz.render.Render
|
||||||
|
geometry.stretch: true
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
package ru.m.tankz.view.game;
|
|
||||||
|
|
||||||
import hw.view.geometry.HAlign;
|
|
||||||
import hw.view.geometry.VAlign;
|
|
||||||
import hw.view.group.GroupView;
|
|
||||||
|
|
||||||
class GameViewContainer extends GroupView {
|
|
||||||
|
|
||||||
override public function update():Void {
|
|
||||||
super.update();
|
|
||||||
if (parent != null) {
|
|
||||||
var s = Math.min(parent.width / width, parent.height / height);
|
|
||||||
if (s < 1) {
|
|
||||||
content.scaleX = content.scaleY = s;
|
|
||||||
content.x = switch layout.hAlign {
|
|
||||||
case LEFT | NONE: 0;
|
|
||||||
case CENTER: (parent.width - width * s) / 2;
|
|
||||||
case RIGHT: (parent.width - width * s);
|
|
||||||
}
|
|
||||||
content.y = switch layout.vAlign {
|
|
||||||
case TOP | NONE: 0;
|
|
||||||
case MIDDLE: (parent.height - height * s) / 2;
|
|
||||||
case BOTTOM: (parent.height - height * s);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
content.scaleX = content.scaleY = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user