Exemple #1
0
    protected override void OnInnerGUI()
    {
        if (_myLabelStyle2 == null)
        {
            _myLabelStyle2           = new GUIStyle(GUI.skin.label);
            _myLabelStyle2.fontStyle = FontStyle.Italic;
        }

        if (Hoster.SkillData.Result == null)
        {
            return;
        }

        for (int i = 0; i < Hoster.SkillData.Result.Count; i++)
        {
            Hoster.SkillData.Result[i].Index = i;
            float result_at = (Hoster.SkillData.Result[i].At / XSkillInspector.frame);

            EditorGUILayout.BeginHorizontal();
            Hoster.SkillData.Result[i].LongAttackEffect = EditorGUILayout.Toggle("Long Range Attack", Hoster.SkillData.Result[i].LongAttackEffect);
            if (GUILayout.Button(_content_remove, GUILayout.MaxWidth(30), GUILayout.MinWidth(30)))
            {
                Hoster.SkillData.Result.RemoveAt(i);
                Hoster.ConfigData.Result.RemoveAt(i);
                EditorGUILayout.EndHorizontal();
                continue;
            }
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.Space();

            if (Hoster.SkillData.Result[i].LongAttackEffect && Hoster.SkillData.Result[i].LongAttackData == null)
            {
                Hoster.SkillData.Result[i].LongAttackData = new XLongAttackResultData();
            }

            EditorGUILayout.LabelField("Affect basic configuration.", _myLabelStyle2);
            if (Hoster.SkillData.Result[i].LongAttackEffect)
            {
                Hoster.SkillData.Result[i].LongAttackData.Type = (XResultBulletType)EditorGUILayout.EnumPopup("Type", Hoster.SkillData.Result[i].LongAttackData.Type);
            }
            EditorGUILayout.BeginHorizontal();
            result_at = EditorGUILayout.FloatField(Hoster.SkillData.Result[i].LongAttackEffect ? "Fire At" : "Triggered At", result_at);
            GUILayout.Label("(frame)");
            EditorGUILayout.EndHorizontal();
            Hoster.ConfigData.Result[i].Result_Ratio = result_at / Hoster.SkillDataExtra.SkillClip_Frame;
            if (Hoster.ConfigData.Result[i].Result_Ratio > 1)
            {
                Hoster.ConfigData.Result[i].Result_Ratio = 1;
            }

            Hoster.ConfigData.Result[i].Result_Ratio = EditorGUILayout.Slider("Ratio", Hoster.ConfigData.Result[i].Result_Ratio, 0, 1);
            Hoster.SkillData.Result[i].At            = (Hoster.ConfigData.Result[i].Result_Ratio * Hoster.SkillDataExtra.SkillClip_Frame) * XSkillInspector.frame;
            if (Hoster.SkillData.Result[i].LongAttackEffect &&
                (Hoster.SkillData.Result[i].LongAttackData.Type != XResultBulletType.Satellite && Hoster.SkillData.Result[i].LongAttackData.Type != XResultBulletType.Ring))
            {
                _xv.FirePos = new Vector3(Hoster.SkillData.Result[i].LongAttackData.At_X, Hoster.SkillData.Result[i].LongAttackData.At_Y, Hoster.SkillData.Result[i].LongAttackData.At_Z);
                PropertyField[] field = new PropertyField[1];
                field[0] = new PropertyField(_xv, typeof(XVector3).GetProperty("FirePos"), SerializedPropertyType.Vector3);
                ExposeProperties.Expose(field);

                Hoster.SkillData.Result[i].LongAttackData.At_X = _xv.FirePos.x;
                Hoster.SkillData.Result[i].LongAttackData.At_Y = _xv.FirePos.y;
                Hoster.SkillData.Result[i].LongAttackData.At_Z = _xv.FirePos.z;
            }
            EditorGUILayout.Space();
            EditorGUILayout.LabelField("Affect logical configuration.", _myLabelStyle2);
            Hoster.SkillData.Result[i].Loop = EditorGUILayout.Toggle("Loop", Hoster.SkillData.Result[i].Loop);
            if (Hoster.SkillData.Result[i].Loop)
            {
                float loop = (Hoster.SkillData.Result[i].Cycle / XSkillInspector.frame);
                EditorGUILayout.BeginHorizontal();
                loop = EditorGUILayout.FloatField("Repeated Cycle", loop);
                GUILayout.Label("(frame)");
                GUILayout.Label("", GUILayout.MaxWidth(30));
                EditorGUILayout.EndHorizontal();
                Hoster.SkillData.Result[i].Cycle = loop * XSkillInspector.frame;
                int count = EditorGUILayout.IntField("Repeated Count", Hoster.SkillData.Result[i].Loop_Count);
                if (count < 100 && count >= 0)
                {
                    Hoster.SkillData.Result[i].Loop_Count = count;
                }
            }

            if (Hoster.SkillData.Result[i].Loop || Hoster.SkillData.Result[i].Group)
            {
                EditorGUILayout.Space();
            }

            Hoster.SkillData.Result[i].Group = EditorGUILayout.Toggle("Group", Hoster.SkillData.Result[i].Group);
            if (Hoster.SkillData.Result[i].Group)
            {
                Hoster.SkillData.Result[i].Clockwise       = EditorGUILayout.Toggle("ClockWise", Hoster.SkillData.Result[i].Clockwise);
                Hoster.SkillData.Result[i].Deviation_Angle = EditorGUILayout.IntField("Deviation Angle", Hoster.SkillData.Result[i].Deviation_Angle);
                Hoster.SkillData.Result[i].Angle_Step      = EditorGUILayout.IntField("Angle Step", Hoster.SkillData.Result[i].Angle_Step);

                float step = (Hoster.SkillData.Result[i].Time_Step / XSkillInspector.frame);
                EditorGUILayout.BeginHorizontal();
                step = EditorGUILayout.FloatField("Time Step", step);
                GUILayout.Label("(frame)");
                GUILayout.Label("", GUILayout.MaxWidth(30));
                EditorGUILayout.EndHorizontal();
                Hoster.SkillData.Result[i].Time_Step = step * XSkillInspector.frame;

                int count = EditorGUILayout.IntField("Count", Hoster.SkillData.Result[i].Group_Count);
                if (count < 100 && count >= 0)
                {
                    Hoster.SkillData.Result[i].Group_Count = count;
                }
            }

            EditorGUILayout.Space();
            EditorGUILayout.LabelField("Affect area configuration.", _myLabelStyle2);

            if (Hoster.SkillData.NeedTarget)
            {
                Hoster.SkillData.Result[i].Attack_Only_Target = EditorGUILayout.Toggle("Attack Only Target", Hoster.SkillData.Result[i].Attack_Only_Target);
            }
            else
            {
                Hoster.SkillData.Result[i].Attack_Only_Target = false;
            }

            if (Hoster.SkillData.Result[i].LongAttackEffect && !Hoster.SkillData.Result[i].Attack_Only_Target)
            {
                Hoster.SkillData.Result[i].Attack_All = EditorGUILayout.Toggle("Attack All", Hoster.SkillData.Result[i].Attack_All);
            }
            else
            {
                Hoster.SkillData.Result[i].Attack_All = false;
            }
            if (Hoster.SkillData.Result[i].Attack_All)
            {
                Hoster.SkillData.Result[i].Mobs_Inclusived = EditorGUILayout.Toggle("Include Mobs", Hoster.SkillData.Result[i].Mobs_Inclusived);
            }
            EditorGUILayout.Space();
            if (!Hoster.SkillData.Result[i].LongAttackEffect || Hoster.SkillData.Result[i].LongAttackData.TriggerAtEnd)
            {
                Hoster.SkillData.Result[i].Sector_Type = EditorGUILayout.Toggle("Sector Damage", Hoster.SkillData.Result[i].Sector_Type);
                if (Hoster.SkillData.Result[i].Sector_Type)
                {
                    Hoster.SkillData.Result[i].Low_Range = EditorGUILayout.FloatField("Range (↓)", Hoster.SkillData.Result[i].Low_Range);
                    Hoster.SkillData.Result[i].Range     = EditorGUILayout.FloatField("Range (↑)", Hoster.SkillData.Result[i].Range);
                    Hoster.SkillData.Result[i].Scope     = EditorGUILayout.FloatField("Scope", Hoster.SkillData.Result[i].Scope);
                }
                else
                {
                    Hoster.SkillData.Result[i].Rect_HalfEffect         = EditorGUILayout.Toggle("Half Effect", Hoster.SkillData.Result[i].Rect_HalfEffect);
                    Hoster.SkillData.Result[i].None_Sector_Angle_Shift = EditorGUILayout.IntField("Angle Shift", Hoster.SkillData.Result[i].None_Sector_Angle_Shift);
                    Hoster.SkillData.Result[i].Range = EditorGUILayout.FloatField("Depth", Hoster.SkillData.Result[i].Range);
                    Hoster.SkillData.Result[i].Scope = EditorGUILayout.FloatField("Width", Hoster.SkillData.Result[i].Scope);
                }
                if (Hoster.SkillData.Result[i].Low_Range > Hoster.SkillData.Result[i].Range)
                {
                    Hoster.SkillData.Result[i].Low_Range = Hoster.SkillData.Result[i].Range;
                }
                Hoster.SkillData.Result[i].Offset_X = EditorGUILayout.FloatField("OffsetX", Hoster.SkillData.Result[i].Offset_X);
                Hoster.SkillData.Result[i].Offset_Z = EditorGUILayout.FloatField("OffsetZ", Hoster.SkillData.Result[i].Offset_Z);

                EditorGUILayout.BeginHorizontal();
                GUILayout.FlexibleSpace();
                if (GUILayout.Button("view"))
                {
                    Hoster.nHotID = i;
                }
                EditorGUILayout.EndHorizontal();
            }
            else
            {
                EditorGUILayout.Space();
            }

            if (Hoster.SkillData.Result[i].LongAttackEffect)
            {
                EditorGUILayout.LabelField("Collision setting", _myLabelStyle2);
                Hoster.SkillData.Result[i].LongAttackData.StaticCollider  = EditorGUILayout.Toggle("Static Enabled", Hoster.SkillData.Result[i].LongAttackData.StaticCollider);
                Hoster.SkillData.Result[i].LongAttackData.DynamicCollider = EditorGUILayout.Toggle("Dynamic Enabled", Hoster.SkillData.Result[i].LongAttackData.DynamicCollider);

                EditorGUILayout.Space();
                EditorGUILayout.LabelField("Bullet's setting", _myLabelStyle2);
                if (Hoster.SkillData.Result[i].LongAttackData.Type != XResultBulletType.Satellite && Hoster.SkillData.Result[i].LongAttackData.Type != XResultBulletType.Ring)
                {
                    Hoster.SkillData.Result[i].LongAttackData.IsPingPong = EditorGUILayout.Toggle("Is PingPong", Hoster.SkillData.Result[i].LongAttackData.IsPingPong);
                }

                if (Hoster.SkillData.Result[i].LongAttackData.IsPingPong)
                {
                    Hoster.SkillData.Result[i].LongAttackData.AutoRefine_at_Half = EditorGUILayout.Toggle("Auto Refine at Half", Hoster.SkillData.Result[i].LongAttackData.AutoRefine_at_Half);
                }
                else
                {
                    Hoster.SkillData.Result[i].LongAttackData.AutoRefine_at_Half = false;
                }
                Hoster.SkillData.Result[i].LongAttackData.WithCollision = EditorGUILayout.Toggle("With Collision", Hoster.SkillData.Result[i].LongAttackData.WithCollision);
                if (Hoster.SkillData.Result[i].LongAttackData.WithCollision)
                {
                    Hoster.SkillData.Result[i].LongAttackData.TriggerOnce = EditorGUILayout.Toggle("Once", Hoster.SkillData.Result[i].LongAttackData.TriggerOnce);
                    if (!Hoster.SkillData.Result[i].LongAttackData.TriggerOnce)
                    {
                        EditorGUILayout.BeginHorizontal();
                        Hoster.SkillData.Result[i].LongAttackData.Refine_Cycle = EditorGUILayout.FloatField("Refine Cycle", Hoster.SkillData.Result[i].LongAttackData.Refine_Cycle);
                        GUILayout.Label("(s) zero means never.");
                        GUILayout.Label("", GUILayout.MaxWidth(30));
                        EditorGUILayout.EndHorizontal();
                        if (Hoster.SkillData.Result[i].LongAttackData.Refine_Cycle > 0)
                        {
                            Hoster.SkillData.Result[i].LongAttackData.Refine_Count = EditorGUILayout.IntField("Refine Count", Hoster.SkillData.Result[i].LongAttackData.Refine_Count);
                            if (Hoster.SkillData.Result[i].LongAttackData.Refine_Count < 1)
                            {
                                Hoster.SkillData.Result[i].LongAttackData.Refine_Count = 1;
                            }
                        }
                    }
                }
                if (Hoster.SkillData.Result[i].LongAttackData.Type != XResultBulletType.Ring)
                {
                    EditorGUILayout.Space();
                    EditorGUILayout.LabelField("Manipulation setting", _myLabelStyle2);
                    Hoster.SkillData.Result[i].LongAttackData.Manipulation = EditorGUILayout.Toggle("Has Manipulation", Hoster.SkillData.Result[i].LongAttackData.Manipulation);
                    if (Hoster.SkillData.Result[i].LongAttackData.Manipulation)
                    {
                        Hoster.SkillData.Result[i].LongAttackData.ManipulationRadius = EditorGUILayout.FloatField("Radius", Hoster.SkillData.Result[i].LongAttackData.ManipulationRadius);
                        Hoster.SkillData.Result[i].LongAttackData.ManipulationForce  = EditorGUILayout.FloatField("Force", Hoster.SkillData.Result[i].LongAttackData.ManipulationForce);
                    }
                    else
                    {
                        Hoster.SkillData.Result[i].LongAttackData.ManipulationRadius = 0;
                        Hoster.SkillData.Result[i].LongAttackData.ManipulationForce  = 0;
                    }
                }

                EditorGUILayout.Space();
                if (Hoster.SkillData.NeedTarget && Hoster.SkillData.Result[i].LongAttackData.Type != XResultBulletType.Satellite && Hoster.SkillData.Result[i].LongAttackData.Type != XResultBulletType.Ring)
                {
                    Hoster.SkillData.Result[i].LongAttackData.Follow = EditorGUILayout.Toggle("Follow", Hoster.SkillData.Result[i].LongAttackData.Follow);
                }
                EditorGUILayout.BeginHorizontal();
                Hoster.SkillData.Result[i].LongAttackData.Runningtime = EditorGUILayout.FloatField("Running Time", Hoster.SkillData.Result[i].LongAttackData.Runningtime);
                GUILayout.Label("(s)");
                GUILayout.Label("", GUILayout.MaxWidth(30));
                EditorGUILayout.EndHorizontal();

                if (Hoster.SkillData.Result[i].LongAttackData.Type != XResultBulletType.Satellite &&
                    Hoster.SkillData.Result[i].LongAttackData.Type != XResultBulletType.Ring)
                {
                    EditorGUILayout.BeginHorizontal();
                    Hoster.SkillData.Result[i].LongAttackData.Stickytime = EditorGUILayout.FloatField("Sticky Time", Hoster.SkillData.Result[i].LongAttackData.Stickytime);
                    GUILayout.Label("(s)");
                    GUILayout.Label("", GUILayout.MaxWidth(30));
                    EditorGUILayout.EndHorizontal();

                    if (!Hoster.SkillData.Result[i].Warning)
                    {
                        Hoster.SkillData.Result[i].LongAttackData.Velocity = EditorGUILayout.FloatField("Velocity", Hoster.SkillData.Result[i].LongAttackData.Velocity);
                    }
                }
                else
                {
                    if (Hoster.SkillData.Result[i].LongAttackData.Type == XResultBulletType.Satellite)
                    {
                        if (!Hoster.SkillData.Result[i].Warning)
                        {
                            EditorGUILayout.BeginHorizontal();
                            Hoster.SkillData.Result[i].LongAttackData.Palstance = EditorGUILayout.FloatField("Palstance", Hoster.SkillData.Result[i].LongAttackData.Palstance);
                            GUILayout.Label("(degree/s)");
                            GUILayout.Label("", GUILayout.MaxWidth(30));
                            EditorGUILayout.EndHorizontal();
                        }
                        EditorGUILayout.BeginHorizontal();
                        Hoster.SkillData.Result[i].LongAttackData.RingRadius = EditorGUILayout.FloatField("Ring Radius", Hoster.SkillData.Result[i].LongAttackData.RingRadius);
                        GUILayout.Label("(m)");
                        GUILayout.Label("", GUILayout.MaxWidth(30));
                        EditorGUILayout.EndHorizontal();
                    }
                    else if (Hoster.SkillData.Result[i].LongAttackData.Type == XResultBulletType.Ring)
                    {
                        if (!Hoster.SkillData.Result[i].Warning)
                        {
                            EditorGUILayout.BeginHorizontal();
                            Hoster.SkillData.Result[i].LongAttackData.RingVelocity = EditorGUILayout.FloatField("Ring Velocity", Hoster.SkillData.Result[i].LongAttackData.RingVelocity);
                            GUILayout.Label("(m/s)");
                            GUILayout.Label("", GUILayout.MaxWidth(30));
                            EditorGUILayout.EndHorizontal();
                        }
                        EditorGUILayout.BeginHorizontal();
                        Hoster.SkillData.Result[i].LongAttackData.RingRadius = EditorGUILayout.FloatField("Ring Width", Hoster.SkillData.Result[i].LongAttackData.RingRadius);
                        GUILayout.Label("(m)");
                        GUILayout.Label("", GUILayout.MaxWidth(30));
                        EditorGUILayout.EndHorizontal();
                        Hoster.SkillData.Result[i].LongAttackData.RingFull = EditorGUILayout.Toggle("Is Ring Full", Hoster.SkillData.Result[i].LongAttackData.RingFull);
                    }
                }

                if (Hoster.SkillData.Result[i].LongAttackData.WithCollision && Hoster.SkillData.Result[i].LongAttackData.Type != XResultBulletType.Ring)
                {
                    EditorGUILayout.BeginHorizontal();
                    Hoster.SkillData.Result[i].LongAttackData.Radius = EditorGUILayout.FloatField("Radius", Hoster.SkillData.Result[i].LongAttackData.Radius);
                    GUILayout.Label("(m)");
                    GUILayout.Label("", GUILayout.MaxWidth(30));
                    EditorGUILayout.EndHorizontal();
                }
                if (Hoster.SkillData.Result[i].LongAttackData.Type != XResultBulletType.Ring)
                {
                    Hoster.SkillData.Result[i].LongAttackData.FireAngle = EditorGUILayout.IntField("Angle (clockwise)", Hoster.SkillData.Result[i].LongAttackData.FireAngle);
                }
                EditorGUILayout.Space();
                if (Hoster.SkillData.Result[i].LongAttackData.Type != XResultBulletType.Ring)
                {
                    Hoster.SkillData.Result[i].LongAttackData.FlyWithTerrain = EditorGUILayout.Toggle("Fly with Terrain", Hoster.SkillData.Result[i].LongAttackData.FlyWithTerrain);
                }
                else
                {
                    Hoster.SkillData.Result[i].LongAttackData.FlyWithTerrain = false;
                }
                if (Hoster.SkillData.NeedTarget &&
                    (Hoster.SkillData.Result[i].LongAttackData.Type != XResultBulletType.Satellite && Hoster.SkillData.Result[i].LongAttackData.Type != XResultBulletType.Ring))
                {
                    Hoster.SkillData.Result[i].LongAttackData.AimTargetCenter = EditorGUILayout.Toggle("Aim Target Center", Hoster.SkillData.Result[i].LongAttackData.AimTargetCenter);
                }

                EditorGUILayout.Space();
                if (Hoster.SkillData.Result[i].LongAttackData.Type != XResultBulletType.Ring)
                {
                    if (!Hoster.SkillData.Result[i].LongAttackData.IsPingPong)
                    {
                        Hoster.SkillData.Result[i].LongAttackData.TriggerAtEnd = EditorGUILayout.Toggle("Trigger At End", Hoster.SkillData.Result[i].LongAttackData.TriggerAtEnd);
                    }
                    else
                    {
                        Hoster.SkillData.Result[i].LongAttackData.TriggerAtEnd = false;
                    }
                }
                else
                {
                    Hoster.SkillData.Result[i].LongAttackData.TriggerAtEnd = false;
                }

                if (Hoster.SkillData.Result[i].LongAttackData.TriggerAtEnd)
                {
                    float cycle = (Hoster.SkillData.Result[i].LongAttackData.TriggerAtEnd_Cycle / XSkillInspector.frame);
                    EditorGUILayout.BeginHorizontal();
                    cycle = EditorGUILayout.FloatField("Trigger End Cycle", cycle);
                    GUILayout.Label("(frame)");
                    GUILayout.Label("", GUILayout.MaxWidth(30));
                    EditorGUILayout.EndHorizontal();
                    Hoster.SkillData.Result[i].LongAttackData.TriggerAtEnd_Cycle = cycle * XSkillInspector.frame;
                    Hoster.SkillData.Result[i].LongAttackData.TriggerAtEnd_Count = EditorGUILayout.IntField("Trigger End Repeated Count", Hoster.SkillData.Result[i].LongAttackData.TriggerAtEnd_Count);
                }

                EditorGUILayout.Space();
                EditorGUILayout.LabelField("Bullet presentation configuration.", _myLabelStyle2);
                GameObject o = EditorGUILayout.ObjectField("Prefab", Hoster.SkillDataExtra.ResultEx[i].BulletPrefab, typeof(GameObject), true) as GameObject;
                {
                    if (XInnerEditor.CheckPrefab(o) && AssetDatabase.GetAssetPath(o).Contains("Prefabs/Bullets/"))
                    {
                        Hoster.SkillDataExtra.ResultEx[i].BulletPrefab = o;
                        string path = AssetDatabase.GetAssetPath(o).Remove(0, 17);
                        Hoster.SkillData.Result[i].LongAttackData.Prefab = path.Remove(path.LastIndexOf('.'));
                    }
                    else
                    {
                        Hoster.SkillDataExtra.ResultEx[i].BulletPrefab   = null;
                        Hoster.SkillData.Result[i].LongAttackData.Prefab = null;
                    }
                }
                EditorGUILayout.Space();
                if (!Hoster.SkillData.Result[i].LongAttackData.FlyWithTerrain && Hoster.SkillData.Result[i].LongAttackData.Type != XResultBulletType.Ring)
                {
                    GameObject hitfx = EditorGUILayout.ObjectField("Hit Ground Fx", Hoster.SkillDataExtra.ResultEx[i].BulletHitGroundFx, typeof(GameObject), true) as GameObject;
                    {
                        if (hitfx == null || !AssetDatabase.GetAssetPath(hitfx).Contains("Resources/Effects/"))
                        {
                            Hoster.SkillData.Result[i].LongAttackData.HitGround_Fx = null;
                            Hoster.SkillDataExtra.ResultEx[i].BulletHitGroundFx    = null;
                        }
                        else
                        {
                            Hoster.SkillDataExtra.ResultEx[i].BulletHitGroundFx = hitfx;
                            string path = AssetDatabase.GetAssetPath(hitfx).Remove(0, 17);
                            Hoster.SkillData.Result[i].LongAttackData.HitGround_Fx = path.Remove(path.LastIndexOf('.'));
                        }
                    }
                    if (Hoster.SkillData.Result[i].LongAttackData.HitGround_Fx != null)
                    {
                        Hoster.SkillData.Result[i].LongAttackData.HitGroundFx_LifeTime = EditorGUILayout.FloatField("Hit Ground Fx Duration", Hoster.SkillData.Result[i].LongAttackData.HitGroundFx_LifeTime);
                    }
                }

                GameObject fx = EditorGUILayout.ObjectField("End Fx", Hoster.SkillDataExtra.ResultEx[i].BulletEndFx, typeof(GameObject), true) as GameObject;
                if (fx == null || !AssetDatabase.GetAssetPath(fx).Contains("Resources/Effects/"))
                {
                    Hoster.SkillData.Result[i].LongAttackData.End_Fx = null;
                    Hoster.SkillDataExtra.ResultEx[i].BulletEndFx    = null;
                }
                else
                {
                    Hoster.SkillDataExtra.ResultEx[i].BulletEndFx = fx;
                    string path = AssetDatabase.GetAssetPath(fx);
                    path = path.Remove(0, path.IndexOf("Effects/"));
                    path = path.Remove(path.LastIndexOf('.'));
                    Hoster.SkillData.Result[i].LongAttackData.End_Fx = path;
                }

                if (Hoster.SkillData.Result[i].LongAttackData.End_Fx != null)
                {
                    Hoster.SkillData.Result[i].LongAttackData.EndFx_LifeTime = EditorGUILayout.FloatField("End Fx Duration", Hoster.SkillData.Result[i].LongAttackData.EndFx_LifeTime);
                    Hoster.SkillData.Result[i].LongAttackData.EndFx_Ground   = EditorGUILayout.Toggle("End Fx Ground", Hoster.SkillData.Result[i].LongAttackData.EndFx_Ground);
                }

                EditorGUILayout.Space();

                Hoster.SkillData.Result[i].LongAttackData.Audio = EditorGUILayout.TextField("Audio", Hoster.SkillData.Result[i].LongAttackData.Audio);
                if (!string.IsNullOrEmpty(Hoster.SkillData.Result[i].LongAttackData.Audio))
                {
                    Hoster.SkillData.Result[i].LongAttackData.Audio_Channel = AudioChannel.Motion;
                    EditorGUILayout.EnumPopup("Channel", Hoster.SkillData.Result[i].LongAttackData.Audio_Channel);
                }
                Hoster.SkillData.Result[i].LongAttackData.End_Audio = EditorGUILayout.TextField("End Audio", Hoster.SkillData.Result[i].LongAttackData.End_Audio);
                if (!string.IsNullOrEmpty(Hoster.SkillData.Result[i].LongAttackData.End_Audio))
                {
                    Hoster.SkillData.Result[i].LongAttackData.End_Audio_Channel = AudioChannel.Motion;
                    EditorGUILayout.EnumPopup("Channel", Hoster.SkillData.Result[i].LongAttackData.End_Audio_Channel);
                }
                EditorGUILayout.Space();
            }

            EditorGUILayout.LabelField("Other settings.", _myLabelStyle2);
            Hoster.SkillData.Result[i].Warning = EditorGUILayout.Toggle("Has Warning", Hoster.SkillData.Result[i].Warning);
            if (Hoster.SkillData.Result[i].Warning)
            {
                Hoster.SkillData.Result[i].Warning_Idx = EditorGUILayout.IntField("Waring Idx", Hoster.SkillData.Result[i].Warning_Idx);
            }

            if (Hoster.SkillData.Result[i].LongAttackEffect)
            {
                Hoster.SkillData.Result[i].Affect_Direction = XResultAffectDirection.AttackDir;
            }
            else
            {
                Hoster.SkillData.Result[i].Affect_Direction = (XResultAffectDirection)EditorGUILayout.EnumPopup("Result Affect Direction", Hoster.SkillData.Result[i].Affect_Direction);
            }

            if (i != Hoster.SkillData.Result.Count - 1)
            {
                GUILayout.Box("", line);
                EditorGUILayout.Space();
            }
        }
    }
