From e12d2e73b2e01741328b7c4ef598f3512bce760d Mon Sep 17 00:00:00 2001 From: SepComet <202308010230@stu.csust.edu.cn> Date: Wed, 4 Mar 2026 12:47:20 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=A8=20UI=20=E8=AE=BE=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `ItemDescForm` 道具详细信息面板,目前还未添加 DescText 内容的赋值 - `RepoForm` 道具入槽逻辑调整,为了适应 `ItemDescForm` 的点击打开逻辑,点击道具自动匹配槽位改成拖动道具到相应槽位 - 添加了一系列图片素材 --- Assets/GameMain/DataTables/BaseComp.txt | 12 +- Assets/GameMain/DataTables/BearingComp.txt | 12 +- Assets/GameMain/DataTables/MuzzleComp.txt | 12 +- .../GameMain/DataTables/OutGameDropPool.txt | 45 +- Assets/GameMain/Entities/TowerEntity.prefab | 7 +- .../GameMain/Scripts/Base/GameEntry.Custom.cs | 3 + .../CombatScheduler/CombatResourceManager.cs | 44 +- .../CustomComponent/SpriteCacheComponent.cs | 99 ++ .../SpriteCacheComponent.cs.meta} | 2 +- .../GameMain/Scripts/DataTable/DRBaseComp.cs | 8 +- .../Scripts/DataTable/DRBearingComp.cs | 6 - .../Scripts/DataTable/DRMuzzleComp.cs | 8 +- .../Event/RepoForm/RepoFormReturnEventArgs.cs | 21 + .../RepoForm/RepoFormReturnEventArgs.cs.meta | 3 + .../RepoItemDetailRequestedEventArgs.cs | 31 + .../RepoItemDetailRequestedEventArgs.cs.meta | 11 + .../RepoForm/RepoItemDragEndedEventArgs.cs | 30 + .../RepoItemDragEndedEventArgs.cs.meta | 11 + .../RepoForm/RepoItemSelectedEventArgs.cs | 26 - .../Controller/CombatFinishFormController.cs | 167 +++- .../UI/Game/Context/RepoItemContext.cs | 4 +- .../UI/Game/Controller/RepoFormController.cs | 226 ++++- .../Scripts/UI/Game/View/CombineArea.cs | 33 +- .../Scripts/UI/Game/View/CombineSlotItem.cs | 25 +- .../GameMain/Scripts/UI/Game/View/CompArea.cs | 57 +- .../GameMain/Scripts/UI/Game/View/RepoForm.cs | 8 +- .../GameMain/Scripts/UI/Game/View/RepoItem.cs | 322 +++++- .../UI/General/Context/IconAreaContext.cs | 7 +- .../UI/General/Context/ItemDescFormContext.cs | 16 + .../Context/ItemDescFormContext.cs.meta | 11 + .../Controller/ItemDescFormController.cs | 87 ++ .../Controller/ItemDescFormController.cs.meta | 11 + .../Controller/RewardSelectFormController.cs | 15 +- .../Scripts/UI/General/IconColorGenerator.cs | 440 +++++++++ .../UI/General/IconColorGenerator.cs.meta | 11 + .../UI/General/RawData/ItemDescFormRawData.cs | 15 + .../RawData/ItemDescFormRawData.cs.meta | 11 + .../UI/General/UseCase/ItemDescFormUseCase.cs | 9 + .../UseCase/ItemDescFormUseCase.cs.meta | 11 + .../Scripts/UI/General/View/IconArea.cs | 47 +- .../Scripts/UI/General/View/ItemDescForm.cs | 376 +++++++ .../UI/General/View/ItemDescForm.cs.meta | 11 + .../GameMain/Scripts/Utility/AssetUtility.cs | 6 + Assets/GameMain/Textures/Base.meta | 8 + Assets/GameMain/Textures/Base.png | Bin 0 -> 2097 bytes Assets/GameMain/Textures/Base.png.meta | 169 ++++ Assets/GameMain/Textures/Base/000000.png | Bin 0 -> 768 bytes Assets/GameMain/Textures/Base/000000.png.meta | 127 +++ Assets/GameMain/Textures/Base/0000FF.png | Bin 0 -> 780 bytes Assets/GameMain/Textures/Base/0000FF.png.meta | 127 +++ Assets/GameMain/Textures/Base/00FF00.png | Bin 0 -> 780 bytes Assets/GameMain/Textures/Base/00FF00.png.meta | 127 +++ Assets/GameMain/Textures/Base/00FFFF.png | Bin 0 -> 793 bytes Assets/GameMain/Textures/Base/00FFFF.png.meta | 127 +++ Assets/GameMain/Textures/Base/333333.png | Bin 0 -> 1143 bytes Assets/GameMain/Textures/Base/333333.png.meta | 127 +++ Assets/GameMain/Textures/Base/3333FF.png | Bin 0 -> 1030 bytes Assets/GameMain/Textures/Base/3333FF.png.meta | 127 +++ Assets/GameMain/Textures/Base/33FF33.png | Bin 0 -> 1030 bytes Assets/GameMain/Textures/Base/33FF33.png.meta | 127 +++ Assets/GameMain/Textures/Base/33FFFF.png | Bin 0 -> 918 bytes Assets/GameMain/Textures/Base/33FFFF.png.meta | 127 +++ Assets/GameMain/Textures/Base/666666.png | Bin 0 -> 1143 bytes Assets/GameMain/Textures/Base/666666.png.meta | 127 +++ Assets/GameMain/Textures/Base/6666FF.png | Bin 0 -> 1030 bytes Assets/GameMain/Textures/Base/6666FF.png.meta | 127 +++ Assets/GameMain/Textures/Base/66FF66.png | Bin 0 -> 1030 bytes Assets/GameMain/Textures/Base/66FF66.png.meta | 127 +++ Assets/GameMain/Textures/Base/66FFFF.png | Bin 0 -> 918 bytes Assets/GameMain/Textures/Base/66FFFF.png.meta | 127 +++ Assets/GameMain/Textures/Base/999999.png | Bin 0 -> 1143 bytes Assets/GameMain/Textures/Base/999999.png.meta | 127 +++ Assets/GameMain/Textures/Base/9999FF.png | Bin 0 -> 1030 bytes Assets/GameMain/Textures/Base/9999FF.png.meta | 127 +++ Assets/GameMain/Textures/Base/99FF99.png | Bin 0 -> 1030 bytes Assets/GameMain/Textures/Base/99FF99.png.meta | 127 +++ Assets/GameMain/Textures/Base/99FFFF.png | Bin 0 -> 918 bytes Assets/GameMain/Textures/Base/99FFFF.png.meta | 127 +++ Assets/GameMain/Textures/Base/CCCCCC.png | Bin 0 -> 1143 bytes Assets/GameMain/Textures/Base/CCCCCC.png.meta | 127 +++ Assets/GameMain/Textures/Base/CCCCFF.png | Bin 0 -> 1030 bytes Assets/GameMain/Textures/Base/CCCCFF.png.meta | 127 +++ Assets/GameMain/Textures/Base/CCFFCC.png | Bin 0 -> 1030 bytes Assets/GameMain/Textures/Base/CCFFCC.png.meta | 127 +++ Assets/GameMain/Textures/Base/CCFFFF.png | Bin 0 -> 918 bytes Assets/GameMain/Textures/Base/CCFFFF.png.meta | 127 +++ Assets/GameMain/Textures/Base/FF0000.png | Bin 0 -> 780 bytes Assets/GameMain/Textures/Base/FF0000.png.meta | 127 +++ Assets/GameMain/Textures/Base/FF00FF.png | Bin 0 -> 793 bytes Assets/GameMain/Textures/Base/FF00FF.png.meta | 127 +++ Assets/GameMain/Textures/Base/FF3333.png | Bin 0 -> 1030 bytes Assets/GameMain/Textures/Base/FF3333.png.meta | 127 +++ Assets/GameMain/Textures/Base/FF33FF.png | Bin 0 -> 918 bytes Assets/GameMain/Textures/Base/FF33FF.png.meta | 127 +++ Assets/GameMain/Textures/Base/FF6666.png | Bin 0 -> 1030 bytes Assets/GameMain/Textures/Base/FF6666.png.meta | 127 +++ Assets/GameMain/Textures/Base/FF66FF.png | Bin 0 -> 918 bytes Assets/GameMain/Textures/Base/FF66FF.png.meta | 127 +++ Assets/GameMain/Textures/Base/FF9999.png | Bin 0 -> 1030 bytes Assets/GameMain/Textures/Base/FF9999.png.meta | 127 +++ Assets/GameMain/Textures/Base/FF99FF.png | Bin 0 -> 918 bytes Assets/GameMain/Textures/Base/FF99FF.png.meta | 127 +++ Assets/GameMain/Textures/Base/FFCCCC.png | Bin 0 -> 1030 bytes Assets/GameMain/Textures/Base/FFCCCC.png.meta | 127 +++ Assets/GameMain/Textures/Base/FFCCFF.png | Bin 0 -> 918 bytes Assets/GameMain/Textures/Base/FFCCFF.png.meta | 127 +++ Assets/GameMain/Textures/Base/FFFF00.png | Bin 0 -> 793 bytes Assets/GameMain/Textures/Base/FFFF00.png.meta | 127 +++ Assets/GameMain/Textures/Base/FFFF33.png | Bin 0 -> 918 bytes Assets/GameMain/Textures/Base/FFFF33.png.meta | 127 +++ Assets/GameMain/Textures/Base/FFFF66.png | Bin 0 -> 918 bytes Assets/GameMain/Textures/Base/FFFF66.png.meta | 127 +++ Assets/GameMain/Textures/Base/FFFF99.png | Bin 0 -> 918 bytes Assets/GameMain/Textures/Base/FFFF99.png.meta | 127 +++ Assets/GameMain/Textures/Base/FFFFCC.png | Bin 0 -> 918 bytes Assets/GameMain/Textures/Base/FFFFCC.png.meta | 127 +++ Assets/GameMain/Textures/Base/FFFFFF.png | Bin 0 -> 805 bytes Assets/GameMain/Textures/Base/FFFFFF.png.meta | 127 +++ Assets/GameMain/Textures/Bearing.meta | 8 + Assets/GameMain/Textures/Bearing.png | Bin 0 -> 6085 bytes Assets/GameMain/Textures/Bearing.png.meta | 229 +++++ Assets/GameMain/Textures/Capsule.png | Bin 0 -> 7068 bytes Assets/GameMain/Textures/Capsule.png.meta | 233 +++++ Assets/GameMain/Textures/ControlBase.png | Bin 0 -> 2097 bytes Assets/GameMain/Textures/ControlBase.png.meta | 169 ++++ Assets/GameMain/Textures/ElementBase.png | Bin 0 -> 2097 bytes Assets/GameMain/Textures/ElementBase.png.meta | 169 ++++ Assets/GameMain/Textures/HexagonFlatTop.png | Bin 0 -> 6927 bytes .../GameMain/Textures/HexagonFlatTop.png.meta | 193 ++++ .../GameMain/Textures/HexagonPointedTop.png | Bin 0 -> 6079 bytes .../Textures/HexagonPointedTop.png.meta | 193 ++++ Assets/GameMain/Textures/IsometricDiamond.png | Bin 0 -> 2635 bytes .../Textures/IsometricDiamond.png.meta | 189 ++++ Assets/GameMain/Textures/Muzzle.meta | 8 + Assets/GameMain/Textures/Muzzle.png | Bin 0 -> 3382 bytes Assets/GameMain/Textures/Muzzle.png.meta | 175 ++++ .../UI/UIForms/CombatFinishForm.prefab | 2 +- .../GameMain/UI/UIForms/ItemDescForm.prefab | 928 ++++++++++++++++++ .../UI/UIForms/ItemDescForm.prefab.meta | 7 + Assets/GameMain/UI/UIForms/RepoForm.prefab | 4 +- .../UI/UIItems/CombineSlotItem.prefab | 278 ++++-- Assets/GameMain/UI/UIItems/RepoItem.prefab | 16 +- Assets/GameMain/UI/UIItems/TagItem.prefab | 2 +- Assets/Launcher.unity | 47 + docs/CombatReward爆率表.xlsx | Bin 0 -> 26333 bytes docs/IconColorDesgin.md | 225 +++++ docs/TODO.md | 2 +- 147 files changed, 9866 insertions(+), 277 deletions(-) create mode 100644 Assets/GameMain/Scripts/CustomComponent/SpriteCacheComponent.cs rename Assets/GameMain/Scripts/{Event/RepoForm/RepoItemSelectedEventArgs.cs.meta => CustomComponent/SpriteCacheComponent.cs.meta} (83%) create mode 100644 Assets/GameMain/Scripts/Event/RepoForm/RepoFormReturnEventArgs.cs create mode 100644 Assets/GameMain/Scripts/Event/RepoForm/RepoFormReturnEventArgs.cs.meta create mode 100644 Assets/GameMain/Scripts/Event/RepoForm/RepoItemDetailRequestedEventArgs.cs create mode 100644 Assets/GameMain/Scripts/Event/RepoForm/RepoItemDetailRequestedEventArgs.cs.meta create mode 100644 Assets/GameMain/Scripts/Event/RepoForm/RepoItemDragEndedEventArgs.cs create mode 100644 Assets/GameMain/Scripts/Event/RepoForm/RepoItemDragEndedEventArgs.cs.meta delete mode 100644 Assets/GameMain/Scripts/Event/RepoForm/RepoItemSelectedEventArgs.cs create mode 100644 Assets/GameMain/Scripts/UI/General/Context/ItemDescFormContext.cs create mode 100644 Assets/GameMain/Scripts/UI/General/Context/ItemDescFormContext.cs.meta create mode 100644 Assets/GameMain/Scripts/UI/General/Controller/ItemDescFormController.cs create mode 100644 Assets/GameMain/Scripts/UI/General/Controller/ItemDescFormController.cs.meta create mode 100644 Assets/GameMain/Scripts/UI/General/IconColorGenerator.cs create mode 100644 Assets/GameMain/Scripts/UI/General/IconColorGenerator.cs.meta create mode 100644 Assets/GameMain/Scripts/UI/General/RawData/ItemDescFormRawData.cs create mode 100644 Assets/GameMain/Scripts/UI/General/RawData/ItemDescFormRawData.cs.meta create mode 100644 Assets/GameMain/Scripts/UI/General/UseCase/ItemDescFormUseCase.cs create mode 100644 Assets/GameMain/Scripts/UI/General/UseCase/ItemDescFormUseCase.cs.meta create mode 100644 Assets/GameMain/Scripts/UI/General/View/ItemDescForm.cs create mode 100644 Assets/GameMain/Scripts/UI/General/View/ItemDescForm.cs.meta create mode 100644 Assets/GameMain/Textures/Base.meta create mode 100644 Assets/GameMain/Textures/Base.png create mode 100644 Assets/GameMain/Textures/Base.png.meta create mode 100644 Assets/GameMain/Textures/Base/000000.png create mode 100644 Assets/GameMain/Textures/Base/000000.png.meta create mode 100644 Assets/GameMain/Textures/Base/0000FF.png create mode 100644 Assets/GameMain/Textures/Base/0000FF.png.meta create mode 100644 Assets/GameMain/Textures/Base/00FF00.png create mode 100644 Assets/GameMain/Textures/Base/00FF00.png.meta create mode 100644 Assets/GameMain/Textures/Base/00FFFF.png create mode 100644 Assets/GameMain/Textures/Base/00FFFF.png.meta create mode 100644 Assets/GameMain/Textures/Base/333333.png create mode 100644 Assets/GameMain/Textures/Base/333333.png.meta create mode 100644 Assets/GameMain/Textures/Base/3333FF.png create mode 100644 Assets/GameMain/Textures/Base/3333FF.png.meta create mode 100644 Assets/GameMain/Textures/Base/33FF33.png create mode 100644 Assets/GameMain/Textures/Base/33FF33.png.meta create mode 100644 Assets/GameMain/Textures/Base/33FFFF.png create mode 100644 Assets/GameMain/Textures/Base/33FFFF.png.meta create mode 100644 Assets/GameMain/Textures/Base/666666.png create mode 100644 Assets/GameMain/Textures/Base/666666.png.meta create mode 100644 Assets/GameMain/Textures/Base/6666FF.png create mode 100644 Assets/GameMain/Textures/Base/6666FF.png.meta create mode 100644 Assets/GameMain/Textures/Base/66FF66.png create mode 100644 Assets/GameMain/Textures/Base/66FF66.png.meta create mode 100644 Assets/GameMain/Textures/Base/66FFFF.png create mode 100644 Assets/GameMain/Textures/Base/66FFFF.png.meta create mode 100644 Assets/GameMain/Textures/Base/999999.png create mode 100644 Assets/GameMain/Textures/Base/999999.png.meta create mode 100644 Assets/GameMain/Textures/Base/9999FF.png create mode 100644 Assets/GameMain/Textures/Base/9999FF.png.meta create mode 100644 Assets/GameMain/Textures/Base/99FF99.png create mode 100644 Assets/GameMain/Textures/Base/99FF99.png.meta create mode 100644 Assets/GameMain/Textures/Base/99FFFF.png create mode 100644 Assets/GameMain/Textures/Base/99FFFF.png.meta create mode 100644 Assets/GameMain/Textures/Base/CCCCCC.png create mode 100644 Assets/GameMain/Textures/Base/CCCCCC.png.meta create mode 100644 Assets/GameMain/Textures/Base/CCCCFF.png create mode 100644 Assets/GameMain/Textures/Base/CCCCFF.png.meta create mode 100644 Assets/GameMain/Textures/Base/CCFFCC.png create mode 100644 Assets/GameMain/Textures/Base/CCFFCC.png.meta create mode 100644 Assets/GameMain/Textures/Base/CCFFFF.png create mode 100644 Assets/GameMain/Textures/Base/CCFFFF.png.meta create mode 100644 Assets/GameMain/Textures/Base/FF0000.png create mode 100644 Assets/GameMain/Textures/Base/FF0000.png.meta create mode 100644 Assets/GameMain/Textures/Base/FF00FF.png create mode 100644 Assets/GameMain/Textures/Base/FF00FF.png.meta create mode 100644 Assets/GameMain/Textures/Base/FF3333.png create mode 100644 Assets/GameMain/Textures/Base/FF3333.png.meta create mode 100644 Assets/GameMain/Textures/Base/FF33FF.png create mode 100644 Assets/GameMain/Textures/Base/FF33FF.png.meta create mode 100644 Assets/GameMain/Textures/Base/FF6666.png create mode 100644 Assets/GameMain/Textures/Base/FF6666.png.meta create mode 100644 Assets/GameMain/Textures/Base/FF66FF.png create mode 100644 Assets/GameMain/Textures/Base/FF66FF.png.meta create mode 100644 Assets/GameMain/Textures/Base/FF9999.png create mode 100644 Assets/GameMain/Textures/Base/FF9999.png.meta create mode 100644 Assets/GameMain/Textures/Base/FF99FF.png create mode 100644 Assets/GameMain/Textures/Base/FF99FF.png.meta create mode 100644 Assets/GameMain/Textures/Base/FFCCCC.png create mode 100644 Assets/GameMain/Textures/Base/FFCCCC.png.meta create mode 100644 Assets/GameMain/Textures/Base/FFCCFF.png create mode 100644 Assets/GameMain/Textures/Base/FFCCFF.png.meta create mode 100644 Assets/GameMain/Textures/Base/FFFF00.png create mode 100644 Assets/GameMain/Textures/Base/FFFF00.png.meta create mode 100644 Assets/GameMain/Textures/Base/FFFF33.png create mode 100644 Assets/GameMain/Textures/Base/FFFF33.png.meta create mode 100644 Assets/GameMain/Textures/Base/FFFF66.png create mode 100644 Assets/GameMain/Textures/Base/FFFF66.png.meta create mode 100644 Assets/GameMain/Textures/Base/FFFF99.png create mode 100644 Assets/GameMain/Textures/Base/FFFF99.png.meta create mode 100644 Assets/GameMain/Textures/Base/FFFFCC.png create mode 100644 Assets/GameMain/Textures/Base/FFFFCC.png.meta create mode 100644 Assets/GameMain/Textures/Base/FFFFFF.png create mode 100644 Assets/GameMain/Textures/Base/FFFFFF.png.meta create mode 100644 Assets/GameMain/Textures/Bearing.meta create mode 100644 Assets/GameMain/Textures/Bearing.png create mode 100644 Assets/GameMain/Textures/Bearing.png.meta create mode 100644 Assets/GameMain/Textures/Capsule.png create mode 100644 Assets/GameMain/Textures/Capsule.png.meta create mode 100644 Assets/GameMain/Textures/ControlBase.png create mode 100644 Assets/GameMain/Textures/ControlBase.png.meta create mode 100644 Assets/GameMain/Textures/ElementBase.png create mode 100644 Assets/GameMain/Textures/ElementBase.png.meta create mode 100644 Assets/GameMain/Textures/HexagonFlatTop.png create mode 100644 Assets/GameMain/Textures/HexagonFlatTop.png.meta create mode 100644 Assets/GameMain/Textures/HexagonPointedTop.png create mode 100644 Assets/GameMain/Textures/HexagonPointedTop.png.meta create mode 100644 Assets/GameMain/Textures/IsometricDiamond.png create mode 100644 Assets/GameMain/Textures/IsometricDiamond.png.meta create mode 100644 Assets/GameMain/Textures/Muzzle.meta create mode 100644 Assets/GameMain/Textures/Muzzle.png create mode 100644 Assets/GameMain/Textures/Muzzle.png.meta create mode 100644 Assets/GameMain/UI/UIForms/ItemDescForm.prefab create mode 100644 Assets/GameMain/UI/UIForms/ItemDescForm.prefab.meta create mode 100644 docs/CombatReward爆率表.xlsx create mode 100644 docs/IconColorDesgin.md diff --git a/Assets/GameMain/DataTables/BaseComp.txt b/Assets/GameMain/DataTables/BaseComp.txt index 400c172..b2d8a39 100644 --- a/Assets/GameMain/DataTables/BaseComp.txt +++ b/Assets/GameMain/DataTables/BaseComp.txt @@ -1,6 +1,6 @@ -# Id 策划备注 EntityId Name AttackSpeed AttackSpeedPerLevel PropertyType Constraint PossibleTag -# int int string float[] float AttackPropertyType string TagType[] -# 底座编号 实体Id 底座名 各品质攻击速度(秒/次) 每级提升攻击速度 攻击属性 属性约束 可能出现的Tag - 1 301 元素底座 [2,1.5,1,0.8,0.7] -0.2 Fire [Fire,BurnSpread,IgniteBurst,Inferno] - 2 301 控制底座 [4,3.8,3.6,3.4,3.2] -0.1 Ice [Ice,FreezeMask,Shatter,AbsoluteZero] - 3 301 穿透底座 [1,0,8,0,6,0.4,0.2] 0 Physics [Pierce,Crit,Overpenetrate,Execution] +# Id 策划备注 Name AttackSpeed AttackSpeedPerLevel PropertyType Constraint PossibleTag +# int string float[] float AttackPropertyType string TagType[] +# 底座编号 底座名 各品质攻击速度(次/秒) 每级提升攻击速度 攻击属性 属性约束 可能出现的Tag + 1 元素底座 [2,2.1,2.2,2.3,2.5] 0.2 Fire [Fire,BurnSpread,IgniteBurst,Inferno] + 2 控制底座 [4,4.2,4.4,4.6,4.8] 0.1 Ice [Ice,FreezeMask,Shatter,AbsoluteZero] + 3 穿透底座 [1,1,1,1,1] 0 Physics [Pierce,Crit,Overpenetrate,Execution] diff --git a/Assets/GameMain/DataTables/BearingComp.txt b/Assets/GameMain/DataTables/BearingComp.txt index 2e1871c..f7ae8ec 100644 --- a/Assets/GameMain/DataTables/BearingComp.txt +++ b/Assets/GameMain/DataTables/BearingComp.txt @@ -1,6 +1,6 @@ -# Id 策划备注 EntityId Name RotateSpeed RotateSpeedPerLevel AttackRange AttackRangePerLevel Constraint PossibleTag -# int int string float[] float float[] float string TagType[] -# 轴承编号 实体Id 轴承名 各品质旋转速度 每级提升旋转速度 各品质攻击范围 每级提升攻击范围 属性约束 可能出现的Tag - 1 201 元素轴承 [10,12,13,14,15] 15 [2,2,2,2,2] 0.3 [Fire,BurnSpread,IgniteBurst,Inferno] - 2 201 控制轴承 [20,25,30,32,35] 0 [6,6.5,7,8,8] 0.2 [Ice,FreezeMask,Shatter,AbsoluteZero] - 3 201 穿透轴承 [60,70,80,90,100] 20 [4,4.5,5,5.5,6] 0 [Pierce,Crit,Overpenetrate,Execution] +# Id 策划备注 Name RotateSpeed RotateSpeedPerLevel AttackRange AttackRangePerLevel Constraint PossibleTag +# int string float[] float float[] float string TagType[] +# 轴承编号 轴承名 各品质旋转速度 每级提升旋转速度 各品质攻击范围 每级提升攻击范围 属性约束 可能出现的Tag + 1 元素轴承 [10,12,13,14,15] 15 [2,2,2,2,2] 0.3 [Fire,BurnSpread,IgniteBurst,Inferno] + 2 控制轴承 [20,25,30,32,35] 0 [6,6.5,7,8,8] 0.2 [Ice,FreezeMask,Shatter,AbsoluteZero] + 3 穿透轴承 [60,70,80,90,100] 20 [4,4.5,5,5.5,6] 0 [Pierce,Crit,Overpenetrate,Execution] diff --git a/Assets/GameMain/DataTables/MuzzleComp.txt b/Assets/GameMain/DataTables/MuzzleComp.txt index a693061..8085750 100644 --- a/Assets/GameMain/DataTables/MuzzleComp.txt +++ b/Assets/GameMain/DataTables/MuzzleComp.txt @@ -1,6 +1,6 @@ -# Id 策划备注 EntityId Name AttackDamage AttackDamagePerLevel DamageRandomRate Method Constraint PossibleTag -# int int string int[] int float AttackMethodType Constraint TagType[] -# 枪口编号 策划备注 实体Id 枪口名 各品质伤害 每级伤害提升 伤害浮动 攻击方式 Constraint 可能出现的Tag - 1 101 元素枪口 [20,30,40,50,80] 10 0.05 NormalBullet [Fire,BurnSpread,IgniteBurst,Inferno] - 2 101 控制枪口 [30,50,70,90,100] 20 0.01 NormalBullet [Ice,FreezeMask,Shatter,AbsoluteZero] - 3 101 穿透枪口 [50,55,60,80,90] 30 0.02 NormalBullet [Pierce,Crit,Overpenetrate,Execution] +# Id 策划备注 Name AttackDamage AttackDamagePerLevel DamageRandomRate Method Constraint PossibleTag +# int string int[] int float AttackMethodType Constraint TagType[] +# 枪口编号 策划备注 枪口名 各品质伤害 每级伤害提升 伤害浮动 攻击方式 Constraint 可能出现的Tag + 1 元素枪口 [20,30,40,50,80] 10 0.05 NormalBullet [Fire,BurnSpread,IgniteBurst,Inferno] + 2 控制枪口 [30,50,70,90,100] 20 0.01 NormalBullet [Ice,FreezeMask,Shatter,AbsoluteZero] + 3 穿透枪口 [50,55,60,80,90] 30 0.02 NormalBullet [Pierce,Crit,Overpenetrate,Execution] diff --git a/Assets/GameMain/DataTables/OutGameDropPool.txt b/Assets/GameMain/DataTables/OutGameDropPool.txt index c6876d6..1d962e7 100644 --- a/Assets/GameMain/DataTables/OutGameDropPool.txt +++ b/Assets/GameMain/DataTables/OutGameDropPool.txt @@ -10,12 +10,39 @@ 7 Plain White BaseComp 1 10 1 10 8 Plain White BaseComp 2 10 1 10 9 Plain White BaseComp 3 10 1 10 - 10 Plain Green MuzzleComp 1 5 1 10 - 11 Plain Green MuzzleComp 2 5 1 10 - 12 Plain Green MuzzleComp 3 5 1 10 - 13 Plain Green BearingComp 1 5 1 10 - 14 Plain Green BearingComp 2 5 1 10 - 15 Plain Green BearingComp 3 5 1 10 - 16 Plain Green BaseComp 1 5 1 10 - 17 Plain Green BaseComp 2 5 1 10 - 18 Plain Green BaseComp 3 5 1 10 + 10 Plain Green MuzzleComp 1 5 2 10 + 11 Plain Green MuzzleComp 2 5 2 10 + 12 Plain Green MuzzleComp 3 5 2 10 + 13 Plain Green BearingComp 1 5 2 10 + 14 Plain Green BearingComp 2 5 2 10 + 15 Plain Green BearingComp 3 5 2 10 + 16 Plain Green BaseComp 1 5 2 10 + 17 Plain Green BaseComp 2 5 2 10 + 18 Plain Green BaseComp 3 5 2 10 + 19 Plain Blue MuzzleComp 1 3 3 15 + 20 Plain Blue MuzzleComp 2 3 3 15 + 21 Plain Blue MuzzleComp 3 3 3 15 + 22 Plain Blue BearingComp 1 3 3 15 + 23 Plain Blue BearingComp 2 3 3 15 + 24 Plain Blue BearingComp 3 3 3 15 + 25 Plain Blue BaseComp 1 3 3 15 + 26 Plain Blue BaseComp 2 3 3 15 + 27 Plain Blue BaseComp 3 3 3 15 + 28 Plain Purple MuzzleComp 1 2 4 20 + 29 Plain Purple MuzzleComp 2 2 4 20 + 30 Plain Purple MuzzleComp 3 2 4 20 + 31 Plain Purple BearingComp 1 2 4 20 + 32 Plain Purple BearingComp 2 2 4 20 + 33 Plain Purple BearingComp 3 2 4 20 + 34 Plain Purple BaseComp 1 2 4 20 + 35 Plain Purple BaseComp 2 2 4 20 + 36 Plain Purple BaseComp 3 2 4 20 + 37 Plain Red MuzzleComp 1 1 5 50 + 38 Plain Red MuzzleComp 2 1 5 50 + 39 Plain Red MuzzleComp 3 1 5 50 + 40 Plain Red BearingComp 1 1 5 50 + 41 Plain Red BearingComp 2 1 5 50 + 42 Plain Red BearingComp 3 1 5 50 + 43 Plain Red BaseComp 1 1 5 50 + 44 Plain Red BaseComp 2 1 5 50 + 45 Plain Red BaseComp 3 1 5 50 diff --git a/Assets/GameMain/Entities/TowerEntity.prefab b/Assets/GameMain/Entities/TowerEntity.prefab index ca6c11c..a31ab9c 100644 --- a/Assets/GameMain/Entities/TowerEntity.prefab +++ b/Assets/GameMain/Entities/TowerEntity.prefab @@ -74,7 +74,7 @@ SpriteRenderer: m_SortingLayerID: -1805677833 m_SortingLayer: -1 m_SortingOrder: 2 - m_Sprite: {fileID: 7482667652216324306, guid: 75f5f34dc1b5347e0b8351032682f224, + m_Sprite: {fileID: 7482667652216324306, guid: 5ba74e3a185274149b15c24b321bead2, type: 3} m_Color: {r: 1, g: 0.40566027, b: 0.40566027, a: 1} m_FlipX: 0 @@ -155,7 +155,6 @@ MonoBehaviour: _baseComp: {fileID: 9032148832249544824} _scanOrigin: {fileID: 6791423131335728073} _retargetInterval: 0.1 - _autoUpdate: 0 _attackRangeRenderer: {fileID: 4014432302095443276} _attackRangeSegments: 64 _attackRangeLineWidth: 0.08 @@ -352,7 +351,7 @@ SpriteRenderer: m_SortingLayerID: -1805677833 m_SortingLayer: -1 m_SortingOrder: 1 - m_Sprite: {fileID: -2413806693520163455, guid: a86470a33a6bf42c4b3595704624658b, + m_Sprite: {fileID: -2413806693520163455, guid: e31321df62f1587469b0733897970679, type: 3} m_Color: {r: 1, g: 1, b: 1, a: 1} m_FlipX: 0 @@ -455,7 +454,7 @@ SpriteRenderer: m_SortingLayerID: -1805677833 m_SortingLayer: -1 m_SortingOrder: 0 - m_Sprite: {fileID: 7482667652216324306, guid: 311925a002f4447b3a28927169b83ea6, + m_Sprite: {fileID: 7482667652216324306, guid: 80a3790c48fc91d4ebcb4d7e2efbb8c8, type: 3} m_Color: {r: 0.3584906, g: 0.3584906, b: 0.3584906, a: 1} m_FlipX: 0 diff --git a/Assets/GameMain/Scripts/Base/GameEntry.Custom.cs b/Assets/GameMain/Scripts/Base/GameEntry.Custom.cs index a2e6a8f..e805f32 100644 --- a/Assets/GameMain/Scripts/Base/GameEntry.Custom.cs +++ b/Assets/GameMain/Scripts/Base/GameEntry.Custom.cs @@ -21,6 +21,8 @@ public partial class GameEntry public static ShopNodeComponent ShopNode { get; private set; } public static ResolutionAdapterComponent ResolutionAdapter { get; private set; } + + public static SpriteCacheComponent SpriteCache { get; private set; } private static void InitCustomComponents() { @@ -32,5 +34,6 @@ public partial class GameEntry CombatNode = UnityGameFramework.Runtime.GameEntry.GetComponent(); ShopNode = UnityGameFramework.Runtime.GameEntry.GetComponent(); ResolutionAdapter = UnityGameFramework.Runtime.GameEntry.GetComponent(); + SpriteCache = UnityGameFramework.Runtime.GameEntry.GetComponent(); } } \ No newline at end of file diff --git a/Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatScheduler/CombatResourceManager.cs b/Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatScheduler/CombatResourceManager.cs index 9120383..fc42020 100644 --- a/Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatScheduler/CombatResourceManager.cs +++ b/Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatScheduler/CombatResourceManager.cs @@ -10,9 +10,15 @@ namespace GeometryTD.CustomComponent { internal sealed class CombatResourceManager { + // 每次击杀敌人后,进入“掉组件判定”的概率: + // chance = clamp(DropChanceBase + (phaseIndex - 1) * DropChancePerPhase, 0, DropChanceCap) private const float DropChanceBase = 0.05f; - private const float DropChancePerPhase = 0.0125f; - private const float DropChanceCap = 0.45f; + private const float DropChancePerPhase = 0.2f; + private const float DropChanceCap = 0.2f; + + // 用于把阶段映射到 [0,1] 的稀有度曲线输入: + // phaseT = clamp01((phaseIndex - 1) / RarityCurveScalePhase) + // 该值越大,稀有度随阶段提升的节奏越慢。 private const float RarityCurveScalePhase = 30f; private readonly List _eligibleDropPoolBuffer = new(); @@ -78,6 +84,13 @@ namespace GeometryTD.CustomComponent _rewardInventory.Gold += gold; } + /// + /// 击杀敌人时的掉落入口。 + /// displayPhaseIndex 会影响: + /// 1) 总掉落概率(由 DropChanceBase / DropChancePerPhase / DropChanceCap 决定) + /// 2) 稀有度倾向(通过 phaseT 进入 RollRarity) + /// themeType 会按关卡主题过滤掉落池(LevelThemeType 不匹配直接不参与)。 + /// public bool TryRollOutGameItemDrop(int displayPhaseIndex, LevelThemeType themeType) { int phaseIndex = Mathf.Max(1, displayPhaseIndex); @@ -113,6 +126,10 @@ namespace GeometryTD.CustomComponent return false; } + /// + /// 直接抽取一个具体掉落物(不走前面的总掉率门槛)。 + /// 但 displayPhaseIndex 和 themeType 仍会通过掉落池过滤、稀有度加权影响结果。 + /// public bool TryRollOutGameItem(int displayPhaseIndex, LevelThemeType themeType, out TowerCompItemData droppedItem) { droppedItem = null; @@ -178,6 +195,12 @@ namespace GeometryTD.CustomComponent return candidates; } + /// + /// 两阶段加权抽样: + /// 1) 先按主题 + 阶段区间过滤候选行 + /// 2) 先抽稀有度(稀有度权重 = 同稀有度所有行的 row.Weight * 稀有度曲线权重 之和) + /// 3) 在该稀有度内再按 row.Weight 抽具体行 + /// private bool TryPickDropPoolRow(int displayPhaseIndex, LevelThemeType themeType, out DROutGameDropPool selectedRow) { selectedRow = null; @@ -197,11 +220,13 @@ namespace GeometryTD.CustomComponent continue; } + // 主题过滤:主题不匹配的行,概率为 0。 if (row.LevelThemeType != themeType) { continue; } + // 阶段过滤:不在 [MinPhase, MaxPhase] 的行,概率为 0。 if (displayPhaseIndex < row.MinPhase || displayPhaseIndex > row.MaxPhase) { continue; @@ -230,6 +255,7 @@ namespace GeometryTD.CustomComponent continue; } + // 在已选稀有度内,row.Weight 是线性权重倍率。 totalWeight += Mathf.Max(1, row.Weight); } @@ -260,6 +286,12 @@ namespace GeometryTD.CustomComponent return selectedRow != null; } + /// + /// 在过滤后的候选行里抽稀有度。 + /// 实际稀有度权重公式: + /// rarityWeight = sum(max(1, row.Weight) * GetRarityCurveWeight(row.Rarity, phaseT)) + /// 其中 phaseT = clamp01((displayPhaseIndex - 1) / RarityCurveScalePhase)。 + /// private RarityType RollRarity(int displayPhaseIndex, List candidates) { _rarityRollWeightBuffer.Clear(); @@ -318,6 +350,14 @@ namespace GeometryTD.CustomComponent return RarityType.None; } + /// + /// 返回各稀有度在当前阶段的曲线权重。 + /// 返回值越大,该稀有度在 RollRarity 中越容易被抽到。 + /// phaseT 取值范围为 [0,1]: + /// - White/Green:钟形趋势(前中期权重更高) + /// - Blue/Purple:随阶段近似线性上升 + /// - Red:随阶段二次上升(前期很低,后期明显抬升) + /// private static float GetRarityCurveWeight(RarityType rarityType, float phaseT) { float hump = Mathf.Exp(-Mathf.Pow((phaseT - 0.35f) / 0.28f, 2f)); diff --git a/Assets/GameMain/Scripts/CustomComponent/SpriteCacheComponent.cs b/Assets/GameMain/Scripts/CustomComponent/SpriteCacheComponent.cs new file mode 100644 index 0000000..ea6c40f --- /dev/null +++ b/Assets/GameMain/Scripts/CustomComponent/SpriteCacheComponent.cs @@ -0,0 +1,99 @@ +using System; +using System.Collections.Generic; +using GameFramework.Resource; +using GeometryTD.CustomUtility; +using UnityEngine; +using UnityGameFramework.Runtime; + +namespace GeometryTD.CustomComponent +{ + public class SpriteCacheComponent : GameFrameworkComponent + { + [SerializeField] private float _pixelsPerUnit = 100f; + [SerializeField] private Vector2 _defaultPivot = new(0.5f, 0.5f); + + private Dictionary _spriteCache; + private Dictionary>> _pendingCallbacks; + private ResourceComponent _resource; + + void Start() + { + _spriteCache = new Dictionary(); + _pendingCallbacks = new Dictionary>>(); + _resource = GameEntry.Resource; + } + + public void GetSprite(string assetName, Action callback) + { + if (_spriteCache.TryGetValue(assetName, out var sprite)) + { + callback?.Invoke(sprite); + return; + } + + if (_pendingCallbacks.TryGetValue(assetName, out var pendingList)) + { + pendingList.Add(callback); + return; + } + + _pendingCallbacks[assetName] = new List> { callback }; + _resource.LoadAsset + ( + AssetUtility.GetTextureAsset(assetName), + Constant.AssetPriority.UIFormAsset, + new LoadAssetCallbacks( + (resourcePath, asset, duration, userData) => + { + Log.Debug(resourcePath); + Texture2D texture = asset as Texture2D; + Sprite loadedSprite = null; + + if (texture != null) + { + loadedSprite = Sprite.Create( + texture, + new Rect(0, 0, texture.width, texture.height), + _defaultPivot, + _pixelsPerUnit); + + _spriteCache[assetName] = loadedSprite; + } + + if (_pendingCallbacks.TryGetValue(assetName, out var callbacks)) + { + _pendingCallbacks.Remove(assetName); + for (int i = 0; i < callbacks.Count; i++) + { + callbacks[i]?.Invoke(loadedSprite); + } + } + }, + (resourcePath, status, errorMessage, userData) => + { + Log.Error("Can not load icon '{0}' from '{1}' with error message '{2}'.", + assetName, + resourcePath, + errorMessage); + + if (_pendingCallbacks.TryGetValue(assetName, out var callbacks)) + { + _pendingCallbacks.Remove(assetName); + for (int i = 0; i < callbacks.Count; i++) + { + callbacks[i]?.Invoke(null); + } + } + } + ) + ); + } + + private void OnDestroy() + { + _spriteCache.Clear(); + _pendingCallbacks.Clear(); + _resource = null; + } + } +} diff --git a/Assets/GameMain/Scripts/Event/RepoForm/RepoItemSelectedEventArgs.cs.meta b/Assets/GameMain/Scripts/CustomComponent/SpriteCacheComponent.cs.meta similarity index 83% rename from Assets/GameMain/Scripts/Event/RepoForm/RepoItemSelectedEventArgs.cs.meta rename to Assets/GameMain/Scripts/CustomComponent/SpriteCacheComponent.cs.meta index ff82285..8669851 100644 --- a/Assets/GameMain/Scripts/Event/RepoForm/RepoItemSelectedEventArgs.cs.meta +++ b/Assets/GameMain/Scripts/CustomComponent/SpriteCacheComponent.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c5c0e535b0c3a4c4fa2a9e12f57c77ae +guid: 8b0237c7a9ed81745b92fe3f1bd45af4 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/GameMain/Scripts/DataTable/DRBaseComp.cs b/Assets/GameMain/Scripts/DataTable/DRBaseComp.cs index f9fe3cd..82653de 100644 --- a/Assets/GameMain/Scripts/DataTable/DRBaseComp.cs +++ b/Assets/GameMain/Scripts/DataTable/DRBaseComp.cs @@ -16,12 +16,7 @@ namespace GeometryTD.DataTable /// 获取底座组件编号 /// public override int Id => m_Id; - - /// - /// 获取底座组件实体编号 - /// - public int EntityId { get; private set; } - + /// /// 获取底座组件名 /// @@ -64,7 +59,6 @@ namespace GeometryTD.DataTable index++; m_Id = int.Parse(columnStrings[index++]); index++; - EntityId = int.Parse(columnStrings[index++]); Name = columnStrings[index++]; AttackSpeed = GenerateAttackSpeed(columnStrings[index++]); AttackSpeedPerLevel = float.Parse(columnStrings[index++]); diff --git a/Assets/GameMain/Scripts/DataTable/DRBearingComp.cs b/Assets/GameMain/Scripts/DataTable/DRBearingComp.cs index 072254e..54cc521 100644 --- a/Assets/GameMain/Scripts/DataTable/DRBearingComp.cs +++ b/Assets/GameMain/Scripts/DataTable/DRBearingComp.cs @@ -17,11 +17,6 @@ namespace GeometryTD.DataTable /// public override int Id => m_Id; - /// - /// 获取轴承组件实体编号 - /// - public int EntityId { get; private set; } - /// /// 获取轴承组件名 /// @@ -69,7 +64,6 @@ namespace GeometryTD.DataTable index++; m_Id = int.Parse(columnStrings[index++]); index++; - EntityId = int.Parse(columnStrings[index++]); Name = columnStrings[index++]; RotateSpeed = GenerateFloatArray(columnStrings[index++]); RotateSpeedPerLevel = float.Parse(columnStrings[index++]); diff --git a/Assets/GameMain/Scripts/DataTable/DRMuzzleComp.cs b/Assets/GameMain/Scripts/DataTable/DRMuzzleComp.cs index c36b938..15ff629 100644 --- a/Assets/GameMain/Scripts/DataTable/DRMuzzleComp.cs +++ b/Assets/GameMain/Scripts/DataTable/DRMuzzleComp.cs @@ -16,12 +16,7 @@ namespace GeometryTD.DataTable /// 获取枪口组件编号 /// public override int Id => m_Id; - - /// - /// 获取枪口组件实体编号 - /// - public int EntityId { get; private set; } - + /// /// 获取枪口组件名 /// @@ -69,7 +64,6 @@ namespace GeometryTD.DataTable index++; m_Id = int.Parse(columnStrings[index++]); index++; - EntityId = int.Parse(columnStrings[index++]); Name = columnStrings[index++]; AttackDamage = GenerateAttackDamage(columnStrings[index++]); AttackDamagePerLevel = int.Parse(columnStrings[index++]); diff --git a/Assets/GameMain/Scripts/Event/RepoForm/RepoFormReturnEventArgs.cs b/Assets/GameMain/Scripts/Event/RepoForm/RepoFormReturnEventArgs.cs new file mode 100644 index 0000000..d9fa41e --- /dev/null +++ b/Assets/GameMain/Scripts/Event/RepoForm/RepoFormReturnEventArgs.cs @@ -0,0 +1,21 @@ +using GameFramework; +using GameFramework.Event; + +namespace GeometryTD.CustomEvent +{ + public class RepoFormReturnEventArgs : GameEventArgs + { + public static int EventId => typeof(RepoFormReturnEventArgs).GetHashCode(); + + public override int Id => EventId; + + public override void Clear() + { + } + + public static RepoFormReturnEventArgs Create() + { + return ReferencePool.Acquire(); + } + } +} \ No newline at end of file diff --git a/Assets/GameMain/Scripts/Event/RepoForm/RepoFormReturnEventArgs.cs.meta b/Assets/GameMain/Scripts/Event/RepoForm/RepoFormReturnEventArgs.cs.meta new file mode 100644 index 0000000..98dd5a3 --- /dev/null +++ b/Assets/GameMain/Scripts/Event/RepoForm/RepoFormReturnEventArgs.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 715637c38a07476890901dd8737fc052 +timeCreated: 1772595255 \ No newline at end of file diff --git a/Assets/GameMain/Scripts/Event/RepoForm/RepoItemDetailRequestedEventArgs.cs b/Assets/GameMain/Scripts/Event/RepoForm/RepoItemDetailRequestedEventArgs.cs new file mode 100644 index 0000000..fc93d44 --- /dev/null +++ b/Assets/GameMain/Scripts/Event/RepoForm/RepoItemDetailRequestedEventArgs.cs @@ -0,0 +1,31 @@ +using GameFramework; +using GameFramework.Event; +using UnityEngine; + +namespace GeometryTD.CustomEvent +{ + public class RepoItemDetailRequestedEventArgs : GameEventArgs + { + public static int EventId => typeof(RepoItemDetailRequestedEventArgs).GetHashCode(); + + public override int Id => EventId; + + public long ItemId { get; private set; } + + public Vector3 TargetPos { get; private set; } + + public static RepoItemDetailRequestedEventArgs Create(long itemId, Vector3 targetPos) + { + var args = ReferencePool.Acquire(); + args.ItemId = itemId; + args.TargetPos = targetPos; + return args; + } + + public override void Clear() + { + ItemId = 0; + TargetPos = Vector3.zero; + } + } +} diff --git a/Assets/GameMain/Scripts/Event/RepoForm/RepoItemDetailRequestedEventArgs.cs.meta b/Assets/GameMain/Scripts/Event/RepoForm/RepoItemDetailRequestedEventArgs.cs.meta new file mode 100644 index 0000000..073e368 --- /dev/null +++ b/Assets/GameMain/Scripts/Event/RepoForm/RepoItemDetailRequestedEventArgs.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6e6a01b06c4b4a468d40356dc05e003f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: \ No newline at end of file diff --git a/Assets/GameMain/Scripts/Event/RepoForm/RepoItemDragEndedEventArgs.cs b/Assets/GameMain/Scripts/Event/RepoForm/RepoItemDragEndedEventArgs.cs new file mode 100644 index 0000000..8d8a8e0 --- /dev/null +++ b/Assets/GameMain/Scripts/Event/RepoForm/RepoItemDragEndedEventArgs.cs @@ -0,0 +1,30 @@ +using GameFramework; +using GameFramework.Event; + +namespace GeometryTD.CustomEvent +{ + public class RepoItemDragEndedEventArgs : GameEventArgs + { + public static int EventId => typeof(RepoItemDragEndedEventArgs).GetHashCode(); + + public override int Id => EventId; + + public long ItemId { get; private set; } + + public bool Assigned { get; private set; } + + public static RepoItemDragEndedEventArgs Create(long itemId, bool assigned) + { + RepoItemDragEndedEventArgs args = ReferencePool.Acquire(); + args.ItemId = itemId; + args.Assigned = assigned; + return args; + } + + public override void Clear() + { + ItemId = 0; + Assigned = false; + } + } +} diff --git a/Assets/GameMain/Scripts/Event/RepoForm/RepoItemDragEndedEventArgs.cs.meta b/Assets/GameMain/Scripts/Event/RepoForm/RepoItemDragEndedEventArgs.cs.meta new file mode 100644 index 0000000..52a028e --- /dev/null +++ b/Assets/GameMain/Scripts/Event/RepoForm/RepoItemDragEndedEventArgs.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: de9c832a47e04d39b84c3fb561602bb3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: \ No newline at end of file diff --git a/Assets/GameMain/Scripts/Event/RepoForm/RepoItemSelectedEventArgs.cs b/Assets/GameMain/Scripts/Event/RepoForm/RepoItemSelectedEventArgs.cs deleted file mode 100644 index c1db4fc..0000000 --- a/Assets/GameMain/Scripts/Event/RepoForm/RepoItemSelectedEventArgs.cs +++ /dev/null @@ -1,26 +0,0 @@ -using GameFramework; -using GameFramework.Event; - -namespace GeometryTD.CustomEvent -{ - public class RepoItemSelectedEventArgs : GameEventArgs - { - public static int EventId => typeof(RepoItemSelectedEventArgs).GetHashCode(); - - public override int Id => EventId; - - public long ItemId { get; private set; } - - public static RepoItemSelectedEventArgs Create(long itemId) - { - RepoItemSelectedEventArgs args = ReferencePool.Acquire(); - args.ItemId = itemId; - return args; - } - - public override void Clear() - { - ItemId = 0; - } - } -} diff --git a/Assets/GameMain/Scripts/UI/Combat/Controller/CombatFinishFormController.cs b/Assets/GameMain/Scripts/UI/Combat/Controller/CombatFinishFormController.cs index 4c526e4..5c67cdd 100644 --- a/Assets/GameMain/Scripts/UI/Combat/Controller/CombatFinishFormController.cs +++ b/Assets/GameMain/Scripts/UI/Combat/Controller/CombatFinishFormController.cs @@ -1,7 +1,9 @@ using System.Collections.Generic; using GameFramework.Event; using GeometryTD.CustomEvent; +using GeometryTD.CustomUtility; using GeometryTD.Definition; +using UnityEngine; using UnityGameFramework.Runtime; namespace GeometryTD.UI @@ -9,6 +11,14 @@ namespace GeometryTD.UI public class CombatFinishFormController : UIFormControllerCommonBase { private CombatFinishFormUseCase _useCase; + private readonly Dictionary _itemDescSeedMap = new Dictionary(); + + private sealed class ItemDescSeed + { + public string Title; + public string TypeText; + public TagType[] Tags; + } protected override UIFormType UIFormTypeId => UIFormType.CombatFinishForm; @@ -20,11 +30,13 @@ namespace GeometryTD.UI protected override void SubscribeCustomEvents() { GameEntry.Event.Subscribe(CombatFinishReturnEventArgs.EventId, OnCombatFinishReturnButtonClicked); + GameEntry.Event.Subscribe(RepoItemDetailRequestedEventArgs.EventId, OnRepoItemDetailRequested); } protected override void UnsubscribeCustomEvents() { GameEntry.Event.Unsubscribe(CombatFinishReturnEventArgs.EventId, OnCombatFinishReturnButtonClicked); + GameEntry.Event.Unsubscribe(RepoItemDetailRequestedEventArgs.EventId, OnRepoItemDetailRequested); } public override int? OpenUI(object userData = null) @@ -72,8 +84,9 @@ namespace GeometryTD.UI _useCase = combatFinishFormUseCase; } - private static CombatFinishFormContext BuildContext(CombatFinishFormRawData rawData) + private CombatFinishFormContext BuildContext(CombatFinishFormRawData rawData) { + _itemDescSeedMap.Clear(); if (rawData == null) { return null; @@ -88,7 +101,7 @@ namespace GeometryTD.UI }; } - private static RepoItemContext[] BuildRewardItems(BackpackInventoryData inventory) + private RepoItemContext[] BuildRewardItems(BackpackInventoryData inventory) { if (inventory == null) { @@ -109,11 +122,14 @@ namespace GeometryTD.UI itemContexts.Add(new RepoItemContext { - Title = $"[Tower] {tower.Name} ({tower.Rarity})", InstanceId = tower.InstanceId, + CanDrag = false, ComponentSlotType = TowerCompSlotType.None, - IconAreaContext = BuildIconAreaContext(tower.Rarity) + IconAreaContext = BuildIconAreaContext(tower) }); + + AddItemDescSeed(tower.InstanceId, tower.Name, "Tower", + tower.Stats != null ? tower.Stats.Tags : null); } } @@ -129,19 +145,20 @@ namespace GeometryTD.UI itemContexts.Add(new RepoItemContext { - Title = $"[Muzzle] {item.Name} ({item.Rarity})", InstanceId = item.InstanceId, + CanDrag = false, ComponentSlotType = TowerCompSlotType.Muzzle, - IconAreaContext = BuildIconAreaContext(item.Rarity) + IconAreaContext = BuildIconAreaContext(item) }); + + AddItemDescSeed(item.InstanceId, item.Name, BuildComponentTypeText(item.SlotType), item.Tags); } } if (inventory.BearingComponents != null) { - for (int i = 0; i < inventory.BearingComponents.Count; i++) + foreach (var item in inventory.BearingComponents) { - var item = inventory.BearingComponents[i]; if (item == null) { continue; @@ -149,11 +166,13 @@ namespace GeometryTD.UI itemContexts.Add(new RepoItemContext { - Title = $"[Bearing] {item.Name} ({item.Rarity})", InstanceId = item.InstanceId, + CanDrag = false, ComponentSlotType = TowerCompSlotType.Bearing, - IconAreaContext = BuildIconAreaContext(item.Rarity) + IconAreaContext = BuildIconAreaContext(item) }); + + AddItemDescSeed(item.InstanceId, item.Name, BuildComponentTypeText(item.SlotType), item.Tags); } } @@ -169,34 +188,152 @@ namespace GeometryTD.UI itemContexts.Add(new RepoItemContext { - Title = $"[Base] {item.Name} ({item.Rarity})", InstanceId = item.InstanceId, + CanDrag = false, ComponentSlotType = TowerCompSlotType.Base, - IconAreaContext = BuildIconAreaContext(item.Rarity) + IconAreaContext = BuildIconAreaContext(item) }); + + AddItemDescSeed(item.InstanceId, item.Name, BuildComponentTypeText(item.SlotType), item.Tags); } } return itemContexts.ToArray(); } - private static IconAreaContext BuildIconAreaContext(RarityType rarity) + private void AddItemDescSeed(long itemId, string title, string typeText, TagType[] tags) { + if (itemId <= 0) + { + return; + } + + _itemDescSeedMap[itemId] = new ItemDescSeed + { + Title = string.IsNullOrWhiteSpace(title) ? $"Item {itemId}" : title, + TypeText = typeText ?? string.Empty, + Tags = CloneTags(tags) + }; + } + + private static TagType[] CloneTags(TagType[] tags) + { + return tags != null ? (TagType[])tags.Clone() : System.Array.Empty(); + } + + 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 IconAreaContext BuildIconAreaContext(DefenseTowerItemData tower) + { + if (tower == null) + { + return new IconAreaContext + { + ComponentSlotType = TowerCompSlotType.None, + Rarity = RarityType.None, + Color = Color.white, + Icon = null + }; + } + return new IconAreaContext { - Rarity = rarity, + ComponentSlotType = TowerCompSlotType.None, + Rarity = tower.Rarity, + Color = IconColorGenerator.GenerateForTower(tower), + Icon = null + }; + } + + 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 }; } private void OnCombatFinishReturnButtonClicked(object sender, GameEventArgs e) { - if (!(sender is CombatFinishForm) || !(e is CombatFinishReturnEventArgs)) + if (!IsEventFromCurrentForm(sender) || !(e is CombatFinishReturnEventArgs)) { return; } _useCase?.TryReturnToMenu(); } + + private void OnRepoItemDetailRequested(object sender, GameEventArgs e) + { + if (!IsEventFromCurrentForm(sender)) + { + return; + } + + if (!(e is RepoItemDetailRequestedEventArgs args)) + { + return; + } + + if (!_itemDescSeedMap.TryGetValue(args.ItemId, out ItemDescSeed seed)) + { + return; + } + + GameEntry.UIRouter.OpenUI(UIFormType.ItemDescForm, new ItemDescFormRawData + { + Title = seed.Title, + TypeText = seed.TypeText, + Description = string.Empty, + Price = 0, + TargetPos = args.TargetPos, + Tags = CloneTags(seed.Tags) + }); + } + + private bool IsEventFromCurrentForm(object sender) + { + if (Form == null) + { + return false; + } + + if (ReferenceEquals(sender, Form)) + { + return true; + } + + if (sender is Component component) + { + CombatFinishForm ownerForm = component.GetComponentInParent(); + return ownerForm == Form; + } + + return false; + } } } diff --git a/Assets/GameMain/Scripts/UI/Game/Context/RepoItemContext.cs b/Assets/GameMain/Scripts/UI/Game/Context/RepoItemContext.cs index 7d51d2d..c94b491 100644 --- a/Assets/GameMain/Scripts/UI/Game/Context/RepoItemContext.cs +++ b/Assets/GameMain/Scripts/UI/Game/Context/RepoItemContext.cs @@ -1,11 +1,13 @@ +using System; using GeometryTD.Definition; namespace GeometryTD.UI { + [Serializable] public class RepoItemContext { - public string Title; public long InstanceId; + public bool CanDrag; public TowerCompSlotType ComponentSlotType; public IconAreaContext IconAreaContext; } diff --git a/Assets/GameMain/Scripts/UI/Game/Controller/RepoFormController.cs b/Assets/GameMain/Scripts/UI/Game/Controller/RepoFormController.cs index 1c2d473..a13c0a4 100644 --- a/Assets/GameMain/Scripts/UI/Game/Controller/RepoFormController.cs +++ b/Assets/GameMain/Scripts/UI/Game/Controller/RepoFormController.cs @@ -1,7 +1,10 @@ +using System; using System.Collections.Generic; using GeometryTD.CustomEvent; using GeometryTD.Definition; using GameFramework.Event; +using GeometryTD.CustomUtility; +using UnityEngine; using UnityGameFramework.Runtime; namespace GeometryTD.UI @@ -10,6 +13,14 @@ namespace GeometryTD.UI { private RepoFormUseCase _useCase; private readonly Dictionary _itemContextMap = new Dictionary(); + private readonly Dictionary _itemDescSeedMap = new Dictionary(); + + private sealed class ItemDescSeed + { + public string Title; + public string TypeText; + public TagType[] Tags; + } protected override UIFormType UIFormTypeId => UIFormType.RepoForm; @@ -20,14 +31,18 @@ namespace GeometryTD.UI protected override void SubscribeCustomEvents() { - GameEntry.Event.Subscribe(RepoItemSelectedEventArgs.EventId, OnRepoItemSelected); + GameEntry.Event.Subscribe(RepoItemDetailRequestedEventArgs.EventId, OnRepoItemDetailRequested); + GameEntry.Event.Subscribe(RepoItemDragEndedEventArgs.EventId, OnRepoItemDragEnded); GameEntry.Event.Subscribe(CombineSlotClickedEventArgs.EventId, OnCombineSlotClicked); + GameEntry.Event.Subscribe(RepoFormReturnEventArgs.EventId, OnRepoFormReturn); } protected override void UnsubscribeCustomEvents() { - GameEntry.Event.Unsubscribe(RepoItemSelectedEventArgs.EventId, OnRepoItemSelected); + GameEntry.Event.Unsubscribe(RepoItemDetailRequestedEventArgs.EventId, OnRepoItemDetailRequested); + GameEntry.Event.Unsubscribe(RepoItemDragEndedEventArgs.EventId, OnRepoItemDragEnded); GameEntry.Event.Unsubscribe(CombineSlotClickedEventArgs.EventId, OnCombineSlotClicked); + GameEntry.Event.Unsubscribe(RepoFormReturnEventArgs.EventId, OnRepoFormReturn); } public override int? OpenUI(object userData = null) @@ -78,6 +93,7 @@ namespace GeometryTD.UI private RepoFormContext BuildContext(RepoFormRawData rawData) { _itemContextMap.Clear(); + _itemDescSeedMap.Clear(); if (rawData?.Inventory == null) { return null; @@ -87,57 +103,82 @@ namespace GeometryTD.UI if (rawData.Inventory.Towers != null) { - foreach (var tower in rawData.Inventory.Towers) + foreach (DefenseTowerItemData tower in rawData.Inventory.Towers) { + if (tower == null) + { + continue; + } + AddItemContext(items, new RepoItemContext { - Title = $"[Tower] {tower.Name} ({tower.Rarity})", InstanceId = tower.InstanceId, + CanDrag = true, ComponentSlotType = TowerCompSlotType.None, - IconAreaContext = BuildIconAreaContext(tower.Rarity) + IconAreaContext = BuildIconAreaContext(tower) }); + AddItemDescSeed(tower.InstanceId, tower.Name, "Tower", + tower.Stats != null ? tower.Stats.Tags : null); } } if (rawData.Inventory.MuzzleComponents != null) { - foreach (var item in rawData.Inventory.MuzzleComponents) + foreach (MuzzleCompItemData item in rawData.Inventory.MuzzleComponents) { + if (item == null) + { + continue; + } + AddItemContext(items, new RepoItemContext { - Title = $"[Muzzle] {item.Name} ({item.Rarity})", InstanceId = item.InstanceId, + CanDrag = true, ComponentSlotType = TowerCompSlotType.Muzzle, - IconAreaContext = BuildIconAreaContext(item.Rarity) + IconAreaContext = BuildIconAreaContext(item) }); + AddItemDescSeed(item.InstanceId, item.Name, BuildComponentTypeText(item.SlotType), item.Tags); } } if (rawData.Inventory.BearingComponents != null) { - foreach (var item in rawData.Inventory.BearingComponents) + foreach (BearingCompItemData item in rawData.Inventory.BearingComponents) { + if (item == null) + { + continue; + } + AddItemContext(items, new RepoItemContext { - Title = $"[Bearing] {item.Name} ({item.Rarity})", InstanceId = item.InstanceId, + CanDrag = true, ComponentSlotType = TowerCompSlotType.Bearing, - IconAreaContext = BuildIconAreaContext(item.Rarity) + IconAreaContext = BuildIconAreaContext(item) }); + AddItemDescSeed(item.InstanceId, item.Name, BuildComponentTypeText(item.SlotType), item.Tags); } } if (rawData.Inventory.BaseComponents != null) { - foreach (var item in rawData.Inventory.BaseComponents) + foreach (BaseCompItemData item in rawData.Inventory.BaseComponents) { + if (item == null) + { + continue; + } + AddItemContext(items, new RepoItemContext { - Title = $"[Base] {item.Name} ({item.Rarity})", InstanceId = item.InstanceId, + CanDrag = true, ComponentSlotType = TowerCompSlotType.Base, - IconAreaContext = BuildIconAreaContext(item.Rarity) + IconAreaContext = BuildIconAreaContext(item) }); + AddItemDescSeed(item.InstanceId, item.Name, BuildComponentTypeText(item.SlotType), item.Tags); } } @@ -162,36 +203,139 @@ namespace GeometryTD.UI _itemContextMap[itemContext.InstanceId] = itemContext; } - private static IconAreaContext BuildIconAreaContext(RarityType rarity) + private void AddItemDescSeed(long itemId, string title, string typeText, TagType[] tags) { + if (itemId <= 0) + { + return; + } + + _itemDescSeedMap[itemId] = new ItemDescSeed + { + Title = string.IsNullOrWhiteSpace(title) ? $"Item {itemId}" : title, + TypeText = typeText ?? string.Empty, + Tags = CloneTags(tags) + }; + } + + private static TagType[] CloneTags(TagType[] tags) + { + return tags != null ? (TagType[])tags.Clone() : Array.Empty(); + } + + 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 IconAreaContext BuildIconAreaContext(DefenseTowerItemData tower) + { + if (tower == null) + { + return new IconAreaContext + { + ComponentSlotType = TowerCompSlotType.None, + Rarity = RarityType.None, + Color = Color.white, + Icon = null + }; + } + return new IconAreaContext { - Rarity = rarity, + ComponentSlotType = TowerCompSlotType.None, + Rarity = tower.Rarity, + Color = IconColorGenerator.GenerateForTower(tower), Icon = null }; } - private void OnRepoItemSelected(object sender, GameEventArgs e) + private static IconAreaContext BuildIconAreaContext(TowerCompItemData item) { - if (!(e is RepoItemSelectedEventArgs args)) + 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 OnRepoItemDetailRequested(object sender, GameEventArgs e) + { + if (!IsEventFromCurrentForm(sender)) { return; } - if (Form == null || !_itemContextMap.TryGetValue(args.ItemId, out RepoItemContext itemContext)) + if (!(e is RepoItemDetailRequestedEventArgs args)) { return; } - bool assigned = Form.TryAssignItemToCombineArea(itemContext); - if (assigned) + if (!_itemDescSeedMap.TryGetValue(args.ItemId, out ItemDescSeed seed)) { - Form.SetRepoItemSelected(args.ItemId, true); + return; } + + GameEntry.UIRouter.OpenUI(UIFormType.ItemDescForm, new ItemDescFormRawData + { + Title = seed.Title, + TypeText = seed.TypeText, + Description = string.Empty, + Price = 0, + TargetPos = args.TargetPos, + Tags = CloneTags(seed.Tags) + }); + } + + private void OnRepoItemDragEnded(object sender, GameEventArgs e) + { + if (!IsEventFromCurrentForm(sender)) + { + return; + } + + if (!(e is RepoItemDragEndedEventArgs args)) + { + return; + } + + if (Form == null || !_itemContextMap.ContainsKey(args.ItemId)) + { + return; + } + + Form.SetRepoItemSelected(args.ItemId, args.Assigned); } private void OnCombineSlotClicked(object sender, GameEventArgs e) { + if (!IsEventFromCurrentForm(sender)) + { + return; + } + if (!(e is CombineSlotClickedEventArgs args)) { return; @@ -207,5 +351,43 @@ namespace GeometryTD.UI Form.SetRepoItemSelected(removedItemId, false); } } + + private void OnRepoFormReturn(object sender, GameEventArgs e) + { + if (!IsEventFromCurrentForm(sender) || !(e is RepoFormReturnEventArgs)) + { + return; + } + + if (Form == null) + { + return; + } + + this.CloseUI(); + } + + private bool IsEventFromCurrentForm(object sender) + { + if (Form == null) + { + return false; + } + + if (ReferenceEquals(sender, Form)) + { + return true; + } + + if (sender is Component component) + { + RepoForm ownerForm = component.GetComponentInParent(); + return ownerForm == Form; + } + + return false; + } + + #endregion } } diff --git a/Assets/GameMain/Scripts/UI/Game/View/CombineArea.cs b/Assets/GameMain/Scripts/UI/Game/View/CombineArea.cs index 4abd789..a11e30a 100644 --- a/Assets/GameMain/Scripts/UI/Game/View/CombineArea.cs +++ b/Assets/GameMain/Scripts/UI/Game/View/CombineArea.cs @@ -1,9 +1,10 @@ using GeometryTD.Definition; using UnityEngine; +using UnityEngine.EventSystems; namespace GeometryTD.UI { - public class CombineArea : MonoBehaviour + public class CombineArea : MonoBehaviour, IDropHandler { [SerializeField] private CombineSlotItem[] _slots; @@ -80,6 +81,34 @@ namespace GeometryTD.UI return true; } + public void OnDrop(PointerEventData eventData) + { + if (eventData == null) + { + return; + } + + GameObject pointerDrag = eventData.pointerDrag; + if (pointerDrag == null) + { + return; + } + + RepoItem repoItem = pointerDrag.GetComponent(); + if (repoItem == null) + { + repoItem = pointerDrag.GetComponentInParent(); + } + + if (repoItem == null) + { + return; + } + + bool assigned = TryAssignItem(repoItem.Context); + repoItem.SetDropResult(assigned); + } + private CombineSlotItem FindSlot(TowerCompSlotType slotType) { if (_slots == null) @@ -99,4 +128,4 @@ namespace GeometryTD.UI return null; } } -} \ No newline at end of file +} diff --git a/Assets/GameMain/Scripts/UI/Game/View/CombineSlotItem.cs b/Assets/GameMain/Scripts/UI/Game/View/CombineSlotItem.cs index 7c3a9a0..c58e83e 100644 --- a/Assets/GameMain/Scripts/UI/Game/View/CombineSlotItem.cs +++ b/Assets/GameMain/Scripts/UI/Game/View/CombineSlotItem.cs @@ -1,6 +1,5 @@ using GeometryTD.CustomEvent; using GeometryTD.Definition; -using TMPro; using UnityEngine; namespace GeometryTD.UI @@ -9,12 +8,10 @@ namespace GeometryTD.UI { [SerializeField] private TowerCompSlotType _acceptSlotType = TowerCompSlotType.None; - [SerializeField] private TMP_Text _titleText; + [SerializeField] private IconArea _iconArea; [SerializeField] private CommonButton _button; - private string _defaultTitle = string.Empty; - private long _boundItemId; private int _slotIndex = -1; @@ -27,18 +24,11 @@ namespace GeometryTD.UI public long BoundItemId => _boundItemId; - private void Awake() - { - if (_titleText != null) - { - _defaultTitle = _titleText.text; - } - } - public void OnInit(int slotIndex) { _slotIndex = slotIndex; ClearSlot(); + _iconArea.OnReset(); } public void BindItem(RepoItemContext itemContext) @@ -46,9 +36,9 @@ namespace GeometryTD.UI _boundItemId = itemContext?.InstanceId ?? 0; _button.Interactive = true; - if (_titleText != null) + if (itemContext != null) { - _titleText.text = itemContext?.Title ?? string.Empty; + _iconArea.OnInit(itemContext.IconAreaContext); } } @@ -56,17 +46,14 @@ namespace GeometryTD.UI { _boundItemId = 0; _button.Interactive = false; - - if (_titleText != null) - { - _titleText.text = _defaultTitle; - } + _iconArea.OnReset(); } public void OnReset() { _slotIndex = -1; ClearSlot(); + _iconArea.OnReset(); } public void OnClick() diff --git a/Assets/GameMain/Scripts/UI/Game/View/CompArea.cs b/Assets/GameMain/Scripts/UI/Game/View/CompArea.cs index e051223..8c734cd 100644 --- a/Assets/GameMain/Scripts/UI/Game/View/CompArea.cs +++ b/Assets/GameMain/Scripts/UI/Game/View/CompArea.cs @@ -2,20 +2,21 @@ using System.Collections.Generic; using GameFramework.ObjectPool; using GeometryTD.PoolObjectBase; using UnityEngine; +using UnityEngine.Serialization; using UnityGameFramework.Runtime; namespace GeometryTD.UI { public class CompArea : MonoBehaviour { - [SerializeField] private Transform m_Content; - [SerializeField] private RepoItem m_ItemTemplate; - [SerializeField] private int m_InstancePoolCapacity = 64; + [FormerlySerializedAs("m_Content")] [SerializeField] private Transform _content; + [FormerlySerializedAs("m_ItemTemplate")] [SerializeField] private RepoItem _itemTemplate; + [FormerlySerializedAs("m_InstancePoolCapacity")] [SerializeField] private int _instancePoolCapacity = 64; - private readonly List m_ActiveItems = new List(); - private readonly Dictionary m_ItemMap = new Dictionary(); - private IObjectPool m_ItemPool; - private string m_PoolName; + private readonly List _activeItems = new List(); + private readonly Dictionary _itemMap = new Dictionary(); + private IObjectPool _itemPool; + private string _poolName; public void OnInit(CompAreaContext context) { @@ -33,7 +34,7 @@ namespace GeometryTD.UI return; } - for (int i = 0; i < context.Items.Length; i++) + foreach (var itemContext in context.Items) { RepoItem item = CreateOrSpawnItem(); if (item == null) @@ -42,17 +43,17 @@ namespace GeometryTD.UI } item.gameObject.SetActive(true); - item.OnInit(context.Items[i]); - m_ActiveItems.Add(item); - m_ItemMap[context.Items[i].InstanceId] = item; + item.OnInit(itemContext); + _activeItems.Add(item); + _itemMap[itemContext.InstanceId] = item; } } public void OnReset() { - for (int i = m_ActiveItems.Count - 1; i >= 0; i--) + for (int i = _activeItems.Count - 1; i >= 0; i--) { - RepoItem item = m_ActiveItems[i]; + RepoItem item = _activeItems[i]; if (item == null) { continue; @@ -60,54 +61,54 @@ namespace GeometryTD.UI item.OnReset(); item.gameObject.SetActive(false); - m_ItemPool?.Unspawn(item); + _itemPool?.Unspawn(item); } - m_ActiveItems.Clear(); - m_ItemMap.Clear(); + _activeItems.Clear(); + _itemMap.Clear(); } private void OnDestroy() { OnReset(); - m_ItemPool?.ReleaseAllUnused(); + _itemPool?.ReleaseAllUnused(); } private void EnsurePool() { - if (m_ItemPool != null) + if (_itemPool != null) { return; } - m_PoolName = $"RepoItemPool_{GetInstanceID()}"; - m_ItemPool = GameEntry.ObjectPool.CreateSingleSpawnObjectPool(m_PoolName, m_InstancePoolCapacity); + _poolName = $"RepoItemPool_{GetInstanceID()}"; + _itemPool = GameEntry.ObjectPool.CreateSingleSpawnObjectPool(_poolName, _instancePoolCapacity); } private RepoItem CreateOrSpawnItem() { - if (m_ItemPool == null) + if (_itemPool == null) { return null; } - RepoItemObject itemObject = m_ItemPool.Spawn(); + RepoItemObject itemObject = _itemPool.Spawn(); RepoItem item = itemObject != null ? (RepoItem)itemObject.Target : null; if (item == null) { - if (m_ItemTemplate == null) + if (_itemTemplate == null) { Log.Warning("CompArea requires an item template."); return null; } - item = Instantiate(m_ItemTemplate); - m_ItemPool.Register(RepoItemObject.Create(item), true); + item = Instantiate(_itemTemplate); + _itemPool.Register(RepoItemObject.Create(item), true); } - if (m_Content != null) + if (_content != null) { - item.transform.SetParent(m_Content, false); + item.transform.SetParent(_content, false); } return item; @@ -115,7 +116,7 @@ namespace GeometryTD.UI public void SetItemSelected(long itemId, bool isSelected) { - if (!m_ItemMap.TryGetValue(itemId, out RepoItem item)) + if (!_itemMap.TryGetValue(itemId, out RepoItem item)) { return; } diff --git a/Assets/GameMain/Scripts/UI/Game/View/RepoForm.cs b/Assets/GameMain/Scripts/UI/Game/View/RepoForm.cs index 342cddd..2ee95f6 100644 --- a/Assets/GameMain/Scripts/UI/Game/View/RepoForm.cs +++ b/Assets/GameMain/Scripts/UI/Game/View/RepoForm.cs @@ -1,3 +1,4 @@ +using GeometryTD.CustomEvent; using UnityEngine; using UnityGameFramework.Runtime; @@ -63,5 +64,10 @@ namespace GeometryTD.UI _compArea?.OnReset(); base.OnClose(isShutdown, userData); } + + public void OnReturnButtonClick() + { + GameEntry.Event.Fire(this, RepoFormReturnEventArgs.Create()); + } } -} +} \ No newline at end of file diff --git a/Assets/GameMain/Scripts/UI/Game/View/RepoItem.cs b/Assets/GameMain/Scripts/UI/Game/View/RepoItem.cs index ff24149..8c05584 100644 --- a/Assets/GameMain/Scripts/UI/Game/View/RepoItem.cs +++ b/Assets/GameMain/Scripts/UI/Game/View/RepoItem.cs @@ -1,20 +1,49 @@ +using System.Collections; using GeometryTD.CustomEvent; -using TMPro; +using GeometryTD.Definition; using UnityEngine; +using UnityEngine.EventSystems; using UnityEngine.UI; namespace GeometryTD.UI { - public class RepoItem : MonoBehaviour + public class RepoItem : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler { - [SerializeField] private TMP_Text _titleText; [SerializeField] private Image _highlightImage; [SerializeField] private IconArea _iconArea; private static readonly Color NormalColor = new Color32(40, 40, 40, 180); private static readonly Color SelectedColor = new Color32(255, 216, 102, 255); + private static readonly Vector2 DefaultDragGhostSize = new Vector2(64f, 64f); - private RepoItemContext _context; + [SerializeField] private RepoItemContext _context; + private CanvasGroup _canvasGroup; + private RectTransform _dragRoot; + private GameObject _dragGhostObject; + private RectTransform _dragGhostRect; + private bool _isSelected; + private bool _isDragging; + private bool _dropHandled; + private bool _dropAssigned; + private Coroutine _pendingOpenDetailRoutine; + private bool _cancelPendingOpenDetail; + + public RepoItemContext Context => _context; + + private void Awake() + { + _canvasGroup = GetComponent(); + if (_canvasGroup == null) + { + _canvasGroup = gameObject.AddComponent(); + } + } + + private void OnDisable() + { + CancelPendingOpenDetail(); + ResetDragState(); + } public void OnInit(RepoItemContext context) { @@ -26,30 +55,25 @@ namespace GeometryTD.UI _context = context; - if (_titleText != null) - { - _titleText.text = context.Title ?? string.Empty; - } - _iconArea.OnInit(context.IconAreaContext); - + SetSelected(false); + ResetDragState(); } public void OnReset() { + CancelPendingOpenDetail(); _context = null; - - if (_titleText != null) - { - _titleText.text = string.Empty; - } + _iconArea.OnReset(); SetSelected(false); + ResetDragState(); } public void SetSelected(bool isSelected) { + _isSelected = isSelected; if (_highlightImage == null) { return; @@ -65,7 +89,273 @@ namespace GeometryTD.UI return; } - GameEntry.Event.Fire(this, RepoItemSelectedEventArgs.Create(_context.InstanceId)); + if (_isDragging) + { + return; + } + + StartPendingOpenDetail(); + } + + public void OnBeginDrag(PointerEventData eventData) + { + if (!CanStartDrag(eventData)) + { + return; + } + + _dragRoot = ResolveDragRoot(); + if (_dragRoot == null) + { + return; + } + + _isDragging = true; + _dropHandled = false; + _dropAssigned = false; + _cancelPendingOpenDetail = true; + + CloseItemDescFormIfOpen(); + + if (!CreateDragGhost()) + { + _isDragging = false; + _dragRoot = null; + return; + } + + if (_canvasGroup != null) + { + _canvasGroup.blocksRaycasts = false; + } + + SetSelected(true); + UpdateDragGhostPosition(eventData); + } + + public void OnDrag(PointerEventData eventData) + { + if (!_isDragging) + { + return; + } + + UpdateDragGhostPosition(eventData); + } + + public void OnEndDrag(PointerEventData eventData) + { + if (!_isDragging) + { + return; + } + + bool assigned = _dropHandled && _dropAssigned; + _isDragging = false; + + if (_canvasGroup != null) + { + _canvasGroup.blocksRaycasts = true; + } + DestroyDragGhost(); + _dragRoot = null; + + if (_context == null) + { + return; + } + + GameEntry.Event.Fire(this, RepoItemDragEndedEventArgs.Create(_context.InstanceId, assigned)); + } + + public void SetDropResult(bool assigned) + { + if (!_isDragging) + { + return; + } + + _dropHandled = true; + _dropAssigned = assigned; + } + + private bool CanStartDrag(PointerEventData eventData) + { + if (_context == null || _isSelected || _isDragging) + { + return false; + } + + if (!_context.CanDrag) + { + return false; + } + + if (_context.ComponentSlotType == TowerCompSlotType.None) + { + return false; + } + + if (eventData == null || eventData.button != PointerEventData.InputButton.Left) + { + return false; + } + + return true; + } + + private void StartPendingOpenDetail() + { + CancelPendingOpenDetail(); + _cancelPendingOpenDetail = false; + _pendingOpenDetailRoutine = StartCoroutine(WaitPointerReleaseAndOpenDetail()); + } + + private void CancelPendingOpenDetail() + { + _cancelPendingOpenDetail = true; + if (_pendingOpenDetailRoutine != null) + { + StopCoroutine(_pendingOpenDetailRoutine); + _pendingOpenDetailRoutine = null; + } + } + + private IEnumerator WaitPointerReleaseAndOpenDetail() + { + while (IsPrimaryPointerPressed()) + { + if (_cancelPendingOpenDetail || _isDragging) + { + _pendingOpenDetailRoutine = null; + yield break; + } + + yield return null; + } + + _pendingOpenDetailRoutine = null; + if (_cancelPendingOpenDetail || _isDragging || _context == null) + { + yield break; + } + + GameEntry.Event.Fire(this, + RepoItemDetailRequestedEventArgs.Create(_context.InstanceId, transform.position)); + } + + private static bool IsPrimaryPointerPressed() + { + if (Input.GetMouseButton(0)) + { + return true; + } + + return Input.touchCount > 0; + } + + private static void CloseItemDescFormIfOpen() + { + var itemDescForm = GameEntry.UI.GetUIForm(UIFormType.ItemDescForm); + if (itemDescForm != null) + { + GameEntry.UI.CloseUIForm(itemDescForm); + } + } + + private RectTransform ResolveDragRoot() + { + Canvas canvas = GetComponentInParent(); + if (canvas == null || canvas.rootCanvas == null) + { + return null; + } + + return canvas.rootCanvas.transform as RectTransform; + } + + private bool CreateDragGhost() + { + DestroyDragGhost(); + + if (_dragRoot == null || _iconArea == null) + { + return false; + } + + Sprite iconSprite = _iconArea.CurrentIconSprite; + if (iconSprite == null) + { + return false; + } + + _dragGhostObject = new GameObject("RepoItemDragGhost", typeof(RectTransform), typeof(CanvasGroup), typeof(Image)); + _dragGhostObject.layer = gameObject.layer; + + _dragGhostRect = _dragGhostObject.GetComponent(); + _dragGhostRect.SetParent(_dragRoot, false); + _dragGhostRect.anchorMin = new Vector2(0.5f, 0.5f); + _dragGhostRect.anchorMax = new Vector2(0.5f, 0.5f); + _dragGhostRect.pivot = new Vector2(0.5f, 0.5f); + + Vector2 iconSize = _iconArea.CurrentIconSize; + if (iconSize.x <= 0f || iconSize.y <= 0f) + { + iconSize = DefaultDragGhostSize; + } + _dragGhostRect.sizeDelta = iconSize; + + Image ghostImage = _dragGhostObject.GetComponent(); + ghostImage.raycastTarget = false; + ghostImage.sprite = iconSprite; + ghostImage.color = _iconArea.CurrentIconColor; + ghostImage.material = _iconArea.CurrentIconMaterial; + ghostImage.preserveAspect = true; + + CanvasGroup ghostCanvasGroup = _dragGhostObject.GetComponent(); + ghostCanvasGroup.blocksRaycasts = false; + ghostCanvasGroup.interactable = false; + + _dragGhostObject.transform.SetAsLastSibling(); + return true; + } + + private void UpdateDragGhostPosition(PointerEventData eventData) + { + if (_dragGhostRect == null || _dragRoot == null || eventData == null) + { + return; + } + + if (RectTransformUtility.ScreenPointToLocalPointInRectangle(_dragRoot, eventData.position, + eventData.pressEventCamera, out Vector2 localPoint)) + { + _dragGhostRect.anchoredPosition = localPoint; + } + } + + private void DestroyDragGhost() + { + if (_dragGhostObject != null) + { + Destroy(_dragGhostObject); + _dragGhostObject = null; + _dragGhostRect = null; + } + } + + private void ResetDragState() + { + _isDragging = false; + _dropHandled = false; + _dropAssigned = false; + _dragRoot = null; + DestroyDragGhost(); + + if (_canvasGroup != null) + { + _canvasGroup.blocksRaycasts = true; + } } } } diff --git a/Assets/GameMain/Scripts/UI/General/Context/IconAreaContext.cs b/Assets/GameMain/Scripts/UI/General/Context/IconAreaContext.cs index 2f23617..ec79155 100644 --- a/Assets/GameMain/Scripts/UI/General/Context/IconAreaContext.cs +++ b/Assets/GameMain/Scripts/UI/General/Context/IconAreaContext.cs @@ -1,12 +1,15 @@ +using System; using GeometryTD.Definition; -using GeometryTD.UI; using UnityEngine; namespace GeometryTD.UI { + [Serializable] public class IconAreaContext : UIContext { public RarityType Rarity; + public TowerCompSlotType ComponentSlotType; + public Color Color = Color.white; public Sprite Icon; } -} \ No newline at end of file +} diff --git a/Assets/GameMain/Scripts/UI/General/Context/ItemDescFormContext.cs b/Assets/GameMain/Scripts/UI/General/Context/ItemDescFormContext.cs new file mode 100644 index 0000000..59540be --- /dev/null +++ b/Assets/GameMain/Scripts/UI/General/Context/ItemDescFormContext.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; +using GeometryTD.Definition; +using UnityEngine; + +namespace GeometryTD.UI +{ + public class ItemDescFormContext : UIContext + { + public string Title; + public string TypeText; + public string Description; + public int Price; + public Vector3 TargetPos; + public List Tags; + } +} \ No newline at end of file diff --git a/Assets/GameMain/Scripts/UI/General/Context/ItemDescFormContext.cs.meta b/Assets/GameMain/Scripts/UI/General/Context/ItemDescFormContext.cs.meta new file mode 100644 index 0000000..2d1084c --- /dev/null +++ b/Assets/GameMain/Scripts/UI/General/Context/ItemDescFormContext.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d01ce2ecd9339fb40acface0ef371ed4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/UI/General/Controller/ItemDescFormController.cs b/Assets/GameMain/Scripts/UI/General/Controller/ItemDescFormController.cs new file mode 100644 index 0000000..1e24931 --- /dev/null +++ b/Assets/GameMain/Scripts/UI/General/Controller/ItemDescFormController.cs @@ -0,0 +1,87 @@ +using System.Collections.Generic; +using GameFramework.Event; +using GeometryTD.Definition; +using UnityGameFramework.Runtime; + +namespace GeometryTD.UI +{ + public class ItemDescFormController : UIFormControllerCommonBase< + ItemDescFormContext, ItemDescForm> + { + protected override UIFormType UIFormTypeId => UIFormType.ItemDescForm; + + + protected override void RefreshUI(ItemDescForm form, ItemDescFormContext context) + { + form.RefreshUI(context); + } + + protected override void CloseLoadedFormDirect(ItemDescForm form) + { + GameEntry.UI.CloseUIForm(form); + } + + private static ItemDescFormContext BuildContext(ItemDescFormRawData rawData) + { + if (rawData == null) + { + return null; + } + + return new ItemDescFormContext + { + Title = rawData.Title, + TypeText = rawData.TypeText, + Description = rawData.Description, + Price = rawData.Price, + TargetPos = rawData.TargetPos, + Tags = BuildTags(rawData.Tags) + }; + } + + private static List BuildTags(TagType[] tags) + { + if (tags == null || tags.Length <= 0) + { + return new List(); + } + + return new List(tags); + } + + public int? OpenUI(ItemDescFormRawData rawData) + { + ItemDescFormContext context = BuildContext(rawData); + return OpenUIInternal(context); + } + + public override int? OpenUI(object userData = null) + { + if (userData is ItemDescFormContext context) + { + return OpenUIInternal(context); + } + + if (userData is ItemDescFormRawData rawData) + { + return OpenUI(rawData); + } + + if (userData != null) + { + Log.Warning("ItemDescFormController.OpenUI() userData type is invalid."); + return null; + } + + return OpenUIInternal(Context); + } + + public override void BindUseCase(IUIUseCase useCase) + { + if (!(useCase is ItemDescFormUseCase)) + { + Log.Error("ItemDescForm.BindUseCase() useCase is invalid."); + } + } + } +} diff --git a/Assets/GameMain/Scripts/UI/General/Controller/ItemDescFormController.cs.meta b/Assets/GameMain/Scripts/UI/General/Controller/ItemDescFormController.cs.meta new file mode 100644 index 0000000..396e002 --- /dev/null +++ b/Assets/GameMain/Scripts/UI/General/Controller/ItemDescFormController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2970dfbfc4901234ca38bda4d94d01d5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/UI/General/Controller/RewardSelectFormController.cs b/Assets/GameMain/Scripts/UI/General/Controller/RewardSelectFormController.cs index ba5431d..b04a66e 100644 --- a/Assets/GameMain/Scripts/UI/General/Controller/RewardSelectFormController.cs +++ b/Assets/GameMain/Scripts/UI/General/Controller/RewardSelectFormController.cs @@ -3,6 +3,7 @@ using GeometryTD.CustomEvent; using GeometryTD.DataTable; using GeometryTD.Definition; using GameFramework.Event; +using GeometryTD.CustomUtility; using UnityEngine; using UnityGameFramework.Runtime; @@ -132,8 +133,10 @@ namespace GeometryTD.UI RewardId = rawItem.RewardId, IconArea = new IconAreaContext { + ComponentSlotType = rawItem.SlotType, Icon = rawItem.Icon, - Rarity = rawItem.Rarity + Rarity = rawItem.Rarity, + Color = ResolveIconColor(rawItem) }, Title = rawItem.Title ?? string.Empty, TypeText = ResolveTypeText(rawItem), @@ -147,6 +150,16 @@ namespace GeometryTD.UI return contexts; } + private static Color ResolveIconColor(RewardSelectItemRawData rawItem) + { + if (rawItem?.SourceItem == null) + { + return Color.white; + } + + return IconColorGenerator.GenerateForComponent(rawItem.SourceItem); + } + private static string ResolveTypeText(RewardSelectItemRawData rawItem) { if (!string.IsNullOrWhiteSpace(rawItem.TypeText)) diff --git a/Assets/GameMain/Scripts/UI/General/IconColorGenerator.cs b/Assets/GameMain/Scripts/UI/General/IconColorGenerator.cs new file mode 100644 index 0000000..1e9b909 --- /dev/null +++ b/Assets/GameMain/Scripts/UI/General/IconColorGenerator.cs @@ -0,0 +1,440 @@ +using GameFramework.DataTable; +using GeometryTD.DataTable; +using GeometryTD.Definition; +using UnityEngine; + +namespace GeometryTD.CustomUtility +{ + public static class IconColorGenerator + { + private const int StatCount = 5; + private const float MinSaturation = 0.4f; + private const float MinValue = 0.6f; + private const float TinyValue = 0.0001f; + + private static readonly float[] HueMap = { 0f, 30f, 200f, 120f, 270f }; + + private static StatRange _attackDamageRange = new StatRange(1f, 300f); + private static StatRange _damageRandomRateRange = new StatRange(0f, 0.3f); + private static StatRange _rotateSpeedRange = new StatRange(10f, 240f); + private static StatRange _attackRangeRange = new StatRange(2f, 8f); + private static StatRange _attackSpeedRange = new StatRange(0.5f, 4f); + + private static bool s_HasMuzzleRange; + private static bool s_HasBearingRange; + private static bool s_HasBaseRange; + + public static Color GenerateForComponent(TowerCompItemData item) + { + if (item == null) + { + return Color.white; + } + + float attackDamage = 0f; + float damageRandomRate = 0f; + float rotateSpeed = 0f; + float attackRange = 0f; + float attackSpeed = 0f; + + if (item is MuzzleCompItemData muzzle) + { + attackDamage = ResolveArrayValue(muzzle.AttackDamage); + damageRandomRate = Mathf.Max(0f, muzzle.DamageRandomRate); + } + else if (item is BearingCompItemData bearing) + { + rotateSpeed = ResolveArrayValue(bearing.RotateSpeed); + attackRange = ResolveArrayValue(bearing.AttackRange); + } + else if (item is BaseCompItemData baseComp) + { + attackSpeed = ResolveArrayValue(baseComp.AttackSpeed); + } + + return GenerateColor( + attackDamage, + damageRandomRate, + rotateSpeed, + attackRange, + attackSpeed, + item.SlotType); + } + + public static Color GenerateForTower(DefenseTowerItemData tower) + { + if (tower?.Stats == null) + { + return Color.white; + } + + DefenseTowerStatsData stats = tower.Stats; + return GenerateColor( + ResolveArrayValue(stats.AttackDamage), + ResolveArrayValue(stats.DamageRandomRate), + ResolveArrayValue(stats.RotateSpeed), + ResolveArrayValue(stats.AttackRange), + ResolveArrayValue(stats.AttackSpeed), + TowerCompSlotType.None); + } + + private static Color GenerateColor( + float attackDamage, + float damageRandomRate, + float rotateSpeed, + float attackRange, + float attackSpeed, + TowerCompSlotType slotType) + { + TryRefreshRangesFromDataTables(); + + float[] normalizedStats = new float[StatCount]; + normalizedStats[0] = Normalize(attackDamage, _attackDamageRange); + normalizedStats[1] = Normalize(damageRandomRate, _damageRandomRateRange); + normalizedStats[2] = Normalize(rotateSpeed, _rotateSpeedRange); + normalizedStats[3] = Normalize(attackRange, _attackRangeRange); + normalizedStats[4] = Normalize(attackSpeed, _attackSpeedRange); + + FindTopTwoIndexes(normalizedStats, out int primaryIndex, out int secondaryIndex); + + float denominator = normalizedStats[primaryIndex] + normalizedStats[secondaryIndex] + TinyValue; + float blendWeight = normalizedStats[secondaryIndex] / denominator; + float hue = LerpHue(HueMap[primaryIndex], HueMap[secondaryIndex], blendWeight); + hue = NormalizeHue(hue + ResolveSlotHueOffset(slotType)); + + float purity = normalizedStats[primaryIndex] - normalizedStats[secondaryIndex]; + float saturation = Mathf.Lerp(0.45f, 0.9f, Mathf.Clamp01(purity * 1.5f)); + saturation = Mathf.Max(saturation, MinSaturation); + + float intensity = 0f; + for (int i = 0; i < normalizedStats.Length; i++) + { + intensity += normalizedStats[i]; + } + + float value = Mathf.Lerp(0.55f, 0.95f, intensity / StatCount); + value = Mathf.Max(value, MinValue); + + Color color = Color.HSVToRGB(hue / 360f, saturation, value); + color.a = 1f; + return color; + } + + private static void TryRefreshRangesFromDataTables() + { + if (GameEntry.DataTable == null) + { + return; + } + + if (!s_HasMuzzleRange && TryResolveMuzzleRange(out StatRange attackDamageRange, out StatRange damageRandomRateRange)) + { + _attackDamageRange = attackDamageRange; + _damageRandomRateRange = damageRandomRateRange; + s_HasMuzzleRange = true; + } + + if (!s_HasBearingRange && TryResolveBearingRange(out StatRange rotateSpeedRange, out StatRange attackRangeRange)) + { + _rotateSpeedRange = rotateSpeedRange; + _attackRangeRange = attackRangeRange; + s_HasBearingRange = true; + } + + if (!s_HasBaseRange && TryResolveBaseRange(out StatRange attackSpeedRange)) + { + _attackSpeedRange = attackSpeedRange; + s_HasBaseRange = true; + } + } + + private static bool TryResolveMuzzleRange(out StatRange attackDamageRange, out StatRange damageRandomRateRange) + { + attackDamageRange = _attackDamageRange; + damageRandomRateRange = _damageRandomRateRange; + + IDataTable dataTable = GameEntry.DataTable.GetDataTable(); + if (dataTable == null || dataTable.Count <= 0) + { + return false; + } + + DRMuzzleComp[] rows = dataTable.GetAllDataRows(); + if (rows == null || rows.Length <= 0) + { + return false; + } + + bool hasAttackDamage = false; + bool hasDamageRandomRate = false; + float minAttackDamage = float.MaxValue; + float maxAttackDamage = float.MinValue; + float minDamageRandomRate = float.MaxValue; + float maxDamageRandomRate = float.MinValue; + + for (int i = 0; i < rows.Length; i++) + { + DRMuzzleComp row = rows[i]; + if (row == null) + { + continue; + } + + IncludeValues(row.AttackDamage, ref minAttackDamage, ref maxAttackDamage, ref hasAttackDamage); + IncludeValue(Mathf.Max(0f, row.DamageRandomRate), ref minDamageRandomRate, ref maxDamageRandomRate, ref hasDamageRandomRate); + } + + if (!hasAttackDamage || !hasDamageRandomRate) + { + return false; + } + + attackDamageRange = BuildRange(minAttackDamage, maxAttackDamage, _attackDamageRange); + damageRandomRateRange = BuildRange(minDamageRandomRate, maxDamageRandomRate, _damageRandomRateRange); + return true; + } + + private static bool TryResolveBearingRange(out StatRange rotateSpeedRange, out StatRange attackRangeRange) + { + rotateSpeedRange = _rotateSpeedRange; + attackRangeRange = _attackRangeRange; + + IDataTable dataTable = GameEntry.DataTable.GetDataTable(); + if (dataTable == null || dataTable.Count <= 0) + { + return false; + } + + DRBearingComp[] rows = dataTable.GetAllDataRows(); + if (rows == null || rows.Length <= 0) + { + return false; + } + + bool hasRotateSpeed = false; + bool hasAttackRange = false; + float minRotateSpeed = float.MaxValue; + float maxRotateSpeed = float.MinValue; + float minAttackRange = float.MaxValue; + float maxAttackRange = float.MinValue; + + for (int i = 0; i < rows.Length; i++) + { + DRBearingComp row = rows[i]; + if (row == null) + { + continue; + } + + IncludeValues(row.RotateSpeed, ref minRotateSpeed, ref maxRotateSpeed, ref hasRotateSpeed); + IncludeValues(row.AttackRange, ref minAttackRange, ref maxAttackRange, ref hasAttackRange); + } + + if (!hasRotateSpeed || !hasAttackRange) + { + return false; + } + + rotateSpeedRange = BuildRange(minRotateSpeed, maxRotateSpeed, _rotateSpeedRange); + attackRangeRange = BuildRange(minAttackRange, maxAttackRange, _attackRangeRange); + return true; + } + + private static bool TryResolveBaseRange(out StatRange attackSpeedRange) + { + attackSpeedRange = _attackSpeedRange; + + IDataTable dataTable = GameEntry.DataTable.GetDataTable(); + if (dataTable == null || dataTable.Count <= 0) + { + return false; + } + + DRBaseComp[] rows = dataTable.GetAllDataRows(); + if (rows == null || rows.Length <= 0) + { + return false; + } + + bool hasAttackSpeed = false; + float minAttackSpeed = float.MaxValue; + float maxAttackSpeed = float.MinValue; + + for (int i = 0; i < rows.Length; i++) + { + DRBaseComp row = rows[i]; + if (row == null) + { + continue; + } + + IncludeValues(row.AttackSpeed, ref minAttackSpeed, ref maxAttackSpeed, ref hasAttackSpeed); + } + + if (!hasAttackSpeed) + { + return false; + } + + attackSpeedRange = BuildRange(minAttackSpeed, maxAttackSpeed, _attackSpeedRange); + return true; + } + + private static void FindTopTwoIndexes(float[] values, out int primaryIndex, out int secondaryIndex) + { + primaryIndex = 0; + secondaryIndex = 1; + + if (values[secondaryIndex] > values[primaryIndex]) + { + (primaryIndex, secondaryIndex) = (secondaryIndex, primaryIndex); + } + + for (int i = 2; i < values.Length; i++) + { + float value = values[i]; + if (value > values[primaryIndex]) + { + secondaryIndex = primaryIndex; + primaryIndex = i; + } + else if (value > values[secondaryIndex]) + { + secondaryIndex = i; + } + } + } + + private static float ResolveSlotHueOffset(TowerCompSlotType slotType) + { + return slotType switch + { + TowerCompSlotType.Bearing => 15f, + TowerCompSlotType.Base => -15f, + _ => 0f + }; + } + + private static float ResolveArrayValue(int[] values) + { + if (values == null || values.Length <= 0) + { + return 0f; + } + + return Mathf.Max(0f, values[0]); + } + + private static float ResolveArrayValue(float[] values) + { + if (values == null || values.Length <= 0) + { + return 0f; + } + + return Mathf.Max(0f, values[0]); + } + + private static void IncludeValues(int[] values, ref float min, ref float max, ref bool hasValue) + { + if (values == null || values.Length <= 0) + { + return; + } + + for (int i = 0; i < values.Length; i++) + { + IncludeValue(Mathf.Max(0f, values[i]), ref min, ref max, ref hasValue); + } + } + + private static void IncludeValues(float[] values, ref float min, ref float max, ref bool hasValue) + { + if (values == null || values.Length <= 0) + { + return; + } + + for (int i = 0; i < values.Length; i++) + { + IncludeValue(Mathf.Max(0f, values[i]), ref min, ref max, ref hasValue); + } + } + + private static void IncludeValue(float value, ref float min, ref float max, ref bool hasValue) + { + if (float.IsNaN(value) || float.IsInfinity(value)) + { + return; + } + + if (!hasValue) + { + min = value; + max = value; + hasValue = true; + return; + } + + if (value < min) + { + min = value; + } + + if (value > max) + { + max = value; + } + } + + private static float Normalize(float value, StatRange range) + { + float denominator = Mathf.Max(TinyValue, range.Max - range.Min); + return Mathf.Clamp01((value - range.Min) / denominator); + } + + private static StatRange BuildRange(float min, float max, StatRange fallback) + { + if (float.IsNaN(min) || float.IsInfinity(min) || float.IsNaN(max) || float.IsInfinity(max)) + { + return fallback; + } + + if (max - min < TinyValue) + { + return fallback; + } + + return new StatRange(min, max); + } + + private static float LerpHue(float fromDegree, float toDegree, float t) + { + float delta = Mathf.DeltaAngle(fromDegree, toDegree); + return fromDegree + delta * Mathf.Clamp01(t); + } + + private static float NormalizeHue(float hueDegree) + { + float normalized = hueDegree % 360f; + if (normalized < 0f) + { + normalized += 360f; + } + + return normalized; + } + + private readonly struct StatRange + { + public StatRange(float min, float max) + { + Min = min; + Max = max; + } + + public float Min { get; } + public float Max { get; } + } + } +} diff --git a/Assets/GameMain/Scripts/UI/General/IconColorGenerator.cs.meta b/Assets/GameMain/Scripts/UI/General/IconColorGenerator.cs.meta new file mode 100644 index 0000000..3bd60d0 --- /dev/null +++ b/Assets/GameMain/Scripts/UI/General/IconColorGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6fb39901e8409cd4db9dbde01bee1ced +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/UI/General/RawData/ItemDescFormRawData.cs b/Assets/GameMain/Scripts/UI/General/RawData/ItemDescFormRawData.cs new file mode 100644 index 0000000..8967c3f --- /dev/null +++ b/Assets/GameMain/Scripts/UI/General/RawData/ItemDescFormRawData.cs @@ -0,0 +1,15 @@ +using GeometryTD.Definition; +using UnityEngine; + +namespace GeometryTD.UI +{ + public class ItemDescFormRawData + { + public string Title; + public string TypeText; + public string Description; + public int Price; + public Vector3 TargetPos; + public TagType[] Tags; + } +} diff --git a/Assets/GameMain/Scripts/UI/General/RawData/ItemDescFormRawData.cs.meta b/Assets/GameMain/Scripts/UI/General/RawData/ItemDescFormRawData.cs.meta new file mode 100644 index 0000000..f8184f7 --- /dev/null +++ b/Assets/GameMain/Scripts/UI/General/RawData/ItemDescFormRawData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f84926be492fb4242846ee76ca4890f4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/UI/General/UseCase/ItemDescFormUseCase.cs b/Assets/GameMain/Scripts/UI/General/UseCase/ItemDescFormUseCase.cs new file mode 100644 index 0000000..8cc4672 --- /dev/null +++ b/Assets/GameMain/Scripts/UI/General/UseCase/ItemDescFormUseCase.cs @@ -0,0 +1,9 @@ +namespace GeometryTD.UI +{ + public class ItemDescFormUseCase : IUIUseCase + { + public ItemDescFormUseCase() + { + } + } +} \ No newline at end of file diff --git a/Assets/GameMain/Scripts/UI/General/UseCase/ItemDescFormUseCase.cs.meta b/Assets/GameMain/Scripts/UI/General/UseCase/ItemDescFormUseCase.cs.meta new file mode 100644 index 0000000..136bf0a --- /dev/null +++ b/Assets/GameMain/Scripts/UI/General/UseCase/ItemDescFormUseCase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fbb608569de315b42b7812af024c10a3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/UI/General/View/IconArea.cs b/Assets/GameMain/Scripts/UI/General/View/IconArea.cs index d6c7daa..0d04888 100644 --- a/Assets/GameMain/Scripts/UI/General/View/IconArea.cs +++ b/Assets/GameMain/Scripts/UI/General/View/IconArea.cs @@ -1,3 +1,4 @@ +using System; using GeometryTD.Definition; using UnityEngine; using UnityEngine.UI; @@ -13,6 +14,14 @@ namespace GeometryTD.UI private IconAreaContext _context; + public Sprite CurrentIconSprite => _icon != null ? _icon.sprite : null; + + public Color CurrentIconColor => _icon != null ? _icon.color : Color.white; + + public Vector2 CurrentIconSize => _icon != null ? _icon.rectTransform.rect.size : Vector2.zero; + + public Material CurrentIconMaterial => _icon != null ? _icon.material : null; + public void OnInit(IconAreaContext context) { if (context == null) @@ -22,17 +31,38 @@ namespace GeometryTD.UI } _context = context; - SetIcon(_context.Icon); + + switch (context.ComponentSlotType) + { + case TowerCompSlotType.Base: + case TowerCompSlotType.Bearing: + case TowerCompSlotType.Muzzle: + GameEntry.SpriteCache.GetSprite(context.ComponentSlotType.ToString(), SetIcon); + break; + default: + SetIcon(_context.Icon); + break; + } + SetRarity(_context.Rarity); + SetIconColor(_context.Color); } public void SetIcon(Sprite sprite) { - _icon.sprite = sprite; + if (_icon != null) + { + _icon.sprite = sprite; + } } public void SetRarity(RarityType rarity) { + if (_board == null) + { + return; + } + _board.color = rarity switch { RarityType.White => Color.white, @@ -44,10 +74,21 @@ namespace GeometryTD.UI }; } + public void SetIconColor(Color color) + { + if (_icon == null) + { + return; + } + + _icon.color = color; + } + public void OnReset() { SetIcon(null); SetRarity(RarityType.None); + SetIconColor(Color.clear); } } -} \ No newline at end of file +} diff --git a/Assets/GameMain/Scripts/UI/General/View/ItemDescForm.cs b/Assets/GameMain/Scripts/UI/General/View/ItemDescForm.cs new file mode 100644 index 0000000..8a97578 --- /dev/null +++ b/Assets/GameMain/Scripts/UI/General/View/ItemDescForm.cs @@ -0,0 +1,376 @@ +using System.Collections.Generic; +using GeometryTD.DataTable; +using GeometryTD.Definition; +using TMPro; +using UnityEngine; +using UnityEngine.UI; +using UnityGameFramework.Runtime; + +namespace GeometryTD.UI +{ + public class ItemDescForm : UGuiForm + { + [SerializeField] private RectTransform _content; + + [SerializeField] private TMP_Text _itemTitle; + + [SerializeField] private TMP_Text _itemTypeText; + + [SerializeField] private TMP_Text _itemDescription; + + [SerializeField] private TMP_Text _itemPrice; + + [SerializeField] private Transform _tagAreaParent; + + [SerializeField] private GameObject _tagItemPrefab; + + [SerializeField] private bool _autoResizeHeight = true; + + [SerializeField] private float _fixedTopHeight = 150f; + + [SerializeField] private float _fixedBottomHeight = 150f; + + [SerializeField] private float _fixedWidth = 300f; + + [SerializeField] private float _screenEdgePadding = 0f; + + [SerializeField] private float _sideGap = 16f; + + [SerializeField] private float _anchorItemWidth = 0f; + + [SerializeField] private Graphic _blankAreaGraphic; + + [SerializeField] private bool _disableBlankAreaRaycast = true; + + [SerializeField] private bool _closeOnPointerDownOutsideContent = true; + + private readonly List _runtimeTagItems = new List(); + + private ItemDescFormContext _context; + private Vector3 _targetPos; + private bool _isOpened; + + public void RefreshUI(ItemDescFormContext context) + { + if (context == null) + { + Log.Warning("ItemDescForm context is invalid."); + return; + } + + _context = context; + + _targetPos = ConvertWorldToAnchored(_context.TargetPos); + + if (_content != null) + { + _content.anchoredPosition3D = _targetPos; + } + + if (_itemTitle != null) _itemTitle.text = _context.Title ?? string.Empty; + if (_itemTypeText != null) _itemTypeText.text = _context.TypeText ?? string.Empty; + if (_itemDescription != null) _itemDescription.text = _context.Description ?? string.Empty; + if (_itemPrice != null) _itemPrice.text = $"Price: {_context.Price} Gold"; + + RefreshTags(_context.Tags); + + ResizeToFitContent(); + ApplySideAnchoredTargetPos(); + } + + protected override void OnOpen(object userData) + { + base.OnOpen(userData); + _isOpened = true; + + if (_disableBlankAreaRaycast && _blankAreaGraphic != null) + { + _blankAreaGraphic.raycastTarget = false; + } + + if (!(userData is ItemDescFormContext context)) + { + Log.Error("ItemDescFormContext is invalid."); + return; + } + + RefreshUI(context); + } + + protected override void OnClose(bool isShutdown, object userData) + { + _isOpened = false; + ClearTags(); + _context = null; + base.OnClose(isShutdown, userData); + } + + public void OnBlankAreaClick() + { + CloseSelf(); + } + + public void OnBackgroundClick() + { + CloseSelf(); + } + + private void Update() + { + if (!_isOpened || !_closeOnPointerDownOutsideContent || _content == null) + { + return; + } + + if (!TryGetPointerDownScreenPosition(out Vector2 screenPoint)) + { + return; + } + + if (IsPointerInContent(screenPoint)) + { + return; + } + + CloseSelf(); + } + + private void ResizeToFitContent() + { + if (!_autoResizeHeight || _content == null) + { + return; + } + + if (_itemDescription == null) + { + return; + } + + _itemDescription.ForceMeshUpdate(); + var descriptionSize = _itemDescription.rectTransform.sizeDelta; + descriptionSize.y = _itemDescription.preferredHeight; + _itemDescription.rectTransform.sizeDelta = descriptionSize; + float descriptionHeight = Mathf.Max(0f, _itemDescription.preferredHeight); + float targetHeight = _fixedTopHeight + descriptionHeight + _fixedBottomHeight; + + Vector2 size = new Vector2(_fixedWidth, targetHeight); + _content.sizeDelta = size; + } + + private void ApplySideAnchoredTargetPos() + { + if (_content == null) + { + return; + } + + RectTransform parent = _content.parent as RectTransform; + if (parent == null) + { + return; + } + + Vector2 size = _content.sizeDelta; + if (size.x <= 0f || size.y <= 0f) + { + size = _content.rect.size; + } + + Vector2 pivot = _content.pivot; + float halfWidth = parent.rect.width * 0.5f; + float halfHeight = parent.rect.height * 0.5f; + + float minX = -halfWidth + size.x * pivot.x + _screenEdgePadding; + float maxX = halfWidth - size.x * (1f - pivot.x) - _screenEdgePadding; + float minY = -halfHeight + size.y * pivot.y + _screenEdgePadding; + float maxY = halfHeight - size.y * (1f - pivot.y) - _screenEdgePadding; + + float clampedY = minY <= maxY ? Mathf.Clamp(_targetPos.y, minY, maxY) : 0f; + + float anchorHalfWidth = Mathf.Max(0f, _anchorItemWidth * 0.5f); + float sideGap = Mathf.Max(0f, _sideGap); + float horizontalOffset = anchorHalfWidth + size.x * 0.5f + sideGap; + + float leftCandidateX = _targetPos.x - horizontalOffset; + float rightCandidateX = _targetPos.x + horizontalOffset; + + float finalX; + if (IsInsideBounds(leftCandidateX, minX, maxX)) + { + finalX = leftCandidateX; + } + else if (IsInsideBounds(rightCandidateX, minX, maxX)) + { + finalX = rightCandidateX; + } + else + { + finalX = minX <= maxX ? Mathf.Clamp(leftCandidateX, minX, maxX) : 0f; + } + + _content.anchoredPosition3D = new Vector3(finalX, clampedY, _targetPos.z); + } + + private Vector3 ConvertWorldToAnchored(Vector3 worldPos) + { + if (_content == null) + { + return worldPos; + } + + RectTransform parent = _content.parent as RectTransform; + if (parent == null) + { + return worldPos; + } + + Canvas canvas = _content.GetComponentInParent(); + Canvas rootCanvas = canvas != null ? canvas.rootCanvas : null; + Camera uiCamera = null; + if (rootCanvas != null && rootCanvas.renderMode != RenderMode.ScreenSpaceOverlay) + { + uiCamera = rootCanvas.worldCamera != null ? rootCanvas.worldCamera : Camera.main; + } + + Vector2 screenPoint = RectTransformUtility.WorldToScreenPoint(uiCamera, worldPos); + if (!RectTransformUtility.ScreenPointToLocalPointInRectangle(parent, screenPoint, uiCamera, + out Vector2 localPoint)) + { + return worldPos; + } + + float z = _content.anchoredPosition3D.z; + return new Vector3(localPoint.x, localPoint.y, z); + } + + private static bool IsInsideBounds(float value, float min, float max) + { + return value >= min && value <= max; + } + + private void RefreshTags(List tags) + { + ClearTags(); + + if (_tagAreaParent == null || _tagItemPrefab == null || tags == null || tags.Count <= 0) + { + return; + } + + if (_tagItemPrefab.scene.IsValid() && _tagItemPrefab.transform.IsChildOf(_tagAreaParent)) + { + _tagItemPrefab.SetActive(false); + } + + for (int i = 0; i < tags.Count; i++) + { + string tagName = ResolveTagName(tags[i]); + if (string.IsNullOrWhiteSpace(tagName)) + { + continue; + } + + GameObject tagGo = Instantiate(_tagItemPrefab, _tagAreaParent); + tagGo.SetActive(true); + + if (tagGo.TryGetComponent(out TagItem tagItem)) + { + tagItem.OnInit(new TagItemContext + { + TagName = tagName + }); + } + else + { + TMP_Text tagText = tagGo.GetComponentInChildren(true); + if (tagText != null) + { + tagText.text = tagName; + } + } + + _runtimeTagItems.Add(tagGo); + } + } + + private void ClearTags() + { + for (int i = _runtimeTagItems.Count - 1; i >= 0; i--) + { + GameObject tagGo = _runtimeTagItems[i]; + if (tagGo != null) + { + Destroy(tagGo); + } + } + + _runtimeTagItems.Clear(); + } + + private static string ResolveTagName(TagType tagType) + { + if (tagType == TagType.None) + { + return string.Empty; + } + + var tagTable = GameEntry.DataTable.GetDataTable(); + if (tagTable != null) + { + DRTag tagRow = tagTable.GetDataRow((int)tagType); + if (tagRow != null && !string.IsNullOrWhiteSpace(tagRow.Name)) + { + return tagRow.Name; + } + } + + return tagType.ToString(); + } + + private void CloseSelf() + { + GameEntry.UI.CloseUIForm(this); + } + + private bool IsPointerInContent(Vector2 screenPoint) + { + Canvas canvas = _content.GetComponentInParent(); + Canvas rootCanvas = canvas != null ? canvas.rootCanvas : null; + Camera uiCamera = null; + if (rootCanvas != null && rootCanvas.renderMode != RenderMode.ScreenSpaceOverlay) + { + uiCamera = rootCanvas.worldCamera != null ? rootCanvas.worldCamera : Camera.main; + } + + return RectTransformUtility.RectangleContainsScreenPoint(_content, screenPoint, uiCamera); + } + + private static bool TryGetPointerDownScreenPosition(out Vector2 screenPoint) + { + if (Input.touchCount > 0) + { + for (int i = 0; i < Input.touchCount; i++) + { + Touch touch = Input.GetTouch(i); + if (touch.phase != TouchPhase.Began) + { + continue; + } + + screenPoint = touch.position; + return true; + } + } + + if (Input.GetMouseButtonDown(0)) + { + screenPoint = Input.mousePosition; + return true; + } + + screenPoint = default; + return false; + } + } +} diff --git a/Assets/GameMain/Scripts/UI/General/View/ItemDescForm.cs.meta b/Assets/GameMain/Scripts/UI/General/View/ItemDescForm.cs.meta new file mode 100644 index 0000000..0c4bc50 --- /dev/null +++ b/Assets/GameMain/Scripts/UI/General/View/ItemDescForm.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c97cf85e5027b944ab0580d944ef660 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/Utility/AssetUtility.cs b/Assets/GameMain/Scripts/Utility/AssetUtility.cs index ebae263..a3a047c 100644 --- a/Assets/GameMain/Scripts/Utility/AssetUtility.cs +++ b/Assets/GameMain/Scripts/Utility/AssetUtility.cs @@ -71,5 +71,11 @@ namespace GeometryTD.CustomUtility { return Utility.Text.Format("Assets/GameMain/Entities/LevelMap/Level{0}.prefab", assetName); } + + public static string GetTextureAsset(string assetName) + { + // Assets/GameMain/Textures/Capsule.png + return Utility.Text.Format("Assets/GameMain/Textures/{0}.png", assetName); + } } } \ No newline at end of file diff --git a/Assets/GameMain/Textures/Base.meta b/Assets/GameMain/Textures/Base.meta new file mode 100644 index 0000000..f4b1932 --- /dev/null +++ b/Assets/GameMain/Textures/Base.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9f1c0d41a8eb55e4a922bb42e5bc504d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base.png b/Assets/GameMain/Textures/Base.png new file mode 100644 index 0000000000000000000000000000000000000000..3410c68252208bef952a5d8683a07a4a581aac8f GIT binary patch literal 2097 zcmeHI&5zSY6rb=>J_;2Q7vMCQ3l-QNJ6UHl!YoU&-9)Olt0hvG8D)-&SB4T(#SRR#Y57f>%nTmcDH{R=91&WE*IQNAu*uxxoe^PAs$?>Fx~|FXKW zeDv_C!w8|Ht!85lp%M&B=-?iBJw3MI!0S-byqY2O?eY96p*wd^AhiFKY_IF};77_; zWU)|ngf)s1KqGWvVU#ewAvErYo{W9tpWh!EScbmw^ISlJq%Qihxt)qD+beCpy}@gt zv2YPz7*QaIgl2dY4dRTBd}GW@VVqCf1|CE7hHot92Jw2Zit8#B*t3Yq32||?W;tG^ zGCzMFyTm0nsoD-PU6&G%&Xw`>GQe6IcIjH)c% z;@Ylj0>aF;V$DWooSm65G(^TznP{nEoHMeH+SI-Qo=!rDl7cqQrZRzG_J}36W05?h zF)-u>F4;^6W8)#W#Xv+N))`=(0-N-eR#{*D4|TD;%K%6l1ci-v`VvKjiA*oufH0~8Ibx?UTOxLl@lyP=RYA=B)G;E>a~|lFqHAU5PXB@86ZMqIxRn2feG!fFM#wt zc`<=ys;h@A6^lJk>mxGH2KVi}XeW`_{|$1ywxhsjaOfKOuxMBCQ8YXeLzhdTojw2U z^&5ot{LyMGwnumWe(IDEKJth>die4*Up~J7=63JJr9Yp2cPsb?KSuXX-m2{VwTqq{ oxpb%0EF<}K@~a?UJQ@BvaR1f5fA>Bno&2ZXT3Ts5xP0yQTl{2u)c^nh literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base.png.meta b/Assets/GameMain/Textures/Base.png.meta new file mode 100644 index 0000000..1332558 --- /dev/null +++ b/Assets/GameMain/Textures/Base.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: 80a3790c48fc91d4ebcb4d7e2efbb8c8 +TextureImporter: + internalIDToNameTable: + - first: + 213: 7482667652216324306 + second: Square + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 256 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: 0 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: Square + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 2d009a6b596c7d760800000000000000 + internalID: 7482667652216324306 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + physicsShape: + - - {x: -128, y: 128} + - {x: -128, y: -128} + - {x: 128, y: -128} + - {x: 128, y: 128} + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: + Square: 7482667652216324306 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/000000.png b/Assets/GameMain/Textures/Base/000000.png new file mode 100644 index 0000000000000000000000000000000000000000..43b51be0e16a837664ce98ce4318822d225018f2 GIT binary patch literal 768 zcmeAS@N?(olHy`uVBq!ia0vp^DImwa-H`{3okD%FZVwWveIV} uL-E!BA{++cfBhRrnWN!=JrNwVXENWL!q{B-^B*u}GkCiCxvXwa-H`{3okD%FZVwWveIYK zfoH4!YYNK4a4Le`ebFr9(|MhPiRXiFR cB7cg&);67O&n93PEUHx3vIVCg!0J>C>SpWb4 literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/0000FF.png.meta b/Assets/GameMain/Textures/Base/0000FF.png.meta new file mode 100644 index 0000000..af4d6a5 --- /dev/null +++ b/Assets/GameMain/Textures/Base/0000FF.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 884c33b12197e2742bccbfa50fdb76c2 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/00FF00.png b/Assets/GameMain/Textures/Base/00FF00.png new file mode 100644 index 0000000000000000000000000000000000000000..ccbabe2487dddbec5315c1de9cc40885d85dc8dd GIT binary patch literal 780 zcmeAS@N?(olHy`uVBq!ia0vp^DImwa-H`{3okD%FZVwWveIXf z!LwEWH3g2ve6?piG-LI@K4ao}I7ixmpav|N1wMDjp3D ckw3~CA0MB~_(tq0FqJcSy85}Sb4q9e05B7hY5)KL literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/00FF00.png.meta b/Assets/GameMain/Textures/Base/00FF00.png.meta new file mode 100644 index 0000000..10027d4 --- /dev/null +++ b/Assets/GameMain/Textures/Base/00FF00.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 2ea2940f264ad7f49b67d023d4a25a32 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/00FFFF.png b/Assets/GameMain/Textures/Base/00FFFF.png new file mode 100644 index 0000000000000000000000000000000000000000..c5ce685634b0fa4d1864d5455bb1ca65ee7faee4 GIT binary patch literal 793 zcmeAS@N?(olHy`uVBq!ia0vp^DImwa-H`{3okD%FZVwWveIYK zhO?pngB5a$ul^U|xE=G=p7oGf_+S6VQQ^@rAtFH>v}ZbztL^di_R-_OB+uaK>gTe~ HDWM4fSiF_! literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/00FFFF.png.meta b/Assets/GameMain/Textures/Base/00FFFF.png.meta new file mode 100644 index 0000000..aadfff3 --- /dev/null +++ b/Assets/GameMain/Textures/Base/00FFFF.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 37a8a15fff7d4c04aa9f4c1f025c3084 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/333333.png b/Assets/GameMain/Textures/Base/333333.png new file mode 100644 index 0000000000000000000000000000000000000000..e873318289ca95edc5bcb1fa0f0e3b2f8b1bd90a GIT binary patch literal 1143 zcmeAS@N?(olHy`uVBq!ia0vp^DImm;0XwS?RMV z?%mV4b1`4-S*vzVueL0{`d{S5Q=r(H(Eq^;rdRKrZXEvCzj0L2Xb_C10=j2}gZ4~~ Y?DLOiEj!-_EKnFcUHx3vIVCg!0OWOzvH$=8 literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/333333.png.meta b/Assets/GameMain/Textures/Base/333333.png.meta new file mode 100644 index 0000000..23db7cf --- /dev/null +++ b/Assets/GameMain/Textures/Base/333333.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 0e16ddd6337cd494ba5bbe29e92604ee +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/3333FF.png b/Assets/GameMain/Textures/Base/3333FF.png new file mode 100644 index 0000000000000000000000000000000000000000..c09b2bff95620baebb6c2b230f683c566e3dadf5 GIT binary patch literal 1030 zcmeAS@N?(olHy`uVBq!ia0vp^DImwa-H`{3okD%FZVwWveIW! z+`Fea>we8=+I#2p&6uzDtW`UwZ{GQ;p6g4IetPlM{~|A*#+`e%>c8fN(|hNf4gDXy zV0yLX?A8C4JLrEeG7JCf-#BW(Xc&x;bnr)cGXMKhUV$yl!2HeN>FVdQ&MBb@0A=b{ Awg3PC literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/3333FF.png.meta b/Assets/GameMain/Textures/Base/3333FF.png.meta new file mode 100644 index 0000000..ff0bf4a --- /dev/null +++ b/Assets/GameMain/Textures/Base/3333FF.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 7a75d141990275a47b849f3e6b7e4a27 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/33FF33.png b/Assets/GameMain/Textures/Base/33FF33.png new file mode 100644 index 0000000000000000000000000000000000000000..01ebc152392e343a49ef835567c72a213afaab8b GIT binary patch literal 1030 zcmeAS@N?(olHy`uVBq!ia0vp^DImwa-H`{3okD%FZVwWveIW! z+&TU9b-(5_?VS^UF6OH}YnA2xIXhp~bA2hQvn;;)U*yHpKSj@0{nxy3`sdR#q5p#y zO#gg(=IVdT9rT}1HxB>n-#BW(Xc&x;bnr*{(f;?PLTlJsf%%)k)78&qol`;+0I*e7 AN&o-= literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/33FF33.png.meta b/Assets/GameMain/Textures/Base/33FF33.png.meta new file mode 100644 index 0000000..99b484e --- /dev/null +++ b/Assets/GameMain/Textures/Base/33FF33.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: a45798242b5868e458d9967eec90e12d +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/33FFFF.png b/Assets/GameMain/Textures/Base/33FFFF.png new file mode 100644 index 0000000000000000000000000000000000000000..1e977cf2768b0ccb1325d43ba9ee601993c1b7ff GIT binary patch literal 918 zcmeAS@N?(olHy`uVBq!ia0vp^DImm;0XwS?RMV q?wncpU;oBYYBUIjS}Hhb&-CTEy-8p5hHPMdWAJqKb6Mw<&;$VdKGKZ< literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/33FFFF.png.meta b/Assets/GameMain/Textures/Base/33FFFF.png.meta new file mode 100644 index 0000000..3efc7a3 --- /dev/null +++ b/Assets/GameMain/Textures/Base/33FFFF.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: f4a069bdc5659a24b93662085cf8cc98 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/666666.png b/Assets/GameMain/Textures/Base/666666.png new file mode 100644 index 0000000000000000000000000000000000000000..9e21312053ab95d736b0299ecbfd0fb2e7243357 GIT binary patch literal 1143 zcmeAS@N?(olHy`uVBq!ia0vp^DImm;0XwS?ROL z?gO*^g_y7QtiKNM|8Xe3`d{P)v;7C=v!VZk7x4c%z;6=%*S~R8(P$8irUJTWgoE}> Yrvh(xesXgS2Noy{p00i_>zopr01qxg_W%F@ literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/666666.png.meta b/Assets/GameMain/Textures/Base/666666.png.meta new file mode 100644 index 0000000..79e0b66 --- /dev/null +++ b/Assets/GameMain/Textures/Base/666666.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: a287ed60c27f079458c8206e70655400 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/6666FF.png b/Assets/GameMain/Textures/Base/6666FF.png new file mode 100644 index 0000000000000000000000000000000000000000..33c314883a3787e8fd980d1b9d8a28ff9d551942 GIT binary patch literal 1030 zcmeAS@N?(olHy`uVBq!ia0vp^DImwa-H`{3okD%FZVwWveIXf z-3R8}b-(5_)jnXq74y}e_16LZEjwS;bA4%)&nUk7U*rX|{e@?%{%c-fuUl|7^ndUI z{yz@0SN~h?ApfJ$Ec~y3wa-H`{3okD%FZVwWveIXf z-39rKb-(5_)h@8V5cAcZ^_N5af}OAGxxO_1b11(0U*rYz-^ORF{%c-f|HXVZ^ndUI z{x9saR{vY>Ape5jB>b;`m;0XwS?ROL q?t)qPU;oBYYBUIjS}Hhb&!lJ&tT5fg;Vv-0F?hQAxvXm;0XwS?RNA z-_z)QM`OO)v;LZv|5L2^>VJ_J(Lk{?q5p#ywa-H`{3okD%FZVwWveIYK zzNgVS>we8=sy)5^M$A`x)?d@|H|~5@&-F$3ep2z({~|A<_Z@w<>c8fN?KRzJL;nXa z$p0xed-cEN4);IlnuY)MZyYsXGz>;aI{2e3v(DaRSzdWFFn=?6y85}Sb4q9e0EzWi ACjbBd literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/9999FF.png.meta b/Assets/GameMain/Textures/Base/9999FF.png.meta new file mode 100644 index 0000000..1d9df8e --- /dev/null +++ b/Assets/GameMain/Textures/Base/9999FF.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 4ef9d80b045400d4a98478654bd01ca2 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/99FF99.png b/Assets/GameMain/Textures/Base/99FF99.png new file mode 100644 index 0000000000000000000000000000000000000000..1a63b82a0232199a96a97044af3035f962de5005 GIT binary patch literal 1030 zcmeAS@N?(olHy`uVBq!ia0vp^DImwa-H`{3okD%FZVwWveIYK zzN7b(*8Q5#RNKA(Xv|l8)?Z@v-8)~^bA8eMCsus*zsQT|Kf2FW{nxy({YUhf(Eq^; z@;`2$vHIU~hx?E64a5KXH;x)G8U`aI9sE&tX|p#GKDXxrFn=?6y85}Sb4q9e0A~bN A(f|Me literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/99FF99.png.meta b/Assets/GameMain/Textures/Base/99FF99.png.meta new file mode 100644 index 0000000..e8da99f --- /dev/null +++ b/Assets/GameMain/Textures/Base/99FF99.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: d106ccbc93bfca145bfcd107031889e3 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/99FFFF.png b/Assets/GameMain/Textures/Base/99FFFF.png new file mode 100644 index 0000000000000000000000000000000000000000..66ff2c83ba0587bda0b86ed528a91cb08a062a53 GIT binary patch literal 918 zcmeAS@N?(olHy`uVBq!ia0vp^DImm;0XwS?RNA q-%+#hzy6J*)MyY4wN!A>p2@c>o#)}&n|i?f#^CAd=d#Wzp$P!dGV~4r literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/99FFFF.png.meta b/Assets/GameMain/Textures/Base/99FFFF.png.meta new file mode 100644 index 0000000..124d146 --- /dev/null +++ b/Assets/GameMain/Textures/Base/99FFFF.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 0cbcf45882a75e54d8c5fd6cbad23b86 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/CCCCCC.png b/Assets/GameMain/Textures/Base/CCCCCC.png new file mode 100644 index 0000000000000000000000000000000000000000..65a279b729b942898d05ee64de1769241e982e22 GIT binary patch literal 1143 zcmeAS@N?(olHy`uVBq!ia0vp^DImm;0XwS?ROr z-=FjU@5FqyXZ`ir{(o`t)&C+d&j0^&{%q*~;05;oKiiv!|MhPiRWup|qp5)I8R4Kk ZQ_PoO1qIP24Pb%7;OXk;vd$@?2>=UB*02Bo literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/CCCCCC.png.meta b/Assets/GameMain/Textures/Base/CCCCCC.png.meta new file mode 100644 index 0000000..a744c03 --- /dev/null +++ b/Assets/GameMain/Textures/Base/CCCCCC.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: c64bfcd1922f49347868560d49692593 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/CCCCFF.png b/Assets/GameMain/Textures/Base/CCCCFF.png new file mode 100644 index 0000000000000000000000000000000000000000..fb5f6dac1d652bf7d257a3b5b2c8bd58cddc3e5f GIT binary patch literal 1030 zcmeAS@N?(olHy`uVBq!ia0vp^DImwa-H`{3okD%FZVwWveIYK zzdz@5*ZrE$^!Mld+c975S$}=D-@fxzJ=d4#^?Ait|BJjh|NqXjRsS_F%>TdhZ0P^s z1@`}oXRrRZ+@b#8bF=Wj{*9vsjE2DoNe6$F6U)+hrilm~1mwa-H`{3okD%FZVwWveIYK zzdQAL>we8=`n&W0otUrotiOu?@7(#Sp6ko=f5pXD|BJjh|M&T`RsS_F%>RAmdKI;Vst0D!uQ AW&i*H literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/CCFFCC.png.meta b/Assets/GameMain/Textures/Base/CCFFCC.png.meta new file mode 100644 index 0000000..e733120 --- /dev/null +++ b/Assets/GameMain/Textures/Base/CCFFCC.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 8c1a3d8a012922a42b50b4690794a8d6 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/CCFFFF.png b/Assets/GameMain/Textures/Base/CCFFFF.png new file mode 100644 index 0000000000000000000000000000000000000000..536520b7cc3a204b49ed64b17fa838b9cd115ce7 GIT binary patch literal 918 zcmeAS@N?(olHy`uVBq!ia0vp^DImm;0XwS?ROr q-yO5?zy6J*)MyY4wN!A>o~iOl)eoWN`U`>ijlt8^&t;ucLK6V4rxua` literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/CCFFFF.png.meta b/Assets/GameMain/Textures/Base/CCFFFF.png.meta new file mode 100644 index 0000000..8a0d802 --- /dev/null +++ b/Assets/GameMain/Textures/Base/CCFFFF.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 937cc1207f4dc3941978b32f8cbf75dc +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/FF0000.png b/Assets/GameMain/Textures/Base/FF0000.png new file mode 100644 index 0000000000000000000000000000000000000000..c21598dba0cc2e251de16afd61d351a4b8ef86ae GIT binary patch literal 780 zcmeAS@N?(olHy`uVBq!ia0vp^DImwa-H`{3okD%FZVwWveIV} z&$CtkH76X5`D)K-FqJcSy85}Sb4q9e07eCpBLDyZ literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/FF0000.png.meta b/Assets/GameMain/Textures/Base/FF0000.png.meta new file mode 100644 index 0000000..51d14eb --- /dev/null +++ b/Assets/GameMain/Textures/Base/FF0000.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: fe33cca9ef48920419daa2f73e705636 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/FF00FF.png b/Assets/GameMain/Textures/Base/FF00FF.png new file mode 100644 index 0000000000000000000000000000000000000000..ece048583ca1c2feb494e1ae378a8a3a7ac437d0 GIT binary patch literal 793 zcmeAS@N?(olHy`uVBq!ia0vp^DImwa-H`{3okD%FZVwWveIW! z&)Lxb!3xR6SO1HgxDoT!p4G@K{I7rGsPJf*5Ro7b+B4}$XnX8E^_Ufywa-H`{3okD%FZVwWveIYK zpCbMAb-(5_{d^jCF6OH}>!;Iu=j?n{&-G+_wPo?u{~{;!zZX4Q^n-#BW(Xc&x;bnr*nsP28~ByFW~VE$(CboFyt=akR{04-)$ AMgRZ+ literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/FF3333.png.meta b/Assets/GameMain/Textures/Base/FF3333.png.meta new file mode 100644 index 0000000..c7284cf --- /dev/null +++ b/Assets/GameMain/Textures/Base/FF3333.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: dc09ac18e8306344ebc213d58ddb10b9 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/FF33FF.png b/Assets/GameMain/Textures/Base/FF33FF.png new file mode 100644 index 0000000000000000000000000000000000000000..0635f25683ae86b2129ba1290bc3056c1661a92b GIT binary patch literal 918 zcmeAS@N?(olHy`uVBq!ia0vp^DImm;0XwS?ROr qPmx*pU;oBYYBUIjS}Hhb&*ai(Z*pz<^LxPj#^CAd=d#Wzp$P!+ChU3u literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/FF33FF.png.meta b/Assets/GameMain/Textures/Base/FF33FF.png.meta new file mode 100644 index 0000000..75ac67c --- /dev/null +++ b/Assets/GameMain/Textures/Base/FF33FF.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: a169c975d69ea234582b7e3cee0c6dae +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/FF6666.png b/Assets/GameMain/Textures/Base/FF6666.png new file mode 100644 index 0000000000000000000000000000000000000000..bc902a48ec92a654c3ea9d543acbd44a36a0e297 GIT binary patch literal 1030 zcmeAS@N?(olHy`uVBq!ia0vp^DImwa-H`{3okD%FZVwWveIYK zpGNtNb-(5_{baVk5cAcZ^%HyDf}OAGxt{Rb;`!3T{$}uW^>bP0l+XkKVAdpp literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/FF6666.png.meta b/Assets/GameMain/Textures/Base/FF6666.png.meta new file mode 100644 index 0000000..c4e3f8d --- /dev/null +++ b/Assets/GameMain/Textures/Base/FF6666.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 9ce448895a272e140b40285291bfa90a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/FF66FF.png b/Assets/GameMain/Textures/Base/FF66FF.png new file mode 100644 index 0000000000000000000000000000000000000000..61efd788f87a4e4ca5bb2ff1a32794a26b261422 GIT binary patch literal 918 zcmeAS@N?(olHy`uVBq!ia0vp^DImm;0XwS?ROr qPor7*U;oBYYBUIjS}Hhb&lK||SV2Q?j|nipF?hQAxvXwa-H`{3okD%FZVwWveIYK zAKm*&>we8=`We0NXv|l8)=%4Ox_7>+=X#R=Q>^&ve~}aSKj}VO^;aI{2fU6K8J{qdolyFn=?6y85}Sb4q9e0Eg37 A`v3p{ literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/FF9999.png.meta b/Assets/GameMain/Textures/Base/FF9999.png.meta new file mode 100644 index 0000000..94e84d8 --- /dev/null +++ b/Assets/GameMain/Textures/Base/FF9999.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: ebcd01df01c6a1f4dae70a2d5c51da95 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/FF99FF.png b/Assets/GameMain/Textures/Base/FF99FF.png new file mode 100644 index 0000000000000000000000000000000000000000..2c057533593eaf59b881e1564633f7bac95f2a14 GIT binary patch literal 918 zcmeAS@N?(olHy`uVBq!ia0vp^DImm;0XwS?ROr qkFHtxU;oBYYBUIjS}Hhb&s3U}&U343;Zb0IWAJqKb6Mw<&;$T^ztIZ- literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/FF99FF.png.meta b/Assets/GameMain/Textures/Base/FF99FF.png.meta new file mode 100644 index 0000000..96bd287 --- /dev/null +++ b/Assets/GameMain/Textures/Base/FF99FF.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 113a9d3534c1ca8449529e40c43f652e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/FFCCCC.png b/Assets/GameMain/Textures/Base/FFCCCC.png new file mode 100644 index 0000000000000000000000000000000000000000..427c0798608241383edec2f3ba05c611b32f3dd2 GIT binary patch literal 1030 zcmeAS@N?(olHy`uVBq!ia0vp^DImwa-H`{3okD%FZVwWveIYK zpXc>?>we8=`g#8UotUrote@up-?{TuJ=YWa|HZ{u|BIZc|M&das{fi3{{K0DHuQh6 z!vCN1XRrRZ+~MD6d-L$W{*9vsjE2DoNe6$FJN?pmPPe&i1LkiAPgg&ebxsLQ0F+3H AKL7v# literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/FFCCCC.png.meta b/Assets/GameMain/Textures/Base/FFCCCC.png.meta new file mode 100644 index 0000000..8592bd1 --- /dev/null +++ b/Assets/GameMain/Textures/Base/FFCCCC.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 1109f3bc8996b424b92916c77bd48404 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/FFCCFF.png b/Assets/GameMain/Textures/Base/FFCCFF.png new file mode 100644 index 0000000000000000000000000000000000000000..1a718565f709778cd92d75c62051b9ec0aaeb324 GIT binary patch literal 918 zcmeAS@N?(olHy`uVBq!ia0vp^DImm;0XwS?ROr q&vUczzy6J*)MyY4wN!A>o~idj)sH!m7i@s}jlt8^&t;ucLK6VmlNycy literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/FFCCFF.png.meta b/Assets/GameMain/Textures/Base/FFCCFF.png.meta new file mode 100644 index 0000000..153d17a --- /dev/null +++ b/Assets/GameMain/Textures/Base/FFCCFF.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 0f14f214d3fe58e449fa80acee85d14d +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/FFFF00.png b/Assets/GameMain/Textures/Base/FFFF00.png new file mode 100644 index 0000000000000000000000000000000000000000..da3500f5f111ffe8fe109fff5ea89b98a20ec428 GIT binary patch literal 793 zcmeAS@N?(olHy`uVBq!ia0vp^DImwa-H`{3okD%FZVwWveIW! z&Y95v!3xsFSO1HgI2QBOo^_L9_+S6VQQ^@rAtFH>v}fwyqV3@pu00c&m;0XwS?ROr q&2;1Nzy6J*)MyY4wN!A>o@t7iy@}uIfNQ|~#^CAd=d#Wzp$PyaP4Zs= literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/FFFF33.png.meta b/Assets/GameMain/Textures/Base/FFFF33.png.meta new file mode 100644 index 0000000..a47292c --- /dev/null +++ b/Assets/GameMain/Textures/Base/FFFF33.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: aa1fcd444e02a7a49a90fc624f35a921 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/FFFF66.png b/Assets/GameMain/Textures/Base/FFFF66.png new file mode 100644 index 0000000000000000000000000000000000000000..ee34e4a514b62337ebc1993ff95c432edb243a11 GIT binary patch literal 918 zcmeAS@N?(olHy`uVBq!ia0vp^DImm;0XwS?ROr q4ZlhFU;oBYYBUIjS}Hhb&opC4u!8>V;$^`6#^CAd=d#Wzp$Py11ikG5 literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/FFFF66.png.meta b/Assets/GameMain/Textures/Base/FFFF66.png.meta new file mode 100644 index 0000000..48a32f2 --- /dev/null +++ b/Assets/GameMain/Textures/Base/FFFF66.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 2ec898bea482c9342843b492eaac793a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/FFFF99.png b/Assets/GameMain/Textures/Base/FFFF99.png new file mode 100644 index 0000000000000000000000000000000000000000..17d8512e45b90d35909ec898bb81a5910ad55592 GIT binary patch literal 918 zcmeAS@N?(olHy`uVBq!ia0vp^DImm;0XwS?ROr qO}=6HU;oBYYBUIjS}Hhb&otL6o#$D@OH*KeWAJqKb6Mw<&;$T0-QsBg literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/FFFF99.png.meta b/Assets/GameMain/Textures/Base/FFFF99.png.meta new file mode 100644 index 0000000..e774c20 --- /dev/null +++ b/Assets/GameMain/Textures/Base/FFFF99.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: b082b3775aa3b804e965f4be99016fad +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/FFFFCC.png b/Assets/GameMain/Textures/Base/FFFFCC.png new file mode 100644 index 0000000000000000000000000000000000000000..16a43aa324cf4ebb274f2cd9d3d44dbc1c37c961 GIT binary patch literal 918 zcmeAS@N?(olHy`uVBq!ia0vp^DImm;0XwS?ROr qjlFsJU;oBYYBUIjS}Hhb&$Mt))eqrk6^6k4#^CAd=d#Wzp$PyrS<<8c literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/FFFFCC.png.meta b/Assets/GameMain/Textures/Base/FFFFCC.png.meta new file mode 100644 index 0000000..298e4fc --- /dev/null +++ b/Assets/GameMain/Textures/Base/FFFFCC.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 790f4f17ba26d774a8e821ba9ac1b379 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Base/FFFFFF.png b/Assets/GameMain/Textures/Base/FFFFFF.png new file mode 100644 index 0000000000000000000000000000000000000000..7c682ce9e5c359dbddde4700d4404d16bb6f5b98 GIT binary patch literal 805 zcmeAS@N?(olHy`uVBq!ia0vp^DImwa-H`{3okD%FZVwWveIW! z&g|9ymOE@a8~Q(3;r6pt|1~G%7GM1@a$?)gSM^*ew`0EAvu?^=_iH}WO|$U7{*9x` gM?(fzBKV`c%&zZAAGd}mF!?ihy85}Sb4q9e0QmmGy8r+H literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Base/FFFFFF.png.meta b/Assets/GameMain/Textures/Base/FFFFFF.png.meta new file mode 100644 index 0000000..1ea93c5 --- /dev/null +++ b/Assets/GameMain/Textures/Base/FFFFFF.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 3dbfbc220393cfc44ab500e9fc02b3e2 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Bearing.meta b/Assets/GameMain/Textures/Bearing.meta new file mode 100644 index 0000000..b2f7381 --- /dev/null +++ b/Assets/GameMain/Textures/Bearing.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 60f9db208c62b9b4581f7dfc44d78fd1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Bearing.png b/Assets/GameMain/Textures/Bearing.png new file mode 100644 index 0000000000000000000000000000000000000000..a819a94061e76dd1e31179d28e9762622a17d53f GIT binary patch literal 6085 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 literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Bearing.png.meta b/Assets/GameMain/Textures/Bearing.png.meta new file mode 100644 index 0000000..c4ed341 --- /dev/null +++ b/Assets/GameMain/Textures/Bearing.png.meta @@ -0,0 +1,229 @@ +fileFormatVersion: 2 +guid: e31321df62f1587469b0733897970679 +TextureImporter: + internalIDToNameTable: + - first: + 213: -2413806693520163455 + second: Circle + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 256 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: 0 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: Circle + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: + - - {x: 33, y: 128} + - {x: -33, y: 128} + - {x: -95, y: 95} + - {x: -128, y: 33} + - {x: -128, y: -33} + - {x: -95, y: -95} + - {x: -33, y: -128} + - {x: 33, y: -128} + - {x: 95, y: -95} + - {x: 128, y: -33} + - {x: 128, y: 33} + - {x: 95, y: 95} + physicsShape: + - - {x: 0, y: 128} + - {x: -39, y: 121} + - {x: -75, y: 103} + - {x: -103, y: 75} + - {x: -121, y: 39} + - {x: -128, y: 0} + - {x: -121, y: -39} + - {x: -103, y: -75} + - {x: -75, y: -103} + - {x: -39, y: -121} + - {x: 0, y: -128} + - {x: 39, y: -121} + - {x: 75, y: -103} + - {x: 103, y: -75} + - {x: 121, y: -39} + - {x: 128, y: 0} + - {x: 121, y: 39} + - {x: 103, y: 75} + - {x: 75, y: 103} + - {x: 39, y: 121} + tessellationDetail: 0 + bones: [] + spriteID: 18d3544e99f608ed0800000000000000 + internalID: -2413806693520163455 + vertices: [] + indices: + edges: [] + weights: [] + outline: + - - {x: 33, y: 128} + - {x: -33, y: 128} + - {x: -95, y: 95} + - {x: -128, y: 33} + - {x: -128, y: -33} + - {x: -95, y: -95} + - {x: -33, y: -128} + - {x: 33, y: -128} + - {x: 95, y: -95} + - {x: 128, y: -33} + - {x: 128, y: 33} + - {x: 95, y: 95} + physicsShape: + - - {x: 0, y: 128} + - {x: -39, y: 121} + - {x: -75, y: 103} + - {x: -103, y: 75} + - {x: -121, y: 39} + - {x: -128, y: 0} + - {x: -121, y: -39} + - {x: -103, y: -75} + - {x: -75, y: -103} + - {x: -39, y: -121} + - {x: 0, y: -128} + - {x: 39, y: -121} + - {x: 75, y: -103} + - {x: 103, y: -75} + - {x: 121, y: -39} + - {x: 128, y: 0} + - {x: 121, y: 39} + - {x: 103, y: 75} + - {x: 75, y: 103} + - {x: 39, y: 121} + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: + Circle: -2413806693520163455 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Capsule.png b/Assets/GameMain/Textures/Capsule.png new file mode 100644 index 0000000000000000000000000000000000000000..eb8bb2b65ace32b83aedbc16a1dd254a82c62f5a GIT binary patch literal 7068 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 literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/Capsule.png.meta b/Assets/GameMain/Textures/Capsule.png.meta new file mode 100644 index 0000000..cedfd90 --- /dev/null +++ b/Assets/GameMain/Textures/Capsule.png.meta @@ -0,0 +1,233 @@ +fileFormatVersion: 2 +guid: 237e2a8a62fb8b7428d9c7b11d7fab0b +TextureImporter: + internalIDToNameTable: + - first: + 213: -9095717837082945937 + second: Capsule + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: 0 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: Capsule + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 256 + height: 512 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: + - - {x: -33, y: 256} + - {x: -95, y: 223} + - {x: -128, y: 161} + - {x: -128, y: -161} + - {x: -95, y: -223} + - {x: -33, y: -256} + - {x: 33, y: -256} + - {x: 95, y: -223} + - {x: 128, y: -161} + - {x: 128, y: 161} + - {x: 95, y: 223} + - {x: 33, y: 256} + physicsShape: + - - {x: 0, y: 256} + - {x: -39, y: 249} + - {x: -75, y: 231} + - {x: -103, y: 203} + - {x: -121, y: 167} + - {x: -128, y: 128} + - {x: -128, y: -128} + - {x: -121, y: -167} + - {x: -103, y: -203} + - {x: -75, y: -231} + - {x: -39, y: -249} + - {x: 0, y: -256} + - {x: 39, y: -249} + - {x: 75, y: -231} + - {x: 103, y: -203} + - {x: 121, y: -167} + - {x: 128, y: -128} + - {x: 128, y: 128} + - {x: 121, y: 167} + - {x: 103, y: 203} + - {x: 75, y: 231} + - {x: 39, y: 249} + tessellationDetail: 0 + bones: [] + spriteID: f669c7f71d485c180800000000000000 + internalID: -9095717837082945937 + vertices: [] + indices: + edges: [] + weights: [] + outline: + - - {x: -33, y: 256} + - {x: -95, y: 223} + - {x: -128, y: 161} + - {x: -128, y: -161} + - {x: -95, y: -223} + - {x: -33, y: -256} + - {x: 33, y: -256} + - {x: 95, y: -223} + - {x: 128, y: -161} + - {x: 128, y: 161} + - {x: 95, y: 223} + - {x: 33, y: 256} + physicsShape: + - - {x: 0, y: 256} + - {x: -39, y: 249} + - {x: -75, y: 231} + - {x: -103, y: 203} + - {x: -121, y: 167} + - {x: -128, y: 128} + - {x: -128, y: -128} + - {x: -121, y: -167} + - {x: -103, y: -203} + - {x: -75, y: -231} + - {x: -39, y: -249} + - {x: 0, y: -256} + - {x: 39, y: -249} + - {x: 75, y: -231} + - {x: 103, y: -203} + - {x: 121, y: -167} + - {x: 128, y: -128} + - {x: 128, y: 128} + - {x: 121, y: 167} + - {x: 103, y: 203} + - {x: 75, y: 231} + - {x: 39, y: 249} + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: + Capsule: -9095717837082945937 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/ControlBase.png b/Assets/GameMain/Textures/ControlBase.png new file mode 100644 index 0000000000000000000000000000000000000000..3410c68252208bef952a5d8683a07a4a581aac8f GIT binary patch literal 2097 zcmeHI&5zSY6rb=>J_;2Q7vMCQ3l-QNJ6UHl!YoU&-9)Olt0hvG8D)-&SB4T(#SRR#Y57f>%nTmcDH{R=91&WE*IQNAu*uxxoe^PAs$?>Fx~|FXKW zeDv_C!w8|Ht!85lp%M&B=-?iBJw3MI!0S-byqY2O?eY96p*wd^AhiFKY_IF};77_; zWU)|ngf)s1KqGWvVU#ewAvErYo{W9tpWh!EScbmw^ISlJq%Qihxt)qD+beCpy}@gt zv2YPz7*QaIgl2dY4dRTBd}GW@VVqCf1|CE7hHot92Jw2Zit8#B*t3Yq32||?W;tG^ zGCzMFyTm0nsoD-PU6&G%&Xw`>GQe6IcIjH)c% z;@Ylj0>aF;V$DWooSm65G(^TznP{nEoHMeH+SI-Qo=!rDl7cqQrZRzG_J}36W05?h zF)-u>F4;^6W8)#W#Xv+N))`=(0-N-eR#{*D4|TD;%K%6l1ci-v`VvKjiA*oufH0~8Ibx?UTOxLl@lyP=RYA=B)G;E>a~|lFqHAU5PXB@86ZMqIxRn2feG!fFM#wt zc`<=ys;h@A6^lJk>mxGH2KVi}XeW`_{|$1ywxhsjaOfKOuxMBCQ8YXeLzhdTojw2U z^&5ot{LyMGwnumWe(IDEKJth>die4*Up~J7=63JJr9Yp2cPsb?KSuXX-m2{VwTqq{ oxpb%0EF<}K@~a?UJQ@BvaR1f5fA>Bno&2ZXT3Ts5xP0yQTl{2u)c^nh literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/ControlBase.png.meta b/Assets/GameMain/Textures/ControlBase.png.meta new file mode 100644 index 0000000..a085f38 --- /dev/null +++ b/Assets/GameMain/Textures/ControlBase.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: 07f4491fe5244c2469af3624ea0b4d0c +TextureImporter: + internalIDToNameTable: + - first: + 213: 7482667652216324306 + second: Square + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: 0 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: Square + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 2d009a6b596c7d760800000000000000 + internalID: 7482667652216324306 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + physicsShape: + - - {x: -128, y: 128} + - {x: -128, y: -128} + - {x: 128, y: -128} + - {x: 128, y: 128} + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: + Square: 7482667652216324306 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/ElementBase.png b/Assets/GameMain/Textures/ElementBase.png new file mode 100644 index 0000000000000000000000000000000000000000..3410c68252208bef952a5d8683a07a4a581aac8f GIT binary patch literal 2097 zcmeHI&5zSY6rb=>J_;2Q7vMCQ3l-QNJ6UHl!YoU&-9)Olt0hvG8D)-&SB4T(#SRR#Y57f>%nTmcDH{R=91&WE*IQNAu*uxxoe^PAs$?>Fx~|FXKW zeDv_C!w8|Ht!85lp%M&B=-?iBJw3MI!0S-byqY2O?eY96p*wd^AhiFKY_IF};77_; zWU)|ngf)s1KqGWvVU#ewAvErYo{W9tpWh!EScbmw^ISlJq%Qihxt)qD+beCpy}@gt zv2YPz7*QaIgl2dY4dRTBd}GW@VVqCf1|CE7hHot92Jw2Zit8#B*t3Yq32||?W;tG^ zGCzMFyTm0nsoD-PU6&G%&Xw`>GQe6IcIjH)c% z;@Ylj0>aF;V$DWooSm65G(^TznP{nEoHMeH+SI-Qo=!rDl7cqQrZRzG_J}36W05?h zF)-u>F4;^6W8)#W#Xv+N))`=(0-N-eR#{*D4|TD;%K%6l1ci-v`VvKjiA*oufH0~8Ibx?UTOxLl@lyP=RYA=B)G;E>a~|lFqHAU5PXB@86ZMqIxRn2feG!fFM#wt zc`<=ys;h@A6^lJk>mxGH2KVi}XeW`_{|$1ywxhsjaOfKOuxMBCQ8YXeLzhdTojw2U z^&5ot{LyMGwnumWe(IDEKJth>die4*Up~J7=63JJr9Yp2cPsb?KSuXX-m2{VwTqq{ oxpb%0EF<}K@~a?UJQ@BvaR1f5fA>Bno&2ZXT3Ts5xP0yQTl{2u)c^nh literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/ElementBase.png.meta b/Assets/GameMain/Textures/ElementBase.png.meta new file mode 100644 index 0000000..2113045 --- /dev/null +++ b/Assets/GameMain/Textures/ElementBase.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: 47d4dac76943fa042bc776d9330dde07 +TextureImporter: + internalIDToNameTable: + - first: + 213: 7482667652216324306 + second: Square + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: 0 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: Square + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 2d009a6b596c7d760800000000000000 + internalID: 7482667652216324306 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + physicsShape: + - - {x: -128, y: 128} + - {x: -128, y: -128} + - {x: 128, y: -128} + - {x: 128, y: 128} + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: + Square: 7482667652216324306 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/HexagonFlatTop.png b/Assets/GameMain/Textures/HexagonFlatTop.png new file mode 100644 index 0000000000000000000000000000000000000000..dd4a6f3d95faf5a95be484c2cab140dde748fbc5 GIT binary patch literal 6927 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 EUy_B!q5uE@ literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/HexagonFlatTop.png.meta b/Assets/GameMain/Textures/HexagonFlatTop.png.meta new file mode 100644 index 0000000..5dafb1f --- /dev/null +++ b/Assets/GameMain/Textures/HexagonFlatTop.png.meta @@ -0,0 +1,193 @@ +fileFormatVersion: 2 +guid: c3b25169c2989c84fbe55dc85dd24042 +TextureImporter: + internalIDToNameTable: + - first: + 213: 2747690628134850419 + second: Hexagon Flat-Top + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: 0 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: Hexagon Flat-Top + rect: + serializedVersion: 2 + x: 0 + y: 15 + width: 256 + height: 226 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: + - - {x: -65, y: 113} + - {x: -128, y: 4} + - {x: -128, y: -4} + - {x: -65, y: -113} + - {x: 65, y: -113} + - {x: 128, y: -4} + - {x: 128, y: 4} + - {x: 65, y: 113} + physicsShape: + - - {x: -64, y: 111} + - {x: -128, y: 0} + - {x: -64, y: -111} + - {x: 64, y: -111} + - {x: 128, y: 0} + - {x: 64, y: 111} + tessellationDetail: 0 + bones: [] + spriteID: 37fc5a28112c12620800000000000000 + internalID: 2747690628134850419 + vertices: [] + indices: + edges: [] + weights: [] + outline: + - - {x: -65, y: 113} + - {x: -128, y: 4} + - {x: -128, y: -4} + - {x: -65, y: -113} + - {x: 65, y: -113} + - {x: 128, y: -4} + - {x: 128, y: 4} + - {x: 65, y: 113} + physicsShape: + - - {x: -64, y: 111} + - {x: -128, y: 0} + - {x: -64, y: -111} + - {x: 64, y: -111} + - {x: 128, y: 0} + - {x: 64, y: 111} + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: + Hexagon Flat-Top: 2747690628134850419 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/HexagonPointedTop.png b/Assets/GameMain/Textures/HexagonPointedTop.png new file mode 100644 index 0000000000000000000000000000000000000000..e8b1790b482b1912e5c93bad1e900f5fded7362f GIT binary patch literal 6079 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 Q1^0K)Y^pTAX0V0-16951J literal 0 HcmV?d00001 diff --git a/Assets/GameMain/Textures/IsometricDiamond.png.meta b/Assets/GameMain/Textures/IsometricDiamond.png.meta new file mode 100644 index 0000000..8be5f62 --- /dev/null +++ b/Assets/GameMain/Textures/IsometricDiamond.png.meta @@ -0,0 +1,189 @@ +fileFormatVersion: 2 +guid: abcc1fb319ede994a8719175cd3602fa +TextureImporter: + internalIDToNameTable: + - first: + 213: 3625043607559282579 + second: Isometric Diamond + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: 0 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: Isometric Diamond + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 256 + height: 128 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: + - - {x: -4, y: 64} + - {x: -128, y: 2} + - {x: -128, y: -2} + - {x: -4, y: -64} + - {x: 4, y: -64} + - {x: 128, y: -2} + - {x: 128, y: 2} + - {x: 4, y: 64} + physicsShape: + - - {x: 0, y: 64} + - {x: -128, y: 0} + - {x: 0, y: -64} + - {x: 128, y: 0} + tessellationDetail: 0 + bones: [] + spriteID: 39f1fdb64fdbe4230800000000000000 + internalID: 3625043607559282579 + vertices: [] + indices: + edges: [] + weights: [] + outline: + - - {x: -4, y: 64} + - {x: -128, y: 2} + - {x: -128, y: -2} + - {x: -4, y: -64} + - {x: 4, y: -64} + - {x: 128, y: -2} + - {x: 128, y: 2} + - {x: 4, y: 64} + physicsShape: + - - {x: 0, y: 64} + - {x: -128, y: 0} + - {x: 0, y: -64} + - {x: 128, y: 0} + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: + Isometric Diamond: 3625043607559282579 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Muzzle.meta b/Assets/GameMain/Textures/Muzzle.meta new file mode 100644 index 0000000..b10bcf7 --- /dev/null +++ b/Assets/GameMain/Textures/Muzzle.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 29b4208ecbec08a4582ab0da88f9348b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Textures/Muzzle.png b/Assets/GameMain/Textures/Muzzle.png new file mode 100644 index 0000000000000000000000000000000000000000..cc0c2dce05aa9da389db4813d1034b4ae1aaac38 GIT binary patch literal 3382 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 literal 0 HcmV?d00001 diff --git a/docs/IconColorDesgin.md b/docs/IconColorDesgin.md new file mode 100644 index 0000000..6d95906 --- /dev/null +++ b/docs/IconColorDesgin.md @@ -0,0 +1,225 @@ +使用的 5 个属性: +- AttackDamage(MuzzleComp) +- DamageRandomRate(MuzzleComp) +- RotateSpeed(BearingComp) +- AttackRange(BearingComp) +- AttackSpeed(BaseComp) + +下面我给你一套专门为这 5 个属性设计的稳定映射方案,目标是: + +* 不出现“未使用 RGB 位导致底色聚集” +* 不出现颜色难以区分 +* 不随数值微调产生大跳变 +* 能一眼看出“偏伤害 / 偏射速 / 偏范围”等方向 + +--- + +# 一、先定颜色语义(非常关键) + +我们先给每个属性一个**语义色相(Hue)**,并且颜色间隔拉开,避免混淆。 + +| 属性 | 含义倾向 | Hue建议 | +|------------------|--------|----------| +| AttackDamage | 爆发/力量 | 0°(红) | +| DamageRandomRate | 波动/暴击感 | 30°(橙) | +| RotateSpeed | 灵活/机动 | 200°(青蓝) | +| AttackRange | 空间/覆盖 | 120°(绿) | +| AttackSpeed | 频率/连发 | 270°(紫) | + +解释: + +* 伤害 → 红(直觉最强) +* 范围 → 绿(覆盖感) +* 攻速 → 紫(科技感/高频) +* 旋转 → 青蓝(灵活) +* 随机伤害 → 橙(不稳定爆发) + +Hue 间隔 > 60°,视觉上足够区分。 + +--- + +# 二、不要直接映射到 RGB,而是走 HSV + +### Step 1:归一化 + +对每个属性: + +```csharp +x_i = clamp01((value_i - min_i) / (max_i - min_i)) +``` + +⚠️ 不要用当前组件的 min/max,要用全局平衡区间。 + +--- + +# 三、核心算法:主导属性 + 混合属性 + +## 1️⃣ 找出前两名属性 + +```csharp +i1 = argmax(x_i) +i2 = secondMax(x_i) +``` + +--- + +## 2️⃣ Hue 插值 + +```csharp +w = x_i2 / (x_i1 + x_i2 + 0.0001f) +hue = lerp(Hue[i1], Hue[i2], w) +``` + +这能避免“单一属性颜色单调”的问题。 + +例如: + +* 高伤害 + 高攻速 → 红紫之间 +* 高范围 + 高旋转 → 绿青之间 + +--- + +# 四、饱和度(Saturation) + +饱和度表达“专精度”。 + +```csharp +purity = x_i1 - x_i2 +sat = lerp(0.45f, 0.9f, clamp01(purity * 1.5f)) +``` + +* 越单一专精 → 越鲜艳 +* 属性均衡 → 稍微偏灰 + +这样“杂牌组件”会看起来更灰一点,专精流派更亮。 + +--- + +# 五、明度(Value) + +明度表达“整体强度”。 + +```csharp +intensity = (x1 + x2 + x3 + x4 + x5) / 5f +val = lerp(0.55f, 0.95f, intensity) +``` + +强度越高越亮。 + +⚠️ 不要让 val 太低,否则会看起来像“禁用状态”。 + +--- + +# 六、品质不要改 Hue + +品质建议只影响: + +* 外描边颜色 +* 发光 +* 明度偏移 +* 图标底板 + +例如: + +| 品质 | 处理方式 | +|----|-----------------| +| 白 | val × 0.9 | +| 绿 | 无变化 | +| 蓝 | 外发光 | +| 紫 | val ×1.05 + 外发光 | +| 红 | 双层发光 + 轻微高对比 | + +不要把红品质直接改成红色,那会和 AttackDamage 冲突。 + +--- + +# 七、避免“颜色基地”的关键 + +你之前的问题是: + +> 某些属性没有值 → RGB 位没用 → 颜色集中 + +用现在方案: + +* 即便某些属性接近 0,Hue 仍由主导属性决定 +* 不会出现“默认黑色/灰色聚集” + +另外建议: + +```csharp +sat = max(sat, 0.4f); +val = max(val, 0.6f); +``` + +避免太灰太暗。 + +--- + +# 八、额外增强:组件类型偏移 + +你有三类组件(枪口/轴承/底座),可以轻微加一个 hue 偏移: + +* 枪口:+0° +* 轴承:+15° +* 底座:-15° + +这样即便数值类似,也能区分结构类型。 + +--- + +# 九、完整伪代码(你可以直接用) + +```csharp +Color GenerateColor(float[] normalizedStats, ComponentType type) +{ + float[] hueMap = { 0f, 30f, 200f, 120f, 270f }; + + int i1 = MaxIndex(normalizedStats); + int i2 = SecondMaxIndex(normalizedStats); + + float w = normalizedStats[i2] / + (normalizedStats[i1] + normalizedStats[i2] + 0.0001f); + + float hue = Mathf.Lerp(hueMap[i1], hueMap[i2], w); + + float purity = normalizedStats[i1] - normalizedStats[i2]; + float sat = Mathf.Lerp(0.45f, 0.9f, Mathf.Clamp01(purity * 1.5f)); + + float intensity = normalizedStats.Average(); + float val = Mathf.Lerp(0.55f, 0.95f, intensity); + + if (type == ComponentType.Axis) hue += 15f; + if (type == ComponentType.Base) hue -= 15f; + + return Color.HSVToRGB(hue / 360f, sat, val); +} +``` + +--- + +# 十、视觉稳定性测试建议 + +做一个小测试场景: + +* 随机生成 200 个组件 +* 打印颜色到网格 +* 看是否: + + * 有大量颜色过于相似 + * 有大面积灰色 + * 是否能一眼区分“偏伤害”“偏范围”等 + +--- + +# 结论 + +你不应该: + +❌ 把 5 个属性硬塞进 RGB 位 + +你应该: + +✅ 用 Hue 表达方向 +✅ 用 Saturation 表达专精 +✅ 用 Value 表达强度 +✅ 用外观表达品质 diff --git a/docs/TODO.md b/docs/TODO.md index e54f6c5..362345d 100644 --- a/docs/TODO.md +++ b/docs/TODO.md @@ -19,7 +19,7 @@ | [x] | P0-04 | 建立单局 Run 状态模型(金币、生命、库存、当前节点) | `Assets/GameMain/Scripts/Procedure/` | 进入/退出节点时状态可持续传递 | | [ ] | P0-05 | 实现 10 节点地图生成(最后节点固定 Boss) | `Assets/GameMain/Scripts/Scene/` | 每局都生成 10 节点且第 10 节点为 Boss | | [x] | P0-06 | 实现节点选择与跳转流程(战斗/事件/商店) | `Assets/GameMain/Scripts/Procedure/` | 节点完成后可返回地图并进入下个节点 | -| [ ] | P0-07 | 战斗节点基础玩法:放置塔、出怪、基地扣血、胜负判定 | `Assets/GameMain/Scripts/Entity/`
`Assets/GameMain/Scripts/Scene/` | 可完整打一场并得到胜利/失败结果 | +| [x] | P0-07 | 战斗节点基础玩法:放置塔、出怪、基地扣血、胜负判定 | `Assets/GameMain/Scripts/Entity/`
`Assets/GameMain/Scripts/Scene/` | 可完整打一场并得到胜利/失败结果 | | [ ] | P0-08 | 胜利波次与结算规则(100/80/50/<50) | `Assets/GameMain/Scripts/Procedure/` | 结算奖励与惩罚严格匹配设计文档 | | [ ] | P0-09 | 敌人掉落与关卡奖励(组件/配件/金币) | `Assets/GameMain/Scripts/Entity/` | 战斗结束能发放掉落并写入库存 | | [ ] | P0-10 | 节点后组装:枪口/轴承/底座三组件约束 | `Assets/GameMain/Scripts/Entity/`
`Assets/GameMain/Scripts/UI/Templates/GameScene/` | 未满足三组件时禁止出战 |