Scale cards by 25 percent and center hand with hidden side panel
CI / test (push) Successful in 2m27s
Details
CI / test (push) Successful in 2m27s
Details
This commit is contained in:
parent
6d8882ba2f
commit
5a6e96b678
|
|
@ -15,6 +15,7 @@ MonoBehaviour:
|
|||
cardWidth: 0.63
|
||||
cardHeight: 0.88
|
||||
cardThickness: 0.006
|
||||
cardScale: 1.25
|
||||
circleSpacingX: 1.42
|
||||
frontRowZ: 1.55
|
||||
backRowZ: 3
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@ namespace Vanguard.Board3D
|
|||
public float cardWidth = 0.63f;
|
||||
public float cardHeight = 0.88f;
|
||||
public float cardThickness = 0.006f;
|
||||
[Tooltip("Общий масштаб всех карт на столе и в руке.")]
|
||||
public float cardScale = 1.25f;
|
||||
|
||||
[Header("Поле")]
|
||||
[Tooltip("Расстояние между центрами соседних кругов по X.")]
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ namespace Vanguard.Board3D
|
|||
private Quaternion _targetRotation = Quaternion.identity;
|
||||
private Vector3 _targetPosition;
|
||||
private Vector3 _targetScale = Vector3.one;
|
||||
private Vector3 _baseScale = Vector3.one;
|
||||
private bool _immediate;
|
||||
|
||||
private bool _dragging;
|
||||
|
|
@ -212,6 +213,7 @@ namespace Vanguard.Board3D
|
|||
SetState(baseRotation, faceUp, rested, damageLayout);
|
||||
_targetPosition = position;
|
||||
_targetScale = Vector3.one * Mathf.Max(0.05f, scale);
|
||||
_baseScale = _targetScale;
|
||||
_immediate = immediate;
|
||||
|
||||
if (_dragging)
|
||||
|
|
@ -250,7 +252,7 @@ namespace Vanguard.Board3D
|
|||
_dragging = true;
|
||||
_dragOriginPosition = transform.position;
|
||||
_dragOriginRotation = transform.rotation;
|
||||
_targetScale = Vector3.one * 1.05f;
|
||||
_targetScale = _baseScale * 1.05f;
|
||||
if (_collider != null)
|
||||
_collider.enabled = false;
|
||||
SetHighlight(null);
|
||||
|
|
@ -267,7 +269,7 @@ namespace Vanguard.Board3D
|
|||
_config.dragLift + (_config.cardThickness * 0.5f),
|
||||
worldPosition.z);
|
||||
transform.rotation = Quaternion.Euler(0f, yaw, 0f);
|
||||
transform.localScale = Vector3.one * 1.05f;
|
||||
transform.localScale = _baseScale * 1.05f;
|
||||
}
|
||||
|
||||
public void DropAt(Vector3 position, Quaternion rotation)
|
||||
|
|
@ -277,7 +279,7 @@ namespace Vanguard.Board3D
|
|||
_collider.enabled = true;
|
||||
_targetPosition = position;
|
||||
_targetRotation = rotation;
|
||||
_targetScale = Vector3.one;
|
||||
_targetScale = _baseScale;
|
||||
_immediate = false;
|
||||
}
|
||||
|
||||
|
|
@ -288,7 +290,7 @@ namespace Vanguard.Board3D
|
|||
_collider.enabled = true;
|
||||
_targetPosition = _dragOriginPosition;
|
||||
_targetRotation = _dragOriginRotation;
|
||||
_targetScale = Vector3.one;
|
||||
_targetScale = _baseScale;
|
||||
_immediate = false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ namespace Vanguard.Board3D
|
|||
|
||||
private PlaymatLayoutConfig _config;
|
||||
private PlaymatLayout _layout;
|
||||
private float _handViewportX;
|
||||
private MatchView _view;
|
||||
private int _selfPlayer;
|
||||
private bool _hasRendered;
|
||||
|
|
@ -105,6 +106,11 @@ namespace Vanguard.Board3D
|
|||
return false;
|
||||
}
|
||||
|
||||
public void SetHandViewportX(float value)
|
||||
{
|
||||
_handViewportX = Mathf.Clamp(value, 0.05f, 0.95f);
|
||||
}
|
||||
|
||||
public void ConfigureRuntime(
|
||||
AnimationConfig animationConfig,
|
||||
InputLockService inputLock)
|
||||
|
|
@ -159,6 +165,7 @@ namespace Vanguard.Board3D
|
|||
|
||||
_config = config != null ? config : PlaymatLayoutConfig.Default;
|
||||
_layout = new PlaymatLayout(_config);
|
||||
_handViewportX = _config.handViewportX;
|
||||
_selfPlayer = 0;
|
||||
_built = true;
|
||||
|
||||
|
|
@ -257,7 +264,7 @@ namespace Vanguard.Board3D
|
|||
spec.Rested,
|
||||
immediateAll || changed,
|
||||
spec.DamageLayout,
|
||||
spec.Scale);
|
||||
spec.Scale * Mathf.Max(0.05f, _config.cardScale));
|
||||
card.SetHighlight(spec.Highlight);
|
||||
card.SetStats(spec.Stats, spec.StatsModified);
|
||||
|
||||
|
|
@ -889,7 +896,7 @@ namespace Vanguard.Board3D
|
|||
var halfHeight = Mathf.Tan(
|
||||
_camera.fieldOfView * 0.5f * Mathf.Deg2Rad) * _config.handViewDistance;
|
||||
var halfWidth = halfHeight * Mathf.Max(0.1f, _camera.aspect);
|
||||
var x = ((_config.handViewportX - 0.5f) * 2f * halfWidth)
|
||||
var x = ((_handViewportX - 0.5f) * 2f * halfWidth)
|
||||
+ (offset * step);
|
||||
var y = (_config.handViewportY - 0.5f) * 2f * halfHeight
|
||||
+ (1f - Mathf.Abs(offset) / safeCount) * _config.handViewArc;
|
||||
|
|
@ -934,7 +941,7 @@ namespace Vanguard.Board3D
|
|||
false,
|
||||
false,
|
||||
false,
|
||||
scale);
|
||||
scale * Mathf.Max(0.05f, _config.cardScale));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -662,6 +662,7 @@ namespace Vanguard.UI
|
|||
_view = snapshot.View;
|
||||
_finished = _view.IsFinished;
|
||||
_pendingIntents.Clear();
|
||||
FinishDiscardSelection();
|
||||
_triggerPowerSlot = null;
|
||||
PrepareTriggerSelection();
|
||||
if (_view.Clock != null)
|
||||
|
|
@ -1130,6 +1131,15 @@ namespace Vanguard.UI
|
|||
_phasePanel.anchoredPosition = new Vector2(-468f + shift, 0f);
|
||||
if (_opponentZones?.Root != null)
|
||||
_opponentZones.Root.anchoredPosition = new Vector2(-488f + shift, -108f);
|
||||
if (_board3D != null)
|
||||
{
|
||||
_board3D.SetHandViewportX(
|
||||
_intentPanelVisible
|
||||
? (_board3D.Config != null
|
||||
? _board3D.Config.handViewportX
|
||||
: 0.44f)
|
||||
: 0.5f);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnConcedeClicked()
|
||||
|
|
|
|||
|
|
@ -1004,6 +1004,10 @@ Battle; Boot и общие сервисы остаются персистент
|
|||
муллиган», с выбором — «Заменить X карт».
|
||||
- Trigger-зона противника зеркальна: над его колодой в сторону центра,
|
||||
а не за дальним краем.
|
||||
- Карты на столе и в руке масштабируются общим `cardScale = 1.25`
|
||||
(+25%); drag сохраняет базовый масштаб.
|
||||
- Рука центрируется при скрытии боковой панели (`handViewportX = 0.5`);
|
||||
при показе возвращается к значению из layout-конфига.
|
||||
- Камера боя: `(0, 4.2, -8)` → цель `(0, 0, 0)`, только наклон по X;
|
||||
поле по центру, без бокового смещения.
|
||||
- UI: reference-разрешение **1920×1080**, CanvasScaler `matchWidthOrHeight
|
||||
|
|
|
|||
|
|
@ -75,6 +75,7 @@
|
|||
углом к горизонту и не двигается игроком: `(0, 4.2, -8)`, цель
|
||||
`(0, 0, 0)`, FOV 46; наклон только по X, без бокового смещения. Драг-н-дроп
|
||||
на плоскость стола с подсветкой целей и плавным снапом.
|
||||
Все карты на столе и в руке увеличены на 25% (`cardScale = 1.25`).
|
||||
- Поле: у каждого игрока два ряда `R V R` / `R R R` (V + 5 RC), у
|
||||
противника зеркально; между полями общий круг защиты; колода, дроп,
|
||||
триггер-зона и урон — 3D-зоны. Локальный игрок всегда снизу, даже если
|
||||
|
|
@ -99,7 +100,8 @@
|
|||
Кнопка внутри overlay позволяет выйти в меню.
|
||||
- Правую панель действий можно временно скрыть кнопкой «Скрыть панель»
|
||||
в верхней строке; поле остаётся видимым, вернуть — «Показать панель».
|
||||
При скрытии панель фаз и блоки противника сдвигаются вправо.
|
||||
При скрытии панель фаз и блоки противника сдвигаются вправо, а рука
|
||||
центрируется по горизонтали; при показе возвращается влево.
|
||||
- Кнопка муллигана находится в панели «Фазы» и динамическая: без выбора —
|
||||
«Закончить муллиган», с выбором — «Заменить X карт».
|
||||
- Trigger-зона у противника расположена над его колодой по направлению
|
||||
|
|
|
|||
Loading…
Reference in New Issue