Danro-Jump/Assets/Tests/EditMode/Editor/OneWayPlatformColliderTests.cs
Danil Iarosh c3bb250769 Integrate COM logging HUD fixes and hopper dispensing
Подробный список изменений:
- Добавлено файловое логирование игровых сессий в game.log и расширена диагностика COM-подключений.
- Подключен native COM transport с fallback-логикой для IL2CPP и добавлен плагин ComNative.dll.
- Исправлена логика one-way платформ, чтобы игрок проходил сквозь платформы при нахождении ниже их верхней точки.
- Переработана компоновка gameplay HUD: верхние плашки выровнены, левая уменьшена, центральная плашка очков центрирована и масштабирована.
- Добавлена общая выдача призов через хоппер с командами запуска/остановки мотора и ожиданием датчика.
- Подключен сервисный тест хоппера в настройках и обновлены связанные тесты.
- Добавлены скриншоты визуальной проверки HUD.
2026-07-06 16:47:27 +03:00

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