Ejemplo n.º 1
0
        /// <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;
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
        /// <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];
        }