Exemple #1
0
    //actualize the prefab with the data from its row of the imported file
    void ActualizeCard(GameObject obj, C_RowData rowData, KingsCardStyleList cardStyleList, string styleName)
    {
        for (int i = 0; i < importData.targets.Length; i++)
        {
            string s = importData.targets[i];
            if (!string.IsNullOrEmpty(s))
            {
                switch (s)
                {
                case "EventScript":
                    EventScript es = obj.GetComponent <EventScript>();
                    if (es == null)
                    {
                        Debug.LogWarning("GameObject '" + obj.ToString() + "' has no EventScript. Skipping values.");
                    }
                    else
                    {
                        es.SetImportData(importData.headers[i], rowData.entries[i]);
                    }
                    break;

                case "CardStyle":
                    CardStyle cardStyleScript = obj.GetComponent <CardStyle>();
                    if (cardStyleScript == null)
                    {
                        Debug.LogWarning("GameObject '" + obj.ToString() + "' has no CardStyle Script. Skipping values.");
                    }
                    else
                    {
                        KingsCardStyle cardStyle = styleDefinitions.GetStyle(styleName);
                        if (styleDefinitions.GetOverwriteStyle(styleName))
                        {
                            cardStyleScript.SetStyle(cardStyle);
                            //cardStyleScript.SetStyleName(styleName);
                            cardStyleScript.Refresh();
                        }
                        else
                        {
                            //overwrite is not wanted
                        }
                    }

                    break;

                default:
                    Debug.LogWarning("Unknown target for import data: '" + s + "'");
                    break;
                }
            }
        }
    }
Exemple #2
0
    public void AnalyzeImportData()
    {
        importData = null;//This is intentional.

        //Open the text asset
        if (importFile == null)
        {
            importState = E_ImportState.Analyzed_Error;
            importInfo  = "File for importing is not defined.";
            return;
        }

        if (styleDefinitions == null)
        {
            importState = E_ImportState.Analyzed_Error;
            importInfo  = "Style file for importing is not defined.";
            return;
        }

        importData = new C_RawImportData();

        fs = getFS(); //use the configured fieldseparator

        mDebug("Fieldseparator: " + fs);
        mDebug("Input file: " + importFile.text);

        //Sometimes unity is not very nice, therefore using an text read workaround for importFile.text, if it is encoded with "illegal" characters:
        byte[] importBytes = importFile.bytes;
        for (int i = 0; i < importBytes.Length; i++)
        {
            if ((importBytes[i] & 0x80) > 0)
            {
                Debug.LogWarning("Import data could contain illegal character: 0x" + System.Convert.ToInt32(importBytes[i]).ToString("X") + ". Please check the resulting text and consider storing the import file in UTF8 encoding. If character is illegal is will be replaced by '�'. The corresponding row will be marked '�!', if no row was marked this was a false alarm.");
            }
        }
        string importText = Encoding.UTF8.GetString(importBytes);

        //split file correctly for \r\n and \n
        importLines = importText.Replace("\r\n", "\n").Split('\n');

        for (int i = 0; i < importLines.Length; i++)
        {
            mDebug("Line " + i.ToString() + ": '" + importLines[i] + "'");
        }

        importData.headers = importUnescape(importLines[0]);
        importData.targets = new string[importData.headers.Length];
        for (int i = 0; i < importData.headers.Length; i++)
        {
            //string[] hSplit;
            mDebug("importdata.headers " + i.ToString() + ": " + importData.headers[i]);

            if (importData.headers[i].Contains('.'))
            {
                importData.targets[i] = importData.headers[i].Split('.')[0];
                importData.headers[i] = importData.headers[i].Split('.')[1];
            }
        }

        for (int i = 1; i < importLines.Length; i++)
        {
            if (string.IsNullOrEmpty(importLines[i]) == false)
            {
                C_RowData col = new C_RowData();

                if (importLines[i].Contains('\uFFFD'))
                {
                    col.rowError = true;
                    col.rowInfo += "�! ";
                }

                col.entries = importUnescape(importLines[i]);
                importData.rows.Add(col);
            }
            else
            {
                Debug.Log("ImExCards: empty line removed.");
            }
        }

        //search through the import file and get the number of different styles
        //get the column
        importData.styleIndex    = -1;
        importData.groupIndex    = -1;
        importData.cardNameIndex = -1;
        for (int i = 0; i < importData.headers.Length; i++)
        {
            if (importData.headers[i] == "StyleName")
            {
                importData.styleIndex = i;
            }
            if (importData.headers[i] == "CardName")
            {
                importData.cardNameIndex = i;
            }
            if (importData.headers[i] == "GroupName")
            {
                importData.groupIndex = i;
            }

            mDebug("Header col. " + i.ToString() + ": " + importData.headers[i]);
        }



        //error if no found
        if (importData.styleIndex == -1 || importData.cardNameIndex == -1 || importData.groupIndex == -1)
        {
            importInfo = "";
            if (importData.styleIndex == -1)
            {
                importInfo += "Could not find 'StyleName' coloumn within the data.\n";
            }
            if (importData.cardNameIndex == -1)
            {
                importInfo += "Could not find 'CardName' coloumn within the data.\n";
            }
            if (importData.groupIndex == -1)
            {
                importInfo += "Could not find 'GroupName' coloumn within the data.\n";
            }

            importState = E_ImportState.Analyzed_Error;
            return;
        }

        //clean the group-and cardName of invalid characters
        foreach (C_RowData row in importData.rows)
        {
            string s = row.entries[importData.cardNameIndex];
            foreach (var c in Path.GetInvalidFileNameChars())
            {
                s = s.Replace(c, '-');
            }
            row.entries[importData.cardNameIndex] = s;

            s = row.entries[importData.groupIndex];
            foreach (var c in Path.GetInvalidFileNameChars())
            {
                s = s.Replace(c, '-');
            }
            row.entries[importData.groupIndex] = s;
        }


        //make a dictionary out of the styles
        Dictionary <string, string> importStyles = new Dictionary <string, string>();
        int nrOfStyles = 0;

        foreach (C_RowData row in importData.rows)
        {
            string key = row.entries[importData.styleIndex];
            if (!importStyles.ContainsKey(key))
            {
                importStyles.Add(key, "irrelevant");
                nrOfStyles++;
            }
        }

        //test each import row if card style exists
        string missingStyles         = "";
        int    numberOfMissingStyles = 0;
        int    rowCnt = 1;

        foreach (C_RowData row in importData.rows)
        {
            string style = row.entries[importData.styleIndex];
            if (styleDefinitions.HasStyle(style))
            {
                row.rowInfo += "Style OK.";
            }
            else
            {
                row.rowInfo += "Style Error.";
                row.rowError = true;

                if (!missingStyles.Contains(" " + style + ";"))
                {
                    numberOfMissingStyles++;
                    missingStyles += " " + style + ";";
                }
            }

            rowCnt++;
        }
        if (numberOfMissingStyles > 0)
        {
            importState = E_ImportState.Analyzed_Error;
            importInfo  = "Missing " + numberOfMissingStyles.ToString() + " card styles: " + missingStyles;
            return;
        }

        string styleDefinitionErrors = styleDefinitions.GetCardStyleDefinitionErrors();

        if (styleDefinitionErrors != "")
        {
            importInfo  = styleDefinitionErrors;
            importState = E_ImportState.Imported_Error;
            return;
        }

        importState = E_ImportState.Analyzed_OK;
        importInfo  = "OK.";
    }