Orient attack rest clockwise and damage counter-clockwise
CI / test (push) Successful in 3m56s
Details
CI / test (push) Successful in 3m56s
Details
This commit is contained in:
parent
657859fec1
commit
c2489b5452
|
|
@ -126,13 +126,19 @@ namespace Vanguard.Board3D
|
||||||
_front.SetPropertyBlock(_block);
|
_front.SetPropertyBlock(_block);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetState(Quaternion baseRotation, bool faceUp, bool rested)
|
public void SetState(
|
||||||
|
Quaternion baseRotation,
|
||||||
|
bool faceUp,
|
||||||
|
bool rested,
|
||||||
|
bool damageLayout = false)
|
||||||
{
|
{
|
||||||
_baseRotation = baseRotation;
|
_baseRotation = baseRotation;
|
||||||
_faceUp = faceUp;
|
_faceUp = faceUp;
|
||||||
_rested = rested;
|
_rested = rested;
|
||||||
|
|
||||||
var rest = Quaternion.Euler(0f, rested ? 90f : 0f, 0f);
|
// Атака/Rest — по часовой стрелке (+90°), урон лежит против (-90°).
|
||||||
|
var restYaw = rested ? (damageLayout ? -90f : 90f) : 0f;
|
||||||
|
var rest = Quaternion.Euler(0f, restYaw, 0f);
|
||||||
var flip = Quaternion.Euler(faceUp ? 0f : 180f, 0f, 0f);
|
var flip = Quaternion.Euler(faceUp ? 0f : 180f, 0f, 0f);
|
||||||
_targetRotation = rest * baseRotation * flip;
|
_targetRotation = rest * baseRotation * flip;
|
||||||
}
|
}
|
||||||
|
|
@ -142,9 +148,10 @@ namespace Vanguard.Board3D
|
||||||
Quaternion baseRotation,
|
Quaternion baseRotation,
|
||||||
bool faceUp,
|
bool faceUp,
|
||||||
bool rested,
|
bool rested,
|
||||||
bool immediate)
|
bool immediate,
|
||||||
|
bool damageLayout = false)
|
||||||
{
|
{
|
||||||
SetState(baseRotation, faceUp, rested);
|
SetState(baseRotation, faceUp, rested, damageLayout);
|
||||||
_targetPosition = position;
|
_targetPosition = position;
|
||||||
_targetScale = Vector3.one;
|
_targetScale = Vector3.one;
|
||||||
_immediate = immediate;
|
_immediate = immediate;
|
||||||
|
|
|
||||||
|
|
@ -202,7 +202,8 @@ namespace Vanguard.Board3D
|
||||||
spec.BaseRotation,
|
spec.BaseRotation,
|
||||||
spec.FaceUp,
|
spec.FaceUp,
|
||||||
spec.Rested,
|
spec.Rested,
|
||||||
immediateAll || changed);
|
immediateAll || changed,
|
||||||
|
spec.DamageLayout);
|
||||||
card.SetHighlight(spec.Highlight);
|
card.SetHighlight(spec.Highlight);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -563,6 +564,7 @@ namespace Vanguard.Board3D
|
||||||
BaseRotation = Quaternion.Euler(0f, _layout.BaseYaw(localSeat), 0f),
|
BaseRotation = Quaternion.Euler(0f, _layout.BaseYaw(localSeat), 0f),
|
||||||
FaceUp = isUp,
|
FaceUp = isUp,
|
||||||
Rested = true,
|
Rested = true,
|
||||||
|
DamageLayout = true,
|
||||||
Highlight = highlight,
|
Highlight = highlight,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -1127,6 +1129,7 @@ namespace Vanguard.Board3D
|
||||||
public Quaternion BaseRotation;
|
public Quaternion BaseRotation;
|
||||||
public bool FaceUp;
|
public bool FaceUp;
|
||||||
public bool Rested;
|
public bool Rested;
|
||||||
|
public bool DamageLayout;
|
||||||
public Color? Highlight;
|
public Color? Highlight;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -224,6 +224,11 @@ namespace Vanguard.Tests
|
||||||
&& card.Ref.Player == 0).ToList();
|
&& card.Ref.Player == 0).ToList();
|
||||||
Assert.AreEqual(3, damage.Count);
|
Assert.AreEqual(3, damage.Count);
|
||||||
Assert.IsFalse(damage.Single(card => card.Ref.Index == 2).IsFaceUp);
|
Assert.IsFalse(damage.Single(card => card.Ref.Index == 2).IsFaceUp);
|
||||||
|
Assert.AreEqual(
|
||||||
|
-90f,
|
||||||
|
Mathf.DeltaAngle(0f, damage.Single(card => card.Ref.Index == 0).TargetYaw),
|
||||||
|
0.1f,
|
||||||
|
"Damage cards must be turned counter-clockwise");
|
||||||
|
|
||||||
Assert.IsTrue(cards.Any(card =>
|
Assert.IsTrue(cards.Any(card =>
|
||||||
card.Ref.Zone == BoardZone.Guardian
|
card.Ref.Zone == BoardZone.Guardian
|
||||||
|
|
|
||||||
|
|
@ -55,6 +55,11 @@ namespace Vanguard.Tests
|
||||||
&& card.Ref.Player == 0
|
&& card.Ref.Player == 0
|
||||||
&& card.Ref.Index == 0);
|
&& card.Ref.Index == 0);
|
||||||
Assert.IsTrue(visibleDamage.IsFaceUp);
|
Assert.IsTrue(visibleDamage.IsFaceUp);
|
||||||
|
Assert.AreEqual(
|
||||||
|
-90f,
|
||||||
|
Mathf.DeltaAngle(0f, visibleDamage.TargetYaw),
|
||||||
|
0.1f,
|
||||||
|
"Damage cards must rest counter-clockwise");
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -848,8 +848,9 @@ Battle; Boot и общие сервисы остаются персистент
|
||||||
— Ride только на V, Call только на пустой RC, Move только в своей колонке
|
— Ride только на V, Call только на пустой RC, Move только в своей колонке
|
||||||
(0↔3, 2↔4, занятый круг меняется местами), Guard — в общий круг.
|
(0↔3, 2↔4, занятый круг меняется местами), Guard — в общий круг.
|
||||||
- `Card3D` — тонкая коробка: отдельные лицо/рубашка/торец, коллайдер, арт из
|
- `Card3D` — тонкая коробка: отдельные лицо/рубашка/торец, коллайдер, арт из
|
||||||
`CardImageService`, переворот вокруг X, Rest вокруг Y, плавный снап.
|
`CardImageService`, переворот вокруг X, Rest вокруг Y по часовой стрелке,
|
||||||
Карты пулятся (`GameBoard3D`), материалы общие, instancing включён.
|
урон — против часовой, плавный снап. Карты пулятся (`GameBoard3D`),
|
||||||
|
материалы общие, instancing включён.
|
||||||
- `GameBoard3D` строит стол, круги, зоны, стопки и веер руки; raycast-клики,
|
- `GameBoard3D` строит стол, круги, зоны, стопки и веер руки; raycast-клики,
|
||||||
drag&drop на плоскость стола с подъёмом, подсветкой допустимых кругов и
|
drag&drop на плоскость стола с подъёмом, подсветкой допустимых кругов и
|
||||||
индикатором точки броска. Ошибка интента возвращает карту на место.
|
индикатором точки броска. Ошибка интента возвращает карту на место.
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,8 @@
|
||||||
без истории, MMR и наград.
|
без истории, MMR и наград.
|
||||||
- Боевой экран: поле, рука и стопки — **3D** (`GameBoard3D`), HUD/кнопки
|
- Боевой экран: поле, рука и стопки — **3D** (`GameBoard3D`), HUD/кнопки
|
||||||
остаются uGUI. Карты — тонкие 3D-объекты с артом, рубашкой, торцом и
|
остаются uGUI. Карты — тонкие 3D-объекты с артом, рубашкой, торцом и
|
||||||
коллайдером. Rest — поворот вокруг Y, закрытость — переворот вокруг X.
|
коллайдером. Rest (атака/поддержка) — поворот по часовой стрелке вокруг Y,
|
||||||
|
урон лежит на боку против часовой; закрытость — переворот вокруг X.
|
||||||
Драг-н-дроп на плоскость стола с подсветкой целей и плавным снапом.
|
Драг-н-дроп на плоскость стола с подсветкой целей и плавным снапом.
|
||||||
- Поле: у каждого игрока два ряда `R V R` / `R R R` (V + 5 RC), у
|
- Поле: у каждого игрока два ряда `R V R` / `R R R` (V + 5 RC), у
|
||||||
противника зеркально; между полями общий круг защиты; душа — стопка под
|
противника зеркально; между полями общий круг защиты; душа — стопка под
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue