Ejemplo n.º 1
0
    /* ******************************************************** */
    //! Get Material

    /*!
     * @param	TextureNo
     *      Serial-number of using texture
     * @param	Operation
     *      Color-Blend Operation for the target
     * @retval	Return-Value
     *      Material
     */
    public Material MaterialGet(int TextureNo, Library_SpriteStudio.KindColorOperation Operation)
    {
        int MaterialNo = TextureNo * ((int)Library_SpriteStudio.KindColorOperation.TERMINATOR - 1);

        MaterialNo += (int)Operation - 1;
        return(((null != TableMaterial) && (0 <= TextureNo)) ? TableMaterial[MaterialNo] : null);
    }
    /* ******************************************************** */
    //! Get Material

    /*!
     * @param	IndexCellMap
     *      Serial-number of using Cell-Map
     * @param	Operation
     *      Color-Blend Operation for the target
     * @retval	Return-Value
     *      Material
     */
    public Material MaterialGet(int IndexCellMap, Library_SpriteStudio.KindColorOperation KindOperation)
    {
        return(((0 <= IndexCellMap) && (DataCellMap.ListDataCellMap.Length > IndexCellMap) &&
                (Library_SpriteStudio.KindColorOperation.NON < KindOperation) && (Library_SpriteStudio.KindColorOperation.TERMINATOR_EFFECT > KindOperation)
                )
                                ? TableMaterial[(IndexCellMap * ((int)Library_SpriteStudio.KindColorOperation.TERMINATOR_EFFECT - 1)) + ((int)KindOperation - 1)]
                                : null
               );
    }
    public override void OnInspectorGUI()
    {
        Script_SpriteStudio_PartsRoot Data = (Script_SpriteStudio_PartsRoot)target;

        EditorGUILayout.LabelField("[SpriteStudio Parts-Root]");
        int LevelIndent = 0;

        EditorGUILayout.Space();
        FoldOutMaterialTable = EditorGUILayout.Foldout(FoldOutMaterialTable, "Based-Material Table");
        if (true == FoldOutMaterialTable)
        {
            EditorGUI.indentLevel = LevelIndent + 1;
            if (null != Data.TableMaterial)
            {
                int CountShader   = (int)(Library_SpriteStudio.KindColorOperation.TERMINATOR - 1);
                int Count         = Data.TableMaterial.Length / CountShader;
                int MaterialNoTop = 0;
                Library_SpriteStudio.KindColorOperation MaterialTableNo = 0;
                string NameField = "";
                for (int i = 0; i < Count; i++)
                {
                    MaterialNoTop = i * (int)(Library_SpriteStudio.KindColorOperation.TERMINATOR - 1);
                    EditorGUILayout.LabelField("Material No ["
                                               + MaterialNoTop
                                               + "-"
                                               + ((MaterialNoTop + CountShader) - 1)
                                               + "]: Texture-"
                                               + i
                                               );

                    EditorGUI.indentLevel = LevelIndent + 2;
                    for (int j = 0; j < CountShader; j++)
                    {
                        MaterialTableNo = (Library_SpriteStudio.KindColorOperation)(j + 1);
                        NameField       = "Shader [" + MaterialTableNo.ToString() + "]";
                        Data.TableMaterial[MaterialNoTop + j] = (Material)(EditorGUILayout.ObjectField(NameField, Data.TableMaterial[MaterialNoTop + j], typeof(Material), false));
                    }
                    EditorGUILayout.Space();
                    EditorGUI.indentLevel = LevelIndent + 1;
                }
            }
            EditorGUI.indentLevel = LevelIndent;
        }
        EditorGUILayout.Space();

        FoldOutAnimationInformation = EditorGUILayout.Foldout(FoldOutAnimationInformation, "Animation Information");
        if (true == FoldOutAnimationInformation)
        {
            EditorGUI.indentLevel = LevelIndent + 1;
            if (null != Data.ListInformationPlay)
            {
                for (int i = 0; i < Data.ListInformationPlay.Length; i++)
                {
                    EditorGUILayout.LabelField("Animation No [" + i + "]: Name[" + Data.ListInformationPlay[i].Name + "]");

                    EditorGUI.indentLevel = LevelIndent + 2;
                    EditorGUILayout.LabelField("Start Frame-No [" + Data.ListInformationPlay[i].FrameStart.ToString("D5") + "]");
                    EditorGUILayout.LabelField("End Frame-No [" + Data.ListInformationPlay[i].FrameEnd.ToString("D5") + "]");

                    float FPS = 1.0f / (float)Data.ListInformationPlay[i].FramePerSecond;
                    EditorGUILayout.LabelField("Base FPS [" + Data.ListInformationPlay[i].FramePerSecond.ToString("D3") + "]:(" + FPS.ToString() + " Sec.)");
                    EditorGUILayout.Space();

                    EditorGUI.indentLevel = LevelIndent + 1;
                }
            }
            EditorGUI.indentLevel = LevelIndent;
        }
        EditorGUILayout.Space();

        FoldOutPlayInformation = EditorGUILayout.Foldout(FoldOutPlayInformation, "Initial/Preview Play Setting");
        if (true == FoldOutPlayInformation)
        {
            bool FlagUpdate = false;
            EditorGUI.indentLevel = LevelIndent + 1;

            string[] NameAnimation  = new string[Data.ListInformationPlay.Length];
            int[]    IndexAnimation = new int[Data.ListInformationPlay.Length];
            for (int i = 0; i < Data.ListInformationPlay.Length; i++)
            {
                IndexAnimation[i] = i;
                NameAnimation[i]  = Data.ListInformationPlay[i].Name;
            }
            int AnimationNo = EditorGUILayout.IntPopup("Animation Name", Data.AnimationNo, NameAnimation, IndexAnimation);
            if (Data.AnimationNo != AnimationNo)
            {
                Data.AnimationNo = AnimationNo;
                FlagUpdate       = true;
            }

            int FrameNoEnd     = Data.ListInformationPlay[Data.AnimationNo].FrameEnd - Data.ListInformationPlay[Data.AnimationNo].FrameStart;
            int FrameNoInitial = EditorGUILayout.IntField("Start Offset Frame-No", Data.FrameNoInitial);
//			int FrameNoInitial = EditorGUILayout.IntSlider("Start Offset Frame-No", Data.FrameNoInitial, 0, FrameNoEnd);
            EditorGUILayout.LabelField("(This-Value influences only at Initial)");
            EditorGUILayout.LabelField("(Don't set Negative-Value or OverRun-Value)");
            if (0 > FrameNoInitial)
            {
                FrameNoInitial = 0;
            }
            if (FrameNoEnd < FrameNoInitial)
            {
                FrameNoInitial = FrameNoEnd;
            }
            if (Data.FrameNoInitial != FrameNoInitial)
            {
                Data.FrameNoInitial = FrameNoInitial;
                FlagUpdate          = true;
            }

            EditorGUILayout.Space();
            Data.RateTimeAnimation = EditorGUILayout.FloatField("Rate Time-Progress", Data.RateTimeAnimation);
            EditorGUILayout.LabelField("(set Negative-Value, Play Backwards.)");

            EditorGUILayout.Space();
            Data.PlayTimes = EditorGUILayout.IntField("Number of Plays", Data.PlayTimes);
            EditorGUILayout.LabelField("(1: No Loop / 0: Infinite Loop)");

            EditorGUILayout.Space();
            if (true == GUILayout.Button("Reset (Reinitialize)"))
            {
                Data.AnimationNo       = 0;
                Data.FrameNoInitial    = 0;
                Data.RateTimeAnimation = 1.0f;
                Data.PlayTimes         = 0;
                FlagUpdate             = true;
            }

            EditorGUI.indentLevel = LevelIndent;

            if (true == FlagUpdate)
            {
                Data.AnimationPlay(AnimationNo, Data.PlayTimes, -1, 0.0f);
            }
        }
        EditorGUILayout.Space();

        FoldOutDrawSetting = EditorGUILayout.Foldout(FoldOutDrawSetting, "Rendering Setting");
        if (true == FoldOutDrawSetting)
        {
            EditorGUI.indentLevel = LevelIndent + 1;

            int   CountKindQueue = (int)Script_SpriteStudio_PartsRoot.KindDrawQueue.OVERLAY + 1;
            int[] IndexDrawKind  = new int[CountKindQueue];
            for (int i = 0; i < CountKindQueue; i++)
            {
                IndexDrawKind[i] = i;
            }
            int KindRenderQueueBaseNo = (int)Data.KindRenderQueueBase;
            KindRenderQueueBaseNo    = EditorGUILayout.IntPopup("Render-Queue Base", KindRenderQueueBaseNo, NameDrawKind, IndexDrawKind);
            Data.KindRenderQueueBase = (Script_SpriteStudio_PartsRoot.KindDrawQueue)KindRenderQueueBaseNo;
            EditorGUI.indentLevel    = LevelIndent + 2;
            EditorGUILayout.LabelField("Details [" + NameDrawKind[KindRenderQueueBaseNo] + "]");
            switch ((Script_SpriteStudio_PartsRoot.KindDrawQueue)KindRenderQueueBaseNo)
            {
            case Script_SpriteStudio_PartsRoot.KindDrawQueue.SHADER_SETTING:
                EditorGUILayout.LabelField("- Value Base: Defined Tag\"Queue\" in Shader (Default: Transparent)");
                EditorGUILayout.LabelField("- Offset Range: Depend on Tag\"Queue\"(Default: 0-999)");
                break;

            case Script_SpriteStudio_PartsRoot.KindDrawQueue.USER_SETTING:
                EditorGUILayout.LabelField("- Value Base: 0");
                EditorGUILayout.LabelField("- Offset Range: 1000-4999");
                break;

            default:
                EditorGUILayout.LabelField("- Value Base: " + Script_SpriteStudio_PartsRoot.ValueKindDrawQueue[KindRenderQueueBaseNo]);
                EditorGUILayout.LabelField("- Offset Range: 0-" + (Script_SpriteStudio_PartsRoot.ValueKindDrawQueue[KindRenderQueueBaseNo + 1] - Script_SpriteStudio_PartsRoot.ValueKindDrawQueue[KindRenderQueueBaseNo] - 1));
                break;
            }
            EditorGUI.indentLevel = LevelIndent + 1;

            EditorGUILayout.Space();
            Data.OffsetDrawQueue = EditorGUILayout.IntField("Render-Queue Offset", Data.OffsetDrawQueue);

            EditorGUILayout.Space();
            Data.RateDrawQueueEffectZ = EditorGUILayout.FloatField("Rate Z Effect", Data.RateDrawQueueEffectZ);
            EditorGUILayout.LabelField("(\"This-Value x ViewPort-Z\" Added to Offset)");

            EditorGUI.indentLevel = LevelIndent;
        }
        EditorGUILayout.Space();

        if (true == GUI.changed)
        {
            EditorUtility.SetDirty(target);
        }
    }
    public override void OnInspectorGUI()
    {
        Script_SpriteStudio_PartsRoot Data = (Script_SpriteStudio_PartsRoot)target;

        EditorGUILayout.LabelField("[SpriteStudio Parts-Root]");
        int LevelIndent = 0;

        EditorGUILayout.Space();
        FoldOutMaterialTable = EditorGUILayout.Foldout(FoldOutMaterialTable, "Based-Material Table");
        if (true == FoldOutMaterialTable)
        {
            EditorGUI.indentLevel = LevelIndent + 1;
            if (null != Data.TableMaterial)
            {
                int CountShader   = (int)(Library_SpriteStudio.KindColorOperation.TERMINATOR - 1);
                int Count         = Data.TableMaterial.Length / CountShader;
                int MaterialNoTop = 0;
                Library_SpriteStudio.KindColorOperation MaterialTableNo = 0;
                string NameField = "";
                for (int i = 0; i < Count; i++)
                {
                    MaterialNoTop = i * (int)(Library_SpriteStudio.KindColorOperation.TERMINATOR - 1);
                    EditorGUILayout.LabelField("Material No ["
                                               + MaterialNoTop
                                               + "-"
                                               + ((MaterialNoTop + CountShader) - 1)
                                               + "]: Texture-"
                                               + i
                                               );

                    EditorGUI.indentLevel = LevelIndent + 2;
                    for (int j = 0; j < CountShader; j++)
                    {
                        MaterialTableNo = (Library_SpriteStudio.KindColorOperation)(j + 1);
                        NameField       = "Shader [" + MaterialTableNo.ToString() + "]";
                        Data.TableMaterial[MaterialNoTop + j] = (Material)(EditorGUILayout.ObjectField(NameField, Data.TableMaterial[MaterialNoTop + j], typeof(Material), false));
                    }
                    EditorGUILayout.Space();
                    EditorGUI.indentLevel = LevelIndent + 1;
                }
            }
            EditorGUI.indentLevel = LevelIndent;
        }
        EditorGUILayout.Space();

        FoldOutAnimationInformation = EditorGUILayout.Foldout(FoldOutAnimationInformation, "Animation Information");
        if (true == FoldOutAnimationInformation)
        {
            EditorGUI.indentLevel = LevelIndent + 1;
            if (null != Data.ListInformationPlay)
            {
                for (int i = 0; i < Data.ListInformationPlay.Length; i++)
                {
                    EditorGUILayout.LabelField("Animation No [" + i + "]: Name[" + Data.ListInformationPlay[i].Name + "]");

                    EditorGUI.indentLevel = LevelIndent + 2;
                    EditorGUILayout.LabelField("Start Frame-No [" + Data.ListInformationPlay[i].FrameStart.ToString("D5") + "]");
                    EditorGUILayout.LabelField("End Frame-No [" + Data.ListInformationPlay[i].FrameEnd.ToString("D5") + "]");

                    float FPS = 1.0f / (float)Data.ListInformationPlay[i].FramePerSecond;
                    EditorGUILayout.LabelField("Base FPS [" + Data.ListInformationPlay[i].FramePerSecond.ToString("D3") + "]:(" + FPS.ToString() + " Sec.)");
                    EditorGUILayout.Space();

                    EditorGUI.indentLevel = LevelIndent + 1;
                }
            }
            EditorGUI.indentLevel = LevelIndent;
        }
        EditorGUILayout.Space();

        FoldOutPlayInformation = EditorGUILayout.Foldout(FoldOutPlayInformation, "Initial/Preview Play Setting");
        if (true == FoldOutPlayInformation)
        {
            bool FlagUpdate = false;
            EditorGUI.indentLevel = LevelIndent + 1;

            string[] NameAnimation  = new string[Data.ListInformationPlay.Length];
            int[]    IndexAnimation = new int[Data.ListInformationPlay.Length];
            for (int i = 0; i < Data.ListInformationPlay.Length; i++)
            {
                IndexAnimation[i] = i;
                NameAnimation[i]  = Data.ListInformationPlay[i].Name;
            }
            int AnimationNo = EditorGUILayout.IntPopup("Animation Name", Data.AnimationNo, NameAnimation, IndexAnimation);
            if (Data.AnimationNo != AnimationNo)
            {
                Data.AnimationNo = AnimationNo;
                FlagUpdate       = true;
            }
            int  CountLabel          = Data.ListInformationPlay[AnimationNo].Label.Length;
            bool FlagLabelSelectable = (0 < CountLabel) ? true : false;

            int FrameNoStart      = 0;
            int FrameNoEnd        = Data.ListInformationPlay[AnimationNo].FrameEnd - Data.ListInformationPlay[AnimationNo].FrameStart;
            int FrameNoStartRange = FrameNoStart;
            int FrameNoEndRange   = FrameNoEnd;
            EditorGUILayout.LabelField("Animation Frames: " + FrameNoStart.ToString() + " to " + FrameNoEnd.ToString());
            EditorGUILayout.Space();

            string[] NameLabel    = null;
            int[]    IndexLabel   = null;
            int[]    FrameNoLabel = null;
            int      LabelStart   = -1;
            int      LabelEnd     = -1;
            if (true == FlagLabelSelectable)
            {
                CountLabel  += 2;                       /* +2 ... "_start" and "_end" (Reserved-Labels) */
                NameLabel    = new string[CountLabel];
                IndexLabel   = new int[CountLabel];
                FrameNoLabel = new int[CountLabel];

                NameLabel[0]    = string.Copy(Library_SpriteStudio.AnimationInformationPlay.LabelDefaultStart);
                IndexLabel[0]   = 0;
                FrameNoLabel[0] = 0;
                for (int j = 1; j < (CountLabel - 1); j++)
                {
                    IndexLabel[j]   = j;
                    NameLabel[j]    = string.Copy(Data.ListInformationPlay[AnimationNo].Label[j - 1].Name);
                    FrameNoLabel[j] = Data.ListInformationPlay[AnimationNo].Label[j - 1].FrameNo;
                }
                NameLabel[CountLabel - 1]    = string.Copy(Library_SpriteStudio.AnimationInformationPlay.LabelDefaultEnd);
                IndexLabel[CountLabel - 1]   = CountLabel - 1;
                FrameNoLabel[CountLabel - 1] = FrameNoEnd;

                for (int j = 0; j < CountLabel; j++)
                {
                    if (0 == string.Compare(NameLabel[j], Data.NameLabelStart))
                    {
                        LabelStart = j;
                    }
                    if (0 == string.Compare(NameLabel[j], Data.NameLabelEnd))
                    {
                        LabelEnd = j;
                    }
                }
                if (-1 == LabelStart)
                {
                    LabelStart = 0;
                }
                if (-1 == LabelEnd)
                {
                    LabelEnd = CountLabel - 1;
                }
            }
            else
            {
                CountLabel = 2;

                NameLabel    = new string[CountLabel];
                IndexLabel   = new int[CountLabel];
                FrameNoLabel = new int[CountLabel];

                NameLabel[0]    = string.Copy(Library_SpriteStudio.AnimationInformationPlay.LabelDefaultStart);
                IndexLabel[0]   = 0;
                FrameNoLabel[0] = 0;

                NameLabel[1]    = string.Copy(Library_SpriteStudio.AnimationInformationPlay.LabelDefaultEnd);
                IndexLabel[1]   = CountLabel - 1;
                FrameNoLabel[1] = FrameNoEnd;
            }

            EditorGUILayout.Space();
            if (true == FlagLabelSelectable)
            {
                int LabelOld = LabelStart;
                LabelStart = EditorGUILayout.IntPopup("Range Start Label", LabelOld, NameLabel, IndexLabel);
                if ((LabelOld != LabelStart) || (true == string.IsNullOrEmpty(Data.NameLabelStart)))
                {
                    Data.NameLabelStart = string.Copy(NameLabel[IndexLabel[LabelStart]]);
                    FlagUpdate          = true;
                }
                FrameNoStartRange = FrameNoLabel[LabelStart];
            }

            int OffsetOld = Data.OffsetFrameStart - FrameNoStart;
            int OffsetNew = EditorGUILayout.IntField("Range Start Offset: ", OffsetOld);
            if ((FrameNoStartRange + OffsetNew) >= FrameNoEnd)
            {
                OffsetNew = FrameNoEnd - FrameNoStartRange - 1;
            }
            if (OffsetOld != OffsetNew)
            {
                Data.OffsetFrameStart = OffsetNew;
                FlagUpdate            = true;
            }

            EditorGUILayout.LabelField("Range Start: (" + FrameNoStartRange.ToString()
                                       + " + "
                                       + OffsetNew.ToString()
                                       + ")="
                                       + (FrameNoStartRange + OffsetNew).ToString()
                                       );
            FrameNoStartRange += OffsetNew;
            EditorGUILayout.Space();

            if (true == FlagLabelSelectable)
            {
                int LabelOld = LabelEnd;
                LabelEnd = EditorGUILayout.IntPopup("Range End Lable", LabelOld, NameLabel, IndexLabel);
                if ((LabelOld != LabelEnd) || (true == string.IsNullOrEmpty(Data.NameLabelEnd)))
                {
                    Data.NameLabelEnd = string.Copy(NameLabel[IndexLabel[LabelEnd]]);
                    FlagUpdate        = true;
                }
                FrameNoEndRange = FrameNoLabel[LabelEnd];
            }

            OffsetOld = Data.OffsetFrameEnd;
            OffsetNew = EditorGUILayout.IntField("Range End Offset", OffsetOld);
            if ((FrameNoEndRange + OffsetNew) >= FrameNoEnd)
            {
                OffsetNew = 0;
            }
            if ((FrameNoEndRange + OffsetNew) <= FrameNoStartRange)
            {
                OffsetNew = (FrameNoStartRange - FrameNoEndRange) + 1;
            }
            if (OffsetOld != OffsetNew)
            {
                Data.OffsetFrameEnd = OffsetNew;
                FlagUpdate          = true;
            }

            EditorGUILayout.LabelField("Range End: (" + FrameNoEndRange.ToString()
                                       + " + "
                                       + OffsetNew.ToString()
                                       + ")="
                                       + (FrameNoEndRange + OffsetNew).ToString()
                                       );
            FrameNoEndRange += OffsetNew;
            EditorGUILayout.Space();

            int FrameNoInitialOld = Data.FrameNoInitial;
            if (0 > FrameNoInitialOld)
            {
                FrameNoInitialOld = 0;
            }
            if ((FrameNoEnd - FrameNoStart) < FrameNoInitialOld)
            {
                FrameNoInitialOld = FrameNoEnd - FrameNoStart;
            }
            int FrameNoInitial = EditorGUILayout.IntField("Initial Start Offset", FrameNoInitialOld);
            EditorGUILayout.LabelField("Valid Value Range: 0 to " + (FrameNoEndRange - FrameNoStartRange).ToString());
            if (0 > FrameNoInitial)
            {
                FrameNoInitial = 0;
            }
            if ((FrameNoEndRange - FrameNoStartRange) < FrameNoInitial)
            {
                FrameNoInitial = FrameNoEndRange - FrameNoStartRange;
            }
            if (FrameNoInitialOld != FrameNoInitial)
            {
                Data.FrameNoInitial = FrameNoInitial;
                FlagUpdate          = true;
            }

            EditorGUILayout.Space();
            Data.FlagStylePingpong = EditorGUILayout.Toggle("Play-Pingpong", Data.FlagStylePingpong);

            EditorGUILayout.Space();
            Data.RateTimeAnimation = EditorGUILayout.FloatField("Rate Time-Progress", Data.RateTimeAnimation);
            EditorGUILayout.LabelField("(set Negative-Value, Play Backwards.)");

            EditorGUILayout.Space();
            Data.PlayTimes = EditorGUILayout.IntField("Number of Plays", Data.PlayTimes);
            EditorGUILayout.LabelField("(1: No Loop / 0: Infinite Loop)");

            EditorGUILayout.Space();
            if (true == GUILayout.Button("Reset (Reinitialize)"))
            {
                Data.AnimationNo       = 0;
                Data.FrameNoInitial    = 0;
                Data.RateTimeAnimation = 1.0f;
                Data.PlayTimes         = 0;
                Data.FlagStylePingpong = false;
                Data.NameLabelStart    = string.Copy(Library_SpriteStudio.AnimationInformationPlay.LabelDefaultStart);
                Data.OffsetFrameStart  = 0;
                Data.NameLabelEnd      = string.Copy(Library_SpriteStudio.AnimationInformationPlay.LabelDefaultEnd);
                Data.OffsetFrameEnd    = 0;
                FlagUpdate             = true;
            }

            EditorGUI.indentLevel = LevelIndent;

            if (true == FlagUpdate)
            {
                Data.AnimationPlay();
            }
        }
        EditorGUILayout.Space();

        Data.FlagHideForce = EditorGUILayout.Toggle("Force-Hide", Data.FlagHideForce);
        if (true == GUILayout.Button("Apply \"Force-Hide\" to Children"))
        {
            LibraryEditor_SpriteStudio.Utility.HideSetForce(Data.gameObject, Data.FlagHideForce, true, false);
        }
        EditorGUILayout.Space();

        if (true == GUI.changed)
        {
            EditorUtility.SetDirty(target);
        }
    }
    /* ******************************************************** */
    //! Add Mesh to Draw-Manager

    /*!
     * @param	TextureNo
     *      Serial-number of using texture
     * @param	Operation
     *      Color-Blend Operation for the target
     * @param	DataMeshInformation
     *      Mesh Information
     * @retval	Return-Value
     *      (None)
     *
     * Don't use this function. <br>
     * (This function is for the animation-parts' scripts.)
     */
    public void MeshAdd(int TextureNo, Library_SpriteStudio.KindColorOperation Operation, InformationMeshData DataMeshInformation)
    {
        if (0 > TextureNo)
        {
            return;
        }

        if (null == TableListMesh)
        {
            TableListMesh = new ArrayList();
            TableListMesh.Clear();
        }

        int          MaterialNo = TextureNo * ((int)Library_SpriteStudio.KindColorOperation.TERMINATOR - 1) + ((int)Operation - 1);
        int          CountList  = TableListMesh.Count;
        int          ListNo     = -1;
        ListMeshDraw ListMesh   = null;

        if (0 == TableListMesh.Count)
        {
            goto MeshAdd_NewListAdd;
        }
        else
        {
            ListNo   = 0;
            ListMesh = TableListMesh[0] as ListMeshDraw;
            for (int i = 1; i < CountList; i++)
            {
                ListMesh = TableListMesh[i] as ListMeshDraw;
                if (DataMeshInformation.Priority < ListMesh.PriorityMinimum)
                {
                    ListNo = i - 1;
                    break;
                }
                ListMesh = null;
            }
            if (null == ListMesh)
            {                   /* Highest-Priority */
                ListNo   = CountList - 1;
                ListMesh = TableListMesh[ListNo] as ListMeshDraw;
                if (ListMesh.MaterialNo != MaterialNo)
                {
                    if (DataMeshInformation.Priority < ListMesh.PriorityMaximum)
                    {
                        goto MeshAdd_NewListInsertSplit;
                    }
                    else
                    {
                        goto MeshAdd_NewListAdd;
                    }
                }
            }
            else
            {
                ListMesh = TableListMesh[ListNo] as ListMeshDraw;
                if (ListMesh.MaterialNo != MaterialNo)
                {
                    if (DataMeshInformation.Priority < ListMesh.PriorityMaximum)
                    {
                        goto MeshAdd_NewListInsertSplit;
                    }
                    else
                    {
                        ListNo++;
                        if (CountList <= ListNo)
                        {
                            goto MeshAdd_NewListAdd;
                        }
                        else
                        {
                            ListMeshDraw ListMeshNext = TableListMesh[ListNo] as ListMeshDraw;
                            if (ListMeshNext.MaterialNo != MaterialNo)
                            {
                                ListNo--;
                                goto MeshAdd_NewListInsert;
                            }
                            else
                            {
                                ListMesh = ListMeshNext;
                            }
                        }
                    }
                }
            }
            ListMesh.MeshAdd(ref DataMeshInformation);
        }
        return;

MeshAdd_NewListAdd:
        ListMesh            = new ListMeshDraw();
        ListMesh.MaterialNo = MaterialNo;
        TableListMesh.Add(ListMesh);

        ListMesh.MeshAdd(ref DataMeshInformation);
        return;

MeshAdd_NewListInsert:
        ListMesh            = new ListMeshDraw();
        ListMesh.MaterialNo = MaterialNo;
        TableListMesh.Insert(ListNo + 1, ListMesh);

        ListMesh.MeshAdd(ref DataMeshInformation);
        return;

MeshAdd_NewListInsertSplit:
        {
            ListMeshDraw ListMeshSplit = ListMesh.ListSplit(DataMeshInformation.Priority);
            int          ListNoNext    = ListNo + 1;
            if (CountList <= ListNoNext)
            {
                TableListMesh.Add(ListMeshSplit);
            }
            else
            {
                TableListMesh.Insert(ListNoNext, ListMeshSplit);
            }
            int CountOld = ListMesh.Count;

            ListMesh            = new ListMeshDraw();
            ListMesh.MaterialNo = MaterialNo;
            TableListMesh.Insert(ListNoNext, ListMesh);

            if (0 >= CountOld)
            {
                TableListMesh.RemoveAt(ListNo);
            }
        }

        ListMesh.MeshAdd(ref DataMeshInformation);
        return;
    }
