From 86b6c22285280f23de110b6b8d7a6c3ab636f16f Mon Sep 17 00:00:00 2001 From: Jeonghyeon Ha Date: Tue, 2 Sep 2025 15:03:25 +0900 Subject: [PATCH 1/6] =?UTF-8?q?Z=20spacing=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Prop/Trashcan/Prop_Trashcan.prefab | 293 +++++++++++++++++- 1 file changed, 290 insertions(+), 3 deletions(-) diff --git a/Assets/_DDD/_Addressables/Environments/Prop/Trashcan/Prop_Trashcan.prefab b/Assets/_DDD/_Addressables/Environments/Prop/Trashcan/Prop_Trashcan.prefab index 9e4a2187b..559f313eb 100644 --- a/Assets/_DDD/_Addressables/Environments/Prop/Trashcan/Prop_Trashcan.prefab +++ b/Assets/_DDD/_Addressables/Environments/Prop/Trashcan/Prop_Trashcan.prefab @@ -12,7 +12,7 @@ GameObject: - component: {fileID: 8265494928291148343} - component: {fileID: 2739769706013484733} - component: {fileID: 5210806482330915924} - m_Layer: 0 + m_Layer: 7 m_Name: Spine GameObject (Trashcan) m_TagString: Untagged m_Icon: {fileID: 0} @@ -106,7 +106,7 @@ MonoBehaviour: initialFlipY: 0 updateWhenInvisible: 3 separatorSlotNames: [] - zSpacing: 0 + zSpacing: -0.0005 useClipping: 1 immutableTriangles: 0 pmaVertexColors: 1 @@ -138,10 +138,18 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: + - target: {fileID: 3406375906160120237, guid: 15c73973805ba914cbcc9929659591d9, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} - target: {fileID: 3406375906160120237, guid: 15c73973805ba914cbcc9929659591d9, type: 3} propertyPath: m_IsActive value: 0 objectReference: {fileID: 0} + - target: {fileID: 3511876579184512741, guid: 15c73973805ba914cbcc9929659591d9, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} - target: {fileID: 6689525833630355058, guid: 15c73973805ba914cbcc9929659591d9, type: 3} propertyPath: m_LocalScale.x value: 1 @@ -198,14 +206,293 @@ PrefabInstance: propertyPath: m_Name value: Prop_Trashcan objectReference: {fileID: 0} + - target: {fileID: 9211739394093953175, guid: 15c73973805ba914cbcc9929659591d9, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: - targetCorrespondingSourceObject: {fileID: 8881739536043914635, guid: 15c73973805ba914cbcc9929659591d9, type: 3} insertIndex: 0 addedObject: {fileID: 8327749831302471016} - m_AddedComponents: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 9211739394093953175, guid: 15c73973805ba914cbcc9929659591d9, type: 3} + insertIndex: -1 + addedObject: {fileID: 1306886132046416555} + - targetCorrespondingSourceObject: {fileID: 9211739394093953175, guid: 15c73973805ba914cbcc9929659591d9, type: 3} + insertIndex: -1 + addedObject: {fileID: 7977710813131547754} + - targetCorrespondingSourceObject: {fileID: 9211739394093953175, guid: 15c73973805ba914cbcc9929659591d9, type: 3} + insertIndex: -1 + addedObject: {fileID: 3620652486811179709} m_SourcePrefab: {fileID: 100100000, guid: 15c73973805ba914cbcc9929659591d9, type: 3} +--- !u!1 &6576439486311623297 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 9211739394093953175, guid: 15c73973805ba914cbcc9929659591d9, type: 3} + m_PrefabInstance: {fileID: 2635336900336278038} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1306886132046416555 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6576439486311623297} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 201f9e6d7ca7404baa9945950292a392, type: 3} + m_Name: + m_EditorClassIdentifier: + _interactionType: 16 + _executionParameters: + _holdTime: 1 + _displayParameters: + k__BackingField: + k__BackingField: + _interactionAvailableFlows: 2 + _aiInteractionPoints: [] + _autoInitialize: 1 +--- !u!114 &7977710813131547754 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6576439486311623297} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 888380afc233049ce9e618f9f36c8ba8, type: 3} + m_Name: + m_EditorClassIdentifier: + profile: {fileID: 0} + profileSync: 0 + camerasLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + effectGroup: 0 + effectTarget: {fileID: 0} + effectGroupLayer: + serializedVersion: 2 + m_Bits: 4294967295 + effectNameFilter: + effectNameUseRegEx: 0 + combineMeshes: 0 + alphaCutOff: 0 + cullBackFaces: 1 + padding: 0 + ignoreObjectVisibility: 0 + reflectionProbes: 0 + GPUInstancing: 1 + sortingPriority: 0 + optimizeSkinnedMesh: 1 + depthClip: 0 + cameraDistanceFade: 0 + cameraDistanceFadeNear: 0 + cameraDistanceFadeFar: 1000 + normalsOption: 0 + ignore: 0 + _highlighted: 0 + fadeInDuration: 0 + fadeOutDuration: 0 + flipY: 0 + constantWidth: 1 + extraCoveragePixels: 0 + minimumWidth: 0 + subMeshMask: -1 + overlay: 0 + overlayMode: 0 + overlayColor: {r: 1, g: 0.92156863, b: 0.015686275, a: 1} + overlayAnimationSpeed: 1 + overlayMinIntensity: 0.5 + overlayBlending: 1 + overlayTexture: {fileID: 0} + overlayTextureUVSpace: 0 + overlayTextureScale: 1 + overlayTextureScrolling: {x: 0, y: 0} + overlayVisibility: 0 + outline: 1 + outlineColor: {r: 0, g: 0, b: 0, a: 1} + outlineColorStyle: 0 + outlineGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + outlineGradientInLocalSpace: 0 + outlineWidth: 0.45 + outlineBlurPasses: 2 + outlineQuality: 3 + outlineEdgeMode: 0 + outlineEdgeThreshold: 0.995 + outlineSharpness: 1 + outlineDownsampling: 1 + outlineVisibility: 0 + glowBlendMode: 0 + outlineBlitDebug: 0 + outlineIndependent: 0 + outlineContourStyle: 0 + outlineMaskMode: 0 + glow: 0 + glowWidth: 0.4 + glowQuality: 3 + glowBlurMethod: 0 + glowDownsampling: 2 + glowHQColor: {r: 0.64, g: 1, b: 0, a: 1} + glowDithering: 1 + glowDitheringStyle: 0 + glowMagicNumber1: 0.75 + glowMagicNumber2: 0.5 + glowAnimationSpeed: 1 + glowVisibility: 0 + glowBlitDebug: 0 + glowBlendPasses: 1 + glowPasses: + - offset: 4 + alpha: 0.1 + color: {r: 0.64, g: 1, b: 0, a: 1} + - offset: 3 + alpha: 0.2 + color: {r: 0.64, g: 1, b: 0, a: 1} + - offset: 2 + alpha: 0.3 + color: {r: 0.64, g: 1, b: 0, a: 1} + - offset: 1 + alpha: 0.4 + color: {r: 0.64, g: 1, b: 0, a: 1} + glowMaskMode: 0 + innerGlow: 0 + innerGlowWidth: 1 + innerGlowColor: {r: 1, g: 1, b: 1, a: 1} + innerGlowBlendMode: 0 + innerGlowVisibility: 0 + targetFX: 0 + targetFXTexture: {fileID: 0} + targetFXColor: {r: 1, g: 1, b: 1, a: 1} + targetFXCenter: {fileID: 0} + targetFXRotationSpeed: 50 + targetFXInitialScale: 4 + targetFXEndScale: 1.5 + targetFXScaleToRenderBounds: 1 + targetFXUseEnclosingBounds: 0 + targetFXAlignToGround: 0 + targetFXOffset: {x: 0, y: 0, z: 0} + targetFXFadePower: 32 + targetFXGroundMaxDistance: 10 + targetFXGroundLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + targetFXTransitionDuration: 0.5 + targetFXStayDuration: 1.5 + targetFXVisibility: 1 + iconFX: 0 + iconFXMesh: {fileID: 0} + iconFXLightColor: {r: 1, g: 1, b: 1, a: 1} + iconFXDarkColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + iconFXCenter: {fileID: 0} + iconFXRotationSpeed: 50 + iconFXAnimationOption: 0 + iconFXAnimationAmount: 0.1 + iconFXAnimationSpeed: 3 + iconFXScale: 1 + iconFXScaleToRenderBounds: 0 + iconFXOffset: {x: 0, y: 1, z: 0} + iconFXTransitionDuration: 0.5 + iconFXStayDuration: 1.5 + seeThrough: 2 + seeThroughOccluderMask: + serializedVersion: 2 + m_Bits: 4294967295 + seeThroughOccluderThreshold: 0.3 + seeThroughOccluderMaskAccurate: 0 + seeThroughOccluderCheckInterval: 1 + seeThroughOccluderCheckIndividualObjects: 0 + seeThroughDepthOffset: 0 + seeThroughMaxDepth: 0 + seeThroughIntensity: 0.8 + seeThroughTintAlpha: 0.5 + seeThroughTintColor: {r: 1, g: 0, b: 0, a: 1} + seeThroughNoise: 1 + seeThroughBorder: 0 + seeThroughBorderColor: {r: 0, g: 0, b: 0, a: 1} + seeThroughBorderOnly: 0 + seeThroughBorderWidth: 0.45 + seeThroughOrdered: 0 + seeThroughTexture: {fileID: 0} + seeThroughTextureUVSpace: 0 + seeThroughTextureScale: 1 + seeThroughChildrenSortingMode: 0 + rmsCount: 2 + hitFxInitialIntensity: 0 + hitFxMode: 0 + hitFxFadeOutDuration: 0.25 + hitFxColor: {r: 1, g: 1, b: 1, a: 1} + hitFxRadius: 0.5 +--- !u!114 &3620652486811179709 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6576439486311623297} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f0feb22ab60a4d1885271637838f43b9, type: 3} + m_Name: + m_EditorClassIdentifier: + _availableStyle: + Color: {r: 1, g: 1, b: 1, a: 1} + Width: 1 + Opacity: 1 + _focusedStyle: + Color: {r: 1, g: 0.92156863, b: 0.015686275, a: 1} + Width: 1 + Opacity: 1 + _unavailableStyle: + Color: {r: 0.5, g: 0.5, b: 0.5, a: 1} + Width: 0.5 + Opacity: 1 + _objectiveStyle: + Color: {r: 0, g: 1, b: 1, a: 1} + Width: 1 + Opacity: 1 + _breathingSpeed: 2 + _breathingRange: 0.3 + _enableBreathingEffect: 1 + _alphaCutOff: 0.5 + _combineMeshes: 1 + _constantWidth: 1 + _outlineQuality: 2 + _outlineIndependent: 1 + _outlineBlurPasses: 1 + _outlineSharpness: 8 + _currentOutlineType: 0 + _currentOpacityMultiplier: 1 --- !u!4 &6904264511603437469 stripped Transform: m_CorrespondingSourceObject: {fileID: 8881739536043914635, guid: 15c73973805ba914cbcc9929659591d9, type: 3} From 190fa64f45a565bb6099765d1e0285436fd8a294 Mon Sep 17 00:00:00 2001 From: Jeonghyeon Ha Date: Tue, 2 Sep 2025 15:04:18 +0900 Subject: [PATCH 2/6] Add auto-generated backup file for Google Sheet data serialization --- .../_ScriptAssets/So/GoogleSheetManager.asset | 2 +- .../Assets/InteractionDataAsset.asset | 4 +- .../2025-09-02 14-09-11 by 하정현.json | 1831 +++++++++++++++++ .../2025-09-02 14-09-11 by 하정현.json.meta | 7 + .../2025-09-02 14-56-33 by 하정현.json | 1831 +++++++++++++++++ .../2025-09-02 14-56-33 by 하정현.json.meta | 7 + .../2025-09-02 15-00-45 by 하정현.json | 1831 +++++++++++++++++ .../2025-09-02 15-00-45 by 하정현.json.meta | 7 + .../Classes/InteractionDataAsset.cs | 2 +- .../Classes/InteractionDataEntry.cs | 9 +- .../AutoCreated/GoogleSheetJson.json | 58 +- .../Logs/GoogleSheetChangeLog.asset | 4 +- .../Restaurant/Event/Solvers/Misc.meta | 3 + .../Solvers/Misc/RestaurantTrashSolver.cs | 33 + .../Misc/RestaurantTrashSolver.cs.meta | 3 + 15 files changed, 5592 insertions(+), 40 deletions(-) create mode 100644 Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-09-02 14-09-11 by 하정현.json create mode 100644 Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-09-02 14-09-11 by 하정현.json.meta create mode 100644 Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-09-02 14-56-33 by 하정현.json create mode 100644 Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-09-02 14-56-33 by 하정현.json.meta create mode 100644 Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-09-02 15-00-45 by 하정현.json create mode 100644 Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-09-02 15-00-45 by 하정현.json.meta create mode 100644 Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc.meta create mode 100644 Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc/RestaurantTrashSolver.cs create mode 100644 Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc/RestaurantTrashSolver.cs.meta diff --git a/Assets/_DDD/_ScriptAssets/So/GoogleSheetManager.asset b/Assets/_DDD/_ScriptAssets/So/GoogleSheetManager.asset index f525afcaf..86e610c97 100644 --- a/Assets/_DDD/_ScriptAssets/So/GoogleSheetManager.asset +++ b/Assets/_DDD/_ScriptAssets/So/GoogleSheetManager.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cc9b0c9fb4def43f4853f80494507a479872298abab851afea3f652a87f6aba0 +oid sha256:efffb6a3f29bdfa73862ae775378abf898fb5c4dda33447b93512b4401ee42a5 size 564 diff --git a/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/Assets/InteractionDataAsset.asset b/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/Assets/InteractionDataAsset.asset index 646463380..8ac7a41dd 100644 --- a/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/Assets/InteractionDataAsset.asset +++ b/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/Assets/InteractionDataAsset.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1a339fac8f6bf6ae8208bfd2ccf91a698103d287379bd4c60202643aed065390 -size 1997 +oid sha256:9ccfe07b44ba3b0cd7d614d818ebe9a2e4ee68259942f2d9493c3014ec190d4b +size 1723 diff --git a/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-09-02 14-09-11 by 하정현.json b/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-09-02 14-09-11 by 하정현.json new file mode 100644 index 000000000..36082a4d7 --- /dev/null +++ b/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-09-02 14-09-11 by 하정현.json @@ -0,0 +1,1831 @@ +{ + "$개요": [ + { + "": "Sweet" + }, + { + "": "Sour" + }, + { + "": "Bitter" + }, + { + "": "Salty" + }, + { + "": "SuperHot" + }, + { + "": "Savory" + }, + { + "": "Mild" + }, + { + "": "Warm" + }, + { + "": "Addictive" + }, + { + "": "Fish" + }, + { + "": "Vegetable" + }, + { + "": "Meat" + }, + { + "": "" + }, + { + "": "Soda" + }, + { + "": "MiddleDegree" + }, + { + "": "LowDegree" + }, + { + "": "NoneDegree" + }, + { + "": "WoodFlavor" + }, + { + "": "FruitFlavor" + } + ], + "Test": [ + { + "Id:string": "식별번호", + "CustomerLimitCount": "손님 최대 수", + "Customers:string": "등장 손님", + "Test": 2352, + "Tests": "" + }, + { + "Id:string": "customer_pool_001", + "CustomerLimitCount": 4, + "Customers:string": "customer_001", + "Test": 0, + "Tests": "테스트, 테스트2" + }, + { + "Id:string": "customer_pool_002", + "CustomerLimitCount": 7, + "Customers:string": "customer_001 | customer_002", + "Test": 3, + "Tests": "1 , 2" + }, + { + "Id:string": "customer_pool_003", + "CustomerLimitCount": 9, + "Customers:string": "customer_001 | customer_002 | customer_003", + "Test": 2, + "Tests": "5, 23,253" + }, + { + "Id:string": "customer_pool_004", + "CustomerLimitCount": 3, + "Customers:string": "customer_001", + "Test": "", + "Tests": "" + }, + { + "Id:string": "customer_pool_005", + "CustomerLimitCount": 3, + "Customers:string": "customer_001", + "Test": "", + "Tests": 435 + }, + { + "Id:string": "customer_pool_006", + "CustomerLimitCount": 3, + "Customers:string": "customer_001", + "Test": "", + "Tests": "" + }, + { + "Id:string": "special_customer_pool_001", + "CustomerLimitCount": 1, + "Customers:string": "special_customer_001", + "Test": "", + "Tests": "111|234" + } + ], + "Test_view": [ + { + "Id:string": "식별번호", + "CustomerLimitCount": "손님 최대 수", + "Customers1": "등장 손님1", + "Customers2": "등장 손님2", + "Customers3": "등장 손님3", + "Customers4": "등장 손님4", + "Customers5": "등장 손님5", + "Customers6": "등장 손님6", + "Test": 2352, + "Tests1": "Tests1", + "Tests2": "Tests2", + "Tests3": "Tests3" + }, + { + "Id:string": "customer_pool_001", + "CustomerLimitCount": 4, + "Customers1": "customer_001", + "Customers2": "", + "Customers3": "", + "Customers4": "", + "Customers5": "", + "Customers6": "", + "Test": 0, + "Tests1": "테스트", + "Tests2": "테스트2", + "Tests3": "" + }, + { + "Id:string": "customer_pool_002", + "CustomerLimitCount": 7, + "Customers1": "customer_001", + "Customers2": "customer_002", + "Customers3": "", + "Customers4": "", + "Customers5": "", + "Customers6": "", + "Test": 3, + "Tests1": 1, + "Tests2": 2, + "Tests3": "" + }, + { + "Id:string": "customer_pool_003", + "CustomerLimitCount": 9, + "Customers1": "customer_001", + "Customers2": "customer_002", + "Customers3": "customer_003", + "Customers4": "", + "Customers5": "", + "Customers6": "", + "Test": 2, + "Tests1": 5, + "Tests2": 23, + "Tests3": 253 + }, + { + "Id:string": "customer_pool_004", + "CustomerLimitCount": 3, + "Customers1": "customer_001", + "Customers2": "", + "Customers3": "", + "Customers4": "", + "Customers5": "", + "Customers6": "", + "Test": "", + "Tests1": "", + "Tests2": "", + "Tests3": "" + }, + { + "Id:string": "customer_pool_005", + "CustomerLimitCount": 3, + "Customers1": "customer_001", + "Customers2": "", + "Customers3": "", + "Customers4": "", + "Customers5": "", + "Customers6": "", + "Test": "", + "Tests1": 435, + "Tests2": "", + "Tests3": "" + }, + { + "Id:string": "customer_pool_006", + "CustomerLimitCount": 3, + "Customers1": "customer_001", + "Customers2": "", + "Customers3": "", + "Customers4": "", + "Customers5": "", + "Customers6": "", + "Test": "", + "Tests1": "", + "Tests2": "", + "Tests3": "" + }, + { + "Id:string": "special_customer_pool_001", + "CustomerLimitCount": 1, + "Customers1": "special_customer_001", + "Customers2": "", + "Customers3": "", + "Customers4": "", + "Customers5": "", + "Customers6": "", + "Test": "", + "Tests1": 111, + "Tests2": 234, + "Tests3": "" + } + ], + "LevelData": [ + { + "Id:string": "식별번호", + "Level": "레벨 or 평판", + "Area:string": "등장 지역", + "CustomerPool:string": "일반 손님 풀", + "SpecialCustomerPool:string": "스페셜 손님 풀", + "SpawnType:NativeEnum": "스폰 타입", + "CustomerRespawnTime": "손님 리스폰 시간", + "Exp": "손님 1명당 경험치", + "OrderTime": "주문 대기 인내심 카운트 시간", + "WaitTime": "주문 인내심 카운트 시간", + "EatingTime": "식사 소요시간" + }, + { + "Id:string": "Level001", + "Level": 1, + "Area:string": "Area1", + "CustomerPool:string": "customer_pool_001", + "SpecialCustomerPool:string": "", + "SpawnType:NativeEnum": "Random", + "CustomerRespawnTime": 6, + "Exp": 13, + "OrderTime": 30, + "WaitTime": 60, + "EatingTime": 6 + }, + { + "Id:string": "Level002", + "Level": 2, + "Area:string": "Area1", + "CustomerPool:string": "customer_pool_002", + "SpecialCustomerPool:string": "special_customer_pool_001", + "SpawnType:NativeEnum": "Random", + "CustomerRespawnTime": 6, + "Exp": 13, + "OrderTime": 30, + "WaitTime": 60, + "EatingTime": 6 + }, + { + "Id:string": "Level003", + "Level": 3, + "Area:string": "Area1", + "CustomerPool:string": "customer_pool_003", + "SpecialCustomerPool:string": "special_customer_pool_001", + "SpawnType:NativeEnum": "Regular", + "CustomerRespawnTime": 6, + "Exp": 13, + "OrderTime": 30, + "WaitTime": 60, + "EatingTime": 6 + }, + { + "Id:string": "Level004", + "Level": 4, + "Area:string": "Area2", + "CustomerPool:string": "customer_pool_004", + "SpecialCustomerPool:string": "special_customer_pool_001", + "SpawnType:NativeEnum": "Regular", + "CustomerRespawnTime": 6, + "Exp": 13, + "OrderTime": 30, + "WaitTime": 60, + "EatingTime": 6 + }, + { + "Id:string": "Level005", + "Level": 5, + "Area:string": "Area2", + "CustomerPool:string": "customer_pool_005", + "SpecialCustomerPool:string": "special_customer_pool_001", + "SpawnType:NativeEnum": "Regular", + "CustomerRespawnTime": 6, + "Exp": 13, + "OrderTime": 30, + "WaitTime": 60, + "EatingTime": 6 + }, + { + "Id:string": "Level006", + "Level": 6, + "Area:string": "Area2", + "CustomerPool:string": "customer_pool_006", + "SpecialCustomerPool:string": "special_customer_pool_001", + "SpawnType:NativeEnum": "Random", + "CustomerRespawnTime": 6, + "Exp": 13, + "OrderTime": 30, + "WaitTime": 60, + "EatingTime": 6 + } + ], + "CustomerData": [ + { + "Id:string": "식별번호", + "CustomerType:NativeEnum": "손님 타입", + "#Name": "이름", + "SpineSkinKey": "스파인 스킨 키 값", + "FavoriteTastes": "선호 맛들" + }, + { + "Id:string": "customer_001", + "CustomerType:NativeEnum": "Normal", + "#Name": "유령1", + "SpineSkinKey": "Casper", + "FavoriteTastes": "" + }, + { + "Id:string": "customer_002", + "CustomerType:NativeEnum": "Normal", + "#Name": "유령2", + "SpineSkinKey": "CasperBlack", + "FavoriteTastes": "" + }, + { + "Id:string": "customer_003", + "CustomerType:NativeEnum": "Normal", + "#Name": "유령3", + "SpineSkinKey": "PumkinHead", + "FavoriteTastes": "" + }, + { + "Id:string": "special_customer_001", + "CustomerType:NativeEnum": "Special", + "#Name": "차이", + "SpineSkinKey": "", + "FavoriteTastes": "" + } + ], + "CustomerPoolData": [ + { + "Id:string": "식별번호", + "CustomerLimitCount": "손님 최대 수", + "Customers:string": "등장 손님들" + }, + { + "Id:string": "customer_pool_001", + "CustomerLimitCount": 4, + "Customers:string": "customer_001" + }, + { + "Id:string": "customer_pool_002", + "CustomerLimitCount": 7, + "Customers:string": "customer_001, customer_002" + }, + { + "Id:string": "customer_pool_003", + "CustomerLimitCount": 9, + "Customers:string": "customer_001, customer_002, customer_003" + }, + { + "Id:string": "customer_pool_004", + "CustomerLimitCount": 3, + "Customers:string": "customer_001" + }, + { + "Id:string": "customer_pool_005", + "CustomerLimitCount": 3, + "Customers:string": "customer_001" + }, + { + "Id:string": "customer_pool_006", + "CustomerLimitCount": 3, + "Customers:string": "customer_001" + }, + { + "Id:string": "special_customer_pool_001", + "CustomerLimitCount": 1, + "Customers:string": "special_customer_001" + } + ], + "ItemData": [ + { + "Id": "식별번호", + "ItemType:NativeEnum": "아이템타입1" + }, + { + "Id": "item_food_001", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_002", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_003", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_004", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_005", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_006", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_007", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_008", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_009", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_010", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_011", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_012", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_013", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_014", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_015", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_016", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_017", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_018", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_019", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_020", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_ingredient_001", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_002", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_003", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_004", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_005", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_006", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_007", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_008", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_009", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_010", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_011", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_012", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_013", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_014", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_015", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_016", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_017", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_018", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_019", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_020", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_021", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_022", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_023", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_environment_001", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_002", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_003", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_004", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_005", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_cookware_001", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_cookware_002", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_cookware_003", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_cookware_004", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_cookware_005", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_cookware_006", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_cookware_007", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_cookware_008", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_drink_001", + "ItemType:NativeEnum": "Drink" + }, + { + "Id": "item_drink_002", + "ItemType:NativeEnum": "Drink" + }, + { + "Id": "item_drink_003", + "ItemType:NativeEnum": "Drink" + }, + { + "Id": "item_drink_004", + "ItemType:NativeEnum": "Drink" + }, + { + "Id": "item_food_recipe_001", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_002", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_003", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_004", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_005", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_006", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_007", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_008", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_009", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_010", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_011", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_012", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_013", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_014", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_015", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_016", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_017", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_018", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_019", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_020", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_drink_recipe_001", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_drink_recipe_002", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_drink_recipe_003", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_drink_recipe_004", + "ItemType:NativeEnum": "Recipe" + } + ], + "RecipeData": [ + { + "Id:string": "식별ID", + "#Name": "이름", + "RecipeType:NativeEnum": "레시피타입", + "RecipeResult:string": "완성 메뉴" + }, + { + "Id:string": "item_food_recipe_001", + "#Name": "블루 스튜 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_001" + }, + { + "Id:string": "item_food_recipe_002", + "#Name": "햇빛 스튜 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_002" + }, + { + "Id:string": "item_food_recipe_003", + "#Name": "심해기억 스튜 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_003" + }, + { + "Id:string": "item_food_recipe_004", + "#Name": "치킨 굴라쉬 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_004" + }, + { + "Id:string": "item_food_recipe_005", + "#Name": "꿈해초 크로켓 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_005" + }, + { + "Id:string": "item_food_recipe_006", + "#Name": "선라이즈 당근카츠 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_006" + }, + { + "Id:string": "item_food_recipe_007", + "#Name": "미정", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_007" + }, + { + "Id:string": "item_food_recipe_008", + "#Name": "비늘치킨덕 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_008" + }, + { + "Id:string": "item_food_recipe_009", + "#Name": "화룡장어 구이 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_009" + }, + { + "Id:string": "item_food_recipe_010", + "#Name": "미정", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_010" + }, + { + "Id:string": "item_food_recipe_011", + "#Name": "바다의선물 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_011" + }, + { + "Id:string": "item_food_recipe_012", + "#Name": "유령새우회 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_012" + }, + { + "Id:string": "item_food_recipe_013", + "#Name": "비늘초무침 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_013" + }, + { + "Id:string": "item_food_recipe_014", + "#Name": "쫀징어 냉채 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_014" + }, + { + "Id:string": "item_food_recipe_015", + "#Name": "쫀징어링 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_015" + }, + { + "Id:string": "item_food_recipe_016", + "#Name": "꿈해파리 볶음 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_016" + }, + { + "Id:string": "item_food_recipe_017", + "#Name": "페퍼포칼립스 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_017" + }, + { + "Id:string": "item_food_recipe_018", + "#Name": "미정", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_018" + }, + { + "Id:string": "item_food_recipe_019", + "#Name": "미정", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_019" + }, + { + "Id:string": "item_food_recipe_020", + "#Name": "미정", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_020" + }, + { + "Id:string": "item_drink_recipe_001", + "#Name": "토마토 주스 레시피", + "RecipeType:NativeEnum": "DrinkRecipe", + "RecipeResult:string": "item_drink_001" + }, + { + "Id:string": "item_drink_recipe_002", + "#Name": "오렌지 주스 레시피", + "RecipeType:NativeEnum": "DrinkRecipe", + "RecipeResult:string": "item_drink_002" + }, + { + "Id:string": "item_drink_recipe_003", + "#Name": "여신의눈물 레시피", + "RecipeType:NativeEnum": "DrinkRecipe", + "RecipeResult:string": "item_drink_003" + }, + { + "Id:string": "item_drink_recipe_004", + "#Name": "라벨블루 레시피", + "RecipeType:NativeEnum": "DrinkRecipe", + "RecipeResult:string": "item_drink_004" + } + ], + "FoodData": [ + { + "Id:string": "식별ID", + "#Name": "이름", + "CookwareKey:string": "요리도구 키 값", + "CookTime:int": "요리시간", + "Price:int": "요리가격", + "IngredientKey1:string": "재료1", + "IngredientAmount1:string": "재료1 갯수", + "IngredientKey2:string": "재료2", + "IngredientAmount2:string": "재료2 갯수", + "IngredientKey3:string": "재료3", + "IngredientAmount3:string": "재료3 갯수", + "IngredientKey4:string": "재료4", + "IngredientAmount4:string": "재료4 갯수", + "TasteKey1:string": "맛 키1", + "TasteKey2:string": "맛 키2", + "TasteKey3:string": "맛 키3", + "TasteKey4:string": "맛 키4", + "TasteKey5:string": "맛 키5", + "TasteKey6:string": "맛 키6" + }, + { + "Id:string": "item_food_001", + "#Name": "블루 스튜", + "CookwareKey:string": "item_environment_cookware_001", + "CookTime:int": 7, + "Price:int": 10, + "IngredientKey1:string": "item_ingredient_001", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_002", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Sweet", + "TasteKey2:string": "Warm", + "TasteKey3:string": "Vegetable", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_002", + "#Name": "햇빛 스튜", + "CookwareKey:string": "item_environment_cookware_001", + "CookTime:int": 7, + "Price:int": 20, + "IngredientKey1:string": "item_ingredient_002", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_003", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Sweet", + "TasteKey2:string": "Bitter", + "TasteKey3:string": "Warm", + "TasteKey4:string": "Vegetable", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_003", + "#Name": "심해기억 스튜", + "CookwareKey:string": "item_environment_cookware_001", + "CookTime:int": 7, + "Price:int": 15, + "IngredientKey1:string": "item_ingredient_002", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_004", + "IngredientAmount2:string": 2, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Salty", + "TasteKey2:string": "Mild", + "TasteKey3:string": "Vegetable", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_004", + "#Name": "치킨 굴라쉬", + "CookwareKey:string": "item_environment_cookware_001", + "CookTime:int": 10, + "Price:int": 30, + "IngredientKey1:string": "item_ingredient_012", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_006", + "IngredientAmount2:string": 2, + "IngredientKey3:string": "item_ingredient_007", + "IngredientAmount3:string": 1, + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Salty", + "TasteKey2:string": "Sweet", + "TasteKey3:string": "Addictive", + "TasteKey4:string": "Vegetable", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_005", + "#Name": "꿈해초 크로켓", + "CookwareKey:string": "item_environment_cookware_002", + "CookTime:int": 5, + "Price:int": 20, + "IngredientKey1:string": "item_ingredient_007", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_008", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "item_ingredient_009", + "IngredientAmount3:string": 1, + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Sour", + "TasteKey2:string": "Salty", + "TasteKey3:string": "Mild", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_006", + "#Name": "선라이즈 당근카츠", + "CookwareKey:string": "item_environment_cookware_002", + "CookTime:int": 5, + "Price:int": 30, + "IngredientKey1:string": "item_ingredient_003", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_007", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "item_ingredient_009", + "IngredientAmount3:string": 1, + "IngredientKey4:string": "item_ingredient_010", + "IngredientAmount4:string": 1, + "TasteKey1:string": "Sweet", + "TasteKey2:string": "Sour", + "TasteKey3:string": "Warm", + "TasteKey4:string": "Savory", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_007", + "#Name": "미정", + "CookwareKey:string": "item_environment_cookware_002", + "CookTime:int": 5, + "Price:int": 30, + "IngredientKey1:string": "item_ingredient_011", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_008", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "", + "TasteKey2:string": "", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_008", + "#Name": "비늘치킨덕", + "CookwareKey:string": "item_environment_cookware_003", + "CookTime:int": 6, + "Price:int": 30, + "IngredientKey1:string": "item_ingredient_012", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_013", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "item_ingredient_007", + "IngredientAmount3:string": 1, + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Salty", + "TasteKey2:string": "Mild", + "TasteKey3:string": "Addictive", + "TasteKey4:string": "Meat", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_009", + "#Name": "화룡장어 구이", + "CookwareKey:string": "item_environment_cookware_003", + "CookTime:int": 6, + "Price:int": 15, + "IngredientKey1:string": "item_ingredient_014", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_015", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Sweet", + "TasteKey2:string": "Mild", + "TasteKey3:string": "SuperHot", + "TasteKey4:string": "Fish", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_010", + "#Name": "미정", + "CookwareKey:string": "item_environment_cookware_003", + "CookTime:int": 6, + "Price:int": 30, + "IngredientKey1:string": "item_ingredient_016", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_008", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "", + "TasteKey2:string": "", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_011", + "#Name": "바다의선물", + "CookwareKey:string": "item_environment_cookware_004", + "CookTime:int": 5, + "Price:int": 10, + "IngredientKey1:string": "item_ingredient_002", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_003", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Sweet", + "TasteKey2:string": "Mild", + "TasteKey3:string": "Vegetable", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_012", + "#Name": "유령새우회", + "CookwareKey:string": "item_environment_cookware_004", + "CookTime:int": 5, + "Price:int": 25, + "IngredientKey1:string": "item_ingredient_017", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_007", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "item_ingredient_004", + "IngredientAmount3:string": 1, + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Sweet", + "TasteKey2:string": "Salty", + "TasteKey3:string": "Addictive", + "TasteKey4:string": "Fish", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_013", + "#Name": "비늘초무침", + "CookwareKey:string": "item_environment_cookware_004", + "CookTime:int": 5, + "Price:int": 45, + "IngredientKey1:string": "item_ingredient_018", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_003", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "item_ingredient_007", + "IngredientAmount3:string": 1, + "IngredientKey4:string": "item_ingredient_010", + "IngredientAmount4:string": 2, + "TasteKey1:string": "Salty", + "TasteKey2:string": "Sour", + "TasteKey3:string": "Mild", + "TasteKey4:string": "Vegetable", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_014", + "#Name": "쫀징어 냉채", + "CookwareKey:string": "item_environment_cookware_004", + "CookTime:int": 5, + "Price:int": 15, + "IngredientKey1:string": "item_ingredient_011", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_003", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Salty", + "TasteKey2:string": "Vegetable", + "TasteKey3:string": "Fish", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_015", + "#Name": "쫀징어링", + "CookwareKey:string": "item_environment_cookware_005", + "CookTime:int": 8, + "Price:int": 25, + "IngredientKey1:string": "item_ingredient_011", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_007", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "item_ingredient_015", + "IngredientAmount3:string": 1, + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Salty", + "TasteKey2:string": "Sour", + "TasteKey3:string": "SuperHot", + "TasteKey4:string": "Fish", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_016", + "#Name": "꿈해파리 볶음", + "CookwareKey:string": "item_environment_cookware_005", + "CookTime:int": 6, + "Price:int": 15, + "IngredientKey1:string": "item_ingredient_019", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_004", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Salty", + "TasteKey2:string": "Sweet", + "TasteKey3:string": "Sour", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_017", + "#Name": "페퍼포칼립스", + "CookwareKey:string": "item_environment_cookware_005", + "CookTime:int": 6, + "Price:int": 25, + "IngredientKey1:string": "item_ingredient_012", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_015", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "item_ingredient_008", + "IngredientAmount3:string": 1, + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Sweet", + "TasteKey2:string": "SuperHot", + "TasteKey3:string": "Meat", + "TasteKey4:string": "Vegetable", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_018", + "#Name": "미정", + "CookwareKey:string": "item_environment_cookware_006", + "CookTime:int": 0, + "Price:int": 0, + "IngredientKey1:string": "", + "IngredientAmount1:string": "", + "IngredientKey2:string": "", + "IngredientAmount2:string": "", + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "", + "TasteKey2:string": "", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_019", + "#Name": "미정", + "CookwareKey:string": "item_environment_cookware_006", + "CookTime:int": 0, + "Price:int": 0, + "IngredientKey1:string": "", + "IngredientAmount1:string": "", + "IngredientKey2:string": "", + "IngredientAmount2:string": "", + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "", + "TasteKey2:string": "", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_020", + "#Name": "미정", + "CookwareKey:string": "item_environment_cookware_006", + "CookTime:int": 0, + "Price:int": 0, + "IngredientKey1:string": "", + "IngredientAmount1:string": "", + "IngredientKey2:string": "", + "IngredientAmount2:string": "", + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "", + "TasteKey2:string": "", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + } + ], + "DrinkData": [ + { + "Id:string": "식별ID", + "#Name": "이름", + "CookwareKey:string": "요리도구 키 값", + "CookTime:int": "요리시간", + "Price:int": "요리가격", + "IngredientKey1:string": "재료1", + "IngredientAmount1:string": "재료1 갯수", + "IngredientKey2:string": "재료2", + "IngredientAmount2:string": "재료2 갯수", + "IngredientKey3:string": "재료3", + "IngredientAmount3:string": "재료3 갯수", + "IngredientKey4:string": "재료4", + "IngredientAmount4:string": "재료4 갯수", + "TasteKey1:string": "맛 키1", + "TasteKey2:string": "맛 키2", + "TasteKey3:string": "맛 키3", + "TasteKey4:string": "맛 키4", + "TasteKey5:string": "맛 키5", + "TasteKey6:string": "맛 키6" + }, + { + "Id:string": "item_drink_001", + "#Name": "토마토 주스", + "CookwareKey:string": "item_environment_cookware_007", + "CookTime:int": 1, + "Price:int": 10, + "IngredientKey1:string": "item_ingredient_006", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_021", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "NoneDegree", + "TasteKey2:string": "Soda", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_drink_002", + "#Name": "오렌지 주스", + "CookwareKey:string": "item_environment_cookware_007", + "CookTime:int": 1, + "Price:int": 10, + "IngredientKey1:string": "item_ingredient_023", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_021", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "NoneDegree", + "TasteKey2:string": "Sour", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_drink_003", + "#Name": "여신의눈물", + "CookwareKey:string": "item_environment_cookware_008", + "CookTime:int": 3, + "Price:int": 10, + "IngredientKey1:string": "item_ingredient_008", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_022", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "LowDegree", + "TasteKey2:string": "WoodFlavor", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_drink_004", + "#Name": "라벨블루", + "CookwareKey:string": "item_environment_cookware_008", + "CookTime:int": 3, + "Price:int": 10, + "IngredientKey1:string": "item_ingredient_002", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_022", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "MiddleDegree", + "TasteKey2:string": "FruitFlavor", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + } + ], + "IngredientData": [ + { + "Id:string": "식별ID", + "#Name": "이름" + }, + { + "Id:string": "item_ingredient_001", + "#Name": "극락쌀" + }, + { + "Id:string": "item_ingredient_002", + "#Name": "블루애플" + }, + { + "Id:string": "item_ingredient_003", + "#Name": "햇빛당근" + }, + { + "Id:string": "item_ingredient_004", + "#Name": "꿈꾸는 해초" + }, + { + "Id:string": "item_ingredient_005", + "#Name": "미정" + }, + { + "Id:string": "item_ingredient_006", + "#Name": "토마토" + }, + { + "Id:string": "item_ingredient_007", + "#Name": "천일염" + }, + { + "Id:string": "item_ingredient_008", + "#Name": "눈물" + }, + { + "Id:string": "item_ingredient_009", + "#Name": "밀가루" + }, + { + "Id:string": "item_ingredient_010", + "#Name": "식초" + }, + { + "Id:string": "item_ingredient_011", + "#Name": "쫀징어" + }, + { + "Id:string": "item_ingredient_012", + "#Name": "치타닭 고기 " + }, + { + "Id:string": "item_ingredient_013", + "#Name": "비늘오리 고기" + }, + { + "Id:string": "item_ingredient_014", + "#Name": "뱀장어" + }, + { + "Id:string": "item_ingredient_015", + "#Name": "불꽃 고추" + }, + { + "Id:string": "item_ingredient_016", + "#Name": "유령상어" + }, + { + "Id:string": "item_ingredient_017", + "#Name": "유령새우" + }, + { + "Id:string": "item_ingredient_018", + "#Name": "비늘발고둥" + }, + { + "Id:string": "item_ingredient_019", + "#Name": "홍해파리" + }, + { + "Id:string": "item_ingredient_020", + "#Name": "미정" + }, + { + "Id:string": "item_ingredient_021", + "#Name": "탄산수" + }, + { + "Id:string": "item_ingredient_022", + "#Name": "위스키" + }, + { + "Id:string": "item_ingredient_023", + "#Name": "오렌지" + } + ], + "CookwareData": [ + { + "Id:string": "식별ID", + "#Name": "이름", + "CookwareType:NativeEnum": "요리도구 타입" + }, + { + "Id:string": "item_environment_cookware_001", + "#Name": "냄비", + "CookwareType:NativeEnum": "Pot" + }, + { + "Id:string": "item_environment_cookware_002", + "#Name": "튀김", + "CookwareType:NativeEnum": "Fryer" + }, + { + "Id:string": "item_environment_cookware_003", + "#Name": "화로", + "CookwareType:NativeEnum": "Brazier" + }, + { + "Id:string": "item_environment_cookware_004", + "#Name": "", + "CookwareType:NativeEnum": "CuttingBoard" + }, + { + "Id:string": "item_environment_cookware_005", + "#Name": "", + "CookwareType:NativeEnum": "Griddle" + }, + { + "Id:string": "item_environment_cookware_006", + "#Name": "", + "CookwareType:NativeEnum": "MagicOven" + }, + { + "Id:string": "item_environment_cookware_007", + "#Name": "", + "CookwareType:NativeEnum": "JuiceMachine" + }, + { + "Id:string": "item_environment_cookware_008", + "#Name": "", + "CookwareType:NativeEnum": "Barrel" + } + ], + "TasteData": [ + { + "Id:string": "식별ID", + "#Name": "이름", + "TasteType:NativeEnum": "맛 종류" + }, + { + "Id:string": "Sweet", + "#Name": "단맛", + "TasteType:NativeEnum": "Sweet" + }, + { + "Id:string": "Warm", + "#Name": "따뜻한", + "TasteType:NativeEnum": "Warm" + }, + { + "Id:string": "Vegetable", + "#Name": "채류", + "TasteType:NativeEnum": "Vegetable" + }, + { + "Id:string": "Bitter", + "#Name": "쓴맛", + "TasteType:NativeEnum": "Bitter" + }, + { + "Id:string": "Salty", + "#Name": "짠맛", + "TasteType:NativeEnum": "Salty" + }, + { + "Id:string": "Mild", + "#Name": "담백한", + "TasteType:NativeEnum": "Mild" + }, + { + "Id:string": "Addictive", + "#Name": "중독적인", + "TasteType:NativeEnum": "Addictive" + }, + { + "Id:string": "Sour", + "#Name": "신맛", + "TasteType:NativeEnum": "Sour" + }, + { + "Id:string": "Savory", + "#Name": "고소한", + "TasteType:NativeEnum": "Savory" + }, + { + "Id:string": "Meat", + "#Name": "육류", + "TasteType:NativeEnum": "Meat" + }, + { + "Id:string": "SuperHot", + "#Name": "핵불닭맛", + "TasteType:NativeEnum": "SuperHot" + }, + { + "Id:string": "Fish", + "#Name": "어류", + "TasteType:NativeEnum": "Fish" + }, + { + "Id:string": "NoneDegree", + "#Name": "도수가없는", + "TasteType:NativeEnum": "NoneDegree" + }, + { + "Id:string": "Soda", + "#Name": "탄산", + "TasteType:NativeEnum": "Soda" + }, + { + "Id:string": "LowDegree", + "#Name": "도수가낮은", + "TasteType:NativeEnum": "LowDegree" + }, + { + "Id:string": "WoodFlavor", + "#Name": "나무향", + "TasteType:NativeEnum": "WoodFlavor" + }, + { + "Id:string": "MiddleDegree", + "#Name": "도수가보통인", + "TasteType:NativeEnum": "MiddleDegree" + }, + { + "Id:string": "FruitFlavor", + "#Name": "과일향", + "TasteType:NativeEnum": "FruitFlavor" + } + ], + "EnvironmentData": [ + { + "Id": "식별번호", + "InteractionType:NativeEnum": "인터랙션타입", + "RendererType:Enum": "렌더러 타입", + "IsTrigger:int": "트리거 여부", + "SkeletonDataName:string": "스켈레톤 애니메이션 에셋 이름", + "SkinName:string": "스파인 스킨 이름", + "DefaultAnimationName:string": "", + "SpriteKey:string": "SpriteAtlas 키 값", + "Size:float": "유니티 내의 이미지 크기" + }, + { + "Id": "item_environment_001", + "InteractionType:NativeEnum": "None", + "RendererType:Enum": "Sprite", + "IsTrigger:int": 0, + "SkeletonDataName:string": "", + "SkinName:string": "", + "DefaultAnimationName:string": "", + "SpriteKey:string": "Barrel01", + "Size:float": 1 + }, + { + "Id": "item_environment_002", + "InteractionType:NativeEnum": "None", + "RendererType:Enum": "Spine", + "IsTrigger:int": 1, + "SkeletonDataName:string": "Coral_SkeletonData", + "SkinName:string": "Coral01", + "DefaultAnimationName:string": "Coral01/Idle", + "SpriteKey:string": "", + "Size:float": 1 + }, + { + "Id": "item_environment_003", + "InteractionType:NativeEnum": "None", + "RendererType:Enum": "Spine", + "IsTrigger:int": 1, + "SkeletonDataName:string": "Coral_SkeletonData", + "SkinName:string": "Coral02", + "DefaultAnimationName:string": "Coral02/Idle", + "SpriteKey:string": "", + "Size:float": 1 + }, + { + "Id": "item_environment_004", + "InteractionType:NativeEnum": "None", + "RendererType:Enum": "Spine", + "IsTrigger:int": 1, + "SkeletonDataName:string": "SummerGrass01_SkeletonData", + "SkinName:string": "default", + "DefaultAnimationName:string": "Normal", + "SpriteKey:string": "", + "Size:float": 0.3 + }, + { + "Id": "item_environment_005", + "InteractionType:NativeEnum": "RestaurantManagement", + "RendererType:Enum": "Spine", + "IsTrigger:int": 0, + "SkeletonDataName:string": "", + "SkinName:string": "", + "DefaultAnimationName:string": "", + "SpriteKey:string": "", + "Size:float": 1 + } + ], + "InteractionData": [ + { + "Id": "식별ID", + "#설명": "설명", + "UnparsedInteractionType:string": "파싱 전 타입", + "DefaultMessageKey:string": "상호작용 기본 현지화 키 값", + "ConditionalMessageKey:string": "상호작용 예외처리 현지화 키 값" + }, + { + "Id": "interaction_001", + "#설명": "준비단계 - 메뉴 ui 오픈", + "UnparsedInteractionType:string": "RestaurantManagement.OpenManagementUi", + "DefaultMessageKey:string": "interaction_001_default", + "ConditionalMessageKey:string": "" + }, + { + "Id": "interaction_002", + "#설명": "준비단계 - 레스토랑 오픈", + "UnparsedInteractionType:string": "RestaurantManagement.RunRestaurant", + "DefaultMessageKey:string": "interaction_002_default", + "ConditionalMessageKey:string": "interaction_002_failure" + }, + { + "Id": "interaction_003", + "#설명": "운영중 - 손님 주문 받기", + "UnparsedInteractionType:string": "RestaurantOrder.Order", + "DefaultMessageKey:string": "interaction_003_default", + "ConditionalMessageKey:string": "" + }, + { + "Id": "interaction_004", + "#설명": "운영중 - 요리 서빙하기", + "UnparsedInteractionType:string": "RestaurantOrder.Serve", + "DefaultMessageKey:string": "interaction_004_default", + "ConditionalMessageKey:string": "" + }, + { + "Id": "interaction_005", + "#설명": "운영중 - 테이블 치우기", + "UnparsedInteractionType:string": "RestaurantOrder.TableDirty", + "DefaultMessageKey:string": "interaction_005_default", + "ConditionalMessageKey:string": "" + }, + { + "Id": "interaction_006", + "#설명": "운영중 - 요리도구를 통해 요리 ui 오픈", + "UnparsedInteractionType:string": "RestaurantCook.StartCooking", + "DefaultMessageKey:string": "interaction_006_default", + "ConditionalMessageKey:string": "" + }, + { + "Id": "interaction_007", + "#설명": "운영중 - 청소하기", + "UnparsedInteractionType:string": "RestaurantOrder.FloorDirty", + "DefaultMessageKey:string": "interaction_007_default", + "ConditionalMessageKey:string": "" + }, + { + "Id": "interaction_008", + "#설명": "운영중 - 음식을 서빙 테이블에 놓기", + "UnparsedInteractionType:string": "RestaurantOrder.ServingTable", + "DefaultMessageKey:string": "interaction_008_default", + "ConditionalMessageKey:string": "" + }, + { + "Id": "interaction_009", + "#설명": "운영중 - 음식과 빈그릇 버리기", + "UnparsedInteractionType:string": "RestaurantTrash", + "DefaultMessageKey:string": "interaction_009_default", + "ConditionalMessageKey:string": "" + } + ] +} \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-09-02 14-09-11 by 하정현.json.meta b/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-09-02 14-09-11 by 하정현.json.meta new file mode 100644 index 000000000..4d7778e63 --- /dev/null +++ b/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-09-02 14-09-11 by 하정현.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3ccf6fe11034f47bb919858425c88639 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-09-02 14-56-33 by 하정현.json b/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-09-02 14-56-33 by 하정현.json new file mode 100644 index 000000000..a89b7649c --- /dev/null +++ b/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-09-02 14-56-33 by 하정현.json @@ -0,0 +1,1831 @@ +{ + "$개요": [ + { + "": "Sweet" + }, + { + "": "Sour" + }, + { + "": "Bitter" + }, + { + "": "Salty" + }, + { + "": "SuperHot" + }, + { + "": "Savory" + }, + { + "": "Mild" + }, + { + "": "Warm" + }, + { + "": "Addictive" + }, + { + "": "Fish" + }, + { + "": "Vegetable" + }, + { + "": "Meat" + }, + { + "": "" + }, + { + "": "Soda" + }, + { + "": "MiddleDegree" + }, + { + "": "LowDegree" + }, + { + "": "NoneDegree" + }, + { + "": "WoodFlavor" + }, + { + "": "FruitFlavor" + } + ], + "Test": [ + { + "Id:string": "식별번호", + "CustomerLimitCount": "손님 최대 수", + "Customers:string": "등장 손님", + "Test": 2352, + "Tests": "" + }, + { + "Id:string": "customer_pool_001", + "CustomerLimitCount": 4, + "Customers:string": "customer_001", + "Test": 0, + "Tests": "테스트, 테스트2" + }, + { + "Id:string": "customer_pool_002", + "CustomerLimitCount": 7, + "Customers:string": "customer_001 | customer_002", + "Test": 3, + "Tests": "1 , 2" + }, + { + "Id:string": "customer_pool_003", + "CustomerLimitCount": 9, + "Customers:string": "customer_001 | customer_002 | customer_003", + "Test": 2, + "Tests": "5, 23,253" + }, + { + "Id:string": "customer_pool_004", + "CustomerLimitCount": 3, + "Customers:string": "customer_001", + "Test": "", + "Tests": "" + }, + { + "Id:string": "customer_pool_005", + "CustomerLimitCount": 3, + "Customers:string": "customer_001", + "Test": "", + "Tests": 435 + }, + { + "Id:string": "customer_pool_006", + "CustomerLimitCount": 3, + "Customers:string": "customer_001", + "Test": "", + "Tests": "" + }, + { + "Id:string": "special_customer_pool_001", + "CustomerLimitCount": 1, + "Customers:string": "special_customer_001", + "Test": "", + "Tests": "111|234" + } + ], + "Test_view": [ + { + "Id:string": "식별번호", + "CustomerLimitCount": "손님 최대 수", + "Customers1": "등장 손님1", + "Customers2": "등장 손님2", + "Customers3": "등장 손님3", + "Customers4": "등장 손님4", + "Customers5": "등장 손님5", + "Customers6": "등장 손님6", + "Test": 2352, + "Tests1": "Tests1", + "Tests2": "Tests2", + "Tests3": "Tests3" + }, + { + "Id:string": "customer_pool_001", + "CustomerLimitCount": 4, + "Customers1": "customer_001", + "Customers2": "", + "Customers3": "", + "Customers4": "", + "Customers5": "", + "Customers6": "", + "Test": 0, + "Tests1": "테스트", + "Tests2": "테스트2", + "Tests3": "" + }, + { + "Id:string": "customer_pool_002", + "CustomerLimitCount": 7, + "Customers1": "customer_001", + "Customers2": "customer_002", + "Customers3": "", + "Customers4": "", + "Customers5": "", + "Customers6": "", + "Test": 3, + "Tests1": 1, + "Tests2": 2, + "Tests3": "" + }, + { + "Id:string": "customer_pool_003", + "CustomerLimitCount": 9, + "Customers1": "customer_001", + "Customers2": "customer_002", + "Customers3": "customer_003", + "Customers4": "", + "Customers5": "", + "Customers6": "", + "Test": 2, + "Tests1": 5, + "Tests2": 23, + "Tests3": 253 + }, + { + "Id:string": "customer_pool_004", + "CustomerLimitCount": 3, + "Customers1": "customer_001", + "Customers2": "", + "Customers3": "", + "Customers4": "", + "Customers5": "", + "Customers6": "", + "Test": "", + "Tests1": "", + "Tests2": "", + "Tests3": "" + }, + { + "Id:string": "customer_pool_005", + "CustomerLimitCount": 3, + "Customers1": "customer_001", + "Customers2": "", + "Customers3": "", + "Customers4": "", + "Customers5": "", + "Customers6": "", + "Test": "", + "Tests1": 435, + "Tests2": "", + "Tests3": "" + }, + { + "Id:string": "customer_pool_006", + "CustomerLimitCount": 3, + "Customers1": "customer_001", + "Customers2": "", + "Customers3": "", + "Customers4": "", + "Customers5": "", + "Customers6": "", + "Test": "", + "Tests1": "", + "Tests2": "", + "Tests3": "" + }, + { + "Id:string": "special_customer_pool_001", + "CustomerLimitCount": 1, + "Customers1": "special_customer_001", + "Customers2": "", + "Customers3": "", + "Customers4": "", + "Customers5": "", + "Customers6": "", + "Test": "", + "Tests1": 111, + "Tests2": 234, + "Tests3": "" + } + ], + "LevelData": [ + { + "Id:string": "식별번호", + "Level": "레벨 or 평판", + "Area:string": "등장 지역", + "CustomerPool:string": "일반 손님 풀", + "SpecialCustomerPool:string": "스페셜 손님 풀", + "SpawnType:NativeEnum": "스폰 타입", + "CustomerRespawnTime": "손님 리스폰 시간", + "Exp": "손님 1명당 경험치", + "OrderTime": "주문 대기 인내심 카운트 시간", + "WaitTime": "주문 인내심 카운트 시간", + "EatingTime": "식사 소요시간" + }, + { + "Id:string": "Level001", + "Level": 1, + "Area:string": "Area1", + "CustomerPool:string": "customer_pool_001", + "SpecialCustomerPool:string": "", + "SpawnType:NativeEnum": "Random", + "CustomerRespawnTime": 6, + "Exp": 13, + "OrderTime": 30, + "WaitTime": 60, + "EatingTime": 6 + }, + { + "Id:string": "Level002", + "Level": 2, + "Area:string": "Area1", + "CustomerPool:string": "customer_pool_002", + "SpecialCustomerPool:string": "special_customer_pool_001", + "SpawnType:NativeEnum": "Random", + "CustomerRespawnTime": 6, + "Exp": 13, + "OrderTime": 30, + "WaitTime": 60, + "EatingTime": 6 + }, + { + "Id:string": "Level003", + "Level": 3, + "Area:string": "Area1", + "CustomerPool:string": "customer_pool_003", + "SpecialCustomerPool:string": "special_customer_pool_001", + "SpawnType:NativeEnum": "Regular", + "CustomerRespawnTime": 6, + "Exp": 13, + "OrderTime": 30, + "WaitTime": 60, + "EatingTime": 6 + }, + { + "Id:string": "Level004", + "Level": 4, + "Area:string": "Area2", + "CustomerPool:string": "customer_pool_004", + "SpecialCustomerPool:string": "special_customer_pool_001", + "SpawnType:NativeEnum": "Regular", + "CustomerRespawnTime": 6, + "Exp": 13, + "OrderTime": 30, + "WaitTime": 60, + "EatingTime": 6 + }, + { + "Id:string": "Level005", + "Level": 5, + "Area:string": "Area2", + "CustomerPool:string": "customer_pool_005", + "SpecialCustomerPool:string": "special_customer_pool_001", + "SpawnType:NativeEnum": "Regular", + "CustomerRespawnTime": 6, + "Exp": 13, + "OrderTime": 30, + "WaitTime": 60, + "EatingTime": 6 + }, + { + "Id:string": "Level006", + "Level": 6, + "Area:string": "Area2", + "CustomerPool:string": "customer_pool_006", + "SpecialCustomerPool:string": "special_customer_pool_001", + "SpawnType:NativeEnum": "Random", + "CustomerRespawnTime": 6, + "Exp": 13, + "OrderTime": 30, + "WaitTime": 60, + "EatingTime": 6 + } + ], + "CustomerData": [ + { + "Id:string": "식별번호", + "CustomerType:NativeEnum": "손님 타입", + "#Name": "이름", + "SpineSkinKey": "스파인 스킨 키 값", + "FavoriteTastes": "선호 맛들" + }, + { + "Id:string": "customer_001", + "CustomerType:NativeEnum": "Normal", + "#Name": "유령1", + "SpineSkinKey": "Casper", + "FavoriteTastes": "" + }, + { + "Id:string": "customer_002", + "CustomerType:NativeEnum": "Normal", + "#Name": "유령2", + "SpineSkinKey": "CasperBlack", + "FavoriteTastes": "" + }, + { + "Id:string": "customer_003", + "CustomerType:NativeEnum": "Normal", + "#Name": "유령3", + "SpineSkinKey": "PumkinHead", + "FavoriteTastes": "" + }, + { + "Id:string": "special_customer_001", + "CustomerType:NativeEnum": "Special", + "#Name": "차이", + "SpineSkinKey": "", + "FavoriteTastes": "" + } + ], + "CustomerPoolData": [ + { + "Id:string": "식별번호", + "CustomerLimitCount": "손님 최대 수", + "Customers:string": "등장 손님들" + }, + { + "Id:string": "customer_pool_001", + "CustomerLimitCount": 4, + "Customers:string": "customer_001" + }, + { + "Id:string": "customer_pool_002", + "CustomerLimitCount": 7, + "Customers:string": "customer_001, customer_002" + }, + { + "Id:string": "customer_pool_003", + "CustomerLimitCount": 9, + "Customers:string": "customer_001, customer_002, customer_003" + }, + { + "Id:string": "customer_pool_004", + "CustomerLimitCount": 3, + "Customers:string": "customer_001" + }, + { + "Id:string": "customer_pool_005", + "CustomerLimitCount": 3, + "Customers:string": "customer_001" + }, + { + "Id:string": "customer_pool_006", + "CustomerLimitCount": 3, + "Customers:string": "customer_001" + }, + { + "Id:string": "special_customer_pool_001", + "CustomerLimitCount": 1, + "Customers:string": "special_customer_001" + } + ], + "ItemData": [ + { + "Id": "식별번호", + "ItemType:NativeEnum": "아이템타입1" + }, + { + "Id": "item_food_001", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_002", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_003", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_004", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_005", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_006", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_007", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_008", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_009", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_010", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_011", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_012", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_013", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_014", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_015", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_016", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_017", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_018", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_019", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_020", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_ingredient_001", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_002", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_003", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_004", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_005", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_006", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_007", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_008", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_009", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_010", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_011", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_012", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_013", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_014", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_015", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_016", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_017", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_018", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_019", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_020", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_021", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_022", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_023", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_environment_001", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_002", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_003", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_004", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_005", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_cookware_001", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_cookware_002", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_cookware_003", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_cookware_004", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_cookware_005", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_cookware_006", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_cookware_007", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_cookware_008", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_drink_001", + "ItemType:NativeEnum": "Drink" + }, + { + "Id": "item_drink_002", + "ItemType:NativeEnum": "Drink" + }, + { + "Id": "item_drink_003", + "ItemType:NativeEnum": "Drink" + }, + { + "Id": "item_drink_004", + "ItemType:NativeEnum": "Drink" + }, + { + "Id": "item_food_recipe_001", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_002", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_003", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_004", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_005", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_006", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_007", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_008", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_009", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_010", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_011", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_012", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_013", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_014", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_015", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_016", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_017", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_018", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_019", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_020", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_drink_recipe_001", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_drink_recipe_002", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_drink_recipe_003", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_drink_recipe_004", + "ItemType:NativeEnum": "Recipe" + } + ], + "RecipeData": [ + { + "Id:string": "식별ID", + "#Name": "이름", + "RecipeType:NativeEnum": "레시피타입", + "RecipeResult:string": "완성 메뉴" + }, + { + "Id:string": "item_food_recipe_001", + "#Name": "블루 스튜 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_001" + }, + { + "Id:string": "item_food_recipe_002", + "#Name": "햇빛 스튜 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_002" + }, + { + "Id:string": "item_food_recipe_003", + "#Name": "심해기억 스튜 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_003" + }, + { + "Id:string": "item_food_recipe_004", + "#Name": "치킨 굴라쉬 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_004" + }, + { + "Id:string": "item_food_recipe_005", + "#Name": "꿈해초 크로켓 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_005" + }, + { + "Id:string": "item_food_recipe_006", + "#Name": "선라이즈 당근카츠 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_006" + }, + { + "Id:string": "item_food_recipe_007", + "#Name": "미정", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_007" + }, + { + "Id:string": "item_food_recipe_008", + "#Name": "비늘치킨덕 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_008" + }, + { + "Id:string": "item_food_recipe_009", + "#Name": "화룡장어 구이 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_009" + }, + { + "Id:string": "item_food_recipe_010", + "#Name": "미정", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_010" + }, + { + "Id:string": "item_food_recipe_011", + "#Name": "바다의선물 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_011" + }, + { + "Id:string": "item_food_recipe_012", + "#Name": "유령새우회 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_012" + }, + { + "Id:string": "item_food_recipe_013", + "#Name": "비늘초무침 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_013" + }, + { + "Id:string": "item_food_recipe_014", + "#Name": "쫀징어 냉채 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_014" + }, + { + "Id:string": "item_food_recipe_015", + "#Name": "쫀징어링 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_015" + }, + { + "Id:string": "item_food_recipe_016", + "#Name": "꿈해파리 볶음 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_016" + }, + { + "Id:string": "item_food_recipe_017", + "#Name": "페퍼포칼립스 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_017" + }, + { + "Id:string": "item_food_recipe_018", + "#Name": "미정", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_018" + }, + { + "Id:string": "item_food_recipe_019", + "#Name": "미정", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_019" + }, + { + "Id:string": "item_food_recipe_020", + "#Name": "미정", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_020" + }, + { + "Id:string": "item_drink_recipe_001", + "#Name": "토마토 주스 레시피", + "RecipeType:NativeEnum": "DrinkRecipe", + "RecipeResult:string": "item_drink_001" + }, + { + "Id:string": "item_drink_recipe_002", + "#Name": "오렌지 주스 레시피", + "RecipeType:NativeEnum": "DrinkRecipe", + "RecipeResult:string": "item_drink_002" + }, + { + "Id:string": "item_drink_recipe_003", + "#Name": "여신의눈물 레시피", + "RecipeType:NativeEnum": "DrinkRecipe", + "RecipeResult:string": "item_drink_003" + }, + { + "Id:string": "item_drink_recipe_004", + "#Name": "라벨블루 레시피", + "RecipeType:NativeEnum": "DrinkRecipe", + "RecipeResult:string": "item_drink_004" + } + ], + "FoodData": [ + { + "Id:string": "식별ID", + "#Name": "이름", + "CookwareKey:string": "요리도구 키 값", + "CookTime:int": "요리시간", + "Price:int": "요리가격", + "IngredientKey1:string": "재료1", + "IngredientAmount1:string": "재료1 갯수", + "IngredientKey2:string": "재료2", + "IngredientAmount2:string": "재료2 갯수", + "IngredientKey3:string": "재료3", + "IngredientAmount3:string": "재료3 갯수", + "IngredientKey4:string": "재료4", + "IngredientAmount4:string": "재료4 갯수", + "TasteKey1:string": "맛 키1", + "TasteKey2:string": "맛 키2", + "TasteKey3:string": "맛 키3", + "TasteKey4:string": "맛 키4", + "TasteKey5:string": "맛 키5", + "TasteKey6:string": "맛 키6" + }, + { + "Id:string": "item_food_001", + "#Name": "블루 스튜", + "CookwareKey:string": "item_environment_cookware_001", + "CookTime:int": 7, + "Price:int": 10, + "IngredientKey1:string": "item_ingredient_001", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_002", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Sweet", + "TasteKey2:string": "Warm", + "TasteKey3:string": "Vegetable", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_002", + "#Name": "햇빛 스튜", + "CookwareKey:string": "item_environment_cookware_001", + "CookTime:int": 7, + "Price:int": 20, + "IngredientKey1:string": "item_ingredient_002", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_003", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Sweet", + "TasteKey2:string": "Bitter", + "TasteKey3:string": "Warm", + "TasteKey4:string": "Vegetable", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_003", + "#Name": "심해기억 스튜", + "CookwareKey:string": "item_environment_cookware_001", + "CookTime:int": 7, + "Price:int": 15, + "IngredientKey1:string": "item_ingredient_002", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_004", + "IngredientAmount2:string": 2, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Salty", + "TasteKey2:string": "Mild", + "TasteKey3:string": "Vegetable", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_004", + "#Name": "치킨 굴라쉬", + "CookwareKey:string": "item_environment_cookware_001", + "CookTime:int": 10, + "Price:int": 30, + "IngredientKey1:string": "item_ingredient_012", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_006", + "IngredientAmount2:string": 2, + "IngredientKey3:string": "item_ingredient_007", + "IngredientAmount3:string": 1, + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Salty", + "TasteKey2:string": "Sweet", + "TasteKey3:string": "Addictive", + "TasteKey4:string": "Vegetable", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_005", + "#Name": "꿈해초 크로켓", + "CookwareKey:string": "item_environment_cookware_002", + "CookTime:int": 5, + "Price:int": 20, + "IngredientKey1:string": "item_ingredient_007", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_008", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "item_ingredient_009", + "IngredientAmount3:string": 1, + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Sour", + "TasteKey2:string": "Salty", + "TasteKey3:string": "Mild", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_006", + "#Name": "선라이즈 당근카츠", + "CookwareKey:string": "item_environment_cookware_002", + "CookTime:int": 5, + "Price:int": 30, + "IngredientKey1:string": "item_ingredient_003", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_007", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "item_ingredient_009", + "IngredientAmount3:string": 1, + "IngredientKey4:string": "item_ingredient_010", + "IngredientAmount4:string": 1, + "TasteKey1:string": "Sweet", + "TasteKey2:string": "Sour", + "TasteKey3:string": "Warm", + "TasteKey4:string": "Savory", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_007", + "#Name": "미정", + "CookwareKey:string": "item_environment_cookware_002", + "CookTime:int": 5, + "Price:int": 30, + "IngredientKey1:string": "item_ingredient_011", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_008", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "", + "TasteKey2:string": "", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_008", + "#Name": "비늘치킨덕", + "CookwareKey:string": "item_environment_cookware_003", + "CookTime:int": 6, + "Price:int": 30, + "IngredientKey1:string": "item_ingredient_012", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_013", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "item_ingredient_007", + "IngredientAmount3:string": 1, + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Salty", + "TasteKey2:string": "Mild", + "TasteKey3:string": "Addictive", + "TasteKey4:string": "Meat", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_009", + "#Name": "화룡장어 구이", + "CookwareKey:string": "item_environment_cookware_003", + "CookTime:int": 6, + "Price:int": 15, + "IngredientKey1:string": "item_ingredient_014", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_015", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Sweet", + "TasteKey2:string": "Mild", + "TasteKey3:string": "SuperHot", + "TasteKey4:string": "Fish", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_010", + "#Name": "미정", + "CookwareKey:string": "item_environment_cookware_003", + "CookTime:int": 6, + "Price:int": 30, + "IngredientKey1:string": "item_ingredient_016", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_008", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "", + "TasteKey2:string": "", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_011", + "#Name": "바다의선물", + "CookwareKey:string": "item_environment_cookware_004", + "CookTime:int": 5, + "Price:int": 10, + "IngredientKey1:string": "item_ingredient_002", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_003", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Sweet", + "TasteKey2:string": "Mild", + "TasteKey3:string": "Vegetable", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_012", + "#Name": "유령새우회", + "CookwareKey:string": "item_environment_cookware_004", + "CookTime:int": 5, + "Price:int": 25, + "IngredientKey1:string": "item_ingredient_017", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_007", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "item_ingredient_004", + "IngredientAmount3:string": 1, + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Sweet", + "TasteKey2:string": "Salty", + "TasteKey3:string": "Addictive", + "TasteKey4:string": "Fish", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_013", + "#Name": "비늘초무침", + "CookwareKey:string": "item_environment_cookware_004", + "CookTime:int": 5, + "Price:int": 45, + "IngredientKey1:string": "item_ingredient_018", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_003", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "item_ingredient_007", + "IngredientAmount3:string": 1, + "IngredientKey4:string": "item_ingredient_010", + "IngredientAmount4:string": 2, + "TasteKey1:string": "Salty", + "TasteKey2:string": "Sour", + "TasteKey3:string": "Mild", + "TasteKey4:string": "Vegetable", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_014", + "#Name": "쫀징어 냉채", + "CookwareKey:string": "item_environment_cookware_004", + "CookTime:int": 5, + "Price:int": 15, + "IngredientKey1:string": "item_ingredient_011", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_003", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Salty", + "TasteKey2:string": "Vegetable", + "TasteKey3:string": "Fish", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_015", + "#Name": "쫀징어링", + "CookwareKey:string": "item_environment_cookware_005", + "CookTime:int": 8, + "Price:int": 25, + "IngredientKey1:string": "item_ingredient_011", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_007", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "item_ingredient_015", + "IngredientAmount3:string": 1, + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Salty", + "TasteKey2:string": "Sour", + "TasteKey3:string": "SuperHot", + "TasteKey4:string": "Fish", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_016", + "#Name": "꿈해파리 볶음", + "CookwareKey:string": "item_environment_cookware_005", + "CookTime:int": 6, + "Price:int": 15, + "IngredientKey1:string": "item_ingredient_019", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_004", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Salty", + "TasteKey2:string": "Sweet", + "TasteKey3:string": "Sour", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_017", + "#Name": "페퍼포칼립스", + "CookwareKey:string": "item_environment_cookware_005", + "CookTime:int": 6, + "Price:int": 25, + "IngredientKey1:string": "item_ingredient_012", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_015", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "item_ingredient_008", + "IngredientAmount3:string": 1, + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Sweet", + "TasteKey2:string": "SuperHot", + "TasteKey3:string": "Meat", + "TasteKey4:string": "Vegetable", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_018", + "#Name": "미정", + "CookwareKey:string": "item_environment_cookware_006", + "CookTime:int": 0, + "Price:int": 0, + "IngredientKey1:string": "", + "IngredientAmount1:string": "", + "IngredientKey2:string": "", + "IngredientAmount2:string": "", + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "", + "TasteKey2:string": "", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_019", + "#Name": "미정", + "CookwareKey:string": "item_environment_cookware_006", + "CookTime:int": 0, + "Price:int": 0, + "IngredientKey1:string": "", + "IngredientAmount1:string": "", + "IngredientKey2:string": "", + "IngredientAmount2:string": "", + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "", + "TasteKey2:string": "", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_020", + "#Name": "미정", + "CookwareKey:string": "item_environment_cookware_006", + "CookTime:int": 0, + "Price:int": 0, + "IngredientKey1:string": "", + "IngredientAmount1:string": "", + "IngredientKey2:string": "", + "IngredientAmount2:string": "", + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "", + "TasteKey2:string": "", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + } + ], + "DrinkData": [ + { + "Id:string": "식별ID", + "#Name": "이름", + "CookwareKey:string": "요리도구 키 값", + "CookTime:int": "요리시간", + "Price:int": "요리가격", + "IngredientKey1:string": "재료1", + "IngredientAmount1:string": "재료1 갯수", + "IngredientKey2:string": "재료2", + "IngredientAmount2:string": "재료2 갯수", + "IngredientKey3:string": "재료3", + "IngredientAmount3:string": "재료3 갯수", + "IngredientKey4:string": "재료4", + "IngredientAmount4:string": "재료4 갯수", + "TasteKey1:string": "맛 키1", + "TasteKey2:string": "맛 키2", + "TasteKey3:string": "맛 키3", + "TasteKey4:string": "맛 키4", + "TasteKey5:string": "맛 키5", + "TasteKey6:string": "맛 키6" + }, + { + "Id:string": "item_drink_001", + "#Name": "토마토 주스", + "CookwareKey:string": "item_environment_cookware_007", + "CookTime:int": 1, + "Price:int": 10, + "IngredientKey1:string": "item_ingredient_006", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_021", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "NoneDegree", + "TasteKey2:string": "Soda", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_drink_002", + "#Name": "오렌지 주스", + "CookwareKey:string": "item_environment_cookware_007", + "CookTime:int": 1, + "Price:int": 10, + "IngredientKey1:string": "item_ingredient_023", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_021", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "NoneDegree", + "TasteKey2:string": "Sour", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_drink_003", + "#Name": "여신의눈물", + "CookwareKey:string": "item_environment_cookware_008", + "CookTime:int": 3, + "Price:int": 10, + "IngredientKey1:string": "item_ingredient_008", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_022", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "LowDegree", + "TasteKey2:string": "WoodFlavor", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_drink_004", + "#Name": "라벨블루", + "CookwareKey:string": "item_environment_cookware_008", + "CookTime:int": 3, + "Price:int": 10, + "IngredientKey1:string": "item_ingredient_002", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_022", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "MiddleDegree", + "TasteKey2:string": "FruitFlavor", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + } + ], + "IngredientData": [ + { + "Id:string": "식별ID", + "#Name": "이름" + }, + { + "Id:string": "item_ingredient_001", + "#Name": "극락쌀" + }, + { + "Id:string": "item_ingredient_002", + "#Name": "블루애플" + }, + { + "Id:string": "item_ingredient_003", + "#Name": "햇빛당근" + }, + { + "Id:string": "item_ingredient_004", + "#Name": "꿈꾸는 해초" + }, + { + "Id:string": "item_ingredient_005", + "#Name": "미정" + }, + { + "Id:string": "item_ingredient_006", + "#Name": "토마토" + }, + { + "Id:string": "item_ingredient_007", + "#Name": "천일염" + }, + { + "Id:string": "item_ingredient_008", + "#Name": "눈물" + }, + { + "Id:string": "item_ingredient_009", + "#Name": "밀가루" + }, + { + "Id:string": "item_ingredient_010", + "#Name": "식초" + }, + { + "Id:string": "item_ingredient_011", + "#Name": "쫀징어" + }, + { + "Id:string": "item_ingredient_012", + "#Name": "치타닭 고기 " + }, + { + "Id:string": "item_ingredient_013", + "#Name": "비늘오리 고기" + }, + { + "Id:string": "item_ingredient_014", + "#Name": "뱀장어" + }, + { + "Id:string": "item_ingredient_015", + "#Name": "불꽃 고추" + }, + { + "Id:string": "item_ingredient_016", + "#Name": "유령상어" + }, + { + "Id:string": "item_ingredient_017", + "#Name": "유령새우" + }, + { + "Id:string": "item_ingredient_018", + "#Name": "비늘발고둥" + }, + { + "Id:string": "item_ingredient_019", + "#Name": "홍해파리" + }, + { + "Id:string": "item_ingredient_020", + "#Name": "미정" + }, + { + "Id:string": "item_ingredient_021", + "#Name": "탄산수" + }, + { + "Id:string": "item_ingredient_022", + "#Name": "위스키" + }, + { + "Id:string": "item_ingredient_023", + "#Name": "오렌지" + } + ], + "CookwareData": [ + { + "Id:string": "식별ID", + "#Name": "이름", + "CookwareType:NativeEnum": "요리도구 타입" + }, + { + "Id:string": "item_environment_cookware_001", + "#Name": "냄비", + "CookwareType:NativeEnum": "Pot" + }, + { + "Id:string": "item_environment_cookware_002", + "#Name": "튀김", + "CookwareType:NativeEnum": "Fryer" + }, + { + "Id:string": "item_environment_cookware_003", + "#Name": "화로", + "CookwareType:NativeEnum": "Brazier" + }, + { + "Id:string": "item_environment_cookware_004", + "#Name": "", + "CookwareType:NativeEnum": "CuttingBoard" + }, + { + "Id:string": "item_environment_cookware_005", + "#Name": "", + "CookwareType:NativeEnum": "Griddle" + }, + { + "Id:string": "item_environment_cookware_006", + "#Name": "", + "CookwareType:NativeEnum": "MagicOven" + }, + { + "Id:string": "item_environment_cookware_007", + "#Name": "", + "CookwareType:NativeEnum": "JuiceMachine" + }, + { + "Id:string": "item_environment_cookware_008", + "#Name": "", + "CookwareType:NativeEnum": "Barrel" + } + ], + "TasteData": [ + { + "Id:string": "식별ID", + "#Name": "이름", + "TasteType:NativeEnum": "맛 종류" + }, + { + "Id:string": "Sweet", + "#Name": "단맛", + "TasteType:NativeEnum": "Sweet" + }, + { + "Id:string": "Warm", + "#Name": "따뜻한", + "TasteType:NativeEnum": "Warm" + }, + { + "Id:string": "Vegetable", + "#Name": "채류", + "TasteType:NativeEnum": "Vegetable" + }, + { + "Id:string": "Bitter", + "#Name": "쓴맛", + "TasteType:NativeEnum": "Bitter" + }, + { + "Id:string": "Salty", + "#Name": "짠맛", + "TasteType:NativeEnum": "Salty" + }, + { + "Id:string": "Mild", + "#Name": "담백한", + "TasteType:NativeEnum": "Mild" + }, + { + "Id:string": "Addictive", + "#Name": "중독적인", + "TasteType:NativeEnum": "Addictive" + }, + { + "Id:string": "Sour", + "#Name": "신맛", + "TasteType:NativeEnum": "Sour" + }, + { + "Id:string": "Savory", + "#Name": "고소한", + "TasteType:NativeEnum": "Savory" + }, + { + "Id:string": "Meat", + "#Name": "육류", + "TasteType:NativeEnum": "Meat" + }, + { + "Id:string": "SuperHot", + "#Name": "핵불닭맛", + "TasteType:NativeEnum": "SuperHot" + }, + { + "Id:string": "Fish", + "#Name": "어류", + "TasteType:NativeEnum": "Fish" + }, + { + "Id:string": "NoneDegree", + "#Name": "도수가없는", + "TasteType:NativeEnum": "NoneDegree" + }, + { + "Id:string": "Soda", + "#Name": "탄산", + "TasteType:NativeEnum": "Soda" + }, + { + "Id:string": "LowDegree", + "#Name": "도수가낮은", + "TasteType:NativeEnum": "LowDegree" + }, + { + "Id:string": "WoodFlavor", + "#Name": "나무향", + "TasteType:NativeEnum": "WoodFlavor" + }, + { + "Id:string": "MiddleDegree", + "#Name": "도수가보통인", + "TasteType:NativeEnum": "MiddleDegree" + }, + { + "Id:string": "FruitFlavor", + "#Name": "과일향", + "TasteType:NativeEnum": "FruitFlavor" + } + ], + "EnvironmentData": [ + { + "Id": "식별번호", + "InteractionType:NativeEnum": "인터랙션타입", + "RendererType:Enum": "렌더러 타입", + "IsTrigger:int": "트리거 여부", + "SkeletonDataName:string": "스켈레톤 애니메이션 에셋 이름", + "SkinName:string": "스파인 스킨 이름", + "DefaultAnimationName:string": "", + "SpriteKey:string": "SpriteAtlas 키 값", + "Size:float": "유니티 내의 이미지 크기" + }, + { + "Id": "item_environment_001", + "InteractionType:NativeEnum": "None", + "RendererType:Enum": "Sprite", + "IsTrigger:int": 0, + "SkeletonDataName:string": "", + "SkinName:string": "", + "DefaultAnimationName:string": "", + "SpriteKey:string": "Barrel01", + "Size:float": 1 + }, + { + "Id": "item_environment_002", + "InteractionType:NativeEnum": "None", + "RendererType:Enum": "Spine", + "IsTrigger:int": 1, + "SkeletonDataName:string": "Coral_SkeletonData", + "SkinName:string": "Coral01", + "DefaultAnimationName:string": "Coral01/Idle", + "SpriteKey:string": "", + "Size:float": 1 + }, + { + "Id": "item_environment_003", + "InteractionType:NativeEnum": "None", + "RendererType:Enum": "Spine", + "IsTrigger:int": 1, + "SkeletonDataName:string": "Coral_SkeletonData", + "SkinName:string": "Coral02", + "DefaultAnimationName:string": "Coral02/Idle", + "SpriteKey:string": "", + "Size:float": 1 + }, + { + "Id": "item_environment_004", + "InteractionType:NativeEnum": "None", + "RendererType:Enum": "Spine", + "IsTrigger:int": 1, + "SkeletonDataName:string": "SummerGrass01_SkeletonData", + "SkinName:string": "default", + "DefaultAnimationName:string": "Normal", + "SpriteKey:string": "", + "Size:float": 0.3 + }, + { + "Id": "item_environment_005", + "InteractionType:NativeEnum": "RestaurantManagement", + "RendererType:Enum": "Spine", + "IsTrigger:int": 0, + "SkeletonDataName:string": "", + "SkinName:string": "", + "DefaultAnimationName:string": "", + "SpriteKey:string": "", + "Size:float": 1 + } + ], + "InteractionData": [ + { + "Id": "식별ID", + "#설명": "설명", + "DefaultMessageKey:string": "상호작용 기본 현지화 키 값", + "ConditionalMessageKey:string": "상호작용 예외처리 현지화 키 값", + "HoldTime:float": "" + }, + { + "Id": "RestaurantManagement.OpenManagementUi", + "#설명": "준비단계 - 메뉴 ui 오픈", + "DefaultMessageKey:string": "interaction_001_default", + "ConditionalMessageKey:string": "", + "HoldTime:float": 0 + }, + { + "Id": "RestaurantManagement.RunRestaurant", + "#설명": "준비단계 - 레스토랑 오픈", + "DefaultMessageKey:string": "interaction_002_default", + "ConditionalMessageKey:string": "interaction_002_failure", + "HoldTime:float": 1 + }, + { + "Id": "RestaurantOrder.Order", + "#설명": "운영중 - 손님 주문 받기", + "DefaultMessageKey:string": "interaction_003_default", + "ConditionalMessageKey:string": "", + "HoldTime:float": 0 + }, + { + "Id": "RestaurantOrder.Serve", + "#설명": "운영중 - 요리 서빙하기", + "DefaultMessageKey:string": "interaction_004_default", + "ConditionalMessageKey:string": "", + "HoldTime:float": 0 + }, + { + "Id": "RestaurantOrder.Dirty", + "#설명": "운영중 - 테이블 치우기", + "DefaultMessageKey:string": "interaction_005_default", + "ConditionalMessageKey:string": "", + "HoldTime:float": 1 + }, + { + "Id": "RestaurantCook.StartCooking", + "#설명": "운영중 - 요리도구를 통해 요리 ui 오픈", + "DefaultMessageKey:string": "interaction_006_default", + "ConditionalMessageKey:string": "", + "HoldTime:float": 0 + }, + { + "Id": "RestaurantWork.CleaningFloor_TODO", + "#설명": "운영중 - 청소하기", + "DefaultMessageKey:string": "interaction_007_default", + "ConditionalMessageKey:string": "", + "HoldTime:float": 1 + }, + { + "Id": "RestaurantOrder.Serve", + "#설명": "운영중 - 음식을 서빙 테이블에 놓기", + "DefaultMessageKey:string": "interaction_008_default", + "ConditionalMessageKey:string": "", + "HoldTime:float": 0 + }, + { + "Id": "RestaurantTrash", + "#설명": "운영중 - 음식과 빈그릇 버리기", + "DefaultMessageKey:string": "interaction_009_default", + "ConditionalMessageKey:string": "", + "HoldTime:float": 1 + } + ] +} \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-09-02 14-56-33 by 하정현.json.meta b/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-09-02 14-56-33 by 하정현.json.meta new file mode 100644 index 000000000..91ca684f3 --- /dev/null +++ b/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-09-02 14-56-33 by 하정현.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 19cebae8480a34e3fbbbe68cf80aff6c +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-09-02 15-00-45 by 하정현.json b/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-09-02 15-00-45 by 하정현.json new file mode 100644 index 000000000..1057717ec --- /dev/null +++ b/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-09-02 15-00-45 by 하정현.json @@ -0,0 +1,1831 @@ +{ + "$개요": [ + { + "": "Sweet" + }, + { + "": "Sour" + }, + { + "": "Bitter" + }, + { + "": "Salty" + }, + { + "": "SuperHot" + }, + { + "": "Savory" + }, + { + "": "Mild" + }, + { + "": "Warm" + }, + { + "": "Addictive" + }, + { + "": "Fish" + }, + { + "": "Vegetable" + }, + { + "": "Meat" + }, + { + "": "" + }, + { + "": "Soda" + }, + { + "": "MiddleDegree" + }, + { + "": "LowDegree" + }, + { + "": "NoneDegree" + }, + { + "": "WoodFlavor" + }, + { + "": "FruitFlavor" + } + ], + "Test": [ + { + "Id:string": "식별번호", + "CustomerLimitCount": "손님 최대 수", + "Customers:string": "등장 손님", + "Test": 2352, + "Tests": "" + }, + { + "Id:string": "customer_pool_001", + "CustomerLimitCount": 4, + "Customers:string": "customer_001", + "Test": 0, + "Tests": "테스트, 테스트2" + }, + { + "Id:string": "customer_pool_002", + "CustomerLimitCount": 7, + "Customers:string": "customer_001 | customer_002", + "Test": 3, + "Tests": "1 , 2" + }, + { + "Id:string": "customer_pool_003", + "CustomerLimitCount": 9, + "Customers:string": "customer_001 | customer_002 | customer_003", + "Test": 2, + "Tests": "5, 23,253" + }, + { + "Id:string": "customer_pool_004", + "CustomerLimitCount": 3, + "Customers:string": "customer_001", + "Test": "", + "Tests": "" + }, + { + "Id:string": "customer_pool_005", + "CustomerLimitCount": 3, + "Customers:string": "customer_001", + "Test": "", + "Tests": 435 + }, + { + "Id:string": "customer_pool_006", + "CustomerLimitCount": 3, + "Customers:string": "customer_001", + "Test": "", + "Tests": "" + }, + { + "Id:string": "special_customer_pool_001", + "CustomerLimitCount": 1, + "Customers:string": "special_customer_001", + "Test": "", + "Tests": "111|234" + } + ], + "Test_view": [ + { + "Id:string": "식별번호", + "CustomerLimitCount": "손님 최대 수", + "Customers1": "등장 손님1", + "Customers2": "등장 손님2", + "Customers3": "등장 손님3", + "Customers4": "등장 손님4", + "Customers5": "등장 손님5", + "Customers6": "등장 손님6", + "Test": 2352, + "Tests1": "Tests1", + "Tests2": "Tests2", + "Tests3": "Tests3" + }, + { + "Id:string": "customer_pool_001", + "CustomerLimitCount": 4, + "Customers1": "customer_001", + "Customers2": "", + "Customers3": "", + "Customers4": "", + "Customers5": "", + "Customers6": "", + "Test": 0, + "Tests1": "테스트", + "Tests2": "테스트2", + "Tests3": "" + }, + { + "Id:string": "customer_pool_002", + "CustomerLimitCount": 7, + "Customers1": "customer_001", + "Customers2": "customer_002", + "Customers3": "", + "Customers4": "", + "Customers5": "", + "Customers6": "", + "Test": 3, + "Tests1": 1, + "Tests2": 2, + "Tests3": "" + }, + { + "Id:string": "customer_pool_003", + "CustomerLimitCount": 9, + "Customers1": "customer_001", + "Customers2": "customer_002", + "Customers3": "customer_003", + "Customers4": "", + "Customers5": "", + "Customers6": "", + "Test": 2, + "Tests1": 5, + "Tests2": 23, + "Tests3": 253 + }, + { + "Id:string": "customer_pool_004", + "CustomerLimitCount": 3, + "Customers1": "customer_001", + "Customers2": "", + "Customers3": "", + "Customers4": "", + "Customers5": "", + "Customers6": "", + "Test": "", + "Tests1": "", + "Tests2": "", + "Tests3": "" + }, + { + "Id:string": "customer_pool_005", + "CustomerLimitCount": 3, + "Customers1": "customer_001", + "Customers2": "", + "Customers3": "", + "Customers4": "", + "Customers5": "", + "Customers6": "", + "Test": "", + "Tests1": 435, + "Tests2": "", + "Tests3": "" + }, + { + "Id:string": "customer_pool_006", + "CustomerLimitCount": 3, + "Customers1": "customer_001", + "Customers2": "", + "Customers3": "", + "Customers4": "", + "Customers5": "", + "Customers6": "", + "Test": "", + "Tests1": "", + "Tests2": "", + "Tests3": "" + }, + { + "Id:string": "special_customer_pool_001", + "CustomerLimitCount": 1, + "Customers1": "special_customer_001", + "Customers2": "", + "Customers3": "", + "Customers4": "", + "Customers5": "", + "Customers6": "", + "Test": "", + "Tests1": 111, + "Tests2": 234, + "Tests3": "" + } + ], + "LevelData": [ + { + "Id:string": "식별번호", + "Level": "레벨 or 평판", + "Area:string": "등장 지역", + "CustomerPool:string": "일반 손님 풀", + "SpecialCustomerPool:string": "스페셜 손님 풀", + "SpawnType:NativeEnum": "스폰 타입", + "CustomerRespawnTime": "손님 리스폰 시간", + "Exp": "손님 1명당 경험치", + "OrderTime": "주문 대기 인내심 카운트 시간", + "WaitTime": "주문 인내심 카운트 시간", + "EatingTime": "식사 소요시간" + }, + { + "Id:string": "Level001", + "Level": 1, + "Area:string": "Area1", + "CustomerPool:string": "customer_pool_001", + "SpecialCustomerPool:string": "", + "SpawnType:NativeEnum": "Random", + "CustomerRespawnTime": 6, + "Exp": 13, + "OrderTime": 30, + "WaitTime": 60, + "EatingTime": 6 + }, + { + "Id:string": "Level002", + "Level": 2, + "Area:string": "Area1", + "CustomerPool:string": "customer_pool_002", + "SpecialCustomerPool:string": "special_customer_pool_001", + "SpawnType:NativeEnum": "Random", + "CustomerRespawnTime": 6, + "Exp": 13, + "OrderTime": 30, + "WaitTime": 60, + "EatingTime": 6 + }, + { + "Id:string": "Level003", + "Level": 3, + "Area:string": "Area1", + "CustomerPool:string": "customer_pool_003", + "SpecialCustomerPool:string": "special_customer_pool_001", + "SpawnType:NativeEnum": "Regular", + "CustomerRespawnTime": 6, + "Exp": 13, + "OrderTime": 30, + "WaitTime": 60, + "EatingTime": 6 + }, + { + "Id:string": "Level004", + "Level": 4, + "Area:string": "Area2", + "CustomerPool:string": "customer_pool_004", + "SpecialCustomerPool:string": "special_customer_pool_001", + "SpawnType:NativeEnum": "Regular", + "CustomerRespawnTime": 6, + "Exp": 13, + "OrderTime": 30, + "WaitTime": 60, + "EatingTime": 6 + }, + { + "Id:string": "Level005", + "Level": 5, + "Area:string": "Area2", + "CustomerPool:string": "customer_pool_005", + "SpecialCustomerPool:string": "special_customer_pool_001", + "SpawnType:NativeEnum": "Regular", + "CustomerRespawnTime": 6, + "Exp": 13, + "OrderTime": 30, + "WaitTime": 60, + "EatingTime": 6 + }, + { + "Id:string": "Level006", + "Level": 6, + "Area:string": "Area2", + "CustomerPool:string": "customer_pool_006", + "SpecialCustomerPool:string": "special_customer_pool_001", + "SpawnType:NativeEnum": "Random", + "CustomerRespawnTime": 6, + "Exp": 13, + "OrderTime": 30, + "WaitTime": 60, + "EatingTime": 6 + } + ], + "CustomerData": [ + { + "Id:string": "식별번호", + "CustomerType:NativeEnum": "손님 타입", + "#Name": "이름", + "SpineSkinKey": "스파인 스킨 키 값", + "FavoriteTastes": "선호 맛들" + }, + { + "Id:string": "customer_001", + "CustomerType:NativeEnum": "Normal", + "#Name": "유령1", + "SpineSkinKey": "Casper", + "FavoriteTastes": "" + }, + { + "Id:string": "customer_002", + "CustomerType:NativeEnum": "Normal", + "#Name": "유령2", + "SpineSkinKey": "CasperBlack", + "FavoriteTastes": "" + }, + { + "Id:string": "customer_003", + "CustomerType:NativeEnum": "Normal", + "#Name": "유령3", + "SpineSkinKey": "PumkinHead", + "FavoriteTastes": "" + }, + { + "Id:string": "special_customer_001", + "CustomerType:NativeEnum": "Special", + "#Name": "차이", + "SpineSkinKey": "", + "FavoriteTastes": "" + } + ], + "CustomerPoolData": [ + { + "Id:string": "식별번호", + "CustomerLimitCount": "손님 최대 수", + "Customers:string": "등장 손님들" + }, + { + "Id:string": "customer_pool_001", + "CustomerLimitCount": 4, + "Customers:string": "customer_001" + }, + { + "Id:string": "customer_pool_002", + "CustomerLimitCount": 7, + "Customers:string": "customer_001, customer_002" + }, + { + "Id:string": "customer_pool_003", + "CustomerLimitCount": 9, + "Customers:string": "customer_001, customer_002, customer_003" + }, + { + "Id:string": "customer_pool_004", + "CustomerLimitCount": 3, + "Customers:string": "customer_001" + }, + { + "Id:string": "customer_pool_005", + "CustomerLimitCount": 3, + "Customers:string": "customer_001" + }, + { + "Id:string": "customer_pool_006", + "CustomerLimitCount": 3, + "Customers:string": "customer_001" + }, + { + "Id:string": "special_customer_pool_001", + "CustomerLimitCount": 1, + "Customers:string": "special_customer_001" + } + ], + "ItemData": [ + { + "Id": "식별번호", + "ItemType:NativeEnum": "아이템타입1" + }, + { + "Id": "item_food_001", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_002", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_003", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_004", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_005", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_006", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_007", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_008", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_009", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_010", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_011", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_012", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_013", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_014", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_015", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_016", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_017", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_018", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_019", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_food_020", + "ItemType:NativeEnum": "Food" + }, + { + "Id": "item_ingredient_001", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_002", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_003", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_004", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_005", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_006", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_007", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_008", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_009", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_010", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_011", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_012", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_013", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_014", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_015", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_016", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_017", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_018", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_019", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_020", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_021", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_022", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_ingredient_023", + "ItemType:NativeEnum": "Ingredient" + }, + { + "Id": "item_environment_001", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_002", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_003", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_004", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_005", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_cookware_001", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_cookware_002", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_cookware_003", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_cookware_004", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_cookware_005", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_cookware_006", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_cookware_007", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_environment_cookware_008", + "ItemType:NativeEnum": "Environment" + }, + { + "Id": "item_drink_001", + "ItemType:NativeEnum": "Drink" + }, + { + "Id": "item_drink_002", + "ItemType:NativeEnum": "Drink" + }, + { + "Id": "item_drink_003", + "ItemType:NativeEnum": "Drink" + }, + { + "Id": "item_drink_004", + "ItemType:NativeEnum": "Drink" + }, + { + "Id": "item_food_recipe_001", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_002", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_003", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_004", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_005", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_006", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_007", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_008", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_009", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_010", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_011", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_012", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_013", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_014", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_015", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_016", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_017", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_018", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_019", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_food_recipe_020", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_drink_recipe_001", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_drink_recipe_002", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_drink_recipe_003", + "ItemType:NativeEnum": "Recipe" + }, + { + "Id": "item_drink_recipe_004", + "ItemType:NativeEnum": "Recipe" + } + ], + "RecipeData": [ + { + "Id:string": "식별ID", + "#Name": "이름", + "RecipeType:NativeEnum": "레시피타입", + "RecipeResult:string": "완성 메뉴" + }, + { + "Id:string": "item_food_recipe_001", + "#Name": "블루 스튜 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_001" + }, + { + "Id:string": "item_food_recipe_002", + "#Name": "햇빛 스튜 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_002" + }, + { + "Id:string": "item_food_recipe_003", + "#Name": "심해기억 스튜 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_003" + }, + { + "Id:string": "item_food_recipe_004", + "#Name": "치킨 굴라쉬 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_004" + }, + { + "Id:string": "item_food_recipe_005", + "#Name": "꿈해초 크로켓 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_005" + }, + { + "Id:string": "item_food_recipe_006", + "#Name": "선라이즈 당근카츠 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_006" + }, + { + "Id:string": "item_food_recipe_007", + "#Name": "미정", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_007" + }, + { + "Id:string": "item_food_recipe_008", + "#Name": "비늘치킨덕 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_008" + }, + { + "Id:string": "item_food_recipe_009", + "#Name": "화룡장어 구이 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_009" + }, + { + "Id:string": "item_food_recipe_010", + "#Name": "미정", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_010" + }, + { + "Id:string": "item_food_recipe_011", + "#Name": "바다의선물 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_011" + }, + { + "Id:string": "item_food_recipe_012", + "#Name": "유령새우회 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_012" + }, + { + "Id:string": "item_food_recipe_013", + "#Name": "비늘초무침 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_013" + }, + { + "Id:string": "item_food_recipe_014", + "#Name": "쫀징어 냉채 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_014" + }, + { + "Id:string": "item_food_recipe_015", + "#Name": "쫀징어링 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_015" + }, + { + "Id:string": "item_food_recipe_016", + "#Name": "꿈해파리 볶음 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_016" + }, + { + "Id:string": "item_food_recipe_017", + "#Name": "페퍼포칼립스 레시피", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_017" + }, + { + "Id:string": "item_food_recipe_018", + "#Name": "미정", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_018" + }, + { + "Id:string": "item_food_recipe_019", + "#Name": "미정", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_019" + }, + { + "Id:string": "item_food_recipe_020", + "#Name": "미정", + "RecipeType:NativeEnum": "FoodRecipe", + "RecipeResult:string": "item_food_020" + }, + { + "Id:string": "item_drink_recipe_001", + "#Name": "토마토 주스 레시피", + "RecipeType:NativeEnum": "DrinkRecipe", + "RecipeResult:string": "item_drink_001" + }, + { + "Id:string": "item_drink_recipe_002", + "#Name": "오렌지 주스 레시피", + "RecipeType:NativeEnum": "DrinkRecipe", + "RecipeResult:string": "item_drink_002" + }, + { + "Id:string": "item_drink_recipe_003", + "#Name": "여신의눈물 레시피", + "RecipeType:NativeEnum": "DrinkRecipe", + "RecipeResult:string": "item_drink_003" + }, + { + "Id:string": "item_drink_recipe_004", + "#Name": "라벨블루 레시피", + "RecipeType:NativeEnum": "DrinkRecipe", + "RecipeResult:string": "item_drink_004" + } + ], + "FoodData": [ + { + "Id:string": "식별ID", + "#Name": "이름", + "CookwareKey:string": "요리도구 키 값", + "CookTime:int": "요리시간", + "Price:int": "요리가격", + "IngredientKey1:string": "재료1", + "IngredientAmount1:string": "재료1 갯수", + "IngredientKey2:string": "재료2", + "IngredientAmount2:string": "재료2 갯수", + "IngredientKey3:string": "재료3", + "IngredientAmount3:string": "재료3 갯수", + "IngredientKey4:string": "재료4", + "IngredientAmount4:string": "재료4 갯수", + "TasteKey1:string": "맛 키1", + "TasteKey2:string": "맛 키2", + "TasteKey3:string": "맛 키3", + "TasteKey4:string": "맛 키4", + "TasteKey5:string": "맛 키5", + "TasteKey6:string": "맛 키6" + }, + { + "Id:string": "item_food_001", + "#Name": "블루 스튜", + "CookwareKey:string": "item_environment_cookware_001", + "CookTime:int": 7, + "Price:int": 10, + "IngredientKey1:string": "item_ingredient_001", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_002", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Sweet", + "TasteKey2:string": "Warm", + "TasteKey3:string": "Vegetable", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_002", + "#Name": "햇빛 스튜", + "CookwareKey:string": "item_environment_cookware_001", + "CookTime:int": 7, + "Price:int": 20, + "IngredientKey1:string": "item_ingredient_002", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_003", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Sweet", + "TasteKey2:string": "Bitter", + "TasteKey3:string": "Warm", + "TasteKey4:string": "Vegetable", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_003", + "#Name": "심해기억 스튜", + "CookwareKey:string": "item_environment_cookware_001", + "CookTime:int": 7, + "Price:int": 15, + "IngredientKey1:string": "item_ingredient_002", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_004", + "IngredientAmount2:string": 2, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Salty", + "TasteKey2:string": "Mild", + "TasteKey3:string": "Vegetable", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_004", + "#Name": "치킨 굴라쉬", + "CookwareKey:string": "item_environment_cookware_001", + "CookTime:int": 10, + "Price:int": 30, + "IngredientKey1:string": "item_ingredient_012", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_006", + "IngredientAmount2:string": 2, + "IngredientKey3:string": "item_ingredient_007", + "IngredientAmount3:string": 1, + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Salty", + "TasteKey2:string": "Sweet", + "TasteKey3:string": "Addictive", + "TasteKey4:string": "Vegetable", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_005", + "#Name": "꿈해초 크로켓", + "CookwareKey:string": "item_environment_cookware_002", + "CookTime:int": 5, + "Price:int": 20, + "IngredientKey1:string": "item_ingredient_007", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_008", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "item_ingredient_009", + "IngredientAmount3:string": 1, + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Sour", + "TasteKey2:string": "Salty", + "TasteKey3:string": "Mild", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_006", + "#Name": "선라이즈 당근카츠", + "CookwareKey:string": "item_environment_cookware_002", + "CookTime:int": 5, + "Price:int": 30, + "IngredientKey1:string": "item_ingredient_003", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_007", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "item_ingredient_009", + "IngredientAmount3:string": 1, + "IngredientKey4:string": "item_ingredient_010", + "IngredientAmount4:string": 1, + "TasteKey1:string": "Sweet", + "TasteKey2:string": "Sour", + "TasteKey3:string": "Warm", + "TasteKey4:string": "Savory", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_007", + "#Name": "미정", + "CookwareKey:string": "item_environment_cookware_002", + "CookTime:int": 5, + "Price:int": 30, + "IngredientKey1:string": "item_ingredient_011", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_008", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "", + "TasteKey2:string": "", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_008", + "#Name": "비늘치킨덕", + "CookwareKey:string": "item_environment_cookware_003", + "CookTime:int": 6, + "Price:int": 30, + "IngredientKey1:string": "item_ingredient_012", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_013", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "item_ingredient_007", + "IngredientAmount3:string": 1, + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Salty", + "TasteKey2:string": "Mild", + "TasteKey3:string": "Addictive", + "TasteKey4:string": "Meat", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_009", + "#Name": "화룡장어 구이", + "CookwareKey:string": "item_environment_cookware_003", + "CookTime:int": 6, + "Price:int": 15, + "IngredientKey1:string": "item_ingredient_014", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_015", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Sweet", + "TasteKey2:string": "Mild", + "TasteKey3:string": "SuperHot", + "TasteKey4:string": "Fish", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_010", + "#Name": "미정", + "CookwareKey:string": "item_environment_cookware_003", + "CookTime:int": 6, + "Price:int": 30, + "IngredientKey1:string": "item_ingredient_016", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_008", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "", + "TasteKey2:string": "", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_011", + "#Name": "바다의선물", + "CookwareKey:string": "item_environment_cookware_004", + "CookTime:int": 5, + "Price:int": 10, + "IngredientKey1:string": "item_ingredient_002", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_003", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Sweet", + "TasteKey2:string": "Mild", + "TasteKey3:string": "Vegetable", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_012", + "#Name": "유령새우회", + "CookwareKey:string": "item_environment_cookware_004", + "CookTime:int": 5, + "Price:int": 25, + "IngredientKey1:string": "item_ingredient_017", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_007", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "item_ingredient_004", + "IngredientAmount3:string": 1, + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Sweet", + "TasteKey2:string": "Salty", + "TasteKey3:string": "Addictive", + "TasteKey4:string": "Fish", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_013", + "#Name": "비늘초무침", + "CookwareKey:string": "item_environment_cookware_004", + "CookTime:int": 5, + "Price:int": 45, + "IngredientKey1:string": "item_ingredient_018", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_003", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "item_ingredient_007", + "IngredientAmount3:string": 1, + "IngredientKey4:string": "item_ingredient_010", + "IngredientAmount4:string": 2, + "TasteKey1:string": "Salty", + "TasteKey2:string": "Sour", + "TasteKey3:string": "Mild", + "TasteKey4:string": "Vegetable", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_014", + "#Name": "쫀징어 냉채", + "CookwareKey:string": "item_environment_cookware_004", + "CookTime:int": 5, + "Price:int": 15, + "IngredientKey1:string": "item_ingredient_011", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_003", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Salty", + "TasteKey2:string": "Vegetable", + "TasteKey3:string": "Fish", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_015", + "#Name": "쫀징어링", + "CookwareKey:string": "item_environment_cookware_005", + "CookTime:int": 8, + "Price:int": 25, + "IngredientKey1:string": "item_ingredient_011", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_007", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "item_ingredient_015", + "IngredientAmount3:string": 1, + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Salty", + "TasteKey2:string": "Sour", + "TasteKey3:string": "SuperHot", + "TasteKey4:string": "Fish", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_016", + "#Name": "꿈해파리 볶음", + "CookwareKey:string": "item_environment_cookware_005", + "CookTime:int": 6, + "Price:int": 15, + "IngredientKey1:string": "item_ingredient_019", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_004", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Salty", + "TasteKey2:string": "Sweet", + "TasteKey3:string": "Sour", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_017", + "#Name": "페퍼포칼립스", + "CookwareKey:string": "item_environment_cookware_005", + "CookTime:int": 6, + "Price:int": 25, + "IngredientKey1:string": "item_ingredient_012", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_015", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "item_ingredient_008", + "IngredientAmount3:string": 1, + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "Sweet", + "TasteKey2:string": "SuperHot", + "TasteKey3:string": "Meat", + "TasteKey4:string": "Vegetable", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_018", + "#Name": "미정", + "CookwareKey:string": "item_environment_cookware_006", + "CookTime:int": 0, + "Price:int": 0, + "IngredientKey1:string": "", + "IngredientAmount1:string": "", + "IngredientKey2:string": "", + "IngredientAmount2:string": "", + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "", + "TasteKey2:string": "", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_019", + "#Name": "미정", + "CookwareKey:string": "item_environment_cookware_006", + "CookTime:int": 0, + "Price:int": 0, + "IngredientKey1:string": "", + "IngredientAmount1:string": "", + "IngredientKey2:string": "", + "IngredientAmount2:string": "", + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "", + "TasteKey2:string": "", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_food_020", + "#Name": "미정", + "CookwareKey:string": "item_environment_cookware_006", + "CookTime:int": 0, + "Price:int": 0, + "IngredientKey1:string": "", + "IngredientAmount1:string": "", + "IngredientKey2:string": "", + "IngredientAmount2:string": "", + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "", + "TasteKey2:string": "", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + } + ], + "DrinkData": [ + { + "Id:string": "식별ID", + "#Name": "이름", + "CookwareKey:string": "요리도구 키 값", + "CookTime:int": "요리시간", + "Price:int": "요리가격", + "IngredientKey1:string": "재료1", + "IngredientAmount1:string": "재료1 갯수", + "IngredientKey2:string": "재료2", + "IngredientAmount2:string": "재료2 갯수", + "IngredientKey3:string": "재료3", + "IngredientAmount3:string": "재료3 갯수", + "IngredientKey4:string": "재료4", + "IngredientAmount4:string": "재료4 갯수", + "TasteKey1:string": "맛 키1", + "TasteKey2:string": "맛 키2", + "TasteKey3:string": "맛 키3", + "TasteKey4:string": "맛 키4", + "TasteKey5:string": "맛 키5", + "TasteKey6:string": "맛 키6" + }, + { + "Id:string": "item_drink_001", + "#Name": "토마토 주스", + "CookwareKey:string": "item_environment_cookware_007", + "CookTime:int": 1, + "Price:int": 10, + "IngredientKey1:string": "item_ingredient_006", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_021", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "NoneDegree", + "TasteKey2:string": "Soda", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_drink_002", + "#Name": "오렌지 주스", + "CookwareKey:string": "item_environment_cookware_007", + "CookTime:int": 1, + "Price:int": 10, + "IngredientKey1:string": "item_ingredient_023", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_021", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "NoneDegree", + "TasteKey2:string": "Sour", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_drink_003", + "#Name": "여신의눈물", + "CookwareKey:string": "item_environment_cookware_008", + "CookTime:int": 3, + "Price:int": 10, + "IngredientKey1:string": "item_ingredient_008", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_022", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "LowDegree", + "TasteKey2:string": "WoodFlavor", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + }, + { + "Id:string": "item_drink_004", + "#Name": "라벨블루", + "CookwareKey:string": "item_environment_cookware_008", + "CookTime:int": 3, + "Price:int": 10, + "IngredientKey1:string": "item_ingredient_002", + "IngredientAmount1:string": 1, + "IngredientKey2:string": "item_ingredient_022", + "IngredientAmount2:string": 1, + "IngredientKey3:string": "", + "IngredientAmount3:string": "", + "IngredientKey4:string": "", + "IngredientAmount4:string": "", + "TasteKey1:string": "MiddleDegree", + "TasteKey2:string": "FruitFlavor", + "TasteKey3:string": "", + "TasteKey4:string": "", + "TasteKey5:string": "", + "TasteKey6:string": "" + } + ], + "IngredientData": [ + { + "Id:string": "식별ID", + "#Name": "이름" + }, + { + "Id:string": "item_ingredient_001", + "#Name": "극락쌀" + }, + { + "Id:string": "item_ingredient_002", + "#Name": "블루애플" + }, + { + "Id:string": "item_ingredient_003", + "#Name": "햇빛당근" + }, + { + "Id:string": "item_ingredient_004", + "#Name": "꿈꾸는 해초" + }, + { + "Id:string": "item_ingredient_005", + "#Name": "미정" + }, + { + "Id:string": "item_ingredient_006", + "#Name": "토마토" + }, + { + "Id:string": "item_ingredient_007", + "#Name": "천일염" + }, + { + "Id:string": "item_ingredient_008", + "#Name": "눈물" + }, + { + "Id:string": "item_ingredient_009", + "#Name": "밀가루" + }, + { + "Id:string": "item_ingredient_010", + "#Name": "식초" + }, + { + "Id:string": "item_ingredient_011", + "#Name": "쫀징어" + }, + { + "Id:string": "item_ingredient_012", + "#Name": "치타닭 고기 " + }, + { + "Id:string": "item_ingredient_013", + "#Name": "비늘오리 고기" + }, + { + "Id:string": "item_ingredient_014", + "#Name": "뱀장어" + }, + { + "Id:string": "item_ingredient_015", + "#Name": "불꽃 고추" + }, + { + "Id:string": "item_ingredient_016", + "#Name": "유령상어" + }, + { + "Id:string": "item_ingredient_017", + "#Name": "유령새우" + }, + { + "Id:string": "item_ingredient_018", + "#Name": "비늘발고둥" + }, + { + "Id:string": "item_ingredient_019", + "#Name": "홍해파리" + }, + { + "Id:string": "item_ingredient_020", + "#Name": "미정" + }, + { + "Id:string": "item_ingredient_021", + "#Name": "탄산수" + }, + { + "Id:string": "item_ingredient_022", + "#Name": "위스키" + }, + { + "Id:string": "item_ingredient_023", + "#Name": "오렌지" + } + ], + "CookwareData": [ + { + "Id:string": "식별ID", + "#Name": "이름", + "CookwareType:NativeEnum": "요리도구 타입" + }, + { + "Id:string": "item_environment_cookware_001", + "#Name": "냄비", + "CookwareType:NativeEnum": "Pot" + }, + { + "Id:string": "item_environment_cookware_002", + "#Name": "튀김", + "CookwareType:NativeEnum": "Fryer" + }, + { + "Id:string": "item_environment_cookware_003", + "#Name": "화로", + "CookwareType:NativeEnum": "Brazier" + }, + { + "Id:string": "item_environment_cookware_004", + "#Name": "", + "CookwareType:NativeEnum": "CuttingBoard" + }, + { + "Id:string": "item_environment_cookware_005", + "#Name": "", + "CookwareType:NativeEnum": "Griddle" + }, + { + "Id:string": "item_environment_cookware_006", + "#Name": "", + "CookwareType:NativeEnum": "MagicOven" + }, + { + "Id:string": "item_environment_cookware_007", + "#Name": "", + "CookwareType:NativeEnum": "JuiceMachine" + }, + { + "Id:string": "item_environment_cookware_008", + "#Name": "", + "CookwareType:NativeEnum": "Barrel" + } + ], + "TasteData": [ + { + "Id:string": "식별ID", + "#Name": "이름", + "TasteType:NativeEnum": "맛 종류" + }, + { + "Id:string": "Sweet", + "#Name": "단맛", + "TasteType:NativeEnum": "Sweet" + }, + { + "Id:string": "Warm", + "#Name": "따뜻한", + "TasteType:NativeEnum": "Warm" + }, + { + "Id:string": "Vegetable", + "#Name": "채류", + "TasteType:NativeEnum": "Vegetable" + }, + { + "Id:string": "Bitter", + "#Name": "쓴맛", + "TasteType:NativeEnum": "Bitter" + }, + { + "Id:string": "Salty", + "#Name": "짠맛", + "TasteType:NativeEnum": "Salty" + }, + { + "Id:string": "Mild", + "#Name": "담백한", + "TasteType:NativeEnum": "Mild" + }, + { + "Id:string": "Addictive", + "#Name": "중독적인", + "TasteType:NativeEnum": "Addictive" + }, + { + "Id:string": "Sour", + "#Name": "신맛", + "TasteType:NativeEnum": "Sour" + }, + { + "Id:string": "Savory", + "#Name": "고소한", + "TasteType:NativeEnum": "Savory" + }, + { + "Id:string": "Meat", + "#Name": "육류", + "TasteType:NativeEnum": "Meat" + }, + { + "Id:string": "SuperHot", + "#Name": "핵불닭맛", + "TasteType:NativeEnum": "SuperHot" + }, + { + "Id:string": "Fish", + "#Name": "어류", + "TasteType:NativeEnum": "Fish" + }, + { + "Id:string": "NoneDegree", + "#Name": "도수가없는", + "TasteType:NativeEnum": "NoneDegree" + }, + { + "Id:string": "Soda", + "#Name": "탄산", + "TasteType:NativeEnum": "Soda" + }, + { + "Id:string": "LowDegree", + "#Name": "도수가낮은", + "TasteType:NativeEnum": "LowDegree" + }, + { + "Id:string": "WoodFlavor", + "#Name": "나무향", + "TasteType:NativeEnum": "WoodFlavor" + }, + { + "Id:string": "MiddleDegree", + "#Name": "도수가보통인", + "TasteType:NativeEnum": "MiddleDegree" + }, + { + "Id:string": "FruitFlavor", + "#Name": "과일향", + "TasteType:NativeEnum": "FruitFlavor" + } + ], + "EnvironmentData": [ + { + "Id": "식별번호", + "InteractionType:NativeEnum": "인터랙션타입", + "RendererType:Enum": "렌더러 타입", + "IsTrigger:int": "트리거 여부", + "SkeletonDataName:string": "스켈레톤 애니메이션 에셋 이름", + "SkinName:string": "스파인 스킨 이름", + "DefaultAnimationName:string": "", + "SpriteKey:string": "SpriteAtlas 키 값", + "Size:float": "유니티 내의 이미지 크기" + }, + { + "Id": "item_environment_001", + "InteractionType:NativeEnum": "None", + "RendererType:Enum": "Sprite", + "IsTrigger:int": 0, + "SkeletonDataName:string": "", + "SkinName:string": "", + "DefaultAnimationName:string": "", + "SpriteKey:string": "Barrel01", + "Size:float": 1 + }, + { + "Id": "item_environment_002", + "InteractionType:NativeEnum": "None", + "RendererType:Enum": "Spine", + "IsTrigger:int": 1, + "SkeletonDataName:string": "Coral_SkeletonData", + "SkinName:string": "Coral01", + "DefaultAnimationName:string": "Coral01/Idle", + "SpriteKey:string": "", + "Size:float": 1 + }, + { + "Id": "item_environment_003", + "InteractionType:NativeEnum": "None", + "RendererType:Enum": "Spine", + "IsTrigger:int": 1, + "SkeletonDataName:string": "Coral_SkeletonData", + "SkinName:string": "Coral02", + "DefaultAnimationName:string": "Coral02/Idle", + "SpriteKey:string": "", + "Size:float": 1 + }, + { + "Id": "item_environment_004", + "InteractionType:NativeEnum": "None", + "RendererType:Enum": "Spine", + "IsTrigger:int": 1, + "SkeletonDataName:string": "SummerGrass01_SkeletonData", + "SkinName:string": "default", + "DefaultAnimationName:string": "Normal", + "SpriteKey:string": "", + "Size:float": 0.3 + }, + { + "Id": "item_environment_005", + "InteractionType:NativeEnum": "RestaurantManagement", + "RendererType:Enum": "Spine", + "IsTrigger:int": 0, + "SkeletonDataName:string": "", + "SkinName:string": "", + "DefaultAnimationName:string": "", + "SpriteKey:string": "", + "Size:float": 1 + } + ], + "InteractionData": [ + { + "Id": "식별ID", + "#설명": "설명", + "DefaultMessageKey:string": "상호작용 기본 현지화 키 값", + "ConditionalMessageKey:string": "상호작용 예외처리 현지화 키 값", + "HoldTime:float": "" + }, + { + "Id": "RestaurantManagement.OpenManagementUi", + "#설명": "준비단계 - 메뉴 ui 오픈", + "DefaultMessageKey:string": "interaction_001_default", + "ConditionalMessageKey:string": "", + "HoldTime:float": 0 + }, + { + "Id": "RestaurantManagement.RunRestaurant", + "#설명": "준비단계 - 레스토랑 오픈", + "DefaultMessageKey:string": "interaction_002_default", + "ConditionalMessageKey:string": "interaction_002_failure", + "HoldTime:float": 1 + }, + { + "Id": "RestaurantOrder.Order", + "#설명": "운영중 - 손님 주문 받기", + "DefaultMessageKey:string": "interaction_003_default", + "ConditionalMessageKey:string": "", + "HoldTime:float": 0.5 + }, + { + "Id": "RestaurantOrder.Serve", + "#설명": "운영중 - 요리 서빙하기", + "DefaultMessageKey:string": "interaction_004_default", + "ConditionalMessageKey:string": "", + "HoldTime:float": 0.5 + }, + { + "Id": "RestaurantOrder.Dirty", + "#설명": "운영중 - 테이블 치우기", + "DefaultMessageKey:string": "interaction_005_default", + "ConditionalMessageKey:string": "", + "HoldTime:float": 1 + }, + { + "Id": "RestaurantCook.StartCooking", + "#설명": "운영중 - 요리도구를 통해 요리 ui 오픈", + "DefaultMessageKey:string": "interaction_006_default", + "ConditionalMessageKey:string": "", + "HoldTime:float": 0 + }, + { + "Id": "RestaurantWork.CleaningFloor_TODO", + "#설명": "운영중 - 청소하기", + "DefaultMessageKey:string": "interaction_007_default", + "ConditionalMessageKey:string": "", + "HoldTime:float": 1 + }, + { + "Id": "RestaurantServe", + "#설명": "운영중 - 음식을 서빙 테이블에 놓기", + "DefaultMessageKey:string": "interaction_008_default", + "ConditionalMessageKey:string": "", + "HoldTime:float": 0 + }, + { + "Id": "RestaurantTrash", + "#설명": "운영중 - 음식과 빈그릇 버리기", + "DefaultMessageKey:string": "interaction_009_default", + "ConditionalMessageKey:string": "", + "HoldTime:float": 1 + } + ] +} \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-09-02 15-00-45 by 하정현.json.meta b/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-09-02 15-00-45 by 하정현.json.meta new file mode 100644 index 000000000..ba94482b8 --- /dev/null +++ b/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-09-02 15-00-45 by 하정현.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bdfbe0e1177bb41f7b119e0c091be646 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/Classes/InteractionDataAsset.cs b/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/Classes/InteractionDataAsset.cs index 05da056a5..1e50d717a 100644 --- a/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/Classes/InteractionDataAsset.cs +++ b/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/Classes/InteractionDataAsset.cs @@ -22,7 +22,7 @@ public bool TryGetValueByTypeName(string interactionTypeName, string subsystemTy targetString = $"{interactionTypeName}.{subsystemTypeName}"; } interactionDataEntry = _datas.FirstOrDefault(entry => - string.Equals(entry.UnparsedInteractionType, targetString, StringComparison.Ordinal)); + string.Equals(entry.Id, targetString, StringComparison.Ordinal)); return interactionDataEntry != null; } diff --git a/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/Classes/InteractionDataEntry.cs b/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/Classes/InteractionDataEntry.cs index 468893100..4e8d61a83 100644 --- a/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/Classes/InteractionDataEntry.cs +++ b/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/Classes/InteractionDataEntry.cs @@ -12,11 +12,6 @@ public class InteractionDataEntry : IId [field: SerializeField] public string Id { get; set; } - /// 파싱 전 타입 - [Tooltip("파싱 전 타입")] - [field: SerializeField] - public string UnparsedInteractionType; - /// 상호작용 기본 현지화 키 값 [Tooltip("상호작용 기본 현지화 키 값")] [field: SerializeField] @@ -26,5 +21,9 @@ public class InteractionDataEntry : IId [Tooltip("상호작용 예외처리 현지화 키 값")] [field: SerializeField] public string ConditionalMessageKey; + + [Tooltip("상호작용 실행 홀드 타임")] + [field: SerializeField] + public float HoldTime; } } diff --git a/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/GoogleSheetJson.json b/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/GoogleSheetJson.json index 1dd4485e1..1057717ec 100644 --- a/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/GoogleSheetJson.json +++ b/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/GoogleSheetJson.json @@ -1760,72 +1760,72 @@ { "Id": "식별ID", "#설명": "설명", - "UnparsedInteractionType:string": "파싱 전 타입", "DefaultMessageKey:string": "상호작용 기본 현지화 키 값", - "ConditionalMessageKey:string": "상호작용 예외처리 현지화 키 값" + "ConditionalMessageKey:string": "상호작용 예외처리 현지화 키 값", + "HoldTime:float": "" }, { - "Id": "interaction_001", + "Id": "RestaurantManagement.OpenManagementUi", "#설명": "준비단계 - 메뉴 ui 오픈", - "UnparsedInteractionType:string": "RestaurantManagement.OpenManagementUi", "DefaultMessageKey:string": "interaction_001_default", - "ConditionalMessageKey:string": "" + "ConditionalMessageKey:string": "", + "HoldTime:float": 0 }, { - "Id": "interaction_002", + "Id": "RestaurantManagement.RunRestaurant", "#설명": "준비단계 - 레스토랑 오픈", - "UnparsedInteractionType:string": "RestaurantManagement.RunRestaurant", "DefaultMessageKey:string": "interaction_002_default", - "ConditionalMessageKey:string": "interaction_002_failure" + "ConditionalMessageKey:string": "interaction_002_failure", + "HoldTime:float": 1 }, { - "Id": "interaction_003", + "Id": "RestaurantOrder.Order", "#설명": "운영중 - 손님 주문 받기", - "UnparsedInteractionType:string": "RestaurantOrder.Order", "DefaultMessageKey:string": "interaction_003_default", - "ConditionalMessageKey:string": "" + "ConditionalMessageKey:string": "", + "HoldTime:float": 0.5 }, { - "Id": "interaction_004", + "Id": "RestaurantOrder.Serve", "#설명": "운영중 - 요리 서빙하기", - "UnparsedInteractionType:string": "RestaurantOrder.Serve", "DefaultMessageKey:string": "interaction_004_default", - "ConditionalMessageKey:string": "" + "ConditionalMessageKey:string": "", + "HoldTime:float": 0.5 }, { - "Id": "interaction_005", + "Id": "RestaurantOrder.Dirty", "#설명": "운영중 - 테이블 치우기", - "UnparsedInteractionType:string": "RestaurantOrder.TableDirty", "DefaultMessageKey:string": "interaction_005_default", - "ConditionalMessageKey:string": "" + "ConditionalMessageKey:string": "", + "HoldTime:float": 1 }, { - "Id": "interaction_006", + "Id": "RestaurantCook.StartCooking", "#설명": "운영중 - 요리도구를 통해 요리 ui 오픈", - "UnparsedInteractionType:string": "RestaurantCook.StartCooking", "DefaultMessageKey:string": "interaction_006_default", - "ConditionalMessageKey:string": "" + "ConditionalMessageKey:string": "", + "HoldTime:float": 0 }, { - "Id": "interaction_007", + "Id": "RestaurantWork.CleaningFloor_TODO", "#설명": "운영중 - 청소하기", - "UnparsedInteractionType:string": "RestaurantOrder.FloorDirty", "DefaultMessageKey:string": "interaction_007_default", - "ConditionalMessageKey:string": "" + "ConditionalMessageKey:string": "", + "HoldTime:float": 1 }, { - "Id": "interaction_008", + "Id": "RestaurantServe", "#설명": "운영중 - 음식을 서빙 테이블에 놓기", - "UnparsedInteractionType:string": "RestaurantOrder.ServingTable", "DefaultMessageKey:string": "interaction_008_default", - "ConditionalMessageKey:string": "" + "ConditionalMessageKey:string": "", + "HoldTime:float": 0 }, { - "Id": "interaction_009", + "Id": "RestaurantTrash", "#설명": "운영중 - 음식과 빈그릇 버리기", - "UnparsedInteractionType:string": "RestaurantOrder.Throw", "DefaultMessageKey:string": "interaction_009_default", - "ConditionalMessageKey:string": "" + "ConditionalMessageKey:string": "", + "HoldTime:float": 1 } ] } \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/Logs/GoogleSheetChangeLog.asset b/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/Logs/GoogleSheetChangeLog.asset index 62574fb62..8d40a25f1 100644 --- a/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/Logs/GoogleSheetChangeLog.asset +++ b/Assets/_DDD/_Scripts/GenerateGoogleSheet/AutoCreated/Logs/GoogleSheetChangeLog.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bc4e81754f3b676cb2b801bd9cebd0013b875c00ce38c1fb91e9ee75eba56c98 -size 988744 +oid sha256:a2b5be2c7c593c6853de30c613353ce9aa2947bfbf187bb5827c859374e0dea1 +size 1181404 diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc.meta b/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc.meta new file mode 100644 index 000000000..249b41853 --- /dev/null +++ b/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3d48481b0d4746e581513865e89c72e3 +timeCreated: 1756788895 \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc/RestaurantTrashSolver.cs b/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc/RestaurantTrashSolver.cs new file mode 100644 index 000000000..e292d488d --- /dev/null +++ b/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc/RestaurantTrashSolver.cs @@ -0,0 +1,33 @@ +using UnityEngine; + +namespace DDD.Restaurant +{ + public class RestaurantTrashSolver : MonoBehaviour, IInteractionSolver + { + public bool ExecuteInteraction(IInteractor interactor, IInteractable interactable, ScriptableObject payload = null) + { + var carrier = interactor?.GetInteractorGameObject()?.GetComponent(); + if (carrier == null) + return false; + + carrier.Use(); + return true; + } + + public bool CanExecuteInteraction(IInteractor interactor = null, IInteractable interactable = null, + ScriptableObject payload = null) + { + // Check carrying state + var carrier = interactor?.GetInteractorGameObject()?.GetComponent(); + if (carrier != null) + return carrier.IsCarrying(); + + return false; + } + + public bool CanSolveInteraction(IInteractor interactor, IInteractable interactable) + { + return true; + } + } +} \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc/RestaurantTrashSolver.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc/RestaurantTrashSolver.cs.meta new file mode 100644 index 000000000..097399ea3 --- /dev/null +++ b/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc/RestaurantTrashSolver.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 36efefef94e6497889f41757921d8963 +timeCreated: 1756788905 \ No newline at end of file From e27d9bb7bfea98a80a49c48239eb69238b5e1782 Mon Sep 17 00:00:00 2001 From: Jeonghyeon Ha Date: Tue, 2 Sep 2025 15:05:02 +0900 Subject: [PATCH 3/6] Add RestaurantTrash interaction and refactor interaction handling logic --- .../Prefabs/RestaurantPlayer.prefab | 2 +- .../_Scripts/Game/GameEvent/IInteractable.cs | 1 + .../Character/Core/CharacterCarrier.cs | 4 +-- .../InteractionSubsystem_Order.cs | 4 ++- .../Event/RestaurantInteractionComponent.cs | 29 +++++++++++++++++-- .../Event/RestaurantInteractionEvents.cs | 3 +- .../RestaurantOrderSolver_Dirty.cs | 5 ++++ .../RestaurantOrderSolver_Serve.cs | 2 +- .../Component/RestaurantUiDisplayComponent.cs | 3 +- 9 files changed, 43 insertions(+), 10 deletions(-) diff --git a/Assets/_DDD/_Addressables/Prefabs/RestaurantPlayer.prefab b/Assets/_DDD/_Addressables/Prefabs/RestaurantPlayer.prefab index 47957a986..9607894d8 100644 --- a/Assets/_DDD/_Addressables/Prefabs/RestaurantPlayer.prefab +++ b/Assets/_DDD/_Addressables/Prefabs/RestaurantPlayer.prefab @@ -426,7 +426,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 81e01dd8c1cc3404d805400eba1bb4ae, type: 3} m_Name: m_EditorClassIdentifier: - _availableInteractions: 15 + _availableInteractions: 31 _nearColliders: - {fileID: 0} - {fileID: 0} diff --git a/Assets/_DDD/_Scripts/Game/GameEvent/IInteractable.cs b/Assets/_DDD/_Scripts/Game/GameEvent/IInteractable.cs index 834137f1f..554e04006 100644 --- a/Assets/_DDD/_Scripts/Game/GameEvent/IInteractable.cs +++ b/Assets/_DDD/_Scripts/Game/GameEvent/IInteractable.cs @@ -12,6 +12,7 @@ public enum InteractionType : uint RestaurantManagement = 1u << 0, RestaurantOrder = 1u << 1, RestaurantCook = 1u << 3, + RestaurantTrash = 1u << 4, All = 0xFFFFFFFFu } diff --git a/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterCarrier.cs b/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterCarrier.cs index 52a52bb19..2eebd066f 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterCarrier.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterCarrier.cs @@ -17,7 +17,7 @@ public interface ICarrier bool IsCarrying(); bool CanCarryTo(ICarriable carriable); void Carry(ICarriable carriable); - void Use(ICarriable carriable); + void Use(); } public interface ICarriable @@ -78,7 +78,7 @@ public void Carry(ICarriable carriable) EventBus.Broadcast(evt); } - public void Use(ICarriable carriable) + public void Use() { _currentCarriable = null; _speechBubble?.Hide(); diff --git a/Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Order.cs b/Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Order.cs index 2137531cb..c60ffa1a4 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Order.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Order.cs @@ -1,4 +1,6 @@ using System; +using System.Collections.Generic; +using Sirenix.Serialization; using UnityEngine; using UnityEngine.Serialization; @@ -49,7 +51,7 @@ public class InteractionSubsystem_Order : MonoBehaviour, IInteractionSubsystemOb { [SerializeField] private RestaurantOrderType _currentRestaurantOrderType = RestaurantOrderType.Wait; [SerializeField] private RestaurantOrderObjectState _orderObjectState = new(); - + public bool CanInteract() { if (GetInteractionSubsystemType() == RestaurantOrderType.Wait) diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionComponent.cs b/Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionComponent.cs index 25b408a71..6196f5546 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionComponent.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionComponent.cs @@ -134,16 +134,41 @@ private bool TryGetSubsystem(InteractionType interactionType, out IInteractionSu return _subsystems.TryGetValue(interactionType, out subsystem); } + private bool FindCurrentInteractionDataEntry(out InteractionDataEntry interactionDataEntry) + { + string interactionType = _interactionType.ToString(); + string subsystemType = string.Empty; + if (HasSubsystem(_interactionType) && GetSubsystem(_interactionType) != null) + { + subsystemType = GetSubsystem(_interactionType).GetCurrentSubsystemTypeName(); + } + + bool dataFound = DataManager.Instance.GetDataAsset().TryGetValueByTypeName(interactionType, + subsystemType, out interactionDataEntry); + if (!dataFound) + { + interactionDataEntry = new InteractionDataEntry(); + } + return dataFound; + } + // 새로운 스트럭트 기반 메서드들 public virtual InteractionExecutionParameters GetExecutionParameters() { + bool dataFound = FindCurrentInteractionDataEntry(out var interactionDataEntry); + if (!dataFound) + { + return new InteractionExecutionParameters(); + } + + _executionParameters = new InteractionExecutionParameters(interactionDataEntry.HoldTime); return _executionParameters; } public virtual InteractionDisplayParameters GetDisplayParameters() { - if (DataManager.Instance.GetDataAsset().TryGetValueByTypeName(_interactionType.ToString(), - _subsystems[_interactionType].GetCurrentSubsystemTypeName(), out var interactionDataEntry) == false) + bool dataFound = FindCurrentInteractionDataEntry(out var interactionDataEntry); + if (!dataFound) { return new InteractionDisplayParameters(); } diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionEvents.cs b/Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionEvents.cs index ede0745b1..d7d27db30 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionEvents.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionEvents.cs @@ -11,7 +11,8 @@ public static class RestaurantInteractionEventSolvers { {InteractionType.RestaurantManagement, typeof(RestaurantManagementSolver)}, {InteractionType.RestaurantOrder, typeof(RestaurantOrderSolver)}, - {InteractionType.RestaurantCook, typeof(RestaurantCookSolver)} + {InteractionType.RestaurantCook, typeof(RestaurantCookSolver)}, + {InteractionType.RestaurantTrash, typeof(RestaurantTrashSolver)} }; public static readonly Dictionary TypeToPlayerSolver = new() { diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs b/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs index 3dfb82c33..42e3db8ad 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs @@ -11,6 +11,11 @@ public override bool ExecuteInteractionSubsystem(IInteractor interactor, IIntera public override bool CanExecuteInteractionSubsystem(IInteractor interactor = null, IInteractable interactable = null, ScriptableObject payload = null) { + // Check carrying state + var carrier = interactor?.GetInteractorGameObject()?.GetComponent(); + if (carrier != null) + return !carrier.IsCarrying(); + return true; } } diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Serve.cs b/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Serve.cs index 351c6749b..784c619cf 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Serve.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Serve.cs @@ -18,7 +18,7 @@ public override bool ExecuteInteractionSubsystem(IInteractor interactor, IIntera bool result = base.ExecuteInteractionSubsystem(interactor, interactable, payload); // ExecuteInteractionSubsystem 이후에 음식 제거 - 미리 제거하면 CanExecute 통과 못 함 - carrier.Use(carrier.GetCurrentCarriable()); + carrier.Use(); // OnFoodServed (Consume Bill Hud item) RestaurantOrderEvent evt = new RestaurantOrderEvent diff --git a/Assets/_DDD/_Scripts/Restaurant/Ui/OrderUi/Component/RestaurantUiDisplayComponent.cs b/Assets/_DDD/_Scripts/Restaurant/Ui/OrderUi/Component/RestaurantUiDisplayComponent.cs index 499c8f295..927a144cb 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Ui/OrderUi/Component/RestaurantUiDisplayComponent.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Ui/OrderUi/Component/RestaurantUiDisplayComponent.cs @@ -92,9 +92,8 @@ protected override int GetDisplayLayer() } else { - return LayerMask.NameToLayer(LayerConstants.WorldUi); + return base.GetDisplayLayer(); } - return base.GetDisplayLayer(); } } } \ No newline at end of file From 1fbbb44f0201c7bfd055e20779ad5ecd3e3dd238 Mon Sep 17 00:00:00 2001 From: NTG Date: Tue, 2 Sep 2025 15:12:31 +0900 Subject: [PATCH 4/6] =?UTF-8?q?=EC=BA=90=EB=A6=AD=ED=84=B0=20=EC=95=A0?= =?UTF-8?q?=EB=8B=88=EB=A9=94=EC=9D=B4=EC=85=98=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Prefabs/BaseRestaurantCharacter.prefab | 13 ++ .../DataObjects/RestaurantPlayerData.asset | 4 +- .../Game/GameCharacter/IMovementConstraint.cs | 3 +- .../_Scripts/Game/GameObject/VirtualItem.cs | 1 + .../Character/Core/CharacterAnimation.cs | 7 +- .../Character/Core/CharacterCarrier.cs | 2 +- .../Character/Core/CharacterInteraction.cs | 13 +- .../Character/Core/CharacterMovement.cs | 19 +- .../Core/CharacterMovementConstraint.cs | 33 +++- .../Restaurant/Character/Npc/NpcMovement.cs | 2 +- .../Character/Player/PlayerAnimation.cs | 168 ++++++++++++++++-- .../Character/Player/PlayerInteraction.cs | 66 ++++--- .../Character/Player/PlayerMovement.cs | 108 +++++------ .../Data/DataObjects/RestaurantPlayerData.cs | 3 + Assets/_DDD/_Scripts/Utilities/Constants.cs | 7 - 15 files changed, 334 insertions(+), 115 deletions(-) diff --git a/Assets/_DDD/_Addressables/Prefabs/BaseRestaurantCharacter.prefab b/Assets/_DDD/_Addressables/Prefabs/BaseRestaurantCharacter.prefab index 40765e2f7..dbae2bf55 100644 --- a/Assets/_DDD/_Addressables/Prefabs/BaseRestaurantCharacter.prefab +++ b/Assets/_DDD/_Addressables/Prefabs/BaseRestaurantCharacter.prefab @@ -46,6 +46,7 @@ GameObject: - component: {fileID: 3365694194251356714} - component: {fileID: 8736963048629680089} - component: {fileID: 127430239903465757} + - component: {fileID: 6612028984666579384} - component: {fileID: 3095965496140440094} - component: {fileID: 7606279200344222219} - component: {fileID: 3805557225565208309} @@ -158,6 +159,18 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 38cb67223546879468e9c0655893e025, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!114 &6612028984666579384 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5259510642736920361} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3af7fa0aab2d45b19f78c34b028732b3, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!114 &3095965496140440094 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/Assets/_DDD/_Addressables/So/RestaurantData/DataObjects/RestaurantPlayerData.asset b/Assets/_DDD/_Addressables/So/RestaurantData/DataObjects/RestaurantPlayerData.asset index 4d63d37ff..d90b6101d 100644 --- a/Assets/_DDD/_Addressables/So/RestaurantData/DataObjects/RestaurantPlayerData.asset +++ b/Assets/_DDD/_Addressables/So/RestaurantData/DataObjects/RestaurantPlayerData.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c547bb4c8e960c6504b74f52fce7db1ef4e186627a316a5d33086c848c515ec2 -size 1999 +oid sha256:a8047ff542dab71569ad3973f9dc82774134b21c6962ff4cbb46ff64f52dd5f2 +size 2572 diff --git a/Assets/_DDD/_Scripts/Game/GameCharacter/IMovementConstraint.cs b/Assets/_DDD/_Scripts/Game/GameCharacter/IMovementConstraint.cs index 064721ade..096f173a2 100644 --- a/Assets/_DDD/_Scripts/Game/GameCharacter/IMovementConstraint.cs +++ b/Assets/_DDD/_Scripts/Game/GameCharacter/IMovementConstraint.cs @@ -2,6 +2,7 @@ namespace DDD.Restaurant { public interface IMovementConstraint { - + public bool IsBlockingMovement(); + public float GetMovementSpeedMultiplier(); } } \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Game/GameObject/VirtualItem.cs b/Assets/_DDD/_Scripts/Game/GameObject/VirtualItem.cs index 576bd631b..4322bc8c6 100644 --- a/Assets/_DDD/_Scripts/Game/GameObject/VirtualItem.cs +++ b/Assets/_DDD/_Scripts/Game/GameObject/VirtualItem.cs @@ -1,3 +1,4 @@ +using DDD.Restaurant; using UnityEngine; namespace DDD diff --git a/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterAnimation.cs b/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterAnimation.cs index 03a4d5a4c..850089b69 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterAnimation.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterAnimation.cs @@ -1,6 +1,6 @@ using UnityEngine; -namespace DDD +namespace DDD.Restaurant { [RequireComponent(typeof(SpineController))] public class CharacterAnimation : MonoBehaviour @@ -15,6 +15,11 @@ protected virtual void Awake() protected virtual void Start() { + } + + protected virtual void Update() + { + } protected virtual void OnDestroy() diff --git a/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterCarrier.cs b/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterCarrier.cs index 52a52bb19..d53612b3b 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterCarrier.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterCarrier.cs @@ -1,6 +1,6 @@ using UnityEngine; -namespace DDD +namespace DDD.Restaurant { public enum CarriableType { diff --git a/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterInteraction.cs b/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterInteraction.cs index 480813a3f..372abf494 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterInteraction.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterInteraction.cs @@ -5,7 +5,14 @@ namespace DDD.Restaurant { - public class CharacterInteraction : MonoBehaviour, IInteractor, IEventHandler + public interface IInteractionStateProvider + { + bool IsInteracting(); + float GetMovementSpeedMultiplier(); + bool IsMovementBlocked(); + } + + public class CharacterInteraction : MonoBehaviour, IInteractor, IEventHandler, IInteractionStateProvider { [EnumToggleButtons, SerializeField] protected InteractionType _availableInteractions; [SerializeField, ReadOnly] protected Collider[] _nearColliders = new Collider[10]; @@ -142,5 +149,9 @@ protected void InitializeInteractionSolvers(Dictionary ty } } } + + public virtual bool IsInteracting() => _interactingTarget != null; + public virtual float GetMovementSpeedMultiplier() => 1f; + public virtual bool IsMovementBlocked() => false; } } diff --git a/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterMovement.cs b/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterMovement.cs index a7f326db4..136383000 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterMovement.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterMovement.cs @@ -1,13 +1,12 @@ using UnityEngine; -namespace DDD +namespace DDD.Restaurant { public class CharacterMovement : MonoBehaviour { - private CharacterMovementConstraint _constraint; protected virtual void Awake() { - _constraint = gameObject.AddComponent(); + } public virtual bool CanMove() @@ -24,5 +23,19 @@ public virtual bool CanMove() } return true; } + + public virtual float GetMovementSpeedMultiplier() + { + var constraints = GetComponents(); + float minMultiplier = 1f; + + foreach (var constraint in constraints) + { + float multiplier = constraint.GetMovementSpeedMultiplier(); + minMultiplier = Mathf.Min(minMultiplier, multiplier); + } + + return minMultiplier; + } } } \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterMovementConstraint.cs b/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterMovementConstraint.cs index 076264ed4..3a55c3720 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterMovementConstraint.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterMovementConstraint.cs @@ -1,18 +1,47 @@ using UnityEngine; -namespace DDD +namespace DDD.Restaurant { [RequireComponent(typeof(CharacterAnimation))] public class CharacterMovementConstraint : MonoBehaviour, IMovementConstraint { + private CharacterAnimation _characterAnimation; + private IInteractionStateProvider _interactionStateProvider; + + private void Awake() + { + _characterAnimation = GetComponent(); + _interactionStateProvider = GetComponent(); + } + public bool IsBlockingMovement() { - if (GetComponent().IsPlayingAnimation()) + if (_characterAnimation.IsPlayingAnimation()) + { + return true; + } + + if (_interactionStateProvider != null && _interactionStateProvider.IsMovementBlocked()) { return true; } return false; } + + public float GetMovementSpeedMultiplier() + { + if (IsBlockingMovement()) + { + return 0f; + } + + if (_interactionStateProvider != null) + { + return _interactionStateProvider.GetMovementSpeedMultiplier(); + } + + return 1f; + } } } \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Character/Npc/NpcMovement.cs b/Assets/_DDD/_Scripts/Restaurant/Character/Npc/NpcMovement.cs index 1af380f21..cb560e8d7 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Character/Npc/NpcMovement.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Character/Npc/NpcMovement.cs @@ -1,7 +1,7 @@ using Pathfinding; using UnityEngine; -namespace DDD +namespace DDD.Restaurant { [RequireComponent(typeof(AIPath))] public class NpcMovement : CharacterMovement, IAiMovement, ICurrentDirection diff --git a/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerAnimation.cs b/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerAnimation.cs index 8ae579f6d..db6bae46e 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerAnimation.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerAnimation.cs @@ -1,48 +1,186 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; using UnityEngine; namespace DDD.Restaurant { + public enum PlayerTaskAnimationState + { + None = 0, + Dashing + } + + public enum PlayerActionAnimationState + { + None = 0, + CleaningTable = 1, + } + + public enum PlayerDefaultAnimationState + { + None = 0, + Idle = 1, + Moving = 2, + } + [RequireComponent(typeof(PlayerMovement))] public class PlayerAnimation : CharacterAnimation { - private PlayerMovement _playerMovement; + private IMovementState _movementState; + private PlayerTaskAnimationState _currentTaskAnimationState = PlayerTaskAnimationState.None; + private PlayerActionAnimationState _currentActionAnimationState = PlayerActionAnimationState.None; + private PlayerDefaultAnimationState _currentDefaultAnimationState = PlayerDefaultAnimationState.None; + + private Dictionary _taskToAnimation = new() + { + { PlayerTaskAnimationState.Dashing, "Dash" }, + }; + + private Dictionary _actionToAnimation = new() + { + { PlayerActionAnimationState.CleaningTable, "Cleaning/CleaningTable" }, + }; + + private Dictionary _defaultToAnimation = new() + { + { PlayerDefaultAnimationState.Idle, "Idle" }, + { PlayerDefaultAnimationState.Moving, "RunFast" }, + }; protected override void Awake() { base.Awake(); - _playerMovement = GetComponent(); + _movementState = GetComponent(); } protected override void Start() { base.Start(); - _playerMovement.OnMoving += OnMove; - _playerMovement.OnDashing += OnDash; + InitializeTaskAnimations(); } + protected override void Update() + { + UpdateAnimations(); + } + protected override void OnDestroy() { base.OnDestroy(); - - if (_playerMovement) + + if (_movementState != null) { - _playerMovement.OnMoving -= OnMove; - _playerMovement.OnDashing -= OnDash; + _movementState.OnDashing -= HandleDashingTask; } } - private void OnMove(bool isMoving) + private void InitializeTaskAnimations() { - string animationName = isMoving ? RestaurantPlayerAnimationType.Walk : RestaurantPlayerAnimationType.Idle; - _spineController.PlayAnimation(animationName, true); + _movementState.OnDashing += HandleDashingTask; } - - private void OnDash(float dashTime) + + private void UpdateAnimations() { - _spineController.PlayAnimationDuration(RestaurantPlayerAnimationType.Dash, false, duration:dashTime); - } + // 1순위: Task 애니메이션이 재생 중이면 다른 애니메이션 처리하지 않음 + if (_currentTaskAnimationState != PlayerTaskAnimationState.None) + { + _currentActionAnimationState = PlayerActionAnimationState.None; + _currentDefaultAnimationState = PlayerDefaultAnimationState.None; + return; + } + // 2순위: ActionState 체크 + var desiredActionState = GetDesiredActionState(); + if (desiredActionState != PlayerActionAnimationState.None) + { + if (_currentActionAnimationState != desiredActionState) + { + _currentDefaultAnimationState = PlayerDefaultAnimationState.None; + _currentActionAnimationState = desiredActionState; + PlayActionAnimation(_currentActionAnimationState); + } + return; + } + + // 3순위: 기본 AnimationState 처리 + var desiredADefaultState = GetDesiredADefaultState(); + if (_currentDefaultAnimationState != desiredADefaultState) + { + _currentDefaultAnimationState = desiredADefaultState; + PlayStateAnimation(_currentDefaultAnimationState); + } + } + + private void HandleDashingTask(float duration) + { + _ = PlayTaskAnimation(PlayerTaskAnimationState.Dashing, duration); + } + + private async Task PlayTaskAnimation(PlayerTaskAnimationState state, float duration = 0f) + { + _currentTaskAnimationState = state; + + if (_taskToAnimation.TryGetValue(state, out string animationName)) + { + if (duration > 0f) + { + _spineController.PlayAnimationDuration(animationName, false, duration); + } + else + { + _spineController.PlayAnimation(animationName, false); + } + } + + await Awaitable.WaitForSecondsAsync(duration); + _currentTaskAnimationState = PlayerTaskAnimationState.None; + } + + private PlayerActionAnimationState GetDesiredActionState() + { + // 여기서 현재 액션 상태를 확인하는 로직 구현 + // 예: 상호작용 컴포넌트에서 상태 가져오기 + + return PlayerActionAnimationState.None; + } + + private void PlayActionAnimation(PlayerActionAnimationState actionAnimationState) + { + if (_actionToAnimation.TryGetValue(actionAnimationState, out string animationName)) + { + _spineController.PlayAnimation(animationName, true); + } + } + + private PlayerDefaultAnimationState GetDesiredADefaultState() + { + if (_movementState.IsMoving()) + { + return PlayerDefaultAnimationState.Moving; + } + + return PlayerDefaultAnimationState.Idle; + } + + private void PlayStateAnimation(PlayerDefaultAnimationState state) + { + if (_defaultToAnimation.TryGetValue(state, out string animationName)) + { + switch (state) + { + case PlayerDefaultAnimationState.None: + break; + case PlayerDefaultAnimationState.Idle: + case PlayerDefaultAnimationState.Moving: + _spineController.PlayAnimation(animationName, true); + break; + default: + throw new ArgumentOutOfRangeException(nameof(state), state, null); + } + } + } } } \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerInteraction.cs b/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerInteraction.cs index 49c3eb3ec..30c4143c0 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerInteraction.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerInteraction.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Threading.Tasks; using UnityEngine; using UnityEngine.InputSystem; @@ -12,6 +11,7 @@ public class PlayerInteraction : CharacterInteraction private float _interactHeldTime; private bool _isInteracting; + private float _interactionStartTime = -1f; protected override void Start() { @@ -68,7 +68,7 @@ protected virtual void Update() if (_nearestInteractable != _previousInteractable) { _previousInteractable = _nearestInteractable; - OnNearestInteractableChanged(_nearestInteractable); + BroadcastInteractionUi(_nearestInteractable, CanInteractTo(_nearestInteractable), 0f); } if (_isInteracting) @@ -90,13 +90,17 @@ protected virtual void Update() OnInteractionCompleted(); ResetInteractionState(); - OnInteractionHoldProgress(0f); + BroadcastInteractionUi(_nearestInteractable, CanInteractTo(_nearestInteractable), 0f); } else { - OnInteractionHoldProgress(ratio); + BroadcastInteractionUi(_nearestInteractable, CanInteractTo(_nearestInteractable), ratio); } } + else + { + BroadcastInteractionUi(_nearestInteractable, CanInteractTo(_nearestInteractable), 0f); + } } @@ -120,28 +124,9 @@ private void OnInteractPerformed(InputAction.CallbackContext context) private void OnInteractCanceled(InputAction.CallbackContext context) { - OnInteractionHoldProgress(0f); + BroadcastInteractionUi(_nearestInteractable, CanInteractTo(_nearestInteractable), 0f); ResetInteractionState(); - } - - protected void OnNearestInteractableChanged(IInteractable newTarget) - { - if (newTarget != null) - { - BroadcastShowUi(newTarget, CanInteractTo(newTarget), 0f); - } - else - { - EventBus.Broadcast(GameEvents.HideInteractionUiEvent); - } - } - - protected void OnInteractionHoldProgress(float ratio) - { - if (_interactingTarget != null) - { - BroadcastShowUi(_interactingTarget, CanInteractTo(_interactingTarget), ratio); - } + _interactionStartTime = -1f; } protected override void OnInteractionCompleted() @@ -149,8 +134,14 @@ protected override void OnInteractionCompleted() } - private void BroadcastShowUi(IInteractable interactable, bool canInteract, float ratio) + private void BroadcastInteractionUi(IInteractable interactable, bool canInteract, float ratio) { + if (interactable == null) + { + EventBus.Broadcast(GameEvents.HideInteractionUiEvent); + return; + } + var displayParameters = interactable.GetDisplayParameters(); var evt = GameEvents.ShowInteractionUiEvent; evt.CanInteract = canInteract; @@ -167,7 +158,7 @@ protected void ResetInteractionState() _isInteracting = false; _interactingTarget = null; _interactHeldTime = 0f; - OnInteractionHoldProgress(0f); + BroadcastInteractionUi(_nearestInteractable, CanInteractTo(_nearestInteractable), 0f); } protected IInteractable GetNearestInteractable() @@ -206,5 +197,26 @@ public override bool FetchSolverTypeForInteraction(InteractionType type, out Typ return base.FetchSolverTypeForInteraction(type, out solverType); } + + public override bool IsInteracting() => _isInteracting; + + public override float GetMovementSpeedMultiplier() + { + if (_isInteracting == false) + { + _interactionStartTime = -1f; + return 1f; + } + + if (_interactionStartTime < 0f) + { + _interactionStartTime = Time.time; + } + + float elapsed = Time.time - _interactionStartTime; + float normalizedTime = Mathf.Clamp01(elapsed / _restaurantPlayerDataSo.DecelerationTime); + + return Mathf.Clamp01(_restaurantPlayerDataSo.InteractionDecelerationCurve.Evaluate(normalizedTime)); + } } } \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerMovement.cs b/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerMovement.cs index 98a911da5..79489f0c7 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerMovement.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerMovement.cs @@ -7,27 +7,32 @@ namespace DDD.Restaurant { + public interface IMovementState + { + bool IsMoving(); + bool IsDashing(); + Action OnDashing { get; set; } + } + [RequireComponent(typeof(Rigidbody))] [RequireComponent(typeof(BoxCollider))] - public class PlayerMovement : CharacterMovement, ICurrentDirection + public class PlayerMovement : CharacterMovement, ICurrentDirection, IMovementState { #region Fields private Rigidbody _rigidbody; private BoxCollider _boxCollider; - private RestaurantPlayerData _playerDataSo; private Vector3 _inputDirection; private Vector3 _currentDirection; private Vector3 _currentVelocity; + private bool _isInputtedMovement; private bool _isMoving; private bool _isDashing; private bool _isDashCooldown; - private bool _isInitialized; - - public Action OnMoving; - public Action OnDashing; + + public Action OnDashing { get; set; } #if UNITY_EDITOR private MovementDebugVisualizer _debugVisualizer; @@ -44,15 +49,13 @@ protected override void Awake() InitializeComponents(); } - private async void Start() + private void Start() { - await InitializePlayerData(); + SubscribeToInputEvents(); } private void FixedUpdate() { - if (!_isInitialized) return; - HandleMovement(); #if UNITY_EDITOR @@ -69,6 +72,8 @@ private void OnDestroy() #region Initialization + private RestaurantPlayerData GetPlayerData() => RestaurantData.Instance.PlayerData; + private void InitializeComponents() { _rigidbody = GetComponent(); @@ -79,46 +84,30 @@ private void InitializeComponents() #endif } - private System.Threading.Tasks.Task InitializePlayerData() - { - try - { - _playerDataSo = RestaurantData.Instance.PlayerData; - SubscribeToInputEvents(); - _isInitialized = true; - } - catch (Exception e) - { - Debug.LogError($"Player data load failed\n{e}"); - } - - return System.Threading.Tasks.Task.CompletedTask; - } - private void SubscribeToInputEvents() { - _playerDataSo.MoveAction = InputManager.Instance.GetAction(InputActionMaps.Restaurant, nameof(RestaurantActions.Move)); - _playerDataSo.DashAction = InputManager.Instance.GetAction(InputActionMaps.Restaurant, nameof(RestaurantActions.Dash)); + GetPlayerData().MoveAction = InputManager.Instance.GetAction(InputActionMaps.Restaurant, nameof(RestaurantActions.Move)); + GetPlayerData().DashAction = InputManager.Instance.GetAction(InputActionMaps.Restaurant, nameof(RestaurantActions.Dash)); - _playerDataSo.MoveAction.performed += OnMove; - _playerDataSo.MoveAction.canceled += OnMove; - _playerDataSo.DashAction.performed += OnDash; + GetPlayerData().MoveAction.performed += OnMove; + GetPlayerData().MoveAction.canceled += OnMove; + GetPlayerData().DashAction.performed += OnDash; } private void UnsubscribeFromInputEvents() { - if (!_playerDataSo) return; + if (GetPlayerData() == null) return; - _playerDataSo.MoveAction.performed -= OnMove; - _playerDataSo.MoveAction.canceled -= OnMove; - _playerDataSo.DashAction.performed -= OnDash; + GetPlayerData().MoveAction.performed -= OnMove; + GetPlayerData().MoveAction.canceled -= OnMove; + GetPlayerData().DashAction.performed -= OnDash; } #endregion #region Movement - private void HandleMovement() + private void HandleMovement() { if (CanMove()) { @@ -128,7 +117,7 @@ private void HandleMovement() public override bool CanMove() { - return base.CanMove() && _playerDataSo.IsMoveEnabled && !_isDashing; + return base.CanMove() && GetPlayerData().IsMoveEnabled && !_isDashing; } private void Move() @@ -141,23 +130,25 @@ private void Move() private void UpdateMovementState() { - _isMoving = _inputDirection != Vector3.zero; - OnMoving?.Invoke(_isMoving); + _isInputtedMovement = _inputDirection != Vector3.zero; + _isMoving = _isInputtedMovement && _currentVelocity != Vector3.zero; } private void UpdateVelocity() { - if (_isMoving) + float speedMultiplier = GetMovementSpeedMultiplier(); + + if (_isInputtedMovement) { Vector3 slideDirection = GetSlideAdjustedDirection(_inputDirection.normalized); - Vector3 targetVelocity = slideDirection * _playerDataSo.MoveSpeed; + Vector3 targetVelocity = slideDirection * (GetPlayerData().MoveSpeed * speedMultiplier); _currentVelocity = Vector3.MoveTowards(_currentVelocity, targetVelocity, - _playerDataSo.Acceleration * Time.fixedDeltaTime); + GetPlayerData().Acceleration * Time.fixedDeltaTime); } else { _currentVelocity = Vector3.MoveTowards(_currentVelocity, Vector3.zero, - _playerDataSo.Deceleration * Time.fixedDeltaTime); + GetPlayerData().Deceleration * Time.fixedDeltaTime); } } @@ -178,14 +169,14 @@ private void OnDash(InputAction.CallbackContext context) } } - private bool CanDash() => _playerDataSo.IsDashEnabled && !_isDashing && !_isDashCooldown; + private bool CanDash() => GetPlayerData().IsDashEnabled && !_isDashing && !_isDashCooldown; private IEnumerator DashCoroutine() { StartDash(); - yield return new WaitForSeconds(_playerDataSo.DashTime); + yield return new WaitForSeconds(GetPlayerData().DashTime); EndDash(); - yield return new WaitForSeconds(_playerDataSo.DashCooldown); + yield return new WaitForSeconds(GetPlayerData().DashCooldown); ResetDashCooldown(); } @@ -193,10 +184,10 @@ private void StartDash() { _isDashing = true; _isDashCooldown = true; - OnDashing?.Invoke(_playerDataSo.DashTime); + OnDashing?.Invoke(GetPlayerData().DashTime); Vector3 slideDashDirection = GetSlideAdjustedDirection(_currentDirection.normalized); - _rigidbody.linearVelocity = slideDashDirection * _playerDataSo.DashSpeed; + _rigidbody.linearVelocity = slideDashDirection * GetPlayerData().DashSpeed; } private void EndDash() @@ -245,7 +236,7 @@ private Vector3 GetSlideAdjustedDirection(Vector3 inputDirection) Vector3 slide = Vector3.ProjectOnPlane(inputDirection, hit.normal).normalized; float slideFactor = CalculateSlideFactor(inputDirection, hit.normal); - return slideFactor < _playerDataSo.MinSlideFactorThreshold ? Vector3.zero : slide * slideFactor; + return slideFactor < GetPlayerData().MinSlideFactorThreshold ? Vector3.zero : slide * slideFactor; } private bool TryGetCollisionInfo(Vector3 direction, out RaycastHit hit) @@ -253,16 +244,16 @@ private bool TryGetCollisionInfo(Vector3 direction, out RaycastHit hit) Vector3 origin = _boxCollider.bounds.center; Vector3 halfExtents = _boxCollider.bounds.extents; float distance = Mathf.Min(_boxCollider.bounds.size.x, _boxCollider.bounds.size.z); - int layerMask = ~_playerDataSo.IgnoreSlidingLayerMask; + int layerMask = ~GetPlayerData().IgnoreSlidingLayerMask; - return Physics.BoxCast(origin, halfExtents * _playerDataSo.BoxCastExtentScale, + return Physics.BoxCast(origin, halfExtents * GetPlayerData().BoxCastExtentScale, direction, out hit, transform.rotation, distance, layerMask, QueryTriggerInteraction.Ignore); } private float CalculateSlideFactor(Vector3 direction, Vector3 normal) { float dot = Vector3.Dot(direction.normalized, normal); - return Mathf.Pow(1f - Mathf.Abs(dot), _playerDataSo.SlidingThreshold); + return Mathf.Pow(1f - Mathf.Abs(dot), GetPlayerData().SlidingThreshold); } #endregion @@ -270,13 +261,22 @@ private float CalculateSlideFactor(Vector3 direction, Vector3 normal) #if UNITY_EDITOR private void HandleDebugVisualization() { - if (_playerDataSo.IsDrawLineDebug) + if (GetPlayerData().IsDrawLineDebug) { _debugVisualizer.UpdateVisualization(transform.position, _inputDirection, - _currentVelocity, _playerDataSo); + _currentVelocity, GetPlayerData()); } } #endif + public bool IsMoving() + { + return _isMoving; + } + + public bool IsDashing() + { + return _isDashing; + } } #if UNITY_EDITOR diff --git a/Assets/_DDD/_Scripts/Restaurant/Data/DataObjects/RestaurantPlayerData.cs b/Assets/_DDD/_Scripts/Restaurant/Data/DataObjects/RestaurantPlayerData.cs index 6d47993fb..3622761c3 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Data/DataObjects/RestaurantPlayerData.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Data/DataObjects/RestaurantPlayerData.cs @@ -33,6 +33,9 @@ public class RestaurantPlayerData : ScriptableObject public float InteractionRadius = 1f; public LayerMask InteractionLayerMask; + public AnimationCurve InteractionDecelerationCurve; + public float DecelerationTime = 0.3f; + // 디버그 public int InputLineSortingOrder = 10; public int VelocityLineSortingOrder = 9; diff --git a/Assets/_DDD/_Scripts/Utilities/Constants.cs b/Assets/_DDD/_Scripts/Utilities/Constants.cs index 55e4167b9..6af67eb41 100644 --- a/Assets/_DDD/_Scripts/Utilities/Constants.cs +++ b/Assets/_DDD/_Scripts/Utilities/Constants.cs @@ -10,13 +10,6 @@ public static class CommonConstants public const string BlockImage = "BlockImage"; } - public static class RestaurantPlayerAnimationType - { - public const string Idle = "Idle"; - public const string Walk = "RunFast"; - public const string Dash = "Dash"; - } - public static class PathConstants { public const string RawSpritesPathUpper = "ASSETS/_DDD/_RAW/SPRITES/"; From fa6746b93e0215a68fabb640c16a875ee12eb6b7 Mon Sep 17 00:00:00 2001 From: NTG Date: Tue, 2 Sep 2025 15:49:34 +0900 Subject: [PATCH 5/6] =?UTF-8?q?action=20=EC=95=A0=EB=8B=88=EB=A9=94?= =?UTF-8?q?=EC=9D=B4=EC=85=98=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_Scripts/Game/GameEvent/IInteractable.cs | 4 +-- .../Character/Core/RestaurantCharacter.cs | 34 +------------------ .../Character/Player/PlayerAnimation.cs | 21 ++++++++++-- .../Character/Player/PlayerInteraction.cs | 9 +++-- 4 files changed, 28 insertions(+), 40 deletions(-) diff --git a/Assets/_DDD/_Scripts/Game/GameEvent/IInteractable.cs b/Assets/_DDD/_Scripts/Game/GameEvent/IInteractable.cs index 554e04006..2fb421b1d 100644 --- a/Assets/_DDD/_Scripts/Game/GameEvent/IInteractable.cs +++ b/Assets/_DDD/_Scripts/Game/GameEvent/IInteractable.cs @@ -59,8 +59,8 @@ public interface IInteractor bool CanSolveInteractionType(InteractionType interactionType); bool FetchSolverTypeForInteraction(InteractionType type, out Type solverType); bool IsInteractionHidden(IInteractable interactable); - bool CanInteractTo(IInteractable interactable, - ScriptableObject payloadSo = null); + bool CanInteractTo(IInteractable interactable, ScriptableObject payloadSo = null); + bool IsInteracting(); } public interface IInteractionSolver diff --git a/Assets/_DDD/_Scripts/Restaurant/Character/Core/RestaurantCharacter.cs b/Assets/_DDD/_Scripts/Restaurant/Character/Core/RestaurantCharacter.cs index b5142beef..bfa3b9690 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Character/Core/RestaurantCharacter.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Character/Core/RestaurantCharacter.cs @@ -1,12 +1,10 @@ -using System; -using Sirenix.OdinInspector; using UnityEngine; namespace DDD.Restaurant { [RequireComponent(typeof(CharacterInteraction))] [RequireComponent(typeof(SpineController))] - public class RestaurantCharacter : MonoBehaviour, IGameCharacter, IInteractor + public class RestaurantCharacter : MonoBehaviour, IGameCharacter { CharacterInteraction _interactionComponent; protected SpineController _spineController; @@ -22,35 +20,5 @@ protected virtual void Start() { } - - public GameObject GetInteractorGameObject() - { - return _interactionComponent.GetInteractorGameObject(); - } - - public IInteractable GetFocusedInteractable() - { - return _interactionComponent.GetFocusedInteractable(); - } - - public bool CanSolveInteractionType(InteractionType interactionType) - { - return _interactionComponent.CanSolveInteractionType(interactionType); - } - - public bool FetchSolverTypeForInteraction(InteractionType type, out Type solverType) - { - return _interactionComponent.FetchSolverTypeForInteraction(type, out solverType); - } - - public bool IsInteractionHidden(IInteractable interactable) - { - return _interactionComponent.IsInteractionHidden(interactable); - } - - public bool CanInteractTo(IInteractable interactable, ScriptableObject payloadSo = null) - { - return _interactionComponent.CanInteractTo(interactable, payloadSo); - } } } \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerAnimation.cs b/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerAnimation.cs index db6bae46e..2d3984832 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerAnimation.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerAnimation.cs @@ -27,7 +27,9 @@ public enum PlayerDefaultAnimationState [RequireComponent(typeof(PlayerMovement))] public class PlayerAnimation : CharacterAnimation { + private IInteractor _interactor; private IMovementState _movementState; + private PlayerTaskAnimationState _currentTaskAnimationState = PlayerTaskAnimationState.None; private PlayerActionAnimationState _currentActionAnimationState = PlayerActionAnimationState.None; private PlayerDefaultAnimationState _currentDefaultAnimationState = PlayerDefaultAnimationState.None; @@ -52,6 +54,7 @@ protected override void Awake() { base.Awake(); + _interactor = GetComponent(); _movementState = GetComponent(); } @@ -94,7 +97,11 @@ private void UpdateAnimations() // 2순위: ActionState 체크 var desiredActionState = GetDesiredActionState(); - if (desiredActionState != PlayerActionAnimationState.None) + if (desiredActionState == PlayerActionAnimationState.None) + { + _currentActionAnimationState = PlayerActionAnimationState.None; + } + else { if (_currentActionAnimationState != desiredActionState) { @@ -141,8 +148,16 @@ private async Task PlayTaskAnimation(PlayerTaskAnimationState state, float durat private PlayerActionAnimationState GetDesiredActionState() { - // 여기서 현재 액션 상태를 확인하는 로직 구현 - // 예: 상호작용 컴포넌트에서 상태 가져오기 + if (_interactor.IsInteracting() == false) return PlayerActionAnimationState.None; + + var interactable = _interactor.GetFocusedInteractable(); + if (interactable == null) return PlayerActionAnimationState.None; + + var interactionType = interactable.GetInteractionType(); + if (interactionType == InteractionType.RestaurantTrash) // TODO : 서브시스템 연결해서 테이블청소 연결해야함 + { + return PlayerActionAnimationState.CleaningTable; + } return PlayerActionAnimationState.None; } diff --git a/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerInteraction.cs b/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerInteraction.cs index 30c4143c0..1a28e5880 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerInteraction.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerInteraction.cs @@ -197,8 +197,13 @@ public override bool FetchSolverTypeForInteraction(InteractionType type, out Typ return base.FetchSolverTypeForInteraction(type, out solverType); } - - public override bool IsInteracting() => _isInteracting; + + public override bool IsInteracting() + { + if (base.IsInteracting() == false) return false; + + return _isInteracting; + } public override float GetMovementSpeedMultiplier() { From d66aee7820c6a569f0daf47c55bef77eac3d1d3c Mon Sep 17 00:00:00 2001 From: Jeonghyeon Ha Date: Tue, 2 Sep 2025 16:53:26 +0900 Subject: [PATCH 6/6] =?UTF-8?q?=EB=A0=88=EC=8A=A4=ED=86=A0=EB=9E=91=20?= =?UTF-8?q?=EC=9D=B8=ED=84=B0=EB=9E=99=EC=85=98=20=ED=8F=B4=EB=8D=94=20?= =?UTF-8?q?=EC=A0=95=EB=A6=AC,=20=EC=9D=B8=ED=84=B0=EB=9E=99=EC=85=98?= =?UTF-8?q?=EC=9D=B4=20CharacterActionState=20=EC=A0=9C=EA=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Character/Core/CharacterActionTypes.cs | 10 +++++ .../Core/CharacterActionTypes.cs.meta | 3 ++ .../Character/Core/CharacterInteraction.cs | 23 ++++++++-- .../Character/Player/PlayerAnimation.cs | 42 +++++++------------ .../{Environment => }/Interactions.meta | 0 .../RestaurantInteractionComponent.cs | 30 ++++++++++++- .../RestaurantInteractionComponent.cs.meta | 0 .../RestaurantInteractionEvents.cs | 0 .../RestaurantInteractionEvents.cs.meta | 0 .../Restaurant/Interactions/Solvers.meta | 3 ++ .../{Event => Interactions}/Solvers/Misc.meta | 0 .../Solvers/Misc/RestaurantTrashSolver.cs | 8 ++-- .../Misc/RestaurantTrashSolver.cs.meta | 0 .../Solvers/RestaurantCooks.meta | 0 .../RestaurantCooks/RestaurantCookSolver.cs | 0 .../RestaurantCookSolver.cs.meta | 0 .../RestaurantCookSolver_StartCooking.cs | 0 .../RestaurantCookSolver_StartCooking.cs.meta | 0 .../Solvers/RestaurantManagements.meta | 0 .../RestaurantManagementSolver.cs | 0 .../RestaurantManagementSolver.cs.meta | 0 .../RestaurantManagementSolver_Menu.cs | 0 .../RestaurantManagementSolver_Menu.cs.meta | 0 .../RestaurantManagementSolver_Start.cs | 0 .../RestaurantManagementSolver_Start.cs.meta | 0 .../Solvers/RestaurantOrders.meta | 0 .../RestaurantOrders/RestaurantOrderSolver.cs | 0 .../RestaurantOrderSolver.cs.meta | 0 .../RestaurantOrderSolverBase.cs | 0 .../RestaurantOrderSolverBase.cs.meta | 0 .../RestaurantOrderSolver_Busy.cs | 0 .../RestaurantOrderSolver_Busy.cs.meta | 0 .../RestaurantOrderSolver_Dirty.cs | 0 .../RestaurantOrderSolver_Dirty.cs.meta | 0 .../RestaurantOrderSolver_Order.cs | 0 .../RestaurantOrderSolver_Order.cs.meta | 0 .../RestaurantOrderSolver_Reaction.cs | 0 .../RestaurantOrderSolver_Reaction.cs.meta | 0 .../RestaurantOrderSolver_Reserved.cs | 0 .../RestaurantOrderSolver_Reserved.cs.meta | 0 .../RestaurantOrderSolver_Serve.cs | 0 .../RestaurantOrderSolver_Serve.cs.meta | 0 .../RestaurantOrderSolver_Wait.cs | 0 .../RestaurantOrderSolver_Wait.cs.meta | 0 .../Solvers/RestaurantSubsystemSolver.cs | 21 +++++++--- .../Solvers/RestaurantSubsystemSolver.cs.meta | 0 .../Restaurant/Interactions/Subsystems.meta | 3 ++ .../Subsystems/InteractionSubsystemBase.cs | 9 ++++ .../InteractionSubsystemBase.cs.meta | 3 ++ .../Subsystems}/InteractionSubsystem_Cook.cs | 9 +++- .../InteractionSubsystem_Cook.cs.meta | 0 .../InteractionSubsystem_Management.cs | 9 +++- .../InteractionSubsystem_Management.cs.meta | 0 .../Subsystems}/InteractionSubsystem_Order.cs | 12 +++++- .../InteractionSubsystem_Order.cs.meta | 0 55 files changed, 140 insertions(+), 45 deletions(-) create mode 100644 Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterActionTypes.cs create mode 100644 Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterActionTypes.cs.meta rename Assets/_DDD/_Scripts/Restaurant/{Environment => }/Interactions.meta (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/RestaurantInteractionComponent.cs (88%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/RestaurantInteractionComponent.cs.meta (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/RestaurantInteractionEvents.cs (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/RestaurantInteractionEvents.cs.meta (100%) create mode 100644 Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers.meta rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/Misc.meta (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/Misc/RestaurantTrashSolver.cs (61%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/Misc/RestaurantTrashSolver.cs.meta (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantCooks.meta (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantCooks/RestaurantCookSolver.cs (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantCooks/RestaurantCookSolver.cs.meta (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantCooks/RestaurantCookSolver_StartCooking.cs (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantCooks/RestaurantCookSolver_StartCooking.cs.meta (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantManagements.meta (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantManagements/RestaurantManagementSolver.cs (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantManagements/RestaurantManagementSolver.cs.meta (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantManagements/RestaurantManagementSolver_Menu.cs (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantManagements/RestaurantManagementSolver_Menu.cs.meta (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantManagements/RestaurantManagementSolver_Start.cs (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantManagements/RestaurantManagementSolver_Start.cs.meta (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantOrders.meta (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantOrders/RestaurantOrderSolver.cs (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantOrders/RestaurantOrderSolver.cs.meta (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantOrders/RestaurantOrderSolverBase.cs (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantOrders/RestaurantOrderSolverBase.cs.meta (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantOrders/RestaurantOrderSolver_Busy.cs (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantOrders/RestaurantOrderSolver_Busy.cs.meta (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs.meta (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantOrders/RestaurantOrderSolver_Order.cs (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantOrders/RestaurantOrderSolver_Order.cs.meta (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantOrders/RestaurantOrderSolver_Reaction.cs (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantOrders/RestaurantOrderSolver_Reaction.cs.meta (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantOrders/RestaurantOrderSolver_Reserved.cs (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantOrders/RestaurantOrderSolver_Reserved.cs.meta (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantOrders/RestaurantOrderSolver_Serve.cs (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantOrders/RestaurantOrderSolver_Serve.cs.meta (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantOrders/RestaurantOrderSolver_Wait.cs (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantOrders/RestaurantOrderSolver_Wait.cs.meta (100%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantSubsystemSolver.cs (65%) rename Assets/_DDD/_Scripts/Restaurant/{Event => Interactions}/Solvers/RestaurantSubsystemSolver.cs.meta (100%) create mode 100644 Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems.meta create mode 100644 Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystemBase.cs create mode 100644 Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystemBase.cs.meta rename Assets/_DDD/_Scripts/Restaurant/{Environment/Interactions => Interactions/Subsystems}/InteractionSubsystem_Cook.cs (76%) rename Assets/_DDD/_Scripts/Restaurant/{Environment/Interactions => Interactions/Subsystems}/InteractionSubsystem_Cook.cs.meta (100%) rename Assets/_DDD/_Scripts/Restaurant/{Environment/Interactions => Interactions/Subsystems}/InteractionSubsystem_Management.cs (78%) rename Assets/_DDD/_Scripts/Restaurant/{Environment/Interactions => Interactions/Subsystems}/InteractionSubsystem_Management.cs.meta (100%) rename Assets/_DDD/_Scripts/Restaurant/{Environment/Interactions => Interactions/Subsystems}/InteractionSubsystem_Order.cs (90%) rename Assets/_DDD/_Scripts/Restaurant/{Environment/Interactions => Interactions/Subsystems}/InteractionSubsystem_Order.cs.meta (100%) diff --git a/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterActionTypes.cs b/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterActionTypes.cs new file mode 100644 index 000000000..6d2f13618 --- /dev/null +++ b/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterActionTypes.cs @@ -0,0 +1,10 @@ +using UnityEngine; + +namespace DDD.Restaurant +{ + public enum CharacterActionState + { + None = 0, + CleaningTable = 1, + } +} \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterActionTypes.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterActionTypes.cs.meta new file mode 100644 index 000000000..956522c27 --- /dev/null +++ b/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterActionTypes.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d2e8668bef454e00a5f8b8cd49919645 +timeCreated: 1756795869 \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterInteraction.cs b/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterInteraction.cs index 372abf494..0179c1822 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterInteraction.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterInteraction.cs @@ -11,8 +11,13 @@ public interface IInteractionStateProvider float GetMovementSpeedMultiplier(); bool IsMovementBlocked(); } + + public interface ICharacterActionStateProvider + { + CharacterActionState GetCurrentActionState(); + } - public class CharacterInteraction : MonoBehaviour, IInteractor, IEventHandler, IInteractionStateProvider + public class CharacterInteraction : MonoBehaviour, IInteractor, IEventHandler, IInteractionStateProvider, ICharacterActionStateProvider { [EnumToggleButtons, SerializeField] protected InteractionType _availableInteractions; [SerializeField, ReadOnly] protected Collider[] _nearColliders = new Collider[10]; @@ -63,7 +68,7 @@ public IInteractable GetFocusedInteractable() return _nearestInteractable; } - private bool TryGetSolverFor(IInteractable interactable, out IInteractionSolver solver) + protected bool TryGetSolverFor(IInteractable interactable, out IInteractionSolver solver) { solver = null; if (interactable == null) return false; @@ -71,7 +76,7 @@ private bool TryGetSolverFor(IInteractable interactable, out IInteractionSolver return TryGetSolverForType(interactable.GetInteractionType(), out solver); } - private bool TryGetSolverForType(InteractionType type, out IInteractionSolver solver) + protected bool TryGetSolverForType(InteractionType type, out IInteractionSolver solver) { if (_cachedSolvers.TryGetValue(type, out solver)) return solver != null; @@ -153,5 +158,17 @@ protected void InitializeInteractionSolvers(Dictionary ty public virtual bool IsInteracting() => _interactingTarget != null; public virtual float GetMovementSpeedMultiplier() => 1f; public virtual bool IsMovementBlocked() => false; + + public CharacterActionState GetCurrentActionState() + { + if (IsInteracting()) + { + if(_nearestInteractable is ICharacterActionStateProvider actionStateProvider) + { + return actionStateProvider.GetCurrentActionState(); + } + } + return CharacterActionState.None; + } } } diff --git a/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerAnimation.cs b/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerAnimation.cs index 2d3984832..54351a2f3 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerAnimation.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerAnimation.cs @@ -11,12 +11,6 @@ public enum PlayerTaskAnimationState Dashing } - public enum PlayerActionAnimationState - { - None = 0, - CleaningTable = 1, - } - public enum PlayerDefaultAnimationState { None = 0, @@ -31,7 +25,7 @@ public class PlayerAnimation : CharacterAnimation private IMovementState _movementState; private PlayerTaskAnimationState _currentTaskAnimationState = PlayerTaskAnimationState.None; - private PlayerActionAnimationState _currentActionAnimationState = PlayerActionAnimationState.None; + private CharacterActionState _currentActionState = CharacterActionState.None; private PlayerDefaultAnimationState _currentDefaultAnimationState = PlayerDefaultAnimationState.None; private Dictionary _taskToAnimation = new() @@ -39,9 +33,9 @@ public class PlayerAnimation : CharacterAnimation { PlayerTaskAnimationState.Dashing, "Dash" }, }; - private Dictionary _actionToAnimation = new() + private Dictionary _actionToAnimation = new() { - { PlayerActionAnimationState.CleaningTable, "Cleaning/CleaningTable" }, + { CharacterActionState.CleaningTable, "Cleaning/CleaningTable" }, }; private Dictionary _defaultToAnimation = new() @@ -90,24 +84,24 @@ private void UpdateAnimations() // 1순위: Task 애니메이션이 재생 중이면 다른 애니메이션 처리하지 않음 if (_currentTaskAnimationState != PlayerTaskAnimationState.None) { - _currentActionAnimationState = PlayerActionAnimationState.None; + _currentActionState = CharacterActionState.None; _currentDefaultAnimationState = PlayerDefaultAnimationState.None; return; } // 2순위: ActionState 체크 var desiredActionState = GetDesiredActionState(); - if (desiredActionState == PlayerActionAnimationState.None) + if (desiredActionState == CharacterActionState.None) { - _currentActionAnimationState = PlayerActionAnimationState.None; + _currentActionState = CharacterActionState.None; } else { - if (_currentActionAnimationState != desiredActionState) + if (_currentActionState != desiredActionState) { _currentDefaultAnimationState = PlayerDefaultAnimationState.None; - _currentActionAnimationState = desiredActionState; - PlayActionAnimation(_currentActionAnimationState); + _currentActionState = desiredActionState; + PlayActionAnimation(_currentActionState); } return; } @@ -146,25 +140,21 @@ private async Task PlayTaskAnimation(PlayerTaskAnimationState state, float durat _currentTaskAnimationState = PlayerTaskAnimationState.None; } - private PlayerActionAnimationState GetDesiredActionState() + private CharacterActionState GetDesiredActionState() { - if (_interactor.IsInteracting() == false) return PlayerActionAnimationState.None; - - var interactable = _interactor.GetFocusedInteractable(); - if (interactable == null) return PlayerActionAnimationState.None; + if (_interactor.IsInteracting() == false) return CharacterActionState.None; - var interactionType = interactable.GetInteractionType(); - if (interactionType == InteractionType.RestaurantTrash) // TODO : 서브시스템 연결해서 테이블청소 연결해야함 + if (_interactor is ICharacterActionStateProvider actionStateProvider) { - return PlayerActionAnimationState.CleaningTable; + return actionStateProvider.GetCurrentActionState(); } - return PlayerActionAnimationState.None; + return CharacterActionState.None; } - private void PlayActionAnimation(PlayerActionAnimationState actionAnimationState) + private void PlayActionAnimation(CharacterActionState actionState) { - if (_actionToAnimation.TryGetValue(actionAnimationState, out string animationName)) + if (_actionToAnimation.TryGetValue(actionState, out string animationName)) { _spineController.PlayAnimation(animationName, true); } diff --git a/Assets/_DDD/_Scripts/Restaurant/Environment/Interactions.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Environment/Interactions.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionComponent.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/RestaurantInteractionComponent.cs similarity index 88% rename from Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionComponent.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/RestaurantInteractionComponent.cs index 6196f5546..0c1221114 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionComponent.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Interactions/RestaurantInteractionComponent.cs @@ -10,7 +10,7 @@ namespace DDD.Restaurant { public static class RestaurantInteractionSubsystems { - public static Dictionary TypeToSubsystem = new() + public static readonly Dictionary TypeToSubsystem = new() { {InteractionType.RestaurantManagement, typeof(InteractionSubsystem_Management)}, {InteractionType.RestaurantOrder, typeof(InteractionSubsystem_Order)}, @@ -18,8 +18,15 @@ public static class RestaurantInteractionSubsystems }; } + public static class RestaurantInteractionActions + { + public static readonly Dictionary TypeToAction = new() + { + {InteractionType.RestaurantTrash, CharacterActionState.CleaningTable}, + }; + } - public class RestaurantInteractionComponent : MonoBehaviour, IInteractable, IInteractionSubsystemOwner + public class RestaurantInteractionComponent : MonoBehaviour, IInteractable, IInteractionSubsystemOwner, ICharacterActionStateProvider { // Single interaction type [ValueDropdown("GetAllInteractionTypes")] @@ -239,5 +246,24 @@ public bool TryGetSubsystemEnumType(out T enumValue) where T : Enum enumValue = default; return false; } + + public CharacterActionState GetCurrentActionState() + { + if (HasSubsystem(_interactionType)) + { + var subsystemObject = GetSubsystem(_interactionType); + if(subsystemObject is ICharacterActionStateProvider actionStateProvider) + { + return actionStateProvider.GetCurrentActionState(); + } + } + else + { + return RestaurantInteractionActions.TypeToAction.GetValueOrDefault(_interactionType, + CharacterActionState.None); + } + + return CharacterActionState.None; + } } } \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionComponent.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/RestaurantInteractionComponent.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionComponent.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/RestaurantInteractionComponent.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionEvents.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/RestaurantInteractionEvents.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionEvents.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/RestaurantInteractionEvents.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionEvents.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/RestaurantInteractionEvents.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionEvents.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/RestaurantInteractionEvents.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers.meta new file mode 100644 index 000000000..acf5250c2 --- /dev/null +++ b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4cc0ab3a0d5b47e2b46992a16ecbbc5a +timeCreated: 1756798057 \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/Misc.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/Misc.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc/RestaurantTrashSolver.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/Misc/RestaurantTrashSolver.cs similarity index 61% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc/RestaurantTrashSolver.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/Misc/RestaurantTrashSolver.cs index e292d488d..b341a3bd7 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc/RestaurantTrashSolver.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/Misc/RestaurantTrashSolver.cs @@ -2,9 +2,9 @@ namespace DDD.Restaurant { - public class RestaurantTrashSolver : MonoBehaviour, IInteractionSolver + public class RestaurantTrashSolver : RestaurantBaseSolver { - public bool ExecuteInteraction(IInteractor interactor, IInteractable interactable, ScriptableObject payload = null) + public override bool ExecuteInteraction(IInteractor interactor, IInteractable interactable, ScriptableObject payload = null) { var carrier = interactor?.GetInteractorGameObject()?.GetComponent(); if (carrier == null) @@ -14,7 +14,7 @@ public bool ExecuteInteraction(IInteractor interactor, IInteractable interactabl return true; } - public bool CanExecuteInteraction(IInteractor interactor = null, IInteractable interactable = null, + public override bool CanExecuteInteraction(IInteractor interactor = null, IInteractable interactable = null, ScriptableObject payload = null) { // Check carrying state @@ -25,7 +25,7 @@ public bool CanExecuteInteraction(IInteractor interactor = null, IInteractable i return false; } - public bool CanSolveInteraction(IInteractor interactor, IInteractable interactable) + public override bool CanSolveInteraction(IInteractor interactor, IInteractable interactable) { return true; } diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc/RestaurantTrashSolver.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/Misc/RestaurantTrashSolver.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc/RestaurantTrashSolver.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/Misc/RestaurantTrashSolver.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantCooks.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantCooks.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantCooks.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantCooks.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantCooks/RestaurantCookSolver.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantCooks/RestaurantCookSolver.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantCooks/RestaurantCookSolver.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantCooks/RestaurantCookSolver.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantCooks/RestaurantCookSolver.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantCooks/RestaurantCookSolver.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantCooks/RestaurantCookSolver.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantCooks/RestaurantCookSolver.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantCooks/RestaurantCookSolver_StartCooking.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantCooks/RestaurantCookSolver_StartCooking.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantCooks/RestaurantCookSolver_StartCooking.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantCooks/RestaurantCookSolver_StartCooking.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantCooks/RestaurantCookSolver_StartCooking.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantCooks/RestaurantCookSolver_StartCooking.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantCooks/RestaurantCookSolver_StartCooking.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantCooks/RestaurantCookSolver_StartCooking.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements/RestaurantManagementSolver.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements/RestaurantManagementSolver.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements/RestaurantManagementSolver.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements/RestaurantManagementSolver.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements/RestaurantManagementSolver.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements/RestaurantManagementSolver.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements/RestaurantManagementSolver.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements/RestaurantManagementSolver.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements/RestaurantManagementSolver_Menu.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements/RestaurantManagementSolver_Menu.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements/RestaurantManagementSolver_Menu.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements/RestaurantManagementSolver_Menu.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements/RestaurantManagementSolver_Menu.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements/RestaurantManagementSolver_Menu.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements/RestaurantManagementSolver_Menu.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements/RestaurantManagementSolver_Menu.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements/RestaurantManagementSolver_Start.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements/RestaurantManagementSolver_Start.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements/RestaurantManagementSolver_Start.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements/RestaurantManagementSolver_Start.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements/RestaurantManagementSolver_Start.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements/RestaurantManagementSolver_Start.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements/RestaurantManagementSolver_Start.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements/RestaurantManagementSolver_Start.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolverBase.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolverBase.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolverBase.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolverBase.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolverBase.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolverBase.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolverBase.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolverBase.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Busy.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Busy.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Busy.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Busy.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Busy.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Busy.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Busy.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Busy.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Order.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Order.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Order.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Order.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Order.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Order.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Order.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Order.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Reaction.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Reaction.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Reaction.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Reaction.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Reaction.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Reaction.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Reaction.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Reaction.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Reserved.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Reserved.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Reserved.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Reserved.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Reserved.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Reserved.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Reserved.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Reserved.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Serve.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Serve.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Serve.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Serve.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Serve.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Serve.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Serve.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Serve.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Wait.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Wait.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Wait.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Wait.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Wait.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Wait.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Wait.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Wait.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantSubsystemSolver.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantSubsystemSolver.cs similarity index 65% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantSubsystemSolver.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantSubsystemSolver.cs index 60be7f94c..e2c3c4ceb 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantSubsystemSolver.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantSubsystemSolver.cs @@ -2,9 +2,20 @@ using System.Collections.Generic; using UnityEngine; -namespace DDD +namespace DDD.Restaurant { - public abstract class RestaurantSubsystemSolver : MonoBehaviour, IInteractionSolver where T : Enum + public abstract class RestaurantBaseSolver : MonoBehaviour, IInteractionSolver + { + public abstract bool ExecuteInteraction(IInteractor interactor, IInteractable interactable, + ScriptableObject payload = null); + + public abstract bool CanExecuteInteraction(IInteractor interactor = null, IInteractable interactable = null, + ScriptableObject payload = null); + + public abstract bool CanSolveInteraction(IInteractor interactor, IInteractable interactable); + } + + public abstract class RestaurantSubsystemSolver : RestaurantBaseSolver where T : Enum { private Dictionary> _solvers = new(); @@ -18,19 +29,19 @@ private void Awake() _solvers.Add(subsystemSolverType.Key, solver); } } - public bool ExecuteInteraction(IInteractor interactor, IInteractable interactable, ScriptableObject payload = null) + public override bool ExecuteInteraction(IInteractor interactor, IInteractable interactable, ScriptableObject payload = null) { return TryGetSolver(interactable, out var solver) && solver.ExecuteInteractionSubsystem(interactor, interactable, payload); } - public bool CanExecuteInteraction(IInteractor interactor = null, IInteractable interactable = null, ScriptableObject payload = null) + public override bool CanExecuteInteraction(IInteractor interactor = null, IInteractable interactable = null, ScriptableObject payload = null) { return TryGetSolver(interactable, out var solver) && solver.CanExecuteInteractionSubsystem(interactor, interactable, payload); } - public bool CanSolveInteraction(IInteractor interactor, IInteractable interactable) + public override bool CanSolveInteraction(IInteractor interactor, IInteractable interactable) { if (interactable is IInteractionSubsystemOwner subsystemOwner) { diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantSubsystemSolver.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantSubsystemSolver.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantSubsystemSolver.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantSubsystemSolver.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems.meta new file mode 100644 index 000000000..a34a4cf35 --- /dev/null +++ b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 889bc878e70343cab7416f799f767451 +timeCreated: 1756798128 \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystemBase.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystemBase.cs new file mode 100644 index 000000000..5fef5d7d1 --- /dev/null +++ b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystemBase.cs @@ -0,0 +1,9 @@ +using UnityEngine; + +namespace DDD.Restaurant +{ + public abstract class InteractionSubsystemBase : MonoBehaviour, ICharacterActionStateProvider + { + public abstract CharacterActionState GetCurrentActionState(); + } +} \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystemBase.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystemBase.cs.meta new file mode 100644 index 000000000..423610044 --- /dev/null +++ b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystemBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d9f52d1cd4bd4917a884b6e3bc1152e7 +timeCreated: 1756798490 \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Cook.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Cook.cs similarity index 76% rename from Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Cook.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Cook.cs index 0319b8a81..c997d357a 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Cook.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Cook.cs @@ -1,7 +1,7 @@ using System; using UnityEngine; -namespace DDD +namespace DDD.Restaurant { [Flags] public enum RestaurantCookType : uint @@ -9,7 +9,7 @@ public enum RestaurantCookType : uint StartCooking = 0, } - public class InteractionSubsystem_Cook : MonoBehaviour, IInteractionSubsystemObject + public class InteractionSubsystem_Cook : InteractionSubsystemBase, IInteractionSubsystemObject { [SerializeField] protected RestaurantCookType _cookType = RestaurantCookType.StartCooking; @@ -42,5 +42,10 @@ public string GetCurrentSubsystemTypeName() { return _cookType.ToString(); } + + public override CharacterActionState GetCurrentActionState() + { + return CharacterActionState.None; + } } } \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Cook.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Cook.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Cook.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Cook.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Management.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Management.cs similarity index 78% rename from Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Management.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Management.cs index 167d6bddd..7c61473eb 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Management.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Management.cs @@ -1,7 +1,7 @@ using System; using UnityEngine; -namespace DDD +namespace DDD.Restaurant { [Flags] public enum RestaurantManagementType : uint @@ -10,7 +10,7 @@ public enum RestaurantManagementType : uint RunRestaurant = 1, } - public class InteractionSubsystem_Management : MonoBehaviour, IInteractionSubsystemObject + public class InteractionSubsystem_Management : InteractionSubsystemBase, IInteractionSubsystemObject { [SerializeField] protected RestaurantManagementType _managementType = RestaurantManagementType.OpenManagementUi; @@ -48,5 +48,10 @@ public ScriptableObject GetPayload() { return null; } + + public override CharacterActionState GetCurrentActionState() + { + return CharacterActionState.None; + } } } \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Management.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Management.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Management.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Management.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Order.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Order.cs similarity index 90% rename from Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Order.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Order.cs index c60ffa1a4..78fa39b67 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Order.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Order.cs @@ -47,7 +47,7 @@ public interface IRestaurantOrderObject // TODO : 도중에 이탈할 경우, 순차적으로 다음 페이즈로 넘어가는 게 아니라 바로 Wait, Dirty로 전이시킬 필요가 있음 - public class InteractionSubsystem_Order : MonoBehaviour, IInteractionSubsystemObject, IRestaurantOrderObject, IEventHandler + public class InteractionSubsystem_Order : InteractionSubsystemBase, IInteractionSubsystemObject, IRestaurantOrderObject, IEventHandler { [SerializeField] private RestaurantOrderType _currentRestaurantOrderType = RestaurantOrderType.Wait; [SerializeField] private RestaurantOrderObjectState _orderObjectState = new(); @@ -140,5 +140,15 @@ private void OnDestroy() { EventBus.Unregister(this); } + + public override CharacterActionState GetCurrentActionState() + { + if (_currentRestaurantOrderType == RestaurantOrderType.Dirty) + { + return CharacterActionState.CleaningTable; + } + + return CharacterActionState.None; + } } } \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Order.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Order.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Order.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Order.cs.meta