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