コード例 #1
0
ファイル: FBData.cs プロジェクト: 1453006/DatLD_MultiPlayerVR
    /// <summary>
    /// returns a field value by its name
    /// </summary>
    /// <param name="fieldName">field name</param>
    /// <returns>value of specified field</returns>
    public FBValue getFieldValue(string fieldName)
    {
        FBValue fieldValue = null;

        fieldValues.TryGetValue(fieldName, out fieldValue);
        return(fieldValue);
    }
コード例 #2
0
    /// <summary>
    /// executes a script
    /// </summary>
    /// <param name="text">script content to run</param>
    /// <returns>true on success, false on failure</returns>
    public bool run(string text)
    {
        if (string.IsNullOrEmpty(text))
        {
            onFinished();
            return(false);
        }

        cmdIdx  = cmdCount = 0;
        timer   = 0;
        nextCmd = false;
        cmdData = null;

        string[] lines      = text.Split('\n');
        int      linesCount = lines.Length;

        data = new FBValue[linesCount][];

        for (int i = 0; i < linesCount; i++)
        {
            string[] paramTexts = lines[i].Trim().Split(' ');
            if (paramTexts == null || paramTexts.Length <= 0)
            {
                continue;                 // empty line
            }
            int paramsCount = 0;
            while (paramsCount < paramTexts.Length &&
                   paramTexts[paramsCount].Length > 0 &&
                   !paramTexts[paramsCount].StartsWith("//"))
            {
                paramsCount++;
            }
            if (paramsCount <= 0)
            {
                continue;                 // line commented out
            }
            // parse line content
            data[cmdCount] = new FBValue[paramsCount];
            for (int j = 0; j < paramsCount; j++)
            {
                data[cmdCount][j] = new FBValue(paramTexts[j], true);
            }

            cmdCount++;
        }

        if (cmdCount <= 0)
        {
            onFinished();
            return(false);
        }

        gameObject.SetActive(true);
        return(true);
    }
コード例 #3
0
ファイル: FBData.cs プロジェクト: 1453006/DatLD_MultiPlayerVR
 /// <summary>
 /// returns an object which matches the condition
 /// </summary>
 /// <param name="fieldName">field name</param>
 /// <param name="value">value to compare</param>
 /// <returns>object which matches the condition</returns>
 public FBClassObject getObject(string fieldName, FBValue value)
 {
     foreach (KeyValuePair <int, FBClassObject> p in objects)
     {
         if (p.Value.getFieldValue(fieldName).equals(value))
         {
             return(p.Value);
         }
     }
     return(null);
 }
コード例 #4
0
ファイル: FBData.cs プロジェクト: 1453006/DatLD_MultiPlayerVR
    /// <summary>
    /// returns a list of objects which match the condition
    /// </summary>
    /// <param name="fieldName">field name</param>
    /// <param name="value">value to compare</param>
    /// <returns>list of objects which match the condition</returns>
    public List <FBClassObject> getObjects(string fieldName, FBValue value)
    {
        List <FBClassObject> list = new List <FBClassObject>();

        foreach (KeyValuePair <int, FBClassObject> p in objects)
        {
            if (p.Value.getFieldValue(fieldName).equals(value))
            {
                list.Add(p.Value);
            }
        }
        return(list);
    }
コード例 #5
0
ファイル: FBData.cs プロジェクト: 1453006/DatLD_MultiPlayerVR
    /// <summary>
    /// sets a field value by its name
    /// </summary>
    /// <param name="fieldName">field name</param>
    /// <param name="value">value</param>
    /// <returns>true on success, false on failure</returns>
    public bool setFieldValue(string fieldName, FBValue value)
    {
        fieldValues[fieldName] = value;

        FBClassData classData = FBGameData.instance.getClassData(classId);

        if (classData != null)
        {
            classData.modified = true;
        }

        return(true);
    }
コード例 #6
0
ファイル: FBData.cs プロジェクト: 1453006/DatLD_MultiPlayerVR
    /// <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);
    }
コード例 #7
0
ファイル: FBData.cs プロジェクト: 1453006/DatLD_MultiPlayerVR
    /// <summary>
    /// compares current value to another value
    /// </summary>
    /// <param name="val">value to compare</param>
    /// <returns>int.MinValue if two values cannot be compared, negative number if current value is smaller, zero if two values are equal, negative number if current value is larger</returns>
    public int compareTo(FBValue val)
    {
        if (val.dataType != dataType)
        {
            return(int.MinValue);
        }

        if (dataType == FBDataType.Int || dataType >= FBDataType.Class1)
        {
            return(intValue == val.intValue ? 0 : (intValue > val.intValue ? 1 : -1));
        }

        if (dataType == FBDataType.Float)
        {
            return(floatValue == val.floatValue ? 0 : (floatValue > val.floatValue ? 1 : -1));
        }

        if (dataType == FBDataType.String)
        {
            return(stringValue.CompareTo(val.stringValue));
        }

        return(int.MinValue);
    }
コード例 #8
0
ファイル: FBData.cs プロジェクト: 1453006/DatLD_MultiPlayerVR
    /// <summary>
    /// checks if current value is equal to another value
    /// </summary>
    /// <param name="val">value to check</param>
    /// <returns>true if two values are equal, false otherwise</returns>
    public bool equals(FBValue val)
    {
        if (val.dataType != dataType)
        {
            return(false);
        }

        if (dataType == FBDataType.Int || dataType >= FBDataType.Class1)
        {
            return(val.intValue == intValue);
        }

        if (dataType == FBDataType.Float)
        {
            return(val.floatValue == floatValue);
        }

        if (dataType == FBDataType.String)
        {
            return(val.stringValue == stringValue);
        }

        return(false);
    }
コード例 #9
0
ファイル: FBData.cs プロジェクト: 1453006/DatLD_MultiPlayerVR
 /// <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);
 }
コード例 #10
0
ファイル: FBData.cs プロジェクト: 1453006/DatLD_MultiPlayerVR
 /// <summary>
 /// check whether an FBValue is null or emtpy
 /// </summary>
 /// <param name="val">value to check</param>
 /// <returns>true or false</returns>
 public static bool isNullOrEmpty(FBValue val)
 {
     return(val == null || val.dataType == FBDataType.None);
 }
コード例 #11
0
ファイル: FBUIEx.cs プロジェクト: 1453006/DatLD_MultiPlayerVR
    /// <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);
    }