Compare commits

...

3 Commits

Author SHA1 Message Date
NTG_Lenovo
6d08ec9252 조리 도구 탭 작업 중 2025-07-30 19:38:12 +09:00
NTG_Lenovo
cbc1d6982d DataManager 로직 변경 및 구글 시트 데이터 최신화 2025-07-30 18:42:33 +09:00
NTG_Lenovo
0c6ec55470 파일 정리 2025-07-30 16:46:11 +09:00
49 changed files with 9696 additions and 247 deletions

View File

@ -27,6 +27,12 @@ MonoBehaviour:
m_SerializedLabels:
- GoogleSheetSo
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 5c7c87af5db0e884eb3b979cb1d2188b
m_Address: CookwareDataSo
m_ReadOnly: 0
m_SerializedLabels:
- GoogleSheetSo
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 7446495d3106eff4ab5b0f9d7d97b579
m_Address: DrinkDataSo
m_ReadOnly: 0

View File

@ -12,7 +12,8 @@ SpriteAtlasAsset:
m_ImporterData:
packables:
- {fileID: -502432213, guid: f6859731666dd444a9c3bc04005ac3fa, type: 3}
- {fileID: -975732387, guid: 0b80400f6a609d6489f9da53bc2438c7, type: 3}
- {fileID: 141783083, guid: acadfd472bff2194fb213497cdc62d66, type: 3}
- {fileID: 825273812, guid: bcb8eb887f2d0814d9faa440dd50bce4, type: 3}
- {fileID: -975732387, guid: 0b80400f6a609d6489f9da53bc2438c7, type: 3}
m_IsVariant: 0
m_ScriptablePacker: {fileID: 0}

View File

@ -4220,11 +4220,11 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 6289760680591803305, guid: 05aeb8078f8dc7c489b71a0ce5bc4fac, type: 3}
propertyPath: _currentVersion
value: "4 - 2025-07-28 18:14:02 by \uB0A8\uD0DC\uAC74"
value: "6 - 2025-07-30 16:48:31 by \uB0A8\uD0DC\uAC74"
objectReference: {fileID: 0}
- target: {fileID: 6289760680591803305, guid: 05aeb8078f8dc7c489b71a0ce5bc4fac, type: 3}
propertyPath: _refreshTrigger
value: 1
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []

Binary file not shown.

View File

@ -0,0 +1,168 @@
fileFormatVersion: 2
guid: acadfd472bff2194fb213497cdc62d66
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 2
spriteExtrude: 2
spriteMeshType: 0
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: WindowsStoreApps
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: CookwareDetailPanel
rect:
serializedVersion: 2
x: 0
y: 117
width: 512
height: 234
alignment: 0
pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 70a27c0e626941b4ba70d935160ae374
internalID: 141783083
vertices: []
indices:
edges: []
weights: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries:
- key: SpriteEditor.SliceSettings
value: '{"sliceOnImport":false,"gridCellCount":{"x":1.0,"y":1.0},"gridSpriteSize":{"x":64.0,"y":64.0},"gridSpriteOffset":{"x":0.0,"y":0.0},"gridSpritePadding":{"x":0.0,"y":0.0},"pivot":{"x":0.0,"y":0.0},"autoSlicingMethod":0,"spriteAlignment":0,"slicingType":0,"keepEmptyRects":false,"isAlternate":false}'
nameFileIdTable:
CookwareDetailPanel: 141783083
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -123,7 +123,7 @@ TextureImporter:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: NotCookwarePanel
name: IngredientDetailPanel
rect:
serializedVersion: 2
x: 0
@ -160,7 +160,7 @@ TextureImporter:
- key: SpriteEditor.SliceSettings
value: '{"sliceOnImport":false,"gridCellCount":{"x":1.0,"y":1.0},"gridSpriteSize":{"x":64.0,"y":64.0},"gridSpriteOffset":{"x":0.0,"y":0.0},"gridSpritePadding":{"x":0.0,"y":0.0},"pivot":{"x":0.0,"y":0.0},"autoSlicingMethod":0,"spriteAlignment":0,"slicingType":0,"keepEmptyRects":false,"isAlternate":false}'
nameFileIdTable:
NotCookwarePanel: 825273812
IngredientDetailPanel: 825273812
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData: processed

View File

@ -136,7 +136,7 @@ TextureImporter:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: CookwarePanel
name: RecipeDetailPanel
rect:
serializedVersion: 2
x: 0
@ -173,7 +173,7 @@ TextureImporter:
- key: SpriteEditor.SliceSettings
value: '{"sliceOnImport":false,"gridCellCount":{"x":1.0,"y":1.0},"gridSpriteSize":{"x":64.0,"y":64.0},"gridSpriteOffset":{"x":0.0,"y":0.0},"gridSpritePadding":{"x":0.0,"y":0.0},"pivot":{"x":0.0,"y":0.0},"autoSlicingMethod":0,"spriteAlignment":0,"slicingType":0,"keepEmptyRects":false,"isAlternate":false}'
nameFileIdTable:
CookwarePanel: -975732387
RecipeDetailPanel: -975732387
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData: processed

View File

@ -53,6 +53,7 @@ MonoBehaviour:
- RecipeData
- FoodData
- DrinkData
- CookwareData
- IngredientData
- TasteData
- EnvironmentData

File diff suppressed because it is too large Load Diff

View File

@ -1,15 +0,0 @@
%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: 1d847e6c76ebcd640894fa0023b6ce7c, type: 3}
m_Name: SelectCookwareTabUi_TabUiConfigSo
m_EditorClassIdentifier:
DisplayNameKey: Test002

View File

@ -1,15 +0,0 @@
%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: 1d847e6c76ebcd640894fa0023b6ce7c, type: 3}
m_Name: SelectMenuTabUi_TabUiConfigSo
m_EditorClassIdentifier:
DisplayNameKey: Test001

View File

@ -1,15 +0,0 @@
%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: 1d847e6c76ebcd640894fa0023b6ce7c, type: 3}
m_Name: SelectWorkerTabUi_TabUiConfigSo
m_EditorClassIdentifier:
DisplayNameKey: Test003

View File

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

View File

