예제 #1
0
    /// <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);
    }
예제 #2
0
    /// <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);
    }
예제 #3
0
    /// <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);
    }
예제 #4
0
 /// <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);
 }
예제 #5
0
    /// <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);
    }
예제 #6
0
    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);
    }
예제 #7
0
    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);
        }
    }
예제 #9
0
    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);
        }
    }
예제 #10
0
    /// <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);
    }
예제 #11
0
    /// <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);
    }
예제 #12
0
    /// <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);
    }
예제 #13
0
 /// <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);
 }
예제 #14
0
    /// <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);
    }