Merge pull request 'card_system' (#38) from card_system into main
Reviewed-on: #38
This commit is contained in:
BIN
Assets/Art/Sprites/UI/backpack.png
Normal file
BIN
Assets/Art/Sprites/UI/backpack.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.7 KiB |
195
Assets/Art/Sprites/UI/backpack.png.meta
Normal file
195
Assets/Art/Sprites/UI/backpack.png.meta
Normal file
@@ -0,0 +1,195 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b9d1a045f7c163a4d9e2d38071913885
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: -6415490079858998490
|
||||
second: backpack_0
|
||||
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: -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: 4
|
||||
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: 4
|
||||
buildTarget: iOS
|
||||
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: 4
|
||||
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: 4
|
||||
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: 4
|
||||
buildTarget: WebGL
|
||||
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: 4
|
||||
buildTarget: WindowsStoreApps
|
||||
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: backpack_0
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 31
|
||||
y: 0
|
||||
width: 321
|
||||
height: 383
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 62346f953c997f6a0800000000000000
|
||||
internalID: -6415490079858998490
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable:
|
||||
backpack_0: -6415490079858998490
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/Art/Sprites/UI/notification_dot.png
Normal file
BIN
Assets/Art/Sprites/UI/notification_dot.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.6 KiB |
195
Assets/Art/Sprites/UI/notification_dot.png.meta
Normal file
195
Assets/Art/Sprites/UI/notification_dot.png.meta
Normal file
@@ -0,0 +1,195 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dad47d8bcf29e4742803088801ae4b04
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: 1454986794490068504
|
||||
second: notification_dot_0
|
||||
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: -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: 4
|
||||
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: 4
|
||||
buildTarget: iOS
|
||||
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: 4
|
||||
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: 4
|
||||
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: 4
|
||||
buildTarget: WebGL
|
||||
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: 4
|
||||
buildTarget: WindowsStoreApps
|
||||
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: notification_dot_0
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1
|
||||
y: 0
|
||||
width: 127
|
||||
height: 127
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 81ef67ed7c6213410800000000000000
|
||||
internalID: 1454986794490068504
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable:
|
||||
notification_dot_0: 1454986794490068504
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -23,3 +23,4 @@ MonoBehaviour:
|
||||
- {fileID: 2755712733105741372, guid: 70e6fca1164d9a140b271f4261f1f023, type: 3}
|
||||
- {fileID: 5034240524438268576, guid: adbb9bfd5489f3f4995966535ca5f24b, type: 3}
|
||||
- {fileID: 2326026072467672024, guid: c8d9eb8c3ca524b4eb67f6364b455b87, type: 3}
|
||||
- {fileID: 3528960956969533010, guid: 53eea3840d3cde34a9768b8773a3a7e8, type: 3}
|
||||
|
||||
@@ -13,7 +13,7 @@ MonoBehaviour:
|
||||
m_Name: Card_New Card 1
|
||||
m_EditorClassIdentifier: AppleHillsScripts::AppleHills.Data.CardSystem.CardDefinition
|
||||
Id: f3faeebd-41fd-4a5c-b021-366ed5170f0c
|
||||
Name: New awesome card
|
||||
Name: Test #1
|
||||
Description: Description goes here
|
||||
Rarity: 4
|
||||
Zone: 2
|
||||
|
||||
@@ -13,7 +13,7 @@ MonoBehaviour:
|
||||
m_Name: Card_New Card
|
||||
m_EditorClassIdentifier: AppleHillsScripts::AppleHills.Data.CardSystem.CardDefinition
|
||||
Id: c392baeb-f816-4482-8b9c-2e2b81e36527
|
||||
Name: Test example card
|
||||
Name: Test #2
|
||||
Description: Some example description
|
||||
Rarity: 4
|
||||
Zone: 4
|
||||
|
||||
@@ -13,7 +13,7 @@ MonoBehaviour:
|
||||
m_Name: Card_Test example card (Copy) 1
|
||||
m_EditorClassIdentifier: AppleHillsScripts::AppleHills.Data.CardSystem.CardDefinition
|
||||
Id: 629423af-af60-495b-8c89-36709e063acd
|
||||
Name: Test example card (Copy)
|
||||
Name: Test #3
|
||||
Description: Some example description
|
||||
Rarity: 0
|
||||
Zone: 0
|
||||
|
||||
@@ -13,7 +13,7 @@ MonoBehaviour:
|
||||
m_Name: Card_Test example card (Copy)
|
||||
m_EditorClassIdentifier: AppleHillsScripts::AppleHills.Data.CardSystem.CardDefinition
|
||||
Id: 6aa0d454-47f5-4617-ae30-50614fd2fa94
|
||||
Name: Test example card 2
|
||||
Name: Test #4
|
||||
Description: Some example description
|
||||
Rarity: 1
|
||||
Zone: 0
|
||||
|
||||
@@ -13,7 +13,7 @@ MonoBehaviour:
|
||||
m_Name: Card_Test example card 2 (Copy) 1
|
||||
m_EditorClassIdentifier: AppleHillsScripts::AppleHills.Data.CardSystem.CardDefinition
|
||||
Id: ee76a6fc-d86d-469f-9b0f-c19286228357
|
||||
Name: Test example card 2 (Copy)
|
||||
Name: Test #5
|
||||
Description: Some example description
|
||||
Rarity: 1
|
||||
Zone: 3
|
||||
|
||||
@@ -13,7 +13,7 @@ MonoBehaviour:
|
||||
m_Name: Card_Test example card 2 (Copy)
|
||||
m_EditorClassIdentifier: AppleHillsScripts::AppleHills.Data.CardSystem.CardDefinition
|
||||
Id: ee1e2aec-bdb6-4c68-8d7a-061c7f5e8583
|
||||
Name: Test example card 3
|
||||
Name: Test #6
|
||||
Description: Some example description
|
||||
Rarity: 2
|
||||
Zone: 0
|
||||
|
||||
@@ -13,7 +13,7 @@ MonoBehaviour:
|
||||
m_Name: Card_Test example card 3 (Copy)
|
||||
m_EditorClassIdentifier: AppleHillsScripts::AppleHills.Data.CardSystem.CardDefinition
|
||||
Id: 1afdfea7-ca85-45ae-bd2c-3814729e628d
|
||||
Name: Test example card 3 (Copy)
|
||||
Name: Test #7
|
||||
Description: Some example description
|
||||
Rarity: 2
|
||||
Zone: 4
|
||||
|
||||
@@ -18,7 +18,7 @@ namespace AppleHills.Editor.CardSystem
|
||||
// Paths
|
||||
private const string CardDefinitionsPath = "Assets/Data/Cards";
|
||||
private const string MenuPath = "AppleHills/Card Editor";
|
||||
private const string CardUIPrefabPath = "Assets/Prefabs/UI/Cards/CardUI.prefab";
|
||||
private const string CardUIPrefabPath = "Assets/Prefabs/UI/Cards/SIngleCardDisplayUI.prefab";
|
||||
private const string CardVisualConfigPath = CardDefinitionsPath + "/CardVisualConfig.asset";
|
||||
|
||||
// Editor state
|
||||
|
||||
BIN
Assets/External/Placeholders/card_back.png
vendored
Normal file
BIN
Assets/External/Placeholders/card_back.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 273 KiB |
182
Assets/External/Placeholders/card_back.png.meta
vendored
Normal file
182
Assets/External/Placeholders/card_back.png.meta
vendored
Normal file
@@ -0,0 +1,182 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fb6b9846cb4b3bd4ca8517a34a5f9a3c
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: -8246103488371625927
|
||||
second: card_back_0
|
||||
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: -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: 4
|
||||
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: 4
|
||||
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: 4
|
||||
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: 4
|
||||
buildTarget: WebGL
|
||||
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: 4
|
||||
buildTarget: WindowsStoreApps
|
||||
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: card_back_0
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 686
|
||||
height: 976
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 930ff7a2194ff8d80800000000000000
|
||||
internalID: -8246103488371625927
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable:
|
||||
card_back_0: -8246103488371625927
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/External/Placeholders/red_arrow.png
vendored
Normal file
BIN
Assets/External/Placeholders/red_arrow.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 61 KiB |
182
Assets/External/Placeholders/red_arrow.png.meta
vendored
Normal file
182
Assets/External/Placeholders/red_arrow.png.meta
vendored
Normal file
@@ -0,0 +1,182 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4ee2d56eceb077249b6d783ac1ab7ec4
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: 7399797961453878310
|
||||
second: red_arrow_0
|
||||
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: -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: 4
|
||||
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: 4
|
||||
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: 4
|
||||
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: 4
|
||||
buildTarget: WebGL
|
||||
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: 4
|
||||
buildTarget: WindowsStoreApps
|
||||
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: red_arrow_0
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 408
|
||||
height: 597
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 62c3e164a0d51b660800000000000000
|
||||
internalID: 7399797961453878310
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable:
|
||||
red_arrow_0: 7399797961453878310
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
51
Assets/Prefabs/Managers/CardSystemManager.prefab
Normal file
51
Assets/Prefabs/Managers/CardSystemManager.prefab
Normal file
@@ -0,0 +1,51 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &3528960956969533010
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4698585910635356118}
|
||||
- component: {fileID: 1232423156726317973}
|
||||
m_Layer: 0
|
||||
m_Name: CardSystemManager
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &4698585910635356118
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3528960956969533010}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 158.01367, y: -59.930664, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &1232423156726317973
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3528960956969533010}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 8d80347e4bd04c87be23a9399860783d, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: AppleHillsScripts::Data.CardSystem.CardSystemManager
|
||||
availableCards: []
|
||||
autoLoadCardDefinitions: 1
|
||||
cardDataPath: Data/Cards
|
||||
playerInventory:
|
||||
boosterPackCount: 0
|
||||
7
Assets/Prefabs/Managers/CardSystemManager.prefab.meta
Normal file
7
Assets/Prefabs/Managers/CardSystemManager.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 53eea3840d3cde34a9768b8773a3a7e8
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
3358
Assets/Prefabs/UI/Cards/AlbumViewPage.prefab
Normal file
3358
Assets/Prefabs/UI/Cards/AlbumViewPage.prefab
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/Prefabs/UI/Cards/AlbumViewPage.prefab.meta
Normal file
7
Assets/Prefabs/UI/Cards/AlbumViewPage.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 88a05fdd940194543ade1cc2bcdada5f
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
334
Assets/Prefabs/UI/Cards/BoosterNotifications.prefab
Normal file
334
Assets/Prefabs/UI/Cards/BoosterNotifications.prefab
Normal file
@@ -0,0 +1,334 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &3555924788298046233
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2510839793683184596}
|
||||
- component: {fileID: 7931090856607470176}
|
||||
- component: {fileID: 3867938905670777662}
|
||||
m_Layer: 5
|
||||
m_Name: NotificationDot
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &2510839793683184596
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3555924788298046233}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 8243838592031101330}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &7931090856607470176
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3555924788298046233}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &3867938905670777662
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3555924788298046233}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 1454986794490068504, guid: dad47d8bcf29e4742803088801ae4b04, type: 3}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &3813704348964656314
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8243838592031101330}
|
||||
m_Layer: 5
|
||||
m_Name: Container
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &8243838592031101330
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3813704348964656314}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 2510839793683184596}
|
||||
- {fileID: 912809337432025300}
|
||||
m_Father: {fileID: 4399514539281523652}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &4367103374191057909
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 912809337432025300}
|
||||
- component: {fileID: 2674835159736628855}
|
||||
- component: {fileID: 7140808185011848511}
|
||||
m_Layer: 5
|
||||
m_Name: BoosterCount
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &912809337432025300
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4367103374191057909}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 8243838592031101330}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &2674835159736628855
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4367103374191057909}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &7140808185011848511
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4367103374191057909}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: 1
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 40
|
||||
m_fontSizeBase: 40
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 1
|
||||
m_HorizontalAlignment: 2
|
||||
m_VerticalAlignment: 512
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_TextWrappingMode: 1
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 0
|
||||
m_ActiveFontFeatures: 6e72656b
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_EmojiFallbackSupport: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 1
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
--- !u!1 &6686144552275602124
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4399514539281523652}
|
||||
- component: {fileID: 7701049314552813552}
|
||||
- component: {fileID: 6728421751561708195}
|
||||
m_Layer: 5
|
||||
m_Name: BoosterNotifications
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &4399514539281523652
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6686144552275602124}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 8243838592031101330}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 1, y: 1}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 37.5, y: 37.5}
|
||||
m_SizeDelta: {x: 75, y: 75}
|
||||
m_Pivot: {x: 1, y: 1}
|
||||
--- !u!114 &7701049314552813552
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6686144552275602124}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: ed8cced1478640229c5a61e3c6bd42df, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: AppleHillsScripts::AppleHills.UI.CardSystem.BoosterNotificationDot
|
||||
dotBackground: {fileID: 3813704348964656314}
|
||||
countText: {fileID: 7140808185011848511}
|
||||
hideWhenZero: 1
|
||||
useAnimation: 1
|
||||
textPrefix:
|
||||
textSuffix:
|
||||
textColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
useTween: 1
|
||||
pulseDuration: 0.3
|
||||
pulseScale: 1.2
|
||||
animator: {fileID: 6728421751561708195}
|
||||
animationTrigger: Update
|
||||
--- !u!95 &6728421751561708195
|
||||
Animator:
|
||||
serializedVersion: 7
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6686144552275602124}
|
||||
m_Enabled: 1
|
||||
m_Avatar: {fileID: 0}
|
||||
m_Controller: {fileID: 0}
|
||||
m_CullingMode: 0
|
||||
m_UpdateMode: 0
|
||||
m_ApplyRootMotion: 0
|
||||
m_LinearVelocityBlending: 0
|
||||
m_StabilizeFeet: 0
|
||||
m_AnimatePhysics: 0
|
||||
m_WarningMessage:
|
||||
m_HasTransformHierarchy: 1
|
||||
m_AllowConstantClipSamplingOptimization: 1
|
||||
m_KeepAnimatorStateOnDisable: 0
|
||||
m_WriteDefaultValuesOnDisable: 0
|
||||
7
Assets/Prefabs/UI/Cards/BoosterNotifications.prefab.meta
Normal file
7
Assets/Prefabs/UI/Cards/BoosterNotifications.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 00a9eeae1396ffb488487b1555414c39
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
1361
Assets/Prefabs/UI/Cards/BoosterOpeningPage.prefab
Normal file
1361
Assets/Prefabs/UI/Cards/BoosterOpeningPage.prefab
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/Prefabs/UI/Cards/BoosterOpeningPage.prefab.meta
Normal file
7
Assets/Prefabs/UI/Cards/BoosterOpeningPage.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 06de8e223a669fe48b043983963d1e6a
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
173
Assets/Prefabs/UI/Cards/CardBack.prefab
Normal file
173
Assets/Prefabs/UI/Cards/CardBack.prefab
Normal file
@@ -0,0 +1,173 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &1123573611284110918
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6372631110979469063}
|
||||
- component: {fileID: 7263329479413350620}
|
||||
- component: {fileID: 1924940828255795114}
|
||||
- component: {fileID: 740275584674789932}
|
||||
m_Layer: 5
|
||||
m_Name: CardBackImage
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &6372631110979469063
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1123573611284110918}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4459518969173100332}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &7263329479413350620
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1123573611284110918}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &1924940828255795114
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1123573611284110918}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: -8246103488371625927, guid: fb6b9846cb4b3bd4ca8517a34a5f9a3c, type: 3}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!114 &740275584674789932
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1123573611284110918}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 86710e43de46f6f4bac7c8e50813a599, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.AspectRatioFitter
|
||||
m_AspectMode: 2
|
||||
m_AspectRatio: 0.7
|
||||
--- !u!1 &1385409402919571665
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4459518969173100332}
|
||||
- component: {fileID: 2773297167970136146}
|
||||
m_Layer: 5
|
||||
m_Name: CardBack
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &4459518969173100332
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1385409402919571665}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 6372631110979469063}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 150, y: 200}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &2773297167970136146
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1385409402919571665}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Button
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
m_SelectOnRight: {fileID: 0}
|
||||
m_Transition: 1
|
||||
m_Colors:
|
||||
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
|
||||
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
|
||||
m_ColorMultiplier: 1
|
||||
m_FadeDuration: 0.1
|
||||
m_SpriteState:
|
||||
m_HighlightedSprite: {fileID: 0}
|
||||
m_PressedSprite: {fileID: 0}
|
||||
m_SelectedSprite: {fileID: 0}
|
||||
m_DisabledSprite: {fileID: 0}
|
||||
m_AnimationTriggers:
|
||||
m_NormalTrigger: Normal
|
||||
m_HighlightedTrigger: Highlighted
|
||||
m_PressedTrigger: Pressed
|
||||
m_SelectedTrigger: Selected
|
||||
m_DisabledTrigger: Disabled
|
||||
m_Interactable: 1
|
||||
m_TargetGraphic: {fileID: 0}
|
||||
m_OnClick:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
7
Assets/Prefabs/UI/Cards/CardBack.prefab.meta
Normal file
7
Assets/Prefabs/UI/Cards/CardBack.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1d048f366a1113d4ab16b5d332bfc11d
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
897
Assets/Prefabs/UI/Cards/CardSystem.prefab
Normal file
897
Assets/Prefabs/UI/Cards/CardSystem.prefab
Normal file
@@ -0,0 +1,897 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &303625417641854305
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1369814279180176174}
|
||||
- component: {fileID: 9169434787445119839}
|
||||
- component: {fileID: 519551942242793934}
|
||||
m_Layer: 0
|
||||
m_Name: EventSystem
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &1369814279180176174
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 303625417641854305}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: -1024, y: -768, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 7586531588264964688}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &9169434787445119839
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 303625417641854305}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.EventSystems.EventSystem
|
||||
m_FirstSelected: {fileID: 0}
|
||||
m_sendNavigationEvents: 1
|
||||
m_DragThreshold: 10
|
||||
--- !u!114 &519551942242793934
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 303625417641854305}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Unity.InputSystem::UnityEngine.InputSystem.UI.InputSystemUIInputModule
|
||||
m_SendPointerHoverToParent: 1
|
||||
m_MoveRepeatDelay: 0.5
|
||||
m_MoveRepeatRate: 0.1
|
||||
m_XRTrackingOrigin: {fileID: 0}
|
||||
m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_PointAction: {fileID: -1654692200621890270, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_MoveAction: {fileID: -8784545083839296357, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_SubmitAction: {fileID: 392368643174621059, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_CancelAction: {fileID: 7727032971491509709, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_LeftClickAction: {fileID: 3001919216989983466, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_MiddleClickAction: {fileID: -2185481485913320682, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_RightClickAction: {fileID: -4090225696740746782, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_ScrollWheelAction: {fileID: 6240969308177333660, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_TrackedDevicePositionAction: {fileID: 6564999863303420839, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_TrackedDeviceOrientationAction: {fileID: 7970375526676320489, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_DeselectOnBackgroundClick: 1
|
||||
m_PointerBehavior: 0
|
||||
m_CursorLockBehavior: 0
|
||||
m_ScrollDeltaPerTick: 6
|
||||
--- !u!1 &6895404274863911569
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 7586531588264964688}
|
||||
- component: {fileID: 2276827791912418824}
|
||||
- component: {fileID: 3556615625058732098}
|
||||
- component: {fileID: 155632668169750525}
|
||||
- component: {fileID: 2421571494653166296}
|
||||
m_Layer: 5
|
||||
m_Name: CardSystem
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &7586531588264964688
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6895404274863911569}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0, y: 0, z: 0}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 8855931927481658112}
|
||||
- {fileID: 4224770106652410837}
|
||||
- {fileID: 1369814279180176174}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &2276827791912418824
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6895404274863911569}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe5ff32f529d4f24a2064ee1dfa07758, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: AppleHillsScripts::AppleHills.UI.CardSystem.CardAlbumUI
|
||||
backpackIcon: {fileID: 8832204230413470760}
|
||||
mainMenuPage: {fileID: 2244619278085783053}
|
||||
albumViewPage: {fileID: 4812581997991232253}
|
||||
boosterOpeningPage: {fileID: 7643059071914363120}
|
||||
backpackButton: {fileID: 5244731468946939147}
|
||||
boosterNotificationDot: {fileID: 8274911525479972860}
|
||||
notificationSound: {fileID: 0}
|
||||
--- !u!223 &3556615625058732098
|
||||
Canvas:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6895404274863911569}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_RenderMode: 0
|
||||
m_Camera: {fileID: 0}
|
||||
m_PlaneDistance: 100
|
||||
m_PixelPerfect: 0
|
||||
m_ReceivesEvents: 1
|
||||
m_OverrideSorting: 0
|
||||
m_OverridePixelPerfect: 0
|
||||
m_SortingBucketNormalizedSize: 0
|
||||
m_VertexColorAlwaysGammaSpace: 0
|
||||
m_AdditionalShaderChannelsFlag: 25
|
||||
m_UpdateRectTransformForStandalone: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 0
|
||||
m_TargetDisplay: 0
|
||||
--- !u!114 &155632668169750525
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6895404274863911569}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.CanvasScaler
|
||||
m_UiScaleMode: 0
|
||||
m_ReferencePixelsPerUnit: 100
|
||||
m_ScaleFactor: 1
|
||||
m_ReferenceResolution: {x: 800, y: 600}
|
||||
m_ScreenMatchMode: 0
|
||||
m_MatchWidthOrHeight: 0
|
||||
m_PhysicalUnit: 3
|
||||
m_FallbackScreenDPI: 96
|
||||
m_DefaultSpriteDPI: 96
|
||||
m_DynamicPixelsPerUnit: 1
|
||||
m_PresetInfoIsWorld: 0
|
||||
--- !u!114 &2421571494653166296
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6895404274863911569}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.GraphicRaycaster
|
||||
m_IgnoreReversedGraphics: 1
|
||||
m_BlockingObjects: 0
|
||||
m_BlockingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
--- !u!1 &7564017895147059150
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8855931927481658112}
|
||||
- component: {fileID: 5244731468946939147}
|
||||
m_Layer: 5
|
||||
m_Name: Backback
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &8855931927481658112
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7564017895147059150}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 1724544313110211516}
|
||||
- {fileID: 2668326248549305288}
|
||||
m_Father: {fileID: 7586531588264964688}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 96.24829, y: 98.212524}
|
||||
m_SizeDelta: {x: 150, y: 150}
|
||||
m_Pivot: {x: 0, y: 0}
|
||||
--- !u!114 &5244731468946939147
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7564017895147059150}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Button
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
m_SelectOnRight: {fileID: 0}
|
||||
m_Transition: 1
|
||||
m_Colors:
|
||||
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
|
||||
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
|
||||
m_ColorMultiplier: 1
|
||||
m_FadeDuration: 0.1
|
||||
m_SpriteState:
|
||||
m_HighlightedSprite: {fileID: 0}
|
||||
m_PressedSprite: {fileID: 0}
|
||||
m_SelectedSprite: {fileID: 0}
|
||||
m_DisabledSprite: {fileID: 0}
|
||||
m_AnimationTriggers:
|
||||
m_NormalTrigger: Normal
|
||||
m_HighlightedTrigger: Highlighted
|
||||
m_PressedTrigger: Pressed
|
||||
m_SelectedTrigger: Selected
|
||||
m_DisabledTrigger: Disabled
|
||||
m_Interactable: 1
|
||||
m_TargetGraphic: {fileID: 4952456972160400640}
|
||||
m_OnClick:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
--- !u!1 &8561999612656273135
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4224770106652410837}
|
||||
- component: {fileID: 6676772947362202458}
|
||||
m_Layer: 5
|
||||
m_Name: UIPageController
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &4224770106652410837
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8561999612656273135}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 6329700065522655683}
|
||||
- {fileID: 4626769840948993796}
|
||||
- {fileID: 5366779575114795462}
|
||||
m_Father: {fileID: 7586531588264964688}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 100, y: 100}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &6676772947362202458
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8561999612656273135}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: b1ae6c1745e44e22a0fa9209ebe45ee3, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: AppleHillsScripts::AppleHills.UI.CardSystem.UIPageController
|
||||
--- !u!1 &8832204230413470760
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1724544313110211516}
|
||||
- component: {fileID: 466036072154575804}
|
||||
- component: {fileID: 4952456972160400640}
|
||||
m_Layer: 5
|
||||
m_Name: BackbackIcon
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1724544313110211516
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8832204230413470760}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 8855931927481658112}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &466036072154575804
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8832204230413470760}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &4952456972160400640
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8832204230413470760}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: -6415490079858998490, guid: b9d1a045f7c163a4d9e2d38071913885, type: 3}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1001 &1732192317104416780
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 8855931927481658112}
|
||||
m_Modifications:
|
||||
- target: {fileID: 4399514539281523652, guid: 00a9eeae1396ffb488487b1555414c39, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4399514539281523652, guid: 00a9eeae1396ffb488487b1555414c39, type: 3}
|
||||
propertyPath: m_Pivot.y
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4399514539281523652, guid: 00a9eeae1396ffb488487b1555414c39, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4399514539281523652, guid: 00a9eeae1396ffb488487b1555414c39, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4399514539281523652, guid: 00a9eeae1396ffb488487b1555414c39, type: 3}
|
||||
propertyPath: m_AnchorMin.x
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4399514539281523652, guid: 00a9eeae1396ffb488487b1555414c39, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4399514539281523652, guid: 00a9eeae1396ffb488487b1555414c39, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 75
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4399514539281523652, guid: 00a9eeae1396ffb488487b1555414c39, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 75
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4399514539281523652, guid: 00a9eeae1396ffb488487b1555414c39, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4399514539281523652, guid: 00a9eeae1396ffb488487b1555414c39, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4399514539281523652, guid: 00a9eeae1396ffb488487b1555414c39, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4399514539281523652, guid: 00a9eeae1396ffb488487b1555414c39, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4399514539281523652, guid: 00a9eeae1396ffb488487b1555414c39, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4399514539281523652, guid: 00a9eeae1396ffb488487b1555414c39, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4399514539281523652, guid: 00a9eeae1396ffb488487b1555414c39, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4399514539281523652, guid: 00a9eeae1396ffb488487b1555414c39, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 37.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4399514539281523652, guid: 00a9eeae1396ffb488487b1555414c39, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 37.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4399514539281523652, guid: 00a9eeae1396ffb488487b1555414c39, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4399514539281523652, guid: 00a9eeae1396ffb488487b1555414c39, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4399514539281523652, guid: 00a9eeae1396ffb488487b1555414c39, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6686144552275602124, guid: 00a9eeae1396ffb488487b1555414c39, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: BoosterNotifications
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: 00a9eeae1396ffb488487b1555414c39, type: 3}
|
||||
--- !u!224 &2668326248549305288 stripped
|
||||
RectTransform:
|
||||
m_CorrespondingSourceObject: {fileID: 4399514539281523652, guid: 00a9eeae1396ffb488487b1555414c39, type: 3}
|
||||
m_PrefabInstance: {fileID: 1732192317104416780}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!114 &8274911525479972860 stripped
|
||||
MonoBehaviour:
|
||||
m_CorrespondingSourceObject: {fileID: 7701049314552813552, guid: 00a9eeae1396ffb488487b1555414c39, type: 3}
|
||||
m_PrefabInstance: {fileID: 1732192317104416780}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: ed8cced1478640229c5a61e3c6bd42df, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: AppleHillsScripts::AppleHills.UI.CardSystem.BoosterNotificationDot
|
||||
--- !u!1001 &6225233548971967334
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 4224770106652410837}
|
||||
m_Modifications:
|
||||
- target: {fileID: 1485089218833421720, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: BoosterOpeningPage
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2026295995152435872, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2026295995152435872, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_Pivot.y
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2026295995152435872, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2026295995152435872, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2026295995152435872, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_AnchorMin.x
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2026295995152435872, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2026295995152435872, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 1000
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2026295995152435872, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 750
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2026295995152435872, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2026295995152435872, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2026295995152435872, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2026295995152435872, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2026295995152435872, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2026295995152435872, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2026295995152435872, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2026295995152435872, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2026295995152435872, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2026295995152435872, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2026295995152435872, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2026295995152435872, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3492318441088451548, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3492318441088451548, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3492318441088451548, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3492318441088451548, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4525022388006312158, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4525022388006312158, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4525022388006312158, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4525022388006312158, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
--- !u!224 &5366779575114795462 stripped
|
||||
RectTransform:
|
||||
m_CorrespondingSourceObject: {fileID: 2026295995152435872, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
m_PrefabInstance: {fileID: 6225233548971967334}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!114 &7643059071914363120 stripped
|
||||
MonoBehaviour:
|
||||
m_CorrespondingSourceObject: {fileID: 4356635970420460438, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||
m_PrefabInstance: {fileID: 6225233548971967334}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f64698442ba344e0a466ee3c530797c7, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: AppleHillsScripts::AppleHills.UI.CardSystem.BoosterOpeningPage
|
||||
--- !u!1001 &6685872719143607872
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 4224770106652410837}
|
||||
m_Modifications:
|
||||
- target: {fileID: 2088943967680250180, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2088943967680250180, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
|
||||
propertyPath: m_Pivot.y
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2088943967680250180, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2088943967680250180, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2088943967680250180, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
|
||||
propertyPath: m_AnchorMin.x
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2088943967680250180, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2088943967680250180, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 1000
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2088943967680250180, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 750
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2088943967680250180, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2088943967680250180, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2088943967680250180, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2088943967680250180, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2088943967680250180, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2088943967680250180, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2088943967680250180, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2088943967680250180, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2088943967680250180, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2088943967680250180, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2088943967680250180, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2088943967680250180, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8841772996182652387, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: AlbumViewPage
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
|
||||
--- !u!224 &4626769840948993796 stripped
|
||||
RectTransform:
|
||||
m_CorrespondingSourceObject: {fileID: 2088943967680250180, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
|
||||
m_PrefabInstance: {fileID: 6685872719143607872}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!114 &4812581997991232253 stripped
|
||||
MonoBehaviour:
|
||||
m_CorrespondingSourceObject: {fileID: 2162084082982493373, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
|
||||
m_PrefabInstance: {fileID: 6685872719143607872}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 59ff936424a34ce3937299c66232bf7a, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: AppleHillsScripts::AppleHills.UI.CardSystem.AlbumViewPage
|
||||
--- !u!1001 &7156544606028288729
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 4224770106652410837}
|
||||
m_Modifications:
|
||||
- target: {fileID: 215586258230015996, guid: 43be0f1cce1e5ae4d86def9da1fe2822, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: MainMenuPage
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3784919015553725210, guid: 43be0f1cce1e5ae4d86def9da1fe2822, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3784919015553725210, guid: 43be0f1cce1e5ae4d86def9da1fe2822, type: 3}
|
||||
propertyPath: m_Pivot.y
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3784919015553725210, guid: 43be0f1cce1e5ae4d86def9da1fe2822, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3784919015553725210, guid: 43be0f1cce1e5ae4d86def9da1fe2822, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3784919015553725210, guid: 43be0f1cce1e5ae4d86def9da1fe2822, type: 3}
|
||||
propertyPath: m_AnchorMin.x
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3784919015553725210, guid: 43be0f1cce1e5ae4d86def9da1fe2822, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3784919015553725210, guid: 43be0f1cce1e5ae4d86def9da1fe2822, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 1000
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3784919015553725210, guid: 43be0f1cce1e5ae4d86def9da1fe2822, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 750
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3784919015553725210, guid: 43be0f1cce1e5ae4d86def9da1fe2822, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3784919015553725210, guid: 43be0f1cce1e5ae4d86def9da1fe2822, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3784919015553725210, guid: 43be0f1cce1e5ae4d86def9da1fe2822, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3784919015553725210, guid: 43be0f1cce1e5ae4d86def9da1fe2822, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3784919015553725210, guid: 43be0f1cce1e5ae4d86def9da1fe2822, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3784919015553725210, guid: 43be0f1cce1e5ae4d86def9da1fe2822, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3784919015553725210, guid: 43be0f1cce1e5ae4d86def9da1fe2822, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3784919015553725210, guid: 43be0f1cce1e5ae4d86def9da1fe2822, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3784919015553725210, guid: 43be0f1cce1e5ae4d86def9da1fe2822, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3784919015553725210, guid: 43be0f1cce1e5ae4d86def9da1fe2822, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3784919015553725210, guid: 43be0f1cce1e5ae4d86def9da1fe2822, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3784919015553725210, guid: 43be0f1cce1e5ae4d86def9da1fe2822, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: 43be0f1cce1e5ae4d86def9da1fe2822, type: 3}
|
||||
--- !u!114 &2244619278085783053 stripped
|
||||
MonoBehaviour:
|
||||
m_CorrespondingSourceObject: {fileID: 8968736352447638740, guid: 43be0f1cce1e5ae4d86def9da1fe2822, type: 3}
|
||||
m_PrefabInstance: {fileID: 7156544606028288729}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: a81af156ae284925a1f004d08f0bb364, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: AppleHillsScripts::AppleHills.UI.CardSystem.CardMenuPage
|
||||
--- !u!224 &6329700065522655683 stripped
|
||||
RectTransform:
|
||||
m_CorrespondingSourceObject: {fileID: 3784919015553725210, guid: 43be0f1cce1e5ae4d86def9da1fe2822, type: 3}
|
||||
m_PrefabInstance: {fileID: 7156544606028288729}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
7
Assets/Prefabs/UI/Cards/CardSystem.prefab.meta
Normal file
7
Assets/Prefabs/UI/Cards/CardSystem.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 840f3d8a936b39a41b5896328a692005
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
1356
Assets/Prefabs/UI/Cards/MainMenuPage.prefab
Normal file
1356
Assets/Prefabs/UI/Cards/MainMenuPage.prefab
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/Prefabs/UI/Cards/MainMenuPage.prefab.meta
Normal file
7
Assets/Prefabs/UI/Cards/MainMenuPage.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 43be0f1cce1e5ae4d86def9da1fe2822
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -11,6 +11,9 @@ GameObject:
|
||||
- component: {fileID: 8321041088571283042}
|
||||
- component: {fileID: 8657710833814654092}
|
||||
- component: {fileID: 3062587662617271504}
|
||||
- component: {fileID: 773682364924707625}
|
||||
- component: {fileID: 5465547774692166910}
|
||||
- component: {fileID: 2506092559548033437}
|
||||
m_Layer: 5
|
||||
m_Name: Background
|
||||
m_TagString: Untagged
|
||||
@@ -33,7 +36,6 @@ RectTransform:
|
||||
- {fileID: 7987423280633120294}
|
||||
- {fileID: 6467154550771149323}
|
||||
- {fileID: 5853287755371765300}
|
||||
- {fileID: 1376284209458560831}
|
||||
m_Father: {fileID: 2699789555794789249}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
@@ -65,7 +67,7 @@ MonoBehaviour:
|
||||
m_Color: {r: 0.8, g: 0.9, b: 0.8, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 0
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
@@ -79,6 +81,66 @@ MonoBehaviour:
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 2.5
|
||||
--- !u!114 &773682364924707625
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1674595570562273386}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 86710e43de46f6f4bac7c8e50813a599, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.AspectRatioFitter
|
||||
m_AspectMode: 2
|
||||
m_AspectRatio: 0.6666667
|
||||
--- !u!223 &5465547774692166910
|
||||
Canvas:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1674595570562273386}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_RenderMode: 2
|
||||
m_Camera: {fileID: 0}
|
||||
m_PlaneDistance: 100
|
||||
m_PixelPerfect: 0
|
||||
m_ReceivesEvents: 1
|
||||
m_OverrideSorting: 0
|
||||
m_OverridePixelPerfect: 0
|
||||
m_SortingBucketNormalizedSize: 0
|
||||
m_VertexColorAlwaysGammaSpace: 0
|
||||
m_AdditionalShaderChannelsFlag: 25
|
||||
m_UpdateRectTransformForStandalone: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 0
|
||||
m_TargetDisplay: 0
|
||||
--- !u!114 &2506092559548033437
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1674595570562273386}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.CanvasScaler
|
||||
m_UiScaleMode: 0
|
||||
m_ReferencePixelsPerUnit: 100
|
||||
m_ScaleFactor: 1
|
||||
m_ReferenceResolution: {x: 800, y: 600}
|
||||
m_ScreenMatchMode: 0
|
||||
m_MatchWidthOrHeight: 0
|
||||
m_PhysicalUnit: 3
|
||||
m_FallbackScreenDPI: 96
|
||||
m_DefaultSpriteDPI: 96
|
||||
m_DynamicPixelsPerUnit: 1
|
||||
m_PresetInfoIsWorld: 0
|
||||
--- !u!1 &2060536854119323360
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -111,10 +173,10 @@ RectTransform:
|
||||
m_Children: []
|
||||
m_Father: {fileID: 7987423280633120294}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 17.972}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: -2.9004517, y: 8.941284}
|
||||
m_SizeDelta: {x: 200, y: 50}
|
||||
m_AnchorMin: {x: 0.1, y: 0.1}
|
||||
m_AnchorMax: {x: 0.9, y: 0.9}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &2165315952716078155
|
||||
CanvasRenderer:
|
||||
@@ -171,10 +233,10 @@ MonoBehaviour:
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 15
|
||||
m_fontSize: 31.75
|
||||
m_fontSizeBase: 15
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_enableAutoSizing: 1
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
@@ -248,10 +310,10 @@ RectTransform:
|
||||
- {fileID: 8124520331884430719}
|
||||
m_Father: {fileID: 8321041088571283042}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0}
|
||||
m_AnchorMax: {x: 0.5, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 54.599976}
|
||||
m_SizeDelta: {x: 250, y: 77.5}
|
||||
m_AnchorMin: {x: 0.1, y: 0.1}
|
||||
m_AnchorMax: {x: 0.9, y: 0.3}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0}
|
||||
--- !u!222 &8745186166470585342
|
||||
CanvasRenderer:
|
||||
@@ -304,7 +366,7 @@ GameObject:
|
||||
- component: {fileID: 3914488700080302779}
|
||||
- component: {fileID: 6599324117435394003}
|
||||
m_Layer: 5
|
||||
m_Name: CardUI
|
||||
m_Name: SIngleCardDisplayUI
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
@@ -317,7 +379,7 @@ RectTransform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3326706725254864107}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
@@ -403,6 +465,7 @@ GameObject:
|
||||
- component: {fileID: 5853287755371765300}
|
||||
- component: {fileID: 8909872439431770690}
|
||||
- component: {fileID: 8871089254192903045}
|
||||
- component: {fileID: 3888758318642584746}
|
||||
m_Layer: 5
|
||||
m_Name: BackgroundShape
|
||||
m_TagString: Untagged
|
||||
@@ -421,13 +484,14 @@ RectTransform:
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Children:
|
||||
- {fileID: 1376284209458560831}
|
||||
m_Father: {fileID: 8321041088571283042}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 29}
|
||||
m_SizeDelta: {x: 250, y: 250}
|
||||
m_AnchorMin: {x: 0.1, y: 0.3}
|
||||
m_AnchorMax: {x: 0.9, y: 0.9}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &8909872439431770690
|
||||
CanvasRenderer:
|
||||
@@ -467,6 +531,20 @@ MonoBehaviour:
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!114 &3888758318642584746
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3429746996164215956}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 86710e43de46f6f4bac7c8e50813a599, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.AspectRatioFitter
|
||||
m_AspectMode: 1
|
||||
m_AspectRatio: 1
|
||||
--- !u!1 &5412331388939213537
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -492,17 +570,17 @@ RectTransform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5412331388939213537}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 8321041088571283042}
|
||||
m_Father: {fileID: 5853287755371765300}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 29}
|
||||
m_SizeDelta: {x: 150, y: 150}
|
||||
m_AnchorMin: {x: 0.3, y: 0.3}
|
||||
m_AnchorMax: {x: 0.7, y: 0.7}
|
||||
m_AnchoredPosition: {x: 0, y: -28}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &9097459168520965074
|
||||
CanvasRenderer:
|
||||
@@ -603,7 +681,7 @@ MonoBehaviour:
|
||||
m_Color: {r: 0, g: 0.19755316, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 0
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
File diff suppressed because one or more lines are too long
808
Assets/Scenes/TestingStuff/UIAuthoring.unity
Normal file
808
Assets/Scenes/TestingStuff/UIAuthoring.unity
Normal file
@@ -0,0 +1,808 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!29 &1
|
||||
OcclusionCullingSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_OcclusionBakeSettings:
|
||||
smallestOccluder: 5
|
||||
smallestHole: 0.25
|
||||
backfaceThreshold: 100
|
||||
m_SceneGUID: 00000000000000000000000000000000
|
||||
m_OcclusionCullingData: {fileID: 0}
|
||||
--- !u!104 &2
|
||||
RenderSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 10
|
||||
m_Fog: 0
|
||||
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
|
||||
m_FogMode: 3
|
||||
m_FogDensity: 0.01
|
||||
m_LinearFogStart: 0
|
||||
m_LinearFogEnd: 300
|
||||
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
|
||||
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
|
||||
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
|
||||
m_AmbientIntensity: 1
|
||||
m_AmbientMode: 3
|
||||
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
|
||||
m_SkyboxMaterial: {fileID: 0}
|
||||
m_HaloStrength: 0.5
|
||||
m_FlareStrength: 1
|
||||
m_FlareFadeSpeed: 3
|
||||
m_HaloTexture: {fileID: 0}
|
||||
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_DefaultReflectionMode: 0
|
||||
m_DefaultReflectionResolution: 128
|
||||
m_ReflectionBounces: 1
|
||||
m_ReflectionIntensity: 1
|
||||
m_CustomReflection: {fileID: 0}
|
||||
m_Sun: {fileID: 0}
|
||||
m_UseRadianceAmbientProbe: 0
|
||||
--- !u!157 &3
|
||||
LightmapSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 13
|
||||
m_BakeOnSceneLoad: 0
|
||||
m_GISettings:
|
||||
serializedVersion: 2
|
||||
m_BounceScale: 1
|
||||
m_IndirectOutputScale: 1
|
||||
m_AlbedoBoost: 1
|
||||
m_EnvironmentLightingMode: 0
|
||||
m_EnableBakedLightmaps: 0
|
||||
m_EnableRealtimeLightmaps: 0
|
||||
m_LightmapEditorSettings:
|
||||
serializedVersion: 12
|
||||
m_Resolution: 2
|
||||
m_BakeResolution: 40
|
||||
m_AtlasSize: 1024
|
||||
m_AO: 0
|
||||
m_AOMaxDistance: 1
|
||||
m_CompAOExponent: 1
|
||||
m_CompAOExponentDirect: 0
|
||||
m_ExtractAmbientOcclusion: 0
|
||||
m_Padding: 2
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_LightmapsBakeMode: 1
|
||||
m_TextureCompression: 1
|
||||
m_ReflectionCompression: 2
|
||||
m_MixedBakeMode: 2
|
||||
m_BakeBackend: 1
|
||||
m_PVRSampling: 1
|
||||
m_PVRDirectSampleCount: 32
|
||||
m_PVRSampleCount: 512
|
||||
m_PVRBounces: 2
|
||||
m_PVREnvironmentSampleCount: 256
|
||||
m_PVREnvironmentReferencePointCount: 2048
|
||||
m_PVRFilteringMode: 1
|
||||
m_PVRDenoiserTypeDirect: 1
|
||||
m_PVRDenoiserTypeIndirect: 1
|
||||
m_PVRDenoiserTypeAO: 1
|
||||
m_PVRFilterTypeDirect: 0
|
||||
m_PVRFilterTypeIndirect: 0
|
||||
m_PVRFilterTypeAO: 0
|
||||
m_PVREnvironmentMIS: 1
|
||||
m_PVRCulling: 1
|
||||
m_PVRFilteringGaussRadiusDirect: 1
|
||||
m_PVRFilteringGaussRadiusIndirect: 1
|
||||
m_PVRFilteringGaussRadiusAO: 1
|
||||
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
|
||||
m_PVRFilteringAtrousPositionSigmaIndirect: 2
|
||||
m_PVRFilteringAtrousPositionSigmaAO: 1
|
||||
m_ExportTrainingData: 0
|
||||
m_TrainingDataDestination: TrainingData
|
||||
m_LightProbeSampleCountMultiplier: 4
|
||||
m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_LightingSettings: {fileID: 0}
|
||||
--- !u!196 &4
|
||||
NavMeshSettings:
|
||||
serializedVersion: 2
|
||||
m_ObjectHideFlags: 0
|
||||
m_BuildSettings:
|
||||
serializedVersion: 3
|
||||
agentTypeID: 0
|
||||
agentRadius: 0.5
|
||||
agentHeight: 2
|
||||
agentSlope: 45
|
||||
agentClimb: 0.4
|
||||
ledgeDropHeight: 0
|
||||
maxJumpAcrossDistance: 0
|
||||
minRegionArea: 2
|
||||
manualCellSize: 0
|
||||
cellSize: 0.16666667
|
||||
manualTileSize: 0
|
||||
tileSize: 256
|
||||
buildHeightMesh: 0
|
||||
maxJobWorkers: 0
|
||||
preserveTilesOutsideBounds: 0
|
||||
debug:
|
||||
m_Flags: 0
|
||||
m_NavMeshData: {fileID: 0}
|
||||
--- !u!1 &205824278
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 205824280}
|
||||
- component: {fileID: 205824279}
|
||||
m_Layer: 0
|
||||
m_Name: CardSystemTester
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &205824279
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 205824278}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 6c59c766505c4342983594dbe19f3db0, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: AppleHillsScripts::AppleHills.Tests.CardSystemTester
|
||||
cardAlbumUI: {fileID: 1148731766}
|
||||
boosterPacksToAdd: 3
|
||||
cardsToGenerate: 10
|
||||
autoOpenPacksWhenAdded: 0
|
||||
currentBoosterCount: 0
|
||||
totalCardsInCollection: 0
|
||||
lastActionMessage:
|
||||
--- !u!4 &205824280
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 205824278}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 1182.0137, y: 708.06934, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &1148731766 stripped
|
||||
MonoBehaviour:
|
||||
m_CorrespondingSourceObject: {fileID: 2276827791912418824, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
m_PrefabInstance: {fileID: 7454556111239468018}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe5ff32f529d4f24a2064ee1dfa07758, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: AppleHillsScripts::AppleHills.UI.CardSystem.CardAlbumUI
|
||||
--- !u!1 &1860325688
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1860325691}
|
||||
- component: {fileID: 1860325690}
|
||||
- component: {fileID: 1860325689}
|
||||
- component: {fileID: 1860325692}
|
||||
m_Layer: 0
|
||||
m_Name: Main Camera
|
||||
m_TagString: MainCamera
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!81 &1860325689
|
||||
AudioListener:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1860325688}
|
||||
m_Enabled: 1
|
||||
--- !u!20 &1860325690
|
||||
Camera:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1860325688}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
m_ClearFlags: 1
|
||||
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
|
||||
m_projectionMatrixMode: 1
|
||||
m_GateFitMode: 2
|
||||
m_FOVAxisMode: 0
|
||||
m_Iso: 200
|
||||
m_ShutterSpeed: 0.005
|
||||
m_Aperture: 16
|
||||
m_FocusDistance: 10
|
||||
m_FocalLength: 50
|
||||
m_BladeCount: 5
|
||||
m_Curvature: {x: 2, y: 11}
|
||||
m_BarrelClipping: 0.25
|
||||
m_Anamorphism: 0
|
||||
m_SensorSize: {x: 36, y: 24}
|
||||
m_LensShift: {x: 0, y: 0}
|
||||
m_NormalizedViewPortRect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 1
|
||||
height: 1
|
||||
near clip plane: 0.3
|
||||
far clip plane: 1000
|
||||
field of view: 60
|
||||
orthographic: 1
|
||||
orthographic size: 5
|
||||
m_Depth: -1
|
||||
m_CullingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_RenderingPath: -1
|
||||
m_TargetTexture: {fileID: 0}
|
||||
m_TargetDisplay: 0
|
||||
m_TargetEye: 3
|
||||
m_HDR: 1
|
||||
m_AllowMSAA: 1
|
||||
m_AllowDynamicResolution: 0
|
||||
m_ForceIntoRT: 0
|
||||
m_OcclusionCulling: 1
|
||||
m_StereoConvergence: 10
|
||||
m_StereoSeparation: 0.022
|
||||
--- !u!4 &1860325691
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1860325688}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: -10}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &1860325692
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1860325688}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalCameraData
|
||||
m_RenderShadows: 1
|
||||
m_RequiresDepthTextureOption: 2
|
||||
m_RequiresOpaqueTextureOption: 2
|
||||
m_CameraType: 0
|
||||
m_Cameras: []
|
||||
m_RendererIndex: -1
|
||||
m_VolumeLayerMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 1
|
||||
m_VolumeTrigger: {fileID: 0}
|
||||
m_VolumeFrameworkUpdateModeOption: 2
|
||||
m_RenderPostProcessing: 0
|
||||
m_Antialiasing: 0
|
||||
m_AntialiasingQuality: 2
|
||||
m_StopNaN: 0
|
||||
m_Dithering: 0
|
||||
m_ClearDepth: 1
|
||||
m_AllowXRRendering: 1
|
||||
m_AllowHDROutput: 1
|
||||
m_UseScreenCoordOverride: 0
|
||||
m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_RequiresDepthTexture: 0
|
||||
m_RequiresColorTexture: 0
|
||||
m_TaaSettings:
|
||||
m_Quality: 3
|
||||
m_FrameInfluence: 0.1
|
||||
m_JitterScale: 1
|
||||
m_MipBias: 0
|
||||
m_VarianceClampScale: 0.9
|
||||
m_ContrastAdaptiveSharpening: 0
|
||||
m_Version: 2
|
||||
--- !u!1001 &7454556111239468018
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 0}
|
||||
m_Modifications:
|
||||
- target: {fileID: 392754686162327284, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 392754686162327284, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 392754686162327284, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 392754686162327284, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 392754686162327284, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 392754686162327284, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 889687949741099485, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_IsActive
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1151296155612236777, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1361024943544906240, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1361024943544906240, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1361024943544906240, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 233.33333
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1361024943544906240, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 300
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1361024943544906240, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 783.3333
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1361024943544906240, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1576060703544730775, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_VerticalFit
|
||||
value: 2
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1576060703544730775, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_HorizontalFit
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1610963376915695238, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1610963376915695238, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1610963376915695238, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 233.33333
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1610963376915695238, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 300
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1610963376915695238, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 499.99997
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1610963376915695238, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2111181035997726038, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2111181035997726038, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2111181035997726038, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2111181035997726038, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2111181035997726038, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2111181035997726038, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2486651258353458720, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2486651258353458720, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2486651258353458720, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 233.33333
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2486651258353458720, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 300
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2486651258353458720, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 216.66666
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2486651258353458720, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2773289799931145123, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_IsActive
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3058473479125701094, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3058473479125701094, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMin.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3058473479125701094, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3058473479125701094, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 25
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3334079986954822490, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_text
|
||||
value: Card Album Main Page
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3623949336760016404, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_text
|
||||
value: Browse your cards!
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3804308400671653276, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_ShowMaskGraphic
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4071774110803644795, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_IsActive
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4339718129419331069, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_IsActive
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4460458858467128264, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4460458858467128264, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4460458858467128264, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4460458858467128264, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4460458858467128264, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4460458858467128264, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4825712728562046718, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_IsActive
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5120903670385010187, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: -23.333328
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6028773654600990567, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_Padding.m_Left
|
||||
value: 100
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6028773654600990567, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_ChildScaleWidth
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6028773654600990567, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_Padding.m_Right
|
||||
value: 100
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6028773654600990567, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_Padding.m_Bottom
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6028773654600990567, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_ChildControlWidth
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6028773654600990567, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_ChildControlHeight
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6028773654600990567, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_ChildForceExpandWidth
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6028773654600990567, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_ChildForceExpandHeight
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6615777721816985793, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6615777721816985793, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: -275
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6895404274863911569, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: CardSystem
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6896238500789711010, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6896238500789711010, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6896238500789711010, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6896238500789711010, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6896238500789711010, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6896238500789711010, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7355308311254532282, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7355308311254532282, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7355308311254532282, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 125
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7355308311254532282, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: -25
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7411712286908450028, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7411712286908450028, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7411712286908450028, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7411712286908450028, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7411712286908450028, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7411712286908450028, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7441755022443304607, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_IsActive
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7541386484585061304, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7541386484585061304, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7541386484585061304, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 375
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7541386484585061304, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: -25
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7586531588264964688, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7586531588264964688, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_Pivot.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7586531588264964688, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7586531588264964688, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7586531588264964688, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMin.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7586531588264964688, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7586531588264964688, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7586531588264964688, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7586531588264964688, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7586531588264964688, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7586531588264964688, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7586531588264964688, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7586531588264964688, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7586531588264964688, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7586531588264964688, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7586531588264964688, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7586531588264964688, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7586531588264964688, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7586531588264964688, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7586531588264964688, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8342931793201872557, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: -23.333328
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8476664949448215981, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_ChildAlignment
|
||||
value: 4
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8606398803908872747, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: -23.333328
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 9041513747714235439, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_Inertia
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 9041513747714235439, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_Viewport
|
||||
value:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 9041513747714235439, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_Horizontal
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 9041513747714235439, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_MovementType
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 9085933292592690902, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 9085933292592690902, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 9085933292592690902, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 9085933292592690902, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 9085933292592690902, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 9085933292592690902, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||
--- !u!1660057539 &9223372036854775807
|
||||
SceneRoots:
|
||||
m_ObjectHideFlags: 0
|
||||
m_Roots:
|
||||
- {fileID: 7454556111239468018}
|
||||
- {fileID: 1860325691}
|
||||
- {fileID: 205824280}
|
||||
7
Assets/Scenes/TestingStuff/UIAuthoring.unity.meta
Normal file
7
Assets/Scenes/TestingStuff/UIAuthoring.unity.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f36d6a75e74fa744fa55448df60fd6e4
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -50,7 +50,27 @@ namespace AppleHills.Data.CardSystem
|
||||
/// </summary>
|
||||
public List<CardData> GetAllCards()
|
||||
{
|
||||
return new List<CardData>(collectedCards.Values);
|
||||
return collectedCards.Values.ToList();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clears all cards from the inventory
|
||||
/// Primarily used for testing
|
||||
/// </summary>
|
||||
public void ClearAllCards()
|
||||
{
|
||||
collectedCards.Clear();
|
||||
|
||||
// Clear lookup dictionaries
|
||||
foreach (var zone in cardsByZone.Keys)
|
||||
{
|
||||
cardsByZone[zone].Clear();
|
||||
}
|
||||
|
||||
foreach (var rarity in cardsByRarity.Keys)
|
||||
{
|
||||
cardsByRarity[rarity].Clear();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using AppleHills.Data.CardSystem;
|
||||
using Bootstrap;
|
||||
using Core;
|
||||
using UnityEngine;
|
||||
#if UNITY_EDITOR
|
||||
using UnityEditor;
|
||||
#endif
|
||||
|
||||
namespace Data.CardSystem
|
||||
{
|
||||
@@ -15,28 +19,15 @@ namespace Data.CardSystem
|
||||
{
|
||||
private static CardSystemManager _instance;
|
||||
private static bool _isQuitting = false;
|
||||
|
||||
public static CardSystemManager Instance
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_instance == null && Application.isPlaying && !_isQuitting)
|
||||
{
|
||||
_instance = FindAnyObjectByType<CardSystemManager>();
|
||||
if (_instance == null)
|
||||
{
|
||||
var go = new GameObject("CardSystemManager");
|
||||
_instance = go.AddComponent<CardSystemManager>();
|
||||
DontDestroyOnLoad(go);
|
||||
}
|
||||
}
|
||||
return _instance;
|
||||
}
|
||||
}
|
||||
public static CardSystemManager Instance => _instance;
|
||||
|
||||
[Header("Card Collection")]
|
||||
[SerializeField] private List<CardDefinition> availableCards = new List<CardDefinition>();
|
||||
|
||||
[Header("Auto-Loading Configuration")]
|
||||
[SerializeField] private bool autoLoadCardDefinitions = true;
|
||||
[SerializeField] private string cardDataPath = "Data/Cards";
|
||||
|
||||
// Runtime data - will be serialized for save/load
|
||||
[SerializeField] private CardInventory playerInventory = new CardInventory();
|
||||
|
||||
@@ -51,14 +42,13 @@ namespace Data.CardSystem
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (_instance != null && _instance != this)
|
||||
{
|
||||
Destroy(gameObject);
|
||||
return;
|
||||
}
|
||||
|
||||
_instance = this;
|
||||
DontDestroyOnLoad(gameObject);
|
||||
|
||||
// Auto-load card definitions if enabled
|
||||
if (autoLoadCardDefinitions)
|
||||
{
|
||||
LoadCardDefinitionsFromFolder();
|
||||
}
|
||||
|
||||
// Build lookup dictionary
|
||||
BuildDefinitionLookup();
|
||||
@@ -78,6 +68,47 @@ namespace Data.CardSystem
|
||||
_isQuitting = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Loads all card definitions from the specified folder
|
||||
/// </summary>
|
||||
private void LoadCardDefinitionsFromFolder()
|
||||
{
|
||||
// Initialize list if needed
|
||||
if (availableCards == null)
|
||||
{
|
||||
availableCards = new List<CardDefinition>();
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR
|
||||
// In editor we can load assets directly from the project folder
|
||||
string folderPath = "Assets/" + cardDataPath;
|
||||
string[] guids = AssetDatabase.FindAssets("t:CardDefinition", new[] { folderPath });
|
||||
|
||||
List<CardDefinition> loadedDefinitions = new List<CardDefinition>();
|
||||
foreach (string guid in guids)
|
||||
{
|
||||
string assetPath = AssetDatabase.GUIDToAssetPath(guid);
|
||||
CardDefinition cardDef = AssetDatabase.LoadAssetAtPath<CardDefinition>(assetPath);
|
||||
if (cardDef != null && !string.IsNullOrEmpty(cardDef.Id))
|
||||
{
|
||||
loadedDefinitions.Add(cardDef);
|
||||
}
|
||||
}
|
||||
|
||||
// Replace the existing list with loaded definitions
|
||||
availableCards = loadedDefinitions;
|
||||
#else
|
||||
// In build, load from Resources folder
|
||||
CardDefinition[] resourceCards = Resources.LoadAll<CardDefinition>(cardDataPath);
|
||||
if (resourceCards != null && resourceCards.Length > 0)
|
||||
{
|
||||
availableCards = resourceCards.Where(card => card != null && !string.IsNullOrEmpty(card.Id)).ToList();
|
||||
}
|
||||
#endif
|
||||
|
||||
Logging.Debug($"[CardSystemManager] Loaded {availableCards.Count} card definitions from {cardDataPath}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Builds a lookup dictionary for quick access to card definitions by ID
|
||||
/// </summary>
|
||||
@@ -297,5 +328,79 @@ namespace Data.CardSystem
|
||||
|
||||
return (float)collectedInZone / totalInZone * 100f;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns all available card definitions in the system
|
||||
/// </summary>
|
||||
public List<CardDefinition> GetAllCardDefinitions()
|
||||
{
|
||||
return new List<CardDefinition>(availableCards);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns direct access to the player's card inventory
|
||||
/// For advanced operations and testing
|
||||
/// </summary>
|
||||
public CardInventory GetCardInventory()
|
||||
{
|
||||
return playerInventory;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns cards filtered by both zone and rarity
|
||||
/// </summary>
|
||||
public List<CardData> GetCardsByZoneAndRarity(CardZone zone, CardRarity rarity)
|
||||
{
|
||||
List<CardData> zoneCards = GetCardsByZone(zone);
|
||||
return zoneCards.FindAll(c => c.Rarity == rarity);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the count of cards by rarity
|
||||
/// </summary>
|
||||
public int GetCardCountByRarity(CardRarity rarity)
|
||||
{
|
||||
return playerInventory.GetCardsByRarity(rarity).Count;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the count of cards by zone
|
||||
/// </summary>
|
||||
public int GetCardCountByZone(CardZone zone)
|
||||
{
|
||||
return playerInventory.GetCardsByZone(zone).Count;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the total number of card definitions available in the system
|
||||
/// </summary>
|
||||
public int GetTotalCardDefinitionsCount()
|
||||
{
|
||||
return availableCards.Count;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the total collection completion percentage (0-100)
|
||||
/// </summary>
|
||||
public float GetTotalCompletionPercentage()
|
||||
{
|
||||
if (availableCards.Count == 0) return 0;
|
||||
return (float)GetUniqueCardCount() / availableCards.Count * 100f;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets total completion percentage for a specific rarity (0-100)
|
||||
/// </summary>
|
||||
public float GetRarityCompletionPercentage(CardRarity rarity)
|
||||
{
|
||||
// Count available cards of this rarity
|
||||
int totalOfRarity = availableCards.FindAll(c => c.Rarity == rarity).Count;
|
||||
if (totalOfRarity == 0) return 0;
|
||||
|
||||
// Count collected cards of this rarity
|
||||
int collectedOfRarity = playerInventory.GetCardsByRarity(rarity).Count;
|
||||
|
||||
return (float)collectedOfRarity / totalOfRarity * 100f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
3
Assets/Scripts/Tests.meta
Normal file
3
Assets/Scripts/Tests.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1b32796fca0a4b168dfb93a282054c86
|
||||
timeCreated: 1760951960
|
||||
251
Assets/Scripts/Tests/CardSystemTester.cs
Normal file
251
Assets/Scripts/Tests/CardSystemTester.cs
Normal file
@@ -0,0 +1,251 @@
|
||||
using UnityEngine;
|
||||
using AppleHills.Data.CardSystem;
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using Data.CardSystem;
|
||||
using Core;
|
||||
using AppleHills.UI.CardSystem;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace AppleHills.Tests
|
||||
{
|
||||
/// <summary>
|
||||
/// Testing component for the Card System. Provides editor buttons to test core functionalities.
|
||||
/// Place this in a test scene to easily test card system features without needing full game implementation.
|
||||
/// </summary>
|
||||
public class CardSystemTester : MonoBehaviour
|
||||
{
|
||||
[Header("References")]
|
||||
[SerializeField] private CardAlbumUI cardAlbumUI;
|
||||
|
||||
[Header("Test Settings")]
|
||||
[SerializeField] [Range(1, 10)] private int boosterPacksToAdd = 3;
|
||||
[SerializeField] [Range(1, 100)] private int cardsToGenerate = 10;
|
||||
[SerializeField] private bool autoOpenPacksWhenAdded = false;
|
||||
|
||||
[Header("Debug Info")]
|
||||
[SerializeField] [ReadOnly] private int currentBoosterCount;
|
||||
[SerializeField] [ReadOnly] private int totalCardsInCollection;
|
||||
[SerializeField] [ReadOnly] private string lastActionMessage;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
// Auto-find references if needed
|
||||
if (cardAlbumUI == null)
|
||||
cardAlbumUI = FindAnyObjectByType<CardAlbumUI>();
|
||||
|
||||
// Log missing references
|
||||
if (cardAlbumUI == null)
|
||||
Debug.LogError("CardSystemTester: No CardAlbumUI found in the scene!");
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
RefreshDebugInfo();
|
||||
}
|
||||
|
||||
// Refresh the debug information displayed in the inspector
|
||||
private void RefreshDebugInfo()
|
||||
{
|
||||
// Access CardSystemManager through the singleton Instance
|
||||
if (CardSystemManager.Instance != null)
|
||||
{
|
||||
currentBoosterCount = CardSystemManager.Instance.GetBoosterPackCount();
|
||||
totalCardsInCollection = CardSystemManager.Instance.GetCardInventory().GetAllCards().Count;
|
||||
}
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR
|
||||
// Custom editor buttons for testing
|
||||
public void AddBoosterPacks()
|
||||
{
|
||||
// Access CardSystemManager through the singleton Instance
|
||||
if (CardSystemManager.Instance != null)
|
||||
{
|
||||
CardSystemManager.Instance.AddBoosterPack(boosterPacksToAdd);
|
||||
lastActionMessage = $"Added {boosterPacksToAdd} booster pack(s)";
|
||||
Logging.Debug($"[CardSystemTester] {lastActionMessage}");
|
||||
RefreshDebugInfo();
|
||||
|
||||
if (autoOpenPacksWhenAdded && cardAlbumUI != null)
|
||||
{
|
||||
SimulateBackpackClick();
|
||||
cardAlbumUI.OpenBoosterPack();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void SimulateBackpackClick()
|
||||
{
|
||||
if (cardAlbumUI != null)
|
||||
{
|
||||
// This will show the main card menu
|
||||
// Manually trigger a click on the backpack icon
|
||||
// Note: This relies on the backpack icon being correctly set up in the CardAlbumUI
|
||||
if (cardAlbumUI.BackpackIcon != null)
|
||||
{
|
||||
Button backpackButton = cardAlbumUI.BackpackIcon.GetComponent<Button>();
|
||||
if (backpackButton != null)
|
||||
{
|
||||
backpackButton.onClick.Invoke();
|
||||
lastActionMessage = "Opened card menu via backpack click";
|
||||
Logging.Debug($"[CardSystemTester] {lastActionMessage}");
|
||||
}
|
||||
else
|
||||
{
|
||||
lastActionMessage = "Failed to find Button component on backpack icon";
|
||||
Logging.Warning($"[CardSystemTester] {lastActionMessage}");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
lastActionMessage = "BackpackIcon reference is null";
|
||||
Logging.Warning($"[CardSystemTester] {lastActionMessage}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void OpenBoosterPack()
|
||||
{
|
||||
if (cardAlbumUI != null)
|
||||
{
|
||||
SimulateBackpackClick(); // First make sure we've opened the menu
|
||||
cardAlbumUI.OpenBoosterPack();
|
||||
lastActionMessage = "Opening booster pack";
|
||||
Logging.Debug($"[CardSystemTester] {lastActionMessage}");
|
||||
RefreshDebugInfo();
|
||||
}
|
||||
}
|
||||
|
||||
public void OpenAlbumView()
|
||||
{
|
||||
if (cardAlbumUI != null)
|
||||
{
|
||||
SimulateBackpackClick(); // First make sure we've opened the menu
|
||||
cardAlbumUI.OpenAlbumView();
|
||||
lastActionMessage = "Opening album view";
|
||||
Logging.Debug($"[CardSystemTester] {lastActionMessage}");
|
||||
}
|
||||
}
|
||||
|
||||
public void GenerateRandomCards()
|
||||
{
|
||||
// Access CardSystemManager through the singleton Instance
|
||||
if (CardSystemManager.Instance != null)
|
||||
{
|
||||
int cardsAdded = 0;
|
||||
List<CardDefinition> allDefinitions = CardSystemManager.Instance.GetAllCardDefinitions();
|
||||
|
||||
if (allDefinitions.Count == 0)
|
||||
{
|
||||
lastActionMessage = "Error: No card definitions available";
|
||||
Logging.Warning($"[CardSystemTester] {lastActionMessage}");
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < cardsToGenerate; i++)
|
||||
{
|
||||
// Get a random card definition
|
||||
CardDefinition randomDef = allDefinitions[Random.Range(0, allDefinitions.Count)];
|
||||
|
||||
// Create a card data instance and add it to inventory
|
||||
CardData newCard = randomDef.CreateCardData();
|
||||
CardSystemManager.Instance.GetCardInventory().AddCard(newCard);
|
||||
cardsAdded++;
|
||||
}
|
||||
|
||||
lastActionMessage = $"Generated {cardsAdded} random cards";
|
||||
Logging.Debug($"[CardSystemTester] {lastActionMessage}");
|
||||
RefreshDebugInfo();
|
||||
}
|
||||
}
|
||||
|
||||
public void ClearAllCards()
|
||||
{
|
||||
// Access CardSystemManager through the singleton Instance
|
||||
if (CardSystemManager.Instance != null)
|
||||
{
|
||||
int count = CardSystemManager.Instance.GetCardInventory().GetAllCards().Count;
|
||||
CardSystemManager.Instance.GetCardInventory().ClearAllCards();
|
||||
lastActionMessage = $"Cleared {count} cards from inventory";
|
||||
Logging.Debug($"[CardSystemTester] {lastActionMessage}");
|
||||
RefreshDebugInfo();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR
|
||||
[CustomEditor(typeof(CardSystemTester))]
|
||||
public class CardSystemTesterEditor : Editor
|
||||
{
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
DrawDefaultInspector();
|
||||
|
||||
CardSystemTester tester = (CardSystemTester)target;
|
||||
|
||||
EditorGUILayout.Space();
|
||||
EditorGUILayout.LabelField("Test Actions", EditorStyles.boldLabel);
|
||||
|
||||
// Only enable buttons when in play mode
|
||||
GUI.enabled = Application.isPlaying;
|
||||
|
||||
if (GUILayout.Button("Add Booster Packs"))
|
||||
{
|
||||
tester.AddBoosterPacks();
|
||||
}
|
||||
|
||||
if (GUILayout.Button("Open Card Menu"))
|
||||
{
|
||||
tester.SimulateBackpackClick();
|
||||
}
|
||||
|
||||
if (GUILayout.Button("Open Booster Pack"))
|
||||
{
|
||||
tester.OpenBoosterPack();
|
||||
}
|
||||
|
||||
if (GUILayout.Button("Open Album View"))
|
||||
{
|
||||
tester.OpenAlbumView();
|
||||
}
|
||||
|
||||
EditorGUILayout.Space();
|
||||
|
||||
if (GUILayout.Button("Generate Random Cards"))
|
||||
{
|
||||
tester.GenerateRandomCards();
|
||||
}
|
||||
|
||||
if (GUILayout.Button("Clear All Cards"))
|
||||
{
|
||||
tester.ClearAllCards();
|
||||
}
|
||||
|
||||
// If not in play mode, show a hint
|
||||
if (!Application.isPlaying)
|
||||
{
|
||||
GUI.enabled = true;
|
||||
EditorGUILayout.HelpBox("Enter Play Mode to use these testing functions.", MessageType.Info);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// Simple attribute to make fields read-only in the inspector
|
||||
public class ReadOnlyAttribute : PropertyAttribute { }
|
||||
|
||||
#if UNITY_EDITOR
|
||||
[CustomPropertyDrawer(typeof(ReadOnlyAttribute))]
|
||||
public class ReadOnlyDrawer : PropertyDrawer
|
||||
{
|
||||
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
||||
{
|
||||
GUI.enabled = false;
|
||||
EditorGUI.PropertyField(position, property, label, true);
|
||||
GUI.enabled = true;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
3
Assets/Scripts/Tests/CardSystemTester.cs.meta
Normal file
3
Assets/Scripts/Tests/CardSystemTester.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6c59c766505c4342983594dbe19f3db0
|
||||
timeCreated: 1760951960
|
||||
@@ -3,35 +3,49 @@ using AppleHills.Data.CardSystem;
|
||||
using Core;
|
||||
using Data.CardSystem;
|
||||
using Pixelplacement;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace AppleHills.UI.CardSystem
|
||||
{
|
||||
/// <summary>
|
||||
/// UI page for viewing and organizing the player's card collection in an album.
|
||||
/// UI page for viewing the player's card collection in an album.
|
||||
/// </summary>
|
||||
public class AlbumViewPage : UIPage
|
||||
{
|
||||
[Header("Album UI Elements")]
|
||||
[SerializeField] private GridLayoutGroup albumGrid;
|
||||
[SerializeField] private RectTransform cardStackContainer;
|
||||
[SerializeField] private GameObject emptyAlbumMessage;
|
||||
[SerializeField] private GameObject cardSlotPrefab;
|
||||
[SerializeField] private GameObject cardPrefab;
|
||||
|
||||
[Header("Filter UI")]
|
||||
[SerializeField] private TMP_Dropdown zoneFilterDropdown;
|
||||
[SerializeField] private TMP_Dropdown rarityFilterDropdown;
|
||||
[SerializeField] private Button resetFiltersButton;
|
||||
[SerializeField] private CanvasGroup canvasGroup;
|
||||
|
||||
[Header("Navigation")]
|
||||
[SerializeField] private Button backButton;
|
||||
|
||||
// Runtime references
|
||||
private CardSystemManager _cardManager;
|
||||
private List<CardUIElement> _displayedCards = new List<CardUIElement>();
|
||||
private Dictionary<int, Transform> _albumSlots = new Dictionary<int, Transform>();
|
||||
|
||||
// Drag and drop handling
|
||||
private CardUIElement _currentlyDraggedCard = null;
|
||||
private Vector3 _cardOriginalPosition;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
_cardManager = CardSystemManager.Instance;
|
||||
|
||||
// Make sure we have a CanvasGroup for transitions
|
||||
if (canvasGroup == null)
|
||||
canvasGroup = GetComponent<CanvasGroup>();
|
||||
if (canvasGroup == null)
|
||||
canvasGroup = gameObject.AddComponent<CanvasGroup>();
|
||||
|
||||
// Set up back button
|
||||
if (backButton != null)
|
||||
{
|
||||
backButton.onClick.AddListener(OnBackButtonClicked);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -46,300 +60,272 @@ namespace AppleHills.UI.CardSystem
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes the album with card slots and the player's collection
|
||||
/// Initializes the album with the player's collection
|
||||
/// </summary>
|
||||
private void InitializeAlbum()
|
||||
{
|
||||
// Clear any previous setup
|
||||
ClearAlbum();
|
||||
|
||||
// Setup filter UI
|
||||
InitializeFilters();
|
||||
|
||||
// Get all collected cards
|
||||
List<CardData> collectedCards = _cardManager.GetAllCollectedCards();
|
||||
|
||||
// Show/hide empty message based on collection
|
||||
if (emptyAlbumMessage != null)
|
||||
// If there are cards to display, create UI elements for them
|
||||
if (collectedCards.Count > 0)
|
||||
{
|
||||
emptyAlbumMessage.SetActive(collectedCards.Count == 0);
|
||||
}
|
||||
|
||||
if (collectedCards.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Set up the album slots
|
||||
SetupAlbumSlots();
|
||||
|
||||
// Create card UI elements for the stack
|
||||
CreateCardStack(collectedCards);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets up empty slots in the album grid
|
||||
/// </summary>
|
||||
private void SetupAlbumSlots()
|
||||
{
|
||||
if (albumGrid == null || cardSlotPrefab == null) return;
|
||||
|
||||
// Create predefined slots in the album
|
||||
// For a simple implementation, we'll create a 5x5 grid of slots
|
||||
int slotsPerZone = 5; // 5 slots per zone (one row)
|
||||
int totalZones = System.Enum.GetValues(typeof(CardZone)).Length;
|
||||
|
||||
for (int zone = 0; zone < totalZones; zone++)
|
||||
{
|
||||
for (int i = 0; i < slotsPerZone; i++)
|
||||
{
|
||||
// Create a slot at this position
|
||||
GameObject slotObj = Instantiate(cardSlotPrefab, albumGrid.transform);
|
||||
|
||||
// Calculate the collection index for this slot
|
||||
int collectionIndex = zone * 100 + i; // Zone*100 + position to ensure unique indices
|
||||
|
||||
// Store the slot reference
|
||||
_albumSlots[collectionIndex] = slotObj.transform;
|
||||
|
||||
// Set the slot label (optional)
|
||||
Text slotLabel = slotObj.GetComponentInChildren<Text>();
|
||||
if (slotLabel != null)
|
||||
{
|
||||
CardZone zoneEnum = (CardZone)zone;
|
||||
slotLabel.text = $"{zoneEnum} #{i+1}";
|
||||
}
|
||||
}
|
||||
// Create card UI elements
|
||||
DisplayCards(collectedCards);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates UI elements for the player's collected cards
|
||||
/// </summary>
|
||||
private void CreateCardStack(List<CardData> cards)
|
||||
private void DisplayCards(List<CardData> cards)
|
||||
{
|
||||
if (cardStackContainer == null || cardPrefab == null) return;
|
||||
|
||||
// Stack offset for visual effect
|
||||
Vector3 stackOffset = new Vector3(5f, -5f, 0f);
|
||||
Vector3 basePosition = Vector3.zero;
|
||||
if (albumGrid == null || cardPrefab == null) return;
|
||||
|
||||
// Sort cards by collection index
|
||||
cards.Sort((a, b) => a.CollectionIndex.CompareTo(b.CollectionIndex));
|
||||
|
||||
// Create card UI elements
|
||||
for (int i = 0; i < cards.Count; i++)
|
||||
foreach (var cardData in cards)
|
||||
{
|
||||
GameObject cardObj = Instantiate(cardPrefab, cardStackContainer);
|
||||
CardUIElement cardUI = cardObj.GetComponent<CardUIElement>();
|
||||
GameObject cardObj = Instantiate(cardPrefab, albumGrid.transform);
|
||||
|
||||
// Configure the card UI with the card data
|
||||
CardUIElement cardUI = cardObj.GetComponent<CardUIElement>();
|
||||
if (cardUI != null)
|
||||
{
|
||||
// Position in stack
|
||||
cardObj.GetComponent<RectTransform>().anchoredPosition = basePosition + (stackOffset * i);
|
||||
|
||||
// Set up card data
|
||||
cardUI.SetupCard(cards[i]);
|
||||
|
||||
// Add drag handlers
|
||||
SetupCardDragHandlers(cardUI);
|
||||
|
||||
// Add to tracked cards
|
||||
cardUI.SetupCard(cardData);
|
||||
_displayedCards.Add(cardUI);
|
||||
|
||||
// Check if this card should be placed in a slot already
|
||||
int collectionIndex = cards[i].CollectionIndex;
|
||||
if (_albumSlots.TryGetValue(collectionIndex, out Transform slot))
|
||||
{
|
||||
// Card has a designated slot, place it there
|
||||
PlaceCardInSlot(cardUI, slot);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets up drag and drop handlers for a card
|
||||
/// </summary>
|
||||
private void SetupCardDragHandlers(CardUIElement cardUI)
|
||||
{
|
||||
// // Get drag handler component (you might need to implement this)
|
||||
// DragHandler dragHandler = cardUI.GetComponent<DragHandler>();
|
||||
// if (dragHandler == null)
|
||||
// {
|
||||
// // This is a stub for the drag handler
|
||||
// // In a real implementation, you'd have a proper drag handler component
|
||||
// // For now, we'll just add click listeners
|
||||
//
|
||||
// // Add click listener
|
||||
// Button cardButton = cardUI.GetComponent<Button>();
|
||||
// if (cardButton != null)
|
||||
// {
|
||||
// cardButton.onClick.AddListener(() => OnCardClicked(cardUI));
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// // Set up the drag handler events
|
||||
// dragHandler.OnBeginDrag.AddListener(() => OnBeginDragCard(cardUI));
|
||||
// dragHandler.OnDrag.AddListener((position) => OnDragCard(cardUI, position));
|
||||
// dragHandler.OnEndDrag.AddListener(() => OnEndDragCard(cardUI));
|
||||
// }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles when a card is clicked (simplistic alternative to drag and drop)
|
||||
/// </summary>
|
||||
private void OnCardClicked(CardUIElement cardUI)
|
||||
{
|
||||
CardData cardData = cardUI.GetCardData();
|
||||
|
||||
// Find the slot for this card based on collection index
|
||||
if (_albumSlots.TryGetValue(cardData.CollectionIndex, out Transform slot))
|
||||
{
|
||||
// Place the card in its slot
|
||||
PlaceCardInSlot(cardUI, slot);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles the start of a card drag operation
|
||||
/// </summary>
|
||||
private void OnBeginDragCard(CardUIElement cardUI)
|
||||
{
|
||||
_currentlyDraggedCard = cardUI;
|
||||
_cardOriginalPosition = cardUI.transform.position;
|
||||
|
||||
// Bring the card to the front
|
||||
cardUI.transform.SetAsLastSibling();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles the dragging of a card
|
||||
/// </summary>
|
||||
private void OnDragCard(CardUIElement cardUI, Vector3 position)
|
||||
{
|
||||
cardUI.transform.position = position;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles the end of a card drag operation
|
||||
/// </summary>
|
||||
private void OnEndDragCard(CardUIElement cardUI)
|
||||
{
|
||||
// Check if the card is over a valid slot
|
||||
Transform closestSlot = FindClosestSlot(cardUI.transform.position);
|
||||
|
||||
if (closestSlot != null)
|
||||
{
|
||||
// Place the card in the slot
|
||||
PlaceCardInSlot(cardUI, closestSlot);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Return the card to its original position
|
||||
cardUI.transform.position = _cardOriginalPosition;
|
||||
}
|
||||
|
||||
_currentlyDraggedCard = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Places a card in an album slot
|
||||
/// </summary>
|
||||
private void PlaceCardInSlot(CardUIElement cardUI, Transform slot)
|
||||
{
|
||||
// Reparent the card to the slot
|
||||
cardUI.transform.SetParent(slot);
|
||||
|
||||
// Animate card to center of slot using Pixelplacement.Tween
|
||||
Tween.LocalPosition(cardUI.transform, Vector3.zero, 0.25f, 0f, Tween.EaseOutBack);
|
||||
|
||||
Logging.Debug($"[AlbumViewPage] Placed card '{cardUI.GetCardData().Name}' in album slot");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Finds the closest album slot to a given position
|
||||
/// </summary>
|
||||
private Transform FindClosestSlot(Vector3 position)
|
||||
{
|
||||
Transform closest = null;
|
||||
float closestDistance = 100f; // Large initial value
|
||||
|
||||
foreach (var slot in _albumSlots.Values)
|
||||
{
|
||||
float distance = Vector3.Distance(position, slot.position);
|
||||
if (distance < closestDistance && distance < 50f) // Only if within reasonable range
|
||||
{
|
||||
closestDistance = distance;
|
||||
closest = slot;
|
||||
}
|
||||
}
|
||||
|
||||
return closest;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clears the album UI
|
||||
/// Clears all card UI elements from the album
|
||||
/// </summary>
|
||||
private void ClearAlbum()
|
||||
{
|
||||
// Clear displayed cards
|
||||
foreach (var card in _displayedCards)
|
||||
{
|
||||
Destroy(card.gameObject);
|
||||
if (card != null && card.gameObject != null)
|
||||
Destroy(card.gameObject);
|
||||
}
|
||||
_displayedCards.Clear();
|
||||
|
||||
// Clear album slots
|
||||
foreach (Transform child in albumGrid.transform)
|
||||
{
|
||||
Destroy(child.gameObject);
|
||||
}
|
||||
_albumSlots.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Override for transition in animation using Pixelplacement.Tween
|
||||
/// Initializes filter dropdowns
|
||||
/// </summary>
|
||||
private void InitializeFilters()
|
||||
{
|
||||
// Setup zone filter dropdown
|
||||
if (zoneFilterDropdown != null)
|
||||
{
|
||||
zoneFilterDropdown.ClearOptions();
|
||||
|
||||
// Add "All Zones" option
|
||||
List<string> zoneOptions = new List<string>() { "All Zones" };
|
||||
|
||||
// Add options for each zone
|
||||
foreach (CardZone zone in System.Enum.GetValues(typeof(CardZone)))
|
||||
{
|
||||
zoneOptions.Add(zone.ToString());
|
||||
}
|
||||
|
||||
zoneFilterDropdown.AddOptions(zoneOptions);
|
||||
zoneFilterDropdown.onValueChanged.AddListener(OnFilterChanged);
|
||||
}
|
||||
|
||||
// Setup rarity filter dropdown
|
||||
if (rarityFilterDropdown != null)
|
||||
{
|
||||
rarityFilterDropdown.ClearOptions();
|
||||
|
||||
// Add "All Rarities" option
|
||||
List<string> rarityOptions = new List<string>() { "All Rarities" };
|
||||
|
||||
// Add options for each rarity
|
||||
foreach (CardRarity rarity in System.Enum.GetValues(typeof(CardRarity)))
|
||||
{
|
||||
rarityOptions.Add(rarity.ToString());
|
||||
}
|
||||
|
||||
rarityFilterDropdown.AddOptions(rarityOptions);
|
||||
rarityFilterDropdown.onValueChanged.AddListener(OnFilterChanged);
|
||||
}
|
||||
|
||||
// Setup reset filters button
|
||||
if (resetFiltersButton != null)
|
||||
{
|
||||
resetFiltersButton.onClick.AddListener(OnResetFiltersClicked);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles changes to the filter dropdowns
|
||||
/// </summary>
|
||||
private void OnFilterChanged(int value)
|
||||
{
|
||||
ApplyFilters();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resets all filters to their default values
|
||||
/// </summary>
|
||||
private void OnResetFiltersClicked()
|
||||
{
|
||||
if (zoneFilterDropdown != null)
|
||||
zoneFilterDropdown.value = 0;
|
||||
|
||||
if (rarityFilterDropdown != null)
|
||||
rarityFilterDropdown.value = 0;
|
||||
|
||||
ApplyFilters();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Applies the current filter selections to the displayed cards
|
||||
/// </summary>
|
||||
private void ApplyFilters()
|
||||
{
|
||||
// Clear current cards
|
||||
ClearAlbum();
|
||||
|
||||
// Get selected filters
|
||||
CardZone? selectedZone = null;
|
||||
CardRarity? selectedRarity = null;
|
||||
|
||||
// Get zone filter value
|
||||
if (zoneFilterDropdown != null && zoneFilterDropdown.value > 0)
|
||||
{
|
||||
selectedZone = (CardZone)(zoneFilterDropdown.value - 1);
|
||||
}
|
||||
|
||||
// Get rarity filter value
|
||||
if (rarityFilterDropdown != null && rarityFilterDropdown.value > 0)
|
||||
{
|
||||
selectedRarity = (CardRarity)(rarityFilterDropdown.value - 1);
|
||||
}
|
||||
|
||||
// Get filtered cards
|
||||
List<CardData> filteredCards = GetFilteredCards(selectedZone, selectedRarity);
|
||||
|
||||
// Create card UI elements for the filtered cards
|
||||
DisplayCards(filteredCards);
|
||||
|
||||
Logging.Debug($"[AlbumViewPage] Applied filters. Showing {filteredCards.Count} cards.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets cards filtered by zone and/or rarity
|
||||
/// </summary>
|
||||
private List<CardData> GetFilteredCards(CardZone? zone, CardRarity? rarity)
|
||||
{
|
||||
List<CardData> result;
|
||||
|
||||
// Get all collected cards
|
||||
if (zone == null && rarity == null)
|
||||
{
|
||||
// No filters, return all cards
|
||||
result = _cardManager.GetAllCollectedCards();
|
||||
}
|
||||
else if (zone != null && rarity != null)
|
||||
{
|
||||
// Both filters, get cards by zone and rarity
|
||||
result = _cardManager.GetCardsByZoneAndRarity(zone.Value, rarity.Value);
|
||||
}
|
||||
else if (zone != null)
|
||||
{
|
||||
// Only zone filter
|
||||
result = _cardManager.GetCardsByZone(zone.Value);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Only rarity filter
|
||||
result = _cardManager.GetCardsByRarity(rarity.Value);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles click on the back button
|
||||
/// </summary>
|
||||
private void OnBackButtonClicked()
|
||||
{
|
||||
// Use the UIPageController to go back to the previous page
|
||||
UIPageController pageController = UIPageController.Instance;
|
||||
if (pageController != null)
|
||||
{
|
||||
pageController.PopPage();
|
||||
}
|
||||
}
|
||||
|
||||
protected override void DoTransitionIn(System.Action onComplete)
|
||||
{
|
||||
// Simple slide in animation
|
||||
RectTransform rt = GetComponent<RectTransform>();
|
||||
if (rt != null)
|
||||
// Simple fade in animation
|
||||
if (canvasGroup != null)
|
||||
{
|
||||
// Store the end position
|
||||
Vector2 endPosition = rt.anchoredPosition;
|
||||
|
||||
// Set initial position (off-screen to the right)
|
||||
rt.anchoredPosition = new Vector2(Screen.width, endPosition.y);
|
||||
|
||||
// Animate to end position
|
||||
Tween.AnchoredPosition(rt, endPosition, transitionDuration, 0f,
|
||||
Tween.EaseOutStrong, Tween.LoopType.None, null, onComplete);
|
||||
canvasGroup.alpha = 0f;
|
||||
Tween.Value(0f, 1f, (value) => canvasGroup.alpha = value, transitionDuration, 0f, Tween.EaseInOut, Tween.LoopType.None, null, onComplete);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fallback if no CanvasGroup
|
||||
onComplete?.Invoke();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Override for transition out animation using Pixelplacement.Tween
|
||||
/// </summary>
|
||||
protected override void DoTransitionOut(System.Action onComplete)
|
||||
{
|
||||
// Simple slide out animation
|
||||
RectTransform rt = GetComponent<RectTransform>();
|
||||
if (rt != null)
|
||||
// Simple fade out animation
|
||||
if (canvasGroup != null)
|
||||
{
|
||||
// Animate to off-screen position (to the left)
|
||||
Vector2 offScreenPosition = new Vector2(-Screen.width, rt.anchoredPosition.y);
|
||||
|
||||
Tween.AnchoredPosition(rt, offScreenPosition, transitionDuration, 0f,
|
||||
Tween.EaseInOutStrong, Tween.LoopType.None, null, onComplete);
|
||||
Tween.Value(canvasGroup.alpha, 0f, (value) => canvasGroup.alpha = value, transitionDuration, 0f, Tween.EaseInOut, Tween.LoopType.None, null, onComplete);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fallback if no CanvasGroup
|
||||
onComplete?.Invoke();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
// Clean up button listeners
|
||||
if (backButton != null)
|
||||
{
|
||||
backButton.onClick.RemoveListener(OnBackButtonClicked);
|
||||
}
|
||||
|
||||
if (zoneFilterDropdown != null)
|
||||
{
|
||||
zoneFilterDropdown.onValueChanged.RemoveListener(OnFilterChanged);
|
||||
}
|
||||
|
||||
if (rarityFilterDropdown != null)
|
||||
{
|
||||
rarityFilterDropdown.onValueChanged.RemoveListener(OnFilterChanged);
|
||||
}
|
||||
|
||||
if (resetFiltersButton != null)
|
||||
{
|
||||
resetFiltersButton.onClick.RemoveListener(OnResetFiltersClicked);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
if (_cardManager == null)
|
||||
{
|
||||
_cardManager = CardSystemManager.Instance;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
185
Assets/Scripts/UI/CardSystem/BoosterNotificationDot.cs
Normal file
185
Assets/Scripts/UI/CardSystem/BoosterNotificationDot.cs
Normal file
@@ -0,0 +1,185 @@
|
||||
using UnityEngine;
|
||||
using TMPro;
|
||||
using Pixelplacement;
|
||||
using Pixelplacement.TweenSystem;
|
||||
|
||||
namespace AppleHills.UI.CardSystem
|
||||
{
|
||||
/// <summary>
|
||||
/// Manages a notification dot that displays a count (e.g., booster packs)
|
||||
/// Can be reused across different UI elements that need to show numeric notifications
|
||||
/// </summary>
|
||||
public class BoosterNotificationDot : MonoBehaviour
|
||||
{
|
||||
[Header("UI References")]
|
||||
[SerializeField] private GameObject dotBackground;
|
||||
[SerializeField] private TextMeshProUGUI countText;
|
||||
|
||||
[Header("Settings")]
|
||||
[SerializeField] private bool hideWhenZero = true;
|
||||
[SerializeField] private bool useAnimation = false;
|
||||
[SerializeField] private string textPrefix = "";
|
||||
[SerializeField] private string textSuffix = "";
|
||||
[SerializeField] private Color textColor = Color.white;
|
||||
|
||||
[Header("Animation")]
|
||||
[SerializeField] private bool useTween = true;
|
||||
[SerializeField] private float pulseDuration = 0.3f;
|
||||
[SerializeField] private float pulseScale = 1.2f;
|
||||
|
||||
// Optional animator reference
|
||||
[SerializeField] private Animator animator;
|
||||
[SerializeField] private string animationTrigger = "Update";
|
||||
|
||||
// Current count value
|
||||
private int _currentCount;
|
||||
private Vector3 _originalScale;
|
||||
|
||||
private TweenBase _activeTween;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
// Store original scale for pulse animation
|
||||
if (dotBackground != null)
|
||||
{
|
||||
_originalScale = dotBackground.transform.localScale;
|
||||
}
|
||||
|
||||
// Apply text color
|
||||
if (countText != null)
|
||||
{
|
||||
countText.color = textColor;
|
||||
}
|
||||
|
||||
// Initial setup based on current count
|
||||
SetCount(_currentCount);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the count displayed on the notification dot
|
||||
/// Also handles visibility based on settings
|
||||
/// </summary>
|
||||
public void SetCount(int count)
|
||||
{
|
||||
bool countChanged = count != _currentCount;
|
||||
_currentCount = count;
|
||||
|
||||
// Update text
|
||||
if (countText != null)
|
||||
{
|
||||
countText.text = textPrefix + count.ToString() + textSuffix;
|
||||
}
|
||||
|
||||
// Handle visibility
|
||||
if (hideWhenZero)
|
||||
{
|
||||
SetVisibility(count > 0);
|
||||
}
|
||||
|
||||
// Play animation if value changed and animation is enabled
|
||||
if (countChanged && count > 0)
|
||||
{
|
||||
if (useAnimation)
|
||||
{
|
||||
Animate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current count value
|
||||
/// </summary>
|
||||
public int GetCount()
|
||||
{
|
||||
return _currentCount;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set text formatting options
|
||||
/// </summary>
|
||||
public void SetFormatting(string prefix, string suffix, Color color)
|
||||
{
|
||||
textPrefix = prefix;
|
||||
textSuffix = suffix;
|
||||
textColor = color;
|
||||
|
||||
if (countText != null)
|
||||
{
|
||||
countText.color = color;
|
||||
// Update text with new formatting
|
||||
countText.text = textPrefix + _currentCount.ToString() + textSuffix;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Explicitly control the notification dot visibility
|
||||
/// </summary>
|
||||
public void SetVisibility(bool isVisible)
|
||||
{
|
||||
if (dotBackground != null)
|
||||
{
|
||||
dotBackground.SetActive(isVisible);
|
||||
}
|
||||
|
||||
if (countText != null)
|
||||
{
|
||||
countText.gameObject.SetActive(isVisible);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Show the notification dot
|
||||
/// </summary>
|
||||
public void Show()
|
||||
{
|
||||
SetVisibility(true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Hide the notification dot
|
||||
/// </summary>
|
||||
public void Hide()
|
||||
{
|
||||
SetVisibility(false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Play animation manually - either using Animator or Tween
|
||||
/// </summary>
|
||||
public void Animate()
|
||||
{
|
||||
if (useAnimation)
|
||||
{
|
||||
if (animator != null)
|
||||
{
|
||||
animator.SetTrigger(animationTrigger);
|
||||
}
|
||||
else if (useTween && dotBackground != null)
|
||||
{
|
||||
// Cancel any existing tweens on this transform
|
||||
_activeTween.Cancel();
|
||||
|
||||
// Reset to original scale
|
||||
dotBackground.transform.localScale = _originalScale;
|
||||
|
||||
// Pulse animation using Tween
|
||||
_activeTween = Tween.LocalScale(dotBackground.transform,
|
||||
_originalScale * pulseScale,
|
||||
pulseDuration/2,
|
||||
0,
|
||||
Tween.EaseOut,
|
||||
Tween.LoopType.None,
|
||||
null,
|
||||
() => {
|
||||
// Scale back to original size
|
||||
Tween.LocalScale(dotBackground.transform,
|
||||
_originalScale,
|
||||
pulseDuration/2,
|
||||
0,
|
||||
Tween.EaseIn);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ed8cced1478640229c5a61e3c6bd42df
|
||||
timeCreated: 1760710148
|
||||
@@ -4,6 +4,7 @@ using AppleHills.Data.CardSystem;
|
||||
using Core;
|
||||
using Data.CardSystem;
|
||||
using Pixelplacement;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
@@ -16,30 +17,44 @@ namespace AppleHills.UI.CardSystem
|
||||
{
|
||||
[Header("UI Elements")]
|
||||
[SerializeField] private GameObject boosterPackObject;
|
||||
[SerializeField] private Transform cardRevealTransform;
|
||||
[SerializeField] private RectTransform cardRevealContainer; // This should have a HorizontalLayoutGroup component with pre-populated card backs
|
||||
[SerializeField] private GameObject cardPrefab;
|
||||
[SerializeField] private Button openBoosterButton;
|
||||
[SerializeField] private Button continueButton;
|
||||
[SerializeField] private CanvasGroup canvasGroup;
|
||||
|
||||
[Header("Navigation")]
|
||||
[SerializeField] private Button backButton;
|
||||
|
||||
[Header("Animation Settings")]
|
||||
[SerializeField] private float cardRevealDelay = 0.5f;
|
||||
[SerializeField] private float cardMoveToBackpackDelay = 1.0f;
|
||||
[SerializeField] private float cardRevealDelay = 0.3f;
|
||||
[SerializeField] private float cardMoveToBackpackDelay = 0.8f;
|
||||
[SerializeField] private float flipAnimationDuration = 0.5f;
|
||||
|
||||
// State tracking
|
||||
private enum OpeningState
|
||||
{
|
||||
BoosterReady,
|
||||
CardBacksVisible,
|
||||
CardsRevealing,
|
||||
CardsRevealed,
|
||||
MovingToBackpack,
|
||||
Completed
|
||||
}
|
||||
|
||||
private OpeningState _currentState = OpeningState.BoosterReady;
|
||||
private List<CardUIElement> _revealedCards = new List<CardUIElement>();
|
||||
private List<Button> _cardBackButtons = new List<Button>();
|
||||
private List<CardData> _boosterCards = new List<CardData>();
|
||||
private int _revealedCardCount = 0;
|
||||
private CardSystemManager _cardManager;
|
||||
private CardAlbumUI _cardAlbumUI;
|
||||
private Coroutine _moveToBackpackCoroutine;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
_cardManager = CardSystemManager.Instance;
|
||||
_cardAlbumUI = FindObjectOfType<CardAlbumUI>();
|
||||
|
||||
// Set up button listeners
|
||||
if (openBoosterButton != null)
|
||||
@@ -52,6 +67,59 @@ namespace AppleHills.UI.CardSystem
|
||||
continueButton.onClick.AddListener(OnContinueClicked);
|
||||
continueButton.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
// Set up back button
|
||||
if (backButton != null)
|
||||
{
|
||||
backButton.onClick.AddListener(OnBackButtonClicked);
|
||||
}
|
||||
|
||||
// Make sure we have a CanvasGroup for transitions
|
||||
if (canvasGroup == null)
|
||||
canvasGroup = GetComponent<CanvasGroup>();
|
||||
if (canvasGroup == null)
|
||||
canvasGroup = gameObject.AddComponent<CanvasGroup>();
|
||||
|
||||
// Cache card back buttons from container
|
||||
CacheCardBackButtons();
|
||||
|
||||
// Initially hide all card backs
|
||||
HideAllCardBacks();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Cache all card back buttons from the container
|
||||
/// </summary>
|
||||
private void CacheCardBackButtons()
|
||||
{
|
||||
_cardBackButtons.Clear();
|
||||
|
||||
if (cardRevealContainer != null)
|
||||
{
|
||||
// Get all buttons in the container (these are our card backs)
|
||||
Button[] buttonsInContainer = cardRevealContainer.GetComponentsInChildren<Button>(true);
|
||||
_cardBackButtons.AddRange(buttonsInContainer);
|
||||
|
||||
Debug.Log($"[BoosterOpeningPage] Found {_cardBackButtons.Count} card back buttons in container");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("[BoosterOpeningPage] Card reveal container is null, can't find card backs!");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Hides all card backs in the container
|
||||
/// </summary>
|
||||
private void HideAllCardBacks()
|
||||
{
|
||||
foreach (var cardBack in _cardBackButtons)
|
||||
{
|
||||
if (cardBack != null && cardBack.gameObject != null)
|
||||
{
|
||||
cardBack.gameObject.SetActive(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
@@ -66,6 +134,35 @@ namespace AppleHills.UI.CardSystem
|
||||
{
|
||||
continueButton.onClick.RemoveListener(OnContinueClicked);
|
||||
}
|
||||
|
||||
if (backButton != null)
|
||||
{
|
||||
backButton.onClick.RemoveListener(OnBackButtonClicked);
|
||||
}
|
||||
|
||||
// Stop any running coroutines
|
||||
if (_moveToBackpackCoroutine != null)
|
||||
StopCoroutine(_moveToBackpackCoroutine);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles click on the back button
|
||||
/// </summary>
|
||||
private void OnBackButtonClicked()
|
||||
{
|
||||
// Don't allow going back during animations or card reveals
|
||||
if (_currentState == OpeningState.CardsRevealing ||
|
||||
_currentState == OpeningState.MovingToBackpack)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Use the UIPageController to go back to the previous page
|
||||
UIPageController pageController = UIPageController.Instance;
|
||||
if (pageController != null)
|
||||
{
|
||||
pageController.PopPage();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -86,17 +183,36 @@ namespace AppleHills.UI.CardSystem
|
||||
// Clear any previously revealed cards
|
||||
foreach (var card in _revealedCards)
|
||||
{
|
||||
Destroy(card.gameObject);
|
||||
if (card != null && card.gameObject != null)
|
||||
Destroy(card.gameObject);
|
||||
}
|
||||
_revealedCards.Clear();
|
||||
|
||||
// Re-cache card backs in case they changed
|
||||
CacheCardBackButtons();
|
||||
|
||||
// Reset all card backs - both visibility and scale
|
||||
foreach (var cardBack in _cardBackButtons)
|
||||
{
|
||||
if (cardBack != null && cardBack.gameObject != null)
|
||||
{
|
||||
cardBack.gameObject.SetActive(false);
|
||||
cardBack.transform.localScale = Vector3.one; // Reset scale
|
||||
cardBack.transform.localRotation = Quaternion.identity; // Reset rotation
|
||||
}
|
||||
}
|
||||
|
||||
// Reset state
|
||||
_currentState = OpeningState.BoosterReady;
|
||||
_revealedCardCount = 0;
|
||||
_boosterCards.Clear();
|
||||
|
||||
// Show booster pack, hide continue button
|
||||
// Show booster pack, show open button, hide continue button
|
||||
if (boosterPackObject != null)
|
||||
{
|
||||
boosterPackObject.SetActive(true);
|
||||
boosterPackObject.transform.localScale = Vector3.one; // Reset scale
|
||||
boosterPackObject.transform.localRotation = Quaternion.identity; // Reset rotation
|
||||
}
|
||||
|
||||
if (openBoosterButton != null)
|
||||
@@ -107,7 +223,16 @@ namespace AppleHills.UI.CardSystem
|
||||
if (continueButton != null)
|
||||
{
|
||||
continueButton.gameObject.SetActive(false);
|
||||
continueButton.transform.localScale = Vector3.one; // Reset scale
|
||||
}
|
||||
|
||||
// Make back button visible
|
||||
if (backButton != null)
|
||||
{
|
||||
backButton.gameObject.SetActive(true);
|
||||
}
|
||||
|
||||
Debug.Log("[BoosterOpeningPage] State reset complete, all scales and rotations reset to defaults");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -117,15 +242,20 @@ namespace AppleHills.UI.CardSystem
|
||||
{
|
||||
if (_currentState != OpeningState.BoosterReady) return;
|
||||
|
||||
// Open the booster pack and get the cards
|
||||
List<CardData> newCards = _cardManager.OpenBoosterPack();
|
||||
_currentState = OpeningState.CardBacksVisible;
|
||||
|
||||
if (newCards.Count > 0)
|
||||
// Open the booster pack and get the cards
|
||||
_boosterCards = _cardManager.OpenBoosterPack();
|
||||
|
||||
if (_boosterCards.Count > 0)
|
||||
{
|
||||
// Hide the booster pack and open button
|
||||
if (boosterPackObject != null)
|
||||
{
|
||||
boosterPackObject.SetActive(false);
|
||||
// Animate the booster pack opening
|
||||
Tween.LocalScale(boosterPackObject.transform, Vector3.zero, 0.3f, 0f, Tween.EaseInBack, Tween.LoopType.None, null, () => {
|
||||
boosterPackObject.SetActive(false);
|
||||
});
|
||||
}
|
||||
|
||||
if (openBoosterButton != null)
|
||||
@@ -133,8 +263,8 @@ namespace AppleHills.UI.CardSystem
|
||||
openBoosterButton.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
// Start revealing cards
|
||||
StartCoroutine(RevealCards(newCards));
|
||||
// Show card backs first
|
||||
StartCoroutine(ShowCardBacks());
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -144,92 +274,298 @@ namespace AppleHills.UI.CardSystem
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reveals cards one by one with animation
|
||||
/// Shows card backs in the reveal positions
|
||||
/// </summary>
|
||||
private IEnumerator RevealCards(List<CardData> cards)
|
||||
private IEnumerator ShowCardBacks()
|
||||
{
|
||||
// Wait a short delay before revealing cards
|
||||
// Wait a short delay before showing card backs
|
||||
yield return new WaitForSeconds(0.5f);
|
||||
|
||||
// Reveal each card
|
||||
foreach (var cardData in cards)
|
||||
// Check if we have proper container setup
|
||||
if (cardRevealContainer == null)
|
||||
{
|
||||
// Instantiate card UI element
|
||||
GameObject cardObj = Instantiate(cardPrefab, cardRevealTransform);
|
||||
CardUIElement cardUI = cardObj.GetComponent<CardUIElement>();
|
||||
Debug.LogError("[BoosterOpeningPage] Card reveal container is null!");
|
||||
yield break;
|
||||
}
|
||||
|
||||
// Check if we found any card backs
|
||||
if (_cardBackButtons.Count == 0)
|
||||
{
|
||||
Debug.LogError("[BoosterOpeningPage] No card back buttons found in container!");
|
||||
yield break;
|
||||
}
|
||||
|
||||
// Determine how many cards to show based on the booster cards and available card backs
|
||||
int cardsToShow = Mathf.Min(_boosterCards.Count, _cardBackButtons.Count);
|
||||
|
||||
// Activate and animate the card backs
|
||||
for (int i = 0; i < cardsToShow; i++)
|
||||
{
|
||||
Button cardBack = _cardBackButtons[i];
|
||||
if (cardBack == null) continue;
|
||||
|
||||
GameObject cardBackObj = cardBack.gameObject;
|
||||
|
||||
// Ensure the card back is active
|
||||
cardBackObj.SetActive(true);
|
||||
|
||||
// Store the index for later reference when clicked
|
||||
int cardIndex = i;
|
||||
|
||||
// Configure the button
|
||||
cardBack.onClick.RemoveAllListeners(); // Clear any previous listeners
|
||||
cardBack.onClick.AddListener(() => OnCardBackClicked(cardIndex));
|
||||
|
||||
// Set initial scale to zero for animation
|
||||
cardBackObj.transform.localScale = Vector3.zero;
|
||||
|
||||
Debug.Log($"[BoosterOpeningPage] Card back {i} activated");
|
||||
|
||||
// Play reveal animation using Pixelplacement.Tween
|
||||
Tween.LocalScale(cardBackObj.transform, Vector3.one, 0.5f, 0f, Tween.EaseOutBack);
|
||||
|
||||
// Wait for animation delay
|
||||
yield return new WaitForSeconds(cardRevealDelay);
|
||||
}
|
||||
|
||||
// Update state
|
||||
_currentState = OpeningState.CardBacksVisible;
|
||||
Debug.Log($"[BoosterOpeningPage] All {cardsToShow} card backs should now be visible");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles click on a card back to reveal the card
|
||||
/// </summary>
|
||||
private void OnCardBackClicked(int cardIndex)
|
||||
{
|
||||
Logging.Debug($"[BoosterOpeningPage] Card back clicked at index {cardIndex}");
|
||||
|
||||
// Only respond to clicks when in the appropriate state
|
||||
if (_currentState != OpeningState.CardBacksVisible)
|
||||
{
|
||||
Logging.Warning($"[BoosterOpeningPage] Card clicked in wrong state: {_currentState}");
|
||||
return;
|
||||
}
|
||||
|
||||
// Ensure the index is valid
|
||||
if (cardIndex < 0 || cardIndex >= _boosterCards.Count || cardIndex >= _cardBackButtons.Count)
|
||||
{
|
||||
Debug.LogError($"[BoosterOpeningPage] Invalid card index: {cardIndex}");
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the card data and card back
|
||||
CardData cardData = _boosterCards[cardIndex];
|
||||
Button cardBack = _cardBackButtons[cardIndex];
|
||||
|
||||
// Start the reveal animation for this specific card
|
||||
StartCoroutine(RevealCard(cardIndex, cardData, cardBack.gameObject));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reveals an individual card with animation
|
||||
/// </summary>
|
||||
private IEnumerator RevealCard(int cardIndex, CardData cardData, GameObject cardBack)
|
||||
{
|
||||
if (cardBack == null)
|
||||
yield break;
|
||||
|
||||
// Start flip animation
|
||||
Transform cardBackTransform = cardBack.transform;
|
||||
|
||||
// Step 1: Flip the card 90 degrees (showing the edge)
|
||||
Tween.LocalRotation(cardBackTransform, new Vector3(0, 90, 0), flipAnimationDuration * 0.5f, 0);
|
||||
|
||||
// Wait for half the flip duration
|
||||
yield return new WaitForSeconds(flipAnimationDuration * 0.5f);
|
||||
|
||||
// Step 2: Hide the card back and show the actual card
|
||||
cardBack.SetActive(false);
|
||||
|
||||
// Instantiate the card prefab at the same position
|
||||
if (cardPrefab != null)
|
||||
{
|
||||
// Instantiate the card in the same parent as the card back and at the same position
|
||||
GameObject cardObj = Instantiate(cardPrefab, cardBack.transform.parent);
|
||||
cardObj.transform.SetSiblingIndex(cardBackTransform.GetSiblingIndex()); // Keep the same order in hierarchy
|
||||
cardObj.transform.position = cardBackTransform.position; // Same world position
|
||||
|
||||
// Set initial rotation to continue the flip animation
|
||||
cardObj.transform.localRotation = Quaternion.Euler(0, 90, 0);
|
||||
|
||||
// Configure the card UI with the card data
|
||||
CardUIElement cardUI = cardObj.GetComponent<CardUIElement>();
|
||||
if (cardUI != null)
|
||||
{
|
||||
// Set up the card data
|
||||
cardUI.SetupCard(cardData);
|
||||
_revealedCards.Add(cardUI);
|
||||
|
||||
// Set initial scale to zero for animation
|
||||
cardObj.transform.localScale = Vector3.zero;
|
||||
|
||||
// Play reveal animation using Pixelplacement.Tween
|
||||
Tween.LocalScale(cardObj.transform, Vector3.one, 0.5f, 0f, Tween.EaseOutBack);
|
||||
|
||||
// Call card's show animation
|
||||
cardUI.OnShowAnimation();
|
||||
|
||||
// Wait for animation delay
|
||||
yield return new WaitForSeconds(cardRevealDelay);
|
||||
// Play special effects based on card rarity
|
||||
PlayRevealEffect(cardObj, cardData.Rarity);
|
||||
}
|
||||
}
|
||||
|
||||
// Update state and show continue button
|
||||
_currentState = OpeningState.CardsRevealed;
|
||||
if (continueButton != null)
|
||||
{
|
||||
continueButton.gameObject.SetActive(true);
|
||||
// Step 3: Finish the flip animation (from 90 degrees to 0)
|
||||
Tween.LocalRotation(cardObj.transform, Vector3.zero, flipAnimationDuration * 0.5f, 0);
|
||||
|
||||
// Increment counter of revealed cards
|
||||
_revealedCardCount++;
|
||||
|
||||
// Update state if all cards are revealed
|
||||
if (_revealedCardCount >= _boosterCards.Count)
|
||||
{
|
||||
_currentState = OpeningState.CardsRevealed;
|
||||
|
||||
// Show continue button after a short delay
|
||||
StartCoroutine(ShowContinueButton());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles click on the continue button after cards are revealed
|
||||
/// Plays reveal effect for a card based on its rarity
|
||||
/// </summary>
|
||||
private void PlayRevealEffect(GameObject cardObject, CardRarity rarity)
|
||||
{
|
||||
// Add visual effect based on rarity
|
||||
if (rarity >= CardRarity.Rare)
|
||||
{
|
||||
// For rare cards and above, add a particle effect
|
||||
var particleSystem = cardObject.GetComponentInChildren<ParticleSystem>();
|
||||
if (particleSystem != null)
|
||||
{
|
||||
particleSystem.Play();
|
||||
}
|
||||
|
||||
// Scale up and down for emphasis
|
||||
Transform cardTransform = cardObject.transform;
|
||||
Vector3 originalScale = cardTransform.localScale;
|
||||
|
||||
// Sequence: Scale up slightly, then back to normal
|
||||
Tween.LocalScale(cardTransform, originalScale * 1.2f, 0.2f, 0.1f, Tween.EaseOutBack);
|
||||
Tween.LocalScale(cardTransform, originalScale, 0.15f, 0.3f, Tween.EaseIn);
|
||||
|
||||
// Play sound effect based on rarity (if available)
|
||||
// This would require audio source components to be set up
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Shows the continue button after all cards are revealed
|
||||
/// </summary>
|
||||
private IEnumerator ShowContinueButton()
|
||||
{
|
||||
// Wait for a moment to let the user see all cards
|
||||
yield return new WaitForSeconds(1.0f);
|
||||
|
||||
if (continueButton != null)
|
||||
{
|
||||
// Show the continue button with a nice animation
|
||||
continueButton.gameObject.SetActive(true);
|
||||
continueButton.transform.localScale = Vector3.zero;
|
||||
|
||||
Tween.LocalScale(continueButton.transform, Vector3.one, 0.3f, 0f, Tween.EaseOutBack);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles click on the continue button
|
||||
/// </summary>
|
||||
private void OnContinueClicked()
|
||||
{
|
||||
if (_currentState != OpeningState.CardsRevealed) return;
|
||||
|
||||
// Start moving cards to backpack animation
|
||||
StartCoroutine(MoveCardsToBackpack());
|
||||
}
|
||||
_currentState = OpeningState.MovingToBackpack;
|
||||
|
||||
/// <summary>
|
||||
/// Animates cards moving to the backpack
|
||||
/// </summary>
|
||||
private IEnumerator MoveCardsToBackpack()
|
||||
{
|
||||
// Hide continue button
|
||||
if (continueButton != null)
|
||||
{
|
||||
continueButton.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
// Get corner position for backpack (bottom left)
|
||||
Vector3 cornerPosition = new Vector3(-Screen.width/2 + 50, -Screen.height/2 + 50, 0);
|
||||
|
||||
// Animate each card moving to the backpack
|
||||
foreach (var card in _revealedCards)
|
||||
// Hide back button during transition
|
||||
if (backButton != null)
|
||||
{
|
||||
// Play move to backpack animation using Pixelplacement.Tween
|
||||
Tween.Position(card.transform, cornerPosition, 0.5f, 0f, Tween.EaseInBack);
|
||||
Tween.LocalScale(card.transform, Vector3.zero, 0.5f, 0f, Tween.EaseInBack);
|
||||
|
||||
// Call card's move to backpack animation
|
||||
card.OnMoveToBackpackAnimation();
|
||||
|
||||
// Wait for animation delay
|
||||
yield return new WaitForSeconds(cardMoveToBackpackDelay);
|
||||
backButton.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
// Wait a moment before completing
|
||||
yield return new WaitForSeconds(0.3f);
|
||||
// Start animation to move cards to backpack
|
||||
_moveToBackpackCoroutine = StartCoroutine(MoveCardsToBackpack());
|
||||
}
|
||||
|
||||
// Complete the process and return to previous page
|
||||
/// <summary>
|
||||
/// Animates cards moving to the backpack icon
|
||||
/// </summary>
|
||||
private IEnumerator MoveCardsToBackpack()
|
||||
{
|
||||
// Find the backpack button GameObject
|
||||
GameObject backpackButton = null;
|
||||
Transform backpackTransform = null;
|
||||
|
||||
if (_cardAlbumUI != null && _cardAlbumUI.BackpackIcon != null)
|
||||
{
|
||||
// Get the backpack icon
|
||||
GameObject backpackIcon = _cardAlbumUI.BackpackIcon;
|
||||
backpackTransform = backpackIcon.transform;
|
||||
|
||||
// Find the parent button that controls visibility
|
||||
backpackButton = backpackIcon.transform.parent.gameObject;
|
||||
|
||||
// Make sure the backpack button is visible for the animation
|
||||
if (backpackButton != null)
|
||||
{
|
||||
backpackButton.SetActive(true);
|
||||
Debug.Log("[BoosterOpeningPage] Made backpack button visible for animation");
|
||||
}
|
||||
}
|
||||
|
||||
if (backpackTransform == null)
|
||||
{
|
||||
// If no backpack is found, just return to the menu
|
||||
UIPageController.Instance.PopPage();
|
||||
yield break;
|
||||
}
|
||||
|
||||
// Speed up the animation by reducing the delay
|
||||
float animationDuration = 0.3f; // Faster animation duration
|
||||
float cardDelay = 0.15f; // Even shorter delay between cards
|
||||
|
||||
// Move each card to the backpack with slight delay between cards
|
||||
for (int i = 0; i < _revealedCards.Count; i++)
|
||||
{
|
||||
CardUIElement card = _revealedCards[i];
|
||||
if (card != null)
|
||||
{
|
||||
// Get the world position of the backpack
|
||||
Vector3 backpackWorldPos = backpackTransform.position;
|
||||
|
||||
// Convert to local space of the card's parent for Tween
|
||||
Vector3 targetPos = card.transform.parent.InverseTransformPoint(backpackWorldPos);
|
||||
|
||||
// Start the move animation - ensure no cancellation between animations
|
||||
Tween.LocalPosition(card.transform, targetPos, animationDuration, cardDelay * i, Tween.EaseInOut);
|
||||
Tween.LocalScale(card.transform, Vector3.zero, animationDuration, cardDelay * i, Tween.EaseIn);
|
||||
|
||||
Debug.Log($"[BoosterOpeningPage] Starting animation for card {i}");
|
||||
}
|
||||
|
||||
// Only wait after starting each animation (don't wait after the last one)
|
||||
if (i < _revealedCards.Count - 1)
|
||||
{
|
||||
yield return new WaitForSeconds(cardDelay);
|
||||
}
|
||||
}
|
||||
|
||||
// Calculate total animation time and wait for it to complete
|
||||
float totalAnimationTime = cardDelay * (_revealedCards.Count - 1) + animationDuration;
|
||||
yield return new WaitForSeconds(totalAnimationTime + 0.1f); // Small buffer to ensure animations complete
|
||||
|
||||
// The backpack visibility will be handled by CardAlbumUI's OnPageChanged after popping this page
|
||||
// We don't need to explicitly hide it here as the system will handle it properly
|
||||
|
||||
// Update state
|
||||
_currentState = OpeningState.Completed;
|
||||
|
||||
// Return to the menu
|
||||
UIPageController.Instance.PopPage();
|
||||
}
|
||||
|
||||
@@ -238,15 +574,15 @@ namespace AppleHills.UI.CardSystem
|
||||
/// </summary>
|
||||
protected override void DoTransitionIn(System.Action onComplete)
|
||||
{
|
||||
// Scale in animation for the booster pack
|
||||
if (boosterPackObject != null)
|
||||
// Simple fade in animation
|
||||
if (canvasGroup != null)
|
||||
{
|
||||
boosterPackObject.transform.localScale = Vector3.zero;
|
||||
Tween.LocalScale(boosterPackObject.transform, Vector3.one, transitionDuration, 0f,
|
||||
Tween.EaseOutBack, Tween.LoopType.None, null, onComplete);
|
||||
canvasGroup.alpha = 0f;
|
||||
Tween.Value(0f, 1f, (value) => canvasGroup.alpha = value, transitionDuration, 0f, Tween.EaseInOut, Tween.LoopType.None, null, onComplete);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fallback if no CanvasGroup
|
||||
onComplete?.Invoke();
|
||||
}
|
||||
}
|
||||
@@ -256,17 +592,36 @@ namespace AppleHills.UI.CardSystem
|
||||
/// </summary>
|
||||
protected override void DoTransitionOut(System.Action onComplete)
|
||||
{
|
||||
// Fade out animation using a CanvasGroup if available
|
||||
CanvasGroup canvasGroup = GetComponent<CanvasGroup>();
|
||||
// Simple fade out animation
|
||||
if (canvasGroup != null)
|
||||
{
|
||||
Tween.Value(canvasGroup.alpha, 0f, (value) => canvasGroup.alpha = value,
|
||||
transitionDuration, 0f, Tween.EaseInOut, Tween.LoopType.None, null, onComplete);
|
||||
Tween.Value(canvasGroup.alpha, 0f, (value) => canvasGroup.alpha = value, transitionDuration, 0f, Tween.EaseInOut, Tween.LoopType.None, null, onComplete);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fallback if no CanvasGroup
|
||||
onComplete?.Invoke();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// OnEnable override to ensure proper initialization
|
||||
/// </summary>
|
||||
private void OnEnable()
|
||||
{
|
||||
if (_cardManager == null)
|
||||
{
|
||||
_cardManager = CardSystemManager.Instance;
|
||||
}
|
||||
|
||||
if (_cardAlbumUI == null)
|
||||
{
|
||||
_cardAlbumUI = FindObjectOfType<CardAlbumUI>();
|
||||
}
|
||||
|
||||
// Re-cache card backs in case they changed while disabled
|
||||
CacheCardBackButtons();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using AppleHills.Data.CardSystem;
|
||||
using Core;
|
||||
using Data.CardSystem;
|
||||
using Pixelplacement;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
@@ -21,11 +23,18 @@ namespace AppleHills.UI.CardSystem
|
||||
|
||||
[Header("UI Elements")]
|
||||
[SerializeField] private Button backpackButton;
|
||||
[SerializeField] private Text boosterCountText;
|
||||
[SerializeField] private BoosterNotificationDot boosterNotificationDot;
|
||||
|
||||
[Header("Notification Settings")]
|
||||
[SerializeField] private AudioSource notificationSound;
|
||||
|
||||
// Public property to access the backpack icon for animations
|
||||
public GameObject BackpackIcon => backpackIcon;
|
||||
|
||||
private UIPageController _pageController;
|
||||
private CardSystemManager _cardManager;
|
||||
private bool _isInitialized = false;
|
||||
private bool _hasUnseenCards = false;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
@@ -49,6 +58,10 @@ namespace AppleHills.UI.CardSystem
|
||||
|
||||
// Initially show only the backpack icon
|
||||
ShowOnlyBackpackIcon();
|
||||
|
||||
// Hide notification dot initially
|
||||
if (boosterNotificationDot != null)
|
||||
boosterNotificationDot.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
private void Start()
|
||||
@@ -60,6 +73,11 @@ namespace AppleHills.UI.CardSystem
|
||||
if (_cardManager != null)
|
||||
{
|
||||
_cardManager.OnBoosterCountChanged += UpdateBoosterCount;
|
||||
_cardManager.OnBoosterOpened += HandleBoosterOpened;
|
||||
_cardManager.OnCardCollected += HandleCardCollected;
|
||||
_cardManager.OnCardRarityUpgraded += HandleCardRarityUpgraded;
|
||||
|
||||
// Initialize UI with current values
|
||||
UpdateBoosterCount(_cardManager.GetBoosterPackCount());
|
||||
}
|
||||
|
||||
@@ -72,6 +90,9 @@ namespace AppleHills.UI.CardSystem
|
||||
if (_cardManager != null)
|
||||
{
|
||||
_cardManager.OnBoosterCountChanged -= UpdateBoosterCount;
|
||||
_cardManager.OnBoosterOpened -= HandleBoosterOpened;
|
||||
_cardManager.OnCardCollected -= HandleCardCollected;
|
||||
_cardManager.OnCardRarityUpgraded -= HandleCardRarityUpgraded;
|
||||
}
|
||||
|
||||
// Clean up button listeners
|
||||
@@ -79,6 +100,12 @@ namespace AppleHills.UI.CardSystem
|
||||
{
|
||||
backpackButton.onClick.RemoveListener(OnBackpackButtonClicked);
|
||||
}
|
||||
|
||||
// Unsubscribe from page controller events
|
||||
if (_pageController != null)
|
||||
{
|
||||
_pageController.OnPageChanged -= OnPageChanged;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -114,10 +141,26 @@ namespace AppleHills.UI.CardSystem
|
||||
/// </summary>
|
||||
private void OnBackpackButtonClicked()
|
||||
{
|
||||
// Play button sound if available
|
||||
if (notificationSound != null)
|
||||
notificationSound.Play();
|
||||
|
||||
// If no pages are open, push the main menu
|
||||
if (_pageController.CurrentPage == null)
|
||||
{
|
||||
_pageController.PushPage(mainMenuPage);
|
||||
|
||||
// Clear notification for unseen cards when opening menu
|
||||
if (_hasUnseenCards)
|
||||
{
|
||||
_hasUnseenCards = false;
|
||||
}
|
||||
|
||||
// Hide the backpack button when entering menu
|
||||
if (backpackButton != null)
|
||||
{
|
||||
backpackButton.gameObject.SetActive(false);
|
||||
}
|
||||
}
|
||||
else if (_pageController.CurrentPage == mainMenuPage)
|
||||
{
|
||||
@@ -138,7 +181,15 @@ namespace AppleHills.UI.CardSystem
|
||||
}
|
||||
else
|
||||
{
|
||||
backpackIcon.SetActive(false);
|
||||
if (backpackButton != null)
|
||||
backpackButton.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
// Update menu if it's the main menu page
|
||||
if (newPage == mainMenuPage && mainMenuPage is CardMenuPage menuPage)
|
||||
{
|
||||
// Force UI refresh when returning to main menu
|
||||
menuPage.RefreshUI();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -147,7 +198,19 @@ namespace AppleHills.UI.CardSystem
|
||||
/// </summary>
|
||||
private void ShowOnlyBackpackIcon()
|
||||
{
|
||||
backpackIcon.SetActive(true);
|
||||
if (backpackButton != null)
|
||||
{
|
||||
backpackButton.gameObject.SetActive(true);
|
||||
|
||||
// Update notification visibility based on booster count
|
||||
bool hasBooters = _cardManager != null && _cardManager.GetBoosterPackCount() > 0;
|
||||
|
||||
// Show notification dot if there are boosters or unseen cards
|
||||
if (boosterNotificationDot != null)
|
||||
{
|
||||
boosterNotificationDot.gameObject.SetActive(hasBooters || _hasUnseenCards);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -170,7 +233,6 @@ namespace AppleHills.UI.CardSystem
|
||||
else
|
||||
{
|
||||
Logging.Debug("[CardAlbumUI] No booster packs available");
|
||||
// TODO: Show "no boosters available" message
|
||||
}
|
||||
}
|
||||
|
||||
@@ -179,10 +241,65 @@ namespace AppleHills.UI.CardSystem
|
||||
/// </summary>
|
||||
private void UpdateBoosterCount(int count)
|
||||
{
|
||||
if (boosterCountText != null)
|
||||
if (boosterNotificationDot != null)
|
||||
{
|
||||
boosterCountText.text = count.ToString();
|
||||
boosterNotificationDot.SetCount(count);
|
||||
|
||||
// Animate the notification dot for feedback
|
||||
boosterNotificationDot.transform.localScale = Vector3.one * 1.2f;
|
||||
Tween.LocalScale(boosterNotificationDot.transform, Vector3.one, 0.3f, 0f);
|
||||
|
||||
// Update visibility based on count
|
||||
UpdateBoosterVisibility();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Updates the visibility of the booster notification dot based on current state
|
||||
/// </summary>
|
||||
private void UpdateBoosterVisibility()
|
||||
{
|
||||
if (boosterNotificationDot != null)
|
||||
{
|
||||
// Show dot if there are boosters or unseen cards
|
||||
bool hasBooters = _cardManager != null && _cardManager.GetBoosterPackCount() > 0;
|
||||
boosterNotificationDot.gameObject.SetActive(hasBooters || _hasUnseenCards);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles event when a booster pack is opened
|
||||
/// </summary>
|
||||
private void HandleBoosterOpened(System.Collections.Generic.List<CardData> cards)
|
||||
{
|
||||
Logging.Debug($"[CardAlbumUI] Booster opened with {cards.Count} cards");
|
||||
// The booster opening page handles the UI for this event
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles event when a new card is collected
|
||||
/// </summary>
|
||||
private void HandleCardCollected(CardData card)
|
||||
{
|
||||
// If we're not in the album view or booster opening view,
|
||||
// show a notification dot on the backpack
|
||||
if (_pageController.CurrentPage != albumViewPage &&
|
||||
_pageController.CurrentPage != boosterOpeningPage)
|
||||
{
|
||||
_hasUnseenCards = true;
|
||||
UpdateBoosterVisibility();
|
||||
}
|
||||
|
||||
Logging.Debug($"[CardAlbumUI] New card collected: {card.Name}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles event when a card is upgraded to a higher rarity
|
||||
/// </summary>
|
||||
private void HandleCardRarityUpgraded(CardData card)
|
||||
{
|
||||
// Just log the upgrade event without showing a notification
|
||||
Logging.Debug($"[CardAlbumUI] Card upgraded: {card.Name} to {card.Rarity}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ using AppleHills.Data.CardSystem;
|
||||
using Core;
|
||||
using Data.CardSystem;
|
||||
using Pixelplacement;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
@@ -18,10 +19,10 @@ namespace AppleHills.UI.CardSystem
|
||||
[SerializeField] private Button openBoosterButton;
|
||||
[SerializeField] private Button viewAlbumButton;
|
||||
[SerializeField] private Button changeClothesButton;
|
||||
[SerializeField] private Button backButton; // Added back button field
|
||||
|
||||
[Header("UI Elements")]
|
||||
[SerializeField] private Text boosterCountText;
|
||||
[SerializeField] private GameObject noBoostersMessage;
|
||||
[SerializeField] private BoosterNotificationDot boosterNotificationDot; // Changed to BoosterNotificationDot
|
||||
[SerializeField] private CanvasGroup canvasGroup;
|
||||
|
||||
private CardAlbumUI _cardAlbumUI;
|
||||
@@ -56,6 +57,11 @@ namespace AppleHills.UI.CardSystem
|
||||
// Disable "Coming Soon" feature
|
||||
changeClothesButton.interactable = false;
|
||||
}
|
||||
|
||||
if (backButton != null) // Set up back button listener
|
||||
{
|
||||
backButton.onClick.AddListener(OnBackButtonClicked);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
@@ -80,6 +86,19 @@ namespace AppleHills.UI.CardSystem
|
||||
{
|
||||
changeClothesButton.onClick.RemoveListener(OnChangeClothesClicked);
|
||||
}
|
||||
|
||||
if (backButton != null) // Clean up back button listener
|
||||
{
|
||||
backButton.onClick.RemoveListener(OnBackButtonClicked);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Public method to refresh UI state when returning to this page
|
||||
/// </summary>
|
||||
public void RefreshUI()
|
||||
{
|
||||
UpdateUI();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -91,10 +110,10 @@ namespace AppleHills.UI.CardSystem
|
||||
|
||||
int boosterCount = _cardManager.GetBoosterPackCount();
|
||||
|
||||
// Update booster count text
|
||||
if (boosterCountText != null)
|
||||
// Update booster count text using the notification dot
|
||||
if (boosterNotificationDot != null)
|
||||
{
|
||||
boosterCountText.text = $"Boosters: {boosterCount}";
|
||||
boosterNotificationDot.SetCount(boosterCount);
|
||||
}
|
||||
|
||||
// Enable/disable open booster button based on availability
|
||||
@@ -102,12 +121,6 @@ namespace AppleHills.UI.CardSystem
|
||||
{
|
||||
openBoosterButton.interactable = boosterCount > 0;
|
||||
}
|
||||
|
||||
// Show/hide no boosters message
|
||||
if (noBoostersMessage != null)
|
||||
{
|
||||
noBoostersMessage.SetActive(boosterCount <= 0);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -141,6 +154,20 @@ namespace AppleHills.UI.CardSystem
|
||||
// No implementation yet - "Coming soon" feature
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles click on the Back button
|
||||
/// </summary>
|
||||
private void OnBackButtonClicked()
|
||||
{
|
||||
// Use the UIPageController to pop this page
|
||||
// This will hide the card menu and return to the game
|
||||
if (UIPageController.Instance != null)
|
||||
{
|
||||
UIPageController.Instance.PopPage();
|
||||
Logging.Debug("[CardMenuPage] Exiting card menu back to game");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Override for transition in animation using Pixelplacement.Tween
|
||||
/// </summary>
|
||||
|
||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||
using Bootstrap;
|
||||
using Core;
|
||||
using UnityEngine;
|
||||
using UnityEngine.InputSystem;
|
||||
|
||||
namespace AppleHills.UI.CardSystem
|
||||
{
|
||||
@@ -21,6 +22,9 @@ namespace AppleHills.UI.CardSystem
|
||||
// Event fired when the page stack changes
|
||||
public event Action<UIPage> OnPageChanged;
|
||||
|
||||
private PlayerInput _playerInput;
|
||||
private InputAction _cancelAction;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (_instance != null && _instance != this)
|
||||
@@ -31,10 +35,47 @@ namespace AppleHills.UI.CardSystem
|
||||
|
||||
_instance = this;
|
||||
|
||||
// TODO: Handle generic "cancel" action
|
||||
// _playerInput = FindFirstObjectByType<PlayerInput>();
|
||||
// if (_playerInput == null)
|
||||
// {
|
||||
// Logging.Warning("[UIPageController] No PlayerInput found in the scene. Cancel action might not work.");
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// // Get the Cancel action from the UI action map
|
||||
// _cancelAction = _playerInput.actions.FindAction("UI/Cancel");
|
||||
// if (_cancelAction != null)
|
||||
// {
|
||||
// _cancelAction.performed += OnCancelActionPerformed;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Logging.Warning("[UIPageController] Cancel action not found in the input actions asset.");
|
||||
// }
|
||||
// }
|
||||
|
||||
// Register for post-boot initialization
|
||||
BootCompletionService.RegisterInitAction(InitializePostBoot);
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
// Clean up event subscription when the controller is destroyed
|
||||
if (_cancelAction != null)
|
||||
{
|
||||
_cancelAction.performed -= OnCancelActionPerformed;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnCancelActionPerformed(InputAction.CallbackContext context)
|
||||
{
|
||||
if (_pageStack.Count > 0)
|
||||
{
|
||||
_pageStack.Peek().OnBackPressed();
|
||||
}
|
||||
}
|
||||
|
||||
private void InitializePostBoot()
|
||||
{
|
||||
// Initialize any dependencies that require other services to be ready
|
||||
@@ -105,16 +146,5 @@ namespace AppleHills.UI.CardSystem
|
||||
OnPageChanged?.Invoke(null);
|
||||
Logging.Debug("[UIPageController] Cleared page stack");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles back button input and navigates to the previous page if possible.
|
||||
/// </summary>
|
||||
private void Update()
|
||||
{
|
||||
if (UnityEngine.Input.GetKeyDown(KeyCode.Escape) && _pageStack.Count > 0)
|
||||
{
|
||||
_pageStack.Peek().OnBackPressed();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,132 +0,0 @@
|
||||
# Card System Implementation Plan
|
||||
|
||||
## Current Implementation Analysis
|
||||
|
||||
### Data Layer
|
||||
|
||||
1. **CardData.cs**:
|
||||
- Represents an instance of a card in the player's collection
|
||||
- Contains unique ID, rarity, and copies owned
|
||||
- Has a reference to its CardDefinition for display information
|
||||
- Includes methods for rarity upgrades when collecting duplicates
|
||||
- Well-structured with proper serialization support
|
||||
|
||||
2. **CardDefinition.cs**:
|
||||
- ScriptableObject template for creating card instances
|
||||
- Contains basic info (name, description), visuals, and collection data
|
||||
- Provides helper methods like CreateCardData() and GetBackgroundColor()
|
||||
- Supports different zones (AppleHills, Quarry, Forest, Mountain, Beach)
|
||||
|
||||
3. **CardSystemManager.cs**:
|
||||
- Singleton manager for the card system
|
||||
- Manages available card definitions and player inventory
|
||||
- Includes event callbacks for booster packs and card collection
|
||||
- Has partial implementation for adding booster packs
|
||||
- Has a simple CardInventory class stub
|
||||
|
||||
4. **CardVisualConfig.cs**:
|
||||
- ScriptableObject for configuring the visual appearance of cards
|
||||
- Maps rarities to colors and zones to colors/shapes
|
||||
- Uses dictionary lookups for efficient access
|
||||
|
||||
### UI Layer
|
||||
|
||||
1. **CardUIElement.cs**:
|
||||
- Handles displaying a single card in the UI
|
||||
- Updates visuals based on card data (rarity, zone)
|
||||
- References UI elements like card name text, images, frames, etc.
|
||||
|
||||
2. **UIPageController.cs**:
|
||||
- Manages UI page transitions with a stack-based navigation system
|
||||
- Provides methods for pushing, popping, and clearing the page stack
|
||||
- Uses events to notify when pages change
|
||||
|
||||
3. **UI Page Components**:
|
||||
- Several page-related files (AlbumViewPage.cs, BoosterOpeningPage.cs, CardMenuPage.cs)
|
||||
- CardAlbumUI.cs file for handling the album display
|
||||
- Base UIPage.cs class for common page functionality
|
||||
|
||||
## What's Missing
|
||||
|
||||
Based on the requirements, here's what still needs to be implemented:
|
||||
|
||||
1. **Complete CardInventory Implementation**:
|
||||
- Move from simple stub to full implementation
|
||||
- Add methods to manage the player's card collection
|
||||
- Implement filtering, sorting, and organization features
|
||||
|
||||
2. **Booster Pack Generation**:
|
||||
- Complete the logic to generate random booster packs with appropriate rarity distribution
|
||||
- Implement methods for awarding booster packs to the player
|
||||
- Add events for notifying UI when booster packs are obtained
|
||||
|
||||
3. **Card Collection UI**:
|
||||
- Complete the album browsing UI with filtering and sorting options
|
||||
- Implement visual indicators for owned/not owned cards
|
||||
- Add UI for tracking collection completion
|
||||
|
||||
4. **Booster Pack Opening UI**:
|
||||
- Implement the UI flow for opening booster packs
|
||||
- Add card reveal animations and effects
|
||||
- Create UI feedback for rare card discoveries
|
||||
|
||||
5. **Save/Load System**:
|
||||
- Implement persistence for the player's card collection
|
||||
- Add autosave functionality for cards and booster packs
|
||||
|
||||
## Implementation Plan
|
||||
|
||||
### Step 1: Complete the Data Layer
|
||||
|
||||
1. **Implement CardInventory.cs**:
|
||||
- Create a dedicated class file (replacing the stub in CardSystemManager)
|
||||
- Add methods for adding/removing cards, checking duplicates
|
||||
- Implement filtering by zone, rarity, etc.
|
||||
- Add collection statistics methods
|
||||
|
||||
2. **Complete CardSystemManager.cs**:
|
||||
- Update references to use the new CardInventory class
|
||||
- Add methods for save/load integration
|
||||
- Implement additional helper methods for card management
|
||||
|
||||
### Step 2: Implement UI Flow
|
||||
|
||||
1. **Complete UIPage Implementations**:
|
||||
- Implement CardMenuPage.cs as the main card system entry point
|
||||
- Complete AlbumViewPage.cs for browsing the collection
|
||||
- Implement BoosterOpeningPage.cs for the pack opening experience
|
||||
|
||||
2. **Card Collection Browsing**:
|
||||
- Complete CardAlbumUI.cs to display the player's collection
|
||||
- Add filtering by zone, rarity, etc.
|
||||
- Implement pagination for large collections
|
||||
|
||||
3. **Booster Pack UI**:
|
||||
- Create UI for displaying and opening booster packs
|
||||
- Implement card reveal animations and transitions
|
||||
- Add sound effects and visual feedback
|
||||
|
||||
### Step 3: Integration and Polishing
|
||||
|
||||
1. **Connect UI to Data Layer**:
|
||||
- Hook up UI components to CardSystemManager events
|
||||
- Ensure data flows correctly between UI and data layers
|
||||
|
||||
2. **Test and Balance**:
|
||||
- Test rarity distribution in booster packs
|
||||
- Balance the upgrade system for duplicates
|
||||
|
||||
3. **Performance Optimization**:
|
||||
- Implement object pooling for card UI elements
|
||||
- Optimize loading of card data and sprites
|
||||
|
||||
### Step 4: Additional Features (Optional)
|
||||
|
||||
1. **Card Trading System**:
|
||||
- Allow players to trade cards with NPCs or other players
|
||||
|
||||
2. **Special Collection Bonuses**:
|
||||
- Rewards for completing sets of cards
|
||||
|
||||
3. **Card Usage Mechanics**:
|
||||
- Ways to use cards in gameplay beyond collection
|
||||
114
docs/card_system_implementation_plan_updated.md
Normal file
114
docs/card_system_implementation_plan_updated.md
Normal file
@@ -0,0 +1,114 @@
|
||||
# Card System Implementation Plan
|
||||
|
||||
## Current Implementation Analysis
|
||||
|
||||
### Data Layer
|
||||
|
||||
1. **CardData.cs**:
|
||||
- Represents an instance of a card in the player's collection
|
||||
- Contains unique ID, rarity, and copies owned
|
||||
- Has a reference to its CardDefinition for display information
|
||||
- Includes methods for rarity upgrades when collecting duplicates
|
||||
- Well-structured with proper serialization support
|
||||
|
||||
2. **CardDefinition.cs**:
|
||||
- ScriptableObject template for creating card instances
|
||||
- Contains basic info (name, description), visuals, and collection data
|
||||
- Provides helper methods like CreateCardData() and GetBackgroundColor()
|
||||
- Supports different zones (AppleHills, Quarry, Forest, Mountain, Beach)
|
||||
|
||||
3. **CardSystemManager.cs**:
|
||||
- Singleton manager for the card system
|
||||
- Manages available card definitions and player inventory
|
||||
- Includes event callbacks for booster packs and card collection
|
||||
- Implements functionality for adding and opening booster packs
|
||||
|
||||
4. **CardInventory.cs**:
|
||||
- Fully implemented management of the player's card collection
|
||||
- Includes methods for adding cards and tracking booster packs
|
||||
- Provides filtering methods for different card types
|
||||
- Supports card lookup by various properties (zone, rarity)
|
||||
|
||||
5. **CardVisualConfig.cs**:
|
||||
- ScriptableObject for configuring the visual appearance of cards
|
||||
- Maps rarities to colors and zones to colors/shapes
|
||||
- Uses dictionary lookups for efficient access
|
||||
|
||||
### UI Layer
|
||||
|
||||
1. **CardUIElement.cs**:
|
||||
- Handles displaying a single card in the UI
|
||||
- Updates visuals based on card data (rarity, zone)
|
||||
- References UI elements like card name text, images, frames, etc.
|
||||
|
||||
2. **UIPageController.cs**:
|
||||
- Manages UI page transitions with a stack-based navigation system
|
||||
- Provides methods for pushing, popping, and clearing the page stack
|
||||
- Uses events to notify when pages change
|
||||
|
||||
3. **UI Page Components**:
|
||||
- **CardMenuPage.cs**: Main menu for card system navigation
|
||||
- **AlbumViewPage.cs**: Simplified implementation that shows filtered cards in grid
|
||||
- **BoosterOpeningPage.cs**: Interactive card reveal experience
|
||||
- **CardAlbumUI.cs**: Main controller for the card system UI
|
||||
- **UIPage.cs**: Base class for common page functionality
|
||||
|
||||
## Implementation Status
|
||||
|
||||
### Completed
|
||||
1. **Complete CardInventory Implementation**:
|
||||
- Full implementation with methods to manage the player's card collection
|
||||
- Filtering, sorting, and organization features
|
||||
- Integration with CardSystemManager
|
||||
|
||||
2. **Booster Pack Generation**:
|
||||
- Logic to generate random booster packs with appropriate rarity distribution
|
||||
- Methods for awarding booster packs to the player
|
||||
- Events for notifying UI when booster packs are obtained
|
||||
|
||||
3. **Card Collection UI**:
|
||||
- Simplified album browsing UI with filtering and sorting options
|
||||
- Removed unnecessary card stack and slot system
|
||||
- Updated AlbumViewPage to use TextMeshPro components
|
||||
|
||||
4. **Booster Pack Opening UI (In Progress)**:
|
||||
- Implemented interactive card reveal system
|
||||
- Added card back prefabs for clickable reveal experience
|
||||
- Created flip animations and particle effects for card reveals
|
||||
- Updated to support revealing three cards individually
|
||||
|
||||
### Still Needed
|
||||
1. **Booster Opening UI Refinement**:
|
||||
- Fine-tune animation timings and transitions
|
||||
- Implement custom card back designs
|
||||
- Add more visual/audio feedback for different rarities
|
||||
|
||||
2. **Save/Load System**:
|
||||
- Implement persistence for the player's card collection
|
||||
- Add autosave functionality for cards and booster packs
|
||||
|
||||
3. **Card Collection Statistics**:
|
||||
- Add UI for tracking collection completion
|
||||
- Implement achievements for collecting sets
|
||||
|
||||
## Next Steps
|
||||
|
||||
### 1. Complete the Booster Opening Experience
|
||||
- Create proper card back prefab with appropriate design
|
||||
- Test and refine the card reveal animations
|
||||
- Ensure particle effects and sounds play correctly
|
||||
|
||||
### 2. Add Save/Load System
|
||||
- Implement JSON serialization for CardInventory
|
||||
- Add autosave triggers after obtaining new cards
|
||||
- Create save/load methods in CardSystemManager
|
||||
|
||||
### 3. Polish the Overall Experience
|
||||
- Add transition animations between pages
|
||||
- Improve visual feedback for obtaining new cards
|
||||
- Implement collection statistics display
|
||||
|
||||
### 4. Additional Features (Optional)
|
||||
- Special collection bonuses for completing sets
|
||||
- Card trading system with NPCs
|
||||
- Card usage mechanics beyond collection
|
||||
159
docs/card_system_integration_and_testing.md
Normal file
159
docs/card_system_integration_and_testing.md
Normal file
@@ -0,0 +1,159 @@
|
||||
# Card System Integration and Testing Guide
|
||||
|
||||
## Overview
|
||||
|
||||
This document outlines the integration between the data and UI layers of the Apple Hills card collection system, as well as the testing tools available for development purposes.
|
||||
|
||||
## Architecture Summary
|
||||
|
||||
The card system follows a clean separation of concerns:
|
||||
|
||||
1. **Data Layer** (Assets/Scripts/Data/CardSystem/)
|
||||
- `CardSystemManager`: Singleton for managing card data, booster packs, and collection
|
||||
- `CardInventory`: Player's collection of cards and booster packs
|
||||
- `CardData`: Runtime instance of a collected card
|
||||
- `CardDefinition`: ScriptableObject template defining card properties
|
||||
- `CardVisualConfig`: Visual settings for cards based on rarity/zone
|
||||
|
||||
2. **UI Layer** (Assets/Scripts/UI/CardSystem/)
|
||||
- `CardAlbumUI`: Main controller for the card UI system
|
||||
- `UIPageController`: Stack-based navigation system
|
||||
- `UIPage`: Base class for UI pages with transition animations
|
||||
- Page Components:
|
||||
- `CardMenuPage`: Main menu for the card system
|
||||
- `AlbumViewPage`: Grid display of collected cards with filtering
|
||||
- `BoosterOpeningPage`: Interactive card reveal experience
|
||||
- `CardUIElement`: Individual card visual representation
|
||||
- `BoosterNotificationDot`: UI element showing booster pack counts
|
||||
|
||||
## Integration Points
|
||||
|
||||
### Initialization Process
|
||||
|
||||
1. `CardSystemManager` initializes during the bootstrap process using `BootCompletionService`
|
||||
2. UI components register with `BootCompletionService.RegisterInitAction()` for post-boot initialization
|
||||
3. UI components access card data through `CardSystemManager.Instance`
|
||||
|
||||
### Data Flow
|
||||
|
||||
1. **Card Collection**:
|
||||
- `CardSystemManager` manages the player's `CardInventory`
|
||||
- Cards are added via `AddCardToInventory()`
|
||||
- Card collection triggers `OnCardCollected` event
|
||||
|
||||
2. **Booster Packs**:
|
||||
- Added via `CardSystemManager.AddBoosterPack()`
|
||||
- Opened via `CardSystemManager.OpenBoosterPack()`
|
||||
- Booster count changes trigger `OnBoosterCountChanged` event
|
||||
- Opening boosters triggers `OnBoosterOpened` event
|
||||
|
||||
3. **Card Display**:
|
||||
- `CardUIElement` displays a card using `SetupCard(cardData)`
|
||||
- `AlbumViewPage` displays cards in a grid with filtering options
|
||||
- `BoosterOpeningPage` handles interactive card reveals
|
||||
|
||||
### Event System
|
||||
|
||||
Key events that connect data and UI layers:
|
||||
|
||||
- `OnBoosterCountChanged`: Triggered when booster count changes
|
||||
- `OnBoosterOpened`: Triggered when a booster is opened
|
||||
- `OnCardCollected`: Triggered when a new card is added to collection
|
||||
- `OnCardRarityUpgraded`: Triggered when duplicates upgrade a card's rarity
|
||||
|
||||
## Testing Tool: CardSystemTester
|
||||
|
||||
The `CardSystemTester` provides a simple interface for testing the card system without requiring full game integration.
|
||||
|
||||
### Features
|
||||
|
||||
- Adding booster packs
|
||||
- Opening the card menu
|
||||
- Opening booster packs
|
||||
- Browsing the album view
|
||||
- Generating random test cards
|
||||
- Clearing the card collection
|
||||
|
||||
### Usage
|
||||
|
||||
1. Add `CardSystemTester` component to a GameObject in your test scene
|
||||
2. Reference the `CardAlbumUI` component
|
||||
3. Enter Play mode and use the inspector buttons
|
||||
4. All buttons are disabled in edit mode
|
||||
|
||||
### Implementation Notes
|
||||
|
||||
```csharp
|
||||
public class CardSystemTester : MonoBehaviour
|
||||
{
|
||||
// Only need reference to CardAlbumUI, the CardSystemManager is accessed via singleton
|
||||
[SerializeField] private CardAlbumUI cardAlbumUI;
|
||||
|
||||
// Other variables for test configuration
|
||||
[SerializeField] [Range(1, 10)] private int boosterPacksToAdd = 3;
|
||||
[SerializeField] [Range(1, 100)] private int cardsToGenerate = 10;
|
||||
|
||||
// All operations use CardSystemManager.Instance
|
||||
public void AddBoosterPacks() {
|
||||
CardSystemManager.Instance.AddBoosterPack(boosterPacksToAdd);
|
||||
// Other operations...
|
||||
}
|
||||
|
||||
// Uses CardAlbumUI to simulate UI interactions
|
||||
public void SimulateBackpackClick() {
|
||||
// Trigger the backpack button's onClick event
|
||||
}
|
||||
|
||||
// Additional test methods...
|
||||
}
|
||||
```
|
||||
|
||||
### Test Scene Setup
|
||||
|
||||
1. Create a new scene or use an existing test scene
|
||||
2. Add a Canvas with proper UI configuration
|
||||
3. Add the CardSystem prefab (containing CardAlbumUI)
|
||||
4. Add the CardSystemTester component
|
||||
5. Make sure you have card definitions configured
|
||||
|
||||
## Current Implementation Status
|
||||
|
||||
1. **Complete**:
|
||||
- Core data management through `CardSystemManager`
|
||||
- Card collection and inventory management
|
||||
- Basic UI navigation system
|
||||
- Booster pack opening flow
|
||||
- Album view with filtering
|
||||
|
||||
2. **Added API Methods**:
|
||||
- `GetAllCardDefinitions()`: Returns list of all card definitions
|
||||
- `GetCardInventory()`: Returns reference to player's card inventory
|
||||
- `ClearAllCards()`: Resets the player's collection
|
||||
- Various utility methods for filtering and statistics
|
||||
|
||||
3. **UI Improvements**:
|
||||
- Simplified card display in album view
|
||||
- Properly integrated card reveal animations
|
||||
- Back button functionality for all pages
|
||||
|
||||
## Known Issues and Considerations
|
||||
|
||||
1. **Performance**: Large collections may require optimization
|
||||
2. **Save System**: Currently not implemented, needs integration with game save system
|
||||
3. **Card Definition Loading**: Ensure card definitions are loaded before use
|
||||
4. **Testing Workflow**: Test specific state scenarios using the CardSystemTester
|
||||
5. **Animation Timing**: May need adjustment for smoother experience
|
||||
|
||||
## Next Steps
|
||||
|
||||
1. Implement save/load system for card collection
|
||||
2. Add collection statistics display
|
||||
3. Implement rarity-specific effects for card reveals
|
||||
4. Create more comprehensive test coverage
|
||||
|
||||
## Technical References
|
||||
|
||||
- Bootstrap system: Use `BootCompletionService.RegisterInitAction(InitializePostBoot)` for initialization
|
||||
- Data access: Always use `CardSystemManager.Instance` for data access
|
||||
- Page navigation: Use `UIPageController.Instance.PushPage()` and `PopPage()`
|
||||
- Card UI: Use `CardUIElement.SetupCard()` to configure card display
|
||||
309
docs/card_system_ui_setup_guide_updated.md
Normal file
309
docs/card_system_ui_setup_guide_updated.md
Normal file
@@ -0,0 +1,309 @@
|
||||
# Card System UI Setup Guide
|
||||
|
||||
This guide provides detailed instructions for setting up the Card System UI in Unity, organized into prefabs that can be easily maintained and modified.
|
||||
|
||||
## Prefab Structure Overview
|
||||
|
||||
The card system UI should be structured with a modular prefab approach:
|
||||
|
||||
1. **Main Card System Prefab** - Contains the CardAlbumUI component and core structure
|
||||
2. **Individual UI Page Prefabs** - Each page as its own prefab
|
||||
3. **Card UI Prefab** - For card display and interaction
|
||||
|
||||
## Detailed Prefab Structure
|
||||
|
||||
### Main CardSystem Prefab
|
||||
|
||||
```
|
||||
CardSystem (with CardAlbumUI component)
|
||||
├── BackpackIcon (GameObject)
|
||||
│ ├── BackpackImage (Image)
|
||||
│ ├── BoosterCountText (TextMeshProUGUI)
|
||||
│ └── NotificationDot (GameObject with Image)
|
||||
├── UIPageController (automatically added by CardAlbumUI if not present)
|
||||
└── Notifications (GameObject)
|
||||
└── NewCardNotification (GameObject)
|
||||
├── Background (Image)
|
||||
└── Text (TextMeshProUGUI)
|
||||
```
|
||||
|
||||
### Page Prefabs
|
||||
|
||||
**1. MainMenuPage Prefab:**
|
||||
```
|
||||
MainMenuPage (with CardMenuPage component & CanvasGroup)
|
||||
├── Background (Image)
|
||||
├── Title (TextMeshProUGUI)
|
||||
├── OpenBoosterButton (Button)
|
||||
│ └── Text (TextMeshProUGUI)
|
||||
├── ViewAlbumButton (Button)
|
||||
│ └── Text (TextMeshProUGUI)
|
||||
├── ChangeClothesButton (Button)
|
||||
│ └── Text (TextMeshProUGUI)
|
||||
└── NoBoostersMessage (GameObject)
|
||||
└── Text (TextMeshProUGUI)
|
||||
```
|
||||
|
||||
**2. AlbumViewPage Prefab:**
|
||||
```
|
||||
AlbumViewPage (with AlbumViewPage component & CanvasGroup)
|
||||
├── Background (Image)
|
||||
├── FilterPanel (GameObject)
|
||||
│ ├── ZoneFilterDropdown (TMP_Dropdown)
|
||||
│ │ ├── Label (TextMeshProUGUI)
|
||||
│ │ └── Arrow (Image)
|
||||
│ ├── RarityFilterDropdown (TMP_Dropdown)
|
||||
│ │ ├── Label (TextMeshProUGUI)
|
||||
│ │ └── Arrow (Image)
|
||||
│ └── ResetFiltersButton (Button)
|
||||
│ └── Text (TextMeshProUGUI)
|
||||
├── AlbumScrollView (ScrollRect)
|
||||
│ └── AlbumGrid (GridLayoutGroup)
|
||||
```
|
||||
|
||||
**3. BoosterOpeningPage Prefab:**
|
||||
```
|
||||
BoosterOpeningPage (with BoosterOpeningPage component & CanvasGroup)
|
||||
├── Background (Image)
|
||||
├── BoosterPackObject (GameObject)
|
||||
│ └── BoosterImage (Image)
|
||||
├── CardRevealContainer (RectTransform)
|
||||
│ ├── CardRevealPosition1 (Transform)
|
||||
│ ├── CardRevealPosition2 (Transform)
|
||||
│ └── CardRevealPosition3 (Transform)
|
||||
├── OpenBoosterButton (Button)
|
||||
│ └── Text (TextMeshProUGUI)
|
||||
├── ContinueButton (Button)
|
||||
│ └── Text (TextMeshProUGUI)
|
||||
├── CardRevealSound (AudioSource)
|
||||
├── RareCardSound (AudioSource)
|
||||
├── CardRevealParticles (ParticleSystem)
|
||||
└── RareCardParticles (ParticleSystem)
|
||||
```
|
||||
|
||||
### Card-Related Prefabs
|
||||
|
||||
**1. CardPrefab:**
|
||||
```
|
||||
Card (with CardUIElement component & Button)
|
||||
├── CardBackground (Image)
|
||||
├── CardFrame (Image)
|
||||
├── CardImage (Image)
|
||||
├── CardNameText (TextMeshProUGUI)
|
||||
├── CardDescriptionText (TextMeshProUGUI)
|
||||
├── ZoneLabel (TextMeshProUGUI)
|
||||
└── RarityIndicator (Image)
|
||||
```
|
||||
|
||||
**2. CardBackPrefab:**
|
||||
```
|
||||
CardBack (with Button component)
|
||||
├── CardBackImage (Image)
|
||||
└── BackDesign (Image)
|
||||
```
|
||||
|
||||
## Component Setup Guide
|
||||
|
||||
### CardAlbumUI Component Setup
|
||||
|
||||
This is the central controller for the card system:
|
||||
|
||||
```
|
||||
CardAlbumUI Component Inspector:
|
||||
- UI References:
|
||||
- Backpack Icon: [BackpackIcon GameObject]
|
||||
- Main Menu Page: [MainMenuPage Prefab]
|
||||
- Album View Page: [AlbumViewPage Prefab]
|
||||
- Booster Opening Page: [BoosterOpeningPage Prefab]
|
||||
- UI Elements:
|
||||
- Backpack Button: [BackpackIcon Button Component]
|
||||
- Booster Count Text: [BoosterCountText Component]
|
||||
- Notification Dot: [NotificationDot GameObject]
|
||||
- Backpack Animation Target: [BackpackIcon Transform]
|
||||
- New Card Notification: [NewCardNotification GameObject]
|
||||
- Notification Settings:
|
||||
- Notification Duration: 3 seconds (adjustable)
|
||||
- Notification Sound: [AudioSource Component]
|
||||
```
|
||||
|
||||
### CardMenuPage Component Setup
|
||||
|
||||
```
|
||||
CardMenuPage Component Inspector:
|
||||
- Menu Options:
|
||||
- Open Booster Button: [OpenBoosterButton]
|
||||
- View Album Button: [ViewAlbumButton]
|
||||
- Change Clothes Button: [ChangeClothesButton]
|
||||
- UI Elements:
|
||||
- Booster Count Text: [BoosterCountText]
|
||||
- No Boosters Message: [NoBoostersMessage]
|
||||
- Canvas Group: [CanvasGroup on this GameObject]
|
||||
```
|
||||
|
||||
### AlbumViewPage Component Setup
|
||||
|
||||
```
|
||||
AlbumViewPage Component Inspector:
|
||||
- Album UI Elements:
|
||||
- Album Grid: [AlbumGrid Component]
|
||||
- Card Prefab: [CardPrefab Asset]
|
||||
- Filter UI:
|
||||
- Zone Filter Dropdown: [ZoneFilterDropdown]
|
||||
- Rarity Filter Dropdown: [RarityFilterDropdown]
|
||||
- Reset Filters Button: [ResetFiltersButton]
|
||||
- Canvas Group: [CanvasGroup on this GameObject]
|
||||
```
|
||||
|
||||
### BoosterOpeningPage Component Setup
|
||||
|
||||
```
|
||||
BoosterOpeningPage Component Inspector:
|
||||
- UI Elements:
|
||||
- Booster Pack Object: [BoosterPackObject]
|
||||
- Card Reveal Container: [CardRevealContainer]
|
||||
- Card Reveal Positions: [Array of 3 Transform positions]
|
||||
- Card Prefab: [CardPrefab Asset]
|
||||
- Card Back Prefab: [CardBackPrefab Asset]
|
||||
- Open Booster Button: [OpenBoosterButton]
|
||||
- Continue Button: [ContinueButton]
|
||||
- Canvas Group: [CanvasGroup on this GameObject]
|
||||
- Open Booster Text: [TextMeshProUGUI]
|
||||
- Continue Text: [TextMeshProUGUI]
|
||||
- Animation Settings:
|
||||
- Card Reveal Delay: 0.3 (adjustable)
|
||||
- Card Move To Backpack Delay: 0.8 (adjustable)
|
||||
- Flip Animation Duration: 0.5 (adjustable)
|
||||
- Backpack Target Transform: [BackpackIcon Transform]
|
||||
- Card Reveal Sound: [CardRevealSound Component]
|
||||
- Rare Card Sound: [RareCardSound Component]
|
||||
- Card Reveal Particles: [CardRevealParticles Component]
|
||||
- Rare Card Particles: [RareCardParticles Component]
|
||||
```
|
||||
|
||||
### CardUIElement Component Setup
|
||||
|
||||
```
|
||||
CardUIElement Component Inspector:
|
||||
- Card UI Elements:
|
||||
- Card Background Image: [CardBackground Image]
|
||||
- Card Frame Image: [CardFrame Image]
|
||||
- Card Image: [CardImage]
|
||||
- Card Name Text: [CardNameText]
|
||||
- Card Description Text: [CardDescriptionText]
|
||||
- Zone Label: [ZoneLabel Text]
|
||||
- Rarity Label: [RarityIndicator Image]
|
||||
```
|
||||
|
||||
## Prefab Creation Process
|
||||
|
||||
### 1. Create Card-Related Prefabs First
|
||||
|
||||
Start by creating the card prefabs since other prefabs will reference them:
|
||||
|
||||
1. **Create CardPrefab**:
|
||||
- Create GameObject → UI → Image (for background)
|
||||
- Add child Images for frame and card art
|
||||
- Add TextMeshPro components for name, description, zone
|
||||
- Add CardUIElement script
|
||||
- Configure Inspector references
|
||||
- Add Button component
|
||||
- Save as prefab
|
||||
|
||||
2. **Create CardBackPrefab**:
|
||||
- Create GameObject → UI → Image (for card back)
|
||||
- Add Button component for interaction
|
||||
- Style appropriately to match your game's aesthetics
|
||||
- Save as prefab
|
||||
|
||||
### 2. Create UI Page Prefabs
|
||||
|
||||
Create each page prefab individually:
|
||||
|
||||
1. **Create MainMenuPage Prefab**:
|
||||
- Set up UI elements as shown in structure
|
||||
- Add CardMenuPage script
|
||||
- Add CanvasGroup component
|
||||
- Configure all Inspector references
|
||||
- Save as prefab
|
||||
|
||||
2. **Create AlbumViewPage Prefab**:
|
||||
- Set up UI elements as shown in structure
|
||||
- Add AlbumViewPage script
|
||||
- Add CanvasGroup component
|
||||
- Configure all Inspector references
|
||||
- Assign CardPrefab
|
||||
- Save as prefab
|
||||
|
||||
3. **Create BoosterOpeningPage Prefab**:
|
||||
- Set up UI elements as shown in structure
|
||||
- Create CardRevealContainer with three child positions
|
||||
- Add BoosterOpeningPage script
|
||||
- Add CanvasGroup component
|
||||
- Add audio sources and particle systems
|
||||
- Configure all Inspector references
|
||||
- Assign CardPrefab and CardBackPrefab
|
||||
- Save as prefab
|
||||
|
||||
### 3. Create Main CardSystem Prefab
|
||||
|
||||
Finally, create the main controller prefab:
|
||||
|
||||
1. **Create CardSystem GameObject**:
|
||||
- Add CardAlbumUI script
|
||||
- Set up BackpackIcon and Notifications as shown in structure
|
||||
- Assign references to page prefabs (not instances)
|
||||
- Configure all Inspector references
|
||||
- Save as prefab
|
||||
|
||||
## Scene Setup Instructions
|
||||
|
||||
### 1. Add CardSystem to Your Scene
|
||||
|
||||
1. Drag the CardSystem prefab into your scene
|
||||
2. Make sure it's on the UI layer
|
||||
3. Verify it has a Canvas component if needed (or is under a Canvas)
|
||||
|
||||
### 2. Configure the CardSystemManager
|
||||
|
||||
1. Create a GameObject named "CardSystemManager" if not already present
|
||||
2. Add the CardSystemManager script
|
||||
3. Populate it with some test card definitions
|
||||
4. Ensure it's marked as DontDestroyOnLoad if needed
|
||||
|
||||
### 3. Test the System
|
||||
|
||||
1. Enter Play mode
|
||||
2. Test clicking the backpack icon
|
||||
3. Add test booster packs: `CardSystemManager.Instance.AddBoosterPack(3)`
|
||||
4. Test opening boosters and viewing the album
|
||||
|
||||
## Additional Tips
|
||||
|
||||
1. **Canvas Settings**:
|
||||
- Set your Canvas to Screen Space - Overlay
|
||||
- Use Scale With Screen Size with reference resolution 1920x1080
|
||||
- Configure the Canvas Scaler for proper UI scaling
|
||||
|
||||
2. **UI Navigation**:
|
||||
- Configure button navigation for keyboard/controller support
|
||||
- Set tab order for accessibility
|
||||
|
||||
3. **Audio Setup**:
|
||||
- Keep audio sources on the respective UI elements
|
||||
- Adjust spatial blend to 0 (2D) for UI sounds
|
||||
- Use appropriate volume for notification sounds
|
||||
|
||||
4. **Animation Considerations**:
|
||||
- All animations use Pixelplacement.Tween
|
||||
- Adjust animation durations in Inspector for fine-tuning
|
||||
- Consider creating animation presets for consistent feel
|
||||
|
||||
5. **Testing on Different Devices**:
|
||||
- Test the UI on different aspect ratios
|
||||
- Ensure UI elements are anchored properly for different resolutions
|
||||
- Use the Device Simulator to test mobile layouts if targeting mobile
|
||||
|
||||
6. **Performance Tips**:
|
||||
- Consider object pooling for cards in large collections
|
||||
- Disable raycast targets on non-interactive elements
|
||||
- Use sprite atlases for card images
|
||||
Reference in New Issue
Block a user