@ -8,17 +8,10 @@ namespace DDD
{
public class DataManager : Singleton<DataManager>, IManager
{
public ItemDataSo ItemDataSo { get; private set; }
public RecipeDataSo RecipeDataSo { get; private set; }
public FoodDataSo FoodDataSo { get; private set; }
public DrinkDataSo DrinkDataSo { get; private set; }
public IngredientDataSo IngredientDataSo { get; private set; }
public TasteDataSo TasteDataSo { get; private set; }
public EnvironmentDataSo EnvironmentDataSo { get; private set; }
private readonly Dictionary<Type, ScriptableObject> _dataSoTable = new();
private Dictionary<string, Sprite> _spriteAtlas;
public bool IsInitialized { get; private set; }
private const string SoLabel = "GoogleSheetSo";
public void PreInit()
{
@ -27,14 +20,30 @@ public void PreInit()
public async Task Init()
{
ItemDataSo = await AssetManager.LoadAsset<ItemDataSo>(DataConstants.ItemDataSo);
RecipeDataSo = await AssetManager.LoadAsset<RecipeDataSo>(DataConstants.RecipeDataSo);
FoodDataSo = await AssetManager.LoadAsset<FoodDataSo>(DataConstants.FoodDataSo);
DrinkDataSo = await AssetManager.LoadAsset<DrinkDataSo>(DataConstants.DrinkDataSo);
IngredientDataSo = await AssetManager.LoadAsset<IngredientDataSo>(DataConstants.IngredientDataSo);
TasteDataSo = await AssetManager.LoadAsset<TasteDataSo>(DataConstants.TasteDataSo);
EnvironmentDataSo = await AssetManager.LoadAsset<EnvironmentDataSo>(DataConstants.EnvironmentDataSo);
await LoadAllGameDataSo();
await LoadSpriteAtlas();
}
public void PostInit()
{
}
private async Task LoadAllGameDataSo()
{
var soList = await AssetManager.LoadAssetsByLabel<ScriptableObject>(SoLabel);
foreach (var so in soList)
{
var type = so.GetType();
_dataSoTable.TryAdd(type, so);
}
Debug.Log($"[DataManager] {_dataSoTable.Count}개의 SO가 로드되었습니다.");
}
private async Task LoadSpriteAtlas()
{
List<SpriteAtlas> spriteAtlases = await AssetManager.LoadAssetsByLabel<SpriteAtlas>(DataConstants.AtlasLabel);
_spriteAtlas = new Dictionary<string, Sprite>(spriteAtlases.Count);
@ -56,21 +65,17 @@ public async Task Init()
_spriteAtlas.TryAdd(key, sprite);
}
}
IsInitialized = true;
}
public void PostInit()
public T GetDataSo<T>() where T : ScriptableObject
{
}
public async Task WaitUntilInitialized()
{
while (!IsInitialized)
if (_dataSoTable.TryGetValue(typeof(T), out var so))
{
await Task.Yield();
return so as T;
}
Debug.LogError($"[DataManager] {typeof(T).Name} SO를 찾을 수 없습니다.");
return null;
}
public Sprite GetSprite(string key) => _spriteAtlas.GetValueOrDefault(key);

View File

@ -38,7 +38,7 @@ public void PostInit()
private void InitializeItemData()
{
var itemDataSo = DataManager.Instance.ItemDataSo;
var itemDataSo = DataManager.Instance.GetDataSo<ItemDataSo>();
Debug.Assert(itemDataSo != null, "itemDataSo != null");
_itemDataLookup = itemDataSo.GetDataList()

View File

@ -9,6 +9,10 @@ namespace DDD
[CreateAssetMenu(fileName = "RestaurantManagementSo", menuName = "GameState/RestaurantManagementSo")]
public class RestaurantManagementSo : GameFlowTask
{
// TODO : 체크리스트 기능
// TODO : 조리도구 등록, 해제 기능
public ItemSlotUi ItemSlotUiPrefab;
[Title("선택된 메뉴 상세 내용")]
@ -40,7 +44,7 @@ public bool TryAddTodayMenu(ItemSlotUi itemSlotUi)
if (itemSlotUi.Model.ItemType != ItemType.Recipe) return false;
if (!DataManager.Instance.RecipeDataSo.TryGetDataById(recipeId, out RecipeData recipeData)) return false;
if (!DataManager.Instance.GetDataSo<RecipeDataSo>().TryGetDataById(recipeId, out RecipeData recipeData)) return false;
bool added = false;
@ -48,7 +52,7 @@ public bool TryAddTodayMenu(ItemSlotUi itemSlotUi)
{
if (_foodRecipeIds.Count >= MaxFoodCount || _foodRecipeIds.ContainsKey(recipeId)) return false;
var foodData = DataManager.Instance.FoodDataSo.GetDataById(recipeData.RecipeResult);
var foodData = DataManager.Instance.GetDataSo<FoodDataSo>().GetDataById(recipeData.RecipeResult);
var craftableCount = foodData.GetCraftableCount();
foodData.ConsumeAllCraftableIngredients();
@ -59,7 +63,7 @@ public bool TryAddTodayMenu(ItemSlotUi itemSlotUi)
{
if (_drinkRecipeIds.Count >= MaxDrinkCount || _drinkRecipeIds.ContainsKey(recipeId)) return false;
var drinkData = DataManager.Instance.DrinkDataSo.GetDataById(recipeData.RecipeResult);
var drinkData = DataManager.Instance.GetDataSo<DrinkDataSo>().GetDataById(recipeData.RecipeResult);
var craftableCount = drinkData.GetCraftableCount();
drinkData.ConsumeAllCraftableIngredients();
@ -80,7 +84,7 @@ public bool TryRemoveTodayMenu(ItemSlotUi itemSlotUi)
string recipeId = itemSlotUi.Model.Id;
var evt = RestaurantEvents.TodayMenuRemovedEvent;
if (!DataManager.Instance.RecipeDataSo.TryGetDataById(recipeId, out RecipeData recipeData)) return false;
if (!DataManager.Instance.GetDataSo<RecipeDataSo>().TryGetDataById(recipeId, out RecipeData recipeData)) return false;
bool removed = false;
int refundCount = 0;
@ -94,7 +98,7 @@ public bool TryRemoveTodayMenu(ItemSlotUi itemSlotUi)
if (removed)
{
var foodData = DataManager.Instance.FoodDataSo.GetDataById(recipeData.RecipeResult);
var foodData = DataManager.Instance.GetDataSo<FoodDataSo>().GetDataById(recipeData.RecipeResult);
foodData.RefundIngredients(refundCount);
}
}
@ -108,7 +112,7 @@ public bool TryRemoveTodayMenu(ItemSlotUi itemSlotUi)
if (removed)
{
var drinkData = DataManager.Instance.DrinkDataSo.GetDataById(recipeData.RecipeResult);
var drinkData = DataManager.Instance.GetDataSo<DrinkDataSo>().GetDataById(recipeData.RecipeResult);
drinkData.RefundIngredients(refundCount);
}
}

View File

@ -47,10 +47,10 @@ private void RemoveItem()
private IEnumerable<string> GetItemIds()
{
if (!Application.isPlaying || DataManager.Instance?.ItemDataSo == null)
if (!Application.isPlaying || DataManager.Instance?.GetDataSo<ItemDataSo>() == null)
return Enumerable.Empty<string>();
return DataManager.Instance.ItemDataSo.GetDataList()
return DataManager.Instance.GetDataSo<ItemDataSo>().GetDataList()
.Select(data => data.Id)
.Where(id => !string.IsNullOrEmpty(id));
}

View File

@ -15,7 +15,7 @@ public static List<IngredientEntry> GetIngredients(this DrinkData data)
public static List<TasteData> GetTasteDatas(this DrinkData data)
=> CraftingHelper.ResolveTasteDatas(
new[] { data.TasteKey1, data.TasteKey2, data.TasteKey3, data.TasteKey4, data.TasteKey5, data.TasteKey6 },
DataManager.Instance.TasteDataSo
DataManager.Instance.GetDataSo<TasteDataSo>()
);
public static int GetCraftableCount(this DrinkData data)

View File

@ -14,7 +14,7 @@ public static List<IngredientEntry> GetIngredients(this FoodData data) => Crafti
public static List<TasteData> GetTasteDatas(this FoodData data)
=> CraftingHelper.ResolveTasteDatas(
new[] { data.TasteKey1, data.TasteKey2, data.TasteKey3, data.TasteKey4, data.TasteKey5, data.TasteKey6 },
DataManager.Instance.TasteDataSo
DataManager.Instance.GetDataSo<TasteDataSo>()
);
public static int GetCraftableCount(this FoodData data)

View File

@ -92,13 +92,17 @@ private bool MatchesCategory(ItemViewModel model, InventoryCategoryType category
case InventoryCategoryType.Food:
if (model.ItemType != ItemType.Recipe) return false;
return DataManager.Instance.RecipeDataSo.TryGetDataById(model.Id, out var foodRecipe) && foodRecipe.RecipeType == RecipeType.FoodRecipe;
return DataManager.Instance.GetDataSo<RecipeDataSo>().TryGetDataById(model.Id, out var foodRecipe) && foodRecipe.RecipeType == RecipeType.FoodRecipe;
case InventoryCategoryType.Drink:
if (model.ItemType != ItemType.Recipe) return false;
return DataManager.Instance.RecipeDataSo.TryGetDataById(model.Id, out var drinkRecipe) && drinkRecipe.RecipeType == RecipeType.DrinkRecipe;
return DataManager.Instance.GetDataSo<RecipeDataSo>().TryGetDataById(model.Id, out var drinkRecipe) && drinkRecipe.RecipeType == RecipeType.DrinkRecipe;
case InventoryCategoryType.Ingredient:
return model.ItemType == ItemType.Ingredient;
case InventoryCategoryType.Cookware:
return DataManager.Instance.GetDataSo<CookwareDataSo>().TryGetDataById(model.Id, out var cookwareData);
case InventoryCategoryType.Special:
return false;
default:
return false;
}

View File

@ -18,6 +18,7 @@ public class ItemDetailView : MonoBehaviour, IEventHandler<ItemSlotSelectedEvent
[SerializeField] private LocalizeStringEvent _descriptionLocalizer;
[SerializeField] private Transform _cookWarePanel;
[SerializeField] private Image _cookwareImage;
[SerializeField] private Transform _tasteHashTagPanel;
[SerializeField] private RectTransform _tasteHashTagContent1;
[SerializeField] private HorizontalLayoutGroup _tasteHashTagContentLayoutGroup;
[SerializeField] private RectTransform _tasteHashTagContent2;
@ -26,9 +27,10 @@ public class ItemDetailView : MonoBehaviour, IEventHandler<ItemSlotSelectedEvent
private List<TasteHashTagSlotUi> _tasteHashTagSlotUis = new();
private ItemViewModel _currentItemViewModel;
private TaskCompletionSource<bool> _isInitialized = new();
private const string CookwarePanel = "CookwarePanel";
private const string NotCookwarePanel = "NotCookwarePanel";
private const string CookwareDetailPanel = "CookwareDetailPanel";
private const string IngredientDetailPanel = "IngredientDetailPanel";
private const string RecipeDetailPanel = "RecipeDetailPanel";
private async void Start()
{
@ -129,17 +131,31 @@ private void UpdateTasteHashTags(ItemViewModel model)
public void UpdateCategory(InventoryCategoryType category)
{
if (category == InventoryCategoryType.Ingredient)
switch (category)
{
_viewImage.sprite = DataManager.Instance.GetSprite(NotCookwarePanel);
_cookWarePanel.gameObject.SetActive(false);
}
else
{
_viewImage.sprite = DataManager.Instance.GetSprite(CookwarePanel);
_cookWarePanel.gameObject.SetActive(true);
case InventoryCategoryType.Food:
case InventoryCategoryType.Drink:
_viewImage.sprite = DataManager.Instance.GetSprite(RecipeDetailPanel);
_tasteHashTagPanel.gameObject.SetActive(true);
_cookWarePanel.gameObject.SetActive(true);
break;
case InventoryCategoryType.Ingredient:
_viewImage.sprite = DataManager.Instance.GetSprite(IngredientDetailPanel);
_tasteHashTagPanel.gameObject.SetActive(true);
_cookWarePanel.gameObject.SetActive(false);
break;
case InventoryCategoryType.Cookware:
case InventoryCategoryType.Special:
_viewImage.sprite = DataManager.Instance.GetSprite(CookwareDetailPanel);
_tasteHashTagPanel.gameObject.SetActive(false);
_cookWarePanel.gameObject.SetActive(false);
break;
default:
throw new ArgumentOutOfRangeException(nameof(category), category, null);
}
if (!_tasteHashTagPanel.gameObject.activeInHierarchy) return;
Canvas.ForceUpdateCanvases();
UpdateTasteHashTags(_currentItemViewModel);
}

View File

@ -9,14 +9,14 @@ public class ItemViewModel
public ItemType ItemType;
public int Count;
public RecipeType RecipeType => ItemType == ItemType.Recipe ? DataManager.Instance.RecipeDataSo.GetDataById(Id).RecipeType : RecipeType.None;
public RecipeType RecipeType => ItemType == ItemType.Recipe ? DataManager.Instance.GetDataSo<RecipeDataSo>().GetDataById(Id).RecipeType : RecipeType.None;
public Sprite ItemSprite
{
get
{
if (ItemType == ItemType.Recipe)
{
DataManager.Instance.RecipeDataSo.TryGetDataById(Id, out var recipe);
DataManager.Instance.GetDataSo<RecipeDataSo>().TryGetDataById(Id, out var recipe);
return DataManager.Instance.GetSprite(recipe.RecipeResult);
}
@ -34,10 +34,10 @@ public Sprite GetCookwareSprite
switch (RecipeType)
{
case RecipeType.FoodRecipe:
cookwareSpriteKey = DataManager.Instance.FoodDataSo.GetDataById(GetRecipeResultKey).CookwareType.ToString();
cookwareSpriteKey = DataManager.Instance.GetDataSo<FoodDataSo>().GetDataById(GetRecipeResultKey).CookwareKey;
break;
case RecipeType.DrinkRecipe:
cookwareSpriteKey = DataManager.Instance.DrinkDataSo.GetDataById(GetRecipeResultKey).CookwareType.ToString();
cookwareSpriteKey = DataManager.Instance.GetDataSo<DrinkDataSo>().GetDataById(GetRecipeResultKey).CookwareKey;
break;
}
return DataManager.Instance.GetSprite(cookwareSpriteKey);
@ -50,7 +50,7 @@ public string GetRecipeResultKey
{
if (ItemType != ItemType.Recipe) return null;
return DataManager.Instance.RecipeDataSo.GetDataById(Id).RecipeResult;
return DataManager.Instance.GetDataSo<RecipeDataSo>().GetDataById(Id).RecipeResult;
}
}
@ -61,9 +61,9 @@ public List<TasteData> GetTasteDatas
switch (RecipeType)
{
case RecipeType.FoodRecipe:
return DataManager.Instance.FoodDataSo.GetDataById(GetRecipeResultKey).GetTasteDatas();
return DataManager.Instance.GetDataSo<FoodDataSo>().GetDataById(GetRecipeResultKey).GetTasteDatas();
case RecipeType.DrinkRecipe:
return DataManager.Instance.DrinkDataSo.GetDataById(GetRecipeResultKey).GetTasteDatas();
return DataManager.Instance.GetDataSo<DrinkDataSo>().GetDataById(GetRecipeResultKey).GetTasteDatas();
}
return null;
@ -79,12 +79,12 @@ public void UpdateCount()
if (RecipeType == RecipeType.FoodRecipe)
{
var foodData = DataManager.Instance.FoodDataSo.GetDataById(resultKey);
var foodData = DataManager.Instance.GetDataSo<FoodDataSo>().GetDataById(resultKey);
craftableCount = foodData.GetCraftableCount();
}
else if (RecipeType == RecipeType.DrinkRecipe)
{
var drinkData = DataManager.Instance.DrinkDataSo.GetDataById(resultKey);
var drinkData = DataManager.Instance.GetDataSo<DrinkDataSo>().GetDataById(resultKey);
craftableCount = drinkData.GetCraftableCount();
}

View File

@ -8,10 +8,10 @@ public static class ItemViewModelFactory
public static List<ItemViewModel> CreateRestaurantManagementInventoryItem()
{
var result = new List<ItemViewModel>();
var recipeDataMap = DataManager.Instance.RecipeDataSo.GetDataList().ToDictionary(r => r.Id, r => r);
var foodDataMap = DataManager.Instance.FoodDataSo.GetDataList().ToDictionary(f => f.Id, f => f);
var drinkDataMap = DataManager.Instance.DrinkDataSo.GetDataList().ToDictionary(d => d.Id, d => d);
var ingredientDataMap = DataManager.Instance.IngredientDataSo.GetDataList().ToDictionary(i => i.Id, i => i);
var recipeDataMap = DataManager.Instance.GetDataSo<RecipeDataSo>().GetDataList().ToDictionary(r => r.Id, r => r);
var foodDataMap = DataManager.Instance.GetDataSo<FoodDataSo>().GetDataList().ToDictionary(f => f.Id, f => f);
var drinkDataMap = DataManager.Instance.GetDataSo<DrinkDataSo>().GetDataList().ToDictionary(d => d.Id, d => d);
var ingredientDataMap = DataManager.Instance.GetDataSo<IngredientDataSo>().GetDataList().ToDictionary(i => i.Id, i => i);
foreach (var kvp in InventoryManager.Instance.InventoryItems)
{
@ -39,16 +39,16 @@ public static List<ItemViewModel> CreateRestaurantManagementInventoryItem()
private static int CalculateCraftableCount(string recipeId)
{
if (!DataManager.Instance.RecipeDataSo.TryGetDataById(recipeId, out var recipe)) return 0;
if (!DataManager.Instance.GetDataSo<RecipeDataSo>().TryGetDataById(recipeId, out var recipe)) return 0;
string recipeResult = recipe.RecipeResult;
return recipe.RecipeType switch
{
RecipeType.FoodRecipe => DataManager.Instance.FoodDataSo.TryGetDataById(recipeResult, out var food)
RecipeType.FoodRecipe => DataManager.Instance.GetDataSo<FoodDataSo>().TryGetDataById(recipeResult, out var food)
? food.GetCraftableCount()
: 0,
RecipeType.DrinkRecipe => DataManager.Instance.DrinkDataSo.TryGetDataById(recipeResult, out var drink)
RecipeType.DrinkRecipe => DataManager.Instance.GetDataSo<DrinkDataSo>().TryGetDataById(recipeResult, out var drink)
? drink.GetCraftableCount()
: 0,
_ => 0
@ -57,7 +57,7 @@ private static int CalculateCraftableCount(string recipeId)
public static ItemViewModel CreateByRecipeId(string recipeId)
{
var recipeSo = DataManager.Instance.RecipeDataSo;
var recipeSo = DataManager.Instance.GetDataSo<RecipeDataSo>();
if (!recipeSo.TryGetDataById(recipeId, out var recipe)) return null;
var item = InventoryManager.Instance.GetItemDataByIdOrNull(recipeId);

View File

@ -2,6 +2,7 @@
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.InputSystem;
using UnityEngine.Serialization;
namespace DDD
{
@ -10,14 +11,15 @@ public class RestaurantManagementUi : PopupUi<RestaurantUiActions>, IEventHandle
[SerializeField] private InventoryView _inventoryView;
[SerializeField] private ItemDetailView _itemDetailView;
[SerializeField] private TabGroupUi<RestaurantManagementSectionType> _sectionTabs;
[SerializeField] private TabGroupUi<InventoryCategoryType> _categoryTabs;
[SerializeField] private TabGroupUi<InventoryCategoryType> _menuCategoryTabs;
[SerializeField] private TabGroupUi<InventoryCategoryType> _cookwareCategoryTabs;
protected override GameObject GetInitialSelected()
{
var inventoryViewInitialSelectedObject = _inventoryView.GetInitialSelected();
if (inventoryViewInitialSelectedObject) return inventoryViewInitialSelectedObject;
return _categoryTabs.GetFirstInteractableButton;
return _menuCategoryTabs.GetFirstInteractableButton;
}
public async override void Open()
@ -26,7 +28,11 @@ public async override void Open()
await _inventoryView.Initialize();
_sectionTabs.Initialize(OnSectionTabSelected);
_categoryTabs.Initialize(OnCategoryTabSelected);
_menuCategoryTabs.Initialize(OnCategoryTabSelected);
_cookwareCategoryTabs.Initialize(OnCategoryTabSelected);
_sectionTabs.SelectFirstTab();
_menuCategoryTabs.SelectFirstTab();
EventBus.Register<TodayMenuRemovedEvent>(this);
}
@ -87,6 +93,17 @@ private void HandleInteract2()
private void OnSectionTabSelected(RestaurantManagementSectionType section)
{
switch (section)
{
case RestaurantManagementSectionType.Menu:
_menuCategoryTabs.SelectFirstTab();
break;
case RestaurantManagementSectionType.Cookware:
_cookwareCategoryTabs.SelectFirstTab();
break;
default:
throw new ArgumentOutOfRangeException(nameof(section), section, null);
}
// TODO : 추후 Menu, Cookware, Worker에 맞춰 다른 콘텐츠 노출 처리
}
@ -107,7 +124,7 @@ public void Invoke(TodayMenuRemovedEvent evt)
if (newInventoryCategoryType == InventoryCategoryType.None) return;
_categoryTabs.SelectTab(newInventoryCategoryType);
_menuCategoryTabs.SelectTab(newInventoryCategoryType);
}
}
}

View File

@ -1,6 +1,8 @@
using System;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.Serialization;
using UnityEngine.UI;
namespace DDD
@ -18,7 +20,9 @@ public enum InventoryCategoryType
None = 0,
Food,
Drink,
Ingredient
Ingredient,
Cookware,
Special
}
public class TabButtonUi<T> : MonoBehaviour, IInteractableUi where T : Enum
@ -27,13 +31,23 @@ public class TabButtonUi<T> : MonoBehaviour, IInteractableUi where T : Enum
[SerializeField] private Button _button;
[SerializeField] private Animator _animator;
[SerializeField] private TextMeshProUGUI _label;
[SerializeField] private GameObject _content;
[SerializeField] private List<GameObject> _content = new();
[SerializeField] private bool _isEnabled = true;
private Action<T> _onSelected;
private bool _isSelected;
private readonly int _canDisabled = Animator.StringToHash("CanDisabled");
private void OnEnable()
{
if (_isEnabled == false)
{
_animator.SetBool(_canDisabled, true);
return;
}
if (_isSelected)
{
_animator.SetTrigger(nameof(DefaultAnimatorParams.Selected));
@ -50,11 +64,7 @@ public void Initialize(Action<T> onSelected)
public void SetSelected(bool isSelected)
{
_isSelected = isSelected;
if (_content)
{
_content.SetActive(isSelected);
}
SetActiveContents(isSelected);
_button.interactable = !_isSelected;
if (_isSelected)
{
@ -68,6 +78,13 @@ public void SetSelected(bool isSelected)
public bool ButtonIsInteractable => _button != null && _button.interactable;
public GameObject ButtonGameObject => _button?.gameObject;
private void SetActiveContents(bool isActive)
{
foreach (var content in _content)
{
content.SetActive(isActive);
}
}
public void OnInteract()
{
_onSelected?.Invoke(TabType);

View File

@ -29,11 +29,6 @@ public void Initialize(Action<T> onTabSelected)
tab.Initialize(OnTabClicked);
_tabLookup[tab.TabType] = tab;
}
if (_tabButtons.Count > 0)
{
SelectTab(_tabButtons[0].TabType);
}
}
private void OnTabClicked(T type)
@ -52,6 +47,14 @@ public void SelectTab(T type)
_onTabSelected?.Invoke(type);
}
public void SelectFirstTab()
{
if (_tabButtons.Count > 0)
{
SelectTab(_tabButtons[0].TabType);
}
}
public void Move(int direction)
{
var tabTypes = TabOrder;

View File

@ -1,7 +1,6 @@
fileFormatVersion: 2
guid: 35d7905cfe8751640bedce0ce9a61b47
folderAsset: yes
DefaultImporter:
guid: be71db161987564429bd0e62591815eb
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:

View File

@ -1,8 +1,7 @@
fileFormatVersion: 2
guid: c65b4ab4109ac254d9fc8868c0afcc03
NativeFormatImporter:
guid: 582a711af5879c942b17b9936b8871e0
TextScriptImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,20 @@
// <auto-generated>
using System;
using UnityEngine;
namespace DDD
{
[Serializable]
public class CookwareData : IId
{
/// <summary>식별ID</summary>
[Tooltip("식별ID")]
[field: SerializeField]
public string Id { get; set; }
/// <summary>요리도구 타입</summary>
[Tooltip("요리도구 타입")]
public CookwareType CookwareType;
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 41fbff9fffb64f941b07a553fa8615c0

View File

@ -0,0 +1,9 @@
// <auto-generated> File: CookwareDataSo.cs
using System.Collections.Generic;
using UnityEngine;
namespace DDD
{
[CreateAssetMenu(fileName = "CookwareDataSo", menuName = "GoogleSheet/CookwareDataSo")]
public class CookwareDataSo : DataSo<CookwareData> { }
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 26445eed59cfeeb40be052d1792170e2

View File

@ -12,9 +12,9 @@ public class DrinkData : IId
[field: SerializeField]
public string Id { get; set; }
/// <summary>요리도구</summary>
[Tooltip("요리도구")]
public CookwareType CookwareType;
/// <summary>요리도구 키 값</summary>
[Tooltip("요리도구 키 값")]
public string CookwareKey;
/// <summary>요리시간</summary>
[Tooltip("요리시간")]

View File

@ -12,9 +12,9 @@ public class FoodData : IId
[field: SerializeField]
public string Id { get; set; }
/// <summary>요리도구 타입</summary>
[Tooltip("요리도구 타입")]
public CookwareType CookwareType;
/// <summary>요리도구 키 값</summary>
[Tooltip("요리도구 키 값")]
public string CookwareKey;
/// <summary>요리시간</summary>
[Tooltip("요리시간")]

View File

@ -255,6 +255,38 @@
"Id": "item_environment_005",
"ItemType:Enum": "Environment"
},
{
"Id": "item_environment_cookware_001",
"ItemType:Enum": "Environment"
},
{
"Id": "item_environment_cookware_002",
"ItemType:Enum": "Environment"
},
{
"Id": "item_environment_cookware_003",
"ItemType:Enum": "Environment"
},
{
"Id": "item_environment_cookware_004",
"ItemType:Enum": "Environment"
},
{
"Id": "item_environment_cookware_005",
"ItemType:Enum": "Environment"
},
{
"Id": "item_environment_cookware_006",
"ItemType:Enum": "Environment"
},
{
"Id": "item_environment_cookware_007",
"ItemType:Enum": "Environment"
},
{
"Id": "item_environment_cookware_008",
"ItemType:Enum": "Environment"
},
{
"Id": "item_drink_001",
"ItemType:Enum": "Drink"
@ -524,7 +556,7 @@
{
"Id:string": "식별ID",
"#Name": "이름",
"CookwareType:Enum": "요리도구 타입",
"CookwareKey:string": "요리도구 키 값",
"CookTime:int": "요리시간",
"Price:int": "요리가격",
"IngredientKey1:string": "재료1",
@ -545,7 +577,7 @@
{
"Id:string": "item_food_001",
"#Name": "블루 스튜",
"CookwareType:Enum": "Pot",
"CookwareKey:string": "item_environment_cookware_001",
"CookTime:int": 7,
"Price:int": 10,
"IngredientKey1:string": "item_ingredient_001",
@ -566,7 +598,7 @@
{
"Id:string": "item_food_002",
"#Name": "햇빛 스튜",
"CookwareType:Enum": "Pot",
"CookwareKey:string": "item_environment_cookware_001",
"CookTime:int": 7,
"Price:int": 20,
"IngredientKey1:string": "item_ingredient_002",
@ -587,7 +619,7 @@
{
"Id:string": "item_food_003",
"#Name": "심해기억 스튜",
"CookwareType:Enum": "Pot",
"CookwareKey:string": "item_environment_cookware_001",
"CookTime:int": 7,
"Price:int": 15,
"IngredientKey1:string": "item_ingredient_002",
@ -608,7 +640,7 @@
{
"Id:string": "item_food_004",
"#Name": "치킨 굴라쉬",
"CookwareType:Enum": "Pot",
"CookwareKey:string": "item_environment_cookware_001",
"CookTime:int": 10,
"Price:int": 30,
"IngredientKey1:string": "item_ingredient_005",
@ -629,7 +661,7 @@
{
"Id:string": "item_food_005",
"#Name": "꿈해초 크로켓",
"CookwareType:Enum": "Fryer",
"CookwareKey:string": "item_environment_cookware_002",
"CookTime:int": 5,
"Price:int": 20,
"IngredientKey1:string": "item_ingredient_007",
@ -650,7 +682,7 @@
{
"Id:string": "item_food_006",
"#Name": "선라이즈 당근카츠",
"CookwareType:Enum": "Fryer",
"CookwareKey:string": "item_environment_cookware_002",
"CookTime:int": 5,
"Price:int": 30,
"IngredientKey1:string": "item_ingredient_003",
@ -671,7 +703,7 @@
{
"Id:string": "item_food_007",
"#Name": "미정",
"CookwareType:Enum": "Fryer",
"CookwareKey:string": "item_environment_cookware_002",
"CookTime:int": 5,
"Price:int": 30,
"IngredientKey1:string": "item_ingredient_011",
@ -692,7 +724,7 @@
{
"Id:string": "item_food_008",
"#Name": "비늘치킨덕",
"CookwareType:Enum": "FirePit",
"CookwareKey:string": "item_environment_cookware_003",
"CookTime:int": 6,
"Price:int": 30,
"IngredientKey1:string": "item_ingredient_012",
@ -713,7 +745,7 @@
{
"Id:string": "item_food_009",
"#Name": "화룡장어 구이",
"CookwareType:Enum": "FirePit",
"CookwareKey:string": "item_environment_cookware_003",
"CookTime:int": 6,
"Price:int": 15,
"IngredientKey1:string": "item_ingredient_014",
@ -734,7 +766,7 @@
{
"Id:string": "item_food_010",
"#Name": "미정",
"CookwareType:Enum": "FirePit",
"CookwareKey:string": "item_environment_cookware_003",
"CookTime:int": 6,
"Price:int": 30,
"IngredientKey1:string": "item_ingredient_016",
@ -755,7 +787,7 @@
{
"Id:string": "item_food_011",
"#Name": "바다의선물",
"CookwareType:Enum": "CuttingBoard",
"CookwareKey:string": "item_environment_cookware_004",
"CookTime:int": 5,
"Price:int": 10,
"IngredientKey1:string": "item_ingredient_002",
@ -776,7 +808,7 @@
{
"Id:string": "item_food_012",
"#Name": "유령새우회",
"CookwareType:Enum": "CuttingBoard",
"CookwareKey:string": "item_environment_cookware_004",
"CookTime:int": 5,
"Price:int": 25,
"IngredientKey1:string": "item_ingredient_017",
@ -797,7 +829,7 @@
{
"Id:string": "item_food_013",
"#Name": "비늘초무침",
"CookwareType:Enum": "CuttingBoard",
"CookwareKey:string": "item_environment_cookware_004",
"CookTime:int": 5,
"Price:int": 45,
"IngredientKey1:string": "item_ingredient_018",
@ -818,7 +850,7 @@
{
"Id:string": "item_food_014",
"#Name": "쫀징어 냉채",
"CookwareType:Enum": "CuttingBoard",
"CookwareKey:string": "item_environment_cookware_004",
"CookTime:int": 5,
"Price:int": 15,
"IngredientKey1:string": "item_ingredient_011",
@ -839,7 +871,7 @@
{
"Id:string": "item_food_015",
"#Name": "쫀징어링",
"CookwareType:Enum": "Griddle",
"CookwareKey:string": "item_environment_cookware_005",
"CookTime:int": 8,
"Price:int": 25,
"IngredientKey1:string": "item_ingredient_011",
@ -860,7 +892,7 @@
{
"Id:string": "item_food_016",
"#Name": "꿈해파리 볶음",
"CookwareType:Enum": "Griddle",
"CookwareKey:string": "item_environment_cookware_005",
"CookTime:int": 6,
"Price:int": 15,
"IngredientKey1:string": "item_ingredient_019",
@ -881,7 +913,7 @@
{
"Id:string": "item_food_017",
"#Name": "페퍼포칼립스",
"CookwareType:Enum": "Griddle",
"CookwareKey:string": "item_environment_cookware_005",
"CookTime:int": 6,
"Price:int": 25,
"IngredientKey1:string": "item_ingredient_012",
@ -902,7 +934,7 @@
{
"Id:string": "item_food_018",
"#Name": "미정",
"CookwareType:Enum": "MagicOven",
"CookwareKey:string": "item_environment_cookware_006",
"CookTime:int": 0,
"Price:int": 0,
"IngredientKey1:string": "",
@ -923,7 +955,7 @@
{
"Id:string": "item_food_019",
"#Name": "미정",
"CookwareType:Enum": "MagicOven",
"CookwareKey:string": "item_environment_cookware_006",
"CookTime:int": 0,
"Price:int": 0,
"IngredientKey1:string": "",
@ -944,7 +976,7 @@
{
"Id:string": "item_food_020",
"#Name": "미정",
"CookwareType:Enum": "MagicOven",
"CookwareKey:string": "item_environment_cookware_006",
"CookTime:int": 0,
"Price:int": 0,
"IngredientKey1:string": "",
@ -967,7 +999,7 @@
{
"Id:string": "식별ID",
"#Name": "이름",
"CookwareType:Enum": "요리도구",
"CookwareKey:string": "요리도구 키 값",
"CookTime:int": "요리시간",
"Price:int": "요리가격",
"IngredientKey1:string": "재료1",
@ -988,7 +1020,7 @@
{
"Id:string": "item_drink_001",
"#Name": "토마토 주스",
"CookwareType:Enum": "JuiceMachine",
"CookwareKey:string": "item_environment_cookware_007",
"CookTime:int": 1,
"Price:int": 10,
"IngredientKey1:string": "item_ingredient_006",
@ -1009,7 +1041,7 @@
{
"Id:string": "item_drink_002",
"#Name": "오렌지 주스",
"CookwareType:Enum": "JuiceMachine",
"CookwareKey:string": "item_environment_cookware_007",
"CookTime:int": 1,
"Price:int": 10,
"IngredientKey1:string": "item_ingredient_023",
@ -1030,7 +1062,7 @@
{
"Id:string": "item_drink_003",
"#Name": "여신의눈물",
"CookwareType:Enum": "Barrel",
"CookwareKey:string": "item_environment_cookware_008",
"CookTime:int": 3,
"Price:int": 10,
"IngredientKey1:string": "item_ingredient_008",
@ -1051,7 +1083,7 @@
{
"Id:string": "item_drink_004",
"#Name": "라벨블루",
"CookwareType:Enum": "Barrel",
"CookwareKey:string": "item_environment_cookware_008",
"CookTime:int": 3,
"Price:int": 10,
"IngredientKey1:string": "item_ingredient_002",
@ -1168,6 +1200,53 @@
"#Name": "오렌지"
}
],
"CookwareData": [
{
"Id:string": "식별ID",
"#Name": "이름",
"CookwareType:Enum": "요리도구 타입"
},
{
"Id:string": "item_environment_cookware_001",
"#Name": "냄비",
"CookwareType:Enum": "Pot"
},
{
"Id:string": "item_environment_cookware_002",
"#Name": "튀김",
"CookwareType:Enum": "Fryer"
},
{
"Id:string": "item_environment_cookware_003",
"#Name": "화로",
"CookwareType:Enum": "FirePit"
},
{
"Id:string": "item_environment_cookware_004",
"#Name": "",
"CookwareType:Enum": "CuttingBoard"
},
{
"Id:string": "item_environment_cookware_005",
"#Name": "",
"CookwareType:Enum": "Griddle"
},
{
"Id:string": "item_environment_cookware_006",
"#Name": "",
"CookwareType:Enum": "MagicOven"
},
{
"Id:string": "item_environment_cookware_007",
"#Name": "",
"CookwareType:Enum": "JuiceMachine"
},
{
"Id:string": "item_environment_cookware_008",
"#Name": "",
"CookwareType:Enum": "Barrel"
}
],
"TasteData": [
{
"Id:string": "식별ID",
@ -1176,92 +1255,92 @@
},
{
"Id:string": "Sweet",
"#Name": "",
"#Name": "단맛",
"TasteType:Enum": "Sweet"
},
{
"Id:string": "Warm",
"#Name": "",
"#Name": "따뜻한",
"TasteType:Enum": "Warm"
},
{
"Id:string": "Vegetable",
"#Name": "",
"#Name": "채류",
"TasteType:Enum": "Vegetable"
},
{
"Id:string": "Bitter",
"#Name": "",
"#Name": "쓴맛",
"TasteType:Enum": "Bitter"
},
{
"Id:string": "Salty",
"#Name": "",
"#Name": "짠맛",
"TasteType:Enum": "Salty"
},
{
"Id:string": "Mild",
"#Name": "",
"#Name": "담백한",
"TasteType:Enum": "Mild"
},
{
"Id:string": "Addictive",
"#Name": "",
"#Name": "중독적인",
"TasteType:Enum": "Addictive"
},
{
"Id:string": "Sour",
"#Name": "",
"#Name": "신맛",
"TasteType:Enum": "Sour"
},
{
"Id:string": "Savory",
"#Name": "",
"#Name": "고소한",
"TasteType:Enum": "Savory"
},
{
"Id:string": "Meat",
"#Name": "",
"#Name": "육류",
"TasteType:Enum": "Meat"
},
{
"Id:string": "SuperHot",
"#Name": "",
"#Name": "핵불닭맛",
"TasteType:Enum": "SuperHot"
},
{
"Id:string": "Fish",
"#Name": "",
"#Name": "어류",
"TasteType:Enum": "Fish"
},
{
"Id:string": "NoneDegree",
"#Name": "",
"#Name": "도수가없는",
"TasteType:Enum": "NoneDegree"
},
{
"Id:string": "Soda",
"#Name": "",
"#Name": "탄산",
"TasteType:Enum": "Soda"
},
{
"Id:string": "LowDegree",
"#Name": "",
"#Name": "도수가낮은",
"TasteType:Enum": "LowDegree"
},
{
"Id:string": "WoodFlavor",
"#Name": "",
"#Name": "나무향",
"TasteType:Enum": "WoodFlavor"
},
{
"Id:string": "MiddleDegree",
"#Name": "",
"#Name": "도수가보통인",
"TasteType:Enum": "MiddleDegree"
},
{
"Id:string": "FruitFlavor",
"#Name": "",
"#Name": "과일향",
"TasteType:Enum": "FruitFlavor"
}
],

View File

@ -0,0 +1,31 @@
%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: 26445eed59cfeeb40be052d1792170e2, type: 3}
m_Name: CookwareDataSo
m_EditorClassIdentifier:
Datas:
- <Id>k__BackingField: item_environment_cookware_001
CookwareType: 1
- <Id>k__BackingField: item_environment_cookware_002
CookwareType: 2
- <Id>k__BackingField: item_environment_cookware_003
CookwareType: 3
- <Id>k__BackingField: item_environment_cookware_004
CookwareType: 4
- <Id>k__BackingField: item_environment_cookware_005
CookwareType: 5
- <Id>k__BackingField: item_environment_cookware_006
CookwareType: 6
- <Id>k__BackingField: item_environment_cookware_007
CookwareType: 7
- <Id>k__BackingField: item_environment_cookware_008
CookwareType: 8

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 638f3769e2653a74d9a503e0e5cd5332
guid: 5c7c87af5db0e884eb3b979cb1d2188b
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000

View File

@ -14,7 +14,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
Datas:
- <Id>k__BackingField: item_drink_001
CookwareType: 7
CookwareKey: item_environment_cookware_007
CookTime: 1
Price: 10
IngredientKey1: item_ingredient_006
@ -32,7 +32,7 @@ MonoBehaviour:
TasteKey5:
TasteKey6:
- <Id>k__BackingField: item_drink_002
CookwareType: 7
CookwareKey: item_environment_cookware_007
CookTime: 1
Price: 10
IngredientKey1: item_ingredient_023
@ -50,7 +50,7 @@ MonoBehaviour:
TasteKey5:
TasteKey6:
- <Id>k__BackingField: item_drink_003
CookwareType: 8
CookwareKey: item_environment_cookware_008
CookTime: 3
Price: 10
IngredientKey1: item_ingredient_008
@ -68,7 +68,7 @@ MonoBehaviour:
TasteKey5:
TasteKey6:
- <Id>k__BackingField: item_drink_004
CookwareType: 8
CookwareKey: item_environment_cookware_008
CookTime: 3
Price: 10
IngredientKey1: item_ingredient_002

View File

@ -14,7 +14,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
Datas:
- <Id>k__BackingField: item_food_001
CookwareType: 1
CookwareKey: item_environment_cookware_001
CookTime: 7
Price: 10
IngredientKey1: item_ingredient_001
@ -32,7 +32,7 @@ MonoBehaviour:
TasteKey5:
TasteKey6:
- <Id>k__BackingField: item_food_002
CookwareType: 1
CookwareKey: item_environment_cookware_001
CookTime: 7
Price: 20
IngredientKey1: item_ingredient_002
@ -50,7 +50,7 @@ MonoBehaviour:
TasteKey5:
TasteKey6:
- <Id>k__BackingField: item_food_003
CookwareType: 1
CookwareKey: item_environment_cookware_001
CookTime: 7
Price: 15
IngredientKey1: item_ingredient_002
@ -68,7 +68,7 @@ MonoBehaviour:
TasteKey5:
TasteKey6:
- <Id>k__BackingField: item_food_004
CookwareType: 1
CookwareKey: item_environment_cookware_001
CookTime: 10
Price: 30
IngredientKey1: item_ingredient_005
@ -86,7 +86,7 @@ MonoBehaviour:
TasteKey5:
TasteKey6:
- <Id>k__BackingField: item_food_005
CookwareType: 2
CookwareKey: item_environment_cookware_002
CookTime: 5
Price: 20
IngredientKey1: item_ingredient_007
@ -104,7 +104,7 @@ MonoBehaviour:
TasteKey5:
TasteKey6:
- <Id>k__BackingField: item_food_006
CookwareType: 2
CookwareKey: item_environment_cookware_002
CookTime: 5
Price: 30
IngredientKey1: item_ingredient_003
@ -122,7 +122,7 @@ MonoBehaviour:
TasteKey5:
TasteKey6:
- <Id>k__BackingField: item_food_007
CookwareType: 2
CookwareKey: item_environment_cookware_002
CookTime: 5
Price: 30
IngredientKey1: item_ingredient_011
@ -140,7 +140,7 @@ MonoBehaviour:
TasteKey5:
TasteKey6:
- <Id>k__BackingField: item_food_008
CookwareType: 3
CookwareKey: item_environment_cookware_003
CookTime: 6
Price: 30
IngredientKey1: item_ingredient_012
@ -158,7 +158,7 @@ MonoBehaviour:
TasteKey5:
TasteKey6:
- <Id>k__BackingField: item_food_009
CookwareType: 3
CookwareKey: item_environment_cookware_003
CookTime: 6
Price: 15
IngredientKey1: item_ingredient_014
@ -176,7 +176,7 @@ MonoBehaviour:
TasteKey5:
TasteKey6:
- <Id>k__BackingField: item_food_010
CookwareType: 3
CookwareKey: item_environment_cookware_003
CookTime: 6
Price: 30
IngredientKey1: item_ingredient_016
@ -194,7 +194,7 @@ MonoBehaviour:
TasteKey5:
TasteKey6:
- <Id>k__BackingField: item_food_011
CookwareType: 4
CookwareKey: item_environment_cookware_004
CookTime: 5
Price: 10
IngredientKey1: item_ingredient_002
@ -212,7 +212,7 @@ MonoBehaviour:
TasteKey5:
TasteKey6:
- <Id>k__BackingField: item_food_012
CookwareType: 4
CookwareKey: item_environment_cookware_004
CookTime: 5
Price: 25
IngredientKey1: item_ingredient_017
@ -230,7 +230,7 @@ MonoBehaviour:
TasteKey5:
TasteKey6:
- <Id>k__BackingField: item_food_013
CookwareType: 4
CookwareKey: item_environment_cookware_004
CookTime: 5
Price: 45
IngredientKey1: item_ingredient_018
@ -248,7 +248,7 @@ MonoBehaviour:
TasteKey5:
TasteKey6:
- <Id>k__BackingField: item_food_014
CookwareType: 4
CookwareKey: item_environment_cookware_004
CookTime: 5
Price: 15
IngredientKey1: item_ingredient_011
@ -266,7 +266,7 @@ MonoBehaviour:
TasteKey5:
TasteKey6:
- <Id>k__BackingField: item_food_015
CookwareType: 5
CookwareKey: item_environment_cookware_005
CookTime: 8
Price: 25
IngredientKey1: item_ingredient_011
@ -284,7 +284,7 @@ MonoBehaviour:
TasteKey5:
TasteKey6:
- <Id>k__BackingField: item_food_016
CookwareType: 5
CookwareKey: item_environment_cookware_005
CookTime: 6
Price: 15
IngredientKey1: item_ingredient_019
@ -302,7 +302,7 @@ MonoBehaviour:
TasteKey5:
TasteKey6:
- <Id>k__BackingField: item_food_017
CookwareType: 5
CookwareKey: item_environment_cookware_005
CookTime: 6
Price: 25
IngredientKey1: item_ingredient_012
@ -320,7 +320,7 @@ MonoBehaviour:
TasteKey5:
TasteKey6:
- <Id>k__BackingField: item_food_018
CookwareType: 6
CookwareKey: item_environment_cookware_006
CookTime: 0
Price: 0
IngredientKey1:
@ -338,7 +338,7 @@ MonoBehaviour:
TasteKey5:
TasteKey6:
- <Id>k__BackingField: item_food_019
CookwareType: 6
CookwareKey: item_environment_cookware_006
CookTime: 0
Price: 0
IngredientKey1:
@ -356,7 +356,7 @@ MonoBehaviour:
TasteKey5:
TasteKey6:
- <Id>k__BackingField: item_food_020
CookwareType: 6
CookwareKey: item_environment_cookware_006
CookTime: 0
Price: 0
IngredientKey1:

View File

@ -109,6 +109,22 @@ MonoBehaviour:
ItemType: 3
- <Id>k__BackingField: item_environment_005
ItemType: 3
- <Id>k__BackingField: item_environment_cookware_001
ItemType: 3
- <Id>k__BackingField: item_environment_cookware_002
ItemType: 3
- <Id>k__BackingField: item_environment_cookware_003
ItemType: 3
- <Id>k__BackingField: item_environment_cookware_004
ItemType: 3
- <Id>k__BackingField: item_environment_cookware_005
ItemType: 3
- <Id>k__BackingField: item_environment_cookware_006
ItemType: 3
- <Id>k__BackingField: item_environment_cookware_007
ItemType: 3
- <Id>k__BackingField: item_environment_cookware_008
ItemType: 3
- <Id>k__BackingField: item_drink_001
ItemType: 4
- <Id>k__BackingField: item_drink_002

View File

@ -40,7 +40,7 @@ private void LoadOrCreateRestaurantState()
private void GenerateDummyEnvironmentProps()
{
// Make dummy placement data
foreach (EnvironmentData prop in DataManager.Instance.EnvironmentDataSo.GetDataList())
foreach (EnvironmentData prop in DataManager.Instance.GetDataSo<EnvironmentDataSo>().GetDataList())
{
for (int i = 0; i < 10; i++)
{

View File

@ -15,9 +15,7 @@ public class RestaurantEnvironment : MonoBehaviour
public async void Initialize(RestaurantEnvironmentData data)
{
await DataManager.Instance.WaitUntilInitialized();
EnvironmentData environmentData = DataManager.Instance.EnvironmentDataSo.GetDataById(data.Id);
EnvironmentData environmentData = DataManager.Instance.GetDataSo<EnvironmentDataSo>().GetDataById(data.Id);
_collider = GetComponent<Collider>();
_visualLook = transform.Find(CommonConstants.VisualLook);

View File

@ -17,6 +17,7 @@ public static class DataConstants
public const string FoodDataSo = "FoodDataSo";
public const string DrinkDataSo = "DrinkDataSo";
public const string IngredientDataSo = "IngredientDataSo";
public const string CookwareDataSo = "CookwareDataSo";
public const string TasteDataSo = "TasteDataSo";
public const string EnvironmentDataSo = "EnvironmentDataSo";
public const string RestaurantPlayerDataSo = "RestaurantPlayerDataSo";