타이쿤 업데이트 정리

+ 상호작용 오브젝트 외곽선 기능 추가
+ 손님 계산 기능 추가
+ 손님 계산 시 Ui 출력 및 파티클, 효과 추가
+ 대화 시스템 로직 수정
+ 테이블 수정
+ 캐릭터 스파인 교체
This commit is contained in:
Nam Tae Gun 2024-07-20 20:32:54 +09:00
parent 49d885447c
commit 1458693a1b
206 changed files with 26360 additions and 10012 deletions

View File

@ -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}

View File

@ -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;
}

View File

@ -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;
}
}
}

View File

@ -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;
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: b9c5679271731774f908d8d3119761c9

View File

@ -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
}
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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;

View File

@ -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()

View File

@ -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

View File

@ -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
}

View File

@ -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);
}
}
}

View File

@ -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; }

View File

@ -11,7 +11,7 @@ namespace BlueWater.Items
None = 0,
Skewer,
Soup,
FryingPan,
Grill,
Dessert,
}

View File

@ -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");

View File

@ -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; }

View File

@ -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()

View 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";
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 01035f0e728b4c8459e74591bf9cc0ac

View File

@ -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;
}
}
}

View 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];
}
}

View File

@ -11,5 +11,8 @@ namespace BlueWater.Tycoons
[field: SerializeField]
public float BurnInterval { get; private set; }
[field: SerializeField]
public float FireScaleCoefficient { get; private set; }
}
}

View File

@ -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];
}
}

View 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);
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 8de9894c1150b994abf051eb0cc1ef16

View File

@ -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()

View File

@ -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);
}
}
}

View 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);
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 70d84dd0b692dde40854818cb59d7963

View 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

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 7d306bdfc9aff374a9bef2cb63de76dc
guid: 8ed757ac51af2814c9b00c1b14d2127f
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000

View File

@ -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}

View File

@ -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

View 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

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: db30adb40854e2f49a2c44863fe0c953
guid: 677135b3fc858ef47bfc19901b021503
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000

View 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}

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: af2d6c8bcf8dd2047869a9a6fd87ffb9
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View 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; }
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 137091cb8deacc14da9ee9469a96cfc8

View File

@ -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];
}
}
}

View File

@ -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)

View 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;
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 7424ed33554084b42abf8c1da79ac39c

View 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");
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 39a3ea52f4f05d643be41bd78f1f2b9f

View File

@ -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;

View File

@ -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);
}

View File

@ -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: []

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -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: []

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -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: []

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 653d976a86e53c64a90d9b2212086a65
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

Before

Width:  |  Height:  |  Size: 743 KiB

After

Width:  |  Height:  |  Size: 743 KiB

View File

Before

Width:  |  Height:  |  Size: 1.7 MiB

After

Width:  |  Height:  |  Size: 1.7 MiB

View File

Before

Width:  |  Height:  |  Size: 2.1 MiB

After

Width:  |  Height:  |  Size: 2.1 MiB

View File

Before

Width:  |  Height:  |  Size: 516 KiB

After

Width:  |  Height:  |  Size: 516 KiB

View File

Before

Width:  |  Height:  |  Size: 520 KiB

After

Width:  |  Height:  |  Size: 520 KiB

View File

Before

Width:  |  Height:  |  Size: 1.5 MiB

After

Width:  |  Height:  |  Size: 1.5 MiB

View File

Before

Width:  |  Height:  |  Size: 597 KiB

After

Width:  |  Height:  |  Size: 597 KiB

View File

Before

Width:  |  Height:  |  Size: 307 KiB

After

Width:  |  Height:  |  Size: 307 KiB

View File

Before

Width:  |  Height:  |  Size: 306 KiB

After

Width:  |  Height:  |  Size: 306 KiB

View File

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

View File

Before

Width:  |  Height:  |  Size: 2.3 MiB

After

Width:  |  Height:  |  Size: 2.3 MiB

View File

Before

Width:  |  Height:  |  Size: 1.6 MiB

After

Width:  |  Height:  |  Size: 1.6 MiB

View File

Before

Width:  |  Height:  |  Size: 2.2 MiB

After

Width:  |  Height:  |  Size: 2.2 MiB

View File

Before

Width:  |  Height:  |  Size: 678 KiB

After

Width:  |  Height:  |  Size: 678 KiB

View File

Before

Width:  |  Height:  |  Size: 368 KiB

After

Width:  |  Height:  |  Size: 368 KiB

View File

Before

Width:  |  Height:  |  Size: 373 KiB

After

Width:  |  Height:  |  Size: 373 KiB

View File

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 78 KiB

View File

Before

Width:  |  Height:  |  Size: 16 MiB

After

Width:  |  Height:  |  Size: 16 MiB

View File

Before

Width:  |  Height:  |  Size: 95 KiB

After

Width:  |  Height:  |  Size: 95 KiB

View File

Before

Width:  |  Height:  |  Size: 206 KiB

After

Width:  |  Height:  |  Size: 206 KiB

View File

Before

Width:  |  Height:  |  Size: 657 KiB

After

Width:  |  Height:  |  Size: 657 KiB

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f672843ae34be644a8e6997c4ce9d843
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

Before

Width:  |  Height:  |  Size: 585 KiB

After

Width:  |  Height:  |  Size: 585 KiB

Some files were not shown because too many files have changed in this diff Show More