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