拆分 UIController 组装 Context 职责 + 描述文本滚动展示

This commit is contained in:
SepComet 2026-03-12 16:45:20 +08:00
parent 4962b98714
commit f67888a8da
26 changed files with 2522 additions and 1053 deletions

View File

@ -3,11 +3,12 @@ using System.Collections.Generic;
using GameFramework.DataTable;
using GeometryTD.CustomUtility;
using GeometryTD.DataTable;
using GeometryTD.Definition;
using GeometryTD.Factory;
using GeometryTD.UI;
using UnityEngine;
namespace GeometryTD.Definition
namespace GeometryTD.CustomComponent
{
public sealed class ShopGoodsBuilder
{

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 05393ff6a1d531544bac8ffe4328d917
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,269 @@
using System.Collections.Generic;
using GeometryTD.CustomUtility;
using GeometryTD.Definition;
using UnityEngine;
namespace GeometryTD.UI
{
public partial class CombatFinishFormController
{
private CombatFinishFormContext BuildContext(CombatFinishFormRawData rawData)
{
_itemDescSeedMap.Clear();
if (rawData == null)
{
return null;
}
return new CombatFinishFormContext
{
EnemyKilledText = rawData.DefeatedEnemyCount.ToString(),
GoldGainedText = rawData.GainedGold.ToString(),
RewardItems = BuildRewardItems(rawData.RewardInventory),
CanReturn = rawData.CanReturn
};
}
private RepoItemContext[] BuildRewardItems(BackpackInventoryData inventory)
{
if (inventory == null)
{
return System.Array.Empty<RepoItemContext>();
}
Dictionary<long, MuzzleCompItemData> muzzleMap = BuildComponentMap(inventory.MuzzleComponents);
Dictionary<long, BearingCompItemData> bearingMap = BuildComponentMap(inventory.BearingComponents);
Dictionary<long, BaseCompItemData> baseMap = BuildComponentMap(inventory.BaseComponents);
List<RepoItemContext> itemContexts = new List<RepoItemContext>();
if (inventory.Towers != null)
{
foreach (TowerItemData tower in inventory.Towers)
{
if (tower == null)
{
continue;
}
itemContexts.Add(new RepoItemContext
{
InstanceId = tower.InstanceId,
CanDrag = false,
EnduranceRate01 = ItemDescUtility.ResolveTowerEnduranceRate(tower, muzzleMap, bearingMap, baseMap),
ClickActionType = RepoItemClickActionType.OpenDetail,
ComponentSlotType = TowerCompSlotType.None,
IconAreaContext = BuildTowerIconContext(tower, muzzleMap, bearingMap, baseMap)
});
AddItemDescSeed(
tower.InstanceId,
tower.Name,
"Tower",
ItemDescUtility.BuildTowerDesc(tower, muzzleMap, bearingMap, baseMap) ?? string.Empty,
tower.Stats?.Tags,
tower.Stats?.TagRuntimes);
}
}
if (inventory.MuzzleComponents != null)
{
foreach (MuzzleCompItemData item in inventory.MuzzleComponents)
{
if (item == null)
{
continue;
}
itemContexts.Add(new RepoItemContext
{
InstanceId = item.InstanceId,
CanDrag = false,
EnduranceRate01 = ItemDescUtility.ResolveComponentEnduranceRate(item),
ClickActionType = RepoItemClickActionType.OpenDetail,
ComponentSlotType = TowerCompSlotType.Muzzle,
IconAreaContext = BuildIconAreaContext(item)
});
AddItemDescSeed(
item.InstanceId,
item.Name,
BuildComponentTypeText(item.SlotType),
ItemDescUtility.BuildMuzzleDesc(item) ?? string.Empty,
item.Tags,
null);
}
}
if (inventory.BearingComponents != null)
{
foreach (BearingCompItemData item in inventory.BearingComponents)
{
if (item == null)
{
continue;
}
itemContexts.Add(new RepoItemContext
{
InstanceId = item.InstanceId,
CanDrag = false,
EnduranceRate01 = ItemDescUtility.ResolveComponentEnduranceRate(item),
ClickActionType = RepoItemClickActionType.OpenDetail,
ComponentSlotType = TowerCompSlotType.Bearing,
IconAreaContext = BuildIconAreaContext(item)
});
AddItemDescSeed(
item.InstanceId,
item.Name,
BuildComponentTypeText(item.SlotType),
ItemDescUtility.BuildBearingDesc(item) ?? string.Empty,
item.Tags,
null);
}
}
if (inventory.BaseComponents != null)
{
foreach (BaseCompItemData item in inventory.BaseComponents)
{
if (item == null)
{
continue;
}
itemContexts.Add(new RepoItemContext
{
InstanceId = item.InstanceId,
CanDrag = false,
EnduranceRate01 = ItemDescUtility.ResolveComponentEnduranceRate(item),
ClickActionType = RepoItemClickActionType.OpenDetail,
ComponentSlotType = TowerCompSlotType.Base,
IconAreaContext = BuildIconAreaContext(item)
});
AddItemDescSeed(
item.InstanceId,
item.Name,
BuildComponentTypeText(item.SlotType),
ItemDescUtility.BuildBaseDesc(item) ?? string.Empty,
item.Tags,
null);
}
}
return itemContexts.ToArray();
}
private static TowerIconAreaContext BuildTowerIconContext(
TowerItemData tower,
IReadOnlyDictionary<long, MuzzleCompItemData> muzzleMap,
IReadOnlyDictionary<long, BearingCompItemData> bearingMap,
IReadOnlyDictionary<long, BaseCompItemData> baseMap)
{
if (tower == null)
{
return null;
}
return new TowerIconAreaContext
{
Rarity = tower.Rarity,
MuzzleColor = ResolveComponentColor(tower.MuzzleComponentInstanceId, muzzleMap),
BearingColor = ResolveComponentColor(tower.BearingComponentInstanceId, bearingMap),
BaseColor = ResolveComponentColor(tower.BaseComponentInstanceId, baseMap)
};
}
private static Color ResolveComponentColor<TComp>(long instanceId, IReadOnlyDictionary<long, TComp> componentMap)
where TComp : TowerCompItemData
{
if (instanceId > 0 && componentMap != null && componentMap.TryGetValue(instanceId, out TComp comp) &&
comp != null)
{
return IconColorGenerator.GenerateForComponent(comp);
}
return Color.white;
}
private void AddItemDescSeed(
long itemId,
string title,
string typeText,
string description,
TagType[] tags,
TagRuntimeData[] tagRuntimes)
{
if (itemId <= 0)
{
return;
}
_itemDescSeedMap[itemId] = new ItemDescSeed
{
Title = string.IsNullOrWhiteSpace(title) ? $"Item {itemId}" : title,
TypeText = typeText ?? string.Empty,
Description = description ?? string.Empty,
Tags = tags,
TagRuntimes = tagRuntimes
};
}
private static string BuildComponentTypeText(TowerCompSlotType slotType)
{
return slotType switch
{
TowerCompSlotType.Muzzle => "Muzzle Component",
TowerCompSlotType.Bearing => "Bearing Component",
TowerCompSlotType.Base => "Base Component",
TowerCompSlotType.Accessory => "Accessory",
_ => "Component"
};
}
private static Dictionary<long, TComp> BuildComponentMap<TComp>(IReadOnlyList<TComp> items)
where TComp : TowerCompItemData
{
Dictionary<long, TComp> map = new Dictionary<long, TComp>();
if (items == null)
{
return map;
}
foreach (TComp item in items)
{
if (item == null || item.InstanceId <= 0)
{
continue;
}
map[item.InstanceId] = item;
}
return map;
}
private static IconAreaContext BuildIconAreaContext(TowerCompItemData item)
{
if (item == null)
{
return new IconAreaContext
{
ComponentSlotType = TowerCompSlotType.None,
Rarity = RarityType.None,
Color = Color.white,
Icon = null
};
}
return new IconAreaContext
{
ComponentSlotType = item.SlotType,
Rarity = item.Rarity,
Color = IconColorGenerator.GenerateForComponent(item),
Icon = null
};
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 985f3ab0e98b21f4c9c0872647df27d0
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,76 @@
using GeometryTD.Definition;
using UnityEngine;
namespace GeometryTD.UI
{
public partial class CombatInfoFormController
{
private static CombatInfoFormContext BuildContext(CombatInfoFormRawData rawData)
{
if (rawData == null)
{
return null;
}
return new CombatInfoFormContext
{
LevelMetaText = BuildLevelMetaText(rawData.LevelThemeType, rawData.LevelId),
LevelPhaseText = BuildPhaseText(rawData.CurrentPhaseIndex, rawData.TotalPhaseCount),
CoinText = BuildCoinText(rawData.Coin),
BaseHpText = BuildBaseHpText(rawData.BaseHp, rawData.BaseHpMax),
EnemyHpRateText = BuildEnemyHpRateText(rawData.EnemyHpRateMultiplier),
CanPause = rawData.CanPause,
CanEnd = rawData.CanEnd
};
}
private static string BuildLevelMetaText(LevelThemeType themeType, int levelId)
{
if (levelId <= 0)
{
return "Map -";
}
return $"{themeType} Map.{levelId}";
}
private static string BuildPhaseText(int currentPhaseIndex, int totalPhaseCount)
{
int phaseIndex = currentPhaseIndex < 0 ? 0 : currentPhaseIndex;
if (totalPhaseCount <= 0)
{
return $"{phaseIndex}/?";
}
return $"Wave: {phaseIndex}/{totalPhaseCount}";
}
private static string BuildCoinText(int coin)
{
if (coin < 0)
{
return "Coin: -";
}
return $"Coin: {coin}";
}
private static string BuildBaseHpText(int baseHp, int baseHpMax)
{
if (baseHpMax <= 0)
{
return "\u57FA\u5730\uFF1A-";
}
int clampedHp = Mathf.Clamp(baseHp, 0, baseHpMax);
int percent = Mathf.RoundToInt((float)clampedHp / baseHpMax * 100f);
return $"\u57FA\u5730\uFF1A{percent}%";
}
private static string BuildEnemyHpRateText(int enemyHpRateMultiplier)
{
int resolvedMultiplier = enemyHpRateMultiplier > 0 ? enemyHpRateMultiplier : 1;
return $"\u96BE\u5EA6\uFF1A{resolvedMultiplier}x";
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 3493c7f4a84ea9349a8286366f11962d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,77 @@
using UnityEngine;
namespace GeometryTD.UI
{
public partial class CombatSelectFormController
{
private static CombatSelectFormContext BuildContext(CombatSelectFormRawData rawData)
{
if (rawData == null)
{
return null;
}
return new CombatSelectFormContext
{
IsVisible = rawData.IsVisible,
ScreenPosition = rawData.ScreenPosition,
ShowBuildArea = rawData.IsVisible && rawData.DisplayMode == CombatSelectDisplayMode.Build,
ShowFuncArea = rawData.IsVisible && rawData.DisplayMode == CombatSelectDisplayMode.Func,
BuildItems = BuildItemContexts(rawData.BuildItems),
UpgradeItem = BuildItemContext(rawData.UpgradeItem),
DestroyItem = BuildItemContext(rawData.DestroyItem)
};
}
private static TowerSelectItemContext[] BuildItemContexts(TowerSelectItemRawData[] itemRawData)
{
if (itemRawData == null || itemRawData.Length <= 0)
{
return System.Array.Empty<TowerSelectItemContext>();
}
TowerSelectItemContext[] contexts = new TowerSelectItemContext[itemRawData.Length];
for (int i = 0; i < itemRawData.Length; i++)
{
contexts[i] = BuildItemContext(itemRawData[i]);
}
return contexts;
}
private static TowerSelectItemContext BuildItemContext(TowerSelectItemRawData rawData)
{
if (rawData == null)
{
return null;
}
return new TowerSelectItemContext
{
Icon = rawData.Icon,
PriceText = BuildPriceText(rawData.Price, rawData.IsGain),
IsVisible = rawData.IsVisible,
IsInteractable = rawData.IsInteractable,
ActionType = rawData.ActionType,
ActionIndex = rawData.ActionIndex,
TowerIconAreaContext = new TowerIconAreaContext
{
BaseColor = rawData.BaseColor,
BearingColor = rawData.BearingColor,
MuzzleColor = rawData.MuzzleColor
}
};
}
private static string BuildPriceText(int price, bool isGain)
{
int positivePrice = Mathf.Max(0, price);
if (isGain)
{
return $"+{positivePrice}";
}
return positivePrice.ToString();
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c9f949f5f7e07424abba9b57426d0fab
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,14 +1,13 @@
using System.Collections.Generic;
using GameFramework.Event;
using GeometryTD.CustomEvent;
using GeometryTD.CustomUtility;
using GeometryTD.Definition;
using UnityEngine;
using UnityGameFramework.Runtime;
namespace GeometryTD.UI
{
public class CombatFinishFormController : UIFormControllerCommonBase<CombatFinishFormContext, CombatFinishForm>
public partial class CombatFinishFormController : UIFormControllerCommonBase<CombatFinishFormContext, CombatFinishForm>
{
private CombatFinishFormUseCase _useCase;
private readonly Dictionary<long, ItemDescSeed> _itemDescSeedMap = new Dictionary<long, ItemDescSeed>();
@ -86,265 +85,6 @@ namespace GeometryTD.UI
_useCase = combatFinishFormUseCase;
}
private CombatFinishFormContext BuildContext(CombatFinishFormRawData rawData)
{
_itemDescSeedMap.Clear();
if (rawData == null)
{
return null;
}
return new CombatFinishFormContext
{
EnemyKilledText = rawData.DefeatedEnemyCount.ToString(),
GoldGainedText = rawData.GainedGold.ToString(),
RewardItems = BuildRewardItems(rawData.RewardInventory),
CanReturn = rawData.CanReturn
};
}
private RepoItemContext[] BuildRewardItems(BackpackInventoryData inventory)
{
if (inventory == null)
{
return System.Array.Empty<RepoItemContext>();
}
Dictionary<long, MuzzleCompItemData> muzzleMap = BuildComponentMap(inventory.MuzzleComponents);
Dictionary<long, BearingCompItemData> bearingMap = BuildComponentMap(inventory.BearingComponents);
Dictionary<long, BaseCompItemData> baseMap = BuildComponentMap(inventory.BaseComponents);
List<RepoItemContext> itemContexts = new List<RepoItemContext>();
if (inventory.Towers != null)
{
foreach (TowerItemData tower in inventory.Towers)
{
if (tower == null)
{
continue;
}
itemContexts.Add(new RepoItemContext
{
InstanceId = tower.InstanceId,
CanDrag = false,
EnduranceRate01 = ItemDescUtility.ResolveTowerEnduranceRate(tower, muzzleMap, bearingMap, baseMap),
ClickActionType = RepoItemClickActionType.OpenDetail,
ComponentSlotType = TowerCompSlotType.None,
IconAreaContext = BuildTowerIconContext(tower, muzzleMap, bearingMap, baseMap)
});
AddItemDescSeed(
tower.InstanceId,
tower.Name,
"Tower",
ItemDescUtility.BuildTowerDesc(tower, muzzleMap, bearingMap, baseMap) ?? string.Empty,
tower.Stats?.Tags,
tower.Stats?.TagRuntimes);
}
}
if (inventory.MuzzleComponents != null)
{
foreach (MuzzleCompItemData item in inventory.MuzzleComponents)
{
if (item == null)
{
continue;
}
itemContexts.Add(new RepoItemContext
{
InstanceId = item.InstanceId,
CanDrag = false,
EnduranceRate01 = ItemDescUtility.ResolveComponentEnduranceRate(item),
ClickActionType = RepoItemClickActionType.OpenDetail,
ComponentSlotType = TowerCompSlotType.Muzzle,
IconAreaContext = BuildIconAreaContext(item)
});
AddItemDescSeed(
item.InstanceId,
item.Name,
BuildComponentTypeText(item.SlotType),
ItemDescUtility.BuildMuzzleDesc(item) ?? string.Empty,
item.Tags,
null);
}
}
if (inventory.BearingComponents != null)
{
foreach (BearingCompItemData item in inventory.BearingComponents)
{
if (item == null)
{
continue;
}
itemContexts.Add(new RepoItemContext
{
InstanceId = item.InstanceId,
CanDrag = false,
EnduranceRate01 = ItemDescUtility.ResolveComponentEnduranceRate(item),
ClickActionType = RepoItemClickActionType.OpenDetail,
ComponentSlotType = TowerCompSlotType.Bearing,
IconAreaContext = BuildIconAreaContext(item)
});
AddItemDescSeed(
item.InstanceId,
item.Name,
BuildComponentTypeText(item.SlotType),
ItemDescUtility.BuildBearingDesc(item) ?? string.Empty,
item.Tags,
null);
}
}
if (inventory.BaseComponents != null)
{
foreach (BaseCompItemData item in inventory.BaseComponents)
{
if (item == null)
{
continue;
}
itemContexts.Add(new RepoItemContext
{
InstanceId = item.InstanceId,
CanDrag = false,
EnduranceRate01 = ItemDescUtility.ResolveComponentEnduranceRate(item),
ClickActionType = RepoItemClickActionType.OpenDetail,
ComponentSlotType = TowerCompSlotType.Base,
IconAreaContext = BuildIconAreaContext(item)
});
AddItemDescSeed(
item.InstanceId,
item.Name,
BuildComponentTypeText(item.SlotType),
ItemDescUtility.BuildBaseDesc(item) ?? string.Empty,
item.Tags,
null);
}
}
return itemContexts.ToArray();
}
private static TowerIconAreaContext BuildTowerIconContext(
TowerItemData tower,
IReadOnlyDictionary<long, MuzzleCompItemData> muzzleMap,
IReadOnlyDictionary<long, BearingCompItemData> bearingMap,
IReadOnlyDictionary<long, BaseCompItemData> baseMap)
{
if (tower == null)
{
return null;
}
return new TowerIconAreaContext
{
Rarity = tower.Rarity,
MuzzleColor = ResolveComponentColor(tower.MuzzleComponentInstanceId, muzzleMap),
BearingColor = ResolveComponentColor(tower.BearingComponentInstanceId, bearingMap),
BaseColor = ResolveComponentColor(tower.BaseComponentInstanceId, baseMap)
};
}
private static Color ResolveComponentColor<TComp>(long instanceId, IReadOnlyDictionary<long, TComp> componentMap)
where TComp : TowerCompItemData
{
if (instanceId > 0 && componentMap != null && componentMap.TryGetValue(instanceId, out TComp comp) &&
comp != null)
{
return IconColorGenerator.GenerateForComponent(comp);
}
return Color.white;
}
private void AddItemDescSeed(
long itemId,
string title,
string typeText,
string description,
TagType[] tags,
TagRuntimeData[] tagRuntimes)
{
if (itemId <= 0)
{
return;
}
_itemDescSeedMap[itemId] = new ItemDescSeed
{
Title = string.IsNullOrWhiteSpace(title) ? $"Item {itemId}" : title,
TypeText = typeText ?? string.Empty,
Description = description ?? string.Empty,
Tags = tags,
TagRuntimes = tagRuntimes
};
}
private static string BuildComponentTypeText(TowerCompSlotType slotType)
{
return slotType switch
{
TowerCompSlotType.Muzzle => "Muzzle Component",
TowerCompSlotType.Bearing => "Bearing Component",
TowerCompSlotType.Base => "Base Component",
TowerCompSlotType.Accessory => "Accessory",
_ => "Component"
};
}
private static Dictionary<long, TComp> BuildComponentMap<TComp>(IReadOnlyList<TComp> items)
where TComp : TowerCompItemData
{
Dictionary<long, TComp> map = new Dictionary<long, TComp>();
if (items == null)
{
return map;
}
foreach (TComp item in items)
{
if (item == null || item.InstanceId <= 0)
{
continue;
}
map[item.InstanceId] = item;
}
return map;
}
private static IconAreaContext BuildIconAreaContext(TowerCompItemData item)
{
if (item == null)
{
return new IconAreaContext
{
ComponentSlotType = TowerCompSlotType.None,
Rarity = RarityType.None,
Color = Color.white,
Icon = null
};
}
return new IconAreaContext
{
ComponentSlotType = item.SlotType,
Rarity = item.Rarity,
Color = IconColorGenerator.GenerateForComponent(item),
Icon = null
};
}
#region Event Handlers
private void OnCombatFinishReturnButtonClicked(object sender, GameEventArgs e)

View File

@ -5,7 +5,7 @@ using UnityGameFramework.Runtime;
namespace GeometryTD.UI
{
public class CombatInfoFormController : UIFormControllerCommonBase<CombatInfoFormContext, CombatInfoForm>
public partial class CombatInfoFormController : UIFormControllerCommonBase<CombatInfoFormContext, CombatInfoForm>
{
private CombatInfoFormUseCase _useCase;
@ -83,74 +83,6 @@ namespace GeometryTD.UI
_useCase = combatInfoFormUseCase;
}
private static CombatInfoFormContext BuildContext(CombatInfoFormRawData rawData)
{
if (rawData == null)
{
return null;
}
return new CombatInfoFormContext
{
LevelMetaText = BuildLevelMetaText(rawData.LevelThemeType, rawData.LevelId),
LevelPhaseText = BuildPhaseText(rawData.CurrentPhaseIndex, rawData.TotalPhaseCount),
CoinText = BuildCoinText(rawData.Coin),
BaseHpText = BuildBaseHpText(rawData.BaseHp, rawData.BaseHpMax),
EnemyHpRateText = BuildEnemyHpRateText(rawData.EnemyHpRateMultiplier),
CanPause = rawData.CanPause,
CanEnd = rawData.CanEnd
};
}
private static string BuildLevelMetaText(LevelThemeType themeType, int levelId)
{
if (levelId <= 0)
{
return "Map -";
}
return $"{themeType} Map.{levelId}";
}
private static string BuildPhaseText(int currentPhaseIndex, int totalPhaseCount)
{
int phaseIndex = currentPhaseIndex < 0 ? 0 : currentPhaseIndex;
if (totalPhaseCount <= 0)
{
return $"{phaseIndex}/?";
}
return $"Wave: {phaseIndex}/{totalPhaseCount}";
}
private static string BuildCoinText(int coin)
{
if (coin < 0)
{
return "Coin: -";
}
return $"Coin: {coin}";
}
private static string BuildBaseHpText(int baseHp, int baseHpMax)
{
if (baseHpMax <= 0)
{
return "\u57FA\u5730\uFF1A-";
}
int clampedHp = UnityEngine.Mathf.Clamp(baseHp, 0, baseHpMax);
int percent = UnityEngine.Mathf.RoundToInt((float)clampedHp / baseHpMax * 100f);
return $"\u57FA\u5730\uFF1A{percent}%";
}
private static string BuildEnemyHpRateText(int enemyHpRateMultiplier)
{
int resolvedMultiplier = enemyHpRateMultiplier > 0 ? enemyHpRateMultiplier : 1;
return $"\u96BE\u5EA6\uFF1A{resolvedMultiplier}x";
}
private void OnCombatPauseButtonClicked(object sender, GameEventArgs e)
{
if (!(sender is CombatInfoForm) || !(e is CombatPauseEventArgs))

View File

@ -6,7 +6,7 @@ using UnityGameFramework.Runtime;
namespace GeometryTD.UI
{
public class CombatSelectFormController : UIFormControllerCommonBase<CombatSelectFormContext, CombatSelectForm>
public partial class CombatSelectFormController : UIFormControllerCommonBase<CombatSelectFormContext, CombatSelectForm>
{
private CombatSelectFormUseCase _useCase;
@ -180,76 +180,6 @@ namespace GeometryTD.UI
RefreshCurrentUI();
}
private static CombatSelectFormContext BuildContext(CombatSelectFormRawData rawData)
{
if (rawData == null)
{
return null;
}
return new CombatSelectFormContext
{
IsVisible = rawData.IsVisible,
ScreenPosition = rawData.ScreenPosition,
ShowBuildArea = rawData.IsVisible && rawData.DisplayMode == CombatSelectDisplayMode.Build,
ShowFuncArea = rawData.IsVisible && rawData.DisplayMode == CombatSelectDisplayMode.Func,
BuildItems = BuildItemContexts(rawData.BuildItems),
UpgradeItem = BuildItemContext(rawData.UpgradeItem),
DestroyItem = BuildItemContext(rawData.DestroyItem)
};
}
private static TowerSelectItemContext[] BuildItemContexts(TowerSelectItemRawData[] itemRawData)
{
if (itemRawData == null || itemRawData.Length <= 0)
{
return System.Array.Empty<TowerSelectItemContext>();
}
TowerSelectItemContext[] contexts = new TowerSelectItemContext[itemRawData.Length];
for (int i = 0; i < itemRawData.Length; i++)
{
contexts[i] = BuildItemContext(itemRawData[i]);
}
return contexts;
}
private static TowerSelectItemContext BuildItemContext(TowerSelectItemRawData rawData)
{
if (rawData == null)
{
return null;
}
return new TowerSelectItemContext
{
Icon = rawData.Icon,
PriceText = BuildPriceText(rawData.Price, rawData.IsGain),
IsVisible = rawData.IsVisible,
IsInteractable = rawData.IsInteractable,
ActionType = rawData.ActionType,
ActionIndex = rawData.ActionIndex,
TowerIconAreaContext = new TowerIconAreaContext()
{
BaseColor = rawData.BaseColor,
BearingColor = rawData.BearingColor,
MuzzleColor = rawData.MuzzleColor
}
};
}
private static string BuildPriceText(int price, bool isGain)
{
int positivePrice = Mathf.Max(0, price);
if (isGain)
{
return $"+{positivePrice}";
}
return positivePrice.ToString();
}
private void OnSelectItemClicked(object sender, GameEventArgs e)
{
if (!(e is CombatSelectItemClickEventArgs args))

View File

@ -0,0 +1,41 @@
using GeometryTD.Definition;
using GeometryTD.Procedure;
namespace GeometryTD.UI
{
public sealed partial class NodeMapFormController
{
private static NodeMapFormContext BuildContext(NodeMapFormRawData rawData)
{
NodeItemContext[] nodeItemContexts = System.Array.Empty<NodeItemContext>();
if (rawData?.Nodes != null && rawData.Nodes.Count > 0)
{
nodeItemContexts = new NodeItemContext[rawData.Nodes.Count];
for (int i = 0; i < rawData.Nodes.Count; i++)
{
NodeMapNodeRawData node = rawData.Nodes[i];
nodeItemContexts[i] = new NodeItemContext
{
NodeId = node?.NodeId ?? 0,
SequenceIndex = node?.SequenceIndex ?? i,
NodeType = node?.NodeType ?? RunNodeType.None,
IsLocked = node != null && node.Status == RunNodeStatus.Locked,
IsCurrent = node != null && node.IsCurrentNode,
IsCompleted = node != null && node.Status == RunNodeStatus.Completed,
IsException = node != null && node.Status == RunNodeStatus.Exception,
CanClick = node != null && node.CanEnter
};
}
}
return new NodeMapFormContext
{
Title = rawData?.Title ?? "节点地图",
ProgressText = rawData?.ProgressText ?? "0 / 0",
CurrentNodeText = rawData?.CurrentNodeText ?? "当前节点: 无",
IsRunCompleted = rawData != null && rawData.IsRunCompleted,
NodeItems = nodeItemContexts
};
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: cf16e881b2eeae447b3ff2b36e4f6753
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -7,7 +7,7 @@ using UnityGameFramework.Runtime;
namespace GeometryTD.UI
{
public sealed class NodeMapFormController : UIFormControllerCommonBase<NodeMapFormContext, NodeMapForm>
public sealed partial class NodeMapFormController : UIFormControllerCommonBase<NodeMapFormContext, NodeMapForm>
{
private NodeMapFormUseCase _useCase;
@ -126,37 +126,5 @@ namespace GeometryTD.UI
return false;
}
private static NodeMapFormContext BuildContext(NodeMapFormRawData rawData)
{
NodeItemContext[] nodeItemContexts = System.Array.Empty<NodeItemContext>();
if (rawData?.Nodes != null && rawData.Nodes.Count > 0)
{
nodeItemContexts = new NodeItemContext[rawData.Nodes.Count];
for (int i = 0; i < rawData.Nodes.Count; i++)
{
NodeMapNodeRawData node = rawData.Nodes[i];
nodeItemContexts[i] = new NodeItemContext
{
NodeId = node?.NodeId ?? 0,
SequenceIndex = node?.SequenceIndex ?? i,
NodeType = node?.NodeType ?? RunNodeType.None,
IsLocked = node != null && node.Status == RunNodeStatus.Locked,
IsCurrent = node != null && node.IsCurrentNode,
IsCompleted = node != null && node.Status == RunNodeStatus.Completed,
IsException = node != null && node.Status == RunNodeStatus.Exception,
CanClick = node != null && node.CanEnter
};
}
}
return new NodeMapFormContext
{
Title = rawData?.Title ?? "节点地图",
ProgressText = rawData?.ProgressText ?? "0 / 0",
CurrentNodeText = rawData?.CurrentNodeText ?? "当前节点: 无",
IsRunCompleted = rawData != null && rawData.IsRunCompleted,
NodeItems = nodeItemContexts
};
}
}
}

View File

@ -2,6 +2,7 @@ using System.Collections.Generic;
using GeometryTD.CustomEvent;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace GeometryTD.UI
{
@ -15,6 +16,12 @@ namespace GeometryTD.UI
[SerializeField] private TMP_Text _descriptionText;
[SerializeField] private RectTransform _descriptionScrollView;
[SerializeField] private RectTransform _descriptionContent;
[SerializeField] private float _maxDescriptionViewportHeight = 0f;
[SerializeField] private Transform _tagItemParent;
[SerializeField] private TagItem _tagItemTemplate;
@ -63,6 +70,8 @@ namespace GeometryTD.UI
_descriptionText.text = context.Description ?? string.Empty;
}
ResizeDescriptionArea();
RefreshTags(context.Tags);
}
@ -90,6 +99,8 @@ namespace GeometryTD.UI
_descriptionText.text = string.Empty;
}
ResetDescriptionScroll();
ClearTags();
}
@ -133,6 +144,54 @@ namespace GeometryTD.UI
}
}
private void ResizeDescriptionArea()
{
if (_descriptionText == null)
{
return;
}
_descriptionText.ForceMeshUpdate();
float descriptionHeight = Mathf.Max(0f, _descriptionText.preferredHeight);
SetRectHeight(_descriptionText.rectTransform, descriptionHeight);
if (_descriptionContent != null)
{
SetRectHeight(_descriptionContent, descriptionHeight);
}
if (_descriptionScrollView != null)
{
float viewportHeight = _maxDescriptionViewportHeight > 0f
? Mathf.Min(descriptionHeight, _maxDescriptionViewportHeight)
: descriptionHeight;
SetRectHeight(_descriptionScrollView, viewportHeight);
}
ResetDescriptionScroll();
}
private void ResetDescriptionScroll()
{
if (_descriptionScrollView != null &&
_descriptionScrollView.TryGetComponent(out ScrollRect scrollRect))
{
scrollRect.verticalNormalizedPosition = 1f;
}
}
private static void SetRectHeight(RectTransform rectTransform, float height)
{
if (rectTransform == null)
{
return;
}
Vector2 size = rectTransform.sizeDelta;
size.y = height;
rectTransform.sizeDelta = size;
}
private TagItem ResolveTagTemplate()
{
if (_tagItemTemplate != null)

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 536ee8a3207a3fb409592f249663f9c8
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 2ec97872405fc20419b0f156bb6c7365
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,59 @@
using GeometryTD.CustomUtility;
namespace GeometryTD.UI
{
public sealed partial class ShopFormController
{
private static ShopFormContext BuildContext(ShopFormRawData rawData)
{
GoodsItemContext[] goodsItemContexts = System.Array.Empty<GoodsItemContext>();
if (rawData?.GoodsItems != null && rawData.GoodsItems.Count > 0)
{
goodsItemContexts = new GoodsItemContext[rawData.GoodsItems.Count];
for (int i = 0; i < rawData.GoodsItems.Count; i++)
{
GoodsItemRawData item = rawData.GoodsItems[i];
goodsItemContexts[i] = new GoodsItemContext
{
GoodsIndex = item?.GoodsIndex ?? i,
Title = item?.Title ?? string.Empty,
TypeText = item?.TypeText ?? string.Empty,
Description = BuildDescription(item),
TagTexts = BuildTagTexts(item),
PurchaseButtonText = item != null && item.IsPurchased ? "已购买" : $"购买 {item?.Price ?? 0}",
CanPurchase = item != null && !item.IsPurchased,
IconAreaContext = item?.IconAreaContext
};
}
}
return new ShopFormContext
{
GoldText = $"金币: {rawData?.PlayerGold ?? 0}",
GoodsItems = goodsItemContexts
};
}
private static string BuildDescription(GoodsItemRawData rawData)
{
string baseDescription = rawData?.Description ?? string.Empty;
string tagDescription = TagDisplayUtility.BuildTagDescriptionText(rawData?.Tags);
if (string.IsNullOrWhiteSpace(tagDescription))
{
return baseDescription;
}
if (string.IsNullOrWhiteSpace(baseDescription))
{
return tagDescription;
}
return $"{baseDescription}\n{tagDescription}";
}
private static string[] BuildTagTexts(GoodsItemRawData rawData)
{
return TagDisplayUtility.BuildTagTexts(rawData?.Tags);
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 3da82624de00938408d9de7b74f09459
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,13 +1,12 @@
using GeometryTD.CustomEvent;
using GeometryTD.Definition;
using GameFramework.Event;
using GeometryTD.CustomUtility;
using UnityEngine;
using UnityGameFramework.Runtime;
namespace GeometryTD.UI
{
public sealed class ShopFormController : UIFormControllerCommonBase<ShopFormContext, ShopForm>
public sealed partial class ShopFormController : UIFormControllerCommonBase<ShopFormContext, ShopForm>
{
private ShopFormUseCase _useCase;
@ -134,56 +133,5 @@ namespace GeometryTD.UI
return false;
}
private static ShopFormContext BuildContext(ShopFormRawData rawData)
{
GoodsItemContext[] goodsItemContexts = System.Array.Empty<GoodsItemContext>();
if (rawData?.GoodsItems != null && rawData.GoodsItems.Count > 0)
{
goodsItemContexts = new GoodsItemContext[rawData.GoodsItems.Count];
for (int i = 0; i < rawData.GoodsItems.Count; i++)
{
GoodsItemRawData item = rawData.GoodsItems[i];
goodsItemContexts[i] = new GoodsItemContext
{
GoodsIndex = item?.GoodsIndex ?? i,
Title = item?.Title ?? string.Empty,
TypeText = item?.TypeText ?? string.Empty,
Description = BuildDescription(item),
TagTexts = BuildTagTexts(item),
PurchaseButtonText = item != null && item.IsPurchased ? "已购买" : $"购买 {item?.Price ?? 0}",
CanPurchase = item != null && !item.IsPurchased,
IconAreaContext = item?.IconAreaContext
};
}
}
return new ShopFormContext
{
GoldText = $"金币: {rawData?.PlayerGold ?? 0}",
GoodsItems = goodsItemContexts
};
}
private static string BuildDescription(GoodsItemRawData rawData)
{
string baseDescription = rawData?.Description ?? string.Empty;
string tagDescription = TagDisplayUtility.BuildTagDescriptionText(rawData?.Tags);
if (string.IsNullOrWhiteSpace(tagDescription))
{
return baseDescription;
}
if (string.IsNullOrWhiteSpace(baseDescription))
{
return tagDescription;
}
return $"{baseDescription}\n{tagDescription}";
}
private static string[] BuildTagTexts(GoodsItemRawData rawData)
{
return TagDisplayUtility.BuildTagTexts(rawData?.Tags);
}
}
}

View File

@ -1,6 +1,7 @@
using GeometryTD.CustomEvent;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace GeometryTD.UI
{
@ -14,6 +15,12 @@ namespace GeometryTD.UI
[SerializeField] private TMP_Text _descriptionText;
[SerializeField] private RectTransform _descriptionScrollView;
[SerializeField] private RectTransform _descriptionContent;
[SerializeField] private float _maxDescriptionViewportHeight = 0f;
[SerializeField] private Transform _tagsParent;
[SerializeField] private TMP_Text _purchaseButtonText;
@ -46,6 +53,8 @@ namespace GeometryTD.UI
_descriptionText.text = context?.Description ?? string.Empty;
}
ResizeDescriptionArea();
if (_purchaseButtonText != null)
{
_purchaseButtonText.text = context?.PurchaseButtonText ?? string.Empty;
@ -75,6 +84,8 @@ namespace GeometryTD.UI
_descriptionText.text = string.Empty;
}
ResetDescriptionScroll();
if (_purchaseButtonText != null)
{
_purchaseButtonText.text = string.Empty;
@ -120,6 +131,54 @@ namespace GeometryTD.UI
}
}
private void ResizeDescriptionArea()
{
if (_descriptionText == null)
{
return;
}
_descriptionText.ForceMeshUpdate();
float descriptionHeight = Mathf.Max(0f, _descriptionText.preferredHeight);
SetRectHeight(_descriptionText.rectTransform, descriptionHeight);
if (_descriptionContent != null)
{
SetRectHeight(_descriptionContent, descriptionHeight);
}
if (_descriptionScrollView != null)
{
float viewportHeight = _maxDescriptionViewportHeight > 0f
? Mathf.Min(descriptionHeight, _maxDescriptionViewportHeight)
: descriptionHeight;
SetRectHeight(_descriptionScrollView, viewportHeight);
}
ResetDescriptionScroll();
}
private void ResetDescriptionScroll()
{
if (_descriptionScrollView != null &&
_descriptionScrollView.TryGetComponent(out ScrollRect scrollRect))
{
scrollRect.verticalNormalizedPosition = 1f;
}
}
private static void SetRectHeight(RectTransform rectTransform, float height)
{
if (rectTransform == null)
{
return;
}
Vector2 size = rectTransform.sizeDelta;
size.y = height;
rectTransform.sizeDelta = size;
}
private void ClearTags()
{
if (_tagsParent == null)

View File

@ -521,6 +521,21 @@ PrefabInstance:
serializedVersion: 3
m_TransformParent: {fileID: 8936164671788401612}
m_Modifications:
- target: {fileID: 328260851586869610, guid: 53c96587088713749972878933b623f4,
type: 3}
propertyPath: m_AnchorMax.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 328260851586869610, guid: 53c96587088713749972878933b623f4,
type: 3}
propertyPath: m_AnchorMin.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 328260851586869610, guid: 53c96587088713749972878933b623f4,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 180
objectReference: {fileID: 0}
- target: {fileID: 1568602919960830097, guid: 53c96587088713749972878933b623f4,
type: 3}
propertyPath: m_Pivot.x
@ -621,6 +636,11 @@ PrefabInstance:
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2135999847979709218, guid: 53c96587088713749972878933b623f4,
type: 3}
propertyPath: m_AnchoredPosition.y
value: -0.000061035156
objectReference: {fileID: 0}
- target: {fileID: 3072890538777882148, guid: 53c96587088713749972878933b623f4,
type: 3}
propertyPath: m_Name
@ -636,6 +656,31 @@ PrefabInstance:
propertyPath: _onHover.m_PersistentCalls.m_Calls.Array.data[0].m_Target
value:
objectReference: {fileID: 3942407105513264856}
- target: {fileID: 7569228790803904920, guid: 53c96587088713749972878933b623f4,
type: 3}
propertyPath: m_Pivot.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7569228790803904920, guid: 53c96587088713749972878933b623f4,
type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7569228790803904920, guid: 53c96587088713749972878933b623f4,
type: 3}
propertyPath: m_AnchorMin.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7569228790803904920, guid: 53c96587088713749972878933b623f4,
type: 3}
propertyPath: m_SizeDelta.y
value: 380
objectReference: {fileID: 0}
- target: {fileID: 7569228790803904920, guid: 53c96587088713749972878933b623f4,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
@ -955,6 +1000,11 @@ PrefabInstance:
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2135999847979709218, guid: 53c96587088713749972878933b623f4,
type: 3}
propertyPath: m_AnchoredPosition.y
value: -0.000061035156
objectReference: {fileID: 0}
- target: {fileID: 3072890538777882148, guid: 53c96587088713749972878933b623f4,
type: 3}
propertyPath: m_Name
@ -970,6 +1020,11 @@ PrefabInstance:
propertyPath: _onHover.m_PersistentCalls.m_Calls.Array.data[0].m_Target
value:
objectReference: {fileID: 3942407105513264856}
- target: {fileID: 7569228790803904920, guid: 53c96587088713749972878933b623f4,
type: 3}
propertyPath: m_AnchoredPosition.y
value: -0.000061035156
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
@ -1101,6 +1156,11 @@ PrefabInstance:
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2135999847979709218, guid: 53c96587088713749972878933b623f4,
type: 3}
propertyPath: m_AnchoredPosition.y
value: -0.000061035156
objectReference: {fileID: 0}
- target: {fileID: 3072890538777882148, guid: 53c96587088713749972878933b623f4,
type: 3}
propertyPath: m_Name
@ -1116,6 +1176,11 @@ PrefabInstance:
propertyPath: _onHover.m_PersistentCalls.m_Calls.Array.data[0].m_Target
value:
objectReference: {fileID: 3942407105513264856}
- target: {fileID: 7569228790803904920, guid: 53c96587088713749972878933b623f4,
type: 3}
propertyPath: m_AnchoredPosition.y
value: -0.000061035156
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []

File diff suppressed because it is too large Load Diff

View File

@ -93,6 +93,9 @@ MonoBehaviour:
_titleText: {fileID: 8198028867451079023}
_typeText: {fileID: 1859538258681759610}
_descriptionText: {fileID: 362507204555380267}
_descriptionScrollView: {fileID: 1623445999344865685}
_descriptionContent: {fileID: 8200821168603763492}
_maxDescriptionViewportHeight: 440
_tagsParent: {fileID: 2824363281443248115}
_purchaseButtonText: {fileID: 3342147861170219536}
_tagItemPrefab: {fileID: 2724990199440728093, guid: b8cf55567ed692c439cc016211a19ded,
@ -128,12 +131,12 @@ RectTransform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 669693094614527628}
m_Father: {fileID: 8200821168603763492}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 1}
m_AnchorMax: {x: 0.5, y: 1}
m_AnchoredPosition: {x: 2.5, y: -230}
m_SizeDelta: {x: 560, y: 500}
m_AnchoredPosition: {x: 8.5, y: 0.000030518}
m_SizeDelta: {x: 560, y: 440}
m_Pivot: {x: 0.5, y: 1}
--- !u!222 &4939688013048200127
CanvasRenderer:
@ -233,6 +236,209 @@ MonoBehaviour:
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!1 &1717092225218027462
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1623445999344865685}
- component: {fileID: 4875638165924561416}
- component: {fileID: 6988587329621731379}
m_Layer: 5
m_Name: Scroll View
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1623445999344865685
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1717092225218027462}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4357219944141612153}
- {fileID: 5473835006089656109}
m_Father: {fileID: 669693094614527628}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 1}
m_AnchorMax: {x: 0.5, y: 1}
m_AnchoredPosition: {x: 0, y: -230}
m_SizeDelta: {x: 560, y: 440}
m_Pivot: {x: 0.5, y: 1}
--- !u!222 &4875638165924561416
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1717092225218027462}
m_CullTransparentMesh: 1
--- !u!114 &6988587329621731379
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1717092225218027462}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Content: {fileID: 8200821168603763492}
m_Horizontal: 0
m_Vertical: 1
m_MovementType: 2
m_Elasticity: 0.1
m_Inertia: 1
m_DecelerationRate: 0.135
m_ScrollSensitivity: 1
m_Viewport: {fileID: 4357219944141612153}
m_HorizontalScrollbar: {fileID: 0}
m_VerticalScrollbar: {fileID: 3209547908225834405}
m_HorizontalScrollbarVisibility: 2
m_VerticalScrollbarVisibility: 2
m_HorizontalScrollbarSpacing: -3
m_VerticalScrollbarSpacing: -3
m_OnValueChanged:
m_PersistentCalls:
m_Calls: []
--- !u!1 &4841225104928858325
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8200821168603763492}
m_Layer: 5
m_Name: Content
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8200821168603763492
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4841225104928858325}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4208371627915977171}
m_Father: {fileID: 4357219944141612153}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0.000030517578}
m_SizeDelta: {x: 0, y: 440}
m_Pivot: {x: 0, y: 1}
--- !u!1 &5206865315162605027
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4357219944141612153}
- component: {fileID: 9138772976435207550}
- component: {fileID: 5479636879314996321}
- component: {fileID: 8937852424263169150}
m_Layer: 5
m_Name: Viewport
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &4357219944141612153
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5206865315162605027}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 8200821168603763492}
m_Father: {fileID: 1623445999344865685}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 1}
--- !u!222 &9138772976435207550
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5206865315162605027}
m_CullTransparentMesh: 1
--- !u!114 &5479636879314996321
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5206865315162605027}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &8937852424263169150
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5206865315162605027}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3}
m_Name:
m_EditorClassIdentifier:
m_ShowMaskGraphic: 0
--- !u!1 &5258765667942675750
GameObject:
m_ObjectHideFlags: 0
@ -267,7 +473,7 @@ RectTransform:
- {fileID: 2732971145639930164}
- {fileID: 2007177356427953005}
- {fileID: 6823666478257055882}
- {fileID: 4208371627915977171}
- {fileID: 1623445999344865685}
- {fileID: 2824363281443248115}
- {fileID: 761798453953883578}
m_Father: {fileID: 3529943345771897466}
@ -324,8 +530,8 @@ CanvasGroup:
m_GameObject: {fileID: 5258765667942675750}
m_Enabled: 1
m_Alpha: 1
m_Interactable: 0
m_BlocksRaycasts: 0
m_Interactable: 1
m_BlocksRaycasts: 1
m_IgnoreParentGroups: 0
--- !u!1 &6254501099252671570
GameObject:
@ -495,7 +701,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0}
m_AnchorMax: {x: 0.5, y: 0}
m_AnchoredPosition: {x: 2.5, y: 180}
m_AnchoredPosition: {x: 0, y: 150}
m_SizeDelta: {x: 560, y: 50}
m_Pivot: {x: 0.5, y: 0}
--- !u!114 &1210461849002814200
@ -659,6 +865,243 @@ MonoBehaviour:
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!1 &7730808720655973059
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3542592529083536431}
- component: {fileID: 2224302728628815985}
- component: {fileID: 253668368122446138}
m_Layer: 5
m_Name: Handle
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &3542592529083536431
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7730808720655973059}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1213863780982472230}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 20, y: 20}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &2224302728628815985
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7730808720655973059}
m_CullTransparentMesh: 1
--- !u!114 &253668368122446138
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7730808720655973059}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &8535596000860601802
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5473835006089656109}
- component: {fileID: 7714131173611425256}
- component: {fileID: 2113744810368311340}
- component: {fileID: 3209547908225834405}
m_Layer: 5
m_Name: Scrollbar Vertical
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &5473835006089656109
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8535596000860601802}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1213863780982472230}
m_Father: {fileID: 1623445999344865685}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 20, y: -17}
m_Pivot: {x: 1, y: 1}
--- !u!222 &7714131173611425256
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8535596000860601802}
m_CullTransparentMesh: 1
--- !u!114 &2113744810368311340
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8535596000860601802}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &3209547908225834405
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8535596000860601802}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
m_WrapAround: 0
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_SelectedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 253668368122446138}
m_HandleRect: {fileID: 3542592529083536431}
m_Direction: 2
m_Value: 0
m_Size: 0.00000006935813
m_NumberOfSteps: 0
m_OnValueChanged:
m_PersistentCalls:
m_Calls: []
--- !u!1 &9097090765934084465
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1213863780982472230}
m_Layer: 5
m_Name: Sliding Area
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1213863780982472230
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9097090765934084465}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 3542592529083536431}
m_Father: {fileID: 5473835006089656109}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: -20, y: -20}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1001 &3802995170578049869
PrefabInstance:
m_ObjectHideFlags: 0
@ -751,7 +1194,7 @@ PrefabInstance:
- target: {fileID: 4491355866364659447, guid: 2307f223279813546a43b221ddd496cc,
type: 3}
propertyPath: m_AnchorMax.y
value: 0.5
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4491355866364659447, guid: 2307f223279813546a43b221ddd496cc,
type: 3}
@ -761,7 +1204,7 @@ PrefabInstance:
- target: {fileID: 4491355866364659447, guid: 2307f223279813546a43b221ddd496cc,
type: 3}
propertyPath: m_AnchorMin.y
value: 0.5
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4491355866364659447, guid: 2307f223279813546a43b221ddd496cc,
type: 3}
@ -811,12 +1254,12 @@ PrefabInstance:
- target: {fileID: 4491355866364659447, guid: 2307f223279813546a43b221ddd496cc,
type: 3}
propertyPath: m_AnchoredPosition.x
value: 2.5
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4491355866364659447, guid: 2307f223279813546a43b221ddd496cc,
type: 3}
propertyPath: m_AnchoredPosition.y
value: -436.63
value: 80
objectReference: {fileID: 0}
- target: {fileID: 4491355866364659447, guid: 2307f223279813546a43b221ddd496cc,
type: 3}

