添加 ShopForm 下的 StatForm,展示玩家属性
This commit is contained in:
@@ -0,0 +1,109 @@
|
|||||||
|
---
|
||||||
|
name: code-hygiene
|
||||||
|
description: >-
|
||||||
|
Inspect and clean up code in the Seek-Battle-Evacuate (SBE) project according to AGENTS.md
|
||||||
|
null-checking rules, error handling specifications, and anti-defensive programming guidelines.
|
||||||
|
Use this skill whenever the user asks to format code per AGENTS.md, clean up redundant null checks,
|
||||||
|
remove over-defensive fallbacks, or review code hygiene.
|
||||||
|
---
|
||||||
|
|
||||||
|
# SBE Code Hygiene & Defensive Cleanup
|
||||||
|
|
||||||
|
本技能用于规范 SBE 项目中的 C# 代码质量,消除过度防御(Over-Defensive Programming)、冗余判空与静默吞错,严格对齐 `AGENTS.md` 规范与敏捷“Fail Fast”(快速失败)原则。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 一、三项核心红线(AGENTS.md 必须遵守)
|
||||||
|
|
||||||
|
1. **声明处已初始化的变量,之后绝对不判空**
|
||||||
|
- 坏:字段或局部变量已有 `= new List<T>()` / `= new Dictionary<...>()`,后续还写 `if (_list != null)`。
|
||||||
|
- 好:直接使用 `_list.Add(...)`、`_list.Clear()`。
|
||||||
|
|
||||||
|
2. **严禁静态兜底与静默回退(Fail Fast 原则)**
|
||||||
|
- 坏:找不到数据、缺少配置或解析异常时,返回硬编码默认值(如 `global != null ? global.Time : 250` 或 `if (cfg == null) return 10;`)。
|
||||||
|
- 好:异常路径直接 `Log.Error(...)` 报错并中断执行(`return` / 抛异常),绝不用伪造数据让程序带病运行。
|
||||||
|
|
||||||
|
3. **UI 序列化字段与 View 自动绑定字段不做判空**
|
||||||
|
- 坏:`if (View != null && View.sortButton != null)`、`[SerializeField] private Button _btn; ... if (_btn != null)`。
|
||||||
|
- 好:默认信任 Inspector 和 `UIAssetsTools` 自动绑定。若没绑定本应报错暴露,不加空防御掩盖。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 二、六项常见“没必要”的过度防御与坏味道
|
||||||
|
|
||||||
|
在 Unity / UGF / C# 实际开发中,以下写法通常是冗余、降低代码可读性且增加维护负担的:
|
||||||
|
|
||||||
|
### 1. 集合遍历前的非空/长度双重检查
|
||||||
|
- **没必要**:
|
||||||
|
```csharp
|
||||||
|
if (list != null && list.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (var item in list) { ... }
|
||||||
|
}
|
||||||
|
```
|
||||||
|
- **原则**:若列表规范为非空对象(即使为空也是包含 0 个元素的空列表),`foreach` 会自动直接跳过,根本无需任何 `if` 守卫:
|
||||||
|
```csharp
|
||||||
|
foreach (var item in list) { ... }
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. LINQ 与内建构造返回值的非空检查
|
||||||
|
- **没必要**:
|
||||||
|
```csharp
|
||||||
|
var results = items.Where(x => x.Active).ToList();
|
||||||
|
if (results != null) { ... } // ToList() 永远返回新 List 实例,永不为 null
|
||||||
|
```
|
||||||
|
- **原则**:直接使用 LINQ 投影/转换结果。
|
||||||
|
|
||||||
|
### 3. 内部私有辅助方法的层层重复防御
|
||||||
|
- **没必要**:公有入口方法已经做了入参断言/校验,拆分出来的内部私有方法 `private void ApplyCore(Item item)` 每一层都再写一遍 `if (item == null) return;`。
|
||||||
|
- **原则**:私有方法属于内部信任边界,保持干净直白,将校验集中在业务入口。
|
||||||
|
|
||||||
|
### 4. 字典的双重查找(Double Lookup)
|
||||||
|
- **没必要**:
|
||||||
|
```csharp
|
||||||
|
if (_dict.ContainsKey(key))
|
||||||
|
{
|
||||||
|
var val = _dict[key];
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
- **原则**:统一使用 `TryGetValue`,减少一次哈希哈希计算与冗余判断:
|
||||||
|
```csharp
|
||||||
|
if (_dict.TryGetValue(key, out var val))
|
||||||
|
{
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. 静默吞异常的空 Try-Catch
|
||||||
|
- **没必要**:
|
||||||
|
```csharp
|
||||||
|
try { DoSomething(); }
|
||||||
|
catch (Exception) { /* 留空,或者只 Log.Warning 假装没事 */ }
|
||||||
|
```
|
||||||
|
- **原则**:非预期异常必须 `Log.Error(...)` 暴露上下文并附带具体错误信息,绝不能掩盖致命逻辑错误或数据存盘缺失。
|
||||||
|
|
||||||
|
### 6. MonoBehaviour/实例方法内的自我判空
|
||||||
|
- **没必要**:在普通实例方法内部写 `if (this == null)`,或对由 Unity 生命周期保证的对象进行反复探测。
|
||||||
|
- **原则**:信任正常的组件调用生命周期。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 三、代码排查与清理步骤(Runbook)
|
||||||
|
|
||||||
|
当用户发出整理请求时,按以下流程执行:
|
||||||
|
|
||||||
|
1. **识别范围**:
|
||||||
|
- 检查 `git status` 涉及修改的文件,或针对用户指定的代码文件。
|
||||||
|
2. **逐项审查**:
|
||||||
|
- [ ] 检查是否有 `[SerializeField]`、`View.xxx` 的判空,有则移除。
|
||||||
|
- [ ] 检查声明处赋值(如 `= new ...`)字段的二次判空,有则移除。
|
||||||
|
- [ ] 检查是否有配置读取、存档读取的三元默认值回退(`?:` 魔法数字),改为 `Log.Error` 并中断。
|
||||||
|
- [ ] 检查 `foreach` 外层是否有冗余的 `if (list != null && list.Count > 0)` 嵌套,若列表非空则拍平。
|
||||||
|
- [ ] 检查是否有空 `catch` 吞错。
|
||||||
|
3. **推演逻辑边界(静态检查)**:
|
||||||
|
- 确认移除防御后不会导致不可预知的崩溃;
|
||||||
|
- 确认异常路径是否确实按规范输出了 `Log.Error`。
|
||||||
|
4. **汇报改动**:
|
||||||
|
- 列出修改的文件路径;
|
||||||
|
- 简要说明移除了哪些冗余防御或规范了哪些异常断言。
|
||||||
@@ -10,6 +10,7 @@ namespace SepCore.UI
|
|||||||
public List<GoodsItemContext> GoodsItems;
|
public List<GoodsItemContext> GoodsItems;
|
||||||
public DisplayListContext PropListContext;
|
public DisplayListContext PropListContext;
|
||||||
public DisplayListContext WeaponListContext;
|
public DisplayListContext WeaponListContext;
|
||||||
|
public StatContext StatContext;
|
||||||
|
|
||||||
// 控制字段
|
// 控制字段
|
||||||
public bool NeedRefreshGoodsItems;
|
public bool NeedRefreshGoodsItems;
|
||||||
@@ -17,6 +18,7 @@ namespace SepCore.UI
|
|||||||
public bool NeedRefreshWeaponList;
|
public bool NeedRefreshWeaponList;
|
||||||
public bool NeedRefreshPropList;
|
public bool NeedRefreshPropList;
|
||||||
public bool NeedRefreshPrice;
|
public bool NeedRefreshPrice;
|
||||||
|
public bool NeedRefreshStat;
|
||||||
|
|
||||||
public ShopContext()
|
public ShopContext()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -40,14 +40,26 @@ namespace SepCore.UI
|
|||||||
BuildDisplayListContext(DisplayListAreaType.Prop, rawData.PropItems, rawData.PropMaxCount),
|
BuildDisplayListContext(DisplayListAreaType.Prop, rawData.PropItems, rawData.PropMaxCount),
|
||||||
WeaponListContext = BuildDisplayListContext(DisplayListAreaType.Weapon, rawData.WeaponItems,
|
WeaponListContext = BuildDisplayListContext(DisplayListAreaType.Weapon, rawData.WeaponItems,
|
||||||
rawData.WeaponMaxCount),
|
rawData.WeaponMaxCount),
|
||||||
|
StatContext = BuildStatContext(rawData.StatRawData),
|
||||||
NeedRefreshGoodsItems = true,
|
NeedRefreshGoodsItems = true,
|
||||||
NeedRefreshPlayerCoin = true,
|
NeedRefreshPlayerCoin = true,
|
||||||
NeedRefreshPropList = true,
|
NeedRefreshPropList = true,
|
||||||
NeedRefreshWeaponList = true,
|
NeedRefreshWeaponList = true,
|
||||||
|
NeedRefreshStat = true,
|
||||||
NeedRefreshPrice = true
|
NeedRefreshPrice = true
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static StatContext BuildStatContext(StatRawData rawData)
|
||||||
|
{
|
||||||
|
if (rawData == null)
|
||||||
|
{
|
||||||
|
Log.Error("ShopController.BuildStatContext: rawData is null.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return new StatContext(rawData);
|
||||||
|
}
|
||||||
|
|
||||||
private static DisplayListContext BuildDisplayListContext(DisplayListAreaType listType,
|
private static DisplayListContext BuildDisplayListContext(DisplayListAreaType listType,
|
||||||
IReadOnlyList<object> items, int maxCount)
|
IReadOnlyList<object> items, int maxCount)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -144,6 +144,12 @@ namespace SepCore.UI
|
|||||||
Context.NeedRefreshPropList = true;
|
Context.NeedRefreshPropList = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (result.StatRawData != null)
|
||||||
|
{
|
||||||
|
Context.StatContext = BuildStatContext(result.StatRawData);
|
||||||
|
Context.NeedRefreshStat = true;
|
||||||
|
}
|
||||||
|
|
||||||
Context.NeedRefreshGoodsItems = true;
|
Context.NeedRefreshGoodsItems = true;
|
||||||
RefreshUI(Form, Context);
|
RefreshUI(Form, Context);
|
||||||
}
|
}
|
||||||
@@ -243,6 +249,8 @@ namespace SepCore.UI
|
|||||||
Context.WeaponListContext.CurrentCount = currentCount;
|
Context.WeaponListContext.CurrentCount = currentCount;
|
||||||
|
|
||||||
Context.NeedRefreshWeaponList = true;
|
Context.NeedRefreshWeaponList = true;
|
||||||
|
Context.StatContext = BuildStatContext(_useCase.CreateStatRawData());
|
||||||
|
Context.NeedRefreshStat = true;
|
||||||
RefreshUI(Form, Context);
|
RefreshUI(Form, Context);
|
||||||
GameEntry.UIRouter.CloseUIAsync(UIFormType.ItemTooltipForm).Forget();
|
GameEntry.UIRouter.CloseUIAsync(UIFormType.ItemTooltipForm).Forget();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,6 +49,12 @@ namespace SepCore.UI
|
|||||||
View.weaponList.OnInit(context.WeaponListContext);
|
View.weaponList.OnInit(context.WeaponListContext);
|
||||||
context.NeedRefreshWeaponList = false;
|
context.NeedRefreshWeaponList = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (context.NeedRefreshStat)
|
||||||
|
{
|
||||||
|
View.statForm.OnInit(context.StatContext);
|
||||||
|
context.NeedRefreshStat = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnOpen(object userData)
|
protected override void OnOpen(object userData)
|
||||||
|
|||||||
@@ -16,5 +16,6 @@ namespace SepCore.UI
|
|||||||
[SerializeField] public global::SepCore.UI.FormatTextUI continueButtonFormatText;
|
[SerializeField] public global::SepCore.UI.FormatTextUI continueButtonFormatText;
|
||||||
[SerializeField] public global::SepCore.UI.DisplayListForm weaponList;
|
[SerializeField] public global::SepCore.UI.DisplayListForm weaponList;
|
||||||
[SerializeField] public global::SepCore.UI.DisplayListForm propList;
|
[SerializeField] public global::SepCore.UI.DisplayListForm propList;
|
||||||
|
[SerializeField] public global::SepCore.UI.StatForm statForm;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 541f4dba32e55be469dcd6b180b94fdb
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,92 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using SepCore.Definition;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace SepCore.UI
|
||||||
|
{
|
||||||
|
public class StatContext : UIContext
|
||||||
|
{
|
||||||
|
public StatRawData RawData { get; }
|
||||||
|
public Dictionary<StatType, string> FormattedValues { get; } = new Dictionary<StatType, string>();
|
||||||
|
|
||||||
|
public StatContext()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public StatContext(StatRawData rawData)
|
||||||
|
{
|
||||||
|
RawData = rawData;
|
||||||
|
if (rawData != null)
|
||||||
|
{
|
||||||
|
foreach (KeyValuePair<StatType, float> pair in rawData.Values)
|
||||||
|
{
|
||||||
|
FormattedValues[pair.Key] = FormatStatValue(pair.Key, pair.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GetFormattedValue(StatType statType)
|
||||||
|
{
|
||||||
|
return FormattedValues.TryGetValue(statType, out string text) ? text : string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetFormattedValue(StatType statType, string text)
|
||||||
|
{
|
||||||
|
FormattedValues[statType] = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string FormatStatValue(StatType statType, float value)
|
||||||
|
{
|
||||||
|
StatConfig config = (GameEntry.Luban != null && GameEntry.Luban.IsReady)
|
||||||
|
? GameEntry.Luban.Get<StatConfig>((int)statType)
|
||||||
|
: null;
|
||||||
|
|
||||||
|
float baseValue = config?.DefaultBaseValue ?? (statType is StatType.DamagePercent or StatType.AttackSpeed ? 1f : 0f);
|
||||||
|
bool isPercent = config?.IsPercentDisplay ?? (statType is StatType.DamagePercent or StatType.AttackSpeed or StatType.CritChance or StatType.Dodge or StatType.LifeSteal);
|
||||||
|
|
||||||
|
string colorTag = null;
|
||||||
|
if (value > baseValue + 1e-4f)
|
||||||
|
{
|
||||||
|
colorTag = "green";
|
||||||
|
}
|
||||||
|
else if (value < baseValue - 1e-4f)
|
||||||
|
{
|
||||||
|
colorTag = "red";
|
||||||
|
}
|
||||||
|
|
||||||
|
string text;
|
||||||
|
if (statType is StatType.DamagePercent or StatType.AttackSpeed)
|
||||||
|
{
|
||||||
|
// 增伤与攻速基准为 1.0(即 0% 加成)。面板显示相对基准的增量,如 0%、+5%、-10%
|
||||||
|
float bonusPercent = (value - 1f) * 100f;
|
||||||
|
string sign = bonusPercent > 0 ? "+" : "";
|
||||||
|
text = $"{sign}{bonusPercent:0.##}%";
|
||||||
|
}
|
||||||
|
else if (isPercent || statType == StatType.LifeSteal)
|
||||||
|
{
|
||||||
|
// 概率/比率属性(暴击率、闪避率、生命窃取):以百分比形式呈现
|
||||||
|
float displayPercent = value * 100f;
|
||||||
|
string sign = (value > baseValue && baseValue != 0) ? "+" : "";
|
||||||
|
text = $"{sign}{displayPercent:0.##}%";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (Mathf.Approximately(value, Mathf.Round(value)))
|
||||||
|
{
|
||||||
|
text = Mathf.RoundToInt(value).ToString();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
text = value.ToString("0.##");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(colorTag))
|
||||||
|
{
|
||||||
|
return $"<color={colorTag}>{text}</color>";
|
||||||
|
}
|
||||||
|
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 4bca40033be046a49a3c1a253af9d6a3
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
using SepCore.Definition;
|
||||||
|
|
||||||
|
namespace SepCore.UI
|
||||||
|
{
|
||||||
|
public partial class StatForm
|
||||||
|
{
|
||||||
|
public void OnInit(StatContext context)
|
||||||
|
{
|
||||||
|
RefreshUI(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RefreshUI(StatContext context)
|
||||||
|
{
|
||||||
|
if (context == null)
|
||||||
|
{
|
||||||
|
UnityGameFramework.Runtime.Log.Error("StatForm.RefreshUI: context is null.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
View.maxHpValue.text = context.GetFormattedValue(StatType.MaxHp);
|
||||||
|
View.hpRegenValue.text = context.GetFormattedValue(StatType.HpRegen);
|
||||||
|
View.lifeStealValue.text = context.GetFormattedValue(StatType.LifeSteal);
|
||||||
|
View.damagePercentValue.text = context.GetFormattedValue(StatType.DamagePercent);
|
||||||
|
View.meleeDamageValue.text = context.GetFormattedValue(StatType.MeleeDamage);
|
||||||
|
View.rangedDamageValue.text = context.GetFormattedValue(StatType.RangedDamage);
|
||||||
|
View.elementalDamageValue.text = context.GetFormattedValue(StatType.ElementalDamage);
|
||||||
|
View.attackSpeedValue.text = context.GetFormattedValue(StatType.AttackSpeed);
|
||||||
|
View.critChanceValue.text = context.GetFormattedValue(StatType.CritChance);
|
||||||
|
View.engineeringValue.text = context.GetFormattedValue(StatType.Engineering);
|
||||||
|
View.rangeValue.text = context.GetFormattedValue(StatType.Range);
|
||||||
|
View.armorValue.text = context.GetFormattedValue(StatType.Armor);
|
||||||
|
View.dodgeValue.text = context.GetFormattedValue(StatType.Dodge);
|
||||||
|
View.moveSpeedValue.text = context.GetFormattedValue(StatType.MoveSpeed);
|
||||||
|
View.harvestingValue.text = context.GetFormattedValue(StatType.Harvesting);
|
||||||
|
View.luckValue.text = context.GetFormattedValue(StatType.Luck);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 1a6aaf8b66f78da4a93a47566847e736
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace SepCore.UI
|
||||||
|
{
|
||||||
|
[DisallowMultipleComponent]
|
||||||
|
public partial class StatForm : UGuiForm
|
||||||
|
{
|
||||||
|
[SerializeField] private StatView _view = null;
|
||||||
|
|
||||||
|
public StatView View => _view;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: e561792b1190bde4ba98bdc92b608801
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace SepCore.UI
|
||||||
|
{
|
||||||
|
[DisallowMultipleComponent]
|
||||||
|
public partial class StatView : MonoBehaviour
|
||||||
|
{
|
||||||
|
[SerializeField] public global::TMPro.TextMeshProUGUI maxHpValue;
|
||||||
|
[SerializeField] public global::TMPro.TextMeshProUGUI hpRegenValue;
|
||||||
|
[SerializeField] public global::TMPro.TextMeshProUGUI lifeStealValue;
|
||||||
|
[SerializeField] public global::TMPro.TextMeshProUGUI damagePercentValue;
|
||||||
|
[SerializeField] public global::TMPro.TextMeshProUGUI meleeDamageValue;
|
||||||
|
[SerializeField] public global::TMPro.TextMeshProUGUI rangedDamageValue;
|
||||||
|
[SerializeField] public global::TMPro.TextMeshProUGUI elementalDamageValue;
|
||||||
|
[SerializeField] public global::TMPro.TextMeshProUGUI attackSpeedValue;
|
||||||
|
[SerializeField] public global::TMPro.TextMeshProUGUI critChanceValue;
|
||||||
|
[SerializeField] public global::TMPro.TextMeshProUGUI engineeringValue;
|
||||||
|
[SerializeField] public global::TMPro.TextMeshProUGUI rangeValue;
|
||||||
|
[SerializeField] public global::TMPro.TextMeshProUGUI armorValue;
|
||||||
|
[SerializeField] public global::TMPro.TextMeshProUGUI dodgeValue;
|
||||||
|
[SerializeField] public global::TMPro.TextMeshProUGUI moveSpeedValue;
|
||||||
|
[SerializeField] public global::TMPro.TextMeshProUGUI harvestingValue;
|
||||||
|
[SerializeField] public global::TMPro.TextMeshProUGUI luckValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: cfe0c98c2edc3244e982e2492aaa2edc
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -84,6 +84,8 @@ namespace SepCore.Entity
|
|||||||
|
|
||||||
public int PendingLevelPoints { get; set; }
|
public int PendingLevelPoints { get; set; }
|
||||||
|
|
||||||
|
public StatComponent StatComponent => _statComponent;
|
||||||
|
|
||||||
public IReadOnlyList<WeaponBase> Weapons => _backpackComponent.Weapons;
|
public IReadOnlyList<WeaponBase> Weapons => _backpackComponent.Weapons;
|
||||||
public IReadOnlyList<PropItem> Props => _backpackComponent.Props;
|
public IReadOnlyList<PropItem> Props => _backpackComponent.Props;
|
||||||
public int WeaponCapacity => _backpackComponent.WeaponCapacity;
|
public int WeaponCapacity => _backpackComponent.WeaponCapacity;
|
||||||
|
|||||||
@@ -4,5 +4,6 @@ namespace SepCore.UI
|
|||||||
{
|
{
|
||||||
public int GoodsIndex;
|
public int GoodsIndex;
|
||||||
public DisplayItemRawData DisplayItem;
|
public DisplayItemRawData DisplayItem;
|
||||||
|
public StatRawData StatRawData;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,5 +14,6 @@ namespace SepCore.UI
|
|||||||
public int PropMaxCount = -1;
|
public int PropMaxCount = -1;
|
||||||
public IReadOnlyList<WeaponBase> WeaponItems;
|
public IReadOnlyList<WeaponBase> WeaponItems;
|
||||||
public int WeaponMaxCount = -1;
|
public int WeaponMaxCount = -1;
|
||||||
|
public StatRawData StatRawData;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Cysharp.Threading.Tasks;
|
using Cysharp.Threading.Tasks;
|
||||||
|
using SepCore.Components;
|
||||||
using SepCore.Definition;
|
using SepCore.Definition;
|
||||||
using SepCore.Entity;
|
using SepCore.Entity;
|
||||||
using SepCore.CustomUtility;
|
using SepCore.CustomUtility;
|
||||||
@@ -47,10 +48,34 @@ namespace SepCore.UI
|
|||||||
PropItems = _player.Props,
|
PropItems = _player.Props,
|
||||||
PropMaxCount = GameEntry.Luban.Global.PropMaxCount,
|
PropMaxCount = GameEntry.Luban.Global.PropMaxCount,
|
||||||
WeaponItems = _player.Weapons,
|
WeaponItems = _player.Weapons,
|
||||||
WeaponMaxCount = _player.WeaponCapacity
|
WeaponMaxCount = _player.WeaponCapacity,
|
||||||
|
StatRawData = CreateStatRawData()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public StatRawData CreateStatRawData()
|
||||||
|
{
|
||||||
|
var rawData = new StatRawData();
|
||||||
|
StatComponent statComponent = _player.StatComponent;
|
||||||
|
if (statComponent == null)
|
||||||
|
{
|
||||||
|
Log.Error("ShopUseCase.CreateStatRawData: Player StatComponent is null.");
|
||||||
|
return rawData;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (StatType statType in (StatType[])Enum.GetValues(typeof(StatType)))
|
||||||
|
{
|
||||||
|
if (statType == StatType.None)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
rawData.SetValue(statType, statComponent.GetStatValue(statType));
|
||||||
|
}
|
||||||
|
|
||||||
|
return rawData;
|
||||||
|
}
|
||||||
|
|
||||||
public ShopRefreshResult TryRefresh(int cost)
|
public ShopRefreshResult TryRefresh(int cost)
|
||||||
{
|
{
|
||||||
if (_player.Coin < cost)
|
if (_player.Coin < cost)
|
||||||
@@ -102,7 +127,8 @@ namespace SepCore.UI
|
|||||||
return new ShopPurchaseResult
|
return new ShopPurchaseResult
|
||||||
{
|
{
|
||||||
GoodsIndex = goodsIndex,
|
GoodsIndex = goodsIndex,
|
||||||
DisplayItem = displayItem
|
DisplayItem = displayItem,
|
||||||
|
StatRawData = CreateStatRawData()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 18502a1681d745e46817f0d75a73a7e3
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using SepCore.Definition;
|
||||||
|
|
||||||
|
namespace SepCore.UI
|
||||||
|
{
|
||||||
|
public class StatRawData
|
||||||
|
{
|
||||||
|
public Dictionary<StatType, float> Values { get; } = new Dictionary<StatType, float>();
|
||||||
|
|
||||||
|
public float this[StatType statType]
|
||||||
|
{
|
||||||
|
get => GetValue(statType);
|
||||||
|
set => SetValue(statType, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public float GetValue(StatType statType)
|
||||||
|
{
|
||||||
|
return Values.TryGetValue(statType, out float val) ? val : 0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetValue(StatType statType, float value)
|
||||||
|
{
|
||||||
|
Values[statType] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 4677fc5d940aebd40a5a55cdb8b29628
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -357,6 +357,9 @@ MonoBehaviour:
|
|||||||
- root: {fileID: 6139037316920262782}
|
- root: {fileID: 6139037316920262782}
|
||||||
generateReference: 1
|
generateReference: 1
|
||||||
variableName: propList
|
variableName: propList
|
||||||
|
- root: {fileID: 9015079493983826477}
|
||||||
|
generateReference: 1
|
||||||
|
variableName: statForm
|
||||||
--- !u!114 &7138964402462000188
|
--- !u!114 &7138964402462000188
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -392,6 +395,7 @@ MonoBehaviour:
|
|||||||
continueButtonFormatText: {fileID: 4537820319422465099}
|
continueButtonFormatText: {fileID: 4537820319422465099}
|
||||||
weaponList: {fileID: 1842427826495371036}
|
weaponList: {fileID: 1842427826495371036}
|
||||||
propList: {fileID: 398343698490516872}
|
propList: {fileID: 398343698490516872}
|
||||||
|
statForm: {fileID: 1326861770293265040}
|
||||||
--- !u!1 &2599872763744672693
|
--- !u!1 &2599872763744672693
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -686,42 +690,6 @@ MonoBehaviour:
|
|||||||
- component: {fileID: 5873879027311029929}
|
- component: {fileID: 5873879027311029929}
|
||||||
generateReference: 1
|
generateReference: 1
|
||||||
variableName: playerCoinFormatText
|
variableName: playerCoinFormatText
|
||||||
--- !u!1 &3963448221191384772
|
|
||||||
GameObject:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
serializedVersion: 6
|
|
||||||
m_Component:
|
|
||||||
- component: {fileID: 9205918789339949941}
|
|
||||||
m_Layer: 5
|
|
||||||
m_Name: RightArea
|
|
||||||
m_TagString: Untagged
|
|
||||||
m_Icon: {fileID: 0}
|
|
||||||
m_NavMeshLayer: 0
|
|
||||||
m_StaticEditorFlags: 0
|
|
||||||
m_IsActive: 1
|
|
||||||
--- !u!224 &9205918789339949941
|
|
||||||
RectTransform:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 3963448221191384772}
|
|
||||||
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: 6883346101882881878}
|
|
||||||
m_Father: {fileID: 1904881530488092821}
|
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
|
||||||
m_AnchorMin: {x: 1, y: 0}
|
|
||||||
m_AnchorMax: {x: 1, y: 1}
|
|
||||||
m_AnchoredPosition: {x: -250, y: 0}
|
|
||||||
m_SizeDelta: {x: 500, y: 0}
|
|
||||||
m_Pivot: {x: 0.5, y: 0.5}
|
|
||||||
--- !u!1 &6965201405525023054
|
--- !u!1 &6965201405525023054
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -752,12 +720,13 @@ RectTransform:
|
|||||||
m_Children:
|
m_Children:
|
||||||
- {fileID: 4605528212674255201}
|
- {fileID: 4605528212674255201}
|
||||||
- {fileID: 2593143890336467957}
|
- {fileID: 2593143890336467957}
|
||||||
|
- {fileID: 6883346101882881878}
|
||||||
m_Father: {fileID: 1904881530488092821}
|
m_Father: {fileID: 1904881530488092821}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0, y: 0}
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
m_AnchorMax: {x: 1, y: 0}
|
m_AnchorMax: {x: 1, y: 0}
|
||||||
m_AnchoredPosition: {x: -225, y: 300}
|
m_AnchoredPosition: {x: 0, y: 300}
|
||||||
m_SizeDelta: {x: -717.05, y: 400}
|
m_SizeDelta: {x: -267.05014, y: 400}
|
||||||
m_Pivot: {x: 0.5, y: 0.5}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
--- !u!1 &8260361304478553399
|
--- !u!1 &8260361304478553399
|
||||||
GameObject:
|
GameObject:
|
||||||
@@ -795,7 +764,7 @@ RectTransform:
|
|||||||
m_AnchorMin: {x: 0, y: 1}
|
m_AnchorMin: {x: 0, y: 1}
|
||||||
m_AnchorMax: {x: 1, y: 1}
|
m_AnchorMax: {x: 1, y: 1}
|
||||||
m_AnchoredPosition: {x: -225, y: -100}
|
m_AnchoredPosition: {x: -225, y: -100}
|
||||||
m_SizeDelta: {x: -550, y: 200}
|
m_SizeDelta: {x: -717.05, y: 200}
|
||||||
m_Pivot: {x: 0.5, y: 0.5}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
--- !u!1001 &88658536662749817
|
--- !u!1001 &88658536662749817
|
||||||
PrefabInstance:
|
PrefabInstance:
|
||||||
@@ -943,7 +912,7 @@ PrefabInstance:
|
|||||||
- target: {fileID: 4526370488341744408, guid: dd09af1a9a441da409e57f235fbff385,
|
- target: {fileID: 4526370488341744408, guid: dd09af1a9a441da409e57f235fbff385,
|
||||||
type: 3}
|
type: 3}
|
||||||
propertyPath: m_AnchoredPosition.x
|
propertyPath: m_AnchoredPosition.x
|
||||||
value: 0
|
value: -463
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 4526370488341744408, guid: dd09af1a9a441da409e57f235fbff385,
|
- target: {fileID: 4526370488341744408, guid: dd09af1a9a441da409e57f235fbff385,
|
||||||
type: 3}
|
type: 3}
|
||||||
@@ -1219,7 +1188,7 @@ PrefabInstance:
|
|||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_Modification:
|
m_Modification:
|
||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
m_TransformParent: {fileID: 9205918789339949941}
|
m_TransformParent: {fileID: 3434143815555965409}
|
||||||
m_Modifications:
|
m_Modifications:
|
||||||
- target: {fileID: 3719248416810234768, guid: 0722cd253d6bf014eb4134a2151ec7e3,
|
- target: {fileID: 3719248416810234768, guid: 0722cd253d6bf014eb4134a2151ec7e3,
|
||||||
type: 3}
|
type: 3}
|
||||||
@@ -1467,32 +1436,32 @@ PrefabInstance:
|
|||||||
- target: {fileID: 8958121344393284127, guid: 0722cd253d6bf014eb4134a2151ec7e3,
|
- target: {fileID: 8958121344393284127, guid: 0722cd253d6bf014eb4134a2151ec7e3,
|
||||||
type: 3}
|
type: 3}
|
||||||
propertyPath: m_Pivot.x
|
propertyPath: m_Pivot.x
|
||||||
value: 0.5
|
value: 1
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 8958121344393284127, guid: 0722cd253d6bf014eb4134a2151ec7e3,
|
- target: {fileID: 8958121344393284127, guid: 0722cd253d6bf014eb4134a2151ec7e3,
|
||||||
type: 3}
|
type: 3}
|
||||||
propertyPath: m_Pivot.y
|
propertyPath: m_Pivot.y
|
||||||
value: 0.5
|
value: 1
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 8958121344393284127, guid: 0722cd253d6bf014eb4134a2151ec7e3,
|
- target: {fileID: 8958121344393284127, guid: 0722cd253d6bf014eb4134a2151ec7e3,
|
||||||
type: 3}
|
type: 3}
|
||||||
propertyPath: m_AnchorMax.x
|
propertyPath: m_AnchorMax.x
|
||||||
value: 0.5
|
value: 1
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 8958121344393284127, guid: 0722cd253d6bf014eb4134a2151ec7e3,
|
- target: {fileID: 8958121344393284127, guid: 0722cd253d6bf014eb4134a2151ec7e3,
|
||||||
type: 3}
|
type: 3}
|
||||||
propertyPath: m_AnchorMax.y
|
propertyPath: m_AnchorMax.y
|
||||||
value: 0
|
value: 1
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 8958121344393284127, guid: 0722cd253d6bf014eb4134a2151ec7e3,
|
- target: {fileID: 8958121344393284127, guid: 0722cd253d6bf014eb4134a2151ec7e3,
|
||||||
type: 3}
|
type: 3}
|
||||||
propertyPath: m_AnchorMin.x
|
propertyPath: m_AnchorMin.x
|
||||||
value: 0.5
|
value: 1
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 8958121344393284127, guid: 0722cd253d6bf014eb4134a2151ec7e3,
|
- target: {fileID: 8958121344393284127, guid: 0722cd253d6bf014eb4134a2151ec7e3,
|
||||||
type: 3}
|
type: 3}
|
||||||
propertyPath: m_AnchorMin.y
|
propertyPath: m_AnchorMin.y
|
||||||
value: 0
|
value: 1
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 8958121344393284127, guid: 0722cd253d6bf014eb4134a2151ec7e3,
|
- target: {fileID: 8958121344393284127, guid: 0722cd253d6bf014eb4134a2151ec7e3,
|
||||||
type: 3}
|
type: 3}
|
||||||
@@ -1562,7 +1531,7 @@ PrefabInstance:
|
|||||||
- target: {fileID: 8958121344393284127, guid: 0722cd253d6bf014eb4134a2151ec7e3,
|
- target: {fileID: 8958121344393284127, guid: 0722cd253d6bf014eb4134a2151ec7e3,
|
||||||
type: 3}
|
type: 3}
|
||||||
propertyPath: m_AnchoredPosition.y
|
propertyPath: m_AnchoredPosition.y
|
||||||
value: 400
|
value: -20
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 8958121344393284127, guid: 0722cd253d6bf014eb4134a2151ec7e3,
|
- target: {fileID: 8958121344393284127, guid: 0722cd253d6bf014eb4134a2151ec7e3,
|
||||||
type: 3}
|
type: 3}
|
||||||
@@ -1716,6 +1685,559 @@ MonoBehaviour:
|
|||||||
- component: {fileID: 1459358465442897105}
|
- component: {fileID: 1459358465442897105}
|
||||||
generateReference: 1
|
generateReference: 1
|
||||||
variableName: continueButton
|
variableName: continueButton
|
||||||
|
--- !u!1001 &6469510422838881286
|
||||||
|
PrefabInstance:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Modification:
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TransformParent: {fileID: 1904881530488092821}
|
||||||
|
m_Modifications:
|
||||||
|
- target: {fileID: 801391275681076741, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMax.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 801391275681076741, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMin.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 801391275681076741, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_SizeDelta.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 801391275681076741, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 801391275681076741, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 1273303412358623983, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMax.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 1273303412358623983, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMin.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 1273303412358623983, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_SizeDelta.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 1273303412358623983, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 1273303412358623983, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 1910866906192787602, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMax.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 1910866906192787602, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMin.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 1910866906192787602, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_SizeDelta.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 1910866906192787602, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 1910866906192787602, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2294273846794743590, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMax.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2294273846794743590, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMin.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2294273846794743590, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_SizeDelta.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2294273846794743590, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2294273846794743590, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2519022175391765424, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMax.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2519022175391765424, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMin.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2519022175391765424, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_SizeDelta.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2519022175391765424, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2519022175391765424, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2740914464534300531, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_Pivot.x
|
||||||
|
value: 0.5
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2740914464534300531, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_Pivot.y
|
||||||
|
value: 0.5
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2740914464534300531, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMax.x
|
||||||
|
value: 1
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2740914464534300531, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMax.y
|
||||||
|
value: 1
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2740914464534300531, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMin.x
|
||||||
|
value: 1
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2740914464534300531, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMin.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2740914464534300531, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_SizeDelta.x
|
||||||
|
value: 400
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2740914464534300531, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_SizeDelta.y
|
||||||
|
value: -596.985
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2740914464534300531, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_LocalPosition.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2740914464534300531, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_LocalPosition.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2740914464534300531, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_LocalPosition.z
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2740914464534300531, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_LocalRotation.w
|
||||||
|
value: 1
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2740914464534300531, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_LocalRotation.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2740914464534300531, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_LocalRotation.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2740914464534300531, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_LocalRotation.z
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2740914464534300531, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.x
|
||||||
|
value: -333.52
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2740914464534300531, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.y
|
||||||
|
value: 268.4925
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2740914464534300531, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_LocalEulerAnglesHint.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2740914464534300531, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_LocalEulerAnglesHint.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2740914464534300531, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_LocalEulerAnglesHint.z
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2752899368670579706, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMax.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2752899368670579706, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMin.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2752899368670579706, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_SizeDelta.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2752899368670579706, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2752899368670579706, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 4408985436863736299, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMax.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 4408985436863736299, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMin.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 4408985436863736299, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_SizeDelta.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 4408985436863736299, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 4408985436863736299, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 4474615098340524746, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMax.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 4474615098340524746, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMin.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 4474615098340524746, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_SizeDelta.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 4474615098340524746, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 4474615098340524746, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 4594243935509852842, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMax.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 4594243935509852842, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMin.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 4594243935509852842, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_SizeDelta.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 4594243935509852842, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 4594243935509852842, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 5077074068508901563, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMax.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 5077074068508901563, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMin.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 5077074068508901563, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_SizeDelta.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 5077074068508901563, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 5077074068508901563, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 5720722134132490187, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMax.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 5720722134132490187, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMin.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 5720722134132490187, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_SizeDelta.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 5720722134132490187, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 5720722134132490187, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6093896864165701108, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMax.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6093896864165701108, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMin.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6093896864165701108, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_SizeDelta.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6093896864165701108, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6093896864165701108, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6235649043184284785, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMax.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6235649043184284785, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMin.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6235649043184284785, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_SizeDelta.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6235649043184284785, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6235649043184284785, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6377727078038625605, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMax.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6377727078038625605, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMin.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6377727078038625605, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_SizeDelta.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6377727078038625605, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6377727078038625605, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6642070976608110142, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMax.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6642070976608110142, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMin.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6642070976608110142, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_SizeDelta.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6642070976608110142, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6642070976608110142, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 7533195644719076588, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_Enabled
|
||||||
|
value: 1
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 7948844174580554989, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMax.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 7948844174580554989, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchorMin.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 7948844174580554989, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_SizeDelta.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 7948844174580554989, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 7948844174580554989, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_AnchoredPosition.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 7982822048369705666, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_Name
|
||||||
|
value: StatForm
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
m_RemovedComponents: []
|
||||||
|
m_RemovedGameObjects: []
|
||||||
|
m_AddedGameObjects: []
|
||||||
|
m_AddedComponents: []
|
||||||
|
m_SourcePrefab: {fileID: 100100000, guid: 8eb3237ed7dcd0641995c87d796dd386, type: 3}
|
||||||
|
--- !u!114 &1326861770293265040 stripped
|
||||||
|
MonoBehaviour:
|
||||||
|
m_CorrespondingSourceObject: {fileID: 5449818116485803670, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
m_PrefabInstance: {fileID: 6469510422838881286}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 0}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: e561792b1190bde4ba98bdc92b608801, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
--- !u!114 &9015079493983826477 stripped
|
||||||
|
MonoBehaviour:
|
||||||
|
m_CorrespondingSourceObject: {fileID: 2653656448540597803, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
m_PrefabInstance: {fileID: 6469510422838881286}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 0}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 335062b0d81ae40f49c923ef4bf19dd7, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
--- !u!224 &9205918789339949941 stripped
|
||||||
|
RectTransform:
|
||||||
|
m_CorrespondingSourceObject: {fileID: 2740914464534300531, guid: 8eb3237ed7dcd0641995c87d796dd386,
|
||||||
|
type: 3}
|
||||||
|
m_PrefabInstance: {fileID: 6469510422838881286}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
--- !u!1001 &6868384101991383953
|
--- !u!1001 &6868384101991383953
|
||||||
PrefabInstance:
|
PrefabInstance:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8eb3237ed7dcd0641995c87d796dd386
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
using NUnit.Framework;
|
||||||
|
using SepCore.Definition;
|
||||||
|
using SepCore.UI;
|
||||||
|
|
||||||
|
namespace VampireLike.Tests.Gameplay.EditMode
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class StatPresentationTests
|
||||||
|
{
|
||||||
|
[Test]
|
||||||
|
public void StatRawData_StoresAndRetrievesValues()
|
||||||
|
{
|
||||||
|
var rawData = new StatRawData();
|
||||||
|
rawData.SetValue(StatType.MaxHp, 150f);
|
||||||
|
rawData[StatType.MeleeDamage] = 12f;
|
||||||
|
|
||||||
|
Assert.AreEqual(150f, rawData.GetValue(StatType.MaxHp));
|
||||||
|
Assert.AreEqual(12f, rawData[StatType.MeleeDamage]);
|
||||||
|
Assert.AreEqual(0f, rawData.GetValue(StatType.Armor));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void StatContext_FormatsDamagePercentAndAttackSpeedAsBonus()
|
||||||
|
{
|
||||||
|
var rawData = new StatRawData();
|
||||||
|
rawData.SetValue(StatType.DamagePercent, 1.05f);
|
||||||
|
rawData.SetValue(StatType.AttackSpeed, 1.19f);
|
||||||
|
|
||||||
|
var context = new StatContext(rawData);
|
||||||
|
|
||||||
|
string damageStr = context.GetFormattedValue(StatType.DamagePercent);
|
||||||
|
string attackSpeedStr = context.GetFormattedValue(StatType.AttackSpeed);
|
||||||
|
|
||||||
|
Assert.IsTrue(damageStr.Contains("+5%"), $"Expected '+5%' in '{damageStr}'");
|
||||||
|
Assert.IsTrue(attackSpeedStr.Contains("+19%"), $"Expected '+19%' in '{attackSpeedStr}'");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void StatContext_FormatsProbabilityStatsAsPercent()
|
||||||
|
{
|
||||||
|
var rawData = new StatRawData();
|
||||||
|
rawData.SetValue(StatType.CritChance, 0.25f);
|
||||||
|
rawData.SetValue(StatType.Dodge, 0.15f);
|
||||||
|
rawData.SetValue(StatType.LifeSteal, 0.05f);
|
||||||
|
|
||||||
|
var context = new StatContext(rawData);
|
||||||
|
|
||||||
|
string critStr = context.GetFormattedValue(StatType.CritChance);
|
||||||
|
string dodgeStr = context.GetFormattedValue(StatType.Dodge);
|
||||||
|
string lifeStealStr = context.GetFormattedValue(StatType.LifeSteal);
|
||||||
|
|
||||||
|
Assert.IsTrue(critStr.Contains("25%"), $"Expected '25%' in '{critStr}'");
|
||||||
|
Assert.IsTrue(dodgeStr.Contains("15%"), $"Expected '15%' in '{dodgeStr}'");
|
||||||
|
Assert.IsTrue(lifeStealStr.Contains("5%"), $"Expected '5%' in '{lifeStealStr}'");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void StatContext_FormatsScalarStatsAccurately()
|
||||||
|
{
|
||||||
|
var rawData = new StatRawData();
|
||||||
|
rawData.SetValue(StatType.MaxHp, 120f);
|
||||||
|
rawData.SetValue(StatType.Armor, 8f);
|
||||||
|
|
||||||
|
var context = new StatContext(rawData);
|
||||||
|
|
||||||
|
string hpStr = context.GetFormattedValue(StatType.MaxHp);
|
||||||
|
string armorStr = context.GetFormattedValue(StatType.Armor);
|
||||||
|
|
||||||
|
Assert.IsTrue(hpStr.Contains("120"), $"Expected '120' in '{hpStr}'");
|
||||||
|
Assert.IsTrue(armorStr.Contains("8"), $"Expected '8' in '{armorStr}'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6c52ac6872fcd884381da96f37ab8cd8
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"com.coplaydev.unity-mcp": "https://github.com/CoplayDev/unity-mcp.git?path=/MCPForUnity#main",
|
||||||
"com.unity.2d.sprite": "1.0.0",
|
"com.unity.2d.sprite": "1.0.0",
|
||||||
"com.unity.2d.tilemap": "1.0.0",
|
"com.unity.2d.tilemap": "1.0.0",
|
||||||
"com.unity.ads": "4.4.2",
|
"com.unity.ads": "4.4.2",
|
||||||
|
|||||||
@@ -1,5 +1,22 @@
|
|||||||
{
|
{
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"com.coplaydev.unity-mcp": {
|
||||||
|
"version": "https://github.com/CoplayDev/unity-mcp.git?path=/MCPForUnity#main",
|
||||||
|
"depth": 0,
|
||||||
|
"source": "git",
|
||||||
|
"dependencies": {
|
||||||
|
"com.unity.modules.animation": "1.0.0",
|
||||||
|
"com.unity.modules.imageconversion": "1.0.0",
|
||||||
|
"com.unity.modules.physics": "1.0.0",
|
||||||
|
"com.unity.modules.physics2d": "1.0.0",
|
||||||
|
"com.unity.modules.uielements": "1.0.0",
|
||||||
|
"com.unity.modules.screencapture": "1.0.0",
|
||||||
|
"com.unity.modules.unitywebrequest": "1.0.0",
|
||||||
|
"com.unity.nuget.newtonsoft-json": "3.0.2",
|
||||||
|
"com.unity.test-framework": "1.1.31"
|
||||||
|
},
|
||||||
|
"hash": "30d22075093d1d35dfb0091c1c7550e9ad948577"
|
||||||
|
},
|
||||||
"com.unity.2d.sprite": {
|
"com.unity.2d.sprite": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"depth": 0,
|
"depth": 0,
|
||||||
@@ -139,7 +156,7 @@
|
|||||||
},
|
},
|
||||||
"com.unity.nuget.newtonsoft-json": {
|
"com.unity.nuget.newtonsoft-json": {
|
||||||
"version": "3.2.1",
|
"version": "3.2.1",
|
||||||
"depth": 2,
|
"depth": 1,
|
||||||
"source": "registry",
|
"source": "registry",
|
||||||
"dependencies": {},
|
"dependencies": {},
|
||||||
"url": "https://packages.unity.cn"
|
"url": "https://packages.unity.cn"
|
||||||
|
|||||||
Reference in New Issue
Block a user