Ejemplo n.º 6
0
    public override void OnInspectorGUI()
    {
        Script_SpriteStudio_Root Data = (Script_SpriteStudio_Root)target;

        EditorGUILayout.LabelField("[SpriteStudio (Parts-)Root]");
        int LevelIndent = 0;

        EditorGUILayout.Space();
        Data.InstanceManagerDraw = (Script_SpriteStudio_ManagerDraw)(EditorGUILayout.ObjectField("View (Manager-Draw)", Data.InstanceManagerDraw, typeof(Script_SpriteStudio_ManagerDraw), true));

        EditorGUILayout.Space();
        FoldOutStaticDatas = EditorGUILayout.Foldout(FoldOutStaticDatas, "Static Datas");
        if (true == FoldOutStaticDatas)
        {
            EditorGUI.indentLevel = LevelIndent + 1;
            Data.DataCellMap      = (Script_SpriteStudio_DataCell)(EditorGUILayout.ObjectField("Data:CellMap", Data.DataCellMap, typeof(Script_SpriteStudio_DataCell), true));
            Data.DataAnimation    = (Script_SpriteStudio_DataAnimation)(EditorGUILayout.ObjectField("Data:Animation", Data.DataAnimation, typeof(Script_SpriteStudio_DataAnimation), true));
            EditorGUI.indentLevel = LevelIndent;
        }

        EditorGUILayout.Space();
        FoldOutMaterialTable = EditorGUILayout.Foldout(FoldOutMaterialTable, "Based-Material Table");
        if (true == FoldOutMaterialTable)
        {
            EditorGUI.indentLevel = LevelIndent + 1;
            if (null != Data.TableMaterial)
            {
                int CountShader   = (int)(Library_SpriteStudio.KindColorOperation.TERMINATOR - 1);
                int Count         = Data.TableMaterial.Length / CountShader;
                int MaterialNoTop = 0;
                Library_SpriteStudio.KindColorOperation MaterialTableNo = 0;
                string NameField = "";
                for (int i = 0; i < Count; i++)
                {
                    MaterialNoTop = i * (int)(Library_SpriteStudio.KindColorOperation.TERMINATOR - 1);
                    EditorGUILayout.LabelField("Material No ["
                                               + MaterialNoTop
                                               + "-"
                                               + ((MaterialNoTop + CountShader) - 1)
                                               + "]: Texture-"
                                               + i
                                               );

                    EditorGUI.indentLevel = LevelIndent + 2;
                    for (int j = 0; j < CountShader; j++)
                    {
                        MaterialTableNo = (Library_SpriteStudio.KindColorOperation)(j + 1);
                        NameField       = "Shader [" + MaterialTableNo.ToString() + "]";
                        Data.TableMaterial[MaterialNoTop + j] = (Material)(EditorGUILayout.ObjectField(NameField, Data.TableMaterial[MaterialNoTop + j], typeof(Material), false));
                    }
                    EditorGUILayout.Space();
                    EditorGUI.indentLevel = LevelIndent + 1;
                }
            }
            EditorGUI.indentLevel = LevelIndent;
        }
        EditorGUILayout.Space();

        FoldOutPlayInformation = EditorGUILayout.Foldout(FoldOutPlayInformation, "Initial/Preview Play Setting");
        if (true == FoldOutPlayInformation)
        {
            EditorGUI.indentLevel = LevelIndent + 1;

//			if((null != Data.DataAnimation) && (null != Data.DataCellMap))
            if (null != Data.DataAnimation)
            {
                bool FlagUpdate = false;

                Data.FlagHideForce = EditorGUILayout.Toggle("Hide Force", Data.FlagHideForce);
                EditorGUILayout.Space();

                Data.FlagAnimationStopInitial = EditorGUILayout.Toggle("Initial Stopping Animation", Data.FlagAnimationStopInitial);
                EditorGUILayout.Space();

                /* "Animation" Select */
                Library_SpriteStudio.Data.Animation DataAnimationBody = null;
                int      CountAnimation    = Data.DataAnimation.CountGetAnimation();
                string[] ListNameAnimation = new string[CountAnimation];
                for (int i = 0; i < CountAnimation; i++)
                {
                    DataAnimationBody = Data.DataAnimation.DataGetAnimation(i);
                    if (null != DataAnimationBody)
                    {
                        ListNameAnimation[i] = DataAnimationBody.Name;
                    }
                    else
                    {
                        ListNameAnimation[i] = "(Data Missing)";
                    }
                }
                int IndexAnimationCursor = Data.IndexAnimation;
                if ((0 > IndexAnimationCursor) || (Data.DataAnimation.ListDataAnimation.Length <= IndexAnimationCursor))
                {
                    IndexAnimationCursor = 0;
                    FlagUpdate          |= true;
                }
                int IndexNow = EditorGUILayout.Popup("Animation Name", IndexAnimationCursor, ListNameAnimation);
                if (IndexNow != IndexAnimationCursor)
                {
                    IndexAnimationCursor = IndexNow;
                    Data.IndexAnimation  = IndexAnimationCursor;
                    FlagUpdate          |= true;
                }

                DataAnimationBody = Data.DataAnimation.DataGetAnimation(IndexAnimationCursor);
                int FrameNoLast = DataAnimationBody.CountFrame - 1;
                int CountLabel  = DataAnimationBody.CountGetLabel();

                EditorGUILayout.LabelField("- Frame Count: [" + DataAnimationBody.CountFrame.ToString() + "] (0 - " + FrameNoLast.ToString() + ")");
                EditorGUILayout.Space();

                /* "Label" Selector Create (for Start-Label / End-Label) */
                string[] ListNameLabel    = null;
                int[]    ListIndexLabel   = null;
                int[]    ListFrameNoLabel = null;
                if (0 < CountLabel)
                {                         /* Has Labels */
                    CountLabel      += 2; /* +2 ... "_start" and "_end" (Reserved-Labels) */
                    ListNameLabel    = new string[CountLabel];
                    ListIndexLabel   = new int[CountLabel];
                    ListFrameNoLabel = new int[CountLabel];

                    Library_SpriteStudio.Data.Label DataLabelBody = null;
                    for (int j = 1; j < (CountLabel - 1); j++)
                    {
                        DataLabelBody = DataAnimationBody.DataGetLabel(j - 1);

                        ListNameLabel[j]    = DataLabelBody.Name;
                        ListIndexLabel[j]   = (j - 1);
                        ListFrameNoLabel[j] = DataLabelBody.FrameNo;
                    }
                }
                else
                {                       /* Has No-Labels */
                    CountLabel = 2;

                    ListNameLabel    = new string[CountLabel];
                    ListIndexLabel   = new int[CountLabel];
                    ListFrameNoLabel = new int[CountLabel];
                }
                ListNameLabel[0]    = Library_SpriteStudio.ListNameLabelAnimationReserved[(int)Library_SpriteStudio.KindLabelAnimationReserved.START];
                ListIndexLabel[0]   = (int)(Library_SpriteStudio.KindLabelAnimationReserved.START | Library_SpriteStudio.KindLabelAnimationReserved.INDEX_RESERVED);
                ListFrameNoLabel[0] = 0;

                ListNameLabel[CountLabel - 1]    = Library_SpriteStudio.ListNameLabelAnimationReserved[(int)Library_SpriteStudio.KindLabelAnimationReserved.END];
                ListIndexLabel[CountLabel - 1]   = (int)(Library_SpriteStudio.KindLabelAnimationReserved.END | Library_SpriteStudio.KindLabelAnimationReserved.INDEX_RESERVED);
                ListFrameNoLabel[CountLabel - 1] = FrameNoLast;

                int IndexListLabelStart = -1;
                int IndexListLabelEnd   = -1;
                for (int i = 0; i < CountLabel; i++)
                {
                    if (ListIndexLabel[i] == Data.IndexLabelStart)
                    {
                        IndexListLabelStart = i;
                    }
                    if (ListIndexLabel[i] == Data.IndexLabelEnd)
                    {
                        IndexListLabelEnd = i;
                    }
                }
                if (0 > IndexListLabelStart)
                {
                    IndexListLabelStart = 0;
                }
                if (0 > IndexListLabelEnd)
                {
                    IndexListLabelEnd = CountLabel - 1;
                }

                int OffsetStart  = Data.FrameOffsetStart;
                int OffsetEnd    = Data.FrameOffsetEnd;
                int FrameNoStart = ListFrameNoLabel[IndexListLabelStart];
                int FrameNoEnd   = ListFrameNoLabel[IndexListLabelEnd];
                int IndexListLabelNow;
                int FrameNoLimit;

                /* Range "Start" */
                EditorGUILayout.LabelField("Range Start: (" + FrameNoStart.ToString()
                                           + " + "
                                           + OffsetStart.ToString()
                                           + ") = "
                                           + (FrameNoStart + OffsetStart).ToString()
                                           );

                /* Start-Label Select */
                IndexListLabelNow = EditorGUILayout.Popup("Range Start Label", IndexListLabelStart, ListNameLabel);
                if (IndexListLabelNow != IndexListLabelStart)
                {                       /* Data is valid & Changed Animation */
                    IndexListLabelStart = IndexListLabelNow;
                    FlagUpdate         |= true;
                }
                Data.IndexLabelStart = ListIndexLabel[IndexListLabelStart];
                FrameNoStart         = ListFrameNoLabel[IndexListLabelStart];

                /* Start-Offset */
                FrameNoLimit = FrameNoEnd + OffsetEnd;
                OffsetStart  = EditorGUILayout.IntField("Range Start Offset", Data.FrameOffsetStart);
                EditorGUILayout.LabelField("- Valid Value Range: Min[" + (-FrameNoStart).ToString() +
                                           "] to Max[" + ((FrameNoLimit - FrameNoStart) - 1).ToString() + "] "
                                           );

                OffsetStart = (FrameNoLimit <= (FrameNoStart + OffsetStart)) ? ((FrameNoLimit - FrameNoStart) - 1) : OffsetStart;
                OffsetStart = (0 > (FrameNoStart + OffsetStart)) ? (0 - FrameNoStart) : OffsetStart;
                OffsetStart = (FrameNoLast < (FrameNoStart + OffsetStart)) ? (FrameNoLast - FrameNoStart) : OffsetStart;
                if (Data.FrameOffsetStart != OffsetStart)
                {
                    Data.FrameOffsetStart = OffsetStart;
                    FlagUpdate           |= true;
                }
                EditorGUILayout.Space();

                /* Range "End" */
                EditorGUILayout.LabelField("Range End: (" + FrameNoEnd.ToString()
                                           + " + "
                                           + OffsetEnd.ToString()
                                           + ") = "
                                           + (FrameNoEnd + OffsetEnd).ToString()
                                           );

                /* End-Label Select */
                IndexListLabelNow = EditorGUILayout.Popup("Range End Label", IndexListLabelEnd, ListNameLabel);
                if (IndexListLabelNow != IndexListLabelEnd)
                {                       /* Data is valid & Changed Animation */
                    IndexListLabelEnd = IndexListLabelNow;
                    FlagUpdate       |= true;
                }
                Data.IndexLabelEnd = ListIndexLabel[IndexListLabelEnd];
                FrameNoEnd         = ListFrameNoLabel[IndexListLabelEnd];

                /* End-Offset */
                FrameNoLimit = FrameNoStart + OffsetStart;
                OffsetEnd    = EditorGUILayout.IntField("Range End Offset", Data.FrameOffsetEnd);
                EditorGUILayout.LabelField("- Valid Value Range: Min[" + ((FrameNoLimit - FrameNoEnd) + 1).ToString() +
                                           "] to Max[" + (FrameNoLast - FrameNoEnd).ToString() + "] "
                                           );

                OffsetEnd = (FrameNoLimit >= (FrameNoEnd + OffsetEnd)) ? ((FrameNoLimit - FrameNoEnd) + 1) : OffsetEnd;
                OffsetEnd = (0 > (FrameNoEnd + OffsetEnd)) ? (0 - FrameNoEnd) : OffsetEnd;
                OffsetEnd = (FrameNoLast < (FrameNoEnd + OffsetEnd)) ? (FrameNoLast - FrameNoEnd) : OffsetEnd;
                if (Data.FrameOffsetEnd != OffsetEnd)
                {
                    Data.FrameOffsetEnd = OffsetEnd;
                    FlagUpdate         |= true;
                }
                EditorGUILayout.Space();

                int FrameNoRangeStart = FrameNoStart + OffsetStart;
                int FrameNoRangeEnd   = FrameNoEnd + OffsetEnd;
                int CountFrameRange   = FrameNoRangeEnd - FrameNoRangeStart;
                int FrameNoOffset     = EditorGUILayout.IntField("Initial Start Offset", Data.FrameOffsetInitial);
                EditorGUILayout.LabelField("- Valid Value Range: Min[0] to Max[" + CountFrameRange.ToString() + "]");
                FrameNoOffset = (0 > FrameNoOffset) ? 0 : FrameNoOffset;
                FrameNoOffset = (CountFrameRange <= FrameNoOffset) ? CountFrameRange : FrameNoOffset;
                if (FrameNoOffset != Data.FrameOffsetInitial)
                {
                    Data.FrameOffsetInitial = FrameNoOffset;
                    FlagUpdate |= true;
                }

                EditorGUILayout.Space();
                bool FlagPingpongNow = EditorGUILayout.Toggle("Play-Pingpong", Data.FlagPingpong);
                if (FlagPingpongNow != Data.FlagPingpong)
                {
                    Data.FlagPingpong = FlagPingpongNow;
                    FlagUpdate       |= true;
                }

                EditorGUILayout.Space();
                if (0.0f == Data.RateSpeedInitial)
                {
                    Data.RateSpeedInitial = 1.0f;
                }
                float RateSpeedNow = EditorGUILayout.FloatField("Rate Time-Progress", Data.RateSpeedInitial);
                EditorGUILayout.LabelField("(set Negative-Value, Play Backwards.)");
                if (RateSpeedNow != Data.RateSpeedInitial)
                {
                    Data.RateSpeedInitial = RateSpeedNow;
                    FlagUpdate           |= true;
                }

                EditorGUILayout.Space();
                int TimesPlayNow = EditorGUILayout.IntField("Number of Plays", Data.TimesPlay);
                EditorGUILayout.LabelField("(1: No Loop / 0: Infinite Loop)");
                if (TimesPlayNow != Data.TimesPlay)
                {
                    Data.TimesPlay = TimesPlayNow;
                    FlagUpdate    |= true;
                }

                EditorGUILayout.Space();
                if (true == GUILayout.Button("Reset (Reinitialize)"))
                {
                    Data.IndexAnimation           = 0;
                    Data.FrameOffsetInitial       = 0;
                    Data.RateSpeedInitial         = 1.0f;
                    Data.TimesPlay                = 0;
                    Data.FlagPingpong             = false;
                    Data.IndexLabelStart          = (int)(Library_SpriteStudio.KindLabelAnimationReserved.START | Library_SpriteStudio.KindLabelAnimationReserved.INDEX_RESERVED);
                    Data.FrameOffsetStart         = 0;
                    Data.IndexLabelEnd            = (int)(Library_SpriteStudio.KindLabelAnimationReserved.END | Library_SpriteStudio.KindLabelAnimationReserved.INDEX_RESERVED);
                    Data.FrameOffsetEnd           = 0;
                    Data.FlagAnimationStopInitial = false;
                    FlagUpdate = true;                          /* Force */
                }

                /* Re-Play Animation */
                if (true == FlagUpdate)
                {
                    Data.AnimationPlay();
                    if (true == Data.FlagAnimationStopInitial)
                    {
                        Data.AnimationStop();
                    }
                }
            }
            else
            {
                EditorGUILayout.LabelField("Error[Datas Missing! (Fatal)]");
            }
        }
        EditorGUI.indentLevel = LevelIndent;
        EditorGUILayout.Space();

//		Data.FlagHideForce = EditorGUILayout.Toggle("Force-Hide", Data.FlagHideForce);
//		if(true == GUILayout.Button("Apply \"Force-Hide\" to Children"))
//		{
//			LibraryEditor_SpriteStudio.Utility.HideSetForce(Data.gameObject, Data.FlagHideForce, true, false);
//		}
//		EditorGUILayout.Space();

//		EditorGUILayout.Space();
//		if(true == GUILayout.Button("Reset Parent-\"View\""))
//		{
//			Data.ViewSet();
//		}

        if (true == GUI.changed)
        {
            EditorUtility.SetDirty(target);
        }
    }
    public override void OnInspectorGUI()
    {
        Script_SpriteStudio_RootEffect Data = (Script_SpriteStudio_RootEffect)target;

        EditorGUILayout.LabelField("[SpriteStudio Root-Effect]");
        int LevelIndent = 0;

        EditorGUILayout.Space();
        Data.InstanceManagerDraw = (Script_SpriteStudio_ManagerDraw)(EditorGUILayout.ObjectField("View (Manager-Draw)", Data.InstanceManagerDraw, typeof(Script_SpriteStudio_ManagerDraw), true));

        EditorGUILayout.Space();
        FoldOutStaticDatas = EditorGUILayout.Foldout(FoldOutStaticDatas, "Static Datas");
        if (true == FoldOutStaticDatas)
        {
            EditorGUI.indentLevel = LevelIndent + 1;
            Data.DataCellMap      = (Script_SpriteStudio_DataCell)(EditorGUILayout.ObjectField("Data:CellMap", Data.DataCellMap, typeof(Script_SpriteStudio_DataCell), true));
            Data.DataEffect       = (Script_SpriteStudio_DataEffect)(EditorGUILayout.ObjectField("Data:Effect", Data.DataEffect, typeof(Script_SpriteStudio_DataEffect), true));
            EditorGUI.indentLevel = LevelIndent;
        }

        EditorGUILayout.Space();
        FoldOutMaterialTable = EditorGUILayout.Foldout(FoldOutMaterialTable, "Based-Material Table");
        if (true == FoldOutMaterialTable)
        {
            EditorGUI.indentLevel = LevelIndent + 1;
            if (null != Data.TableMaterial)
            {
                int CountShader   = (int)(Library_SpriteStudio.KindColorOperation.TERMINATOR_EFFECT - 1);
                int Count         = Data.TableMaterial.Length / CountShader;
                int MaterialNoTop = 0;
                Library_SpriteStudio.KindColorOperation MaterialTableNo = 0;
                string NameField = "";
                for (int i = 0; i < Count; i++)
                {
                    MaterialNoTop = i * (int)(Library_SpriteStudio.KindColorOperation.TERMINATOR_EFFECT - 1);
                    EditorGUILayout.LabelField("Material No ["
                                               + MaterialNoTop
                                               + "-"
                                               + ((MaterialNoTop + CountShader) - 1)
                                               + "]: Texture-"
                                               + i
                                               );

                    EditorGUI.indentLevel = LevelIndent + 2;
                    for (int j = 0; j < CountShader; j++)
                    {
                        MaterialTableNo = (Library_SpriteStudio.KindColorOperation)(j + 1);
                        NameField       = "Shader [" + MaterialTableNo.ToString() + "]";
                        Data.TableMaterial[MaterialNoTop + j] = (Material)(EditorGUILayout.ObjectField(NameField, Data.TableMaterial[MaterialNoTop + j], typeof(Material), false));
                    }
                    EditorGUILayout.Space();
                    EditorGUI.indentLevel = LevelIndent + 1;
                }
            }
            EditorGUI.indentLevel = LevelIndent;
        }
        EditorGUILayout.Space();

        FoldOutPlayInformation = EditorGUILayout.Foldout(FoldOutPlayInformation, "Initial/Preview Play Setting");
        if (true == FoldOutPlayInformation)
        {
            EditorGUI.indentLevel = LevelIndent;

            Data.FlagHideForce = EditorGUILayout.Toggle("Hide Force", Data.FlagHideForce);
            EditorGUILayout.Space();

            int CountLimitParts = EditorGUILayout.IntField("Count Limit Parts", Data.CountLimitPartsInitial);
            EditorGUILayout.LabelField("(-1: Default-Value Set)");
            if (-1 != CountLimitParts)
            {
                if (0 > CountLimitParts)
                {
                    CountLimitParts = -1;
                }
            }
            if (CountLimitParts != Data.CountLimitPartsInitial)
            {
                Data.CountLimitPartsInitial = CountLimitParts;
            }

            EditorGUI.indentLevel = LevelIndent;
        }

        if (true == GUI.changed)
        {
            EditorUtility.SetDirty(target);
        }
    }