public override void OnMoveUpdate(float time) { if (effecrObj != null) { foreach (var p in particleSys) { p.Simulate(time, true); } Vector3 dir = _originDir; if (skillunit.launchType == JSkillUnit.LaunchType.SINGLELINE) { SkillLine line = (SkillLine)skillunit.skillObj; float fen = time / (line.moveTime / 1000f); Vector3 final = _originPos + dir * line.speed * line.moveTime / 1000f; effecrObj[0].transform.position = Vector3.Lerp(_originPos, final, fen); } if (skillunit.launchType == JSkillUnit.LaunchType.MULLINE) { SkillMultiLine line = (SkillMultiLine)skillunit.skillObj; float fen = time / (line.moveTime / 1000f); Vector3 final = _originPos + dir * line.speed * line.moveTime / 1000f; effecrObj[0].transform.position = Vector3.Lerp(_originPos, final, fen); effecrObj[0].transform.forward = _originDir; } } }
public SkillMultiLine Copy() { SkillMultiLine b = new SkillMultiLine(); b.id = id; b.moveTime = moveTime; b.speed = speed; b.unitCount = unitCount; b.waves = waves; b.waveDelay = waveDelay; b.maxInfluence = maxInfluence; b.canPierce = canPierce; b.hitArea = hitArea.Copy(); b.shape = shape.Copy(); b.offset = offset; return(b); }
public static void DrawSkillMultiLine(SkillMultiLine line) { EditorGUILayout.BeginVertical("Box"); line.id = EditorGUILayout.IntField(" id", line.id); line.moveTime = EditorGUILayout.IntField(" moveTime", line.moveTime); line.unitCount = EditorGUILayout.IntField(" unitCount:", line.unitCount); line.speed = EditorGUILayout.FloatField(" speed:", line.speed); line.waves = EditorGUILayout.IntField(" waves:", line.waves); line.waveDelay = EditorGUILayout.IntField(" waveDelay:", line.waveDelay); line.maxInfluence = EditorGUILayout.IntField(" maxInfluence:", line.maxInfluence); line.canPierce = EditorGUILayout.Toggle(" canPierce:", line.canPierce); line.offset = EditorGUILayout.Vector3Field(" offset:", line.offset); SkillShape hitarea = line.hitArea; DrawSkillShape(" hitArea:", hitarea); SkillShape shape = line.shape; DrawSkillShape(" shape:", shape); EditorGUILayout.EndVertical(); }
public static SkillUnit.SkillMultiLine ConvertSkillMultiLine(SkillMultiLine unit) { SkillUnit.SkillMultiLine oUnit = new SkillUnit.SkillMultiLine(); oUnit.id = unit.id; oUnit.moveTime = unit.moveTime; oUnit.canPierce = unit.canPierce; oUnit.offset = new Math.Vector3f(); oUnit.offset.x = unit.offset.x; oUnit.offset.y = unit.offset.y; oUnit.offset.z = unit.offset.z; oUnit.speed = unit.speed; oUnit.waves = unit.waves; oUnit.unitCount = unit.unitCount; oUnit.waveDelay = unit.waveDelay; oUnit.maxInfluence = unit.maxInfluence; oUnit.hitArea = ConvertSkillShape(unit.hitArea); oUnit.shape = ConvertSkillShape(unit.shape); return(oUnit); }
public static SkillMultiLine ConvertSkillMultiLine(SkillUnit.SkillMultiLine unit) { SkillMultiLine oUnit = new SkillMultiLine(); oUnit.id = unit.id; oUnit.moveTime = unit.moveTime; oUnit.canPierce = unit.canPierce; oUnit.offset = Vector3.zero; if (unit.offset != null) { oUnit.offset = new Vector3(unit.offset.x, unit.offset.y, unit.offset.z); } oUnit.speed = unit.speed; oUnit.waves = unit.waves; oUnit.unitCount = unit.unitCount; oUnit.waveDelay = unit.waveDelay; oUnit.maxInfluence = unit.maxInfluence; oUnit.hitArea = ConvertSkillShape(unit.hitArea); oUnit.shape = ConvertSkillShape(unit.shape); return(oUnit); }
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()); }