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()); }
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()); }