Setup scene for the statue nonsense
This commit is contained in:
@@ -20,6 +20,11 @@ MonoBehaviour:
|
||||
m_ReadOnly: 0
|
||||
m_SerializedLabels: []
|
||||
FlaggedDuringContentUpdateRestriction: 0
|
||||
- m_GUID: 359004e51663d6442b7d2b960d12b459
|
||||
m_Address: Assets/Settings/StatueDressupSettings.asset
|
||||
m_ReadOnly: 0
|
||||
m_SerializedLabels: []
|
||||
FlaggedDuringContentUpdateRestriction: 0
|
||||
- m_GUID: 35bfcff00faa72c4eb272a9e8288f965
|
||||
m_Address: Settings/PlayerFollowerSettings
|
||||
m_ReadOnly: 0
|
||||
|
||||
8
Assets/Data/Minigames.meta
Normal file
8
Assets/Data/Minigames.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7091cb36c910f2946b53eb474bb12c0c
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Data/Minigames/StatueDressup.meta
Normal file
8
Assets/Data/Minigames/StatueDressup.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 66399ae87653d9b43b7a55fadc15c136
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,20 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 74c6ae9aa803480c8fb918dd58cfb809, type: 3}
|
||||
m_Name: TestDecorationData 1
|
||||
m_EditorClassIdentifier: AppleHillsScripts::Minigames.StatueDressup.Data.DecorationData
|
||||
decorationId: Shoe
|
||||
decorationName: Shoe
|
||||
decorationSprite: {fileID: -792204027, guid: f1b529408513adc409a57c9ba7131823, type: 3}
|
||||
authoredSize: {x: 512, y: 512}
|
||||
iconSize: {x: 256, y: 256}
|
||||
isUnlocked: 1
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ca949a6208ce5b5488e90ea3e2eed6df
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,20 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 74c6ae9aa803480c8fb918dd58cfb809, type: 3}
|
||||
m_Name: TestDecorationData 2
|
||||
m_EditorClassIdentifier: AppleHillsScripts::Minigames.StatueDressup.Data.DecorationData
|
||||
decorationId: axe
|
||||
decorationName: axe
|
||||
decorationSprite: {fileID: 6674386295937086461, guid: 3bd1c178a78fcd144965cd1731dc309b, type: 3}
|
||||
authoredSize: {x: 512, y: 512}
|
||||
iconSize: {x: 256, y: 256}
|
||||
isUnlocked: 1
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5efa934e009bc234e920904b05db3c2f
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,20 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 74c6ae9aa803480c8fb918dd58cfb809, type: 3}
|
||||
m_Name: TestDecorationData 3
|
||||
m_EditorClassIdentifier: AppleHillsScripts::Minigames.StatueDressup.Data.DecorationData
|
||||
decorationId: can
|
||||
decorationName: can
|
||||
decorationSprite: {fileID: 792078976, guid: f1b529408513adc409a57c9ba7131823, type: 3}
|
||||
authoredSize: {x: 512, y: 512}
|
||||
iconSize: {x: 256, y: 256}
|
||||
isUnlocked: 1
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8819ec8b1f4910a4494755cf043636d1
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,20 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 74c6ae9aa803480c8fb918dd58cfb809, type: 3}
|
||||
m_Name: TestDecorationData 4
|
||||
m_EditorClassIdentifier: AppleHillsScripts::Minigames.StatueDressup.Data.DecorationData
|
||||
decorationId: i_feel_the_magic_between_you_and_i
|
||||
decorationName: I feel the magic between you and I
|
||||
decorationSprite: {fileID: 1623587888, guid: 1630961e1f25e4243ad74e4e3b0c7e54, type: 3}
|
||||
authoredSize: {x: 512, y: 512}
|
||||
iconSize: {x: 256, y: 256}
|
||||
isUnlocked: 1
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b09b79db8ef15144bb2138ec59f26a9c
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,20 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 74c6ae9aa803480c8fb918dd58cfb809, type: 3}
|
||||
m_Name: TestDecorationData 5
|
||||
m_EditorClassIdentifier: AppleHillsScripts::Minigames.StatueDressup.Data.DecorationData
|
||||
decorationId: the_people's_sticker
|
||||
decorationName: the people's sticker
|
||||
decorationSprite: {fileID: 3452003437791708593, guid: 4c13556eeb918624c9dd3d7e4086242e, type: 3}
|
||||
authoredSize: {x: 512, y: 512}
|
||||
iconSize: {x: 256, y: 256}
|
||||
isUnlocked: 1
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8838477f768600848813a215ab6a46fe
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,20 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 74c6ae9aa803480c8fb918dd58cfb809, type: 3}
|
||||
m_Name: TestDecorationData 6
|
||||
m_EditorClassIdentifier: AppleHillsScripts::Minigames.StatueDressup.Data.DecorationData
|
||||
decorationId: cardalbum
|
||||
decorationName: CardAlbum
|
||||
decorationSprite: {fileID: -4354454609415314374, guid: 1ba1f8cf73f79214190f1432fe1e3bc6, type: 3}
|
||||
authoredSize: {x: 512, y: 512}
|
||||
iconSize: {x: 256, y: 256}
|
||||
isUnlocked: 1
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f0df83df3cff9d84ba9fd4895e5d1b58
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,20 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 74c6ae9aa803480c8fb918dd58cfb809, type: 3}
|
||||
m_Name: TestDecorationData 7
|
||||
m_EditorClassIdentifier: AppleHillsScripts::Minigames.StatueDressup.Data.DecorationData
|
||||
decorationId: chocolate
|
||||
decorationName: chocolate
|
||||
decorationSprite: {fileID: -509776585262497855, guid: c648336c825f7d7479582bbe4d95d0bc, type: 3}
|
||||
authoredSize: {x: 512, y: 512}
|
||||
iconSize: {x: 256, y: 256}
|
||||
isUnlocked: 1
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4101d48e428899d409df02f24c83571f
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,20 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 74c6ae9aa803480c8fb918dd58cfb809, type: 3}
|
||||
m_Name: TestDecorationData 8
|
||||
m_EditorClassIdentifier: AppleHillsScripts::Minigames.StatueDressup.Data.DecorationData
|
||||
decorationId: tennis_ball
|
||||
decorationName: tennis ball
|
||||
decorationSprite: {fileID: -8897872742393391051, guid: 44a64b7a80921694790236bab7765357, type: 3}
|
||||
authoredSize: {x: 512, y: 512}
|
||||
iconSize: {x: 256, y: 256}
|
||||
isUnlocked: 1
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b01ee8334ee052b4784225337e9a5ece
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,20 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 74c6ae9aa803480c8fb918dd58cfb809, type: 3}
|
||||
m_Name: TestDecorationData 9
|
||||
m_EditorClassIdentifier: AppleHillsScripts::Minigames.StatueDressup.Data.DecorationData
|
||||
decorationId: bird_poop
|
||||
decorationName: bird poop
|
||||
decorationSprite: {fileID: 6130942287420046110, guid: 9ef635f111f888a4386a7f0290117264, type: 3}
|
||||
authoredSize: {x: 512, y: 512}
|
||||
iconSize: {x: 256, y: 256}
|
||||
isUnlocked: 1
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a5d493c2c7c9cf74cab038023b401273
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
20
Assets/Data/Minigames/StatueDressup/TestDecorationData.asset
Normal file
20
Assets/Data/Minigames/StatueDressup/TestDecorationData.asset
Normal file
@@ -0,0 +1,20 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 74c6ae9aa803480c8fb918dd58cfb809, type: 3}
|
||||
m_Name: TestDecorationData
|
||||
m_EditorClassIdentifier: AppleHillsScripts::Minigames.StatueDressup.Data.DecorationData
|
||||
decorationId: backpack
|
||||
decorationName: backpack
|
||||
decorationSprite: {fileID: -6415490079858998490, guid: b9d1a045f7c163a4d9e2d38071913885, type: 3}
|
||||
authoredSize: {x: 512, y: 512}
|
||||
iconSize: {x: 256, y: 256}
|
||||
isUnlocked: 1
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2ea75de9ff6dbfb4b8c246a654868479
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -19,7 +19,9 @@ MonoBehaviour:
|
||||
requiredOrientation: 1
|
||||
- sceneName: DivingForPictures
|
||||
requiredOrientation: 0
|
||||
- sceneName: BirdB
|
||||
- sceneName: BirdPoop
|
||||
requiredOrientation: 1
|
||||
- sceneName: CardQualityControl
|
||||
requiredOrientation: 1
|
||||
- sceneName: StatueDecoration
|
||||
requiredOrientation: 1
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
using UnityEditor;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.IO;
|
||||
using Core.Settings;
|
||||
|
||||
namespace AppleHills.Core.Settings.Editor
|
||||
@@ -11,7 +10,7 @@ namespace AppleHills.Core.Settings.Editor
|
||||
{
|
||||
private Vector2 scrollPosition;
|
||||
private List<BaseSettings> allSettings = new List<BaseSettings>();
|
||||
private string[] tabNames = new string[] { "Player & Follower", "Interaction & Items", "Diving Minigame", "Card System", "Card Sorting", "Bird Pooper" };
|
||||
private string[] tabNames = new string[] { "Player & Follower", "Interaction & Items", "Diving Minigame", "Card System", "Card Sorting", "Bird Pooper", "Statue Dressup" };
|
||||
private int selectedTab = 0;
|
||||
private Dictionary<string, SerializedObject> serializedSettingsObjects = new Dictionary<string, SerializedObject>();
|
||||
private GUIStyle headerStyle;
|
||||
@@ -52,6 +51,7 @@ namespace AppleHills.Core.Settings.Editor
|
||||
CreateSettingsIfMissing<CardSystemSettings>("CardSystemSettings");
|
||||
CreateSettingsIfMissing<CardSortingSettings>("CardSortingSettings");
|
||||
CreateSettingsIfMissing<BirdPooperSettings>("BirdPooperSettings");
|
||||
CreateSettingsIfMissing<StatueDressupSettings>("StatueDressupSettings");
|
||||
}
|
||||
|
||||
private void CreateSettingsIfMissing<T>(string fileName) where T : BaseSettings
|
||||
@@ -127,6 +127,9 @@ namespace AppleHills.Core.Settings.Editor
|
||||
case 5: // Bird Pooper
|
||||
DrawSettingsEditor<BirdPooperSettings>();
|
||||
break;
|
||||
case 6: // Statue Dressup
|
||||
DrawSettingsEditor<StatueDressupSettings>();
|
||||
break;
|
||||
}
|
||||
|
||||
EditorGUILayout.EndScrollView();
|
||||
|
||||
BIN
Assets/External/Placeholders/camera_icon.png
vendored
Normal file
BIN
Assets/External/Placeholders/camera_icon.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.8 KiB |
195
Assets/External/Placeholders/camera_icon.png.meta
vendored
Normal file
195
Assets/External/Placeholders/camera_icon.png.meta
vendored
Normal file
@@ -0,0 +1,195 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 77b22fe548c7b264a8c6d243bd1d62ad
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: -6300450527438492720
|
||||
second: camera_icon_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: camera_icon_0
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 19
|
||||
y: 68
|
||||
width: 474
|
||||
height: 377
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 0db2b1360ad4098a0800000000000000
|
||||
internalID: -6300450527438492720
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable:
|
||||
camera_icon_0: -6300450527438492720
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Prefabs/Minigames/StatueDressup.meta
Normal file
8
Assets/Prefabs/Minigames/StatueDressup.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c0a3bd5d30f50c743805d7e24943255a
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
112
Assets/Prefabs/Minigames/StatueDressup/DecorationItem.prefab
Normal file
112
Assets/Prefabs/Minigames/StatueDressup/DecorationItem.prefab
Normal file
@@ -0,0 +1,112 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &769974252937479200
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 7351787172634191403}
|
||||
- component: {fileID: 1765490150995458244}
|
||||
- component: {fileID: 7495592582591578536}
|
||||
- component: {fileID: 597267714783345863}
|
||||
- component: {fileID: 3617977973382190563}
|
||||
m_Layer: 5
|
||||
m_Name: DecorationItem
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &7351787172634191403
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 769974252937479200}
|
||||
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: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &1765490150995458244
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 769974252937479200}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 31a82dde0ffb439e86b79499b9daa92b, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: AppleHillsScripts::Minigames.StatueDressup.DragDrop.DecorationItem
|
||||
moveSpeed: 50
|
||||
smoothMovement: 0
|
||||
snapDuration: 0.3
|
||||
visual: {fileID: 0}
|
||||
isSelectable: 1
|
||||
selectionOffset: 50
|
||||
decorationData: {fileID: 0}
|
||||
decorationImage: {fileID: 597267714783345863}
|
||||
statueArea: {fileID: 0}
|
||||
--- !u!222 &7495592582591578536
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 769974252937479200}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &597267714783345863
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 769974252937479200}
|
||||
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: 0}
|
||||
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!225 &3617977973382190563
|
||||
CanvasGroup:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 769974252937479200}
|
||||
m_Enabled: 1
|
||||
m_Alpha: 1
|
||||
m_Interactable: 1
|
||||
m_BlocksRaycasts: 1
|
||||
m_IgnoreParentGroups: 0
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 064cd4d021ea13e47860a59bbe8224aa
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@@ -172,6 +172,7 @@ namespace Core
|
||||
var cardSystemSettings = SettingsProvider.Instance.LoadSettingsSynchronous<CardSystemSettings>();
|
||||
var sortingGameSettings = SettingsProvider.Instance.LoadSettingsSynchronous<CardSortingSettings>();
|
||||
var birdPooperSettings = SettingsProvider.Instance.LoadSettingsSynchronous<BirdPooperSettings>();
|
||||
var statueDressupSettings = SettingsProvider.Instance.LoadSettingsSynchronous<StatueDressupSettings>();
|
||||
|
||||
// Register settings with service locator
|
||||
if (playerSettings != null)
|
||||
@@ -233,9 +234,20 @@ namespace Core
|
||||
{
|
||||
Debug.LogError("Failed to load BirdPooperSettings");
|
||||
}
|
||||
|
||||
if (statueDressupSettings != null)
|
||||
{
|
||||
ServiceLocator.Register<IStatueDressupSettings>(statueDressupSettings);
|
||||
Logging.Debug("StatueDressupSettings registered successfully");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("Failed to load StatueDressupSettings");
|
||||
}
|
||||
|
||||
// Log success
|
||||
_settingsLoaded = playerSettings != null && interactionSettings != null && minigameSettings != null && cardSystemSettings != null && birdPooperSettings != null;
|
||||
_settingsLoaded = playerSettings != null && interactionSettings != null && minigameSettings != null
|
||||
&& cardSystemSettings != null && birdPooperSettings != null && statueDressupSettings != null;
|
||||
if (_settingsLoaded)
|
||||
{
|
||||
Logging.Debug("All settings loaded and registered with ServiceLocator");
|
||||
|
||||
@@ -160,4 +160,43 @@ namespace AppleHills.Core.Settings
|
||||
// General Animation
|
||||
float DefaultAnimationDuration { get; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Interface for statue dressup minigame settings
|
||||
/// </summary>
|
||||
public interface IStatueDressupSettings
|
||||
{
|
||||
// Decoration Display
|
||||
Vector2 DefaultIconSize { get; }
|
||||
Vector2 DefaultAuthoredSize { get; }
|
||||
|
||||
// Menu Configuration
|
||||
int ItemsPerPage { get; }
|
||||
int GridColumns { get; }
|
||||
Vector2 GridSpacing { get; }
|
||||
|
||||
// Drag and Drop
|
||||
float DragScaleTransitionDuration { get; }
|
||||
float ReturnToMenuDuration { get; }
|
||||
float MinOverlapPercentage { get; }
|
||||
|
||||
// Animation
|
||||
float HoverScaleMultiplier { get; }
|
||||
float HoverAnimationDuration { get; }
|
||||
float PlacementAnimationDuration { get; }
|
||||
|
||||
// Photo Settings
|
||||
string PhotoSaveKey { get; }
|
||||
int PhotoQuality { get; }
|
||||
bool CaptureFullScreen { get; }
|
||||
|
||||
// Rewards
|
||||
int CardsRewardCount { get; }
|
||||
bool AutoCompleteOnPhoto { get; }
|
||||
|
||||
// State Persistence
|
||||
bool EnableStatePersistence { get; }
|
||||
string StateSaveKey { get; }
|
||||
int MaxSavedDecorations { get; }
|
||||
}
|
||||
}
|
||||
|
||||
146
Assets/Scripts/Core/Settings/StatueDressupSettings.cs
Normal file
146
Assets/Scripts/Core/Settings/StatueDressupSettings.cs
Normal file
@@ -0,0 +1,146 @@
|
||||
using AppleHills.Core.Settings;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Core.Settings
|
||||
{
|
||||
/// <summary>
|
||||
/// Settings for the Mr. Cement Statue Decoration minigame
|
||||
/// </summary>
|
||||
[CreateAssetMenu(fileName = "StatueDressupSettings", menuName = "AppleHills/Settings/Statue Dressup", order = 7)]
|
||||
public class StatueDressupSettings : BaseSettings, IStatueDressupSettings
|
||||
{
|
||||
[Header("Decoration Display")]
|
||||
[Tooltip("Default icon size for decorations in the menu grid")]
|
||||
[SerializeField] private Vector2 defaultIconSize = new Vector2(64f, 64f);
|
||||
|
||||
[Tooltip("Default full size for decorations when placed on statue")]
|
||||
[SerializeField] private Vector2 defaultAuthoredSize = new Vector2(128f, 128f);
|
||||
|
||||
[Header("Menu Configuration")]
|
||||
[Tooltip("Number of decoration items to display per page (2 columns x 5 rows = 10)")]
|
||||
[SerializeField] private int itemsPerPage = 10;
|
||||
|
||||
[Tooltip("Number of columns in the decoration grid")]
|
||||
[SerializeField] private int gridColumns = 2;
|
||||
|
||||
[Tooltip("Spacing between grid items")]
|
||||
[SerializeField] private Vector2 gridSpacing = new Vector2(10f, 10f);
|
||||
|
||||
[Header("Drag and Drop")]
|
||||
[Tooltip("Duration for icon to full size transition when dragging starts")]
|
||||
[SerializeField] private float dragScaleTransitionDuration = 0.2f;
|
||||
|
||||
[Tooltip("Duration for return to menu animation")]
|
||||
[SerializeField] private float returnToMenuDuration = 0.3f;
|
||||
|
||||
[Tooltip("Minimum overlap percentage required to place on statue (0-1)")]
|
||||
[SerializeField] private float minOverlapPercentage = 0.1f;
|
||||
|
||||
[Header("Animation")]
|
||||
[Tooltip("Scale multiplier for hover effect (1.0 = no change, 1.1 = 10% larger)")]
|
||||
[SerializeField] private float hoverScaleMultiplier = 1.05f;
|
||||
|
||||
[Tooltip("Duration of hover animation")]
|
||||
[SerializeField] private float hoverAnimationDuration = 0.2f;
|
||||
|
||||
[Tooltip("Duration for placement animation")]
|
||||
[SerializeField] private float placementAnimationDuration = 0.15f;
|
||||
|
||||
[Header("Photo Settings")]
|
||||
[Tooltip("PlayerPrefs key for saving the statue photo")]
|
||||
[SerializeField] private string photoSaveKey = "MrCementStatuePhoto";
|
||||
|
||||
[Tooltip("Quality of the captured photo (1-100)")]
|
||||
[SerializeField] private int photoQuality = 85;
|
||||
|
||||
[Tooltip("Whether to capture full screen or just statue area")]
|
||||
[SerializeField] private bool captureFullScreen;
|
||||
|
||||
[Header("Rewards")]
|
||||
[Tooltip("Number of Blokkemon cards awarded on completion")]
|
||||
[SerializeField] private int cardsRewardCount = 3;
|
||||
|
||||
[Tooltip("Whether completion is automatic or requires confirmation")]
|
||||
[SerializeField] private bool autoCompleteOnPhoto = true;
|
||||
|
||||
[Header("State Persistence")]
|
||||
[Tooltip("Whether to save decoration positions between sessions")]
|
||||
[SerializeField] private bool enableStatePersistence = true;
|
||||
|
||||
[Tooltip("PlayerPrefs key for saving decoration state")]
|
||||
[SerializeField] private string stateSaveKey = "StatueDecorationState";
|
||||
|
||||
[Tooltip("Maximum number of decorations to save")]
|
||||
[SerializeField] private int maxSavedDecorations = 50;
|
||||
|
||||
// IStatueDressupSettings implementation - Decoration Display
|
||||
public Vector2 DefaultIconSize => defaultIconSize;
|
||||
public Vector2 DefaultAuthoredSize => defaultAuthoredSize;
|
||||
|
||||
// IStatueDressupSettings implementation - Menu Configuration
|
||||
public int ItemsPerPage => itemsPerPage;
|
||||
public int GridColumns => gridColumns;
|
||||
public Vector2 GridSpacing => gridSpacing;
|
||||
|
||||
// IStatueDressupSettings implementation - Drag and Drop
|
||||
public float DragScaleTransitionDuration => dragScaleTransitionDuration;
|
||||
public float ReturnToMenuDuration => returnToMenuDuration;
|
||||
public float MinOverlapPercentage => minOverlapPercentage;
|
||||
|
||||
// IStatueDressupSettings implementation - Animation
|
||||
public float HoverScaleMultiplier => hoverScaleMultiplier;
|
||||
public float HoverAnimationDuration => hoverAnimationDuration;
|
||||
public float PlacementAnimationDuration => placementAnimationDuration;
|
||||
|
||||
// IStatueDressupSettings implementation - Photo Settings
|
||||
public string PhotoSaveKey => photoSaveKey;
|
||||
public int PhotoQuality => photoQuality;
|
||||
public bool CaptureFullScreen => captureFullScreen;
|
||||
|
||||
// IStatueDressupSettings implementation - Rewards
|
||||
public int CardsRewardCount => cardsRewardCount;
|
||||
public bool AutoCompleteOnPhoto => autoCompleteOnPhoto;
|
||||
|
||||
// IStatueDressupSettings implementation - State Persistence
|
||||
public bool EnableStatePersistence => enableStatePersistence;
|
||||
public string StateSaveKey => stateSaveKey;
|
||||
public int MaxSavedDecorations => maxSavedDecorations;
|
||||
|
||||
public override void OnValidate()
|
||||
{
|
||||
base.OnValidate();
|
||||
|
||||
// Validate decoration display
|
||||
defaultIconSize.x = Mathf.Max(16f, defaultIconSize.x);
|
||||
defaultIconSize.y = Mathf.Max(16f, defaultIconSize.y);
|
||||
defaultAuthoredSize.x = Mathf.Max(32f, defaultAuthoredSize.x);
|
||||
defaultAuthoredSize.y = Mathf.Max(32f, defaultAuthoredSize.y);
|
||||
|
||||
// Validate menu configuration
|
||||
itemsPerPage = Mathf.Max(1, itemsPerPage);
|
||||
gridColumns = Mathf.Max(1, gridColumns);
|
||||
gridSpacing.x = Mathf.Max(0f, gridSpacing.x);
|
||||
gridSpacing.y = Mathf.Max(0f, gridSpacing.y);
|
||||
|
||||
// Validate drag and drop
|
||||
dragScaleTransitionDuration = Mathf.Max(0.01f, dragScaleTransitionDuration);
|
||||
returnToMenuDuration = Mathf.Max(0.01f, returnToMenuDuration);
|
||||
minOverlapPercentage = Mathf.Clamp01(minOverlapPercentage);
|
||||
|
||||
// Validate animation
|
||||
hoverScaleMultiplier = Mathf.Max(1f, hoverScaleMultiplier);
|
||||
hoverAnimationDuration = Mathf.Max(0.01f, hoverAnimationDuration);
|
||||
placementAnimationDuration = Mathf.Max(0.01f, placementAnimationDuration);
|
||||
|
||||
// Validate photo settings
|
||||
photoQuality = Mathf.Clamp(photoQuality, 1, 100);
|
||||
|
||||
// Validate rewards
|
||||
cardsRewardCount = Mathf.Max(0, cardsRewardCount);
|
||||
|
||||
// Validate state persistence
|
||||
maxSavedDecorations = Mathf.Max(1, maxSavedDecorations);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4fcf232a64e34f489b874519cc96339e
|
||||
timeCreated: 1763984221
|
||||
@@ -1,7 +1,9 @@
|
||||
using System.Collections.Generic;
|
||||
using Core;
|
||||
using Core.Lifecycle;
|
||||
using Minigames.StatueDressup.Data;
|
||||
using Minigames.StatueDressup.DragDrop;
|
||||
using UI.DragAndDrop.Core;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
@@ -10,13 +12,16 @@ namespace Minigames.StatueDressup.Controllers
|
||||
/// <summary>
|
||||
/// Manages the side menu with decoration items and pagination
|
||||
/// </summary>
|
||||
public class DecorationMenuController : MonoBehaviour
|
||||
public class DecorationMenuController : ManagedBehaviour
|
||||
{
|
||||
[Header("References")]
|
||||
[SerializeField] private DecorationItem itemPrefab;
|
||||
[SerializeField] private Transform itemsContainer;
|
||||
[SerializeField] private Button nextPageButton;
|
||||
[SerializeField] private Button previousPageButton;
|
||||
[SerializeField] private RectTransform statueArea; // For overlap detection
|
||||
[SerializeField] private Transform statueParent; // Parent for placed decorations
|
||||
[SerializeField] private StatueDecorationController statueController; // Controller for registration
|
||||
|
||||
[Header("Configuration")]
|
||||
[SerializeField] private List<DecorationData> allDecorations = new List<DecorationData>();
|
||||
@@ -25,22 +30,40 @@ namespace Minigames.StatueDressup.Controllers
|
||||
[Header("Layout")]
|
||||
[SerializeField] private GridLayoutGroup gridLayout;
|
||||
|
||||
private int _currentPage = 0;
|
||||
private int _totalPages = 0;
|
||||
private int _currentPage;
|
||||
private int _totalPages;
|
||||
private List<DecorationItem> _spawnedItems = new List<DecorationItem>();
|
||||
private Dictionary<DecorationItem, DecorationData> _itemDataMapping = new Dictionary<DecorationItem, DecorationData>();
|
||||
private AppleHills.Core.Settings.IStatueDressupSettings _settings;
|
||||
|
||||
// Properties
|
||||
public int CurrentPage => _currentPage;
|
||||
public int TotalPages => _totalPages;
|
||||
|
||||
private void Start()
|
||||
/// <summary>
|
||||
/// Early initialization - get settings reference
|
||||
/// </summary>
|
||||
internal override void OnManagedAwake()
|
||||
{
|
||||
Initialize();
|
||||
base.OnManagedAwake();
|
||||
|
||||
// Get settings early
|
||||
_settings = GameManager.GetSettingsObject<AppleHills.Core.Settings.IStatueDressupSettings>();
|
||||
|
||||
// Override itemsPerPage with settings value if available
|
||||
if (_settings != null)
|
||||
{
|
||||
itemsPerPage = _settings.ItemsPerPage;
|
||||
}
|
||||
}
|
||||
|
||||
private void Initialize()
|
||||
/// <summary>
|
||||
/// Main initialization after all managers are ready
|
||||
/// </summary>
|
||||
internal override void OnManagedStart()
|
||||
{
|
||||
base.OnManagedStart();
|
||||
|
||||
Logging.Debug($"[DecorationMenuController] Initializing with {allDecorations.Count} decorations");
|
||||
|
||||
// Calculate total pages
|
||||
@@ -105,6 +128,12 @@ namespace Minigames.StatueDressup.Controllers
|
||||
DecorationItem item = Instantiate(itemPrefab, itemsContainer);
|
||||
item.SetDecorationData(data);
|
||||
|
||||
// Set statue references for overlap detection
|
||||
item.SetStatueArea(statueArea);
|
||||
item.SetStatueParent(statueParent);
|
||||
item.SetMenuParent(itemsContainer);
|
||||
item.SetController(statueController);
|
||||
|
||||
// Store original position for return animation
|
||||
if (item.RectTransform != null)
|
||||
{
|
||||
@@ -132,9 +161,6 @@ namespace Minigames.StatueDressup.Controllers
|
||||
{
|
||||
Logging.Debug($"[DecorationMenuController] Item picked up: {item.Data?.DecorationName}");
|
||||
|
||||
// Spawn replacement in menu slot
|
||||
// This ensures menu always shows available items
|
||||
DecorationData data = _itemDataMapping[item];
|
||||
// We'll spawn replacement only if item is actually placed, not on pickup
|
||||
}
|
||||
}
|
||||
@@ -146,10 +172,10 @@ namespace Minigames.StatueDressup.Controllers
|
||||
{
|
||||
if (draggable is DecorationItem item && _itemDataMapping.ContainsKey(item))
|
||||
{
|
||||
Logging.Debug($"[DecorationMenuController] Item dropped: {item.Data?.DecorationName}, slot={item.CurrentSlot?.name}");
|
||||
Logging.Debug($"[DecorationMenuController] Item dropped: {item.Data?.DecorationName}, isPlacedOnStatue={item.IsPlacedOnStatue}");
|
||||
|
||||
// If item was placed on statue, spawn replacement in menu
|
||||
if (item.CurrentSlot != null && !item.IsInMenu)
|
||||
if (item.IsPlacedOnStatue && !item.IsInMenu)
|
||||
{
|
||||
DecorationData data = _itemDataMapping[item];
|
||||
|
||||
@@ -226,8 +252,13 @@ namespace Minigames.StatueDressup.Controllers
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
/// <summary>
|
||||
/// Cleanup when menu controller is destroyed
|
||||
/// </summary>
|
||||
internal override void OnManagedDestroy()
|
||||
{
|
||||
base.OnManagedDestroy();
|
||||
|
||||
// Cleanup button listeners
|
||||
if (nextPageButton != null)
|
||||
{
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.Collections.Generic;
|
||||
using Core;
|
||||
using Core.Lifecycle;
|
||||
using Minigames.StatueDressup.DragDrop;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
@@ -8,11 +9,13 @@ namespace Minigames.StatueDressup.Controllers
|
||||
{
|
||||
/// <summary>
|
||||
/// Main controller for the Mr. Cement statue decoration minigame
|
||||
/// Uses overlap-based placement instead of slots
|
||||
/// </summary>
|
||||
public class StatueDecorationController : MonoBehaviour
|
||||
public class StatueDecorationController : ManagedBehaviour
|
||||
{
|
||||
[Header("References")]
|
||||
[SerializeField] private StatueDecorationSlot[] statueSlots;
|
||||
[SerializeField] private RectTransform statueArea; // Statue area for overlap detection
|
||||
[SerializeField] private Transform statueParent; // Parent for placed decorations
|
||||
[SerializeField] private DecorationMenuController menuController;
|
||||
[SerializeField] private Button takePhotoButton;
|
||||
[SerializeField] private GameObject statue;
|
||||
@@ -24,16 +27,28 @@ namespace Minigames.StatueDressup.Controllers
|
||||
[SerializeField] private RectTransform photoArea; // Area to capture
|
||||
[SerializeField] private string photoSaveKey = "MrCementStatuePhoto";
|
||||
|
||||
private Dictionary<StatueDecorationSlot, DecorationItem> _placedDecorations = new Dictionary<StatueDecorationSlot, DecorationItem>();
|
||||
private bool _minigameCompleted = false;
|
||||
private List<DecorationItem> _placedDecorations = new List<DecorationItem>();
|
||||
private bool _minigameCompleted;
|
||||
private AppleHills.Core.Settings.IStatueDressupSettings _settings;
|
||||
|
||||
private void Start()
|
||||
/// <summary>
|
||||
/// Early initialization - get settings reference
|
||||
/// </summary>
|
||||
internal override void OnManagedAwake()
|
||||
{
|
||||
Initialize();
|
||||
base.OnManagedAwake();
|
||||
|
||||
// Get settings early
|
||||
_settings = GameManager.GetSettingsObject<AppleHills.Core.Settings.IStatueDressupSettings>();
|
||||
}
|
||||
|
||||
private void Initialize()
|
||||
/// <summary>
|
||||
/// Main initialization after all managers are ready
|
||||
/// </summary>
|
||||
internal override void OnManagedStart()
|
||||
{
|
||||
base.OnManagedStart();
|
||||
|
||||
Logging.Debug("[StatueDecorationController] Initializing minigame");
|
||||
|
||||
// Setup photo button
|
||||
@@ -42,13 +57,12 @@ namespace Minigames.StatueDressup.Controllers
|
||||
takePhotoButton.onClick.AddListener(OnTakePhoto);
|
||||
}
|
||||
|
||||
// Subscribe to slot occupation events
|
||||
foreach (var slot in statueSlots)
|
||||
// Subscribe to menu controller for tracking placed items
|
||||
// Items will manage their own placement via overlap detection
|
||||
if (menuController != null)
|
||||
{
|
||||
if (slot != null)
|
||||
{
|
||||
slot.OnOccupied += HandleDecorationPlaced;
|
||||
}
|
||||
// Menu controller will handle spawning replacements
|
||||
Logging.Debug("[StatueDecorationController] Menu controller connected");
|
||||
}
|
||||
|
||||
// Load saved state if exists
|
||||
@@ -56,21 +70,32 @@ namespace Minigames.StatueDressup.Controllers
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handle decoration placed in slot
|
||||
/// Register a decoration as placed on statue
|
||||
/// </summary>
|
||||
private void HandleDecorationPlaced(DraggableObject draggable)
|
||||
public void RegisterDecoration(DecorationItem decoration)
|
||||
{
|
||||
if (draggable is DecorationItem decoration)
|
||||
if (decoration != null && !_placedDecorations.Contains(decoration))
|
||||
{
|
||||
var slot = decoration.CurrentSlot as StatueDecorationSlot;
|
||||
if (slot != null)
|
||||
{
|
||||
_placedDecorations[slot] = decoration;
|
||||
Logging.Debug($"[StatueDecorationController] Decoration placed: {decoration.Data?.DecorationName} in slot {slot.name}");
|
||||
|
||||
// Auto-save state
|
||||
SaveStatueState();
|
||||
}
|
||||
_placedDecorations.Add(decoration);
|
||||
Logging.Debug($"[StatueDecorationController] Decoration placed: {decoration.Data?.DecorationName}");
|
||||
|
||||
// Auto-save state
|
||||
SaveStatueState();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Unregister a decoration (when removed)
|
||||
/// </summary>
|
||||
public void UnregisterDecoration(DecorationItem decoration)
|
||||
{
|
||||
if (decoration != null && _placedDecorations.Contains(decoration))
|
||||
{
|
||||
_placedDecorations.Remove(decoration);
|
||||
Logging.Debug($"[StatueDecorationController] Decoration removed: {decoration.Data?.DecorationName}");
|
||||
|
||||
// Auto-save state
|
||||
SaveStatueState();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -155,11 +180,11 @@ namespace Minigames.StatueDressup.Controllers
|
||||
Logging.Debug($"[StatueDecorationController] Capturing area: {width}x{height} at ({min.x}, {min.y})");
|
||||
|
||||
// Capture the specified area
|
||||
Texture2D screenshot = new Texture2D(width, height, TextureFormat.RGB24, false);
|
||||
screenshot.ReadPixels(new Rect(min.x, min.y, width, height), 0, 0);
|
||||
screenshot.Apply();
|
||||
Texture2D areaScreenshot = new Texture2D(width, height, TextureFormat.RGB24, false);
|
||||
areaScreenshot.ReadPixels(new Rect(min.x, min.y, width, height), 0, 0);
|
||||
areaScreenshot.Apply();
|
||||
|
||||
return screenshot;
|
||||
return areaScreenshot;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -171,7 +196,8 @@ namespace Minigames.StatueDressup.Controllers
|
||||
// For now, save to PlayerPrefs as base64
|
||||
byte[] bytes = photo.EncodeToPNG();
|
||||
string base64 = System.Convert.ToBase64String(bytes);
|
||||
PlayerPrefs.SetString(photoSaveKey, base64);
|
||||
string saveKey = _settings?.PhotoSaveKey ?? photoSaveKey;
|
||||
PlayerPrefs.SetString(saveKey, base64);
|
||||
PlayerPrefs.Save();
|
||||
|
||||
Logging.Debug("[StatueDecorationController] Photo saved to album");
|
||||
@@ -228,10 +254,18 @@ namespace Minigames.StatueDressup.Controllers
|
||||
/// </summary>
|
||||
private void SaveStatueState()
|
||||
{
|
||||
// TODO: Implement save system
|
||||
// Save slot ID -> decoration ID mapping
|
||||
// Check if persistence is enabled
|
||||
if (_settings == null || !_settings.EnableStatePersistence)
|
||||
{
|
||||
Logging.Debug("[StatueDecorationController] State persistence disabled");
|
||||
return;
|
||||
}
|
||||
|
||||
Logging.Debug("[StatueDecorationController] State saved (TODO: implement persistence)");
|
||||
// TODO: Implement save system
|
||||
// Save decoration ID + position + rotation for each placed item
|
||||
// Respect MaxSavedDecorations limit
|
||||
|
||||
Logging.Debug($"[StatueDecorationController] State saved to {_settings.StateSaveKey} (TODO: implement persistence)");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -239,28 +273,31 @@ namespace Minigames.StatueDressup.Controllers
|
||||
/// </summary>
|
||||
private void LoadStatueState()
|
||||
{
|
||||
// TODO: Implement load system
|
||||
// Restore decorations to slots
|
||||
// Check if persistence is enabled
|
||||
if (_settings == null || !_settings.EnableStatePersistence)
|
||||
{
|
||||
Logging.Debug("[StatueDecorationController] State persistence disabled");
|
||||
return;
|
||||
}
|
||||
|
||||
Logging.Debug("[StatueDecorationController] State loaded (TODO: implement persistence)");
|
||||
// TODO: Implement load system
|
||||
// Restore decorations from saved state
|
||||
|
||||
Logging.Debug($"[StatueDecorationController] State loaded from {_settings.StateSaveKey} (TODO: implement persistence)");
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
/// <summary>
|
||||
/// Cleanup when controller is destroyed
|
||||
/// </summary>
|
||||
internal override void OnManagedDestroy()
|
||||
{
|
||||
base.OnManagedDestroy();
|
||||
|
||||
// Cleanup button listener
|
||||
if (takePhotoButton != null)
|
||||
{
|
||||
takePhotoButton.onClick.RemoveListener(OnTakePhoto);
|
||||
}
|
||||
|
||||
// Cleanup slot listeners
|
||||
foreach (var slot in statueSlots)
|
||||
{
|
||||
if (slot != null)
|
||||
{
|
||||
slot.OnOccupied -= HandleDecorationPlaced;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,6 @@ namespace Minigames.StatueDressup.Data
|
||||
public string DecorationId => decorationId;
|
||||
public string DecorationName => decorationName;
|
||||
public Sprite DecorationSprite => decorationSprite;
|
||||
public DecorationCategory Category => category;
|
||||
public Vector2 AuthoredSize => authoredSize;
|
||||
public Vector2 IconSize => iconSize;
|
||||
public bool IsUnlocked => isUnlocked;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Core;
|
||||
using Minigames.StatueDressup.Controllers;
|
||||
using Minigames.StatueDressup.Data;
|
||||
using Minigames.StatueDressup.Utils;
|
||||
using UI.DragAndDrop.Core;
|
||||
@@ -8,7 +9,8 @@ using UnityEngine.UI;
|
||||
namespace Minigames.StatueDressup.DragDrop
|
||||
{
|
||||
/// <summary>
|
||||
/// Individual decoration item that can be dragged from menu to statue slots
|
||||
/// Individual decoration item that can be dragged from menu to statue
|
||||
/// Uses overlap detection instead of slot-based placement
|
||||
/// </summary>
|
||||
public class DecorationItem : DraggableObject
|
||||
{
|
||||
@@ -16,20 +18,38 @@ namespace Minigames.StatueDressup.DragDrop
|
||||
[SerializeField] private DecorationData decorationData;
|
||||
[SerializeField] private Image decorationImage;
|
||||
|
||||
[Header("Placement")]
|
||||
[SerializeField] private RectTransform statueArea; // Reference to statue area for overlap check
|
||||
|
||||
private Vector2 _iconSize;
|
||||
private Vector2 _authoredSize;
|
||||
private Vector2 _originalMenuPosition;
|
||||
private Vector2 _placedPosition; // Position when placed on statue
|
||||
private bool _isInMenu = true;
|
||||
private bool _isPlacedOnStatue = false;
|
||||
private Transform _menuParent; // Original parent in menu
|
||||
private Transform _statueParent; // Parent when placed on statue
|
||||
private StatueDecorationController _controller; // Controller for registration
|
||||
private AppleHills.Core.Settings.IStatueDressupSettings _settings; // Settings reference
|
||||
|
||||
// Properties
|
||||
public DecorationData Data => decorationData;
|
||||
public DecorationCategory Category => decorationData?.Category ?? DecorationCategory.Hats;
|
||||
public bool IsInMenu => _isInMenu;
|
||||
public bool IsPlacedOnStatue => _isPlacedOnStatue;
|
||||
|
||||
protected override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
// Get settings
|
||||
_settings = GameManager.GetSettingsObject<AppleHills.Core.Settings.IStatueDressupSettings>();
|
||||
|
||||
// Store menu parent
|
||||
_menuParent = transform.parent;
|
||||
|
||||
// Find statue parent (will be set by controller)
|
||||
// statueParent will be assigned externally
|
||||
|
||||
if (decorationData != null)
|
||||
{
|
||||
_iconSize = decorationData.IconSize;
|
||||
@@ -83,35 +103,136 @@ namespace Minigames.StatueDressup.DragDrop
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set statue area reference for overlap detection
|
||||
/// </summary>
|
||||
public void SetStatueArea(RectTransform statue)
|
||||
{
|
||||
statueArea = statue;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set statue parent for placing items
|
||||
/// </summary>
|
||||
public void SetStatueParent(Transform parent)
|
||||
{
|
||||
_statueParent = parent;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set controller for registration callbacks
|
||||
/// </summary>
|
||||
public void SetController(StatueDecorationController controller)
|
||||
{
|
||||
_controller = controller;
|
||||
}
|
||||
|
||||
protected override void OnDragStartedHook()
|
||||
{
|
||||
Logging.Debug($"[DecorationItem] OnDragStarted: {decorationData?.DecorationName}");
|
||||
|
||||
// If picking up from statue, allow re-positioning
|
||||
if (_isPlacedOnStatue)
|
||||
{
|
||||
_isPlacedOnStatue = false;
|
||||
Logging.Debug($"[DecorationItem] Picking up from statue for re-positioning");
|
||||
}
|
||||
|
||||
// Scale to authored size when dragging starts
|
||||
if (RectTransform != null)
|
||||
{
|
||||
TweenAnimationUtility.AnimateScale(transform, Vector3.one, 0.2f);
|
||||
|
||||
// Animate size delta to authored size
|
||||
// Smoothly transition from icon size to authored size
|
||||
RectTransform.sizeDelta = _authoredSize;
|
||||
float duration = _settings?.DragScaleTransitionDuration ?? 0.2f;
|
||||
TweenAnimationUtility.AnimateScale(transform, Vector3.one, duration);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnDragEndedHook()
|
||||
{
|
||||
Logging.Debug($"[DecorationItem] OnDragEnded: {decorationData?.DecorationName}, currentSlot={CurrentSlot?.name}");
|
||||
Logging.Debug($"[DecorationItem] OnDragEnded: {decorationData?.DecorationName}");
|
||||
|
||||
// If not placed in a slot, return to menu
|
||||
if (CurrentSlot == null)
|
||||
// Check if overlapping with statue
|
||||
if (IsOverlappingStatue())
|
||||
{
|
||||
ReturnToMenu();
|
||||
PlaceOnStatue();
|
||||
}
|
||||
else
|
||||
{
|
||||
_isInMenu = false;
|
||||
ReturnToMenu();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check if item overlaps with statue area
|
||||
/// </summary>
|
||||
private bool IsOverlappingStatue()
|
||||
{
|
||||
if (statueArea == null || RectTransform == null)
|
||||
{
|
||||
Logging.Warning($"[DecorationItem] Cannot check overlap - statueArea or RectTransform is null");
|
||||
return false;
|
||||
}
|
||||
|
||||
// Get bounds of this item in world space
|
||||
Rect itemRect = GetWorldRect(RectTransform);
|
||||
Rect statueRect = GetWorldRect(statueArea);
|
||||
|
||||
// Check for any overlap
|
||||
bool overlaps = itemRect.Overlaps(statueRect);
|
||||
|
||||
Logging.Debug($"[DecorationItem] Overlap check: {decorationData?.DecorationName}, overlaps={overlaps}");
|
||||
Logging.Debug($"[DecorationItem] Item rect: {itemRect}, Statue rect: {statueRect}");
|
||||
|
||||
return overlaps;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get world space rect for a RectTransform
|
||||
/// </summary>
|
||||
private Rect GetWorldRect(RectTransform rectTransform)
|
||||
{
|
||||
Vector3[] corners = new Vector3[4];
|
||||
rectTransform.GetWorldCorners(corners);
|
||||
|
||||
Vector3 bottomLeft = corners[0];
|
||||
Vector3 topRight = corners[2];
|
||||
|
||||
return new Rect(bottomLeft.x, bottomLeft.y, topRight.x - bottomLeft.x, topRight.y - bottomLeft.y);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Place item on statue at current position
|
||||
/// </summary>
|
||||
private void PlaceOnStatue()
|
||||
{
|
||||
Logging.Debug($"[DecorationItem] Placing on statue: {decorationData?.DecorationName}");
|
||||
|
||||
_isInMenu = false;
|
||||
_isPlacedOnStatue = true;
|
||||
|
||||
// Store current position
|
||||
if (RectTransform != null)
|
||||
{
|
||||
_placedPosition = RectTransform.anchoredPosition;
|
||||
}
|
||||
|
||||
// Move to statue parent if specified
|
||||
if (_statueParent != null && transform.parent != _statueParent)
|
||||
{
|
||||
transform.SetParent(_statueParent, true); // Keep world position
|
||||
}
|
||||
|
||||
// Register with controller
|
||||
if (_controller != null)
|
||||
{
|
||||
_controller.RegisterDecoration(this);
|
||||
}
|
||||
|
||||
// Keep authored size
|
||||
// Position is already set by drag
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Return item to menu with animation
|
||||
/// </summary>
|
||||
@@ -119,21 +240,34 @@ namespace Minigames.StatueDressup.DragDrop
|
||||
{
|
||||
Logging.Debug($"[DecorationItem] Returning to menu: {decorationData?.DecorationName}");
|
||||
|
||||
// Unregister from controller if was placed on statue
|
||||
if (_isPlacedOnStatue && _controller != null)
|
||||
{
|
||||
_controller.UnregisterDecoration(this);
|
||||
}
|
||||
|
||||
_isInMenu = true;
|
||||
_isPlacedOnStatue = false;
|
||||
|
||||
// Return to menu parent
|
||||
if (_menuParent != null && transform.parent != _menuParent)
|
||||
{
|
||||
transform.SetParent(_menuParent, false); // Use local positioning
|
||||
}
|
||||
|
||||
if (RectTransform != null)
|
||||
{
|
||||
// Animate back to icon size
|
||||
RectTransform.sizeDelta = _iconSize;
|
||||
TweenAnimationUtility.AnimateScale(transform, Vector3.one, 0.2f);
|
||||
float scaleDuration = _settings?.DragScaleTransitionDuration ?? 0.2f;
|
||||
TweenAnimationUtility.AnimateScale(transform, Vector3.one, scaleDuration);
|
||||
|
||||
// Animate back to original position
|
||||
TweenAnimationUtility.AnimateAnchoredPosition(RectTransform, _originalMenuPosition, 0.3f);
|
||||
float returnDuration = _settings?.ReturnToMenuDuration ?? 0.3f;
|
||||
TweenAnimationUtility.AnimateAnchoredPosition(RectTransform, _originalMenuPosition, returnDuration);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Set original menu position (called by menu controller)
|
||||
/// </summary>
|
||||
@@ -141,6 +275,14 @@ namespace Minigames.StatueDressup.DragDrop
|
||||
{
|
||||
_originalMenuPosition = position;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set menu parent (called by menu controller)
|
||||
/// </summary>
|
||||
public void SetMenuParent(Transform parent)
|
||||
{
|
||||
_menuParent = parent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,6 @@ namespace Minigames.StatueDressup.DragDrop
|
||||
public class StatueDecorationSlot : DraggableSlot, IPointerEnterHandler, IPointerExitHandler
|
||||
{
|
||||
[Header("Slot Configuration")]
|
||||
[SerializeField] private DecorationCategory allowedCategory;
|
||||
[SerializeField] private bool isPermanent = true; // Can't remove once placed
|
||||
|
||||
[Header("Glow Effect")]
|
||||
@@ -23,9 +22,7 @@ namespace Minigames.StatueDressup.DragDrop
|
||||
|
||||
private bool _isGlowing;
|
||||
private Pixelplacement.TweenSystem.TweenBase _glowTween;
|
||||
|
||||
// Properties
|
||||
public DecorationCategory AllowedCategory => allowedCategory;
|
||||
|
||||
public bool IsPermanent => isPermanent;
|
||||
|
||||
private void Start()
|
||||
@@ -43,7 +40,7 @@ namespace Minigames.StatueDressup.DragDrop
|
||||
if (eventData.pointerDrag != null)
|
||||
{
|
||||
var decoration = eventData.pointerDrag.GetComponent<DecorationItem>();
|
||||
if (decoration != null && decoration.Category == allowedCategory && !IsOccupied)
|
||||
if (decoration != null && !IsOccupied)
|
||||
{
|
||||
StartGlow();
|
||||
}
|
||||
@@ -100,19 +97,7 @@ namespace Minigames.StatueDressup.DragDrop
|
||||
public new bool CanAccept(DraggableObject draggable)
|
||||
{
|
||||
// First check base conditions
|
||||
if (!base.CanAccept(draggable))
|
||||
return false;
|
||||
|
||||
// Then check category matching
|
||||
if (draggable is DecorationItem decoration)
|
||||
{
|
||||
bool matches = decoration.Category == allowedCategory;
|
||||
Logging.Debug($"[StatueDecorationSlot] CanAccept: {decoration.Data?.DecorationName}, " +
|
||||
$"category={decoration.Category}, allowed={allowedCategory}, matches={matches}");
|
||||
return matches;
|
||||
}
|
||||
|
||||
return false;
|
||||
return base.CanAccept(draggable);
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
|
||||
@@ -122,7 +122,7 @@ namespace Minigames.StatueDressup.Utils
|
||||
Vector3 originalScale = transform.localScale;
|
||||
Vector3 pulseScale = originalScale * pulseAmount;
|
||||
|
||||
return Tween.LocalScale(transform, pulseScale, duration, 0f, Tween.EaseInOutSine, Tween.LoopType.PingPong);
|
||||
return Tween.LocalScale(transform, pulseScale, duration, 0f, Tween.EaseIn, Tween.LoopType.PingPong);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -235,7 +235,7 @@ namespace UI
|
||||
case "Quarry":
|
||||
currentUIMode = UIMode.Puzzle;
|
||||
break;
|
||||
case "DivingForPictures" or "CardQualityControl" or "BirdPoop":
|
||||
case "DivingForPictures" or "CardQualityControl" or "BirdPoop" or "StatueDecoration":
|
||||
currentUIMode = UIMode.Minigame;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -27,3 +27,5 @@ MonoBehaviour:
|
||||
obstacleMaxSpawnY: 3
|
||||
poopFallSpeed: 10
|
||||
poopDestroyYPosition: -20
|
||||
targetMoveSpeed: 4
|
||||
targetSpawnInterval: 3
|
||||
|
||||
@@ -35,19 +35,24 @@ MonoBehaviour:
|
||||
allowedItems:
|
||||
- {fileID: 11400000, guid: ecae2d83a5ab2a047a2733ebff607380, type: 2}
|
||||
forbiddenItems: []
|
||||
requiredItemCount: 0
|
||||
- slotItem: {fileID: 11400000, guid: f97b9e24d6dceb145b56426c1152ebeb, type: 2}
|
||||
allowedItems:
|
||||
- {fileID: 11400000, guid: ff4bbba87722023468a0f6395d1f96c7, type: 2}
|
||||
forbiddenItems: []
|
||||
requiredItemCount: 0
|
||||
- slotItem: {fileID: 11400000, guid: d28f5774afad9d14f823601707150700, type: 2}
|
||||
allowedItems:
|
||||
- {fileID: 11400000, guid: 6934dcb56c610c44da228f7f24ca13c9, type: 2}
|
||||
forbiddenItems: []
|
||||
requiredItemCount: 0
|
||||
- slotItem: {fileID: 11400000, guid: aaf36cd26cf74334e9c7db6c1b03b3fb, type: 2}
|
||||
allowedItems:
|
||||
- {fileID: 11400000, guid: c50330645a2b9d549aae3639bdfcea19, type: 2}
|
||||
forbiddenItems: []
|
||||
requiredItemCount: 0
|
||||
- slotItem: {fileID: 11400000, guid: c68dea945fecbf44094359769db04f31, type: 2}
|
||||
allowedItems:
|
||||
- {fileID: 11400000, guid: ab57c8237aac144439a18d69f56d36c6, type: 2}
|
||||
forbiddenItems: []
|
||||
requiredItemCount: 0
|
||||
|
||||
33
Assets/Settings/StatueDressupSettings.asset
Normal file
33
Assets/Settings/StatueDressupSettings.asset
Normal file
@@ -0,0 +1,33 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 4fcf232a64e34f489b874519cc96339e, type: 3}
|
||||
m_Name: StatueDressupSettings
|
||||
m_EditorClassIdentifier: AppleHillsScripts::Core.Settings.StatueDressupSettings
|
||||
defaultIconSize: {x: 64, y: 64}
|
||||
defaultAuthoredSize: {x: 128, y: 128}
|
||||
itemsPerPage: 10
|
||||
gridColumns: 2
|
||||
gridSpacing: {x: 10, y: 10}
|
||||
dragScaleTransitionDuration: 0.2
|
||||
returnToMenuDuration: 0.3
|
||||
minOverlapPercentage: 0.1
|
||||
hoverScaleMultiplier: 1.05
|
||||
hoverAnimationDuration: 0.2
|
||||
placementAnimationDuration: 0.15
|
||||
photoSaveKey: MrCementStatuePhoto
|
||||
photoQuality: 85
|
||||
captureFullScreen: 0
|
||||
cardsRewardCount: 3
|
||||
autoCompleteOnPhoto: 1
|
||||
enableStatePersistence: 1
|
||||
stateSaveKey: StatueDecorationState
|
||||
maxSavedDecorations: 50
|
||||
8
Assets/Settings/StatueDressupSettings.asset.meta
Normal file
8
Assets/Settings/StatueDressupSettings.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 359004e51663d6442b7d2b960d12b459
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user