Exemple #2
0
 static void SkillOpener()
 {
     XInnerEditor.OpenSkill();
 }
Exemple #3
0
    public override void OnInspectorGUI()
    {
        if (_labelstyle == null)
        {
            _labelstyle          = new GUIStyle(EditorStyles.boldLabel);
            _labelstyle.fontSize = 13;
        }

        if (_myLabelStyle2 == null)
        {
            _myLabelStyle2           = new GUIStyle(GUI.skin.label);
            _myLabelStyle2.fontStyle = FontStyle.Italic;
        }

        /*****Camera Settings*****/
        GUILayout.Label("Camera Settings :", _labelstyle);
        _hoster.defaultFov = EditorGUILayout.FloatField("Field of View", _hoster.defaultFov);

        /*****Base Settings*****/
        GUILayout.Label("Basic Settings :", _labelstyle);
        EditorGUILayout.LabelField("Data File", _hoster.SkillDataExtra.ScriptFile);
        EditorGUILayout.LabelField("Data Path", _hoster.SkillDataExtra.ScriptPath);
        _hoster.ConfigData.Speed       = EditorGUILayout.FloatField("Speed", _hoster.ConfigData.Speed);
        _hoster.ConfigData.RotateSpeed = EditorGUILayout.FloatField("Rotate Speed", _hoster.ConfigData.RotateSpeed);
        EditorGUILayout.Space();
        _hoster.EditorData.XFrameByFrame = EditorGUILayout.Toggle("Frame By Frame", _hoster.EditorData.XFrameByFrame);
        EditorGUILayout.Space();

        /*****Skill Settings*****/
        GUILayout.Label("Skill Settings :", _labelstyle);
        if (_hoster.SkillData.TypeToken != 2)
        {
            EditorGUI.BeginChangeCheck();
            AnimationClip clip = EditorGUILayout.ObjectField("Clip", _hoster.SkillDataExtra.SkillClip, typeof(AnimationClip), true) as AnimationClip;
            if (EditorGUI.EndChangeCheck() && clip != null)
            {
                _hoster.SkillDataExtra.SkillClip = clip;
                _hoster.ConfigData.SkillClip     = AssetDatabase.GetAssetPath(clip);
                _hoster.ConfigData.SkillClipName = clip.name;
            }
            EditorGUILayout.LabelField("Clip Name", _hoster.ConfigData.SkillClip);
            if (_hoster.SkillDataExtra.SkillClip != null)
            {
                _hoster.SkillDataExtra.SkillClip_Frame = (_hoster.SkillDataExtra.SkillClip.length / frame);
            }
        }

        EditorGUILayout.LabelField("Clip Length", (_hoster.SkillDataExtra.SkillClip_Frame * frame).ToString("F3") + "s" + "\t" + _hoster.SkillDataExtra.SkillClip_Frame.ToString("F1") + "(frame)");
        EditorGUILayout.Space();
        if (_hoster.SkillData.TypeToken == 2)
        {
            _hoster.SkillDataExtra.SkillClip_Frame = 0;
        }
        _hoster.SkillData.NeedTarget      = EditorGUILayout.Toggle("Need Target", _hoster.SkillData.NeedTarget);
        _hoster.SkillData.OnceOnly        = EditorGUILayout.Toggle("Once Only", _hoster.SkillData.OnceOnly);
        _hoster.SkillData.IgnoreCollision = EditorGUILayout.Toggle("Disable Collision", _hoster.SkillData.IgnoreCollision);

        EditorGUILayout.Space();
        _hoster.SkillData.Time      = EditorGUILayout.FloatField("Skill Time", _hoster.SkillData.Time);
        _hoster.SkillData.CoolDown  = EditorGUILayout.FloatField("Cool Down", _hoster.SkillData.CoolDown);
        _hoster.SkillData.TypeToken = EditorGUILayout.Popup("Skill Type", _hoster.SkillData.TypeToken, XSkillData.Skills);
        if (_hoster.SkillData.TypeToken != 2 && _hoster.SkillDataExtra.SkillClip == null)
        {
            return;
        }
        if (_hoster.SkillData.TypeToken == 0)
        {
            _hoster.SkillData.SkillPosition = (int)EditorGUILayout.Popup("Position", _hoster.SkillData.SkillPosition, XSkillData.JA_Command);
            if (!_xOptions.Contains("Combos"))
            {
                _xOptions.Insert(2, "Combos");
            }
        }
        else if (_hoster.SkillData.TypeToken != 2)
        {
            if (_xOptions.Contains("Combos"))
            {
                _xOptions.Remove("Combos");
            }
        }
        EditorGUILayout.Space();

        _hoster.SkillData.Cast_Range_Rect = EditorGUILayout.Toggle("Cast Range Rect", _hoster.SkillData.Cast_Range_Rect);
        if (_hoster.SkillData.Cast_Range_Rect)
        {
            _hoster.SkillData.Cast_Scope       = EditorGUILayout.FloatField("Cast Range Width", _hoster.SkillData.Cast_Scope);
            _hoster.SkillData.Cast_Range_Upper = EditorGUILayout.FloatField("Cast Range Depth", _hoster.SkillData.Cast_Range_Upper);
            _hoster.SkillData.Cast_Offset_X    = EditorGUILayout.FloatField("Cast Offset X", _hoster.SkillData.Cast_Offset_X);
            _hoster.SkillData.Cast_Offset_Z    = EditorGUILayout.FloatField("Cast Offset Z", _hoster.SkillData.Cast_Offset_Z);
            EditorGUILayout.LabelField("Positive means Clock-wise.", _myLabelStyle2);
            _hoster.SkillData.Cast_Scope_Shift = EditorGUILayout.FloatField("Cast Rect Shift", _hoster.SkillData.Cast_Scope_Shift);
        }
        else
        {
            _hoster.SkillData.Cast_Range_Lower = EditorGUILayout.FloatField("Cast Range (↓)", _hoster.SkillData.Cast_Range_Lower);
            _hoster.SkillData.Cast_Range_Upper = EditorGUILayout.FloatField("Cast Range (↑)", _hoster.SkillData.Cast_Range_Upper);
            _hoster.SkillData.Cast_Scope       = EditorGUILayout.FloatField("Cast Scope", _hoster.SkillData.Cast_Scope);
            _hoster.SkillData.Cast_Offset_X    = EditorGUILayout.FloatField("Cast Offset X", _hoster.SkillData.Cast_Offset_X);
            _hoster.SkillData.Cast_Offset_Z    = EditorGUILayout.FloatField("Cast Offset Z", _hoster.SkillData.Cast_Offset_Z);
            EditorGUILayout.LabelField("Positive means Clock-wise.", _myLabelStyle2);
            _hoster.SkillData.Cast_Scope_Shift = EditorGUILayout.FloatField("Cast Scope Shift", _hoster.SkillData.Cast_Scope_Shift);
        }

        EditorGUILayout.Space();

        EditorGUILayout.BeginHorizontal();
        _hoster.SkillData.CameraTurnBack = EditorGUILayout.FloatField("Camera Tail Speed Ratio", _hoster.SkillData.CameraTurnBack);
        EditorGUILayout.LabelField("(multiplied by)", GUILayout.MaxWidth(90));
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.Space();
        bool MultipleAttackSupported = _hoster.SkillData.MultipleAttackSupported;

        _hoster.SkillData.MultipleAttackSupported = EditorGUILayout.Toggle("Multiple Direction", _hoster.SkillData.MultipleAttackSupported);
        if (!MultipleAttackSupported && _hoster.SkillData.MultipleAttackSupported)
        {
            _hoster.SkillData.MultipleAttackSupported = EditorUtility.DisplayDialog("Confirm your selection.",
                                                                                    "Multiple direction needs 8 attacking-animations support!",
                                                                                    "Confirmed", "Cancel");
        }
        if (_hoster.SkillData.MultipleAttackSupported)
        {
            _hoster.SkillData.BackTowardsDecline = EditorGUILayout.Slider("Backwards Decline", _hoster.SkillData.BackTowardsDecline, 0, 1);
        }
        EditorGUILayout.Space();
        EditorGUILayout.Space();

        /*****Timer*****/
        GUILayout.Label("Timer :", _labelstyle);
        EditorGUILayout.BeginHorizontal();
        if (_hoster.SkillData.TypeToken == 2)
        {
            _option = EditorGUILayout.Popup("Create", _option, new string[] { "Combined", "Fx", "Audio", "Camera Shake" });
        }
        else
        {
            _option = EditorGUILayout.Popup("Create", _option, _xOptions.ToArray());
        }

        if (GUILayout.Button(_content_add, GUILayout.MaxWidth(30)))
        {
            if (_hoster.SkillData.TypeToken == 2)
            {
                switch (_option)
                {
                case 1: _fx.Add(); break;
                }
            }
            else
            {
                switch (_option)
                {
                case 0: _result.Add(); break;

                case 1: _hit.Add(); break;

                case 2: _manip.Add(); break;

                case 3: _fx.Add(); break;

                case 4: _warning.Add(); break;

                case 5: _mob.Add(); break;
                }
            }
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.Space();
        if (_hoster.SkillData.TypeToken == 2)
        {
            _hit.OnGUI();
            EditorGUILayout.Space();
            _fx.OnGUI();
            EditorGUILayout.Space();
        }
        else
        {
            foreach (XPanel panel in _panels)
            {
                panel.OnGUI();
                EditorGUILayout.Space();
            }
        }

        EditorGUILayout.Space();
        EditorGUILayout.BeginHorizontal();
        GUILayout.FlexibleSpace();
        if (GUILayout.Button("Apply", GUILayout.MaxWidth(150)))
        {
            SerializeData(GetDataFileWithPath());
        }
        EditorGUILayout.Space();
        if (GUILayout.Button("Revert", GUILayout.MaxWidth(150)))
        {
            DeserializeData(GetDataFileWithPath());
        }
        if (!string.IsNullOrEmpty(last_file))
        {
            EditorGUILayout.Space();
            if (GUILayout.Button("Open Last", GUILayout.MaxWidth(150)))
            {
                next_file = last_file;
            }
        }
        GUILayout.FlexibleSpace();
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.Space();

        XDataBuilder.singleton.Update(_hoster);
        /*Repaint();*/

        if (!string.IsNullOrEmpty(next_file))
        {
            if (EditorUtility.DisplayDialog("Open new skill", "Do you want to save current skill?", "Do", "Do Not"))
            {
                SerializeData(GetDataFileWithPath());
            }

            last_file = GetDataFileWithPath();
            XInnerEditor.OpenSkill(next_file);
            next_file = null;
        }
    }