private void SerializeScriptableObject(int assetId, ScriptableObject scriptableObject, List <ScriptableObjectData> outputList) { var type = scriptableObject.GetType(); var fields = GetSerializeableFields(type); if (!fields.Any()) { return; } var data = new ScriptableObjectData { Name = scriptableObject.name, Id = assetId, }; outputList.Add(data); foreach (var f in fields) { var value = f.GetValue(scriptableObject); var jsonValue = JsonConvert.SerializeObject(value, Formatting.None, mJsonSettings); data.Fields.Add(new FieldData() { Name = f.Name, Json = jsonValue, }); } }
// private variables //private float counter; void Start() { // Set the ScriptableObjectData variables. soData = gameObject.GetComponent <ScriptableObjectData>(); personInDoor = personManager.GetComponent <PersonManager>().person.GetComponent <Person>(); // Set a new person initNewPerson(0); }
//Handles building items/creature parts protected void BuildItem(string _dir, ItemTypeStruct _ItemStruct) { GameObject item = new GameObject(); if (currentWindowName == "Weapon Builder" || currentWindowName == "Armour Builder" || currentWindowName == "Creature Builder") { if (!aspectMode) { item = GameObject.Find("PartViewHolders").transform.GetChild(0).gameObject; } else if (aspectMode) { item = GameObject.Find("PartViewHolders").transform.GetChild(1).gameObject; } } if (currentWindowName.Contains("Part") || currentWindowName == "Potion Builder" || currentWindowName == "Material Builder") { if (aspectMode) { if (item.GetComponent <MeshFilter>() == null) { item.AddComponent <MeshFilter>().mesh = objectData.Mesh; } if (item.GetComponent <MeshRenderer>() == null) { item.AddComponent <MeshRenderer>().material = objectData.Mat; } if (item.GetComponent <BoxCollider>() == null) { item.AddComponent <BoxCollider>(); } } else { if (item.GetComponent <SpriteRenderer>() == null) { item.AddComponent <SpriteRenderer>().sprite = objectData.Sprite; } item.GetComponent <SpriteRenderer>().material = objectData.Mat; if (item.GetComponent <BoxCollider2D>() == null) { item.AddComponent <BoxCollider2D>(); } } item.AddComponent <ScriptableObjectHolder>().data = objectData; } item.name = itemName; string itemNameCombined = itemName + ".prefab"; if (itemNameCombined != "" && objectData != null) { if (item.GetComponent <ScriptableObjectHolder>() != null) { ScriptableObjectData itemData = CreateInstance <ScriptableObjectData>(); if (_ItemStruct.isFullItem) { itemData = Instantiate(itemBaseData); } else { itemData = Instantiate(objectData); } if (!aspectMode) { GameObject.Find("PartViewHolders").transform.GetChild(0).gameObject.name = "PartHolder2D"; } else { GameObject.Find("PartViewHolders").transform.GetChild(1).gameObject.name = "PartHolder3D"; } itemData.AspectMode = aspectMode; foreach (int i in Enum.GetValues(typeof(Rarity))) { if (rarityID == i) { itemData.Rarity = (Rarity)i; } } AssetDatabase.CreateAsset(itemData, "Assets/Resources/BuiltItems/" + folderNames[m_saveDirIndex] + "/" + itemName + ".asset"); item.GetComponent <ScriptableObjectHolder>().data = (ScriptableObjectData)AssetDatabase.LoadAssetAtPath("Assets/Resources/BuiltItems/" + folderNames[m_saveDirIndex] + "/" + itemName + ".asset", typeof(ScriptableObjectData)); Debug.Log("Building item"); if (m_holder.transform.GetChild(0).GetChild(m_slotIndex).GetComponent <SpriteRenderer>() != null) { m_holder.transform.GetChild(0).GetChild(m_slotIndex).GetComponent <SpriteRenderer>().color = Color.white; } PrefabUtility.SaveAsPrefabAsset(item, "Assets/Resources/BuiltItems/" + folderNames[m_saveDirIndex] + "/" + itemNameCombined); AssetDatabase.Refresh(); for (int i = 0; i < m_itemPos.Length; ++i) { m_itemPos[i] = new Vector3(0, 0, 0); } } if (currentWindowName.Contains("Part") || currentWindowName == "Potion Builder" || currentWindowName == "Material Builder") { DestroyImmediate(GameObject.Find(item.name)); } ResetSlotValues(); DestroyImmediate(GameObject.Find("New Game Object")); ClearObjectData(); } }
//Contains the basic blocks for a window protected void BaseFunction() { CreateLabel(25, new RectOffset(5, 0, 5, 0), currentWindowName); LoadFolders(); if (m_loadData) { objectData = Resources.Load <ScriptableObjectData>("BuiltItems/Utility/ScriptableObjectData/Material"); Rarities = Resources.LoadAll("BuiltItems/Utility/ScriptableObjectData/RarityData/", typeof(RarityBaseData)); itemBaseData = Resources.Load <ItemBase>("BuiltItems/Utility/ScriptableObjectData/ItemBase"); m_holder = GameObject.Find("PartViewHolders").transform; m_slot2DPrefab = Resources.Load <GameObject>("BuiltItems/Utility/Slot2D"); m_slot3DPrefab = Resources.Load <GameObject>("BuiltItems/Utility/Slot3D"); foreach (RarityBaseData r in Rarities) { if (!RaritiesList.Contains(r)) { RaritiesList.Add(r); } } ViewItem(m_holder.GetChild(0).gameObject); Debug.Log("Loading data"); m_loadData = false; } for (int i = 0; i < slotAmount; ++i) { if (!m_slotNames.Contains("Slot " + (i + 1))) { m_slotNames.Add("Slot " + (i + 1)); } } for (int i = 0; i < m_buttonNames.Length - 2; ++i) { if (m_buttonNames[i].Contains(currentWindowName)) { CreateLabel(15, new RectOffset(5, 0, 15, 0), "Item + Creature Name"); itemName = GUILayout.TextField(itemName); CreateLabel(15, new RectOffset(5, 0, 25, 0), "Description"); itemDescription = GUILayout.TextField(itemDescription); CreateLabel(15, new RectOffset(5, 0, 15, 0), "Current aspect mode " + m_aspectName); if (aspectMode) { m_aspectName = "3D"; } else { m_aspectName = "2D"; } if (GUILayout.Button("Change Aspect Mode")) { if (aspectMode) { aspectMode = false; } else { aspectMode = true; } PartIDs = new int[slotAmount]; } rarityID = EditorGUILayout.Popup("Rarity", rarityID, Enum.GetNames(typeof(Rarity))); if (currentWindowName == "Weapon Part Builder" || currentWindowName == "Armour Part Builder" || currentWindowName == "Material Builder" || currentWindowName == "Creature Part Builder" || currentWindowName == "Potion Builder") { DisplayItemSpriteMesh(); } switch (currentWindowName) { case "Armour Builder": m_type = ItemType.eArmourPart; slotAmount = 7; break; case "Weapon Builder": m_type = ItemType.eWeaponPart; slotAmount = 4; break; case "Creature Builder": m_type = ItemType.eCreaturePart; slotAmount = 17; break; case "Potion Builder": case "Material Builder": case "Weapon Part Builder": case "Armour Part Builder": m_type = ItemType.eMaterial; slotAmount = 1; break; default: break; } CreateLabel(15, new RectOffset(5, 0, 15, 0), "Save To:"); m_saveDirIndex = EditorGUILayout.Popup("", m_saveDirIndex, folderNames.ToArray()); break; } } }
private void Init(ScriptableObjectData data) { _health = data.health; _attack = data.attack; }
void Start() { // set the object data to the correct script instance. objectData = GameObject.Find("Game Manager").GetComponent <ScriptableObjectData>(); }