private void Update()
        {
            switch (_machineState)
            {
            case MachineState.Idle:
                if (_instructionStack.Count > 0)
                {
                    _lastTargetMachineState = _currentInstruction.TargetMachineState;
                    _currentInstruction     = _instructionStack.Pop();
                    _animationTime          = 0f;
                    _machineState           = MachineState.DoingControlledMoves;
                }

                break;

            case MachineState.DoingControlledMoves:
                _animationTime += Time.deltaTime;

                var normalizedAnimationValue = _animationTime / _currentInstruction.MoveTime;
                var animatedMachineState     = _lastTargetMachineState.LerpTowards(
                    _currentInstruction.TargetMachineState,
                    (1 + Mathf.Cos((1 - normalizedAnimationValue) * Mathf.PI)) / 2f);

                AddToOriginState(animatedMachineState);

                if (_animationTime > _currentInstruction.MoveTime)
                {
                    _machineState = MachineState.Idle;
                }

                break;
            }
        }
示例#2
0
        /// <summary>
        /// Serialization in order to transfer the data via serial interface
        /// </summary>
        public static string Serialize(this LLInstruction llInstruction)
        {
            var builder = new StringBuilder();

            builder.Append((llInstruction.TargetMachineState.Motor1Rotation).ToString("0.00000"));
            builder.Append(":");
            builder.Append((llInstruction.TargetMachineState.Motor2Rotation).ToString("0.00000"));
            builder.Append(":");
            builder.Append((llInstruction.TargetMachineState.Motor3Rotation).ToString("0.00000"));
            builder.Append(":");
            builder.Append((llInstruction.TargetMachineState.Motor4Rotation).ToString("0.00000"));
            builder.Append(":");
            builder.Append(llInstruction.MoveTime.ToString("0.00000"));

            return(builder.ToString());
        }