From 733cf4fd6542170ee3ad65e9dc8d9042ad17d432 Mon Sep 17 00:00:00 2001 From: IDMhan Date: Wed, 3 Apr 2024 14:09:36 +0900 Subject: [PATCH 1/2] Closes #224 #227 Excel To Json, Time*Weather --- .../02.Scripts/Editor/DifferencePopup.cs | 190 ++ .../02.Scripts/Editor/DifferencePopup.cs.meta | 2 + .../02.Scripts/Editor/ExcelToJsonConverter.cs | 319 ++++ .../Editor/ExcelToJsonConverter.cs.meta | 2 + .../Packages/ExcelDataReader.3.6.0.meta | 8 + .../ExcelDataReader.3.6.0/.signature.p7s | Bin 0 -> 9495 bytes .../ExcelDataReader.nuspec | 33 + .../ExcelDataReader.nuspec.meta | 7 + .../Packages/ExcelDataReader.3.6.0/lib.meta | 8 + .../ExcelDataReader.3.6.0/lib/net45.meta | 8 + .../lib/net45/ExcelDataReader.dll | Bin 0 -> 161792 bytes .../lib/net45/ExcelDataReader.dll.meta | 2 + .../lib/net45/ExcelDataReader.xml | 1680 +++++++++++++++++ .../lib/net45/ExcelDataReader.xml.meta | 7 + .../ExcelDataReader.DataSet.3.6.0.meta | 8 + .../.signature.p7s | Bin 0 -> 9464 bytes .../ExcelDataReader.DataSet.nuspec | 28 + .../ExcelDataReader.DataSet.nuspec.meta | 7 + .../ExcelDataReader.DataSet.3.6.0/lib.meta | 8 + .../lib/net35.meta | 8 + .../lib/net35/ExcelDataReader.DataSet.dll | Bin 0 -> 9728 bytes .../net35/ExcelDataReader.DataSet.dll.meta | 2 + .../lib/net35/ExcelDataReader.DataSet.xml | 71 + .../net35/ExcelDataReader.DataSet.xml.meta | 7 + BlueWater/Assets/Resources/Excel.meta | 8 + .../Resources/Excel/customer_table.xlsx | Bin 0 -> 12135 bytes .../Resources/Excel/customer_table.xlsx.meta | 7 + BlueWater/Assets/Resources/JSON.meta | 8 + .../Assets/Resources/JSON/customer_table.json | 172 ++ .../Resources/JSON/customer_table.json.meta | 7 + BlueWater/Assets/packages.config | 2 + 31 files changed, 2609 insertions(+) create mode 100644 BlueWater/Assets/02.Scripts/Editor/DifferencePopup.cs create mode 100644 BlueWater/Assets/02.Scripts/Editor/DifferencePopup.cs.meta create mode 100644 BlueWater/Assets/02.Scripts/Editor/ExcelToJsonConverter.cs create mode 100644 BlueWater/Assets/02.Scripts/Editor/ExcelToJsonConverter.cs.meta create mode 100644 BlueWater/Assets/Packages/ExcelDataReader.3.6.0.meta create mode 100644 BlueWater/Assets/Packages/ExcelDataReader.3.6.0/.signature.p7s create mode 100644 BlueWater/Assets/Packages/ExcelDataReader.3.6.0/ExcelDataReader.nuspec create mode 100644 BlueWater/Assets/Packages/ExcelDataReader.3.6.0/ExcelDataReader.nuspec.meta create mode 100644 BlueWater/Assets/Packages/ExcelDataReader.3.6.0/lib.meta create mode 100644 BlueWater/Assets/Packages/ExcelDataReader.3.6.0/lib/net45.meta create mode 100644 BlueWater/Assets/Packages/ExcelDataReader.3.6.0/lib/net45/ExcelDataReader.dll create mode 100644 BlueWater/Assets/Packages/ExcelDataReader.3.6.0/lib/net45/ExcelDataReader.dll.meta create mode 100644 BlueWater/Assets/Packages/ExcelDataReader.3.6.0/lib/net45/ExcelDataReader.xml create mode 100644 BlueWater/Assets/Packages/ExcelDataReader.3.6.0/lib/net45/ExcelDataReader.xml.meta create mode 100644 BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0.meta create mode 100644 BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/.signature.p7s create mode 100644 BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/ExcelDataReader.DataSet.nuspec create mode 100644 BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/ExcelDataReader.DataSet.nuspec.meta create mode 100644 BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/lib.meta create mode 100644 BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/lib/net35.meta create mode 100644 BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/lib/net35/ExcelDataReader.DataSet.dll create mode 100644 BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/lib/net35/ExcelDataReader.DataSet.dll.meta create mode 100644 BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/lib/net35/ExcelDataReader.DataSet.xml create mode 100644 BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/lib/net35/ExcelDataReader.DataSet.xml.meta create mode 100644 BlueWater/Assets/Resources/Excel.meta create mode 100644 BlueWater/Assets/Resources/Excel/customer_table.xlsx create mode 100644 BlueWater/Assets/Resources/Excel/customer_table.xlsx.meta create mode 100644 BlueWater/Assets/Resources/JSON.meta create mode 100644 BlueWater/Assets/Resources/JSON/customer_table.json create mode 100644 BlueWater/Assets/Resources/JSON/customer_table.json.meta diff --git a/BlueWater/Assets/02.Scripts/Editor/DifferencePopup.cs b/BlueWater/Assets/02.Scripts/Editor/DifferencePopup.cs new file mode 100644 index 000000000..cda52add8 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Editor/DifferencePopup.cs @@ -0,0 +1,190 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.IO; +using System.Linq; +using ExcelDataReader; +using Newtonsoft.Json.Linq; +using UnityEditor; +using UnityEngine; + +namespace _02.Scripts.Editor +{ + public class DifferencePopup : EditorWindow + { + private List differences; + private string selectedExcelFile; + private string jsonFolderPath; + private Vector2 scrollPosition; + private string excelFolderPath = "Assets/Resources/Excel"; + + public delegate void OnCloseHandler(); + + public event OnCloseHandler OnClose; + + public static DifferencePopup ShowWindow(List differences, string selectedExcelFile, + string jsonFolderPath) + { + DifferencePopup window = GetWindow("비교창"); + window.differences = differences; + window.selectedExcelFile = selectedExcelFile; + window.jsonFolderPath = jsonFolderPath; + return window; + } + + private void OnGUI() + { + EditorGUILayout.LabelField("비교대상 : " + selectedExcelFile, EditorStyles.boldLabel); + + scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition); + + foreach (var difference in differences) + { + EditorGUILayout.LabelField("속성: " + difference.PropertyName); + EditorGUILayout.LabelField("새로운 값: " + difference.NewValue); + EditorGUILayout.LabelField("기존의 값: " + difference.ExistingValue); + EditorGUILayout.Space(); + } + + EditorGUILayout.EndScrollView(); + + if (GUILayout.Button("저장")) + { + string excelPath = Path.Combine(excelFolderPath, selectedExcelFile + ".xlsx"); + string jsonPath = Path.Combine(jsonFolderPath, selectedExcelFile + ".json"); + + try + { + JArray newArray = ExcelToJsonConverter.ConvertExcelToJsonArray(excelPath); + File.WriteAllText(jsonPath, newArray.ToString()); + //EditorUtility.DisplayDialog("Success", "Changes saved successfully.", "OK"); + ExcelToJsonConverter.toggleStates[selectedExcelFile] = false; + OnClose?.Invoke(); + this.Close(); + + bool anyToggled = false; + foreach (var toggleState in ExcelToJsonConverter.toggleStates.Values) + { + if (toggleState) + { + anyToggled = true; + break; + } + } + + if (anyToggled) + { + ExcelToJsonConverter.Instance.ProcessSelectedFiles(); + } + } + catch (Exception e) + { + Debug.LogError($"저장에 실패했습니다: {e.Message}"); + EditorUtility.DisplayDialog("실패", "저장에 실패했습니다. 콘솔을 확인해주세요.", + "확인"); + } + } + + + if (GUILayout.Button("저장하지 않고 닫기")) + { + ExcelToJsonConverter.toggleStates[selectedExcelFile] = false; + OnClose?.Invoke(); + this.Close(); + + bool anyToggled = false; + foreach (var toggleState in ExcelToJsonConverter.toggleStates.Values) + { + if (toggleState) + { + anyToggled = true; + break; + } + } + + if (anyToggled) + { + ExcelToJsonConverter.Instance.ProcessSelectedFiles(); + } + } + } + + private void OnDestroy() + { + ExcelToJsonConverter.toggleStates[selectedExcelFile] = false; + OnClose?.Invoke(); + } + + // private JArray ConvertExcelToJsonArray(string excelPath) + // { + // FileStream stream = File.Open(excelPath, FileMode.Open, FileAccess.Read); + // IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); + // + // DataSet result = excelReader.AsDataSet(new ExcelDataSetConfiguration() + // { + // ConfigureDataTable = (tableReader) => new ExcelDataTableConfiguration() + // { + // UseHeaderRow = true + // } + // }); + // + // stream.Close(); + // DataTable table = result.Tables[0]; + // + // JArray jsonArray = new JArray(); + // foreach (DataRow row in table.Rows) + // { + // JObject obj = new JObject(); + // foreach (DataColumn column in table.Columns) + // { + // string cellValue = row[column].ToString(); + // if (float.TryParse(cellValue, out float floatResult)) + // { + // if (floatResult % 1 == 0) // If the value is a whole number + // { + // obj[column.ColumnName] = Convert.ToInt32(floatResult); + // } + // else + // { + // obj[column.ColumnName] = floatResult; + // } + // } + // else if (IsString(cellValue)) + // { + // obj[column.ColumnName] = cellValue; + // } + // else + // { + // obj[column.ColumnName] = cellValue; + // } + // } + // + // jsonArray.Add(obj); + // } + // + // return jsonArray; + // } + + private bool IsString(string value) + { + return value.Any(c => !char.IsDigit(c)); + } + + + public class Difference + { + public int Index { get; set; } + public string PropertyName { get; set; } + public string NewValue { get; set; } + public string ExistingValue { get; set; } + + public Difference(string propertyName, string newValue, string existingValue, int index) + { + PropertyName = propertyName; + NewValue = newValue; + ExistingValue = existingValue; + Index = index; + } + } + } +} \ No newline at end of file diff --git a/BlueWater/Assets/02.Scripts/Editor/DifferencePopup.cs.meta b/BlueWater/Assets/02.Scripts/Editor/DifferencePopup.cs.meta new file mode 100644 index 000000000..fabd26269 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Editor/DifferencePopup.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 974c0982732174a6bb82ac66de663c45 \ No newline at end of file diff --git a/BlueWater/Assets/02.Scripts/Editor/ExcelToJsonConverter.cs b/BlueWater/Assets/02.Scripts/Editor/ExcelToJsonConverter.cs new file mode 100644 index 000000000..55bb5c2ce --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Editor/ExcelToJsonConverter.cs @@ -0,0 +1,319 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.IO; +using System.Linq; +using ExcelDataReader; +using Newtonsoft.Json.Linq; +using UnityEditor; +using UnityEngine; + +namespace _02.Scripts.Editor +{ + public class ExcelToJsonConverter : EditorWindow + { + private readonly string excelFolderPath = "Assets/Resources/Excel"; + private readonly string jsonFolderPath = "Assets/Resources/JSON"; + public static Dictionary toggleStates; + private List differences; + private bool showPopup = false; + private string selectedExcelFile; + public static ExcelToJsonConverter Instance { get; private set; } + private Vector2 scrollPosition; + + [MenuItem("Tools/EXCEL TO JSON - BlueWater")] + public static void ShowWindow() + { + Instance = GetWindow("EXCEL TO JSON"); + } + + private void OnEnable() + { + toggleStates = new Dictionary(); + var excelFiles = Directory.GetFiles(excelFolderPath, "*.xlsx"); + foreach (var excelFile in excelFiles) + { + toggleStates[Path.GetFileNameWithoutExtension(excelFile)] = false; + } + } + + public void ProcessSelectedFiles() + { + List currentDifferences = new List(); + + bool differencesFound = false; + + foreach (var excelFile in toggleStates.Keys) + { + if (toggleStates[excelFile]) + { + string excelPath = Path.Combine(excelFolderPath, excelFile + ".xlsx"); + string jsonPath = Path.Combine(jsonFolderPath, excelFile + ".json"); + + JArray newJsonArray = ConvertExcelToJsonArray(excelPath); + + if (File.Exists(jsonPath)) + { + JArray existingJsonArray = JArray.Parse(File.ReadAllText(jsonPath)); + currentDifferences = CompareJsonObjects(newJsonArray, existingJsonArray); + if (currentDifferences.Count > 0) + { + selectedExcelFile = excelFile; + differences = currentDifferences; + showPopup = true; + differencesFound = true; + break; + } + } + else + { + File.WriteAllText(jsonPath, newJsonArray.ToString()); + } + } + } + + if (!differencesFound && !showPopup) + { + EditorUtility.DisplayDialog("달라진점이 없음", + "비교 대상인 새로운 엑셀 파일과 기존의 제이슨 파일에서 다른 점을 발견하지 못했습니다.", "확인"); + } + } + + private void OnGUI() + { + EditorGUILayout.LabelField("EXCEL TO JSON - Select & Compare", EditorStyles.boldLabel); + + scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition); + + List keys = new List(toggleStates.Keys); + + foreach (var excelFile in keys) + { + bool currentValue = toggleStates[excelFile]; + bool newValue = EditorGUILayout.ToggleLeft(excelFile, currentValue); + if (currentValue != newValue) + { + toggleStates[excelFile] = newValue; + } + } + + EditorGUILayout.EndScrollView(); + + if (GUILayout.Button("수정사항 체크")) + { + CheckModifiedToggles(); + } + + GUILayout.Space(10); + + EditorGUILayout.BeginHorizontal(); + + if (GUILayout.Button("전체 해제")) + { + foreach (var excelFile in keys) + { + toggleStates[excelFile] = false; + } + } + + if (GUILayout.Button("전체 선택")) + { + foreach (var excelFile in keys) + { + toggleStates[excelFile] = true; + } + } + + EditorGUILayout.EndHorizontal(); + + GUILayout.Space(10); + + if (GUILayout.Button("선택된 파일들 비교 및 병합")) + { + ProcessSelectedFiles(); + } + + if (showPopup) + { + DifferencePopup window = DifferencePopup.ShowWindow(differences, selectedExcelFile, jsonFolderPath); + window.OnClose += () => showPopup = false; + } + } + + public void CheckModifiedToggles() + { + List keysToCheck = new List(toggleStates.Keys); + + foreach (var excelFile in keysToCheck) + { + string excelPath = Path.Combine(excelFolderPath, excelFile + ".xlsx"); + string jsonPath = Path.Combine(jsonFolderPath, excelFile + ".json"); + + if (File.Exists(jsonPath)) + { + JArray newJsonArray = ConvertExcelToJsonArray(excelPath); + JArray existingJsonArray = JArray.Parse(File.ReadAllText(jsonPath)); + List currentDifferences = + CompareJsonObjects(newJsonArray, existingJsonArray); + + if (currentDifferences.Count > 0) + { + toggleStates[excelFile] = true; + } + else + { + toggleStates[excelFile] = false; + } + } + } + } + + public static JArray ConvertExcelToJsonArray(string excelPath) + { + FileStream stream = File.Open(excelPath, FileMode.Open, FileAccess.Read); + IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); + + DataSet result = excelReader.AsDataSet(new ExcelDataSetConfiguration() + { + ConfigureDataTable = (tableReader) => new ExcelDataTableConfiguration() + { + UseHeaderRow = true + } + }); + + stream.Close(); + DataTable table = result.Tables[0]; + + JArray jsonArray = new JArray(); + foreach (DataRow row in table.Rows) + { + JObject obj = new JObject(); + foreach (DataColumn column in table.Columns) + { + string cellValue = row[column].ToString(); + if (float.TryParse(cellValue, out float floatResult)) + { + if (floatResult % 1 == 0) + { + obj[column.ColumnName] = Convert.ToInt32(floatResult); + } + else + { + obj[column.ColumnName] = floatResult; + } + } + else if (IsString(cellValue)) + { + obj[column.ColumnName] = cellValue; + } + else + { + obj[column.ColumnName] = cellValue; + } + } + + jsonArray.Add(obj); + } + + return jsonArray; + } + + private static bool IsString(string value) + { + return value.Any(c => !char.IsDigit(c)); + } + + + + private List CompareJsonObjects(JArray newObj, JArray existingObj) + { + List differences = new List(); + + int minLength = Mathf.Min(newObj.Count, existingObj.Count); + int maxLength = Mathf.Max(newObj.Count, existingObj.Count); + + for (int i = 0; i < maxLength; i++) + { + if (i < minLength) + { + JObject newItem = newObj[i] as JObject; + JObject existingItem = existingObj[i] as JObject; + + if (newItem != null && existingItem != null) + { + HashSet allPropertyNames = new HashSet(newItem.Properties().Select(p => p.Name)); + allPropertyNames.UnionWith(existingItem.Properties().Select(p => p.Name)); + + foreach (string propertyName in allPropertyNames) + { + JToken newToken; + JToken existingToken; + + if (newItem.TryGetValue(propertyName, out newToken) && + existingItem.TryGetValue(propertyName, out existingToken)) + { + string newValueWithoutSpaces = newToken.ToString().Replace(" ", ""); + string existingValueWithoutSpaces = existingToken.ToString().Replace(" ", ""); + + if (!newValueWithoutSpaces.Equals(existingValueWithoutSpaces)) + { + differences.Add(new DifferencePopup.Difference(propertyName, newToken.ToString(), + existingToken.ToString(), i)); + } + } + else if (!newItem.TryGetValue(propertyName, out newToken) && + existingItem.TryGetValue(propertyName, out existingToken)) + { + differences.Add(new DifferencePopup.Difference(propertyName, "N/A", + existingToken.ToString(), i)); + } + else if (newItem.TryGetValue(propertyName, out newToken) && + !existingItem.TryGetValue(propertyName, out existingToken)) + { + differences.Add(new DifferencePopup.Difference(propertyName, newToken.ToString(), "N/A", + i)); + } + } + } + else + { + Debug.LogError($"해당 인덱스에서 JSON 객체를 비교하지 못했습니다 {i}"); + } + } + else + { + // 추가된 행에 대한 차이를 처리합니다. + JObject newItem = i < newObj.Count ? newObj[i] as JObject : null; + JObject existingItem = i < existingObj.Count ? existingObj[i] as JObject : null; + JObject availableItem = newItem ?? existingItem; + string newValue, existingValue; + + foreach (var property in availableItem.Properties()) + { + if (newItem != null && newItem.TryGetValue(property.Name, out JToken newToken)) + { + newValue = newToken.ToString(); + } + else + { + newValue = "N/A"; + } + + if (existingItem != null && existingItem.TryGetValue(property.Name, out JToken existingToken)) + { + existingValue = existingToken.ToString(); + } + else + { + existingValue = "N/A"; + } + + differences.Add(new DifferencePopup.Difference(property.Name, newValue, existingValue, i)); + } + } + } + + return differences; + } + } +} \ No newline at end of file diff --git a/BlueWater/Assets/02.Scripts/Editor/ExcelToJsonConverter.cs.meta b/BlueWater/Assets/02.Scripts/Editor/ExcelToJsonConverter.cs.meta new file mode 100644 index 000000000..e3a4e8ecb --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Editor/ExcelToJsonConverter.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 15dc83aa064e348db8d3cd13a8ebd8b7 \ No newline at end of file diff --git a/BlueWater/Assets/Packages/ExcelDataReader.3.6.0.meta b/BlueWater/Assets/Packages/ExcelDataReader.3.6.0.meta new file mode 100644 index 000000000..8ddaa847e --- /dev/null +++ b/BlueWater/Assets/Packages/ExcelDataReader.3.6.0.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5f6124a557c154cb0bf3d78ad0cbda39 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/Packages/ExcelDataReader.3.6.0/.signature.p7s b/BlueWater/Assets/Packages/ExcelDataReader.3.6.0/.signature.p7s new file mode 100644 index 0000000000000000000000000000000000000000..918583fc9df62f9eb3df940aa52b5bfce2d5620a GIT binary patch literal 9495 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 + + + ExcelDataReader + 3.6.0 + ExcelDataReader developers + ExcelDataReader developers + false + MIT + https://licenses.nuget.org/MIT + https://github.com/ExcelDataReader/ExcelDataReader + https://nugetgallery.blob.core.windows.net/icons/ExcelDataReader.2.1.png + Lightweight and fast library written in C# for reading Microsoft Excel files (2.0-2007). + excel xls xlsx + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BlueWater/Assets/Packages/ExcelDataReader.3.6.0/ExcelDataReader.nuspec.meta b/BlueWater/Assets/Packages/ExcelDataReader.3.6.0/ExcelDataReader.nuspec.meta new file mode 100644 index 000000000..2ba4795f8 --- /dev/null +++ b/BlueWater/Assets/Packages/ExcelDataReader.3.6.0/ExcelDataReader.nuspec.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 412bb38b305a34e98addb3e0c647c80d +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/Packages/ExcelDataReader.3.6.0/lib.meta b/BlueWater/Assets/Packages/ExcelDataReader.3.6.0/lib.meta new file mode 100644 index 000000000..b6f6bfd79 --- /dev/null +++ b/BlueWater/Assets/Packages/ExcelDataReader.3.6.0/lib.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 874c347e659d4479396e802894f8c8e2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/Packages/ExcelDataReader.3.6.0/lib/net45.meta b/BlueWater/Assets/Packages/ExcelDataReader.3.6.0/lib/net45.meta new file mode 100644 index 000000000..178197f67 --- /dev/null +++ b/BlueWater/Assets/Packages/ExcelDataReader.3.6.0/lib/net45.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e9f2ec082b2aa42fd89317af82cc5c9f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/Packages/ExcelDataReader.3.6.0/lib/net45/ExcelDataReader.dll b/BlueWater/Assets/Packages/ExcelDataReader.3.6.0/lib/net45/ExcelDataReader.dll new file mode 100644 index 0000000000000000000000000000000000000000..767f8da736711c13380f725503be69592e3e3c89 GIT binary patch literal 161792 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ūhG+}-)P<~jCGWn)TR%nwPawcP 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%0D$P}QNENI>G1t01_I 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 literal 0 HcmV?d00001 diff --git a/BlueWater/Assets/Packages/ExcelDataReader.3.6.0/lib/net45/ExcelDataReader.dll.meta b/BlueWater/Assets/Packages/ExcelDataReader.3.6.0/lib/net45/ExcelDataReader.dll.meta new file mode 100644 index 000000000..c7534bb9d --- /dev/null +++ b/BlueWater/Assets/Packages/ExcelDataReader.3.6.0/lib/net45/ExcelDataReader.dll.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 6c73703c55c084c6aba39f15caad23af \ No newline at end of file diff --git a/BlueWater/Assets/Packages/ExcelDataReader.3.6.0/lib/net45/ExcelDataReader.xml b/BlueWater/Assets/Packages/ExcelDataReader.3.6.0/lib/net45/ExcelDataReader.xml new file mode 100644 index 000000000..dc62d59a8 --- /dev/null +++ b/BlueWater/Assets/Packages/ExcelDataReader.3.6.0/lib/net45/ExcelDataReader.xml @@ -0,0 +1,1680 @@ + + + + ExcelDataReader + + + + + A range for cells using 0 index positions. + + + + + Gets the column the range starts in + + + + + Gets the row the range starts in + + + + + Gets the column the range ends in + + + + + Gets the row the range ends in + + + + + If present the Calculate Message was in the status bar when Excel saved the file. + This occurs if the sheet changed, the Manual calculation option was on, and the Recalculate Before Save option was off. + + + + + Gets the string value. Encoding is only used with BIFF2-5 byte strings. + + + + + Represents blank cell + Base class for all cell types + + + + + Gets the zero-based index of row containing this cell. + + + + + Gets the zero-based index of column containing this cell. + + + + + Gets the extended format used for this cell. If BIFF2 and this value is 63, this record was preceded by an IXFE record containing the actual XFormat >= 63. + + + + + Gets the number format used for this cell. Only used in BIFF2 without XF records. Used by Excel 2.0/2.1 instead of XF/IXFE records. + + + + + + + + Gets a value indicating whether the cell's record identifier is BIFF2-specific. + The shared binary layout of BIFF2 cells are different from BIFF3+. + + + + + Represents BIFF BOF record + + + + + Gets the version. + + + + + Gets the type of the BIFF block + + + + + Gets the creation Id. + + Not used before BIFF5 + + + + Gets the creation year. + + Not used before BIFF5 + + + + Gets the file history flag. + + Not used before BIFF8 + + + + Gets the minimum Excel version to open this file. + + Not used before BIFF8 + + + + Represents Sheet record in Workbook Globals + + + + + Gets the worksheet data start offset. + + + + + Gets the worksheet type. + + + + + Gets the visibility of the worksheet. + + + + + Gets the name of the worksheet. + + + + + Represents additional space for very large records + + + + + Represents cell-indexing record, finishes each row values block + + + + + Gets the offset of first row linked with this record + + + + + Gets the addresses of cell values. + + + + + Gets the row height in twips + + + + + Represents Dimensions of worksheet + + + + + Gets the index of first row. + + + + + Gets the index of last row + 1. + + + + + Gets the index of first column. + + + + + Gets the index of last column + 1. + + + + + Represents BIFF EOF resord + + + + + Represents FILEPASS record containing XOR obfuscation details or a an EncryptionInfo structure + + + + + Represents a string value of format + + + + + Gets the string value. + + + + + Represents a cell containing formula + + + + + Indicates that a string value is stored in a String record that immediately follows this record. See[MS - XLS] 2.5.133 FormulaValue. + + + + + Indecates that the formula value is an empty string. + + + + + Indicates that the property is valid. + + + + + Indicates that the property is valid. + + + + + Indicates that the property is valid. + + + + + Gets the formula flags + + + + + Gets the formula value type. + + + + + Represents a string value of formula + + + + + Gets the string value. + + + + + Represents a string value of a header or footer. + + + + + Gets the string value. + + + + + Represents a worksheet index + + + + + Gets a value indicating whether BIFF8 addressing is used or not. + + + + + Gets the zero-based index of first existing row + + + + + Gets the zero-based index of last existing row + + + + + Gets the addresses of DbCell records + + + + + Represents a constant integer number in range 0..65535 + + + + + Gets the cell value. + + + + + Represents InterfaceHdr record in Wokrbook Globals + + + + + Gets the CodePage for Interface Header + + + + + [MS-XLS] 2.4.148 Label + Represents a string + + + + + Gets the cell value. + + + + + Represents a string stored in SST + + + + + Gets the index of string in Shared String Table + + + + + [MS-XLS] 2.4.168 MergeCells + If the count of the merged cells in the document is greater than 1026, the file will contain multiple adjacent MergeCells records. + + + + + Represents MSO Drawing record + + + + + Represents multiple Blank cell + + + + + Gets the zero-based index of last described column + + + + + Returns format forspecified column, column must be between ColumnIndex and LastColumnIndex + + Index of column + Format + + + + Represents multiple RK number cells + + + + + Gets the zero-based index of last described column + + + + + Returns format for specified column + + Index of column, must be between ColumnIndex and LastColumnIndex + The format. + + + + Gets the value for specified column + + Index of column, must be between ColumnIndex and LastColumnIndex + The value. + + + + Represents a floating-point number + + + + + Gets the value of this cell + + + + + For now QuickTip will do nothing, it seems to have a different + + + + + Represents basic BIFF record + Base class for all BIFF record types + + + + + Gets the type Id of this entry + + + + + Gets the data size of this entry + + + + + Gets the whole size of structure + + + + + Represents an RK number cell + + + + + Gets the value of this cell + + + + + Decodes RK-encoded number + + Encoded number + The number. + + + + Represents row record in table + + + + + Gets the zero-based index of row described + + + + + Gets the index of first defined column + + + + + Gets the index of last defined column + + + + + Gets a value indicating whether to use the default row height instead of the RowHeight property + + + + + Gets the row height in twips. + + + + + Gets a value indicating whether the XFormat property is used + + + + + Gets the default format for this row + + + + + Represents record with the only two-bytes value + + + + + Gets the value + + + + + Represents a Shared String Table in BIFF8 format + + + + + Gets the number of strings in SST + + + + + Gets the count of unique strings in SST + + + + + Parses strings out of the SST record and subsequent Continue records from the BIFF stream + + + + + Returns string at specified index + + Index of string to get + Workbook encoding + string value if it was found, empty string otherwise + + + + Represents a BIFF stream + + + + + Gets the size of BIFF stream in bytes + + + + + Gets or sets the current position in BIFF stream + + + + + Gets or sets the ICryptoTransform instance used to decrypt the current block + + + + + Gets or sets the current block number being decrypted with CipherTransform + + + + + Sets stream pointer to the specified offset + + Offset value + Offset origin + + + + Reads record under cursor and advances cursor position to next record + + The record -or- null. + + + + Returns record at specified offset + + The stream + The record -or- null. + + + + Create an ICryptoTransform instance to decrypt a 1024-byte block + + + + + Decrypt some dummy bytes to align the decryptor with the position in the current 1024-byte block + + + + + If present the Calculate Message was in the status bar when Excel saved the file. + This occurs if the sheet changed, the Manual calculation option was on, and the Recalculate Before Save option was off. + + + + + Represents Workbook's global window description + + + + + Gets the X position of a window + + + + + Gets the Y position of a window + + + + + Gets the width of the window + + + + + Gets the height of the window + + + + + Gets the window flags + + + + + Gets the active workbook tab (zero-based) + + + + + Gets the first visible workbook tab (zero-based) + + + + + Gets the number of selected workbook tabs + + + + + Gets the workbook tab width to horizontal scrollbar width + + + + + Word-sized string, stored as single bytes with encoding from CodePage record. Used in BIFF2-5 + + + + + Gets the number of characters in the string. + + + + + Gets the value. + + + + + Plain string without backing storage. Used internally + + + + + Byte sized string, stored as bytes, with encoding from CodePage record. Used in BIFF2-5 . + + + + + [MS-XLS] 2.5.240 ShortXLUnicodeString + Byte-sized string, stored as single or multibyte unicode characters. + + + + + Gets a value indicating whether the string is a multibyte string or not. + + + + + Helper class for parsing the BIFF8 Shared String Table (SST) + + + + + Gets or sets the offset into the current record's byte content. May point at the end when the current record has been parsed entirely. + + + + + Reads an SST string potentially spanning multiple records + + The string + + + + If the read position is exactly at the end of a record: + Read the next continue record and update the read position. + + + + + Advances the read position a number of bytes, potentially spanning + multiple records. + NOTE: If the new read position ends on a record boundary, + the next record will not be read, and the read position will point + at the end of the record! Must call EnsureRecord() as needed + to read the next continue record and reset the read position. + + Number of bytes to skip + + + + [MS-XLS] 2.5.293 XLUnicodeRichExtendedString + Word-sized formatted string in SST, stored as single or multibyte unicode characters potentially spanning multiple Continue records. + + + + + Gets the number of characters in the string. + + + + + Gets the flags. + + + + + Gets a value indicating whether the string has an extended record. + + + + + Gets a value indicating whether the string has a formatting record. + + + + + Gets a value indicating whether the string is a multibyte string or not. + + + + + Gets the number of formats used for formatting (0 if string has no formatting) + + + + + Gets the size of extended string in bytes, 0 if there is no one + + + + + Gets the head (before string data) size in bytes + + + + + Gets the tail (after string data) size in bytes + + + + + [MS-XLS] 2.5.294 XLUnicodeString + Word-sized string, stored as single or multibyte unicode characters. + + + + + Gets a value indicating whether the string is a multibyte string or not. + + + + + Represents Globals section of workbook + + + + + Gets or sets the Shared String Table of workbook + + + + + Represents Worksheet section in workbook + + + + + Gets the worksheet name + + + + + Gets the visibility of worksheet + + + + + Gets the worksheet data offset. + + + + + Find how many rows to read at a time and their offset in the file. + If rows are stored sequentially in the file, returns a block size of up to 32 rows. + If rows are stored non-sequentially, the block size may extend up to the entire worksheet stream + + + + + Reads additional records if needed: a string record might follow a formula result + + + + + Returns an index into Workbook.Formats for the given cell and preceding ixfe record. + + + + + Gets or sets the zero-based column index. + + + + + Common handling of extended formats (XF) and mappings between file-based and global number format indices. + + + + + Gets the dictionary of global number format strings. Always includes the built-in formats at their + corresponding indices and any additional formats specified in the workbook file. + + + + + Gets the the dictionary of mappings between format index in the file and key in the Formats dictionary. + + + + + Returns the global number format index from an XF index. + + + + + Returns the global number format index from a file-based format index. + + + + + Registers a number format string and its file-based format index in the workbook's Formats dictionary. + If the format string matches a built-in or previously registered format, it will be mapped to that index. + + + + + Registers an extended format and its file based number format index. + + + + + Represents single Root Directory record + + + + + Gets or sets the name of directory entry + + + + + Gets or sets the entry type + + + + + Gets or sets the entry "color" in directory tree + + + + + Gets or sets the SID of left sibling + + 0xFFFFFFFF if there's no one + + + + Gets or sets the SID of right sibling + + 0xFFFFFFFF if there's no one + + + + Gets or sets the SID of first child (if EntryType is STGTY_STORAGE) + + 0xFFFFFFFF if there's no one + + + + Gets or sets the CLSID of container (if EntryType is STGTY_STORAGE) + + + + + Gets or sets the user flags of container (if EntryType is STGTY_STORAGE) + + + + + Gets or sets the creation time of entry + + + + + Gets or sets the last modification time of entry + + + + + Gets or sets the first sector of data stream (if EntryType is STGTY_STREAM) + + if EntryType is STGTY_ROOT, this can be first sector of MiniStream + + + + Gets or sets the size of data stream (if EntryType is STGTY_STREAM) + + if EntryType is STGTY_ROOT, this can be size of MiniStream + + + + Gets or sets a value indicating whether this entry relats to a ministream + + + + + Gets or sets the prop type. Reserved, must be 0. + + + + + Reads bytes from a regular or mini stream. + + + + + The header contains the first 109 DIF entries. If there are any more, read from a separate stream. + + + + + Represents Excel file header + + + + + Gets or sets the file signature + + + + + Gets a value indicating whether the signature is valid. + + + + + Gets or sets the class id. Typically filled with zeroes + + + + + Gets or sets the version. Must be 0x003E + + + + + Gets or sets the dll version. Must be 0x0003 + + + + + Gets or sets the byte order. Must be 0xFFFE + + + + + Gets or sets the sector size in Pot + + + + + Gets the sector size. Typically 512 + + + + + Gets or sets the mini sector size in Pot + + + + + Gets the mini sector size. Typically 64 + + + + + Gets or sets the number of directory sectors. If Major Version is 3, the Number of + Directory Sectors MUST be zero. This field is not supported for version 3 compound files + + + + + Gets or sets the number of FAT sectors + + + + + Gets or sets the number of first Root Directory Entry (Property Set Storage, FAT Directory) sector + + + + + Gets or sets the transaction signature, 0 for Excel + + + + + Gets or sets the maximum size for small stream, typically 4096 bytes + + + + + Gets or sets the first sector of Mini FAT, FAT_EndOfChain if there's no one + + + + + Gets or sets the number of sectors in Mini FAT, 0 if there's no one + + + + + Gets or sets the first sector of DIF, FAT_EndOfChain if there's no one + + + + + Gets or sets the number of sectors in DIF, 0 if there's no one + + + + + Gets or sets the first 109 locations in the DIF sector chain + + + + + Reads completely through a CSV stream to determine encoding, separator, field count and row count. + Uses fallbackEncoding if there is no BOM. Throws DecoderFallbackException if there are invalid characters in the stream. + Returns the separator whose average field count is closest to its max field count. + + + + + Low level, reentrant CSV parser. Call ParseBuffer() in a loop, and finally Flush() to empty the internal buffers. + + + + + Helpers class + + + + + Determines whether the encoding is single byte or not. + + The encoding. + + if the specified encoding is single byte; otherwise, . + + + + + Convert a double from Excel to an OA DateTime double. + The returned value is normalized to the '1900' date mode and adjusted for the 1900 leap year bug. + + + + + The common workbook interface between the binary and OpenXml formats + + A type implementing IWorksheet + + + + The common worksheet interface between the binary and OpenXml formats + + + + + Parse ECMA-376 number format strings from Excel and other spreadsheet softwares. + + + + + Initializes a new instance of the class. + + The number format string. + + + + Gets a value indicating whether the number format string is valid. + + + + + Gets the number format string. + + + + + Gets a value indicating whether the format represents a DateTime + + + + + Gets a value indicating whether the format represents a TimeSpan + + + + + Parses as many placeholders and literals needed to format a number with optional decimals. + Returns number of tokens parsed, or 0 if the tokens didn't form a number. + + + + + A seekable stream for reading an EncryptedPackage blob using OpenXml Agile Encryption. + + + + + Represents "Agile Encryption" used in XLSX (Office 2010 and newer) + + + + + Base class for the various encryption schemes used by Excel + + + + + Gets a value indicating whether XOR obfuscation is used. + When true, the ICryptoTransform can be cast to XorTransform and + handle the special case where XorArrayIndex must be manipulated + per record. + + + + + Represents the binary RC4+MD5 encryption header used in XLS. + + + + + Minimal RC4 decryption compatible with System.Security.Cryptography.SymmetricAlgorithm. + + + + + Represents the binary "Standard Encryption" header used in XLS and XLSX. + XLS uses RC4+SHA1. XLSX uses AES+SHA1. + + + + + 2.3.5.2 RC4 CryptoAPI Encryption Key Generation + + + + + 2.3.4.7 ECMA-376 Document Encryption Key Generation (Standard Encryption) + + + + + Represents "XOR Deobfucation Method 1" used in XLS. + + + + + Minimal Office "XOR Deobfuscation Method 1" implementation compatible + with System.Security.Cryptography.SymmetricAlgorithm. + + + + + Generates a 16 byte obfuscation array based on the POI/LibreOffice implementations + + + + + Gets or sets the obfuscation array index. BIFF obfuscation uses a different XorArrayIndex per record. + + + + + Base class for worksheet stream elements + + + + + Shared string table + + + + + Logic for the Excel dimensions. Ex: A15 + + The value. + The column, 1-based. + The row, 1-based. + + + + Gets or sets the zero-based row index. + + + + + Gets or sets the height of this row in points. Zero if hidden or collapsed. + + + + + Gets or sets the cells in this row. + + + + + Gets a value indicating whether the row is empty. NOTE: Returns true if there are empty, but formatted cells. + + + + + Returns the zero-based maximum column index reference on this row. + + + + + Initializes a new instance of the class. + + The zip file stream. + + + + Gets the shared strings stream. + + The shared strings stream. + + + + Gets the styles stream. + + The styles stream. + + + + Gets the workbook stream. + + The workbook stream. + + + + Gets the worksheet stream. + + The sheet id. + The worksheet stream. + + + + Gets the workbook rels stream. + + The rels stream. + + + + ExcelDataReader Class + + + + + A generic implementation of the IExcelDataReader interface using IWorkbook/IWorksheet to enumerate data. + + A type implementing IWorkbook + A type implementing IWorksheet + + + + + + + + + + Configuration options for an instance of ExcelDataReader. + + + + + Gets or sets a value indicating the encoding to use when the input XLS lacks a CodePage record, + or when the input CSV lacks a BOM and does not parse as UTF8. Default: cp1252. (XLS BIFF2-5 and CSV only) + + + + + Gets or sets the password used to open password protected workbooks. + + + + + Gets or sets an array of CSV separator candidates. The reader autodetects which best fits the input data. Default: , ; TAB | # (CSV only) + + + + + Gets or sets a value indicating whether to leave the stream open after the IExcelDataReader object is disposed. Default: false + + + + + Gets or sets a value indicating the number of rows to analyze for encoding, separator and field count in a CSV. + When set, this option causes the IExcelDataReader.RowCount property to throw an exception. + Default: 0 - analyzes the entire file (CSV only, has no effect on other formats) + + + + + The ExcelReader Factory + + + + + Creates an instance of or + + The file stream. + The configuration object. + The excel data reader. + + + + Creates an instance of + + The file stream. + The configuration object. + The excel data reader. + + + + Creates an instance of + + The file stream. + The reader configuration -or- to use the default configuration. + The excel data reader. + + + + Creates an instance of ExcelCsvReader + + The file stream. + The reader configuration -or- to use the default configuration. + The excel data reader. + + + + Thrown when there is a problem parsing the Compound Document container format used by XLS and password-protected XLSX. + + + + + Initializes a new instance of the class. + + The error message + + + + Initializes a new instance of the class. + + The error message + The inner exception + + + + Base class for exceptions thrown by ExcelDataReader + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The error message + + + + Initializes a new instance of the class. + + The error message + The inner exception + + + + Initializes a new instance of the class. + + The serialization info + The streaming context + + + + Thrown when ExcelDataReader cannot parse the header + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The error message + + + + Initializes a new instance of the class. + + The error message + The inner exception + + + + Initializes a new instance of the class. + + The serialization info + The streaming context + + + + Thrown when ExcelDataReader cannot open a password protected document because the password + + + + + Initializes a new instance of the class. + + The error message + + + + Header and footer text. + + + + + Gets a value indicating whether the header and footer are different on the first page. + + + + + Gets a value indicating whether the header and footer are different on odd and even pages. + + + + + Gets the header used for the first page if is . + + + + + Gets the footer used for the first page if is . + + + + + Gets the header used for odd pages -or- all pages if is . + + + + + Gets the footer used for odd pages -or- all pages if is . + + + + + Gets the header used for even pages if is . + + + + + Gets the footer used for even pages if is . + + + + + The ExcelDataReader interface + + + + + Gets the sheet name. + + + + + Gets the sheet VBA code name. + + + + + Gets the sheet visible state. + + + + + Gets the sheet header and footer -or- if none set. + + + + + Gets the list of merged cell ranges. + + + + + Gets the number of results (workbooks). + + + + + Gets the number of rows in the current result. + + + + + Gets the height of the current row in points. + + + + + Seeks to the first result. + + + + + Gets the number format for the specified field -or- if there is no value. + + The index of the field to find. + The number format string of the specified field. + + + + Gets the number format index for the specified field -or- -1 if there is no value. + + The index of the field to find. + The number format index of the specified field. + + + + Gets the width the specified column. + + The index of the column to find. + The width of the specified column. + + + + Custom interface for logging messages + + + + + Debug level of the specified message. The other method is preferred since the execution is deferred. + + The message. + The formatting. + + + + Info level of the specified message. The other method is preferred since the execution is deferred. + + The message. + The formatting. + + + + Warn level of the specified message. The other method is preferred since the execution is deferred. + + The message. + The formatting. + + + + Error level of the specified message. The other method is preferred since the execution is deferred. + + The message. + The formatting. + + + + Fatal level of the specified message. The other method is preferred since the execution is deferred. + + The message. + The formatting. + + + + Factory interface for loggers. + + + + + Create a logger for the specified type. + + The type to create a logger for. + The logger instance. + + + + logger type initialization + + + + + Sets up logging to be with a certain type + + The type of ILog for the application to use + + + + Initializes a new instance of a logger for an object. + This should be done only once per object name. + + The type to get a logger for. + ILog instance for an object if log type has been intialized; otherwise a null logger. + + + + The default logger until one is set. + + + + + + + + + + + + + + + + + + + + + + + 2.0 version of LogExtensions, not as awesome as Extension methods + + + + + Gets the logger for a type. + + The type to fetch a logger for. + The type to get the logger for. + Instance of a logger for the object. + This method is thread safe. + + + diff --git a/BlueWater/Assets/Packages/ExcelDataReader.3.6.0/lib/net45/ExcelDataReader.xml.meta b/BlueWater/Assets/Packages/ExcelDataReader.3.6.0/lib/net45/ExcelDataReader.xml.meta new file mode 100644 index 000000000..dfa8bb078 --- /dev/null +++ b/BlueWater/Assets/Packages/ExcelDataReader.3.6.0/lib/net45/ExcelDataReader.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8f98804c557f343d89e91641ebffb974 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0.meta b/BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0.meta new file mode 100644 index 000000000..bcc82933a --- /dev/null +++ b/BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 81abb8eb25c6f480f8d77a3dbd6033f2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/.signature.p7s b/BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/.signature.p7s new file mode 100644 index 0000000000000000000000000000000000000000..050fbd0985ee57f62bed13948dba9900e049e908 GIT binary patch literal 9464 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 + + + ExcelDataReader.DataSet + 3.6.0 + ExcelDataReader developers + ExcelDataReader developers + false + MIT + https://licenses.nuget.org/MIT + https://github.com/ExcelDataReader/ExcelDataReader + https://nugetgallery.blob.core.windows.net/icons/ExcelDataReader.2.1.png + ExcelDataReader extension for reading Microsoft Excel files into System.Data.DataSet. + excel xls xlsx dataset + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/ExcelDataReader.DataSet.nuspec.meta b/BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/ExcelDataReader.DataSet.nuspec.meta new file mode 100644 index 000000000..1fd5298e8 --- /dev/null +++ b/BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/ExcelDataReader.DataSet.nuspec.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b51ada754e72f4180b67e9bebbbe20ce +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/lib.meta b/BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/lib.meta new file mode 100644 index 000000000..77b5ff69b --- /dev/null +++ b/BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/lib.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 11109328dc6ce4ac9928da300b3c1ea0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/lib/net35.meta b/BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/lib/net35.meta new file mode 100644 index 000000000..5c7cd2a20 --- /dev/null +++ b/BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/lib/net35.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 476e04bb22293496d905dcc20aea52c7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/lib/net35/ExcelDataReader.DataSet.dll b/BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/lib/net35/ExcelDataReader.DataSet.dll new file mode 100644 index 0000000000000000000000000000000000000000..88e6002e7c9a4ca037c48fb1a800f9cfb83e74d4 GIT binary patch literal 9728 zcmeHMdvqM-b-y#aJF~lz*V0 zfBNZ?%))gy>~3MCf#}64Bg}BGKB9b}_tz73<#>O{GdAVAX!}8Ln$a$vHTGvgpZFXA zWD+amN|0bb|4 z;$q)a^3hXEiS|T^0>YgJOA!CWH2IlWw9-Rgg;XI5dn$Ar{%8e?YR(}F&JWrlJo2=n z9YK#7grt0~^Heo+E+pkO9uwoORe0u=`Qz&jNF)YA(RT#JB~aw-65tt_-Utsx@fB8mt%Q+ZdzZ zoH_$d_4=QnV-H8DmCy6A<61ew zh9;$p0HRu0D_snP%_75E*yn^(B0`oTUhOrAlu{H!(8lNnmxeX-JXX*(2{x>o%RmNT zxfIW^uV_cq7xt;i3W`>$GF9MHxG-2Y7gffo zD_09wa0$X|j&RlSB1E?ky5GfMp=QFW)RtKdpq^<-?^EfbH-QCF7yeI^m36pI^^|A|*b}@kpRyZF>Kjv7lVyU2*mO*nZ zt0LmC7M~l|DztDQs+IX*>g^a>U%=W=ygfgxkDz9iXfPZs*O9n&;2#NV?T;&1?|L8SH?_B!ux>GFa(c>iH&1>EW6gIlZg0=?pCJ&vyx2`X)-FtS%oF%T* zz){Rpa#43{GoE`u^QKy|A#L^pv%;SoCod|+7*K@y5qx%H@R^Yqp0bi7!hXIX#?s?0rksixbTqDXp!SUZ@b0EXxT=!dA?$F0J`U*=`L0#1lZh5xQntA*$~g>~MC4;uX%HbYb> zI$u|@`r+b?aQq5QDg{)m_4sOpQjoXrc^!&-Euhb2x;4gqe1oplD#1A})B#$q)~g1su-YFxzr8XJ~fZlxYV86 z)u5Uj>Z}`m3Tn2)m0hEcgX(dqJM;ojNtarpw;=Ps%QQU5D-F5To(UHSu{zTr|M-hFBT-Q!YU_FfI@ZyZWI!y<#6$GimvD!qa-MGjG< zDy`!w06yamf3J@@-$qF*^f}S|!(f0o17ScPEf9PWV31Y<7ErywMuDvYw+XyVU_#&% zfC`P#!UiE zfID^~>NxO)$iyTa^G(9?B zJ%kxBNgLF-!tquqchV-cUYVqR{TT9d5#p+*NA&f|&*)~QMM+7d5kCK_G0LN3>LN-4 z#s!a4l->irkUj(~p^zs|WmE)MMXLeVQZrx^-3xdL{T*N@9R>V6V58V+5<3aOCk5Uo z@UXyV1s)Z6Odu)TyCN_qut8v-z=Hx03p^^2RMw9PY!KKda6;fgfrkaor>!(dzoq}g z*;c{&&8xAgK7h1#` z093Kk>cH~=Rm|N0@DQL%bHU@4Ef08D*0l(rimc8Be;%NU9XbrW5b#{ghMVYCdX?rW z-U&W~^UlFDjcBJb2m+2wU2RI2;2zm;9Cn*>gQ%RU=d8myYpmI=^k5##)tJnt%uL@( zYD?K!JX$l^s#UacB$MoOA60ZgyE!nDHZG*jF*|Dv#hVk^1hr%a+RVg&;2Vs=RA!1A zvXiEjPW9*1o6L0DkZ$bwMMlQ3Qc3DC5(CsYFhCbHnVH?G!4b<~OI?Y6^mF;HT^ka~ z%du~7Oc`nDblV1uj0|N&XKeTkDjQSjtYJA?vkf@X&OL^aoh@WvHsLm`4)coHVs!p{ zq>kk?Hf$Lh&W<@AZB7gsTPrKV+Yo z-DppxkXoBl_ONMlI%!kF-jfxqVDJh?3Vpm zBV%Ji%+|y}8`}-*%)-{pZqph{@Kj2qKT|6=l%hAghi1c0TB%_+GA(rCk`^6CIp<^8|mHDWjd#5YT2JO zWK?*{7?vyqokli3kWN#py?F!=E}vE`5;EL^IEx0kgNaEjIy2|1=$^uu>PQOkl)Ozl zfu2v5B;BP%a+Is64r8~w`iKjz!Q6^8!>#E`6DFqg3=YyeY*;d#bJk=QCS_6Njt}K$1R?#^iIPX zO(hN6t#7QBSf)WXCX>c+wrLM9B(~&Qs(Qc}aDzy>Y)OSp8&mt)Z(ar*b!W-4rxWc& zFf})(Jetmr(-0}MF%dJ#M3y$ne4s7;d$IJNZYozeT<7 zV7M7?6M>DSorX;#mStpI+{7a1n#1PNBqW>~#qd$PIcjj*+z5*vhc~stOUI{jxTI%p z0-|yXgEgi$f*GzOA=ElFY+6~yHXBz6!F2?#ySxVqGh~_kr3El_|QAUmc|B-id&pEIC=92q2 z4Cnvy!{Zys6C=eNQxv}sAUvPZP(b(kBlVGjNTYv##PCGc`Bi^RjjBB|B<0`9ofCcaHDilcT)F$P3m*K3x3BSs7QAz;|FJi&`qi)g_M`WH_sfF1N1mzt zucFC{j<229@y0X$oy#wL;on~P&d(1WEP3i=wE4iv`v!cwzNpT-Yrz)|{&)QFudm)Y zoS~mS{?v{4POd%c`kUTrS{pq2ai**HQjfl`>BvuhQMvY8cRhC`yz5&nPk*%JYi~XR zH*nO{)Bu8Z#+5N=%vCLV^q%p*FBbS2@!-GL13`IQ>rl`Rf z^tmSeL%-1vSuu|7hvhjt(Z8= zb3aw_TD<$hTjDB(;zE=eHT|mxs#o^c)K%72Rwe6dYy0af>sMFT*RHIpudJ&~R`&NN zR#xH#Z?Qr}r}>sMFM%F9c=kW7T6E((Bd_nNo<{^SppJMMb-A0OCl^#16)*s>mNU&Ha+>U*>k zEjxE^8xCEt{`x1iPs$JP)T7U3=ltsjCBJyNv#aE>Z(jRQ|KV%*FZ=Yo;YV)%;*jzB z;C1Z8`HOo#CZ&BVryj5K=mg#spTNh5+{Gh^H}SL#_b6T-kMg&(85h5In|XC~Hg|6O z@U`~?OP6o?UdapZd$+W`$2OYQ^y2#+?@@NI!KWMEXLx7~s~2CQdOssiy=MR3UU#s2 zGe)+m=Cd^8!vpvsw5f4bO)a?&?6O@4ILPZ)UGmaB^~Y~Jbgl8x3+~4$cKjX2V~owd zav!lA34S41&FOS|B9$Te>17ylAamQDTnaO%r(?Fw|Cb#8ZBB>ob2;@4RKk^qR$I zy-m1xG!Ug_p=1u@_1pqWpYkftZxZ;*J@Jh~ zE;i{bH!cH@X50#_Cdh)FlUQALna{yvyi|{L z*f-(Z2y%=c0aI50Si3~m(fNq$RC}jqc{;~s@Vy4JVKw@$#`(G*R2_0(i@OTG)B&pn zw;psow5kDXp;sjw)=c8=$6o^6O0?#yPR6(q6=TEx5Tt2jHilYt>MJ+e(|+)H|M~ip YGJpi~x5MAf*lPbIdw*{He<}n213a?icmMzZ literal 0 HcmV?d00001 diff --git a/BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/lib/net35/ExcelDataReader.DataSet.dll.meta b/BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/lib/net35/ExcelDataReader.DataSet.dll.meta new file mode 100644 index 000000000..faa844507 --- /dev/null +++ b/BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/lib/net35/ExcelDataReader.DataSet.dll.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: e72d261c8145e4bc8bde46077607e051 \ No newline at end of file diff --git a/BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/lib/net35/ExcelDataReader.DataSet.xml b/BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/lib/net35/ExcelDataReader.DataSet.xml new file mode 100644 index 000000000..4cdb2290a --- /dev/null +++ b/BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/lib/net35/ExcelDataReader.DataSet.xml @@ -0,0 +1,71 @@ + + + + ExcelDataReader.DataSet + + + + + ExcelDataReader DataSet extensions + + + + + Converts all sheets to a DataSet + + The IExcelDataReader instance + An optional configuration object to modify the behavior of the conversion + A dataset with all workbook contents + + + + Processing configuration options and callbacks for IExcelDataReader.AsDataSet(). + + + + + Gets or sets a value indicating whether to set the DataColumn.DataType property in a second pass. + + + + + Gets or sets a callback to obtain configuration options for a DataTable. + + + + + Gets or sets a callback to determine whether to include the current sheet in the DataSet. Called once per sheet before ConfigureDataTable. + + + + + Processing configuration options and callbacks for AsDataTable(). + + + + + Gets or sets a value indicating the prefix of generated column names. + + + + + Gets or sets a value indicating whether to use a row from the data as column names. + + + + + Gets or sets a callback to determine which row is the header row. Only called when UseHeaderRow = true. + + + + + Gets or sets a callback to determine whether to include the current row in the DataTable. + + + + + Gets or sets a callback to determine whether to include the specific column in the DataTable. Called once per column after reading the headers. + + + + diff --git a/BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/lib/net35/ExcelDataReader.DataSet.xml.meta b/BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/lib/net35/ExcelDataReader.DataSet.xml.meta new file mode 100644 index 000000000..81c4d3f4d --- /dev/null +++ b/BlueWater/Assets/Packages/ExcelDataReader.DataSet.3.6.0/lib/net35/ExcelDataReader.DataSet.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4ebc419a397284610a2762f00b7f8200 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/Resources/Excel.meta b/BlueWater/Assets/Resources/Excel.meta new file mode 100644 index 000000000..e15fce0b7 --- /dev/null +++ b/BlueWater/Assets/Resources/Excel.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0b452a245db9f424f92f4238ded49adc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/Resources/Excel/customer_table.xlsx b/BlueWater/Assets/Resources/Excel/customer_table.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e2d588d3ac599df8bec96b1f9601ac4fab444e86 GIT binary patch literal 12135 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

`_Y18%D1<$(FXOCi5-8t#5ZixfH5= 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 literal 0 HcmV?d00001 diff --git a/BlueWater/Assets/Resources/Excel/customer_table.xlsx.meta b/BlueWater/Assets/Resources/Excel/customer_table.xlsx.meta new file mode 100644 index 000000000..2d5d873cd --- /dev/null +++ b/BlueWater/Assets/Resources/Excel/customer_table.xlsx.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 868f1f5f8663c4fe0b2c271f50f4606d +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/Resources/JSON.meta b/BlueWater/Assets/Resources/JSON.meta new file mode 100644 index 000000000..d9f82b6f4 --- /dev/null +++ b/BlueWater/Assets/Resources/JSON.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 91449ffd9dec84c5284a14b729455f7d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/Resources/JSON/customer_table.json b/BlueWater/Assets/Resources/JSON/customer_table.json new file mode 100644 index 000000000..dcf9ddb4e --- /dev/null +++ b/BlueWater/Assets/Resources/JSON/customer_table.json @@ -0,0 +1,172 @@ +[ + { + "idx": 10001, + "name": "wildman1", + "speed": 3, + "hurry": 3, + "wait": 3, + "base_happy_point": 30, + "taste_1": 2, + "taste_2": 1, + "taste_3": 0, + "picky_1": 11, + "picky_2": 0, + "picky_3": 0, + "bully": 0, + "tip": 11100, + "dialogue": 101 + }, + { + "idx": 10002, + "name": "wildman2", + "speed": 3, + "hurry": 3, + "wait": 3, + "base_happy_point": 30, + "taste_1": 2, + "taste_2": 1, + "taste_3": 0, + "picky_1": 11, + "picky_2": 0, + "picky_3": 0, + "bully": 0, + "tip": 22200, + "dialogue": 101 + }, + { + "idx": 10003, + "name": "viking1", + "speed": 3, + "hurry": 3, + "wait": 3, + "base_happy_point": 30, + "taste_1": 2, + "taste_2": 1, + "taste_3": 0, + "picky_1": 31, + "picky_2": 0, + "picky_3": 0, + "bully": 1, + "tip": 22200, + "dialogue": 102 + }, + { + "idx": 10004, + "name": "viking2", + "speed": 3, + "hurry": 3, + "wait": 3, + "base_happy_point": 30, + "taste_1": 2, + "taste_2": 1, + "taste_3": 0, + "picky_1": 31, + "picky_2": 0, + "picky_3": 0, + "bully": 0, + "tip": 32200, + "dialogue": 102 + }, + { + "idx": 10005, + "name": "pirate1", + "speed": 3, + "hurry": 3, + "wait": 3, + "base_happy_point": 30, + "taste_1": 1, + "taste_2": 2, + "taste_3": 0, + "picky_1": 41, + "picky_2": 0, + "picky_3": 0, + "bully": 0, + "tip": 33300, + "dialogue": 103 + }, + { + "idx": 10006, + "name": "oldman1", + "speed": 1, + "hurry": 1, + "wait": 1, + "base_happy_point": 30, + "taste_1": 1, + "taste_2": 2, + "taste_3": 0, + "picky_1": 41, + "picky_2": 0, + "picky_3": 0, + "bully": 1, + "tip": 44200, + "dialogue": 104 + }, + { + "idx": 10007, + "name": "soldier1", + "speed": 2, + "hurry": 2, + "wait": 2, + "base_happy_point": 30, + "taste_1": 1, + "taste_2": 2, + "taste_3": 0, + "picky_1": 41, + "picky_2": 0, + "picky_3": 0, + "bully": 0, + "tip": 65432, + "dialogue": 105 + }, + { + "idx": 10008, + "name": "soldier2", + "speed": 2, + "hurry": 2, + "wait": 2, + "base_happy_point": 20, + "taste_1": 1, + "taste_2": 2, + "taste_3": 0, + "picky_1": 21, + "picky_2": 0, + "picky_3": 0, + "bully": 0, + "tip": 105400, + "dialogue": 106 + }, + { + "idx": 10009, + "name": "chinaman1", + "speed": 2, + "hurry": 2, + "wait": 1, + "base_happy_point": 20, + "taste_1": 1, + "taste_2": 2, + "taste_3": 0, + "picky_1": 21, + "picky_2": 0, + "picky_3": 0, + "bully": 0, + "tip": 1510500, + "dialogue": 107 + }, + { + "idx": 10010, + "name": "knight1", + "speed": 2, + "hurry": 2, + "wait": 1, + "base_happy_point": 20, + "taste_1": 1, + "taste_2": 2, + "taste_3": 0, + "picky_1": 21, + "picky_2": 0, + "picky_3": 0, + "bully": 1, + "tip": 20201000, + "dialogue": 108 + } +] \ No newline at end of file diff --git a/BlueWater/Assets/Resources/JSON/customer_table.json.meta b/BlueWater/Assets/Resources/JSON/customer_table.json.meta new file mode 100644 index 000000000..80a15e359 --- /dev/null +++ b/BlueWater/Assets/Resources/JSON/customer_table.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e306e1af477c947e2b759b1d56078e0f +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/packages.config b/BlueWater/Assets/packages.config index f987c4f43..8f4f124c1 100644 --- a/BlueWater/Assets/packages.config +++ b/BlueWater/Assets/packages.config @@ -1,4 +1,6 @@  + + \ No newline at end of file From ca89b2d13bfcd848d13626d2e291355f99faf0a9 Mon Sep 17 00:00:00 2001 From: IDMhan Date: Sun, 7 Apr 2024 14:56:58 +0900 Subject: [PATCH 2/2] Closes #228 Customer AI Improve --- .../02.Scripts/Npc/Guest/FindTableState.cs | 38 +++++++++++++++++-- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/BlueWater/Assets/02.Scripts/Npc/Guest/FindTableState.cs b/BlueWater/Assets/02.Scripts/Npc/Guest/FindTableState.cs index 7bac93dc6..e1a00b222 100644 --- a/BlueWater/Assets/02.Scripts/Npc/Guest/FindTableState.cs +++ b/BlueWater/Assets/02.Scripts/Npc/Guest/FindTableState.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; @@ -76,12 +77,41 @@ namespace BlueWaterProject { if (!npc.DoSeat) { - foreach (var table in tables) + // 확률 결정 + var probability = Random.Range(0f, 1f); + + if (probability <= 0.7f) { - foreach (var seat in table.SeatPoints) + // 70% 확률: 비어 있는 좌석 중에서 랜덤 선택 + var availableSeats = new List(); + foreach (var table in tables) { - if (seat.IsUsing) continue; - AssignSeatToNpc(seat); + foreach (var seat in table.SeatPoints) + { + if (!seat.IsUsing) availableSeats.Add(seat); + } + } + + if (availableSeats.Count > 0) + { + var randomIndex = Random.Range(0, availableSeats.Count); + AssignSeatToNpc(availableSeats[randomIndex]); + return; + } + } + else + { + // 30% 확률: 모든 좌석 중에서 랜덤 선택 + var allSeats = new List(); + foreach (var table in tables) + { + allSeats.AddRange(table.SeatPoints); + } + + if (allSeats.Count > 0) + { + var randomIndex = Random.Range(0, allSeats.Count); + AssignSeatToNpc(allSeats[randomIndex]); return; } }