private void CollisionDetection() { if (FzooMode) { return; } foreach (var playerPoint in GetPlayerPoints(0, 0)) { if (_field[playerPoint]) { var normal = _field.Normal(playerPoint); var rotationalForce = Vector2.Dot(normal, Vector2.FromTheta((_position - playerPoint).Theta - (float)Math.PI / 2)); _rotationVelocity += rotationalForce * 3; _velocity = normal * 5; } } }
protected override void Tick(Graphics graphics, Rectangle camera) { graphics.DrawImageUnscaled(_boardBitmap, -camera.X, -camera.Y); var center = camera.Center(); var screencenter = new Vector2(camera.Width / 2.0f, camera.Height / 2.0f); foreach (var pointable in EntitiesOfType <IPointable>()) { var delta = pointable.Position - center; var dist = Math.Min(camera.Width, camera.Height) / 2 - 10; if (Math.Abs(delta.X) > dist || Math.Abs(delta.Y) > dist) { graphics.DrawPolygon(pointable.Pen, new[] { (screencenter + delta.Normalized * dist).Point, (screencenter + Vector2.FromTheta(delta.Theta + 0.2f) * dist).Point, (screencenter + Vector2.FromTheta(delta.Theta - 0.2f) * dist).Point }); } } }