feat(client): add render scaling

This commit is contained in:
2024-05-29 15:19:18 +03:00
parent 682eaa677c
commit 16a5adefad
5 changed files with 24 additions and 44 deletions

View File

@@ -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();

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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;
}
}
}
}