View File

@ -1,5 +1,203 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &798571884857832189
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2135999847979709218}
m_Layer: 5
m_Name: Content
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &2135999847979709218
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 798571884857832189}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 7569228790803904920}
m_Father: {fileID: 4574618142786796821}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: -0.000061035156, y: 0}
m_SizeDelta: {x: 0, y: 400}
m_Pivot: {x: 0, y: 1}
--- !u!1 &832415029599330181
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4681790520128805157}
m_Layer: 5
m_Name: Sliding Area
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &4681790520128805157
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 832415029599330181}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4487165533947487003}
m_Father: {fileID: 8191356882730906451}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: -0.000061035156}
m_SizeDelta: {x: -20, y: -20}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &1991135879461382533
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8191356882730906451}
- component: {fileID: 8316193033481493225}
- component: {fileID: 2437307434563128240}
- component: {fileID: 9129882266939850721}
m_Layer: 5
m_Name: Scrollbar Vertical
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8191356882730906451
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1991135879461382533}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4681790520128805157}
m_Father: {fileID: 4684471753607288095}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: -0.000061035156, y: 0}
m_SizeDelta: {x: 20, y: -17}
m_Pivot: {x: 1, y: 1}
--- !u!222 &8316193033481493225
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1991135879461382533}
m_CullTransparentMesh: 1
--- !u!114 &2437307434563128240
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1991135879461382533}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &9129882266939850721
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1991135879461382533}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
m_WrapAround: 0
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_SelectedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 1210226832561403869}
m_HandleRect: {fileID: 4487165533947487003}
m_Direction: 2
m_Value: 1
m_Size: 0.99999994
m_NumberOfSteps: 0
m_OnValueChanged:
m_PersistentCalls:
m_Calls: []
--- !u!1 &2039268993833529549
GameObject:
m_ObjectHideFlags: 0
@ -135,6 +333,81 @@ MonoBehaviour:
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!1 &2365965564356685901
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4487165533947487003}
- component: {fileID: 9169400193667734616}
- component: {fileID: 1210226832561403869}
m_Layer: 5
m_Name: Handle
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &4487165533947487003
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2365965564356685901}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4681790520128805157}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: -0.000061035156}
m_SizeDelta: {x: 20, y: 20}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &9169400193667734616
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2365965564356685901}
m_CullTransparentMesh: 1
--- !u!114 &1210226832561403869
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2365965564356685901}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &3072890538777882148
GameObject:
m_ObjectHideFlags: 0
@ -168,7 +441,7 @@ RectTransform:
- {fileID: 8524767648617461388}
- {fileID: 7840400519825908318}
- {fileID: 7507997495033505694}
- {fileID: 7569228790803904920}
- {fileID: 4684471753607288095}
- {fileID: 328260851586869610}
- {fileID: 5510907989210912261}
m_Father: {fileID: 0}
@ -194,6 +467,9 @@ MonoBehaviour:
_titleText: {fileID: 8208316091986530181}
_typeText: {fileID: 1750581065802632959}
_descriptionText: {fileID: 498292184531558701}
_descriptionScrollView: {fileID: 4684471753607288095}
_descriptionContent: {fileID: 2135999847979709218}
_maxDescriptionViewportHeight: 400
_tagItemParent: {fileID: 328260851586869610}
_tagItemTemplate: {fileID: 4772206702483514911, guid: b8cf55567ed692c439cc016211a19ded,
type: 3}
@ -222,17 +498,17 @@ RectTransform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3487172905367850696}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1568602919960830097}
m_Father: {fileID: 2135999847979709218}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 30}
m_SizeDelta: {x: 520, y: 350}
m_AnchoredPosition: {x: 8.5, y: -0.000030517578}
m_SizeDelta: {x: 520, y: 400}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8740690420287903044
CanvasRenderer:
@ -290,8 +566,8 @@ MonoBehaviour:
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 40
m_fontSizeBase: 40
m_fontSize: 36
m_fontSizeBase: 36
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
@ -407,6 +683,83 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &7129141145837022417
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4684471753607288095}
- component: {fileID: 1012901178148582261}
- component: {fileID: 1234419349286507985}
m_Layer: 5
m_Name: Scroll View
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &4684471753607288095
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7129141145837022417}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4574618142786796821}
- {fileID: 8191356882730906451}
m_Father: {fileID: 1568602919960830097}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 1}
m_AnchorMax: {x: 0.5, y: 1}
m_AnchoredPosition: {x: -0.00018310547, y: -194.99995}
m_SizeDelta: {x: 520, y: 400}
m_Pivot: {x: 0.5, y: 1}
--- !u!222 &1012901178148582261
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7129141145837022417}
m_CullTransparentMesh: 1
--- !u!114 &1234419349286507985
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7129141145837022417}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Content: {fileID: 2135999847979709218}
m_Horizontal: 0
m_Vertical: 1
m_MovementType: 2
m_Elasticity: 0.1
m_Inertia: 1
m_DecelerationRate: 0.135
m_ScrollSensitivity: 1
m_Viewport: {fileID: 4574618142786796821}
m_HorizontalScrollbar: {fileID: 0}
m_VerticalScrollbar: {fileID: 9129882266939850721}
m_HorizontalScrollbarVisibility: 2
m_VerticalScrollbarVisibility: 2
m_HorizontalScrollbarSpacing: -3
m_VerticalScrollbarSpacing: -3
m_OnValueChanged:
m_PersistentCalls:
m_Calls: []
--- !u!1 &7266207868424449694
GameObject:
m_ObjectHideFlags: 0
@ -542,6 +895,96 @@ MonoBehaviour:
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!1 &8253570588800345149
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4574618142786796821}
- component: {fileID: 136343858414540681}
- component: {fileID: 958185360661645739}
- component: {fileID: 7012387801630057649}
m_Layer: 5
m_Name: Viewport
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &4574618142786796821
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8253570588800345149}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 2135999847979709218}
m_Father: {fileID: 4684471753607288095}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 1}
--- !u!222 &136343858414540681
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8253570588800345149}
m_CullTransparentMesh: 1
--- !u!114 &958185360661645739
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8253570588800345149}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &7012387801630057649
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8253570588800345149}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3}
m_Name:
m_EditorClassIdentifier:
m_ShowMaskGraphic: 0
--- !u!1 &8566141322218864134
GameObject:
m_ObjectHideFlags: 0
@ -574,9 +1017,9 @@ RectTransform:
m_Children: []
m_Father: {fileID: 1568602919960830097}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: -200}
m_AnchorMin: {x: 0.5, y: 0}
m_AnchorMax: {x: 0.5, y: 0}
m_AnchoredPosition: {x: 0, y: 160}
m_SizeDelta: {x: 520, y: 50}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &2485431722677967612
@ -875,7 +1318,7 @@ PrefabInstance:
- target: {fileID: 4491355866364659447, guid: 2307f223279813546a43b221ddd496cc,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 50
value: 30
objectReference: {fileID: 0}
- target: {fileID: 4491355866364659447, guid: 2307f223279813546a43b221ddd496cc,
type: 3}

View File

@ -194,10 +194,10 @@
- `Assets/GameMain/Scripts/CustomComponent/InventoryGenerationComponent.cs`
- `Assets/GameMain/Scripts/CustomComponent/TagRegistryComponent.cs`
- `Assets/GameMain/Scripts/Definition/InventoryGeneration/ComponentItemFactory.cs`
- `Assets/GameMain/Scripts/Definition/InventoryGeneration/ShopGoodsBuilder.cs`
- `Assets/GameMain/Scripts/Definition/InventoryGeneration/DropPoolRoller.cs`
- `Assets/GameMain/Scripts/Definition/InventoryGeneration/RewardCandidateBuilder.cs`
- `Assets/GameMain/Scripts/Factory/ComponentItemFactory.cs`
- `Assets/GameMain/Scripts/CustomComponent/ShopGoodsBuilder.cs`
- `Assets/GameMain/Scripts/CustomComponent/DropPoolRoller.cs`
- `Assets/GameMain/Scripts/CustomComponent/RewardCandidateBuilder.cs`
- `Assets/GameMain/Scripts/Definition/Combat/Settlement/CombatSettlementCalculator.cs`
- `Assets/GameMain/Scripts/Definition/Combat/Settlement/CombatSettlementCommitter.cs`