Подробные изменения: - Расширен основной gameplay loop: джетпак, новые платформы, оборудование, враги, прогрессия сложности и ограничения взаимодействий игрока. - Добавлены Bootstrap-сервисы запуска приложения, защита, фокус окна, управление курсором и настройки сервисов через DI. - Добавлена COM-интеграция с технической схемой Input System, обработкой кнопок/ADC, подсветкой и консольной диагностикой. - Добавлен отдельный debug/logging модуль с каналами, обработчиками консоли и файловым выводом. - Добавлены asmdef, link.xml, EditMode/PlayMode тесты и обновлена дорожная карта проекта. Проверки: - dotnet build .\\DanroJump.Runtime.csproj --no-restore - dotnet build .\\DanroJump.Tests.EditMode.csproj --no-restore - dotnet build .\\DanroJump.Tests.PlayMode.csproj --no-restore
103 lines
4.0 KiB
C#
103 lines
4.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Reflection;
|
|
using DanroJump.Gameplay;
|
|
using DanroJump.Settings;
|
|
using UnityEngine;
|
|
|
|
namespace DanroJump.Tests.EditMode
|
|
{
|
|
internal static class TestObjectFactory
|
|
{
|
|
public static ServiceSettingsDatabase CreateSettingsDatabase(params ServiceSettingDefinition[] definitions)
|
|
{
|
|
var database = ScriptableObject.CreateInstance<ServiceSettingsDatabase>();
|
|
SetPrivateField(database, "entries", new List<ServiceSettingDefinition>(definitions));
|
|
return database;
|
|
}
|
|
|
|
public static ServiceSettingDefinition CreateSettingDefinition(
|
|
string key,
|
|
ServiceSettingValueType type,
|
|
ServiceSettingValue defaultValue,
|
|
bool exposedForExternalChanges = false,
|
|
string group = "General",
|
|
int minInt = 0,
|
|
int maxInt = 10,
|
|
float minFloat = 0f,
|
|
float maxFloat = 1f,
|
|
IReadOnlyList<string> options = null)
|
|
{
|
|
var definition = new ServiceSettingDefinition();
|
|
SetPrivateField(definition, "key", key);
|
|
SetPrivateField(definition, "displayName", key);
|
|
SetPrivateField(definition, "group", group);
|
|
SetPrivateField(definition, "exposedForExternalChanges", exposedForExternalChanges);
|
|
SetPrivateField(definition, "valueType", type);
|
|
SetPrivateField(definition, "minInt", minInt);
|
|
SetPrivateField(definition, "maxInt", maxInt);
|
|
SetPrivateField(definition, "minFloat", minFloat);
|
|
SetPrivateField(definition, "maxFloat", maxFloat);
|
|
|
|
switch (defaultValue.type)
|
|
{
|
|
case ServiceSettingValueType.Bool:
|
|
SetPrivateField(definition, "defaultBool", defaultValue.boolValue);
|
|
break;
|
|
case ServiceSettingValueType.Int:
|
|
SetPrivateField(definition, "defaultInt", defaultValue.intValue);
|
|
break;
|
|
case ServiceSettingValueType.Float:
|
|
SetPrivateField(definition, "defaultFloat", defaultValue.floatValue);
|
|
break;
|
|
case ServiceSettingValueType.String:
|
|
SetPrivateField(definition, "defaultString", defaultValue.stringValue);
|
|
break;
|
|
case ServiceSettingValueType.Option:
|
|
SetPrivateField(definition, "defaultOptionIndex", defaultValue.intValue);
|
|
break;
|
|
}
|
|
|
|
if (options != null)
|
|
{
|
|
SetPrivateField(definition, "options", new List<string>(options));
|
|
}
|
|
|
|
return definition;
|
|
}
|
|
|
|
public static GameplayDifficultyStage CreateDifficultyStage(
|
|
string stageName,
|
|
float startY,
|
|
float verticalLength,
|
|
float horizontalDistribution)
|
|
{
|
|
var stage = ScriptableObject.CreateInstance<GameplayDifficultyStage>();
|
|
SetPrivateField(stage, "stageName", stageName);
|
|
SetPrivateField(stage, "startY", startY);
|
|
SetPrivateField(stage, "verticalLength", verticalLength);
|
|
SetPrivateField(stage, "horizontalDistribution", horizontalDistribution);
|
|
return stage;
|
|
}
|
|
|
|
public static WeightedPrefabOption CreateWeightedPrefabOption(GameObject prefab, float weight)
|
|
{
|
|
var option = new WeightedPrefabOption();
|
|
SetPrivateField(option, "prefab", prefab);
|
|
SetPrivateField(option, "weight", weight);
|
|
return option;
|
|
}
|
|
|
|
public static void SetPrivateField(object target, string fieldName, object value)
|
|
{
|
|
var field = target.GetType().GetField(fieldName, BindingFlags.Instance | BindingFlags.NonPublic);
|
|
if (field == null)
|
|
{
|
|
throw new MissingFieldException(target.GetType().FullName, fieldName);
|
|
}
|
|
|
|
field.SetValue(target, value);
|
|
}
|
|
}
|
|
}
|