Example #1
0
        private JSingleLineTrajectory[] SingleLineFacyory(JTrajectoryClipData clip)
        {
            if (clip.skillunit.launchType != JSkillUnit.LaunchType.SINGLELINE)
            {
                return(null);
            }
            List <JSingleLineTrajectory> list = new List <JSingleLineTrajectory>();
            SkillLine line = (SkillLine)clip.skillunit.skillObj;

            if (line.waves == 0)
            {
                line.waves = 1;
            }
            for (int i = 0; i < line.waves; i++)
            {
                JSingleLineTrajectory sg = new JSingleLineTrajectory();
                sg.TargetObject = clip.TargetObject;
                sg.skillunit    = clip.skillunit;
                sg.effectunit   = clip.effectunit;
                sg._originDir   = clip.TargetObject.transform.forward;
                sg._delayBegin  = i * line.waveDelay;
                list.Add(sg);
            }
            if (clip.skillunit.guidePolicy != null)
            {
                clip.PlaybackDuration = (line.waveDelay * line.waves + line.moveTime + clip.skillunit.guidePolicy.guideTime + clip.skillunit.guidePolicy.guidingTime) / 1000f;
            }
            else
            {
                clip.PlaybackDuration = (line.waveDelay * line.waves + line.moveTime) / 1000f;
            }

            return(list.ToArray());
        }
Example #2
0
        private JSingleLineTrajectory[] MultiLineFacyory(JTrajectoryClipData clip)
        {
            if (clip.skillunit.launchType != JSkillUnit.LaunchType.MULLINE)
            {
                return(null);
            }
            List <JSingleLineTrajectory> list = new List <JSingleLineTrajectory>();
            SkillMultiLine line = (SkillMultiLine)clip.skillunit.skillObj;

            if (line.shape.area == SkillShape.Area.CIRCLE)
            {
                float   angle = 360f / line.unitCount;
                Vector3 dir   = clip.TargetObject.transform.forward;
                for (int i = 0; i < line.unitCount; i++)
                {
                    Vector3 ndir = RotateRound(dir, new Vector3(0, 1, 0), i * angle);
                    if (line.waves == 0)
                    {
                        line.waves = 1;
                    }
                    for (int j = 0; j < line.waves; j++)
                    {
                        JSingleLineTrajectory sg = new JSingleLineTrajectory();
                        sg.TargetObject = clip.TargetObject;
                        sg._originDir   = ndir;
                        sg.skillunit    = clip.skillunit;
                        sg.effectunit   = clip.effectunit;
                        sg._delayBegin  = j * line.waveDelay;
                        list.Add(sg);
                    }
                }
            }
            if (line.shape.area == SkillShape.Area.QUADRATE)
            {
                Vector3 dir  = clip.TargetObject.transform.forward;
                Vector3 ndir = RotateRound(dir, new Vector3(0, 1, 0), 90);
                if (line.unitCount > 1)
                {
                    ndir = ndir * line.shape.param2 / (line.unitCount - 1);
                }
                Vector3 beginPos = -ndir * (line.unitCount - 1) / 2f;
                for (int i = 0; i < line.unitCount; i++)
                {
                    if (line.waves == 0)
                    {
                        line.waves = 1;
                    }
                    for (int j = 0; j < line.waves; j++)
                    {
                        JSingleLineTrajectory sg = new JSingleLineTrajectory();
                        sg.TargetObject     = clip.TargetObject;
                        sg._originDir       = dir;
                        sg._originPosOffset = beginPos + ndir * i;
                        sg.skillunit        = clip.skillunit;
                        sg.effectunit       = clip.effectunit;
                        sg._delayBegin      = j * line.waveDelay;
                        list.Add(sg);
                    }
                }
            }
            if (line.shape.area == SkillShape.Area.SECTOR)
            {
                float   angle      = line.shape.param3 / (line.unitCount - 1);
                float   beginAngle = -angle * (line.unitCount - 1) / 2;
                Vector3 dir        = clip.TargetObject.transform.forward;
                for (int i = 0; i < line.unitCount; i++)
                {
                    Vector3 ndir = RotateRound(dir, new Vector3(0, 1, 0), beginAngle + i * angle);
                    if (line.waves == 0)
                    {
                        line.waves = 1;
                    }
                    for (int j = 0; j < line.waves; j++)
                    {
                        JSingleLineTrajectory sg = new JSingleLineTrajectory();
                        sg.TargetObject     = clip.TargetObject;
                        sg._originDir       = ndir;
                        sg._originPosOffset = ndir * line.shape.param1;
                        sg.skillunit        = clip.skillunit;
                        sg.effectunit       = clip.effectunit;
                        sg._delayBegin      = j * line.waveDelay;
                        list.Add(sg);
                    }
                }
            }
            if (line.shape.area == SkillShape.Area.TRIANGLE)
            {
                Vector3 dir  = clip.TargetObject.transform.forward;
                Vector3 ndir = RotateRound(dir, new Vector3(0, 1, 0), 90);
                if (line.unitCount > 1)
                {
                    ndir = ndir * line.shape.param2 / (line.unitCount - 1) / 2;
                }
                Vector3 beginPos = Vector3.zero;
                if (line.shape.param3 == 1)
                {
                    beginPos = -ndir * (line.unitCount - 1) / 2f;
                }
                if (line.shape.param3 == 2)
                {
                    beginPos = dir * line.shape.param1 - ndir * (line.unitCount - 1) / 2f;
                }
                Vector3 launchPos = Vector3.zero;
                Vector3 pdir      = Vector3.zero;
                for (int i = 0; i < line.unitCount; i++)
                {
                    if (line.shape.param3 == 1)
                    {
                        launchPos = beginPos + i * ndir;
                        Vector3 tempPos = dir * line.shape.param1;
                        pdir = (tempPos - launchPos).normalized;
                    }
                    else
                    if (line.shape.param3 == 2)
                    {
                        Vector3 tempPos = beginPos + i * ndir;
                        pdir = (tempPos - launchPos).normalized;
                    }

                    if (line.waves == 0)
                    {
                        line.waves = 1;
                    }
                    for (int j = 0; j < line.waves; j++)
                    {
                        JSingleLineTrajectory sg = new JSingleLineTrajectory();
                        sg._originPosOffset = launchPos;
                        sg._originDir       = pdir;
                        sg.TargetObject     = clip.TargetObject;
                        sg.skillunit        = clip.skillunit;
                        sg.effectunit       = clip.effectunit;
                        sg._delayBegin      = j * line.waveDelay;
                        list.Add(sg);
                    }
                }
            }
            if (clip.skillunit.guidePolicy != null)
            {
                clip.PlaybackDuration = (line.waveDelay * line.waves + line.moveTime + clip.skillunit.guidePolicy.guideTime + clip.skillunit.guidePolicy.guidingTime) / 1000f;
            }
            else
            {
                clip.PlaybackDuration = (line.waveDelay * line.waves + line.moveTime) / 1000f;
            }

            return(list.ToArray());
        }