타이쿤 업데이트 정리
+ 상호작용 오브젝트 외곽선 기능 추가 + 손님 계산 기능 추가 + 손님 계산 시 Ui 출력 및 파티클, 효과 추가 + 대화 시스템 로직 수정 + 테이블 수정 + 캐릭터 스파인 교체
@ -734,6 +734,52 @@ CanvasRenderer:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 37297197}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!1 &46350305
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 46350306}
|
||||
- component: {fileID: 46350307}
|
||||
m_Layer: 0
|
||||
m_Name: _OffsetX Override
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &46350306
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 46350305}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1308258166}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &46350307
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 46350305}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 389648ab9de94296b8f4a6f6957df101, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
propertyName: _OffsetX
|
||||
propertyValue: -1
|
||||
--- !u!1 &62548174
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -922,11 +968,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 95
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -225
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
@ -1333,11 +1379,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 95
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -30
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
@ -1533,7 +1579,7 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 0.54901963, b: 0, a: 1}
|
||||
m_Color: {r: 1, g: 0.84313726, b: 0, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
@ -2621,11 +2667,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 95
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -160
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
@ -2907,7 +2953,7 @@ GameObject:
|
||||
- component: {fileID: 327744322}
|
||||
- component: {fileID: 327744321}
|
||||
m_Layer: 5
|
||||
m_Name: FryingPanMenuPanel
|
||||
m_Name: GrillMenuPanel
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
@ -2931,7 +2977,7 @@ RectTransform:
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: -190}
|
||||
m_AnchoredPosition: {x: 0, y: -360}
|
||||
m_SizeDelta: {x: -80, y: 140}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &327744321
|
||||
@ -3877,6 +3923,98 @@ RectTransform:
|
||||
m_CorrespondingSourceObject: {fileID: 5685570007726524012, guid: 5fcdc9afc13ca2e49bc954e4fd607a47, type: 3}
|
||||
m_PrefabInstance: {fileID: 428517717}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1 &437358690
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 437358691}
|
||||
- component: {fileID: 437358693}
|
||||
- component: {fileID: 437358692}
|
||||
- component: {fileID: 437358694}
|
||||
m_Layer: 5
|
||||
m_Name: GoldUi
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &437358691
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 437358690}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 1308258166}
|
||||
- {fileID: 677143482}
|
||||
m_Father: {fileID: 1049919592}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 100, y: -50}
|
||||
m_SizeDelta: {x: 300, y: 80}
|
||||
m_Pivot: {x: 0, y: 1}
|
||||
--- !u!114 &437358692
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 437358690}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 21300000, guid: c7ef1b7221f0b5b4f94a1d2685ff92c2, type: 3}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1.5
|
||||
--- !u!222 &437358693
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 437358690}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &437358694
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 437358690}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 7424ed33554084b42abf8c1da79ac39c, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
_goldAnimator: {fileID: 1308258170}
|
||||
_goldText: {fileID: 677143483}
|
||||
--- !u!1 &440736213
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -4179,11 +4317,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 30
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -160
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
@ -4435,7 +4573,7 @@ Transform:
|
||||
m_GameObject: {fileID: 545850347}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0.3420201, y: 0, z: 0, w: 0.9396927}
|
||||
m_LocalPosition: {x: -12.65, y: 25.711502, z: -20.48178}
|
||||
m_LocalPosition: {x: 12.92, y: 25.711502, z: -20.48178}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
@ -5298,11 +5436,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 30
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -95
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
@ -5759,6 +5897,142 @@ CanvasRenderer:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 670055546}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!1 &677143481
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 677143482}
|
||||
- component: {fileID: 677143484}
|
||||
- component: {fileID: 677143483}
|
||||
m_Layer: 5
|
||||
m_Name: GoldText
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &677143482
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 677143481}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 437358691}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 1, y: 0.5}
|
||||
m_AnchorMax: {x: 1, y: 0.5}
|
||||
m_AnchoredPosition: {x: -100, y: 0}
|
||||
m_SizeDelta: {x: 220, y: 80}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &677143483
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 677143481}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: 100,000
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: dabfdeb80b25d44b4ace56414d0eb4ad, type: 2}
|
||||
m_sharedMaterial: {fileID: 2100000, guid: 0e5360dce269ccc42b822a424d66fbd4, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 36
|
||||
m_fontSizeBase: 36
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 1
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 36
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 1
|
||||
m_VerticalAlignment: 512
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_TextWrappingMode: 0
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 0
|
||||
m_ActiveFontFeatures: 6e72656b
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_EmojiFallbackSupport: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 1
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
--- !u!222 &677143484
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 677143481}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!1001 &738295682
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -5978,11 +6252,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 30
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -30
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
@ -6127,11 +6401,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 95
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -290
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
@ -6229,11 +6503,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 30
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -225
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
@ -6856,7 +7130,7 @@ Transform:
|
||||
m_GameObject: {fileID: 873223985}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0.3420201, y: 0, z: 0, w: 0.9396927}
|
||||
m_LocalPosition: {x: -12.65, y: 25.711502, z: -20.48178}
|
||||
m_LocalPosition: {x: 12.92, y: 25.711502, z: -20.48178}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
@ -7268,7 +7542,7 @@ GameObject:
|
||||
- component: {fileID: 989840354}
|
||||
- component: {fileID: 989840356}
|
||||
m_Layer: 5
|
||||
m_Name: FryingPanFoodSlotUiList
|
||||
m_Name: GrillFoodSlotUiList
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
@ -7320,136 +7594,6 @@ MonoBehaviour:
|
||||
m_Spacing: {x: 10, y: 10}
|
||||
m_Constraint: 0
|
||||
m_ConstraintCount: 2
|
||||
--- !u!1 &998377966
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 998377970}
|
||||
- component: {fileID: 998377969}
|
||||
- component: {fileID: 998377968}
|
||||
- component: {fileID: 998377967}
|
||||
m_Layer: 0
|
||||
m_Name: Spine GameObject (Crew)
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &998377967
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 998377966}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d247ba06193faa74d9335f5481b2b56c, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
skeletonDataAsset: {fileID: 11400000, guid: 74d1caae8e1d56a43bca5a5873004922, type: 2}
|
||||
initialSkinName: 01-1
|
||||
fixPrefabOverrideViaMeshFilter: 2
|
||||
initialFlipX: 0
|
||||
initialFlipY: 0
|
||||
updateWhenInvisible: 3
|
||||
separatorSlotNames: []
|
||||
zSpacing: 0
|
||||
useClipping: 1
|
||||
immutableTriangles: 0
|
||||
pmaVertexColors: 1
|
||||
clearStateOnDisable: 0
|
||||
tintBlack: 0
|
||||
singleSubmesh: 0
|
||||
fixDrawOrder: 0
|
||||
addNormals: 0
|
||||
calculateTangents: 0
|
||||
maskInteraction: 0
|
||||
maskMaterials:
|
||||
materialsMaskDisabled: []
|
||||
materialsInsideMask: []
|
||||
materialsOutsideMask: []
|
||||
disableRenderingOnOverride: 1
|
||||
physicsPositionInheritanceFactor: {x: 1, y: 1}
|
||||
physicsRotationInheritanceFactor: 1
|
||||
physicsMovementRelativeTo: {fileID: 0}
|
||||
updateTiming: 1
|
||||
unscaledTime: 0
|
||||
_animationName: Tycoon/CookingStew
|
||||
loop: 1
|
||||
timeScale: 1
|
||||
--- !u!23 &998377968
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 998377966}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: 488f84473afeade458a0b9a9df28930f, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 5
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!33 &998377969
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 998377966}
|
||||
m_Mesh: {fileID: 0}
|
||||
--- !u!4 &998377970
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 998377966}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0.3420201, y: 0, z: 0, w: 0.9396927}
|
||||
m_LocalPosition: {x: -9.32, y: 0, z: 7.8}
|
||||
m_LocalScale: {x: 2, y: 2, z: 2}
|
||||
m_ConstrainProportionsScale: 1
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 40, y: 0, z: 0}
|
||||
--- !u!1001 &1011627381
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -7832,6 +7976,7 @@ RectTransform:
|
||||
- {fileID: 1496452082}
|
||||
- {fileID: 1987164072}
|
||||
- {fileID: 102499728}
|
||||
- {fileID: 437358691}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
@ -7855,6 +8000,7 @@ MonoBehaviour:
|
||||
<MainCanvas>k__BackingField: {fileID: 1049919591}
|
||||
<TycoonUpgradeUi>k__BackingField: {fileID: 1496452083}
|
||||
<TycoonManagementUi>k__BackingField: {fileID: 102499729}
|
||||
<GoldUi>k__BackingField: {fileID: 437358694}
|
||||
--- !u!1 &1070845212
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -8103,7 +8249,7 @@ RectTransform:
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: -25.00003}
|
||||
m_SizeDelta: {x: -271.63, y: 50}
|
||||
m_SizeDelta: {x: -319.15, y: 50}
|
||||
m_Pivot: {x: 0, y: 0.5}
|
||||
--- !u!114 &1078862807
|
||||
MonoBehaviour:
|
||||
@ -8125,7 +8271,7 @@ MonoBehaviour:
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: "\uD6C4\uB77C\uC774\uD32C"
|
||||
m_text: "\uADF8\uB9B4"
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: dabfdeb80b25d44b4ace56414d0eb4ad, type: 2}
|
||||
m_sharedMaterial: {fileID: 5657039867100983486, guid: dabfdeb80b25d44b4ace56414d0eb4ad, type: 2}
|
||||
@ -8819,7 +8965,7 @@ RectTransform:
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: -360}
|
||||
m_AnchoredPosition: {x: 0, y: -190}
|
||||
m_SizeDelta: {x: -80, y: 140}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &1173162352
|
||||
@ -10086,6 +10232,118 @@ CanvasRenderer:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1306764367}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!1 &1308258165
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1308258166}
|
||||
- component: {fileID: 1308258168}
|
||||
- component: {fileID: 1308258167}
|
||||
- component: {fileID: 1308258170}
|
||||
- component: {fileID: 1308258169}
|
||||
m_Layer: 5
|
||||
m_Name: GoldImage
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1308258166
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1308258165}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 46350306}
|
||||
m_Father: {fileID: 437358691}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.5}
|
||||
m_AnchorMax: {x: 0, y: 0.5}
|
||||
m_AnchoredPosition: {x: 40, y: 0}
|
||||
m_SizeDelta: {x: 70, y: 70}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &1308258167
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1308258165}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 2100000, guid: 2880e34baca6ca04893136786677bf95, type: 2}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 21300000, guid: 51c11bee66d04f64d8d44afcb9975321, type: 3}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!222 &1308258168
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1308258165}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &1308258169
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1308258165}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: ec7c531f67844491ae84a4f3d1575d01, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!95 &1308258170
|
||||
Animator:
|
||||
serializedVersion: 7
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1308258165}
|
||||
m_Enabled: 1
|
||||
m_Avatar: {fileID: 0}
|
||||
m_Controller: {fileID: 9100000, guid: d73f9323f07764216b00227f2648356c, type: 2}
|
||||
m_CullingMode: 0
|
||||
m_UpdateMode: 0
|
||||
m_ApplyRootMotion: 0
|
||||
m_LinearVelocityBlending: 0
|
||||
m_StabilizeFeet: 0
|
||||
m_AnimatePhysics: 0
|
||||
m_WarningMessage:
|
||||
m_HasTransformHierarchy: 1
|
||||
m_AllowConstantClipSamplingOptimization: 1
|
||||
m_KeepAnimatorStateOnDisable: 0
|
||||
m_WriteDefaultValuesOnDisable: 0
|
||||
--- !u!1 &1337634203
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -10176,93 +10434,6 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_ShowMaskGraphic: 0
|
||||
--- !u!1 &1339793864
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1339793866}
|
||||
- component: {fileID: 1339793865}
|
||||
m_Layer: 0
|
||||
m_Name: Fire
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!212 &1339793865
|
||||
SpriteRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1339793864}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 0
|
||||
m_ReceiveShadows: 0
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 0
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: 4e64eb89a35741e4d881aea69538ab84, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 0
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 4
|
||||
m_Sprite: {fileID: 21300000, guid: 8b183bae532ae9743b810da1aa83abdc, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 1, y: 1}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_MaskInteraction: 0
|
||||
m_SpriteSortPoint: 0
|
||||
--- !u!4 &1339793866
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1339793864}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0.3420201, y: 0, z: 0, w: 0.9396927}
|
||||
m_LocalPosition: {x: -2.892, y: 0.5, z: 11.781}
|
||||
m_LocalScale: {x: 3, y: 2, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 40, y: 0, z: 0}
|
||||
--- !u!1 &1350109858
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -11068,7 +11239,7 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 0.84313726, b: 0, a: 1}
|
||||
m_Color: {r: 1, g: 0.54901963, b: 0, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
@ -11225,11 +11396,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 95
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -95
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
@ -11392,8 +11563,8 @@ RectTransform:
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 27511089}
|
||||
- {fileID: 327744320}
|
||||
- {fileID: 1173162351}
|
||||
- {fileID: 327744320}
|
||||
- {fileID: 79484691}
|
||||
- {fileID: 1297637641}
|
||||
m_Father: {fileID: 139042447}
|
||||
@ -11453,19 +11624,19 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 29ee900ba52849b49bfc33631b1e74a0, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
_fryingPanFoodSlotLocation: {fileID: 989840354}
|
||||
_soupFoodSlotLocation: {fileID: 908699584}
|
||||
_grillFoodSlotLocation: {fileID: 989840354}
|
||||
_skewerFoodSlotLocation: {fileID: 1884162516}
|
||||
_dessertFoodSlotLocation: {fileID: 1378992847}
|
||||
_dailyFoodSlotUi: {fileID: 6803430367898605830, guid: 5fcdc9afc13ca2e49bc954e4fd607a47, type: 3}
|
||||
_fryingPanFoodSlotUis:
|
||||
- {fileID: 1381452133}
|
||||
- {fileID: 1711926403}
|
||||
- {fileID: 1043781522}
|
||||
_soupFoodSlotUis:
|
||||
- {fileID: 1924794517}
|
||||
- {fileID: 1757198067}
|
||||
- {fileID: 566176542}
|
||||
_grillFoodSlotUis:
|
||||
- {fileID: 1381452133}
|
||||
- {fileID: 1711926403}
|
||||
- {fileID: 1043781522}
|
||||
_skewerFoodSlotUis:
|
||||
- {fileID: 781558286}
|
||||
- {fileID: 667539663}
|
||||
@ -11476,6 +11647,8 @@ MonoBehaviour:
|
||||
- {fileID: 2041095998}
|
||||
<DailyFoodSlotUis>k__BackingField: []
|
||||
_pots: []
|
||||
_grills: []
|
||||
_skewers: []
|
||||
--- !u!1 &1471090205
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -15008,11 +15181,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 30
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -290
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5685570007726524012, guid: 7e6ba4001b3b92a4d8fdd586f6d0f731, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
@ -17712,7 +17885,7 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2798544366308408093, guid: 9ce588004bafc1e4e9617fdaa2d77c8d, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: -12.65
|
||||
value: 12.92
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2798544366308408093, guid: 9ce588004bafc1e4e9617fdaa2d77c8d, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
@ -18598,6 +18771,14 @@ PrefabInstance:
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0.1454064
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5910700114136101566, guid: 9ce588004bafc1e4e9617fdaa2d77c8d, type: 3}
|
||||
propertyPath: m_Materials.Array.size
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5910700114136101566, guid: 9ce588004bafc1e4e9617fdaa2d77c8d, type: 3}
|
||||
propertyPath: 'm_Materials.Array.data[0]'
|
||||
value:
|
||||
objectReference: {fileID: 2100000, guid: 488f84473afeade458a0b9a9df28930f, type: 2}
|
||||
- target: {fileID: 5944316304459150779, guid: 9ce588004bafc1e4e9617fdaa2d77c8d, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0.04741089
|
||||
@ -19167,6 +19348,10 @@ PrefabInstance:
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7952377105833992481, guid: 981817fdc4897a34bafc0040f15656b9, type: 3}
|
||||
propertyPath: m_AdditionalShaderChannelsFlag
|
||||
value: 25
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 9041926907780427371, guid: 981817fdc4897a34bafc0040f15656b9, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: TycoonMap
|
||||
@ -19205,5 +19390,3 @@ SceneRoots:
|
||||
- {fileID: 7827484746149782377}
|
||||
- {fileID: 20736010}
|
||||
- {fileID: 5626406452199475265}
|
||||
- {fileID: 1339793866}
|
||||
- {fileID: 998377970}
|
||||
|
@ -3,6 +3,7 @@ using BehaviorDesigner.Runtime.Tasks;
|
||||
using BlueWater.Items;
|
||||
using BlueWater.Npcs.Customers;
|
||||
using BlueWater.Uis;
|
||||
using PixelCrushers.DialogueSystem;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BlueWater.BehaviorTrees.Actions
|
||||
@ -29,7 +30,7 @@ namespace BlueWater.BehaviorTrees.Actions
|
||||
|
||||
_customer.OnInteraction += HandleBeverageInteraction;
|
||||
_customer.RegisterPlayerInteraction();
|
||||
_customer.Bark("OrderBeverage");
|
||||
_customer.Bark("OrderBeverage", BarkOrder.FirstValid);
|
||||
}
|
||||
|
||||
public override TaskStatus OnUpdate()
|
||||
@ -49,7 +50,8 @@ namespace BlueWater.BehaviorTrees.Actions
|
||||
if (_customer.HappyPoint <= 0)
|
||||
{
|
||||
_foodBalloonUi.CancelOrder();
|
||||
_customer.Bark("CancelOrder");
|
||||
DialogueLua.SetVariable("HappyPoint", _customer.HappyPoint);
|
||||
_customer.Bark("PayMoney", BarkOrder.FirstValid);
|
||||
}
|
||||
return TaskStatus.Failure;
|
||||
}
|
||||
|
@ -1,8 +1,10 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using BehaviorDesigner.Runtime.Tasks;
|
||||
using BlueWater.Items;
|
||||
using BlueWater.Npcs.Customers;
|
||||
using BlueWater.Uis;
|
||||
using PixelCrushers.DialogueSystem;
|
||||
using UnityEngine;
|
||||
using Random = UnityEngine.Random;
|
||||
|
||||
@ -25,34 +27,13 @@ namespace BlueWater.BehaviorTrees.Actions
|
||||
|
||||
public override void OnStart()
|
||||
{
|
||||
var dailyFoodSlotUis = TycoonUiManager.Instance.TycoonManagementUi.CookMenuUi.DailyFoodMenuUi.DailyFoodSlotUis;
|
||||
for (var i = 0; i < 3; i++)
|
||||
{
|
||||
for (var j = 0; j < dailyFoodSlotUis.Count; j++)
|
||||
{
|
||||
if (dailyFoodSlotUis[j].FoodData.Taste != _customerData.GetPreferredFood(i)) continue;
|
||||
|
||||
_orderFoodIdx = dailyFoodSlotUis[j].FoodData.Idx;
|
||||
break;
|
||||
}
|
||||
|
||||
if (_orderFoodIdx != 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if (i == 2)
|
||||
{
|
||||
var randomIndex = Random.Range(0, dailyFoodSlotUis.Count);
|
||||
_orderFoodIdx = dailyFoodSlotUis[randomIndex].FoodData.Idx;
|
||||
}
|
||||
}
|
||||
SetPreferredFoods();
|
||||
|
||||
_foodBalloonUi = _customer.FoodBalloonUi;
|
||||
_foodBalloonUi.OrderFood(_orderFoodIdx, _customerData.WaitTime, _customerData.HurryTime);
|
||||
_customer.OnInteraction += HandleFoodInteraction;
|
||||
_customer.RegisterPlayerInteraction();
|
||||
_customer.Bark("OrderFood");
|
||||
_customer.Bark("OrderFood", BarkOrder.FirstValid);
|
||||
}
|
||||
|
||||
public override TaskStatus OnUpdate()
|
||||
@ -72,7 +53,8 @@ namespace BlueWater.BehaviorTrees.Actions
|
||||
if (_customer.HappyPoint <= 0)
|
||||
{
|
||||
_foodBalloonUi.CancelOrder();
|
||||
_customer.Bark("CancelOrder");
|
||||
DialogueLua.SetVariable("HappyPoint", _customer.HappyPoint);
|
||||
_customer.Bark("PayMoney", BarkOrder.FirstValid);
|
||||
}
|
||||
return TaskStatus.Failure;
|
||||
}
|
||||
@ -103,5 +85,25 @@ namespace BlueWater.BehaviorTrees.Actions
|
||||
_customer.SpineController.PlayAnimation(CustomerSpineAnimation.Eat2.ToString(), true);
|
||||
}
|
||||
}
|
||||
|
||||
private void SetPreferredFoods()
|
||||
{
|
||||
var dailyFoodSlotUis = TycoonUiManager.Instance.TycoonManagementUi.CookMenuUi.DailyFoodMenuUi.DailyFoodSlotUis;
|
||||
FoodTaste[] preferredTastes = { _customerData.GetPreferredFood(0), _customerData.GetPreferredFood(1), _customerData.GetPreferredFood(2) };
|
||||
|
||||
foreach (var taste in preferredTastes)
|
||||
{
|
||||
var preferredFoods = dailyFoodSlotUis.FindAll(food => food.FoodData.Taste == taste);
|
||||
if (preferredFoods.Count > 0)
|
||||
{
|
||||
var randomIndex = Random.Range(0, preferredFoods.Count);
|
||||
_orderFoodIdx = preferredFoods[randomIndex].FoodData.Idx;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
var randomDailyFoodIndex = Random.Range(0, dailyFoodSlotUis.Count);
|
||||
_orderFoodIdx = dailyFoodSlotUis[randomDailyFoodIndex].FoodData.Idx;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,88 @@
|
||||
using System;
|
||||
using BehaviorDesigner.Runtime.Tasks;
|
||||
using BlueWater.Npcs.Customers;
|
||||
using BlueWater.Uis;
|
||||
using PixelCrushers.DialogueSystem;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BlueWater.BehaviorTrees.Actions
|
||||
{
|
||||
[TaskCategory("Custom/Npc/Customer")]
|
||||
[Serializable]
|
||||
public class PayMoney : Conditional
|
||||
{
|
||||
private Customer _customer;
|
||||
private CustomerData _customerData;
|
||||
private FoodBalloonUi _foodBalloonUi;
|
||||
private int _goldIdx;
|
||||
private bool _isPaidMoney;
|
||||
|
||||
public override void OnAwake()
|
||||
{
|
||||
_customer = GetComponent<Customer>();
|
||||
_customerData = _customer.CustomerData;
|
||||
}
|
||||
|
||||
public override void OnStart()
|
||||
{
|
||||
_foodBalloonUi = _customer.FoodBalloonUi;
|
||||
_foodBalloonUi.PayMoney(_customerData.WaitTime, _customerData.HurryTime);
|
||||
_customer.OnInteraction += HandlePayMoneyInteraction;
|
||||
_customer.RegisterPlayerInteraction();
|
||||
}
|
||||
|
||||
public override TaskStatus OnUpdate()
|
||||
{
|
||||
if (_isPaidMoney)
|
||||
{
|
||||
return TaskStatus.Success;
|
||||
}
|
||||
|
||||
if (_foodBalloonUi.IsWaitTimeOver())
|
||||
{
|
||||
_customer.OnInteraction -= HandlePayMoneyInteraction;
|
||||
_customer.UnregisterPlayerInteraction();
|
||||
_foodBalloonUi.CancelOrder();
|
||||
_foodBalloonUi.HideUi();
|
||||
// _customer.AddHappyPoint(-3);
|
||||
// if (_customer.HappyPoint <= 0)
|
||||
// {
|
||||
// _foodBalloonUi.CancelOrder();
|
||||
// _customer.Bark("CancelOrder");
|
||||
// }
|
||||
return TaskStatus.Failure;
|
||||
}
|
||||
|
||||
return TaskStatus.Running;
|
||||
}
|
||||
|
||||
private async void HandlePayMoneyInteraction()
|
||||
{
|
||||
var tycoonPlayer = GameManager.Instance.CurrentTycoonPlayer;
|
||||
var foodPrice = _customer.ItemData.Price;
|
||||
var tip = _customer.HappyPoint switch
|
||||
{
|
||||
>= 3 => 2f,
|
||||
2 => 1.5f,
|
||||
1 => 1.1f,
|
||||
_ => 1f
|
||||
};
|
||||
var finalPrice = (int)(foodPrice * tip);
|
||||
tycoonPlayer.GetMoney(finalPrice);
|
||||
_customer.PayMoney(finalPrice);
|
||||
_foodBalloonUi.HideUi();
|
||||
_customer.OnInteraction -= HandlePayMoneyInteraction;
|
||||
|
||||
await Awaitable.WaitForSecondsAsync(1f);
|
||||
|
||||
_customer.UnregisterPlayerInteraction();
|
||||
_foodBalloonUi.CancelOrder();
|
||||
|
||||
// TODO : 대화 안나옴
|
||||
DialogueLua.SetVariable("HappyPoint", _customer.HappyPoint);
|
||||
_customer.Bark("PayMoney", BarkOrder.FirstValid);
|
||||
|
||||
_isPaidMoney = true;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b9c5679271731774f908d8d3119761c9
|
@ -30,7 +30,7 @@ namespace BlueWater.Npcs.Customers
|
||||
|
||||
// Components
|
||||
[field: SerializeField]
|
||||
public Transform Transform { get; private set; }
|
||||
public Transform CenterTransform { get; private set; }
|
||||
|
||||
[field: SerializeField]
|
||||
public Rigidbody Rigidbody { get; private set; }
|
||||
@ -52,12 +52,18 @@ namespace BlueWater.Npcs.Customers
|
||||
|
||||
[field: SerializeField]
|
||||
public Canvas InteractionCanvas { get; private set; }
|
||||
|
||||
[field: SerializeField]
|
||||
public ParticleSystem PayMoneyParticle { get; private set; }
|
||||
|
||||
[field: SerializeField]
|
||||
public Transform InteractionUi { get; private set; }
|
||||
|
||||
[field: SerializeField]
|
||||
public FoodBalloonUi FoodBalloonUi { get; private set; }
|
||||
|
||||
[field: SerializeField]
|
||||
public PayMoneyUi PayMoneyUi { get; private set; }
|
||||
|
||||
// Classes
|
||||
[field: SerializeField, Required]
|
||||
@ -77,6 +83,7 @@ namespace BlueWater.Npcs.Customers
|
||||
|
||||
private IAstarAI _astarAi;
|
||||
public TableSeat TableSeat { get; private set; }
|
||||
public ItemData ItemData { get; private set; }
|
||||
|
||||
private int _happyPoint;
|
||||
public int HappyPoint
|
||||
@ -158,18 +165,20 @@ namespace BlueWater.Npcs.Customers
|
||||
[Button("컴포넌트 초기화")]
|
||||
protected virtual void InitializeComponents()
|
||||
{
|
||||
Transform = transform;
|
||||
CenterTransform = transform;
|
||||
Rigidbody = GetComponent<Rigidbody>();
|
||||
CharacterCollider = GetComponent<CapsuleCollider>();
|
||||
BehaviorTree = GetComponent<BehaviorTree>();
|
||||
VisualLook = transform.Find("VisualLook");
|
||||
MeshRenderer = VisualLook.GetComponent<MeshRenderer>();
|
||||
BarkTrigger = transform.Find("DialogueSystem").GetComponent<BarkTrigger>();
|
||||
PayMoneyParticle = transform.Find("PayMoneyParticle").GetComponent<ParticleSystem>();
|
||||
InteractionCanvas = transform.Find("InteractionCanvas").GetComponent<Canvas>();
|
||||
InteractionCanvas.worldCamera = TycoonCameraManager.Instance.UiCamera;
|
||||
InteractionUi = InteractionCanvas.transform.Find("InteractionUi");
|
||||
InteractionUi.localScale = Vector3.one * (1 / transform.localScale.x);
|
||||
FoodBalloonUi = InteractionCanvas.transform.Find("FoodBalloonUi").GetComponent<FoodBalloonUi>();
|
||||
PayMoneyUi = InteractionCanvas.transform.Find("PayMoneyUi").GetComponent<PayMoneyUi>();
|
||||
|
||||
SpineController = GetComponent<SpineController>();
|
||||
AIMovement = GetComponent<AiMovement>();
|
||||
@ -231,6 +240,7 @@ namespace BlueWater.Npcs.Customers
|
||||
|
||||
public void SetFood(ItemData foodData)
|
||||
{
|
||||
ItemData = foodData;
|
||||
TableSeat.SetFood(foodData.Sprite);
|
||||
}
|
||||
|
||||
@ -246,6 +256,7 @@ namespace BlueWater.Npcs.Customers
|
||||
if (!InteractionUi) return;
|
||||
|
||||
InteractionUi.gameObject.SetActive(true);
|
||||
SpineController.EnableCustomMaterial();
|
||||
}
|
||||
|
||||
public void HideInteractionUi()
|
||||
@ -253,6 +264,7 @@ namespace BlueWater.Npcs.Customers
|
||||
if (!InteractionUi) return;
|
||||
|
||||
InteractionUi.gameObject.SetActive(false);
|
||||
SpineController.DisableCustomMaterial();
|
||||
}
|
||||
|
||||
public void RegisterPlayerInteraction()
|
||||
@ -273,15 +285,22 @@ namespace BlueWater.Npcs.Customers
|
||||
|
||||
public void AddHappyPoint(int value) => HappyPoint += value;
|
||||
|
||||
public void Bark(string conversation = null)
|
||||
public void Bark(string conversation, BarkOrder barkOrder = BarkOrder.Random)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(conversation))
|
||||
{
|
||||
BarkTrigger.conversation = conversation;
|
||||
}
|
||||
if (string.IsNullOrEmpty(conversation)) return;
|
||||
|
||||
BarkTrigger.barkOrder = barkOrder;
|
||||
BarkTrigger.conversation = conversation;
|
||||
BarkTrigger.OnUse();
|
||||
}
|
||||
|
||||
public void PayMoney(int gold)
|
||||
{
|
||||
PayMoneyParticle.gameObject.SetActive(true);
|
||||
PayMoneyParticle.Play();
|
||||
PayMoneyUi.PayMoney(gold);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
@ -235,7 +235,7 @@ namespace BlueWater.Players.Combat
|
||||
|
||||
foreach (var interaction in _playerInteractions)
|
||||
{
|
||||
var distance = Vector3.Distance(transform.position, interaction.Transform.position);
|
||||
var distance = Vector3.Distance(transform.position, interaction.CenterTransform.position);
|
||||
if (distance > InteractionRadius || distance >= closestDistance) continue;
|
||||
|
||||
closestDistance = distance;
|
||||
|
@ -31,7 +31,7 @@ namespace BlueWater.Players.Tycoons
|
||||
_itemRenderer = transform.Find("VisualLook/Item").GetComponent<SpriteRenderer>();
|
||||
}
|
||||
|
||||
public void CarryItem(int itemIdx, ItemQuality? itemQuality = null)
|
||||
public void CarryItem(int itemIdx, bool isUsingSprite = true, ItemQuality itemQuality = ItemQuality.Normal)
|
||||
{
|
||||
if (_isCarriedItem)
|
||||
{
|
||||
@ -39,23 +39,26 @@ namespace BlueWater.Players.Tycoons
|
||||
return;
|
||||
}
|
||||
|
||||
_currentItemData = new ItemData(_itemManager.GetItemDataByIdx(itemIdx));
|
||||
if (itemQuality != null)
|
||||
_currentItemData = new ItemData(_itemManager.GetItemDataByIdx(itemIdx))
|
||||
{
|
||||
_currentItemData.Quality = (ItemQuality)itemQuality;
|
||||
}
|
||||
Quality = itemQuality
|
||||
};
|
||||
|
||||
if (_currentItemData == null)
|
||||
{
|
||||
Debug.LogError($"{itemIdx} 해당 아이템을 등록할 수 없습니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
var itemSprite = _currentItemData.Sprite;
|
||||
if (!itemSprite)
|
||||
if (isUsingSprite)
|
||||
{
|
||||
Debug.LogWarning($"{itemSprite} 해당 아이템의 이미지가 없습니다.");
|
||||
var itemSprite = _currentItemData.Sprite;
|
||||
if (!itemSprite)
|
||||
{
|
||||
Debug.LogWarning($"{itemSprite} 해당 아이템의 이미지가 없습니다.");
|
||||
}
|
||||
_itemRenderer.sprite = itemSprite;
|
||||
}
|
||||
_itemRenderer.sprite = itemSprite;
|
||||
_isCarriedItem = true;
|
||||
}
|
||||
|
||||
|
@ -139,7 +139,7 @@ namespace BlueWater.Players.Tycoons
|
||||
{
|
||||
if (!interaction.CanInteraction()) continue;
|
||||
|
||||
var distance = Vector3.Distance(transform.position, interaction.Transform.position);
|
||||
var distance = Vector3.Distance(transform.position, interaction.CenterTransform.position);
|
||||
if (distance > interaction.InteractionRadius || distance >= closestDistance) continue;
|
||||
|
||||
closestDistance = distance;
|
||||
|
@ -12,6 +12,7 @@ namespace BlueWater.Players.Tycoons
|
||||
public Rigidbody Rigidbody { get; private set; }
|
||||
private Transform _visualLook;
|
||||
private SpineController _spineController;
|
||||
private TycoonCarryHandler _tycoonCarryHandler;
|
||||
|
||||
// Move
|
||||
[field: SerializeField, Range(1f, 20f), Tooltip("이동 속도")]
|
||||
@ -27,12 +28,22 @@ namespace BlueWater.Players.Tycoons
|
||||
get => _isMoving;
|
||||
private set
|
||||
{
|
||||
if (_isMoving == value) return;
|
||||
|
||||
_isMoving = value;
|
||||
_spineController.PlayAnimation(_isMoving
|
||||
? TycoonPlayerSpineAnimation.run.ToString()
|
||||
: TycoonPlayerSpineAnimation.idle.ToString(), true);
|
||||
|
||||
string animationName;
|
||||
if (_isMoving)
|
||||
{
|
||||
animationName = _tycoonCarryHandler.IsCarriedItem() ? TycoonPlayerSpineAnimation.ServingSide : TycoonPlayerSpineAnimation.RunSide;
|
||||
}
|
||||
else
|
||||
{
|
||||
animationName = _tycoonCarryHandler.IsCarriedItem() ? TycoonPlayerSpineAnimation.IdleServingUpside : TycoonPlayerSpineAnimation.IdleSide;
|
||||
}
|
||||
|
||||
if (animationName == previousAnimationName) return;
|
||||
|
||||
previousAnimationName = animationName;
|
||||
_spineController.PlayAnimation(animationName, true);
|
||||
}
|
||||
}
|
||||
|
||||
@ -55,6 +66,7 @@ namespace BlueWater.Players.Tycoons
|
||||
public float PushPowerReduction { get; private set; }
|
||||
|
||||
private float _finalSpeed;
|
||||
private string previousAnimationName;
|
||||
|
||||
#endregion
|
||||
|
||||
@ -64,6 +76,7 @@ namespace BlueWater.Players.Tycoons
|
||||
private void Awake()
|
||||
{
|
||||
_spineController = GetComponent<SpineController>();
|
||||
_tycoonCarryHandler = GetComponent<TycoonCarryHandler>();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
|
@ -1,4 +1,5 @@
|
||||
using BlueWater.Items;
|
||||
using BlueWater.Uis;
|
||||
using Sirenix.OdinInspector;
|
||||
using Spine.Unity;
|
||||
using UnityEngine;
|
||||
@ -6,10 +7,16 @@ using UnityEngine.InputSystem;
|
||||
|
||||
namespace BlueWater.Players.Tycoons
|
||||
{
|
||||
public enum TycoonPlayerSpineAnimation
|
||||
public static class TycoonPlayerSpineAnimation
|
||||
{
|
||||
idle = 0,
|
||||
run
|
||||
public const string Idle = "Idle";
|
||||
public const string IdleSide = "IdleSide";
|
||||
public const string IdleServingDown = "ServingIdleDown";
|
||||
public const string IdleServingUpside = "ServingIdleUpside";
|
||||
public const string RunDown = "Tycoon/RunDown";
|
||||
public const string RunSide = "Tycoon/RunUpSide";
|
||||
public const string ServingDown = "Tycoon/ServingDown";
|
||||
public const string ServingSide = "Tycoon/ServingUpSide";
|
||||
}
|
||||
|
||||
[DefaultExecutionOrder(-1)]
|
||||
@ -34,6 +41,9 @@ namespace BlueWater.Players.Tycoons
|
||||
[field: SerializeField]
|
||||
public SkeletonAnimation SkeletonAnimation { get; private set; }
|
||||
|
||||
[field: SerializeField]
|
||||
public FoodBalloonUi FoodBalloonUi { get; private set; }
|
||||
|
||||
[field: SerializeField]
|
||||
public TycoonInput TycoonInput { get; private set; }
|
||||
|
||||
@ -82,6 +92,7 @@ namespace BlueWater.Players.Tycoons
|
||||
PlayerInput = GetComponent<PlayerInput>();
|
||||
VisualLook = transform.Find("VisualLook");
|
||||
SkeletonAnimation = VisualLook.GetComponent<SkeletonAnimation>();
|
||||
FoodBalloonUi = transform.Find("Canvas/FoodBalloonUi").GetComponent<FoodBalloonUi>();
|
||||
|
||||
TycoonInput = GetComponent<TycoonInput>();
|
||||
TycoonMovement = GetComponent<TycoonMovement>();
|
||||
@ -111,10 +122,32 @@ namespace BlueWater.Players.Tycoons
|
||||
}
|
||||
|
||||
// Wrapping
|
||||
public void GetMoney(int money) => DataManager.Instance.GetMoney(money);
|
||||
public bool IsCarriedItem() => TycoonCarryHandler.IsCarriedItem();
|
||||
public void CarryItem(int itemIdx, ItemQuality? itemQuality = null) => TycoonCarryHandler.CarryItem(itemIdx, itemQuality);
|
||||
public void GiveItem() => TycoonCarryHandler.GiveItem();
|
||||
public void DiscardItem() => TycoonCarryHandler.DiscardItem();
|
||||
|
||||
public void CarryItem(int itemIdx, bool isUsingSprite = true, ItemQuality itemQuality = ItemQuality.Normal)
|
||||
{
|
||||
TycoonCarryHandler.CarryItem(itemIdx, isUsingSprite, itemQuality);
|
||||
if (!isUsingSprite)
|
||||
{
|
||||
FoodBalloonUi.SetFoodImage(GetCurrentItemData().Idx);
|
||||
FoodBalloonUi.ShowUi();
|
||||
}
|
||||
}
|
||||
|
||||
public void GiveItem()
|
||||
{
|
||||
TycoonCarryHandler.GiveItem();
|
||||
FoodBalloonUi.HideUi();
|
||||
FoodBalloonUi.SetFoodImage(null);
|
||||
}
|
||||
|
||||
public void DiscardItem()
|
||||
{
|
||||
TycoonCarryHandler.DiscardItem();
|
||||
FoodBalloonUi.HideUi();
|
||||
FoodBalloonUi.SetFoodImage(null);
|
||||
}
|
||||
public ItemData GetCurrentItemData() => TycoonCarryHandler.GetCurrentItemData();
|
||||
|
||||
#endregion
|
||||
|
@ -16,6 +16,12 @@ namespace BlueWater.Players
|
||||
[field: SerializeField]
|
||||
public SkeletonAnimation SkeletonAnimation { get; private set; }
|
||||
|
||||
[SerializeField]
|
||||
private Material _originalMaterial;
|
||||
|
||||
[SerializeField]
|
||||
private Material _replacementMaterial;
|
||||
|
||||
private AnimationState _animationState;
|
||||
|
||||
// Variables
|
||||
@ -26,7 +32,9 @@ namespace BlueWater.Players
|
||||
private bool _isRandomSkin;
|
||||
|
||||
[SerializeField, ShowIf("@_isRandomSkin")]
|
||||
private Vector2 _randomRange;
|
||||
private Vector2 _randomRange;
|
||||
|
||||
private bool _previousEnabled;
|
||||
|
||||
#endregion
|
||||
|
||||
@ -47,6 +55,11 @@ namespace BlueWater.Players
|
||||
public virtual void InitializeComponents()
|
||||
{
|
||||
SkeletonAnimation = transform.GetComponentInChildren<SkeletonAnimation>();
|
||||
if (!_originalMaterial)
|
||||
{
|
||||
_originalMaterial = SkeletonAnimation.SkeletonDataAsset.atlasAssets[0].PrimaryMaterial;
|
||||
}
|
||||
|
||||
_animationState = SkeletonAnimation.AnimationState;
|
||||
|
||||
if (_isRandomSkin)
|
||||
@ -78,7 +91,7 @@ namespace BlueWater.Players
|
||||
Debug.LogError($"{animationName}의 애니메이션은 존재하지 않습니다.");
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
_animationState.TimeScale = isReverse ? -Mathf.Abs(speed) : Mathf.Abs(speed);
|
||||
var trackEntry = _animationState.SetAnimation(0, animationName, isLoopActive);
|
||||
|
||||
@ -134,6 +147,22 @@ namespace BlueWater.Players
|
||||
await Awaitable.NextFrameAsync();
|
||||
}
|
||||
}
|
||||
|
||||
public void EnableCustomMaterial()
|
||||
{
|
||||
if (_previousEnabled) return;
|
||||
|
||||
SkeletonAnimation.CustomMaterialOverride[_originalMaterial] = _replacementMaterial;
|
||||
_previousEnabled = true;
|
||||
}
|
||||
|
||||
public void DisableCustomMaterial()
|
||||
{
|
||||
if (!_previousEnabled) return;
|
||||
|
||||
SkeletonAnimation.CustomMaterialOverride.Remove(_originalMaterial);
|
||||
_previousEnabled = false;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
@ -20,19 +20,32 @@ namespace BlueWater
|
||||
{
|
||||
public SaveStage CurrentSaveStage { get; set; }
|
||||
|
||||
[field: Title("아이템 데이터")]
|
||||
[field: SerializeField] public Inventory Inventory { get; private set; } = new();
|
||||
[field: Title("스프라이트 데이터")]
|
||||
[field: SerializeField]
|
||||
public SpriteDataSo SpriteDataSo { get; private set; }
|
||||
|
||||
[field: Title("아이템 데이터")]
|
||||
[field: SerializeField] public List<int> FoodRecipes { get; private set; } = new();
|
||||
|
||||
public int Gold { get; set; } = 0;
|
||||
[field: SerializeField]
|
||||
public Inventory Inventory { get; private set; }
|
||||
|
||||
[field: Title("아이템 데이터")]
|
||||
[field: SerializeField]
|
||||
public List<int> FoodRecipes { get; private set; } = new();
|
||||
|
||||
[field: Title("타이쿤 데이터")]
|
||||
[field: SerializeField]
|
||||
public TycoonData TycoonData { get; private set; }
|
||||
|
||||
[field: Title("실시간 데이터")]
|
||||
public int Gold { get; set; }
|
||||
|
||||
public event Action<FoodData> OnChangeFoodRecipe;
|
||||
public event Action<int> OnChangeGold;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
GetMoney(5000);
|
||||
}
|
||||
|
||||
public void TestData()
|
||||
{
|
||||
@ -68,5 +81,11 @@ namespace BlueWater
|
||||
FoodRecipes.Add(idx);
|
||||
OnChangeFoodRecipe?.Invoke(foodData);
|
||||
}
|
||||
|
||||
public void GetMoney(int money)
|
||||
{
|
||||
Gold += money;
|
||||
OnChangeGold?.Invoke(Gold);
|
||||
}
|
||||
}
|
||||
}
|
@ -4,7 +4,7 @@ namespace BlueWater.Interfaces
|
||||
{
|
||||
public interface IPlayerInteraction
|
||||
{
|
||||
Transform Transform { get; }
|
||||
Transform CenterTransform { get; }
|
||||
Canvas InteractionCanvas { get; }
|
||||
Transform InteractionUi { get; }
|
||||
bool EnableInteraction { get; }
|
||||
|
@ -11,7 +11,7 @@ namespace BlueWater.Items
|
||||
None = 0,
|
||||
Skewer,
|
||||
Soup,
|
||||
FryingPan,
|
||||
Grill,
|
||||
Dessert,
|
||||
}
|
||||
|
||||
|
@ -12,7 +12,7 @@ namespace BlueWater.Items
|
||||
public class Item : MonoBehaviour, IPlayerInteraction
|
||||
{
|
||||
[field: Title("컴포넌트")]
|
||||
public Transform Transform { get; private set; }
|
||||
public Transform CenterTransform { get; private set; }
|
||||
|
||||
[SerializeField]
|
||||
protected Rigidbody Rigidbody;
|
||||
@ -129,7 +129,10 @@ namespace BlueWater.Items
|
||||
[Button("컴포넌트 초기화")]
|
||||
private void InitializeComponents()
|
||||
{
|
||||
Transform = transform;
|
||||
if (!CenterTransform)
|
||||
{
|
||||
CenterTransform = transform;
|
||||
}
|
||||
Rigidbody = GetComponent<Rigidbody>();
|
||||
Collider = GetComponent<Collider>();
|
||||
VisualLook = transform.Find("VisualLook");
|
||||
|
@ -6,10 +6,10 @@ namespace BlueWater
|
||||
public class ItemSlotDataSo : ScriptableObject
|
||||
{
|
||||
[field: SerializeField]
|
||||
public Color FryingPanFood { get; private set; }
|
||||
public Color SoupFood { get; private set; }
|
||||
|
||||
[field: SerializeField]
|
||||
public Color SoupFood { get; private set; }
|
||||
public Color GrillFood { get; private set; }
|
||||
|
||||
[field: SerializeField]
|
||||
public Color SkewerPanFood { get; private set; }
|
||||
|
@ -1,4 +1,3 @@
|
||||
using BlueWater.Items;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BlueWater.Tycoons
|
||||
@ -11,7 +10,7 @@ namespace BlueWater.Tycoons
|
||||
public override void Interaction()
|
||||
{
|
||||
// TODO : 미니게임을 시작하고, 성공 여부에 따라 음식 품질 부여
|
||||
CurrentTycoonPlayer.CarryItem(_itemIdx, ItemQuality.None);
|
||||
CurrentTycoonPlayer.CarryItem(_itemIdx);
|
||||
}
|
||||
|
||||
public override bool CanInteraction()
|
||||
|
179
Assets/02.Scripts/Prop/Tycoon/Cookware.cs
Normal file
@ -0,0 +1,179 @@
|
||||
using System.Collections.Generic;
|
||||
using BlueWater.Items;
|
||||
using BlueWater.Uis;
|
||||
using Sirenix.OdinInspector;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Serialization;
|
||||
|
||||
namespace BlueWater.Tycoons
|
||||
{
|
||||
public class Cookware : InteractionFurniture
|
||||
{
|
||||
[FormerlySerializedAs("_cookGauge")]
|
||||
[SerializeField, Required, BoxGroup("컴포넌트")]
|
||||
protected TMP_Text CookGauge;
|
||||
|
||||
[FormerlySerializedAs("_fireWoodQuantity")]
|
||||
[SerializeField, Required, BoxGroup("컴포넌트")]
|
||||
protected TMP_Text FireWoodQuantity;
|
||||
|
||||
[FormerlySerializedAs("_foodQuantity")]
|
||||
[SerializeField, Required, BoxGroup("컴포넌트")]
|
||||
protected TMP_Text FoodQuantity;
|
||||
|
||||
[SerializeField, BoxGroup("컴포넌트")]
|
||||
protected SpriteRenderer FireShader;
|
||||
|
||||
[FormerlySerializedAs("_currentDailyFoodUi")]
|
||||
[SerializeField, BoxGroup("컴포넌트")]
|
||||
protected TycoonItemSlotUi CurrentDailyFoodUi;
|
||||
|
||||
[SerializeField, Required, BoxGroup("데이터")]
|
||||
protected CookwareDataSo CookwareDataSo;
|
||||
|
||||
[FormerlySerializedAs("_fireWoodIdx")]
|
||||
[SerializeField, BoxGroup("데이터")]
|
||||
protected int FireWoodIdx = 70001;
|
||||
|
||||
// TODO : 추후에 다시 활성화 하는 기능 필요
|
||||
[Title("실시간 데이터")]
|
||||
[FormerlySerializedAs("_isOpened")]
|
||||
[SerializeField]
|
||||
protected bool IsOpened;
|
||||
|
||||
private Queue<FoodData> _cookedFoodDatas;
|
||||
private int _currentFireWoodCount;
|
||||
private float _currentCookGauge;
|
||||
private float _startTime = float.PositiveInfinity;
|
||||
private Vector3 _originFireShaderScale;
|
||||
private int _previousFireWoodLevelIndex = -1;
|
||||
|
||||
protected override void OnEnable()
|
||||
{
|
||||
TycoonManager.Instance.OnTycoonOpenedEvent += OpenTycoonSwitch;
|
||||
base.OnEnable();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (!IsOpened || CurrentDailyFoodUi.FoodData is null or { Idx : 0 }) return;
|
||||
|
||||
var level = _currentFireWoodCount / 5;
|
||||
var currentFireWoodLevel = CookwareDataSo.FireWoodLevel[level];
|
||||
|
||||
if (FireShader && _previousFireWoodLevelIndex != level)
|
||||
{
|
||||
FireShader.transform.localScale = _originFireShaderScale * currentFireWoodLevel.FireScaleCoefficient;
|
||||
_previousFireWoodLevelIndex = level;
|
||||
}
|
||||
|
||||
// 음식 게이지 관리 및 음식 생성
|
||||
var currentFoodData = CurrentDailyFoodUi.FoodData;
|
||||
if (_cookedFoodDatas.Count < currentFoodData.Plate)
|
||||
{
|
||||
_currentCookGauge += currentFireWoodLevel.CookGauge * Time.deltaTime;
|
||||
if (_currentCookGauge >= currentFoodData.CookGauge)
|
||||
{
|
||||
_currentCookGauge = 0f;
|
||||
_cookedFoodDatas.Enqueue(currentFoodData);
|
||||
}
|
||||
}
|
||||
|
||||
// 장작 관리
|
||||
if (_currentFireWoodCount > 0)
|
||||
{
|
||||
if (float.IsPositiveInfinity(_startTime))
|
||||
{
|
||||
_startTime = Time.time;
|
||||
}
|
||||
|
||||
if (Time.time >= _startTime + currentFireWoodLevel.BurnInterval)
|
||||
{
|
||||
_startTime = float.PositiveInfinity;
|
||||
_currentFireWoodCount--;
|
||||
}
|
||||
}
|
||||
|
||||
// Ui 표기
|
||||
CookGauge.text = $"{(int)_currentCookGauge}/{currentFoodData.CookGauge}";
|
||||
FireWoodQuantity.text = $"{_currentFireWoodCount}/{CookwareDataSo.MaxFireWoodQuantity}";
|
||||
FoodQuantity.text = $"{_cookedFoodDatas?.Count ?? 0}/{currentFoodData.Plate}";
|
||||
}
|
||||
|
||||
protected override void InitializeComponents()
|
||||
{
|
||||
base.InitializeComponents();
|
||||
|
||||
if (FireShader)
|
||||
{
|
||||
_originFireShaderScale = FireShader.transform.localScale;
|
||||
FireShader.enabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
public override void Interaction()
|
||||
{
|
||||
if (CurrentTycoonPlayer.IsCarriedItem())
|
||||
{
|
||||
var carriedItemData = CurrentTycoonPlayer.GetCurrentItemData();
|
||||
if (carriedItemData.Idx == FireWoodIdx)
|
||||
{
|
||||
CurrentTycoonPlayer.GiveItem();
|
||||
_currentFireWoodCount++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var foodData = _cookedFoodDatas.Dequeue();
|
||||
CurrentTycoonPlayer.CarryItem(foodData.Idx, false);
|
||||
}
|
||||
}
|
||||
|
||||
public override bool CanInteraction()
|
||||
{
|
||||
var isCarriedItem = CurrentTycoonPlayer.IsCarriedItem();
|
||||
var isFullFireWood = _currentFireWoodCount >= CookwareDataSo.MaxFireWoodQuantity;
|
||||
var isEmptyFoodData = CurrentDailyFoodUi is null or { FoodData : null };
|
||||
var isEmptyFinishedFood = _cookedFoodDatas is null or { Count : <= 0 };
|
||||
|
||||
return IsOpened && !isEmptyFoodData && ((isCarriedItem && !isFullFireWood) || !isCarriedItem && !isEmptyFinishedFood);
|
||||
}
|
||||
|
||||
public override void ShowInteractionUi()
|
||||
{
|
||||
if (!InteractionUi) return;
|
||||
|
||||
InteractionUi.gameObject.SetActive(true);
|
||||
VisualLook.material = OutlineMaterial;
|
||||
}
|
||||
|
||||
public override void HideInteractionUi()
|
||||
{
|
||||
if (!InteractionUi) return;
|
||||
|
||||
InteractionUi.gameObject.SetActive(false);
|
||||
VisualLook.material = OriginalMaterial;
|
||||
}
|
||||
|
||||
private void OpenTycoonSwitch()
|
||||
{
|
||||
if (CurrentDailyFoodUi.FoodData is not null and not { Idx : 0 })
|
||||
{
|
||||
_cookedFoodDatas = new Queue<FoodData>(CurrentDailyFoodUi.FoodData.Plate);
|
||||
_currentFireWoodCount = CookwareDataSo.StartFireWoodQuantity;
|
||||
|
||||
if (FireShader)
|
||||
{
|
||||
FireShader.enabled = true;
|
||||
}
|
||||
}
|
||||
IsOpened = true;
|
||||
_currentCookGauge = 0;
|
||||
|
||||
CookGauge.text = "0/0";
|
||||
FireWoodQuantity.text = "0/0";
|
||||
FoodQuantity.text = "0/0";
|
||||
}
|
||||
}
|
||||
}
|
2
Assets/02.Scripts/Prop/Tycoon/Cookware.cs.meta
Normal file
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 01035f0e728b4c8459e74591bf9cc0ac
|
@ -1,29 +1,70 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BlueWater.Tycoons
|
||||
{
|
||||
public class CustomerTable : MonoBehaviour
|
||||
public class CustomerTable : InteractionFurniture
|
||||
{
|
||||
[SerializeField]
|
||||
private List<TableSeat> _tableSeats;
|
||||
|
||||
private bool _isCleaning;
|
||||
private TableSeat _tableSeat;
|
||||
private TycoonManager _tycoonManager;
|
||||
|
||||
private void OnEnable()
|
||||
protected override void OnEnable()
|
||||
{
|
||||
TycoonManager.Instance.CustomerTableController.RegisterTable(this);
|
||||
base.OnEnable();
|
||||
|
||||
_tycoonManager = TycoonManager.Instance;
|
||||
_tycoonManager.CustomerTableController.RegisterTable(this);
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
protected override void OnDisable()
|
||||
{
|
||||
if (!TycoonManager.Instance) return;
|
||||
base.OnDisable();
|
||||
|
||||
TycoonManager.Instance.CustomerTableController.UnregisterTable(this);
|
||||
_tycoonManager.CustomerTableController.UnregisterTable(this);
|
||||
}
|
||||
|
||||
|
||||
public override void Interaction()
|
||||
{
|
||||
StartCoroutine(CleanUpTable(_tableSeat));
|
||||
}
|
||||
|
||||
public override bool CanInteraction()
|
||||
{
|
||||
if (_isCleaning) return false;
|
||||
|
||||
_tableSeat = _tableSeats.Find(table => !table.IsOccupied && !table.IsCleaned);
|
||||
if (_tableSeat == null) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public TableSeat FindEmptySeat()
|
||||
{
|
||||
return _tableSeats.FirstOrDefault(tableSeat => !tableSeat.IsReserved && !tableSeat.IsOccupied && tableSeat.IsCleaned);
|
||||
}
|
||||
|
||||
private IEnumerator CleanUpTable(TableSeat tableSeat)
|
||||
{
|
||||
// TODO : n초간 테이블 청소 애니메이션 (청소 중에 키 작동 금지)
|
||||
_isCleaning = true;
|
||||
PlayerInputKeyManager.Instance.DisableCurrentPlayerInput();
|
||||
|
||||
var elapsedTime = 0f;
|
||||
while (elapsedTime <= 2f)
|
||||
{
|
||||
elapsedTime += Time.deltaTime;
|
||||
yield return null;
|
||||
}
|
||||
|
||||
tableSeat.CleanUpFood();
|
||||
PlayerInputKeyManager.Instance.EnableCurrentPlayerInput();
|
||||
_isCleaning = false;
|
||||
}
|
||||
}
|
||||
}
|
20
Assets/02.Scripts/Prop/Tycoon/Data/CookwareDataSo.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.Serialization;
|
||||
|
||||
namespace BlueWater.Tycoons
|
||||
{
|
||||
[CreateAssetMenu(fileName = "CookwareData", menuName = "ScriptableObjects/CookwareData")]
|
||||
public class CookwareDataSo : ScriptableObject
|
||||
{
|
||||
[FormerlySerializedAs("MaxFireWoodCount")]
|
||||
[field: SerializeField]
|
||||
public int MaxFireWoodQuantity = 20;
|
||||
|
||||
[FormerlySerializedAs("StartFireWoodCount")]
|
||||
[field: SerializeField]
|
||||
public int StartFireWoodQuantity = 10;
|
||||
|
||||
[field: SerializeField]
|
||||
public FireWoodLevel[] FireWoodLevel = new FireWoodLevel[5];
|
||||
}
|
||||
}
|
@ -11,5 +11,8 @@ namespace BlueWater.Tycoons
|
||||
|
||||
[field: SerializeField]
|
||||
public float BurnInterval { get; private set; }
|
||||
|
||||
[field: SerializeField]
|
||||
public float FireScaleCoefficient { get; private set; }
|
||||
}
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace BlueWater.Tycoons
|
||||
{
|
||||
[CreateAssetMenu(fileName = "PotData", menuName = "ScriptableObjects/PotData")]
|
||||
public class PotDataSo : ScriptableObject
|
||||
{
|
||||
[field: SerializeField]
|
||||
public int MaxFireWoodCount = 20;
|
||||
|
||||
[field: SerializeField]
|
||||
public int StartFireWoodCount = 10;
|
||||
|
||||
[field: SerializeField]
|
||||
public FireWoodLevel[] FireWoodLevel = new FireWoodLevel[5];
|
||||
}
|
||||
}
|
14
Assets/02.Scripts/Prop/Tycoon/Grill.cs
Normal file
@ -0,0 +1,14 @@
|
||||
using BlueWater.Uis;
|
||||
|
||||
namespace BlueWater.Tycoons
|
||||
{
|
||||
public class Grill : Cookware
|
||||
{
|
||||
protected override void OnEnable()
|
||||
{
|
||||
base.OnEnable();
|
||||
|
||||
CurrentDailyFoodUi = TycoonUiManager.Instance.TycoonManagementUi.CookMenuUi.DailyFoodMenuUi.InitializeGrill(this);
|
||||
}
|
||||
}
|
||||
}
|
2
Assets/02.Scripts/Prop/Tycoon/Grill.cs.meta
Normal file
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8de9894c1150b994abf051eb0cc1ef16
|
@ -1,4 +1,3 @@
|
||||
using System;
|
||||
using BlueWater.Interfaces;
|
||||
using BlueWater.Players.Tycoons;
|
||||
using Sirenix.OdinInspector;
|
||||
@ -8,33 +7,45 @@ namespace BlueWater.Tycoons
|
||||
{
|
||||
public abstract class InteractionFurniture : MonoBehaviour, IPlayerInteraction
|
||||
{
|
||||
[field: SerializeField]
|
||||
public Transform Transform { get; private set; }
|
||||
[BoxGroup("컴포넌트")]
|
||||
[field: SerializeField, BoxGroup("컴포넌트")]
|
||||
public Transform CenterTransform { get; private set; }
|
||||
|
||||
[field: SerializeField]
|
||||
[field: SerializeField, BoxGroup("컴포넌트")]
|
||||
public SpriteRenderer VisualLook { get; private set; }
|
||||
|
||||
[field: SerializeField, BoxGroup("컴포넌트")]
|
||||
public Canvas InteractionCanvas { get; private set; }
|
||||
|
||||
[field: SerializeField]
|
||||
[field: SerializeField, BoxGroup("컴포넌트")]
|
||||
public Transform InteractionUi { get; private set; }
|
||||
|
||||
[field: SerializeField]
|
||||
[field: SerializeField, Required, BoxGroup("컴포넌트")]
|
||||
public Material OutlineMaterial { get; private set; }
|
||||
|
||||
[BoxGroup("변수")]
|
||||
[field: SerializeField, BoxGroup("변수")]
|
||||
public bool EnableInteraction { get; private set; } = true;
|
||||
|
||||
[field: SerializeField]
|
||||
[field: SerializeField, BoxGroup("변수")]
|
||||
public float InteractionRadius { get; private set; } = 2f;
|
||||
|
||||
protected TycoonPlayer CurrentTycoonPlayer;
|
||||
private bool _isQuitting;
|
||||
protected bool IsQuitting;
|
||||
protected Material OriginalMaterial;
|
||||
|
||||
private void OnDrawGizmosSelected()
|
||||
{
|
||||
if (!CenterTransform) return;
|
||||
|
||||
Gizmos.color = Color.blue;
|
||||
Gizmos.DrawWireSphere(transform.position, InteractionRadius);
|
||||
Gizmos.DrawWireSphere(CenterTransform.position, InteractionRadius);
|
||||
}
|
||||
|
||||
protected virtual void Awake()
|
||||
{
|
||||
InitializeComponents();
|
||||
OriginalMaterial = VisualLook.material;
|
||||
}
|
||||
|
||||
protected virtual void OnEnable()
|
||||
@ -44,12 +55,12 @@ namespace BlueWater.Tycoons
|
||||
|
||||
private void OnApplicationQuit()
|
||||
{
|
||||
_isQuitting = true;
|
||||
IsQuitting = true;
|
||||
}
|
||||
|
||||
protected virtual void OnDisable()
|
||||
{
|
||||
if (_isQuitting) return;
|
||||
if (IsQuitting) return;
|
||||
|
||||
UnregisterPlayerInteraction();
|
||||
}
|
||||
@ -57,7 +68,12 @@ namespace BlueWater.Tycoons
|
||||
[Button("컴포넌트 초기화")]
|
||||
protected virtual void InitializeComponents()
|
||||
{
|
||||
Transform = transform;
|
||||
if (!CenterTransform)
|
||||
{
|
||||
CenterTransform = transform;
|
||||
}
|
||||
|
||||
VisualLook = transform.Find("VisualLook").GetComponent<SpriteRenderer>();
|
||||
InteractionCanvas = transform.Find("InteractionCanvas").GetComponent<Canvas>();
|
||||
InteractionCanvas.GetComponent<Canvas>().worldCamera = Camera.main;
|
||||
InteractionUi = InteractionCanvas.transform.Find("InteractionUi");
|
||||
@ -75,6 +91,7 @@ namespace BlueWater.Tycoons
|
||||
if (!InteractionCanvas) return;
|
||||
|
||||
InteractionCanvas.gameObject.SetActive(true);
|
||||
VisualLook.material = OutlineMaterial;
|
||||
}
|
||||
|
||||
public virtual void HideInteractionUi()
|
||||
@ -82,6 +99,7 @@ namespace BlueWater.Tycoons
|
||||
if (!InteractionCanvas) return;
|
||||
|
||||
InteractionCanvas.gameObject.SetActive(false);
|
||||
VisualLook.material = OriginalMaterial;
|
||||
}
|
||||
|
||||
protected void RegisterPlayerInteraction()
|
||||
|
@ -1,137 +1,14 @@
|
||||
using System.Collections.Generic;
|
||||
using BlueWater.Items;
|
||||
using BlueWater.Uis;
|
||||
using Sirenix.OdinInspector;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BlueWater.Tycoons
|
||||
{
|
||||
public class Pot : InteractionFurniture
|
||||
public class Pot : Cookware
|
||||
{
|
||||
[SerializeField, Required]
|
||||
private PotDataSo _potDataSo;
|
||||
|
||||
[SerializeField, Required]
|
||||
private TMP_Text _cookGauge;
|
||||
|
||||
[SerializeField, Required]
|
||||
private TMP_Text _fireWoodQuantity;
|
||||
|
||||
[SerializeField, Required]
|
||||
private TMP_Text _foodQuantity;
|
||||
|
||||
// TODO : 추후에 다시 활성화 하는 기능 필요
|
||||
[SerializeField]
|
||||
private bool _isOpened;
|
||||
|
||||
[SerializeField]
|
||||
private int _fireWoodIdx = 70001;
|
||||
|
||||
[Title("실시간 데이터")]
|
||||
[SerializeField]
|
||||
private TycoonItemSlotUi _currentDailyFoodUi;
|
||||
|
||||
private Queue<FoodData> _cookedFoodDatas = new();
|
||||
private int _currentFireWoodCount;
|
||||
private float _currentCookGauge;
|
||||
private float _startTime = float.PositiveInfinity;
|
||||
|
||||
protected override void OnEnable()
|
||||
{
|
||||
TycoonManager.Instance.OnTycoonOpenedEvent += OpenTycoonSwitch;
|
||||
base.OnEnable();
|
||||
|
||||
_currentDailyFoodUi = TycoonUiManager.Instance.TycoonManagementUi.CookMenuUi.DailyFoodMenuUi.InitializePot(this);
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (!_isOpened) return;
|
||||
|
||||
var level = _currentFireWoodCount / 5;
|
||||
var currentFireWoodLevel = _potDataSo.FireWoodLevel[level];
|
||||
|
||||
// 음식 게이지 관리 및 음식 생성
|
||||
var currentFoodData = _currentDailyFoodUi.FoodData;
|
||||
if (currentFoodData != null && currentFoodData.Idx != 0 && _cookedFoodDatas.Count < currentFoodData.Plate)
|
||||
{
|
||||
_currentCookGauge += currentFireWoodLevel.CookGauge * Time.deltaTime;
|
||||
if (_currentCookGauge >= currentFoodData.CookGauge)
|
||||
{
|
||||
_currentCookGauge = 0f;
|
||||
_cookedFoodDatas.Enqueue(currentFoodData);
|
||||
}
|
||||
}
|
||||
|
||||
// 장작 관리
|
||||
if (_currentFireWoodCount > 0)
|
||||
{
|
||||
if (float.IsPositiveInfinity(_startTime))
|
||||
{
|
||||
_startTime = Time.time;
|
||||
}
|
||||
|
||||
if (Time.time >= _startTime + currentFireWoodLevel.BurnInterval)
|
||||
{
|
||||
_startTime = float.PositiveInfinity;
|
||||
_currentFireWoodCount--;
|
||||
}
|
||||
}
|
||||
|
||||
// Ui 표기
|
||||
_cookGauge.text = $"{(int)_currentCookGauge}/{currentFoodData?.CookGauge ?? 0}";
|
||||
_fireWoodQuantity.text = $"{_currentFireWoodCount}/{_potDataSo.MaxFireWoodCount}";
|
||||
_foodQuantity.text = $"{_cookedFoodDatas.Count}/{currentFoodData?.Plate ?? 0}";
|
||||
}
|
||||
|
||||
public override void Interaction()
|
||||
{
|
||||
if (CurrentTycoonPlayer.IsCarriedItem())
|
||||
{
|
||||
var carriedItemData = CurrentTycoonPlayer.GetCurrentItemData();
|
||||
if (carriedItemData.Idx == _fireWoodIdx)
|
||||
{
|
||||
CurrentTycoonPlayer.GiveItem();
|
||||
_currentFireWoodCount++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var foodData = _cookedFoodDatas.Dequeue();
|
||||
CurrentTycoonPlayer.CarryItem(foodData.Idx, ItemQuality.None);
|
||||
}
|
||||
}
|
||||
|
||||
public override bool CanInteraction()
|
||||
{
|
||||
var isCarriedItem = CurrentTycoonPlayer.IsCarriedItem();
|
||||
var isFullFireWood = _currentFireWoodCount >= _potDataSo.MaxFireWoodCount;
|
||||
var isEmptyCookedFood = _currentDailyFoodUi.FoodData == null || _cookedFoodDatas.Count <= 0;
|
||||
|
||||
return _isOpened && ((isCarriedItem && !isFullFireWood) || !isCarriedItem && !isEmptyCookedFood);
|
||||
}
|
||||
|
||||
public override void ShowInteractionUi()
|
||||
{
|
||||
if (!InteractionUi) return;
|
||||
|
||||
InteractionUi.gameObject.SetActive(true);
|
||||
}
|
||||
|
||||
public override void HideInteractionUi()
|
||||
{
|
||||
if (!InteractionUi) return;
|
||||
|
||||
InteractionUi.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
private void OpenTycoonSwitch()
|
||||
{
|
||||
_cookedFoodDatas = new Queue<FoodData>(_currentDailyFoodUi.FoodData.Plate);
|
||||
_isOpened = true;
|
||||
_currentCookGauge = 0;
|
||||
_currentFireWoodCount = _potDataSo.StartFireWoodCount;
|
||||
CurrentDailyFoodUi = TycoonUiManager.Instance.TycoonManagementUi.CookMenuUi.DailyFoodMenuUi.InitializePot(this);
|
||||
}
|
||||
}
|
||||
}
|
14
Assets/02.Scripts/Prop/Tycoon/Skewer.cs
Normal file
@ -0,0 +1,14 @@
|
||||
using BlueWater.Uis;
|
||||
|
||||
namespace BlueWater.Tycoons
|
||||
{
|
||||
public class Skewer : Cookware
|
||||
{
|
||||
protected override void OnEnable()
|
||||
{
|
||||
base.OnEnable();
|
||||
|
||||
CurrentDailyFoodUi = TycoonUiManager.Instance.TycoonManagementUi.CookMenuUi.DailyFoodMenuUi.InitializeSkewer(this);
|
||||
}
|
||||
}
|
||||
}
|
2
Assets/02.Scripts/Prop/Tycoon/Skewer.cs.meta
Normal file
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 70d84dd0b692dde40854818cb59d7963
|
32
Assets/02.Scripts/ScriptableObject/GrillData.asset
Normal file
@ -0,0 +1,32 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 3adde809189b2f54d9f643502f0f1057, type: 3}
|
||||
m_Name: GrillData
|
||||
m_EditorClassIdentifier:
|
||||
MaxFireWoodQuantity: 20
|
||||
StartFireWoodQuantity: 10
|
||||
FireWoodLevel:
|
||||
- <CookGauge>k__BackingField: 0.1
|
||||
<BurnInterval>k__BackingField: 30
|
||||
<FireScaleCoefficient>k__BackingField: 1
|
||||
- <CookGauge>k__BackingField: 1
|
||||
<BurnInterval>k__BackingField: 10
|
||||
<FireScaleCoefficient>k__BackingField: 1.25
|
||||
- <CookGauge>k__BackingField: 2
|
||||
<BurnInterval>k__BackingField: 9
|
||||
<FireScaleCoefficient>k__BackingField: 1.5
|
||||
- <CookGauge>k__BackingField: 3
|
||||
<BurnInterval>k__BackingField: 8
|
||||
<FireScaleCoefficient>k__BackingField: 1.75
|
||||
- <CookGauge>k__BackingField: 5
|
||||
<BurnInterval>k__BackingField: 7
|
||||
<FireScaleCoefficient>k__BackingField: 2
|
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7d306bdfc9aff374a9bef2cb63de76dc
|
||||
guid: 8ed757ac51af2814c9b00c1b14d2127f
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
@ -12,8 +12,8 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 44b4a96e2c7bdd54fada7ad0fda0d360, type: 3}
|
||||
m_Name: ItemSlotData
|
||||
m_EditorClassIdentifier:
|
||||
<FryingPanFood>k__BackingField: {r: 1, g: 0.54901963, b: 0, a: 1}
|
||||
<SoupFood>k__BackingField: {r: 1, g: 0.84313726, b: 0, a: 1}
|
||||
<SoupFood>k__BackingField: {r: 1, g: 0.54901963, b: 0, a: 1}
|
||||
<GrillFood>k__BackingField: {r: 1, g: 0.84313726, b: 0, a: 1}
|
||||
<SkewerPanFood>k__BackingField: {r: 0.19607843, g: 0.8039216, b: 0.19607843, a: 1}
|
||||
<DessertFood>k__BackingField: {r: 0, g: 0.39215687, b: 0.8039216, a: 1}
|
||||
<NormalItemBox>k__BackingField: {r: 0.87058824, g: 0.7529412, b: 0.5686275, a: 1}
|
||||
|
@ -12,15 +12,21 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 3adde809189b2f54d9f643502f0f1057, type: 3}
|
||||
m_Name: PotData
|
||||
m_EditorClassIdentifier:
|
||||
MaxFireWoodCount: 20
|
||||
MaxFireWoodQuantity: 20
|
||||
StartFireWoodQuantity: 10
|
||||
FireWoodLevel:
|
||||
- <CookGauge>k__BackingField: 0.1
|
||||
<BurnInterval>k__BackingField: 30
|
||||
<FireScaleCoefficient>k__BackingField: 1
|
||||
- <CookGauge>k__BackingField: 1
|
||||
<BurnInterval>k__BackingField: 10
|
||||
<FireScaleCoefficient>k__BackingField: 1.25
|
||||
- <CookGauge>k__BackingField: 2
|
||||
<BurnInterval>k__BackingField: 9
|
||||
<FireScaleCoefficient>k__BackingField: 1.5
|
||||
- <CookGauge>k__BackingField: 3
|
||||
<BurnInterval>k__BackingField: 8
|
||||
<FireScaleCoefficient>k__BackingField: 1.75
|
||||
- <CookGauge>k__BackingField: 5
|
||||
<BurnInterval>k__BackingField: 7
|
||||
<FireScaleCoefficient>k__BackingField: 2
|
||||
|
32
Assets/02.Scripts/ScriptableObject/SkewerData.asset
Normal file
@ -0,0 +1,32 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 3adde809189b2f54d9f643502f0f1057, type: 3}
|
||||
m_Name: SkewerData
|
||||
m_EditorClassIdentifier:
|
||||
MaxFireWoodQuantity: 20
|
||||
StartFireWoodQuantity: 10
|
||||
FireWoodLevel:
|
||||
- <CookGauge>k__BackingField: 0.1
|
||||
<BurnInterval>k__BackingField: 30
|
||||
<FireScaleCoefficient>k__BackingField: 1
|
||||
- <CookGauge>k__BackingField: 1
|
||||
<BurnInterval>k__BackingField: 10
|
||||
<FireScaleCoefficient>k__BackingField: 1.25
|
||||
- <CookGauge>k__BackingField: 2
|
||||
<BurnInterval>k__BackingField: 9
|
||||
<FireScaleCoefficient>k__BackingField: 1.5
|
||||
- <CookGauge>k__BackingField: 3
|
||||
<BurnInterval>k__BackingField: 8
|
||||
<FireScaleCoefficient>k__BackingField: 1.75
|
||||
- <CookGauge>k__BackingField: 5
|
||||
<BurnInterval>k__BackingField: 7
|
||||
<FireScaleCoefficient>k__BackingField: 2
|
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: db30adb40854e2f49a2c44863fe0c953
|
||||
guid: 677135b3fc858ef47bfc19901b021503
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
15
Assets/02.Scripts/ScriptableObject/SpriteData.asset
Normal file
@ -0,0 +1,15 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 137091cb8deacc14da9ee9469a96cfc8, type: 3}
|
||||
m_Name: SpriteData
|
||||
m_EditorClassIdentifier:
|
||||
<Gold>k__BackingField: {fileID: 21300000, guid: 51c11bee66d04f64d8d44afcb9975321, type: 3}
|
8
Assets/02.Scripts/ScriptableObject/SpriteData.asset.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: af2d6c8bcf8dd2047869a9a6fd87ffb9
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
11
Assets/02.Scripts/SpriteDataSo.cs
Normal file
@ -0,0 +1,11 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace BlueWater
|
||||
{
|
||||
[CreateAssetMenu(fileName = "SpriteData", menuName = "ScriptableObjects/SpriteData")]
|
||||
public class SpriteDataSo : ScriptableObject
|
||||
{
|
||||
[field: SerializeField]
|
||||
public Sprite Gold { get; private set; }
|
||||
}
|
||||
}
|
2
Assets/02.Scripts/SpriteDataSo.cs.meta
Normal file
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 137091cb8deacc14da9ee9469a96cfc8
|
@ -5,18 +5,20 @@ using BlueWater.Items;
|
||||
using BlueWater.Tycoons;
|
||||
using Sirenix.OdinInspector;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Serialization;
|
||||
|
||||
namespace BlueWater.Uis
|
||||
{
|
||||
public class DailyFoodMenuUi : MonoBehaviour
|
||||
{
|
||||
[Title("프리팹 생성 위치")]
|
||||
[SerializeField, Required]
|
||||
private Transform _fryingPanFoodSlotLocation;
|
||||
|
||||
[SerializeField, Required]
|
||||
private Transform _soupFoodSlotLocation;
|
||||
|
||||
[FormerlySerializedAs("_fryingPanFoodSlotLocation")]
|
||||
[SerializeField, Required]
|
||||
private Transform _grillFoodSlotLocation;
|
||||
|
||||
[SerializeField, Required]
|
||||
private Transform _skewerFoodSlotLocation;
|
||||
|
||||
@ -28,12 +30,13 @@ namespace BlueWater.Uis
|
||||
private TycoonItemSlotUi _dailyFoodSlotUi;
|
||||
|
||||
[Title("실시간 데이터")]
|
||||
[SerializeField]
|
||||
private List<TycoonItemSlotUi> _fryingPanFoodSlotUis = new(3);
|
||||
|
||||
[SerializeField]
|
||||
private List<TycoonItemSlotUi> _soupFoodSlotUis = new(3);
|
||||
|
||||
[FormerlySerializedAs("_fryingPanFoodSlotUis")]
|
||||
[SerializeField]
|
||||
private List<TycoonItemSlotUi> _grillFoodSlotUis = new(3);
|
||||
|
||||
[SerializeField]
|
||||
private List<TycoonItemSlotUi> _skewerFoodSlotUis = new(3);
|
||||
|
||||
@ -41,10 +44,16 @@ namespace BlueWater.Uis
|
||||
private List<TycoonItemSlotUi> _dessertPanFoodSlotUis = new(3);
|
||||
|
||||
[field: SerializeField]
|
||||
public List<TycoonItemSlotUi> DailyFoodSlotUis { get; private set; }= new(12);
|
||||
|
||||
public List<TycoonItemSlotUi> DailyFoodSlotUis { get; private set; } = new(12);
|
||||
|
||||
[SerializeField]
|
||||
private List<Pot> _pots = new(3);
|
||||
|
||||
[SerializeField]
|
||||
private List<Grill> _grills = new(3);
|
||||
|
||||
[SerializeField]
|
||||
private List<Skewer> _skewers = new(3);
|
||||
|
||||
private CookUi _cookUi;
|
||||
|
||||
@ -57,7 +66,7 @@ namespace BlueWater.Uis
|
||||
{
|
||||
_cookUi = TycoonUiManager.Instance.TycoonManagementUi.CookMenuUi.CookUi;
|
||||
|
||||
foreach (var element in _fryingPanFoodSlotUis)
|
||||
foreach (var element in _grillFoodSlotUis)
|
||||
{
|
||||
element.AddButtonClickListener(() => RemoveDailyFood(element));
|
||||
}
|
||||
@ -126,8 +135,8 @@ namespace BlueWater.Uis
|
||||
return _skewerFoodSlotUis;
|
||||
case FoodType.Soup:
|
||||
return _soupFoodSlotUis;
|
||||
case FoodType.FryingPan:
|
||||
return _fryingPanFoodSlotUis;
|
||||
case FoodType.Grill:
|
||||
return _grillFoodSlotUis;
|
||||
case FoodType.Dessert:
|
||||
return _dessertPanFoodSlotUis;
|
||||
default:
|
||||
@ -137,19 +146,38 @@ namespace BlueWater.Uis
|
||||
|
||||
public bool CanOpen()
|
||||
{
|
||||
return _fryingPanFoodSlotUis.Any(slot => slot.FoodData is not null and not { Idx: 0 }) ||
|
||||
return _grillFoodSlotUis.Any(slot => slot.FoodData is not null and not { Idx: 0 }) ||
|
||||
_soupFoodSlotUis.Any(slot => slot.FoodData is not null and not { Idx: 0 }) ||
|
||||
_skewerFoodSlotUis.Any(slot => slot.FoodData is not null and not { Idx: 0 }) ||
|
||||
_dessertPanFoodSlotUis.Any(slot => slot.FoodData is not null and not { Idx: 0 });
|
||||
}
|
||||
|
||||
public TycoonItemSlotUi InitializeGrill(Grill grill)
|
||||
{
|
||||
_grills.Add(grill);
|
||||
var index = _grills.Count - 1;
|
||||
_grillFoodSlotUis[index].SetIsLocked(false);
|
||||
_grillFoodSlotUis[index].SetFoodData(null);
|
||||
return _grillFoodSlotUis[index];
|
||||
}
|
||||
|
||||
public TycoonItemSlotUi InitializePot(Pot pot)
|
||||
{
|
||||
_pots.Add(pot);
|
||||
var index = _pots.Count - 1;
|
||||
_fryingPanFoodSlotUis[index].SetIsLocked(false);
|
||||
_fryingPanFoodSlotUis[index].SetFoodData(null);
|
||||
return _fryingPanFoodSlotUis[index];
|
||||
_soupFoodSlotUis[index].SetIsLocked(false);
|
||||
_soupFoodSlotUis[index].SetFoodData(null);
|
||||
return _soupFoodSlotUis[index];
|
||||
}
|
||||
|
||||
|
||||
public TycoonItemSlotUi InitializeSkewer(Skewer skewer)
|
||||
{
|
||||
_skewers.Add(skewer);
|
||||
var index = _skewers.Count - 1;
|
||||
_skewerFoodSlotUis[index].SetIsLocked(false);
|
||||
_skewerFoodSlotUis[index].SetFoodData(null);
|
||||
return _skewerFoodSlotUis[index];
|
||||
}
|
||||
}
|
||||
}
|
@ -56,7 +56,7 @@ namespace BlueWater.Uis
|
||||
public void ShowUi() => gameObject.SetActive(true);
|
||||
public void HideUi() => gameObject.SetActive(false);
|
||||
|
||||
private void SetFoodImage(int foodIdx)
|
||||
public void SetFoodImage(int foodIdx)
|
||||
{
|
||||
_orderItemData = ItemManager.Instance.GetItemDataByIdx(foodIdx);
|
||||
if (_orderItemData == null)
|
||||
@ -71,6 +71,11 @@ namespace BlueWater.Uis
|
||||
}
|
||||
FoodImage.sprite = _orderItemData.Sprite;
|
||||
}
|
||||
|
||||
public void SetFoodImage(Sprite sprite)
|
||||
{
|
||||
FoodImage.sprite = sprite;
|
||||
}
|
||||
|
||||
public void OrderFood(int foodIdx, int waitTime, int hurryTime)
|
||||
{
|
||||
@ -81,6 +86,24 @@ namespace BlueWater.Uis
|
||||
ShowUi();
|
||||
|
||||
_tween = FillImage.DOFillAmount(1f, hurryTime)
|
||||
.From(0f)
|
||||
.SetEase(Ease.Linear)
|
||||
.SetDelay(waitTime)
|
||||
.OnComplete(OnTweenComplete)
|
||||
.SetAutoKill(false);
|
||||
_tween.Restart();
|
||||
}
|
||||
|
||||
public void PayMoney(int waitTime, int hurryTime)
|
||||
{
|
||||
_isOrdered = true;
|
||||
_isWaitTimeOver = false;
|
||||
_isFoodReceived = false;
|
||||
SetFoodImage(DataManager.Instance.SpriteDataSo.Gold);
|
||||
ShowUi();
|
||||
|
||||
_tween = FillImage.DOFillAmount(1f, hurryTime)
|
||||
.From(0f)
|
||||
.SetEase(Ease.Linear)
|
||||
.SetDelay(waitTime)
|
||||
.OnComplete(OnTweenComplete)
|
||||
|
71
Assets/02.Scripts/Ui/Tycoon/GoldUi.cs
Normal file
@ -0,0 +1,71 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Sirenix.OdinInspector;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BlueWater.Uis
|
||||
{
|
||||
public class GoldUi : MonoBehaviour
|
||||
{
|
||||
[SerializeField, Required]
|
||||
private Animator _goldAnimator;
|
||||
|
||||
[SerializeField, Required]
|
||||
private TMP_Text _goldText;
|
||||
|
||||
private Queue<int> _goldQueue = new();
|
||||
private bool _isGoldAnimating;
|
||||
private bool _isQuitting;
|
||||
|
||||
private const string GoldAnimation = "Gold";
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
DataManager.Instance.OnChangeGold += ChangeGold;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
if (_isQuitting) return;
|
||||
|
||||
DataManager.Instance.OnChangeGold -= ChangeGold;
|
||||
}
|
||||
|
||||
private void OnApplicationQuit()
|
||||
{
|
||||
_isQuitting = true;
|
||||
}
|
||||
|
||||
private void ChangeGold(int newGoldAmount)
|
||||
{
|
||||
_goldQueue.Enqueue(newGoldAmount);
|
||||
if (!_isGoldAnimating)
|
||||
{
|
||||
StartCoroutine(AnimateGoldChange());
|
||||
}
|
||||
}
|
||||
|
||||
private IEnumerator AnimateGoldChange()
|
||||
{
|
||||
_isGoldAnimating = true;
|
||||
while (_goldQueue.Count > 0)
|
||||
{
|
||||
var targetGold = _goldQueue.Dequeue();
|
||||
var currentGold = int.Parse(_goldText.text.Replace(",", ""));
|
||||
var elapsedTime = 0f;
|
||||
_goldAnimator.Play(GoldAnimation, -1, 0f);
|
||||
while (elapsedTime < 1f)
|
||||
{
|
||||
elapsedTime += Time.deltaTime;
|
||||
var newGold = (int)Mathf.Lerp(currentGold, targetGold, elapsedTime / 1f);
|
||||
_goldText.text = newGold.ToString("N0");
|
||||
yield return null;
|
||||
}
|
||||
_goldText.text = targetGold.ToString("N0");
|
||||
}
|
||||
_isGoldAnimating = false;
|
||||
}
|
||||
}
|
||||
}
|
2
Assets/02.Scripts/Ui/Tycoon/GoldUi.cs.meta
Normal file
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7424ed33554084b42abf8c1da79ac39c
|
29
Assets/02.Scripts/Ui/Tycoon/PayMoneyUi.cs
Normal file
@ -0,0 +1,29 @@
|
||||
using DG.Tweening;
|
||||
using Sirenix.OdinInspector;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BlueWater.Uis
|
||||
{
|
||||
public class PayMoneyUi : MonoBehaviour
|
||||
{
|
||||
[SerializeField, Required]
|
||||
private DOTweenAnimation _moveAnimation;
|
||||
|
||||
[SerializeField, Required]
|
||||
private TMP_Text _goldText;
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
_moveAnimation.DOKill();
|
||||
}
|
||||
|
||||
public void PayMoney(int gold)
|
||||
{
|
||||
gameObject.SetActive(true);
|
||||
_moveAnimation.DORestart();
|
||||
|
||||
_goldText.text = gold.ToString("N0");
|
||||
}
|
||||
}
|
||||
}
|
2
Assets/02.Scripts/Ui/Tycoon/PayMoneyUi.cs.meta
Normal file
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 39a3ea52f4f05d643be41bd78f1f2b9f
|
@ -136,8 +136,8 @@ namespace BlueWater.Uis
|
||||
case FoodType.Soup:
|
||||
newColor = itemSlotDataSo.SoupFood;
|
||||
break;
|
||||
case FoodType.FryingPan:
|
||||
newColor = itemSlotDataSo.FryingPanFood;
|
||||
case FoodType.Grill:
|
||||
newColor = itemSlotDataSo.GrillFood;
|
||||
break;
|
||||
case FoodType.Dessert:
|
||||
newColor = itemSlotDataSo.DessertFood;
|
||||
|
@ -1,5 +1,7 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Sirenix.OdinInspector;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BlueWater.Uis
|
||||
@ -17,10 +19,15 @@ namespace BlueWater.Uis
|
||||
|
||||
[field: SerializeField]
|
||||
public TycoonManagementUi TycoonManagementUi { get; private set; }
|
||||
|
||||
[field: SerializeField]
|
||||
public GoldUi GoldUi { get; private set; }
|
||||
|
||||
// Variables
|
||||
public List<PopupUi> PopupUiList { get; private set; }
|
||||
|
||||
private DataManager _dataManager;
|
||||
|
||||
#endregion
|
||||
|
||||
// Unity events
|
||||
@ -54,6 +61,7 @@ namespace BlueWater.Uis
|
||||
MainCanvas = GetComponent<Canvas>();
|
||||
TycoonUpgradeUi = GetComponentInChildren<TycoonUpgradeUi>(true);
|
||||
TycoonManagementUi = GetComponentInChildren<TycoonManagementUi>(true);
|
||||
GoldUi = transform.Find("GoldUi").GetComponent<GoldUi>();
|
||||
|
||||
PopupUiList = new List<PopupUi>(8);
|
||||
}
|
||||
|
@ -328,8 +328,8 @@ TextureImporter:
|
||||
y: 1200
|
||||
width: 200
|
||||
height: 200
|
||||
alignment: 0
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
alignment: 9
|
||||
pivot: {x: 0.5, y: 0.07}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
@ -460,8 +460,8 @@ TextureImporter:
|
||||
y: 1000
|
||||
width: 200
|
||||
height: 200
|
||||
alignment: 0
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
alignment: 9
|
||||
pivot: {x: 0.5, y: 0.07}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
@ -944,8 +944,8 @@ TextureImporter:
|
||||
y: 600
|
||||
width: 200
|
||||
height: 200
|
||||
alignment: 0
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
alignment: 9
|
||||
pivot: {x: 0.5, y: 0.18}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
@ -1098,8 +1098,8 @@ TextureImporter:
|
||||
y: 400
|
||||
width: 200
|
||||
height: 200
|
||||
alignment: 0
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
alignment: 9
|
||||
pivot: {x: 0.5, y: 0.03}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
@ -1406,8 +1406,8 @@ TextureImporter:
|
||||
y: 200
|
||||
width: 200
|
||||
height: 200
|
||||
alignment: 0
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
alignment: 9
|
||||
pivot: {x: 0.5, y: 0.03}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
|
BIN
Assets/03.Images/Items/Gold01.png
Normal file
After Width: | Height: | Size: 20 KiB |
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6807b962d0918ae42870c9b953a55cd7
|
||||
guid: 51c11bee66d04f64d8d44afcb9975321
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
@ -46,9 +46,9 @@ TextureImporter:
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 9
|
||||
spritePivot: {x: 0.5, y: 0.23}
|
||||
spritePixelsToUnits: 1024
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 512
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
@ -127,7 +127,7 @@ TextureImporter:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 1537655665
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
BIN
Assets/03.Images/Items/Gold02.png
Normal file
After Width: | Height: | Size: 16 KiB |
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 22fdd4cc3908b9c4185a2e4a479ba720
|
||||
guid: bb299176ee03f63468d9bb59a8998669
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
@ -46,9 +46,9 @@ TextureImporter:
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 9
|
||||
spritePivot: {x: 0.5, y: 0.06}
|
||||
spritePixelsToUnits: 2048
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 512
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
@ -127,7 +127,7 @@ TextureImporter:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 1537655665
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
8
Assets/03.Images/Props/Environment/Combats.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 653d976a86e53c64a90d9b2212086a65
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Before Width: | Height: | Size: 743 KiB After Width: | Height: | Size: 743 KiB |
Before Width: | Height: | Size: 1.7 MiB After Width: | Height: | Size: 1.7 MiB |
Before Width: | Height: | Size: 2.1 MiB After Width: | Height: | Size: 2.1 MiB |
Before Width: | Height: | Size: 516 KiB After Width: | Height: | Size: 516 KiB |
Before Width: | Height: | Size: 520 KiB After Width: | Height: | Size: 520 KiB |
Before Width: | Height: | Size: 1.5 MiB After Width: | Height: | Size: 1.5 MiB |
Before Width: | Height: | Size: 597 KiB After Width: | Height: | Size: 597 KiB |
Before Width: | Height: | Size: 307 KiB After Width: | Height: | Size: 307 KiB |
Before Width: | Height: | Size: 306 KiB After Width: | Height: | Size: 306 KiB |
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 1.3 MiB |
Before Width: | Height: | Size: 2.3 MiB After Width: | Height: | Size: 2.3 MiB |
Before Width: | Height: | Size: 1.6 MiB After Width: | Height: | Size: 1.6 MiB |
Before Width: | Height: | Size: 2.2 MiB After Width: | Height: | Size: 2.2 MiB |
Before Width: | Height: | Size: 678 KiB After Width: | Height: | Size: 678 KiB |
Before Width: | Height: | Size: 368 KiB After Width: | Height: | Size: 368 KiB |
Before Width: | Height: | Size: 373 KiB After Width: | Height: | Size: 373 KiB |
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 16 MiB After Width: | Height: | Size: 16 MiB |
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 95 KiB |
Before Width: | Height: | Size: 206 KiB After Width: | Height: | Size: 206 KiB |
Before Width: | Height: | Size: 657 KiB After Width: | Height: | Size: 657 KiB |
8
Assets/03.Images/Props/Environment/Tycoons.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f672843ae34be644a8e6997c4ce9d843
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Before Width: | Height: | Size: 585 KiB After Width: | Height: | Size: 585 KiB |