Merge remote-tracking branch 'origin/develop' into develop

# Conflicts:
#	Assets/_DDD/_Scripts/AssetPostprocessors/AssetPostprocessorSprite.cs
This commit is contained in:
NTG 2025-09-01 18:05:58 +09:00
commit 2a4482f2ee
76 changed files with 1542 additions and 252 deletions

BIN
Assets/Settings/PC_Renderer.asset (Stored with Git LFS)

Binary file not shown.

View File

@ -9,7 +9,6 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 1664322405549350652}
- component: {fileID: 8522104897182006738}
m_Layer: 0
m_Name: InteractionPoint
m_TagString: Untagged
@ -26,67 +25,12 @@ Transform:
m_GameObject: {fileID: 3857692527302447930}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -0.4, y: 0, z: 0}
m_LocalPosition: {x: -0.5, y: -0.165, z: -0.1}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 3697702677815423220}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!212 &8522104897182006738
SpriteRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3857692527302447930}
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: 9dfc825aed78fcd4ba02077103263b40, 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: 0
m_Sprite: {fileID: 21300000, guid: c607300554a0c44469620484fccbf239, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_FlipX: 0
m_FlipY: 0
m_DrawMode: 0
m_Size: {x: 5.12, y: 5.12}
m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!1 &4103096974375017811
GameObject:
m_ObjectHideFlags: 0
@ -197,6 +141,7 @@ MonoBehaviour:
SerializedFormat: 2
SerializedBytes:
ReferencedUnityObjects:
- {fileID: 2100000, guid: 3420d0083698c4732af621bf37a11cbb, type: 2}
- {fileID: 2100000, guid: cecea4c48dc174e34973ec5b33b2b2a9, type: 2}
SerializedBytesString:
Prefab: {fileID: 0}
@ -222,7 +167,19 @@ MonoBehaviour:
Data:
- Name:
Entry: 12
Data: 1
Data: 3
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 4
- Name: $v
Entry: 10
Data: 0
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
@ -231,7 +188,19 @@ MonoBehaviour:
Data: 2
- Name: $v
Entry: 10
Data: 0
Data: 1
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 8
- Name: $v
Entry: 10
Data: 1
- Name:
Entry: 8
Data:
@ -241,10 +210,12 @@ MonoBehaviour:
- Name:
Entry: 8
Data:
_offset: {x: 0, y: 1.5, z: 1.35}
_rotation: {x: 40, y: 0, z: 0}
_temporarySprite: {fileID: 21300000, guid: 94f9e78fc7b864b93842bdfa21276f09, type: 3}
_fixedSpriteSize: {x: 0.2, y: 0.2}
_defaultSprite: {fileID: 21300000, guid: 94f9e78fc7b864b93842bdfa21276f09, type: 3}
_offset: {x: 0, y: 1.5, z: 1.35}
_disabledOffset: {x: 0, y: 0.2, z: 0.165}
_fixedLocalScale: {x: 0.3, y: 0.3}
_disabledColor: {r: 0.6627451, g: 0.6627451, b: 0.6627451, a: 0.65882355}
--- !u!114 &1332098886975329103
MonoBehaviour:
m_ObjectHideFlags: 0
@ -252,18 +223,18 @@ MonoBehaviour:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4103096974375017811}
m_Enabled: 0
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f0feb22ab60a4d1885271637838f43b9, type: 3}
m_Name:
m_EditorClassIdentifier:
_availableStyle:
Color: {r: 1, g: 1, b: 1, a: 1}
Width: 1
Width: 0.5
Opacity: 1
_focusedStyle:
Color: {r: 1, g: 0.92156863, b: 0.015686275, a: 1}
Width: 1
Width: 0.5
Opacity: 1
_unavailableStyle:
Color: {r: 0.5, g: 0.5, b: 0.5, a: 1}
@ -271,7 +242,7 @@ MonoBehaviour:
Opacity: 1
_objectiveStyle:
Color: {r: 0, g: 1, b: 1, a: 1}
Width: 1
Width: 0.5
Opacity: 1
_breathingSpeed: 2
_breathingRange: 0.3
@ -479,7 +450,7 @@ MonoBehaviour:
seeThroughTextureUVSpace: 0
seeThroughTextureScale: 1
seeThroughChildrenSortingMode: 0
rmsCount: 1
rmsCount: 0
hitFxInitialIntensity: 0
hitFxMode: 0
hitFxFadeOutDuration: 0.25

View File

