/// <summary> /// gets object by id /// </summary> /// <param name="id">id</param> /// <returns>object with specified id or null if not found</returns> public FBClassObject getObject(int id) { FBClassObject res = null; objects.TryGetValue(id, out res); return(res); }
/// <summary> /// create a new object of this class and add it /// </summary> /// <returns>added object</returns> public FBClassObject addObject() { FBClassObject obj = new FBClassObject(); obj.id = nextObjectId; obj.classId = classDef.id; addObject(obj); return(obj); }
/// <summary> /// fills data from an FBClassObject /// </summary> /// <param name="data">source data</param> /// <param name="destName">name of destination child object</param> /// <returns>true on success, false on failure</returns> public bool fillData(FBClassObject data, string destName) { GameObject dest = transform.Find(destName).gameObject; if (dest) { return(fillData(data, dest)); } return(false); }
/// <summary> /// adds object /// </summary> /// <param name="obj">object</param> /// <returns>true on success, false on failure</returns> public bool addObject(FBClassObject obj) { objects[obj.id] = obj; if (obj.id >= nextObjectId) { nextObjectId = obj.id + 1; } modified = true; return(true); }
/// <summary> /// create a clone of current object /// </summary> /// <returns>cloned object</returns> public FBClassObject clone() { FBClassObject res = new FBClassObject(); res.id = id; res.classId = classId; foreach (KeyValuePair <string, FBValue> p in fieldValues) { res.fieldValues[p.Key] = p.Value.clone(); } return(res); }
public void ShowTextObject(string textID, GameObject obj) { FBClassData TextObject = FBGameData.instance.getClassData("TextUIObject"); FBClassObject objTmp = TextObject.getObject("TextID", new FBValue(FBDataType.String, textID)); string name = TextObject.getObject("TextID", new FBValue(FBDataType.String, textID)).getFieldValue("Name").stringValue; string culture = TextObject.getObject("TextID", new FBValue(FBDataType.String, textID)).getFieldValue("Culture").stringValue; string author = TextObject.getObject("TextID", new FBValue(FBDataType.String, textID)).getFieldValue("Author").stringValue; string content = TextObject.getObject("TextID", new FBValue(FBDataType.String, textID)).getFieldValue("Content").stringValue; obj.transform.findChildRecursively("Name").GetComponentInChildren <Text>().text = name; obj.transform.findChildRecursively("Culture").GetComponentInChildren <Text>().text = culture; obj.transform.findChildRecursively("Author").GetComponentInChildren <Text>().text = author; obj.transform.findChildRecursively("Content").GetComponentInChildren <Text>().text = content; obj.transform.findChildRecursively("UIManager").GetComponent <UIElement>().Show(true); }
void ConstructCombinationMapDatabase() { Dictionary <int, FBClassObject> listAllItems = FBGameData.instance.getClassData("CombinationMap").objects; foreach (KeyValuePair <int, FBClassObject> item in listAllItems) { FBClassObject itemData = item.Value; CombinationMap newMap = new CombinationMap(); newMap.ItemId01 = itemData.getFieldValue("itemId01").intValue; newMap.ItemId02 = itemData.getFieldValue("itemId02").intValue; newMap.ItemIdFinal = itemData.getFieldValue("itemidFinal").intValue; newMap.Duration = itemData.getFieldValue("duration").floatValue; //newItem.Prefabs = FBPoolManager.instance.getPoolObject(newItem.prefabName); combinationDatabase.Add(newMap); } }
void ConstructQuestDatabase() { Dictionary <int, FBClassObject> listAllQuest = FBGameData.instance.getClassData("GroupGameQuest").objects; foreach (KeyValuePair <int, FBClassObject> item in listAllQuest) { FBClassObject itemData = item.Value; QuestData q = new QuestData(); q.mainQuestId = item.Value.getFieldValue("mainQuestId").intValue; q.mainQuestName = item.Value.getFieldValue("mainQuestName").stringValue; q.subQuestId = item.Value.getFieldValue("subQuestId").intValue; q.subQuestName = item.Value.getFieldValue("subQuestName").stringValue; q.requireItemId = item.Value.getFieldValue("requireItemId").intValue; q.requireNum = item.Value.getFieldValue("requireNum").intValue; q.questObjectName = item.Value.getFieldValue("questObjectName").stringValue; q.questObjectRewardPref = item.Value.getFieldValue("questObjectRewardPref").stringValue; listQuestData.Add(q); } }
void ConstructItemDatabase() { Dictionary <int, FBClassObject> listAllItems = FBGameData.instance.getClassData("GroupGameItems").objects; foreach (KeyValuePair <int, FBClassObject> item in listAllItems) { FBClassObject itemData = item.Value; Item newItem = new Item(); newItem.Id = (int)itemData.getFieldValue("itemId").intValue; newItem.Title = itemData.getFieldValue("title").stringValue; newItem.Power = (int)itemData.getFieldValue("power").floatValue; newItem.Description = itemData.getFieldValue("description").stringValue; newItem.iconName = itemData.getFieldValue("iconName").stringValue; newItem.prefabName = itemData.getFieldValue("prefabName").stringValue; newItem.Sprite = Resources.Load <Sprite>("Prefabs/UI/Sprites/Items/" + newItem.iconName); newItem.Stackable = itemData.getFieldValue("stackable").intValue; newItem.ReceiveItemId = itemData.getFieldValue("receiveItemId").intValue; //newItem.Prefabs = FBPoolManager.instance.getPoolObject(newItem.prefabName); itemDatabase.Add(newItem); } }
/// <summary> /// fills data from an FBClassObject /// </summary> /// <param name="data">source data</param> /// <param name="dest">destination child object</param> /// <returns>true on success, false on failure</returns> public bool fillData(FBClassObject data, GameObject dest = null) { // if dest is not specified, fill data to self if (dest == null) { dest = gameObject; } FBUIEx[] list = dest.GetComponentsInChildren <FBUIEx>(true); if (list == null || list.Length <= 0) { return(false); } // call fillData() on each element for (int i = 0; i < list.Length; i++) { list[i].fillData(data); } return(true); }
/// <summary> /// returns a list of objects which match the condition /// </summary> /// <param name="fieldNames">field names</param> /// <param name="values">field values</param> /// <returns>list of objects which match the condition</returns> public List <FBClassObject> getObjects(string[] fieldNames, FBValue[] values) { List <FBClassObject> list = new List <FBClassObject>(); foreach (KeyValuePair <int, FBClassObject> p in objects) { FBClassObject obj = p.Value; bool equal = true; for (int i = 0; i < fieldNames.Length; i++) { if (!obj.getFieldValue(fieldNames[i]).equals(values[i])) { equal = false; break; } } if (equal) { list.Add(p.Value); } } return(list); }
/// <summary> /// load all objects of a class /// </summary> /// <param name="json">json string</param> /// <returns>true on success, false on failure</returns> bool loadClassObjects(string json) { JObject classDataJson = JsonConvert.DeserializeObject(json) as JObject; FBClassData classData = getClassData((string)classDataJson["name"]); FBClassDefinition classDef = classData.classDef; JArray classObjectsJson = classDataJson["data"] as JArray; for (int i = 0; i < classObjectsJson.Count; i++) { JObject classObjectJson = classObjectsJson[i] as JObject; int id = int.Parse((string)classObjectJson["id"]); FBClassObject classObject = new FBClassObject(); classObject.id = id; classObject.classId = classDef.id; foreach (KeyValuePair <string, FBClassField> p in classDef.fieldsByName) { FBValue val = new FBValue(p.Value.dataType, (string)classObjectJson[p.Value.name]); classObject.setFieldValue(p.Value.name, val); } classData.addObject(classObject); } classData.modified = false; return(true); }
/// <summary> /// returns a string to display on ui /// </summary> /// /// <param name="id2name">convert class object id to name if possible</param> /// <returns>string</returns> public string getDisplayString(bool id2name = false) { if (dataType >= FBDataType.Class1) { if (id2name) { // try to return object name instead of id FBClassData classData = FBGameData.instance.getClassData((int)dataType); FBClassObject classObject = classData.getObject(intValue); if (classObject == null) { return(intValue.ToString()); } FBValue val = classObject.getFieldValue("Name"); if (val != null) { return(val.stringValue); } val = classObject.getFieldValue("name"); if (val != null) { return(val.stringValue); } } return(intValue.ToString()); } if (dataType == FBDataType.Int) { return(intValue.ToString()); } if (dataType == FBDataType.Float) { return(floatValue.ToString()); } return(stringValue); }
/// <summary> /// fills data from an FBClassObject /// </summary> /// <param name="data">source data</param> /// <returns>true on success, false on failure</returns> public bool fillData(FBClassObject data) { this.data = data; if (string.IsNullOrEmpty(fieldName)) { return(false); // not a field } FBValue val = data.getFieldValue(fieldName); if (val == null) { return(false); // not this field } if (text) { text.text = val.getDisplayString(true); } if (image && val.dataType == FBDataType.Image) { string imageName = FBGameData.instance.pathToDatabaseResources + val.stringValue; imageName = imageName.Substring(0, imageName.LastIndexOf(".")); image.sprite = Resources.Load <Sprite>(imageName); } if (isModel3D) { // TODO: clean up and optimize // clean up transform.destroyChildren(); // since we are going to modify the model, we must clone a pooled object instead of directly using it GameObject poolObject = FBPoolManager.instance.getPoolObject(val.stringValue); model3D = GameObject.Instantiate <GameObject>(poolObject, transform); FBPoolManager.instance.returnObjectToPool(poolObject); model3D.transform.localPosition = Vector3.zero; //model3D.transform.localRotation = Quaternion.identity; //model3D.transform.localScale = Vector3.one; model3D.transform.localRotation = Quaternion.Euler(model3D.transform.localRotation.eulerAngles.x, model3D.transform.localRotation.eulerAngles.y - 90, model3D.transform.localRotation.eulerAngles.z); // cannot activate 3d model here // script components will run and mess up Invoke("activateModel3D", 0.1f); // model3D.SetActive(true); // only keep ui components string[] componentsToKeep = new string[] { "Transform", "MeshRenderer", "MeshFilter" }; Component[] components = model3D.GetComponentsInChildren <Component>(true); for (int i = 0; i < components.Length; i++) { string typeName = components[i].GetType().Name; bool remove = true; for (int j = 0; j < componentsToKeep.Length; j++) { if (typeName == componentsToKeep[j]) { remove = false; break; } } if (remove) { GameObject.Destroy(components[i] as UnityEngine.Object); } } model3DSize = 0; } return(true); }