/// <summary> /// Initializing /// </summary> private void Initialize() { areaMultipliers = new float[Areas.Count]; for (int i = 0; i < areaMultipliers.Length; i++) { areaMultipliers[i] = Areas[i].Speed / Vector3.Distance(Areas[i].StartPosition, Areas[i].TargetPosition); } lowerBorder = 0f; upperBorder = 1f; stage = 1; path = 0f; pathMultiplier = 1f; movementPercentage = 0f; MovingScriptArea area = Areas[0]; cachedTransform.position = area.StartPosition; cachedTransform.rotation = area.StartRotation; currentBeginPoint = area.StartPosition; currentTargetPoint = area.TargetPosition; currentBeginRotation = area.StartRotation; currentTargetRotation = area.TargetRotation; movementMultiplier = areaMultipliers[0]; waitTime = area.Delay; }
/// <summary> /// Parses area from given string /// </summary> /// <param name="source">Source object</param> /// <param name="includeRotations">If rotations are used</param> /// <param name="includeSpeed">If custom speed is applied</param> /// <param name="includeDelay">If object has delay before it moves</param> /// <returns>Parsed <seealso cref="MovingScriptArea"/></returns> /// <exception cref="ArgumentOutOfRangeException">Throws if string had incorrect format</exception> public static MovingScriptArea FromString(string source, bool includeRotations, bool includeSpeed, bool includeDelay) { string[] sourceArray = source.Split(','); int index = 0; MovingScriptArea result = new MovingScriptArea(); //Parsing StartPosition and TargetPosition result.StartPosition = new Vector3( Convert.ToSingle(sourceArray[index++]), Convert.ToSingle(sourceArray[index++]), Convert.ToSingle(sourceArray[index++])); result.TargetPosition = new Vector3( Convert.ToSingle(sourceArray[index++]), Convert.ToSingle(sourceArray[index++]), Convert.ToSingle(sourceArray[index++])); //Parsing StartRotation and TargetRotation if (includeRotations) { result.StartRotation = new Quaternion( Convert.ToSingle(sourceArray[index++]), Convert.ToSingle(sourceArray[index++]), Convert.ToSingle(sourceArray[index++]), Convert.ToSingle(sourceArray[index++])); result.TargetRotation = new Quaternion( Convert.ToSingle(sourceArray[index++]), Convert.ToSingle(sourceArray[index++]), Convert.ToSingle(sourceArray[index++]), Convert.ToSingle(sourceArray[index++])); } //Parsing speed if (includeSpeed) { result.Speed = Convert.ToSingle(sourceArray[index++]); } //Parsing delay if (includeDelay) { result.Delay = Convert.ToSingle(sourceArray[index]); } return(result); }
/// <summary> /// Steps to next "stage" /// </summary> private void StepToNextStage() { if (path >= (float)Areas.Count) { path = (float)Areas.Count - (path - (float)Areas.Count); pathMultiplier = -1f; return; } else if (path <= 0f) { path = Mathf.Abs(path); pathMultiplier = 1f; return; } if (Areas.Count > 1) { upperBorder += pathMultiplier; lowerBorder += pathMultiplier; stage += (int)pathMultiplier; } else { stage = 1; } MovingScriptArea area = Areas[stage - 1]; waitTime = area.Delay; currentBeginPoint = area.StartPosition; currentTargetPoint = area.TargetPosition; currentBeginRotation = area.StartRotation; currentTargetRotation = area.TargetRotation; movementMultiplier = areaMultipliers[stage - 1]; }