@ -8,17 +8,69 @@ PrefabInstance:
serializedVersion: 3
m_TransformParent: {fileID: 8881739536043914635}
m_Modifications:
- target: {fileID: 29040892075516248, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: serializationData.Prefab
value:
objectReference: {fileID: 29040892075516248, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
- target: {fileID: 1664322405549350652, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalPosition.x
value: -0.5
objectReference: {fileID: 0}
- target: {fileID: 1664322405549350652, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalPosition.y
value: -0.165
objectReference: {fileID: 0}
- target: {fileID: 1664322405549350652, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalPosition.z
value: 0.1
objectReference: {fileID: 0}
- target: {fileID: 1664322405549350652, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1664322405549350652, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1664322405549350652, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1664322405549350652, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1664322405549350652, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2950132940454135295, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_Radius
value: 0.1
objectReference: {fileID: 0}
- target: {fileID: 2950132940454135295, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_Center.x
value: -0.5
objectReference: {fileID: 0}
- target: {fileID: 2950132940454135295, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_Center.y
value: -0.165
objectReference: {fileID: 0}
- target: {fileID: 2950132940454135295, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_Center.z
value: 0.1
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalPosition.x
value: 0.2
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalPosition.y
value: 0.25
value: 0.2
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalPosition.z
value: 0.2
value: 0.165
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalRotation.w
@ -70,17 +122,69 @@ PrefabInstance:
serializedVersion: 3
m_TransformParent: {fileID: 8881739536043914635}
m_Modifications:
- target: {fileID: 29040892075516248, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: serializationData.Prefab
value:
objectReference: {fileID: 29040892075516248, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
- target: {fileID: 1664322405549350652, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalPosition.x
value: -0.5
objectReference: {fileID: 0}
- target: {fileID: 1664322405549350652, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalPosition.y
value: -0.165
objectReference: {fileID: 0}
- target: {fileID: 1664322405549350652, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalPosition.z
value: -0.1
objectReference: {fileID: 0}
- target: {fileID: 1664322405549350652, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1664322405549350652, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1664322405549350652, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1664322405549350652, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1664322405549350652, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2950132940454135295, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_Radius
value: 0.1
objectReference: {fileID: 0}
- target: {fileID: 2950132940454135295, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_Center.x
value: -0.5
objectReference: {fileID: 0}
- target: {fileID: 2950132940454135295, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_Center.y
value: -0.165
objectReference: {fileID: 0}
- target: {fileID: 2950132940454135295, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_Center.z
value: -0.1
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalPosition.x
value: -0.2
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalPosition.y
value: 0.25
value: 0.2
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalPosition.z
value: 0.2
value: 0.165
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalRotation.w

View File

@ -148,8 +148,8 @@ Transform:
m_GameObject: {fileID: 4383536863636501606}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0.01}
m_LocalScale: {x: 1, y: 1, z: 1}
m_LocalPosition: {x: 0, y: -0.05, z: 0.01}
m_LocalScale: {x: 1.1, y: 1.1, z: 1.1}
m_ConstrainProportionsScale: 1
m_Children: []
m_Father: {fileID: 4689806172687901599}

Binary file not shown.

Binary file not shown.

View File

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

Binary file not shown.

View File

@ -0,0 +1,368 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: SpatialUi_SpriteBubble_Translucent
m_Shader: {fileID: 4800000, guid: 13c02b14c4d048fa9653293d54f6e0e1, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses:
- MOTIONVECTORS
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _AlphaTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BackgroundTexture:
m_Texture: {fileID: 2800000, guid: f88e7478e74a14cb6a820978eb9f452f, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BaseMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ColorRampTex:
m_Texture: {fileID: 2800000, guid: 279657edc397ece4b8029c727adf6ddc, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ColorRampTexGradient:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ColorSwapTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DistortTex:
m_Texture: {fileID: 2800000, guid: 7aad8c583ef292e48b06af0d1f2fab97, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _FadeBurnTex:
m_Texture: {fileID: 2800000, guid: 677cca399782dea41aedc1d292ecb67d, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _FadeTex:
m_Texture: {fileID: 2800000, guid: 7aad8c583ef292e48b06af0d1f2fab97, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _GlowTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: 94f9e78fc7b864b93842bdfa21276f09, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OutlineDistortTex:
m_Texture: {fileID: 2800000, guid: 7aad8c583ef292e48b06af0d1f2fab97, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OutlineTex:
m_Texture: {fileID: 2800000, guid: 74087f6d03f233e4a8a142fa01f9e5cf, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OverlayTex:
m_Texture: {fileID: 2800000, guid: 677cca399782dea41aedc1d292ecb67d, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ShineMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpriteTexture:
m_Texture: {fileID: 2800000, guid: 7394cfdc5ad4642058b80a859c8a7319, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_Lightmaps:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_LightmapsInd:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_ShadowMasks:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- PixelSnap: 0
- _AddPrecomputedVelocity: 0
- _Alpha: 1
- _AlphaClip: 0
- _AlphaCutoffValue: 0.25
- _AlphaOutlineBlend: 1
- _AlphaOutlineGlow: 5
- _AlphaOutlineMinAlpha: 0
- _AlphaOutlinePower: 1
- _AlphaRoundThreshold: 0.5
- _AlphaToMask: 0
- _BillboardY: 0
- _Blend: 0
- _BlendModePreserveSpecular: 1
- _BlurHD: 0
- _BlurIntensity: 10
- _Brightness: 0
- _BumpScale: 1
- _ChromAberrAlpha: 0.4
- _ChromAberrAmount: 1
- _ClearCoatMask: 0
- _ClearCoatSmoothness: 0
- _ClipUvDown: 0
- _ClipUvLeft: 0
- _ClipUvRight: 0
- _ClipUvUp: 0
- _ColorChangeLuminosity: 0
- _ColorChangeTolerance: 0.25
- _ColorChangeTolerance2: 0.25
- _ColorChangeTolerance3: 0.25
- _ColorMask: 15
- _ColorRampBlend: 1
- _ColorRampLuminosity: 0
- _ColorRampOutline: 0
- _ColorSwapBlend: 1
- _ColorSwapBlueLuminosity: 0.5
- _ColorSwapGreenLuminosity: 0.5
- _ColorSwapRedLuminosity: 0.5
- _Contrast: 1
- _Cull: 2
- _CullingOption: 0
- _Cutoff: 0.5
- _DetailAlbedoMapScale: 1
- _DetailNormalMapScale: 1
- _DistortAmount: 0.5
- _DistortTexXSpeed: 5
- _DistortTexYSpeed: 5
- _DstBlend: 0
- _DstBlendAlpha: 0
- _EditorDrawers: 6
- _EnableExternalAlpha: 0
- _EnvironmentReflections: 1
- _FadeAmount: -0.1
- _FadeBurnGlow: 2
- _FadeBurnTransition: 0.075
- _FadeBurnWidth: 0.025
- _FishEyeUvAmount: 0.35
- _FlickerAlpha: 0
- _FlickerFreq: 0.2
- _FlickerPercent: 0.05
- _GhostBlend: 1
- _GhostColorBoost: 1
- _GhostTransparency: 0
- _GlitchAmount: 3
- _GlitchSize: 1
- _GlossMapScale: 0
- _Glossiness: 0
- _GlossyReflections: 0
- _Glow: 10
- _GlowGlobal: 1
- _GradBlend: 1
- _GradBoostX: 1.2
- _GradBoostY: 1.2
- _GradIsRadial: 0
- _GrassManualAnim: 1
- _GrassManualToggle: 0
- _GrassRadialBend: 0.1
- _GrassSpeed: 2
- _GrassWind: 20
- _GreyscaleBlend: 1
- _GreyscaleLuminosity: 0
- _GreyscaleOutline: 0
- _HandDrawnAmount: 10
- _HandDrawnSpeed: 5
- _HitEffectBlend: 1
- _HitEffectGlow: 5
- _HologramBlend: 1
- _HologramMaxAlpha: 0.75
- _HologramMinAlpha: 0.1
- _HologramStripesAmount: 0.1
- _HologramStripesSpeed: 4.5
- _HologramUnmodAmount: 0
- _HsvBright: 1
- _HsvSaturation: 1
- _HsvShift: 180
- _InnerOutlineAlpha: 1
- _InnerOutlineGlow: 4
- _InnerOutlineThickness: 1
- _MaxXUV: 1
- _MaxYUV: 1
- _Metallic: 0
- _MinXUV: 0
- _MinYUV: 0
- _MotionBlurAngle: 0.1
- _MotionBlurDist: 1.25
- _MyDstMode: 10
- _MySrcMode: 5
- _NegativeAmount: 1
- _OcclusionStrength: 1
- _OffsetUvX: 0
- _OffsetUvY: 0
- _OnlyInnerOutline: 0
- _OnlyOutline: 0
- _OutlineAlpha: 1
- _OutlineDistortAmount: 0.5
- _OutlineDistortTexXSpeed: 5
- _OutlineDistortTexYSpeed: 5
- _OutlineGlow: 1.5
- _OutlinePixelWidth: 1
- _OutlineTexXSpeed: 10
- _OutlineTexYSpeed: 0
- _OutlineWidth: 0.004
- _OverlayBlend: 1
- _OverlayGlow: 1
- _OverlayTextureScrollXSpeed: 0.25
- _OverlayTextureScrollYSpeed: 0.25
- _Parallax: 0.005
- _PinchUvAmount: 0.35
- _PixelateSize: 32
- _PosterizeGamma: 0.75
- _PosterizeNumColors: 8
- _PosterizeOutline: 0
- _QueueOffset: 0
- _RadialClip: 45
- _RadialClip2: 0
- _RadialStartAngle: 90
- _RandomSeed: 0
- _ReceiveShadows: 1
- _RectSize: 1
- _RotateUvAmount: 0
- _RoundWaveSpeed: 2
- _RoundWaveStrength: 0.7
- _ShadowAlpha: 0.5
- _ShadowX: 0.1
- _ShadowY: -0.05
- _ShakeUvSpeed: 2.5
- _ShakeUvX: 1.5
- _ShakeUvY: 1
- _ShineGlow: 1
- _ShineLocation: 0.5
- _ShineRotate: 0
- _ShineWidth: 0.1
- _Smoothness: 0.5
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _SrcBlendAlpha: 1
- _Stencil: 0
- _StencilComp: 8
- _StencilOp: 0
- _StencilReadMask: 255
- _StencilWriteMask: 255
- _Surface: 0
- _TextureScrollXSpeed: 1
- _TextureScrollYSpeed: 0
- _TwistUvAmount: 1
- _TwistUvPosX: 0.5
- _TwistUvPosY: 0.5
- _TwistUvRadius: 0.75
- _WarpScale: 0.5
- _WarpSpeed: 8
- _WarpStrength: 0.025
- _WaveAmount: 7
- _WaveSpeed: 10
- _WaveStrength: 7.5
- _WaveX: 0
- _WaveY: 0.5
- _WorkflowMode: 1
- _XRMotionVectorsPass: 1
- _ZTestMode: 4
- _ZWrite: 1
- _ZoomUvAmount: 0.5
m_Colors:
- _AlphaOutlineColor: {r: 1, g: 1, b: 1, a: 1}
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _ColorChangeNewCol: {r: 1, g: 1, b: 0, a: 1}
- _ColorChangeNewCol2: {r: 1, g: 1, b: 0, a: 1}
- _ColorChangeNewCol3: {r: 1, g: 1, b: 0, a: 1}
- _ColorChangeTarget: {r: 1, g: 0, b: 0, a: 1}
- _ColorChangeTarget2: {r: 1, g: 0, b: 0, a: 1}
- _ColorChangeTarget3: {r: 1, g: 0, b: 0, a: 1}
- _ColorSwapBlue: {r: 1, g: 1, b: 1, a: 1}
- _ColorSwapGreen: {r: 1, g: 1, b: 1, a: 1}
- _ColorSwapRed: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _FadeBurnColor: {r: 1, g: 1, b: 0, a: 1}
- _Flip: {r: 1, g: 1, b: 1, a: 1}
- _GlowColor: {r: 1, g: 1, b: 1, a: 1}
- _GradBotLeftCol: {r: 0, g: 0, b: 1, a: 1}
- _GradBotRightCol: {r: 0, g: 1, b: 0, a: 1}
- _GradTopLeftCol: {r: 1, g: 0, b: 0, a: 1}
- _GradTopRightCol: {r: 1, g: 1, b: 0, a: 1}
- _GreyscaleTintColor: {r: 1, g: 1, b: 1, a: 1}
- _HitEffectColor: {r: 1, g: 1, b: 1, a: 1}
- _HologramStripeColor: {r: 0, g: 1, b: 1, a: 1}
- _InnerOutlineColor: {r: 1, g: 0, b: 0, a: 1}
- _OutlineColor: {r: 1, g: 1, b: 1, a: 1}
- _OverlayColor: {r: 1, g: 1, b: 1, a: 1}
- _RendererColor: {r: 1, g: 1, b: 1, a: 1}
- _ShadowColor: {r: 0, g: 0, b: 0, a: 1}
- _ShineColor: {r: 1, g: 1, b: 1, a: 1}
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
m_BuildTextureStacks: []
m_AllowLocking: 1
--- !u!114 &5575994803489782819
MonoBehaviour:
m_ObjectHideFlags: 11
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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier:
version: 9

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 3420d0083698c4732af621bf37a11cbb
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -48,7 +48,7 @@ TextureImporter:
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spritePixelsToUnits: 256
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1

View File

@ -1,5 +1,280 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &633131044254461841
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3251801155585931500}
m_Layer: 10
m_Name: Fill Area
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &3251801155585931500
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 633131044254461841}
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: 609795798002784246}
m_Father: {fileID: 4124712097831813607}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0.25}
m_AnchorMax: {x: 1, y: 0.75}
m_AnchoredPosition: {x: -5, y: 0}
m_SizeDelta: {x: -20, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &6108830054777696831
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 609795798002784246}
- component: {fileID: 5096550498312619918}
- component: {fileID: 6088464776038824938}
m_Layer: 10
m_Name: Fill
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &609795798002784246
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6108830054777696831}
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: 3251801155585931500}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 10, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &5096550498312619918
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6108830054777696831}
m_CullTransparentMesh: 1
--- !u!114 &6088464776038824938
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6108830054777696831}
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: 0, b: 0, a: 1}
m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 0
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
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
--- !u!1 &6934217169991235231
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6896730674754028691}
- component: {fileID: 2778170821913614564}
- component: {fileID: 5385555677689984514}
m_Layer: 10
m_Name: Background
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &6896730674754028691
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6934217169991235231}
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: 4124712097831813607}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0.25}
m_AnchorMax: {x: 1, y: 0.75}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &2778170821913614564
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6934217169991235231}
m_CullTransparentMesh: 1
--- !u!114 &5385555677689984514
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6934217169991235231}
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: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 0
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
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
--- !u!1 &7478348093145584255
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4124712097831813607}
- component: {fileID: 290174062369355600}
m_Layer: 10
m_Name: Slider
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &4124712097831813607
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7478348093145584255}
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: 6896730674754028691}
- {fileID: 3251801155585931500}
m_Father: {fileID: 6787772463908443990}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: -122.7}
m_SizeDelta: {x: 80, y: 20}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &290174062369355600
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7478348093145584255}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
m_WrapAround: 0
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_SelectedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 6088464776038824938}
m_FillRect: {fileID: 609795798002784246}
m_HandleRect: {fileID: 0}
m_Direction: 0
m_MinValue: 0
m_MaxValue: 1
m_WholeNumbers: 0
m_Value: 1
m_OnValueChanged:
m_PersistentCalls:
m_Calls: []
--- !u!1001 &6675463944788402332
PrefabInstance:
m_ObjectHideFlags: 0
@ -8,6 +283,10 @@ PrefabInstance:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 1177268455256782109, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
propertyPath: m_BlockingMask.m_Bits
value: 1023
objectReference: {fileID: 0}
- target: {fileID: 2686192822530022837, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
propertyPath: m_IsTrigger
value: 1
@ -1686,11 +1965,11 @@ PrefabInstance:
objectReference: {fileID: 11400000, guid: 90ef4d2128c770b4cb83806c33867a79, type: 2}
- target: {fileID: 4246001044237372826, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
propertyPath: m_Layer
value: 6
value: 10
objectReference: {fileID: 0}
- target: {fileID: 4900607124439125211, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
propertyPath: m_Layer
value: 6
value: 10
objectReference: {fileID: 0}
- target: {fileID: 5108021082109611361, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
propertyPath: _availableInteractions
@ -1698,7 +1977,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5523461449651244940, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
propertyPath: m_Layer
value: 6
value: 10
objectReference: {fileID: 0}
- target: {fileID: 5654854357519457123, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
propertyPath: gravity.x
@ -1726,7 +2005,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 6312111630636169229, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
propertyPath: m_Layer
value: 6
value: 10
objectReference: {fileID: 0}
- target: {fileID: 6336425934484470474, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
propertyPath: m_SortingOrder
@ -1754,7 +2033,11 @@ PrefabInstance:
objectReference: {fileID: 2100000, guid: d018debe5b8bedf4c8f19cba9e4facec, type: 2}
- target: {fileID: 6558328110360087691, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
propertyPath: m_Layer
value: 6
value: 10
objectReference: {fileID: 0}
- target: {fileID: 6558328110360087691, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6826437533270866908, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
propertyPath: externalBehavior
@ -1799,7 +2082,10 @@ PrefabInstance:
m_RemovedComponents:
- {fileID: 133104368464330048, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedGameObjects:
- targetCorrespondingSourceObject: {fileID: 186617915120465866, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
insertIndex: -1
addedObject: {fileID: 4124712097831813607}
m_AddedComponents:
- targetCorrespondingSourceObject: {fileID: 7462519206451630147, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
insertIndex: -1
@ -1813,6 +2099,9 @@ PrefabInstance:
- targetCorrespondingSourceObject: {fileID: 7462519206451630147, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
insertIndex: -1
addedObject: {fileID: 7166420413980924482}
- targetCorrespondingSourceObject: {fileID: 7462519206451630147, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
insertIndex: -1
addedObject: {fileID: 7529813704779128435}
m_SourcePrefab: {fileID: 100100000, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
--- !u!1 &4266090516809920735 stripped
GameObject:
@ -1843,6 +2132,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 784c770c13244dc0a0804056065eaf92, type: 3}
m_Name:
m_EditorClassIdentifier:
_blackboardSo: {fileID: 0}
--- !u!114 &3825874317044733320
MonoBehaviour:
m_ObjectHideFlags: 0
@ -1947,9 +2237,9 @@ MonoBehaviour:
m_NumColorKeys: 2
m_NumAlphaKeys: 2
outlineGradientInLocalSpace: 0
outlineWidth: 0.45
outlineWidth: 0.2
outlineBlurPasses: 2
outlineQuality: 3
outlineQuality: 2
outlineEdgeMode: 0
outlineEdgeThreshold: 0.995
outlineSharpness: 1
@ -2055,3 +2345,51 @@ MonoBehaviour:
hitFxFadeOutDuration: 0.25
hitFxColor: {r: 1, g: 1, b: 1, a: 1}
hitFxRadius: 0.5
--- !u!114 &7529813704779128435
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4266090516809920735}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e509fdc10cff4d3487080f126f32544f, type: 3}
m_Name:
m_EditorClassIdentifier:
serializationData:
SerializedFormat: 2
SerializedBytes:
ReferencedUnityObjects: []
SerializedBytesString:
Prefab: {fileID: 0}
PrefabModificationsReferencedUnityObjects: []
PrefabModifications: []
SerializationNodes:
- Name: _targetOrderType
Entry: 7
Data: 0|System.Collections.Generic.HashSet`1[[DDD.Restaurant.RestaurantOrderType,
Assembly-CSharp]], System.Core
- Name:
Entry: 12
Data: 2
- Name:
Entry: 3
Data: 4
- Name:
Entry: 3
Data: 2
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:
_currentOrderType: 0
_prevOrderType: 0
_patienceSlider: {fileID: 0}
--- !u!224 &6787772463908443990 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 186617915120465866, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
m_PrefabInstance: {fileID: 6675463944788402332}
m_PrefabAsset: {fileID: 0}

View File

@ -48,7 +48,7 @@ TextureImporter:
spriteMeshType: 0
alignment: 0
spritePivot: {x: 0.5, y: 0.1015625}
spritePixelsToUnits: 100
spritePixelsToUnits: 512
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1

View File

@ -48,7 +48,7 @@ TextureImporter:
spriteMeshType: 0
alignment: 0
spritePivot: {x: 0.5, y: 0.068359375}
spritePixelsToUnits: 100
spritePixelsToUnits: 512
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1

View File

@ -48,7 +48,7 @@ TextureImporter:
spriteMeshType: 0
alignment: 0
spritePivot: {x: 0.5, y: 0.1171875}
spritePixelsToUnits: 100
spritePixelsToUnits: 512
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1

View File

@ -48,7 +48,7 @@ TextureImporter:
spriteMeshType: 0
alignment: 0
spritePivot: {x: 0.5, y: 0.109375}
spritePixelsToUnits: 100
spritePixelsToUnits: 512
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1

View File

@ -48,7 +48,7 @@ TextureImporter:
spriteMeshType: 0
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spritePixelsToUnits: 512
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1

View File

@ -48,7 +48,7 @@ TextureImporter:
spriteMeshType: 0
alignment: 0
spritePivot: {x: 0.5, y: 0.12890625}
spritePixelsToUnits: 100
spritePixelsToUnits: 512
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1

View File

@ -48,7 +48,7 @@ TextureImporter:
spriteMeshType: 0
alignment: 0
spritePivot: {x: 0.5, y: 0.083984375}
spritePixelsToUnits: 100
spritePixelsToUnits: 512
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1

View File

@ -48,7 +48,7 @@ TextureImporter:
spriteMeshType: 0
alignment: 0
spritePivot: {x: 0.5, y: 0.091796875}
spritePixelsToUnits: 100
spritePixelsToUnits: 512
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1

View File

@ -48,7 +48,7 @@ TextureImporter:
spriteMeshType: 0
alignment: 0
spritePivot: {x: 0.5, y: 0.021484375}
spritePixelsToUnits: 100
spritePixelsToUnits: 512
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1

View File

@ -48,7 +48,7 @@ TextureImporter:
spriteMeshType: 0
alignment: 0
spritePivot: {x: 0.5, y: 0.05859375}
spritePixelsToUnits: 100
spritePixelsToUnits: 512
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1

View File

@ -48,7 +48,7 @@ TextureImporter:
spriteMeshType: 0
alignment: 0
spritePivot: {x: 0.5, y: 0.044921875}
spritePixelsToUnits: 100
spritePixelsToUnits: 512
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1

View File

@ -48,7 +48,7 @@ TextureImporter:
spriteMeshType: 0
alignment: 0
spritePivot: {x: 0.5, y: 0.0703125}
spritePixelsToUnits: 100
spritePixelsToUnits: 512
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1

View File

@ -48,7 +48,7 @@ TextureImporter:
spriteMeshType: 0
alignment: 0
spritePivot: {x: 0.5, y: 0.05078125}
spritePixelsToUnits: 100
spritePixelsToUnits: 512
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1

View File

@ -48,7 +48,7 @@ TextureImporter:
spriteMeshType: 0
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spritePixelsToUnits: 512
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1

View File

@ -48,7 +48,7 @@ TextureImporter:
spriteMeshType: 0
alignment: 0
spritePivot: {x: 0.5, y: 0.03515625}
spritePixelsToUnits: 100
spritePixelsToUnits: 512
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1

View File

@ -1,3 +1,4 @@
using System;
using UnityEngine;
namespace DDD
@ -7,11 +8,11 @@ namespace DDD
/// - 다양한 캐릭터 AI에서 공통으로 참조하는 현재 인터랙션 타겟만 정의합니다.
/// - 필요 시 키-값 확장을 고려하되, 현재는 최소 요구만 충족합니다.
/// </summary>
public interface IAISharedBlackboard
public interface IAISharedBlackboard<T> where T : Enum
{
void SetBlackboardValue<T>(string key, T inValue);
void SetBlackboardValue<T1>(T key, T1 inValue);
T GetBlackboardValue<T>(string key);
T1 GetBlackboardValue<T1>(T key);
}
}

View File

@ -11,7 +11,7 @@ public VirtualItem(string itemId)
_itemId = itemId;
}
public string GetCarrierId() => _itemId;
public string GetId() => _itemId;
public CarriableType GetCarriableType() => CarriableType.VirtualItem;
public GameObject GetGameObject() => null;

View File

@ -1,7 +1,8 @@
using System;
using Opsive.BehaviorDesigner.Runtime.Tasks;
using Opsive.BehaviorDesigner.Runtime.Tasks.Actions;
using Unity.VisualScripting;
using UnityEngine;
using Action = Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Action;
namespace DDD.Restaurant
{
@ -11,7 +12,7 @@ public enum EmotionType
Satisfied,
}
public class ExpressEmotion : Action
public class ExpressEmotion<T> : Action where T : Enum
{
public interface IEmotionVisual
{
@ -21,13 +22,14 @@ public interface IEmotionVisual
}
//이를 파생해서 기본값을 주거나, 바로 사용하면 될 듯
[SerializeField] protected string _emotionBlackboardKey;
[SerializeField] protected T _emotionBlackboardKey;
private IEmotionVisual _emotionVisual;
public override void OnStart()
{
var currentEmotion = (EmotionType)m_BehaviorTree.GetVariable<int>(_emotionBlackboardKey).Value;
var blackboard = gameObject.GetComponent<IAISharedBlackboard<T>>();
var currentEmotion = blackboard.GetBlackboardValue<EmotionType>(_emotionBlackboardKey);
_emotionVisual = gameObject.GetComponentInChildren<IEmotionVisual>();
if (_emotionVisual == null)

View File

@ -1,6 +1,7 @@
using System;
using Opsive.BehaviorDesigner.Runtime.Tasks;
using Opsive.BehaviorDesigner.Runtime.Tasks.Actions;
using UnityEngine;
using Action = Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Action;
namespace DDD.Restaurant
{
@ -8,7 +9,7 @@ namespace DDD.Restaurant
/// 인터랙션 타겟을 바라보도록 시각(Spine/애니메이션) 컴포넌트에 위임하는 액션의 껍데기/골격.
/// 실제 회전/스파인 제어 로직은 별도의 Visual 컴포넌트(예: Spine/Animation Controller)에서 구현하십시오.
/// </summary>
public class LookAtInteractionTarget : Action
public abstract class LookAtInteractionTarget<T> : Action where T : Enum
{
[Header("Target Settings")]
[Tooltip("InteractionPoints를 사용해 가장 적절한 지점을 바라봄")]
@ -27,20 +28,22 @@ public interface ILookAtVisual
}
private ILookAtVisual _visual;
private GameObject _cachedTarget;
protected GameObject _cachedTarget;
private bool _isLooking;
private Vector3 _currentLookPosition;
public override void OnStart()
public sealed override void OnStart()
{
_visual = gameObject.GetComponentInParent<ILookAtVisual>();
_isLooking = false;
var blackboard = gameObject.GetComponent<IAISharedBlackboard>();
var blackboard = gameObject.GetComponent<IAISharedBlackboard<T>>();
InitializeBlackboard(blackboard);
_cachedTarget = blackboard.GetBlackboardValue<GameObject>(nameof(RestaurantCustomerBlackboardKey.CurrentTargetGameObject));
}
protected abstract void InitializeBlackboard(IAISharedBlackboard<T> blackboard);
public override TaskStatus OnUpdate()
{
if (_cachedTarget == null)

View File

@ -1,14 +1,15 @@
using System;
using Opsive.BehaviorDesigner.Runtime.Tasks;
using Opsive.BehaviorDesigner.Runtime.Tasks.Actions;
using Unity.VisualScripting;
using UnityEngine;
using Action = Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Action;
namespace DDD.Restaurant
{
/// <summary>
/// IAiMovement를 이용해 인터랙션 타겟으로 이동하는 액션
/// </summary>
public class MoveToTargetPoint : Action
public abstract class MoveToTargetPoint<T> : Action where T : Enum
{
[Header("Target Settings")]
[Tooltip("InteractionPoints를 사용해 가장 가까운 지점으로 이동")]
@ -32,18 +33,20 @@ public class MoveToTargetPoint : Action
private float _repathTimer;
private Vector3 _currentDestination;
private bool _isMoving;
private GameObject _target;
protected GameObject _target;
public override void OnStart()
public sealed override void OnStart()
{
_movement = gameObject.GetComponent<IAiMovement>();
_repathTimer = 0f;
_isMoving = false;
var blackboard = gameObject.GetComponent<IAISharedBlackboard>();
_target = blackboard.GetBlackboardValue<GameObject>(nameof(RestaurantCustomerBlackboardKey.CurrentTargetGameObject));
var blackboard = gameObject.GetComponent<IAISharedBlackboard<T>>();
InitializeBlackboard(blackboard);
}
protected abstract void InitializeBlackboard(IAISharedBlackboard<T> blackboard);
public override TaskStatus OnUpdate()
{
if (_movement == null)

View File

@ -0,0 +1,7 @@
namespace DDD.Restaurant
{
public class RestaurantExpressEmotion : ExpressEmotion<RestaurantCustomerBlackboardKey>
{
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 12b0bf82aef64d9d82a77a82943d7878
timeCreated: 1756692031

View File

@ -0,0 +1,12 @@
using UnityEngine;
namespace DDD.Restaurant
{
public class RestaurantLookAtInteractionTarget : LookAtInteractionTarget<RestaurantCustomerBlackboardKey>
{
protected override void InitializeBlackboard(IAISharedBlackboard<RestaurantCustomerBlackboardKey> blackboard)
{
_cachedTarget = blackboard.GetBlackboardValue<GameObject>(RestaurantCustomerBlackboardKey.CurrentTargetGameObject);
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 0d73d4725548490da952ac2079f98497
timeCreated: 1756692248

View File

@ -0,0 +1,12 @@
using UnityEngine;
namespace DDD.Restaurant
{
public class RestaurantMoveToTargetPoint : MoveToTargetPoint<RestaurantCustomerBlackboardKey>
{
protected override void InitializeBlackboard(IAISharedBlackboard<RestaurantCustomerBlackboardKey> blackboard)
{
_target = blackboard.GetBlackboardValue<GameObject>(RestaurantCustomerBlackboardKey.CurrentTargetGameObject);
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: e02da400458a473d9131601fc09192c0
timeCreated: 1756692564

View File

@ -0,0 +1,7 @@
namespace DDD.Restaurant
{
public class RestaurantSearchAndRegisterMarker : SearchAndRegisterMarker<RestaurantCustomerBlackboardKey>
{
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: e62500af8d764eac9b14024f155a168f
timeCreated: 1756693121

View File

@ -1,13 +1,14 @@
using System;
using Opsive.BehaviorDesigner.Runtime.Tasks;
using Opsive.BehaviorDesigner.Runtime.Tasks.Actions;
using UnityEngine;
using Action = Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Action;
namespace DDD.Restaurant
{
public class SearchAndRegisterMarker : Action
public class SearchAndRegisterMarker<T> : Action where T : Enum
{
[SerializeField] private PointType _pointType;
[SerializeField] private RestaurantCustomerBlackboardKey _markerBlackboardKey;
[SerializeField] private T _markerBlackboardKey;
private bool _isRegistered;
public override void OnStart()
@ -15,13 +16,12 @@ public override void OnStart()
var environmentState = RestaurantState.Instance?.EnvironmentState;
if (environmentState == null) return;
var pointProviders = environmentState.GetPointProviderByType(_pointType);
var blackboard = gameObject.GetComponent<IAISharedBlackboard>();
var blackboard = gameObject.GetComponent<IAISharedBlackboard<T>>();
if (blackboard == null) return;
foreach (var pointProvider in pointProviders)
{
if (!pointProvider.IsSupportsType(_pointType)) continue;
blackboard.SetBlackboardValue(nameof(_markerBlackboardKey), pointProvider.GetGameObject());
blackboard.SetBlackboardValue(_markerBlackboardKey, pointProvider.GetGameObject());
_isRegistered = true;
break;
}

View File

@ -1,12 +1,15 @@
using System;
using System.Collections.Generic;
using Opsive.GraphDesigner.Runtime.Variables;
using Sirenix.OdinInspector;
using Sirenix.Serialization;
using UnityEngine;
namespace DDD.Restaurant
{
public class BlackboardSo<T> : ScriptableObject where T : Enum
{
[OdinSerialize, ShowInInspector]
private Dictionary<T, SharedVariable> _variables = new();
public SharedVariable<T1> GetVariable<T1>(T key)
@ -25,6 +28,7 @@ public void SetVariable<T1>(T key, T1 value)
if (outVariable != null)
{
outVariable.Value = value;
_variables[key] = outVariable;
}
else
{

View File

@ -238,7 +238,7 @@ public void Execute(ref DynamicBuffer<BranchComponent> branchComponents,
}
[NodeDescription("자식 태스크의 실행 시간을 제한합니다 (GameObject 워크플로우)")]
public class SharedTimeLimiter : DecoratorNode
public class SharedTimeLimiter<T> : DecoratorNode
{
[Tooltip("최대 실행 시간(초)")]
[SerializeField] protected SharedVariable<float> _timeLimit = 30f;
@ -248,7 +248,8 @@ public class SharedTimeLimiter : DecoratorNode
[Tooltip("하단 블랙보드 키에 현재 시간을 저장할 지")]
[SerializeField] protected bool _isBlackboardWriteEnabled = false;
[SerializeField] protected string _blackboardKey = "CurrentTime";
[SerializeField] protected T _remainTimeblackboardKey;
[SerializeField] protected T _maxTimeblackboardKey;
public SharedVariable<float> TimeLimit
{

View File

@ -0,0 +1,20 @@
using Opsive.BehaviorDesigner.Runtime.Tasks.Actions;
using UnityEngine;
namespace DDD.Restaurant
{
public class IncrementOrderCount : Action
{
public override void OnStart()
{
var blackboard = gameObject.GetComponent<IAISharedBlackboard<RestaurantCustomerBlackboardKey>>();
if (blackboard == null)
{
Debug.LogWarning($"블랙보드가 존재하지 않음 해시코드: {gameObject.GetHashCode()}");
return;
}
var cumulativeOrderCount = blackboard.GetBlackboardValue<int>(RestaurantCustomerBlackboardKey.CumulativeOrderCount);
blackboard.SetBlackboardValue(RestaurantCustomerBlackboardKey.CumulativeOrderCount, ++cumulativeOrderCount);
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: f3f7e66da71042a5b5a679261d1bbf0b
timeCreated: 1756700443

View File

@ -0,0 +1,15 @@
using Opsive.BehaviorDesigner.Runtime.Tasks;
using Opsive.BehaviorDesigner.Runtime.Tasks.Actions;
using UnityEngine;
namespace DDD.Restaurant
{
public class LeaveRestaurant : Action
{
public override TaskStatus OnUpdate()
{
Object.Destroy(gameObject);
return TaskStatus.Running;
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: e39046ffc9bb46d39d2a5c4a9899cd68
timeCreated: 1756702274

View File

@ -0,0 +1,33 @@
using Opsive.BehaviorDesigner.Runtime.Tasks;
using Opsive.BehaviorDesigner.Runtime.Tasks.Actions;
using UnityEngine;
namespace DDD.Restaurant
{
public class PublishRestaurantInterruptEvent : Action
{
[SerializeField] private RestaurantOrderType _targetInterruptType;
public override TaskStatus OnUpdate()
{
var blackboard = gameObject.GetComponent<IAISharedBlackboard<RestaurantCustomerBlackboardKey>>();
if (blackboard == null) return TaskStatus.Failure;
var currentTarget = blackboard.GetBlackboardValue<GameObject>(RestaurantCustomerBlackboardKey.CurrentTargetGameObject);
if (currentTarget == null) return TaskStatus.Failure;
var orderObject = currentTarget.GetComponent<IRestaurantOrderObject>();
if (orderObject == null) return TaskStatus.Failure;
RestaurantOrderInterrupt evt = new()
{
Table = currentTarget,
OrderObject = orderObject.GetOrderObjectState(),
TransitionType = _targetInterruptType
};
EventBus.Broadcast(evt);
return TaskStatus.Success;
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: aaaf550a60264509a1ebd35506000e2b
timeCreated: 1756706679

View File

@ -14,13 +14,13 @@ public enum EvaluationStep
[NodeDescription("만족도 평가 테스크")]
public class SatisfactionEvaluator : Action
{
[SerializeField] private string _satisfactionBlackboardKey;
[SerializeField] private RestaurantCustomerBlackboardKey _satisfactionBlackboardKey;
[SerializeField] private EvaluationStep _evaluationStep;
public override void OnStart()
{
var currentSatisfaction = CalculateSatisfaction();
var blackboard = gameObject.GetComponent<IAISharedBlackboard>();
blackboard.SetBlackboardValue(_satisfactionBlackboardKey, (int)currentSatisfaction);
var blackboard = gameObject.GetComponent<IAISharedBlackboard<RestaurantCustomerBlackboardKey>>();
blackboard.SetBlackboardValue(_satisfactionBlackboardKey, currentSatisfaction);
}
//TODO 만족도 계산?

View File

@ -22,8 +22,8 @@ public override void OnStart()
public override TaskStatus OnUpdate()
{
var blackboard = gameObject.GetComponent<IAISharedBlackboard>();
var target = blackboard?.GetBlackboardValue<GameObject>(nameof(RestaurantCustomerBlackboardKey.CurrentTargetGameObject));
var blackboard = gameObject.GetComponent<IAISharedBlackboard<RestaurantCustomerBlackboardKey>>();
var target = blackboard?.GetBlackboardValue<GameObject>(RestaurantCustomerBlackboardKey.CurrentTargetGameObject);
IInteractable currentInteractable = target?.GetComponent<IInteractable>();
if (_targetOrderType == RestaurantOrderType.Wait)
{
@ -33,8 +33,8 @@ public override TaskStatus OnUpdate()
{
return TaskStatus.Failure;
}
var customerBlackboard = gameObject.GetComponent<IAISharedBlackboard>();
customerBlackboard?.SetBlackboardValue(nameof(RestaurantCustomerBlackboardKey.CurrentTargetGameObject), currentInteractable.GetInteractableGameObject());
var customerBlackboard = gameObject.GetComponent<IAISharedBlackboard<RestaurantCustomerBlackboardKey>>();
customerBlackboard?.SetBlackboardValue(RestaurantCustomerBlackboardKey.CurrentTargetGameObject, currentInteractable.GetInteractableGameObject());
}
// Check order type of the current interactable
@ -70,8 +70,8 @@ public override TaskStatus OnUpdate()
if (_targetOrderType == RestaurantOrderType.Busy)
{
var customerBlackboard = gameObject.GetComponent<IAISharedBlackboard>();
customerBlackboard?.SetBlackboardValue<GameObject>(nameof(RestaurantCustomerBlackboardKey.CurrentTargetGameObject), null);
var customerBlackboard = gameObject.GetComponent<IAISharedBlackboard<RestaurantCustomerBlackboardKey>>();
customerBlackboard?.SetBlackboardValue<GameObject>(RestaurantCustomerBlackboardKey.CurrentTargetGameObject, null);
}
return TaskStatus.Success;

View File

@ -16,10 +16,10 @@ public class WaitForPlayerInteraction : Action
public override void OnStart()
{
GameObject interactionTarget = null;
if (!gameObject.TryGetComponent<IAISharedBlackboard>(out var sharedBlackboard)) return;
if (!gameObject.TryGetComponent<IAISharedBlackboard<RestaurantCustomerBlackboardKey>>(out var sharedBlackboard)) return;
interactionTarget =
sharedBlackboard.GetBlackboardValue<GameObject>(
nameof(RestaurantCustomerBlackboardKey.CurrentTargetGameObject));
RestaurantCustomerBlackboardKey.CurrentTargetGameObject);
if (interactionTarget == null)
{

View File

@ -0,0 +1,54 @@
using Opsive.BehaviorDesigner.Runtime.Tasks;
using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals;
using UnityEngine;
namespace DDD.Restaurant
{
public class CheckCumulateOrderCount : Conditional
{
public enum ComparisonType
{
Less,
LessOrEqual,
Equal,
NotEqual,
Greater,
GreaterOrEqual
}
[SerializeField] private int _compareOrderCount;
[SerializeField] private ComparisonType _comparisonType;
public override TaskStatus OnUpdate()
{
var blackboard = gameObject.GetComponent<IAISharedBlackboard<RestaurantCustomerBlackboardKey>>();
if (blackboard == null)
{
Debug.LogWarning($"블랙보드가 존재하지 않음 해시코드: {gameObject.GetHashCode()}");
return TaskStatus.Failure;
}
var cumulativeOrderCount = blackboard.GetBlackboardValue<int>(RestaurantCustomerBlackboardKey.CumulativeOrderCount);
return Evaluate(cumulativeOrderCount) ? TaskStatus.Success : TaskStatus.Failure;
}
private bool Evaluate(int compareValue)
{
switch (_comparisonType)
{
case ComparisonType.Less:
return compareValue < _compareOrderCount;
case ComparisonType.LessOrEqual:
return compareValue <= _compareOrderCount;
case ComparisonType.Equal:
return compareValue == _compareOrderCount;
case ComparisonType.NotEqual:
return compareValue != _compareOrderCount;
case ComparisonType.Greater:
return compareValue > _compareOrderCount;
case ComparisonType.GreaterOrEqual:
return compareValue >= _compareOrderCount;
default:
return false;
}
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 4b3c5ee2ca89419394819e57dbab0bcd
timeCreated: 1756701161

View File

@ -1,36 +1,68 @@
using DDD.Restaurant;
using Opsive.BehaviorDesigner.Runtime;
using Opsive.GraphDesigner.Runtime.Variables;
using Sirenix.OdinInspector;
using UnityEngine;
namespace DDD
{
public class CustomerBlackboardComponent : MonoBehaviour, ICustomerBlackboard, IAISharedBlackboard
public class CustomerBlackboardComponent : MonoBehaviour, ICustomerBlackboard, IAISharedBlackboard<RestaurantCustomerBlackboardKey>
{
private BehaviorTree _behaviorTree;
[SerializeField, InlineEditor]
private CustomerBlackboardSo _blackboardSo;
public void InitializeWithBehaviorTree(BehaviorTree inBehaviorTree)
{
_behaviorTree = inBehaviorTree;
SetBlackboardValue(nameof(RestaurantCustomerBlackboardKey.SelfGameObject), gameObject);
_blackboardSo = ScriptableObject.CreateInstance<CustomerBlackboardSo>();
_blackboardSo.SetVariable(RestaurantCustomerBlackboardKey.SelfGameObject, gameObject);
if (!_behaviorTree) return;
_behaviorTree.SetVariableValue(nameof(BlackboardKey.RestaurantBlackboard), _blackboardSo);
}
public void SetCustomerData(string inCustomerDataId)
{
SetBlackboardValue(nameof(RestaurantCustomerBlackboardKey.CustomerDataId), inCustomerDataId);
_blackboardSo.SetVariable(RestaurantCustomerBlackboardKey.CustomerDataId, inCustomerDataId);
}
public void SetBlackboardValue<T>(string key, T inValue)
public void SetBlackboardValue<T>(RestaurantCustomerBlackboardKey key, T inValue)
{
if (!_behaviorTree) return;
_behaviorTree.SetVariableValue(key, inValue);
var blackboardSo =
_behaviorTree.GetVariable<CustomerBlackboardSo>(nameof(BlackboardKey.RestaurantBlackboard));
if (blackboardSo == null || blackboardSo.Value == null)
{
Debug.LogWarning($"behaviorTree에 blackboardSo가 존재하지 않음 오브젝트 해시코드: {gameObject.GetHashCode()}");
return;
}
blackboardSo.Value.SetVariable(key, inValue);
}
public T GetBlackboardValue<T>(string key)
public T GetBlackboardValue<T>(RestaurantCustomerBlackboardKey key)
{
if (!_behaviorTree) return default;
SharedVariable<T> blackboardValue = _behaviorTree.GetVariable<T>(key);
var blackboardSo =
_behaviorTree.GetVariable<CustomerBlackboardSo>(nameof(BlackboardKey.RestaurantBlackboard));
return blackboardValue != null ? blackboardValue.Value : default;
if (blackboardSo == null || blackboardSo.Value == null)
{
Debug.LogWarning($"behaviorTree에 blackboardSo가 존재하지 않음 오브젝트 해시코드: {gameObject.GetHashCode()}");
return default;
}
var value = blackboardSo.Value.GetVariable<T>(key);
return value != null ? value.Value : default;
}
private void OnDestroy()
{
if (_blackboardSo)
{
Destroy(_blackboardSo);
}
}
}
}

View File

@ -0,0 +1,12 @@
using System;
using UnityEngine;
namespace DDD.Restaurant
{
[Serializable]
public class CustomerBlackboardSo : BlackboardSo<RestaurantCustomerBlackboardKey>
{
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: b5d5fca67b054314aef1ee6f3fda2b76
timeCreated: 1756689633

View File

@ -3,9 +3,9 @@
namespace DDD.Restaurant
{
public class CustomerTimeLimiter : SharedTimeLimiter
public class CustomerTimeLimiter : SharedTimeLimiter<RestaurantCustomerBlackboardKey>
{
private IAISharedBlackboard _blackboard;
private IAISharedBlackboard<RestaurantCustomerBlackboardKey> _blackboard;
public override void OnStart()
{
base.OnStart();
@ -14,13 +14,14 @@ public override void OnStart()
{
Debug.LogError($"[{GetType().Name}] 블랙보드를 찾을 수 없습니다. 게임오브젝트 해시코드: {gameObject.GetHashCode()}");
}
_blackboard.SetBlackboardValue(_maxTimeblackboardKey, TimeLimit.Value);
}
public override TaskStatus OnUpdate()
{
if (_isBlackboardWriteEnabled && _blackboard != null)
{
_blackboard.SetBlackboardValue(_blackboardKey, Time.time - _startTime);
_blackboard.SetBlackboardValue(_remainTimeblackboardKey, TimeLimit.Value - (Time.time - _startTime));
}
return base.OnUpdate();

View File

@ -12,8 +12,9 @@ public enum CarriableType
public interface ICarrier
{
GameObject GetCarrierGameObject();
string GetCarrierId();
string GetCurrentCarriableId();
ICarriable GetCurrentCarriable();
bool IsCarrying();
bool CanCarryTo(ICarriable carriable);
void Carry(ICarriable carriable);
void Use(ICarriable carriable);
@ -21,7 +22,7 @@ public interface ICarrier
public interface ICarriable
{
string GetCarrierId();
string GetId();
CarriableType GetCarriableType();
void OnCarried(ICarrier carrier);
bool CanCarry();
@ -40,9 +41,9 @@ public GameObject GetCarrierGameObject()
return gameObject;
}
public string GetCarrierId()
public string GetCurrentCarriableId()
{
return _currentCarriable.GetCarrierId();
return _currentCarriable.GetId();
}
public ICarriable GetCurrentCarriable()
@ -50,6 +51,11 @@ public ICarriable GetCurrentCarriable()
return _currentCarriable;
}
public bool IsCarrying()
{
return GetCurrentCarriable() != null;
}
public bool CanCarryTo(ICarriable carriable)
{
if (_currentCarriable != null) return false;
@ -65,7 +71,7 @@ public void Carry(ICarriable carriable)
_currentCarriable.OnCarried(this);
_speechBubble ??= GetComponentInChildren<ISpeechBubble>();
_speechBubble?.Show(_currentCarriable.GetCarrierId());
_speechBubble?.Show(_currentCarriable.GetId());
}
public void Use(ICarriable carriable)

View File

@ -2,13 +2,19 @@
namespace DDD
{
public enum BlackboardKey
{
RestaurantBlackboard,
}
public enum RestaurantCustomerBlackboardKey
{
SelfGameObject,
CustomerDataId,
CurrentTargetGameObject,
SatisfactionLevel,
OrderCount,
CumulativeOrderCount,
MaxPatienceTime,
RemainingPatienceTime
}
public interface ICustomerBlackboard

View File

@ -60,6 +60,7 @@ public bool TryMoveToPosition(Vector3 position)
_iAstarAi.destination = position;
PlayMove();
_iAstarAi.SearchPath();
return true;
}
@ -96,7 +97,7 @@ public bool TryTeleportToPosition(Vector3 position)
public bool HasReachedDestination()
{
return _iAstarAi.pathPending == false && _iAstarAi.reachedEndOfPath;
return _iAstarAi.pathPending == false && _iAstarAi.reachedDestination;
}
public bool IsPositionMovable(Vector3 endPosition)

View File

@ -2,6 +2,7 @@
namespace DDD.Restaurant
{
[RequireComponent(typeof(CharacterCarrier))]
[RequireComponent(typeof(PlayerMovement))]
public class PlayerCharacter : RestaurantCharacter
{

View File

@ -2,7 +2,7 @@
using UnityEngine;
using UnityEngine.Serialization;
namespace DDD
namespace DDD.Restaurant
{
public enum RestaurantOrderType : uint
{
@ -19,9 +19,22 @@ public class RestaurantOrderObjectState
public GameObject Customer;
public GameObject Worker;
public string RecipeId;
public string FoodId;
public string ServedFoodId;
}
public class RestaurantOrderInterrupt : IEvent
{
public GameObject Table;
public RestaurantOrderObjectState OrderObject;
public RestaurantOrderType TransitionType;
}
// RestaurantOrderInterrupt 이벤트 ? OrderObject, Worker는 여기에 등록해두기. Customer가 이벤트 호출
// InterruptResult - Clean, Dirty?
public interface IRestaurantOrderObject
{
void TransitionToNextPhase();
@ -31,7 +44,7 @@ public interface IRestaurantOrderObject
// TODO : 도중에 이탈할 경우, 순차적으로 다음 페이즈로 넘어가는 게 아니라 바로 Wait, Dirty로 전이시킬 필요가 있음
public class InteractionSubsystem_Order : MonoBehaviour, IInteractionSubsystemObject<RestaurantOrderType>, IRestaurantOrderObject
public class InteractionSubsystem_Order : MonoBehaviour, IInteractionSubsystemObject<RestaurantOrderType>, IRestaurantOrderObject, IEventHandler<RestaurantOrderInterrupt>
{
[SerializeField] private RestaurantOrderType _currentRestaurantOrderType = RestaurantOrderType.Wait;
[SerializeField] private RestaurantOrderObjectState _orderObjectState = new();
@ -80,6 +93,7 @@ public ScriptableObject GetPayload()
public void InitializeSubsystem()
{
EventBus.Register(this);
}
public RestaurantOrderType GetInteractionSubsystemType()
@ -110,5 +124,17 @@ public bool CanTransitionToNextPhase()
{
return true;
}
public void HandleEvent(RestaurantOrderInterrupt evt)
{
if (evt.Table != gameObject) return;
Debug.Log($"Order Interrupt : {evt.TransitionType}, Current State : {GetInteractionSubsystemType()}");
SetInteractionSubsystemType(evt.TransitionType);
}
private void OnDestroy()
{
EventBus.Unregister(this);
}
}
}

View File

@ -95,11 +95,16 @@ public void RegisterHighlightProxy(GameObject highlightProxyObject)
{
var highlightProxy = highlightProxyObject.GetComponent<HighlightEffect>();
_highlightProxy = highlightProxy;
_highlightProxy.enabled = true;
ApplyHighlightSettings(highlightProxy);
}
public void ClearHighlightProxy()
{
if (_highlightProxy)
{
_highlightProxy.enabled = false;
}
_highlightProxy = null;
}

View File

@ -1,15 +0,0 @@
using UnityEngine;
namespace DDD.Restaurant
{
//public class RestaurantEnvironmentPointQueryEvent : RestaurantEventBase<PointType>
//{
// protected override bool EventSolve(GameObject causer, GameObject target, PointType eventType, ScriptableObject payload)
// {
// if (!target.TryGetComponent(out IEnvironmentPointProvider provider)) return false;
// if (!provider.IsSupportsType(eventType)) return false;
//
// return true;
// }
//}
}

View File

@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 17b28cfc7a5a4d43a050d247e22004dc
timeCreated: 1756453073

View File

@ -24,30 +24,20 @@ public class RestaurantInteractionEvent : RestaurantEventBase<InteractionType>
protected override bool EventSolve(GameObject causer, GameObject target, InteractionType interactionType,
ScriptableObject payload)
{
IInteractor interactor = causer.GetComponent<IInteractor>();
if (interactor != null && interactor.CanSolveInteractionType(interactionType))
{
if (interactor.FetchSolverTypeForInteraction(interactionType, out var solverType))
{
var interactor = causer.GetComponent<IInteractor>();
if (interactor == null || !interactor.CanSolveInteractionType(interactionType)) return false;
if (!interactor.FetchSolverTypeForInteraction(interactionType, out var solverType)) return false;
// Solve event directly. 이벤트 처리는 여기서 하고, 이벤트 호출로는 이런 이벤트가 호출되었고 결과가 어떻다는 거 전파하는 식으로.
if (solverType != null)
{
IInteractionSolver solver = causer.GetComponent(solverType) as IInteractionSolver;
IInteractable interactable = target.GetComponent<IInteractable>();
if (solverType == null) return false;
var solver = causer.GetComponent(solverType) as IInteractionSolver;
var interactable = target.GetComponent<IInteractable>();
if (solver is not null)
{
bool canExecute = solver.CanExecuteInteraction(interactor, interactable, payload);
return canExecute && solver.ExecuteInteraction(interactor, interactable, payload);
}
else
{
// Should not reach here!
Debug.Assert(false, "Solver Component or Interactor is null");
}
}
}
}
Debug.Assert(false, "Solver Component or Interactor is null");
return false;
}
}

View File

@ -15,7 +15,8 @@ public string MenuId
public class RestaurantOrderEvent : IEvent
{
public string RecipeId;
public RestaurantOrderObjectState OrderObjectState;
public RestaurantOrderType OrderPhase;
}
public class RestaurantOrderSolver_Order : RestaurantOrderSolverBase
@ -27,30 +28,37 @@ public override bool ExecuteInteractionSubsystem(IInteractor interactor, IIntera
var highlightComponent = highlightObject?.GetComponent<IInteractionHighlight>();
highlightComponent?.ClearHighlightProxy();
// Worker takes the order
var orderObject = GetRestaurantOrderObject(interactable);
if (orderObject != null)
{
orderObject.GetOrderObjectState().Worker = interactor.GetInteractorGameObject();
}
// Pick random menu from today's menu list
var foodCandidates = RestaurantState.Instance.ManagementState.GetTodayFoodMenus();
if (foodCandidates == null || foodCandidates.Count == 0)
var recipeCandidates = RestaurantState.Instance.ManagementState.GetTodayRecipes();
if (recipeCandidates == null || recipeCandidates.Count == 0)
{
Debug.LogError("[RestaurantOrderSolver_Order] No food menu found");
return false;
}
// TODO : 손님 데이터를 바탕으로 선호하는 음식을 골라야 할수도 있음. interactable에서 직접 가져오거나 payload로 전달받아야 함. payload를 받을 경우 RestaurantOrderMenuPayload와 통합해야함
var foodMenu = foodCandidates[Random.Range(0, foodCandidates.Count)];
var recipeMenu = recipeCandidates[Random.Range(0, recipeCandidates.Count)];
// Worker takes the order
var orderObject = GetRestaurantOrderObject(interactable);
if (orderObject != null)
{
orderObject.GetOrderObjectState().Worker = interactor.GetInteractorGameObject();
orderObject.GetOrderObjectState().RecipeId = recipeMenu;
var recipeData = DataManager.Instance.GetDataAsset<RecipeDataAsset>();
recipeData.TryGetDataById(recipeMenu, out var recipeDataEntry);
orderObject.GetOrderObjectState().FoodId = recipeDataEntry?.RecipeResult;
}
// Create payload and set the menu
RestaurantOrderMenuPayload orderPayload = ScriptableObject.CreateInstance<RestaurantOrderMenuPayload>();
orderPayload.MenuId = foodMenu;
orderPayload.MenuId = recipeMenu;
RestaurantOrderEvent evt = new RestaurantOrderEvent();
evt.RecipeId = foodMenu;
RestaurantOrderEvent evt = new RestaurantOrderEvent
{
OrderObjectState = orderObject?.GetOrderObjectState()
, OrderPhase = RestaurantOrderType.Order
};
EventBus.Broadcast(evt);
return base.ExecuteInteractionSubsystem(interactor, interactable, payload);

View File

@ -6,11 +6,40 @@ public class RestaurantOrderSolver_Serve : RestaurantOrderSolverBase
{
public override bool ExecuteInteractionSubsystem(IInteractor interactor, IInteractable interactable, ScriptableObject payload = null)
{
return base.ExecuteInteractionSubsystem(interactor, interactable, payload);
var carrier = interactor?.GetInteractorGameObject()?.GetComponent<ICarrier>();
if(carrier == null) return false;
var orderObject = GetRestaurantOrderObject(interactable);
if(orderObject == null) return false;
if(carrier.GetCurrentCarriable() == null) return false;
string carriedFoodId = carrier.GetCurrentCarriableId();
orderObject.GetOrderObjectState().ServedFoodId = carriedFoodId;
bool result = base.ExecuteInteractionSubsystem(interactor, interactable, payload);
// ExecuteInteractionSubsystem 이후에 음식 제거 - 미리 제거하면 CanExecute 통과 못 함
carrier.Use(carrier.GetCurrentCarriable());
// OnFoodServed (Consume Bill Hud item)
RestaurantOrderEvent evt = new RestaurantOrderEvent
{
OrderObjectState = orderObject?.GetOrderObjectState()
, OrderPhase = RestaurantOrderType.Serve
};
EventBus.Broadcast(evt);
return result;
}
public override bool CanExecuteInteractionSubsystem(IInteractor interactor = null, IInteractable interactable = null, ScriptableObject payload = null)
{
// Does interactor carry any food?
var carrier = interactor?.GetInteractorGameObject()?.GetComponent<ICarrier>();
if (carrier != null)
{
return carrier.IsCarrying();
}
return false;
}
}

View File

@ -63,12 +63,12 @@ public bool HasMatchedMenuWithCookware()
return _cookwareToRecipeMapping.Values.Any(recipeSet => recipeSet.Count > 0);
}
public List<string> GetTodayFoodMenus()
public List<string> GetTodayRecipes()
{
return _todayFoodRecipeAndAmounts.Keys.ToList();
}
public int GetTodayFoodAvailableCount(string recipeId)
public int GetTodayRecipeAvailableCount(string recipeId)
{
return _todayFoodRecipeAndAmounts.GetValueOrDefault(recipeId, 0);
}

View File

@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
@ -8,6 +9,7 @@ public class BillHud : MonoBehaviour, IEventHandler<RestaurantOrderEvent>
{
[SerializeField] private RectTransform _billItemsLayoutTransform;
[SerializeField] private GameObject _billItemPrefab;
private readonly Dictionary<GameObject, GameObject> _billItemMap = new();
private void Start()
{
@ -18,12 +20,23 @@ private void Start()
public void HandleEvent(RestaurantOrderEvent evt)
{
var billItem = Instantiate(_billItemPrefab, _billItemsLayoutTransform);
var recipeData = DataManager.Instance.GetDataAsset<RecipeDataAsset>();
if (recipeData.TryGetDataById(evt.RecipeId, out var recipeDataEntry))
if (evt.OrderPhase == RestaurantOrderType.Order)
{
var sprite = DataManager.Instance.GetSprite(recipeDataEntry.RecipeResult);
var orderState = evt.OrderObjectState;
if (orderState == null) return;
var billItem = Instantiate(_billItemPrefab, _billItemsLayoutTransform);
var sprite = DataManager.Instance.GetSprite(orderState.FoodId);
billItem.GetComponent<Image>().sprite = sprite;
_billItemMap[orderState.Customer] = billItem;
}
else if (evt.OrderPhase == RestaurantOrderType.Serve)
{
// Find bill item by customer from _billItemMap, then destroy it.
if (_billItemMap.TryGetValue(evt.OrderObjectState.Customer, out var billItem))
{
Destroy(billItem);
_billItemMap.Remove(evt.OrderObjectState.Customer);
}
}
}
}

View File

@ -7,12 +7,12 @@ namespace DDD.Restaurant
{
public abstract class PropUiDisplayComponent<T> : SerializedMonoBehaviour where T : Enum
{
[SerializeField]
protected Vector3 _offset = new Vector3(0.0f, 0.75f, 0.675f);
[SerializeField]
protected Vector3 _rotation = new Vector3(40.0f, 0, 0);
private IInteractionSubsystemObject<T> _interactionSubsystemObject;
private Dictionary<T, Material> _materialDictionary;
[SerializeField]
protected Sprite _defaultSprite;
protected IInteractionSubsystemObject<T> _interactionSubsystemObject;
private Dictionary<T, Material> _internalMaterials;
private T _currentInteractionType;
protected IInteractable _interactable;
protected SpriteRenderer _spriteRenderer;
@ -22,7 +22,7 @@ private void Awake()
Initialize();
}
protected abstract Dictionary<T, Material> SetMaterialDictionary();
protected abstract Dictionary<T, Material> GetInteractionDisplayMaterials();
protected virtual void Initialize()
{
@ -33,18 +33,25 @@ protected virtual void Initialize()
return;
}
// TODO: 임시 나중에 제대로 수정할 것
var uiGameObject = Instantiate(new GameObject("TemporaryUi"), transform);
_spriteTransform = uiGameObject.transform;
uiGameObject.layer = LayerMask.NameToLayer("WorldUI");
UpdateSpriteTransform();
var uiGameObject = Instantiate(new GameObject("PropWorldUi"), transform);
_spriteRenderer = uiGameObject.AddComponent<SpriteRenderer>();
UpdateSprite();
_spriteRenderer.enabled = false;
_materialDictionary = SetMaterialDictionary();
_spriteTransform = uiGameObject.transform;
uiGameObject.layer = GetDisplayLayer();
UpdateSpriteTransform();
_internalMaterials = GetInteractionDisplayMaterials();
}
private void UpdateSpriteTransform()
private void UpdateSprite()
{
_spriteRenderer.sprite = GetDisplaySprite();
}
protected virtual void UpdateSpriteTransform()
{
_spriteTransform.position = GetDisplayPosition();
_spriteTransform.rotation = Quaternion.Euler(GetDisplayRotation());
@ -57,9 +64,19 @@ private bool GetOwnerInteractable(out IInteractable interactable)
return isInteractionSubsystem;
}
protected virtual int GetDisplayLayer()
{
return LayerMask.NameToLayer(LayerConstants.WorldUi);
}
protected virtual Sprite GetDisplaySprite()
{
return _defaultSprite;
}
protected virtual Vector3 GetDisplayPosition()
{
return transform.position + _offset;
return transform.position;
}
protected virtual Vector3 GetDisplayRotation()
@ -87,25 +104,35 @@ public void SetCurrentInteractionType(T interactionType)
private void UpdateView(T state)
{
if (UpdateSpriteMaterial(state))
if (!UpdateSpriteMaterial(state))
{
return;
}
UpdateSprite();
UpdateSpriteTransform();
}
virtual protected Color GetSpriteColor()
{
return Color.white;
}
private bool UpdateSpriteMaterial(T state)
{
if (!_materialDictionary.TryGetValue(state, out var material) || material == null)
if (!_internalMaterials.TryGetValue(state, out var material) || material == null)
{
// TODO 캔버스 다운
_spriteRenderer.enabled = false;
return true;
return false;
}
// material.color = Color.white;
_spriteRenderer.color = GetSpriteColor();
// ui 머티리얼 교체
_spriteRenderer.enabled = true;
_spriteRenderer.material = material;
return false;
_spriteTransform.gameObject.layer = GetDisplayLayer();
return true;
}
}
}

View File

@ -2,6 +2,7 @@
using UnityEngine;
using Sirenix.OdinInspector;
using Sirenix.Serialization;
using UnityEngine.Serialization;
namespace DDD.Restaurant
@ -9,12 +10,16 @@ namespace DDD.Restaurant
public class RestaurantUiDisplayComponent : PropUiDisplayComponent<RestaurantOrderType>
{
[SerializeField]
private Sprite _temporarySprite;
protected Vector3 _offset = new Vector3(0.0f, 0.75f, 0.675f);
[SerializeField]
private Vector2 _fixedSpriteSize = new Vector2(.2f, .2f);
protected Vector3 _disabledOffset = new Vector3(0.0f, 0.2f, 0.165f);
[SerializeField]
private Vector2 _fixedLocalScale = new Vector2(.2f, .2f);
[SerializeField]
private Color _disabledColor = new Color(Color.darkGray.r, Color.darkGray.g, Color.darkGray.b, 0.5f);
[OdinSerialize]
private Dictionary<RestaurantOrderType, Material> _materialDictionary = new();
protected override Dictionary<RestaurantOrderType, Material> SetMaterialDictionary()
protected override Dictionary<RestaurantOrderType, Material> GetInteractionDisplayMaterials()
{
return _materialDictionary;
}
@ -22,8 +27,41 @@ protected override Dictionary<RestaurantOrderType, Material> SetMaterialDictiona
protected override void Initialize()
{
base.Initialize();
_spriteRenderer.sprite = _temporarySprite;
_spriteRenderer.transform.localScale = _fixedSpriteSize;
}
protected override void UpdateSpriteTransform()
{
base.UpdateSpriteTransform();
_spriteRenderer.transform.localScale = _fixedLocalScale;
}
protected override Sprite GetDisplaySprite()
{
if (_interactionSubsystemObject == null)
return base.GetDisplaySprite();
if (GetCurrentInteractionType() == RestaurantOrderType.Serve ||
GetCurrentInteractionType() == RestaurantOrderType.Busy)
{
// Sprite by current restaurant order type. get from RestaurantOrderObject.
if (_interactionSubsystemObject is IRestaurantOrderObject orderObject)
{
string foodId = orderObject.GetOrderObjectState().FoodId;
Debug.Assert(foodId != null, nameof(foodId) + " != null");
var sprite = DataManager.Instance.GetSprite(foodId);
return sprite;
}
}
return base.GetDisplaySprite();
}
protected override Color GetSpriteColor()
{
if (GetCurrentInteractionType() == RestaurantOrderType.Serve)
{
return _disabledColor;
}
return base.GetSpriteColor();
}
protected override Vector3 GetDisplayPosition()
@ -31,18 +69,27 @@ protected override Vector3 GetDisplayPosition()
if (GetCurrentInteractionType() == RestaurantOrderType.Order)
{
// Find interaction points from interactable owner
if (_interactable == null)
{
return base.GetDisplayPosition();
}
var points = _interactable.GetInteractionPoints();
var points = _interactable?.GetInteractionPoints();
if (points is { Length: > 0 })
{
return points[0] + _offset;
}
}
return base.GetDisplayPosition();
return transform.position + _disabledOffset;
}
protected override int GetDisplayLayer()
{
if (GetCurrentInteractionType() != RestaurantOrderType.Serve &&
GetCurrentInteractionType() != RestaurantOrderType.Busy)
{
return LayerMask.NameToLayer(LayerConstants.Prop);
}
else
{
return LayerMask.NameToLayer(LayerConstants.WorldUi);
}
return base.GetDisplayLayer();
}
}
}

View File

@ -0,0 +1,94 @@
using System.Collections.Generic;
using Sirenix.OdinInspector;
using Sirenix.Serialization;
using UnityEngine;
using UnityEngine.UI;
namespace DDD.Restaurant
{
public class CustomerPatienceUiComponent : SerializedMonoBehaviour
{
private IAISharedBlackboard<RestaurantCustomerBlackboardKey> _blackboard;
[OdinSerialize] private HashSet<RestaurantOrderType> _targetOrderType = new();
[SerializeField] private RestaurantOrderType _currentOrderType;
[SerializeField] private RestaurantOrderType _prevOrderType;
private bool _initialized;
private IInteractionSubsystemObject<RestaurantOrderType> _subsystem;
[SerializeField] private Slider _patienceSlider;
private void Start()
{
var canvas = GetComponentInChildren<Canvas>();
canvas.worldCamera = Camera.main;
_patienceSlider = GetComponentInChildren<Slider>();
if (_patienceSlider == null)
{
Debug.LogWarning($"[{GetType().Name}] 슬라이더가 존재하지 않음 오브젝트 해시코드: {gameObject.GetHashCode()}");
return;
}
if (!TryGetComponent(out _blackboard))
{
Debug.LogWarning($"[{GetType().Name}] 블랙보드가 존재하지 않음 오브젝트 해시코드: {gameObject.GetHashCode()}");
return;
}
var targetObject = _blackboard.GetBlackboardValue<GameObject>(RestaurantCustomerBlackboardKey.CurrentTargetGameObject);
if (targetObject == null)
{
Debug.LogWarning($"[{GetType().Name}] 타겟 오브젝트가 존재하지 않음 오브젝트 해시코드: {gameObject.GetHashCode()}");
return;
}
if (!targetObject.TryGetComponent<IInteractionSubsystemOwner>(out var subsystemOwner))
{
Debug.LogWarning($"[{GetType().Name}] 서브시스템 오너가 존재하지 않음 오브젝트 해시코드: {gameObject.GetHashCode()}");
return;
}
subsystemOwner.TryGetSubsystemObject(out _subsystem);
if (_subsystem == null)
{
Debug.LogWarning($"[{GetType().Name}] RestaurantOrderType 서브시스템이 존재하지 않음 오브젝트 해시코드: {gameObject.GetHashCode()}");
return;
}
_currentOrderType = _subsystem.GetInteractionSubsystemType();
_initialized = true;
_patienceSlider.enabled = false;
}
private void Update()
{
if (!_initialized) return;
_currentOrderType = _subsystem.GetInteractionSubsystemType();
if (!_targetOrderType.Contains(_currentOrderType))
{
_patienceSlider.enabled = false;
return;
}
if (_currentOrderType != _prevOrderType)
{
SetPatience();
}
_patienceSlider.value = _blackboard.GetBlackboardValue<float>(RestaurantCustomerBlackboardKey.RemainingPatienceTime);
if (_patienceSlider.value <= 0)
{
_patienceSlider.enabled = false;
}
}
private void SetPatience()
{
_prevOrderType = _currentOrderType;
_patienceSlider.maxValue = _blackboard.GetBlackboardValue<float>(RestaurantCustomerBlackboardKey.MaxPatienceTime);
_patienceSlider.value = _patienceSlider.maxValue;
_patienceSlider.enabled = true;
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: e509fdc10cff4d3487080f126f32544f
timeCreated: 1756711651

View File

@ -44,4 +44,10 @@ public static class SpriteConstants
public const string EmptyFoodSpriteKey = "EmptyFood";
public const string EmptyWorker = "EmptyWorker";
}
public static class LayerConstants
{
public const string Prop = "Prop";
public const string WorldUi = "WorldUI";
}
}