Подробный список изменений: - Добавлено файловое логирование игровых сессий в game.log и расширена диагностика COM-подключений. - Подключен native COM transport с fallback-логикой для IL2CPP и добавлен плагин ComNative.dll. - Исправлена логика one-way платформ, чтобы игрок проходил сквозь платформы при нахождении ниже их верхней точки. - Переработана компоновка gameplay HUD: верхние плашки выровнены, левая уменьшена, центральная плашка очков центрирована и масштабирована. - Добавлена общая выдача призов через хоппер с командами запуска/остановки мотора и ожиданием датчика. - Подключен сервисный тест хоппера в настройках и обновлены связанные тесты. - Добавлены скриншоты визуальной проверки HUD.
80 lines
2.9 KiB
C#
80 lines
2.9 KiB
C#
using DanroJump.Gameplay;
|
|
using NUnit.Framework;
|
|
using UnityEngine;
|
|
|
|
namespace DanroJump.Tests.EditMode
|
|
{
|
|
public sealed class OneWayPlatformColliderTests
|
|
{
|
|
private GameObject playerObject;
|
|
private GameObject platformObject;
|
|
|
|
[TearDown]
|
|
public void TearDown()
|
|
{
|
|
if (playerObject != null)
|
|
{
|
|
Object.DestroyImmediate(playerObject);
|
|
}
|
|
|
|
if (platformObject != null)
|
|
{
|
|
Object.DestroyImmediate(platformObject);
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void ShouldCollideWith_ReturnsFalseWhenPlayerBottomIsBelowPlatformTop()
|
|
{
|
|
var player = CreatePlayer(centerY: 0.45f, previousGroundCheckY: 0.5f);
|
|
var oneWayPlatform = CreatePlatform(topY: 0f);
|
|
|
|
Assert.That(oneWayPlatform.ShouldCollideWith(player), Is.False);
|
|
}
|
|
|
|
[Test]
|
|
public void ShouldCollideWith_ReturnsTrueWhenPlayerBottomIsAtPlatformTop()
|
|
{
|
|
var player = CreatePlayer(centerY: 0.5f, previousGroundCheckY: 0.5f);
|
|
var oneWayPlatform = CreatePlatform(topY: 0f);
|
|
|
|
Assert.That(oneWayPlatform.ShouldCollideWith(player), Is.True);
|
|
}
|
|
|
|
private JumpPlayerController CreatePlayer(float centerY, float previousGroundCheckY)
|
|
{
|
|
playerObject = new GameObject("OneWay Platform Test Player");
|
|
playerObject.transform.position = new Vector3(0f, centerY, 0f);
|
|
|
|
var groundCheckObject = new GameObject("GroundCheck");
|
|
groundCheckObject.transform.SetParent(playerObject.transform, false);
|
|
groundCheckObject.transform.localPosition = new Vector3(0f, -0.5f, 0f);
|
|
|
|
var body = playerObject.AddComponent<Rigidbody2D>();
|
|
body.gravityScale = 0f;
|
|
body.linearVelocity = Vector2.down;
|
|
playerObject.AddComponent<BoxCollider2D>();
|
|
|
|
var player = playerObject.AddComponent<JumpPlayerController>();
|
|
TestObjectFactory.SetPrivateField(player, "<PreviousGroundCheckY>k__BackingField", previousGroundCheckY);
|
|
TestObjectFactory.SetPrivateField(player, "<PreviousVerticalVelocity>k__BackingField", -1f);
|
|
return player;
|
|
}
|
|
|
|
private OneWayPlatformCollider CreatePlatform(float topY)
|
|
{
|
|
platformObject = new GameObject("OneWay Platform Test Platform");
|
|
platformObject.transform.position = Vector3.zero;
|
|
|
|
var platformCollider = platformObject.AddComponent<BoxCollider2D>();
|
|
platformCollider.size = new Vector2(2f, 0.2f);
|
|
platformCollider.offset = new Vector2(0f, topY - platformCollider.size.y * 0.5f);
|
|
|
|
var oneWayPlatform = platformObject.AddComponent<OneWayPlatformCollider>();
|
|
oneWayPlatform.Construct(playerObject.GetComponent<JumpPlayerController>());
|
|
oneWayPlatform.UpdateCachedTopY();
|
|
return oneWayPlatform;
|
|
}
|
|
}
|
|
}
|