random serve
parent
12e08e284c
commit
dccab83a00
|
@ -20,7 +20,7 @@ namespace PongFE.Engines
|
|||
SendMessage(
|
||||
new BallSpawnMessage(
|
||||
new MoonTools.Structs.Position2D(640, 360),
|
||||
new System.Numerics.Vector2(-200, 100),
|
||||
300,
|
||||
16,
|
||||
16
|
||||
),
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
using System.Numerics;
|
||||
using Encompass;
|
||||
using Microsoft.Xna.Framework.Graphics;
|
||||
using PongFE.Components;
|
||||
using PongFE.Messages;
|
||||
using PongFE.Extensions;
|
||||
|
||||
namespace PongFE.Spawners
|
||||
{
|
||||
|
@ -17,10 +19,14 @@ namespace PongFE.Spawners
|
|||
protected override void Spawn(BallSpawnMessage message)
|
||||
{
|
||||
var ball = CreateEntity();
|
||||
|
||||
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((float)direction);
|
||||
|
||||
AddComponent(ball, new PositionComponent(message.Position));
|
||||
AddComponent(ball, new VelocityComponent(message.Velocity));
|
||||
AddComponent(ball, new VelocityComponent(velocity));
|
||||
AddComponent(ball, new CollisionComponent(new MoonTools.Bonk.Rectangle(0, 0, 16, 16)));
|
||||
AddComponent(ball, new Texture2DComponent(WhitePixel, 0, new System.Numerics.Vector2(message.Width, message.Height)));
|
||||
AddComponent(ball, new Texture2DComponent(WhitePixel, 0, new Vector2(message.Width, message.Height)));
|
||||
AddComponent(ball, new CanBeBouncedComponent());
|
||||
AddComponent(ball, new BounceResponseComponent());
|
||||
AddComponent(ball, new CanBeTrackedComponent());
|
||||
|
|
|
@ -1,12 +1,17 @@
|
|||
using MoonTools.Structs;
|
||||
using System.Numerics;
|
||||
|
||||
namespace PongFE.Extensions
|
||||
{
|
||||
public static class Vector2Extensions
|
||||
{
|
||||
public static Microsoft.Xna.Framework.Vector2 ToXNAVector(this System.Numerics.Vector2 vector)
|
||||
public static Microsoft.Xna.Framework.Vector2 ToXNAVector(this Vector2 vector)
|
||||
{
|
||||
return new Microsoft.Xna.Framework.Vector2(vector.X, vector.Y);
|
||||
}
|
||||
|
||||
public static Vector2 Rotate(this Vector2 vector, float radians)
|
||||
{
|
||||
return Vector2.Transform(vector, Matrix3x2.CreateRotation(radians));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
using System.Numerics;
|
||||
using Encompass;
|
||||
using MoonTools.Structs;
|
||||
|
||||
|
@ -7,14 +6,14 @@ namespace PongFE.Messages
|
|||
public struct BallSpawnMessage : IMessage
|
||||
{
|
||||
public Position2D Position { get; }
|
||||
public Vector2 Velocity { get; }
|
||||
public float Speed { get; }
|
||||
public int Width { get; }
|
||||
public int Height { get; }
|
||||
|
||||
public BallSpawnMessage(Position2D position, Vector2 velocity, int width, int height)
|
||||
public BallSpawnMessage(Position2D position, float speed, int width, int height)
|
||||
{
|
||||
Position = position;
|
||||
Velocity = velocity;
|
||||
Speed = speed;
|
||||
Width = width;
|
||||
Height = height;
|
||||
}
|
||||
|
|
|
@ -80,7 +80,7 @@ namespace PongFE
|
|||
WorldBuilder.SendMessage(
|
||||
new BallSpawnMessage(
|
||||
new MoonTools.Structs.Position2D(640, 360),
|
||||
new System.Numerics.Vector2(-300, 200),
|
||||
300,
|
||||
16,
|
||||
16
|
||||
)
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
using System;
|
||||
|
||||
public static class MathHelper
|
||||
{
|
||||
private readonly static Random s_random = new Random();
|
||||
|
||||
public static double RandomDouble(double min, double max)
|
||||
{
|
||||
return (s_random.NextDouble() * (max - min)) + min;
|
||||
}
|
||||
|
||||
public static float RandomFloat(float min, float max)
|
||||
{
|
||||
return (float)RandomDouble(min, max);
|
||||
}
|
||||
|
||||
public static int Dice(int n)
|
||||
{
|
||||
return (int)Math.Floor(RandomDouble(0, n));
|
||||
}
|
||||
|
||||
public static bool CoinFlip()
|
||||
{
|
||||
return Dice(2) == 0;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue