mention rotate extension
	
		
			
	
		
	
	
		
			
				
	
				continuous-integration/drone/push Build is passing
				
					Details
				
			
		
	
				
					
				
			
				
	
				continuous-integration/drone/push Build is passing
				
					Details
				
			
		
	
							parent
							
								
									5b4c9d10c1
								
							
						
					
					
						commit
						913839edde
					
				| 
						 | 
					@ -66,6 +66,17 @@ While we're at it, let's add a few more math helper functions.
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					We need one last utility function. Bizarrely, **Vector2** does not provide a built-in rotation function. Let's fix that.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In **Vector2Extensions.cs**:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```cs
 | 
				
			||||||
 | 
					    public static Vector2 Rotate(this Vector2 vector, float radians)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return Vector2.Transform(vector, Matrix3x2.CreateRotation(radians));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Now we can construct a formula for our random serve direction. First, let's change the BallSpawner to take a speed value instead of a specific velocity.
 | 
					Now we can construct a formula for our random serve direction. First, let's change the BallSpawner to take a speed value instead of a specific velocity.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{{% notice tip %}}
 | 
					{{% notice tip %}}
 | 
				
			||||||
| 
						 | 
					@ -90,8 +101,8 @@ The difference between speed and velocity is that velocity contains directional
 | 
				
			||||||
Now, in **BallSpawner.cs**:
 | 
					Now, in **BallSpawner.cs**:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```cs
 | 
					```cs
 | 
				
			||||||
    var direction = (float)MathHelper.RandomDouble(-System.Math.PI / 4.0, System.Math.PI / 4.0);
 | 
					    var direction = MathHelper.RandomDouble(-System.Math.PI / 4.0, System.Math.PI / 4.0);
 | 
				
			||||||
    var velocity = new Vector2(message.Speed * (MathHelper.CoinFlip() ? -1 : 1), 0).Rotate(direction);
 | 
					    var velocity = new Vector2(message.Speed * (MathHelper.CoinFlip() ? -1 : 1), 0).Rotate((float)direction);
 | 
				
			||||||
    AddComponent(ball, new VelocityComponent(velocity));
 | 
					    AddComponent(ball, new VelocityComponent(velocity));
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue