private void CreateSimpleDot(double x, double y) { var random = new Random(); var dot = new Entity { Name = "Dot" }; dot.AddComponent(Transform2DComponent.CreateDefault()); dot.AddComponent(new EllipseRendererComponent { Radius = 32, Color = Color.FromArgb(255, 0, 0, 0), FillInterior = true }); dot.AddComponent(new FollowEllipseComponent { Velocity = random.NextDouble() * 2 + 1, Width = 10, Height = 10, X = x, Y = y }); Scene.AddEntity(dot); }
public override void OnStart() { Debug.Assert(Entity != null, nameof(Entity) + " != null"); _transformComponent = Entity.GetComponent <Transform2DComponent>(); _inputComponent = Entity.GetComponent <InputComponent>(); }
public override void OnStart() { Debug.Assert(Entity != null, nameof(Entity) + " != null"); Debug.Assert(Entity.Parent != null, "Entity.Parent != null"); _cannonRotorTransform = Entity.Parent.GetComponent <Transform2DComponent>(); }
public TestObject( Game1 game, Vector2 position, int width, int height, Color color, int playerNumber, bool active) : base(game) { Transform2DComponent transformComponent = new Transform2DComponent( this, position, 0.0f, new Vector2(1.0f)); List<AABB> collisionBoxes = new List<AABB>(); Vector2 v1 = new Vector2(-10, 10); Vector2 v2 = new Vector2(10, 10); Vector2 v3 = new Vector2(10, -10); Vector2 v4 = new Vector2(-10, -10); List<Vector2> vertices = new List<Vector2>(); vertices.Add(v1); vertices.Add(v2); vertices.Add(v3); vertices.Add(v4); this.AddComponent(transformComponent); this.AddComponent(new BoundingBoxComponent(this, new List<Shape>{new Shape(vertices)}, active)); this.AddComponent(new ColorComponent(this, color)); this.AddComponent(new PlayerComponent(this, playerNumber)); }
public void RenderScene_ShouldApplyViewRectangleOfCameraWithOverscanMatchedByWidth_WhenCameraAndScreenAspectRatioDiffers() { // Arrange var renderingSystem = GetRenderingSystem(); var renderingSceneBuilder = new RenderingSceneBuilder(); var cameraTransform = new Transform2DComponent { Translation = new Vector2(10, -10), Rotation = 0, Scale = Vector2.One }; var cameraEntity = renderingSceneBuilder.AddCamera(cameraTransform); var camera = cameraEntity.GetComponent <CameraComponent>(); camera.AspectRatioBehavior = AspectRatioBehavior.Overscan; // Camera view rectangle 2xScreenWidth and 4xScreenHeight // Camera view rectangle is 1:1 ratio while screen is 2:1 ratio camera.ViewRectangle = new Vector2(ScreenWidth * 2, ScreenHeight * 4); var entity = renderingSceneBuilder.AddSprite(Transform2DComponent.CreateDefault()); var scene = renderingSceneBuilder.Build(); // Act renderingSystem.RenderScene(scene); // Assert _renderer2D.Received(1).RenderSprite(entity.GetSprite(), // Sprite transform is half the scale and translation due to camera view rectangle being scaled by width to match new Matrix3x3(m11: 0.5, m12: 0, m13: -5, m21: 0, m22: 0.5, m23: 5, m31: 0, m32: 0, m33: 1)); }
public void RenderScene_ShouldApplyViewRectangleOfCamera_WhenSceneContainsEntityAndCamera() { // Arrange var renderingSystem = GetRenderingSystem(); var renderingSceneBuilder = new RenderingSceneBuilder(); var cameraTransform = new Transform2DComponent { Translation = new Vector2(10, -10), Rotation = 0, Scale = Vector2.One }; var cameraEntity = renderingSceneBuilder.AddCamera(cameraTransform); var camera = cameraEntity.GetComponent <CameraComponent>(); // Camera view rectangle is twice the screen resolution camera.ViewRectangle = new Vector2(ScreenWidth * 2, ScreenHeight * 2); var entity = renderingSceneBuilder.AddSprite(Transform2DComponent.CreateDefault()); var scene = renderingSceneBuilder.Build(); // Act renderingSystem.RenderScene(scene); // Assert _renderer2D.Received(1).RenderSprite(entity.GetSprite(), // Sprite transform is half the scale and translation due to camera view rectangle new Matrix3x3(m11: 0.5, m12: 0, m13: -5, m21: 0, m22: 0.5, m23: 5, m31: 0, m32: 0, m33: 1)); }
public void ToMatrix(double tx, double ty, double r, double sx, double sy, double m11, double m12, double m13, double m21, double m22, double m23, double m31, double m32, double m33) { // Arrange var transformComponent = new Transform2DComponent { Translation = new Vector2(tx, ty), Rotation = r, Scale = new Vector2(sx, sy) }; // Act var matrix = transformComponent.ToMatrix(); // Assert Assert.That(matrix.M11, Is.EqualTo(m11)); Assert.That(matrix.M12, Is.EqualTo(m12)); Assert.That(matrix.M13, Is.EqualTo(m13)); Assert.That(matrix.M21, Is.EqualTo(m21)); Assert.That(matrix.M22, Is.EqualTo(m22)); Assert.That(matrix.M23, Is.EqualTo(m23)); Assert.That(matrix.M31, Is.EqualTo(m31)); Assert.That(matrix.M32, Is.EqualTo(m32)); Assert.That(matrix.M33, Is.EqualTo(m33)); }
public override void OnStart() { Debug.Assert(Entity != null, nameof(Entity) + " != null"); _transformComponent = Entity.GetComponent <Transform2DComponent>(); Debug.Assert(Entity.Scene != null, "Entity.Scene != null"); _birdTransformComponent = Entity.Scene.RootEntities.Single(e => e.Name == "Bird").GetComponent <Transform2DComponent>(); }
public override void OnStart() { Debug.Assert(Entity != null, nameof(Entity) + " != null"); _transformComponent = Entity.GetComponent <Transform2DComponent>(); _rectangleColliderComponent = Entity.GetComponent <RectangleColliderComponent>(); _birdSoundComponent = Entity.GetComponent <BirdSoundComponent>(); GlobalGameState.CurrentPhase = GlobalGameState.Phase.Playing; }
public override void OnStart() { Debug.Assert(Entity != null, nameof(Entity) + " != null"); _transformComponent = Entity.GetComponent <Transform2DComponent>(); _spriteAnimationComponent = Entity.GetComponent <SpriteAnimationComponent>(); _spriteAnimationComponent.PlayAnimation(FlapAnimation); _spriteAnimationComponent.Stop(); }
public override void OnStart() { Debug.Assert(Entity != null, nameof(Entity) + " != null"); _transform2D = Entity.GetComponent <Transform2DComponent>(); _time = RandomFactor; _translation = _transform2D.Translation; _rotation = _transform2D.Rotation; _scale = _transform2D.Scale; }
public void CreateDefault_ShouldReturnTransform2DComponentWithZeroTranslationZeroRotationAndScaleEqualOne() { // Arrange // Act var transformComponent = Transform2DComponent.CreateDefault(); // Assert Assert.That(transformComponent.Translation, Is.EqualTo(Vector2.Zero)); Assert.That(transformComponent.Rotation, Is.EqualTo(0)); Assert.That(transformComponent.Scale, Is.EqualTo(Vector2.One)); }
public Entity CreateCamera() { var entity = new Entity(); entity.AddComponent(Transform2DComponent.CreateDefault()); entity.AddComponent(new CameraComponent { AspectRatioBehavior = AspectRatioBehavior.Overscan, ViewRectangle = new Vector2(1280, 720) }); return(entity); }
public Entity AddCamera(Transform2DComponent?transformComponent = null) { var entity = new Entity(); entity.AddComponent(transformComponent ?? Transform2DComponent.CreateDefault()); entity.AddComponent(new CameraComponent { ViewRectangle = new Vector2(ScreenWidth, ScreenHeight) }); _scene.AddEntity(entity); return(entity); }
public Entity CreateGround() { var entity = new Entity(); entity.AddComponent(Transform2DComponent.CreateDefault()); entity.AddComponent(new SpriteRendererComponent { Sprite = _assetStore.GetAsset <Sprite>(new AssetId(new Guid("f0b24406-7fce-43e2-98b0-eb903fbc1e76"))), SortingLayerName = "Ground" }); entity.AddComponent(new GroundScrollingComponent()); return(entity); }
public void VectorY(double r, double vx, double vy) { // Arrange var transformComponent = new Transform2DComponent { Rotation = r }; // Act var vectorY = transformComponent.VectorY; // Assert Assert.That(vectorY, Is.EqualTo(new Vector2(vx, vy)).Using(Vector2Comparer)); }
public bool IsEntityHovered(Transform2DComponent transform2D, Interaction2DComponent interaction2D, MouseState mouseState) { var bounds = RectangleExtension.Transform(interaction2D.Bounds, transform2D.WorldMatrix); var mousePosition = _viewportAdapter == null ? mouseState.Position : _viewportAdapter.PointToScreen(mouseState.Position); return(bounds.Intersects(mousePosition)); //return mouseState.Position.X >= bounds.X && // mouseState.Position.X <= bounds.X + bounds.Width && // mouseState.Position.Y >= bounds.Y && // mouseState.Position.Y <= bounds.Y + bounds.Height; }
public Entity CreateGameOverVfx() { var entity = new Entity(); entity.AddComponent(Transform2DComponent.CreateDefault()); entity.AddComponent(new RectangleRendererComponent { Color = Color.FromArgb(0, 255, 255, 255), FillInterior = true, SortingLayerName = "VFX", Dimension = new Vector2(1280, 720) }); entity.AddComponent(new GameOverVfxComponent()); return(entity); }
private void CreateKeyText() { var text = new Entity(); text.AddComponent(Transform2DComponent.CreateDefault()); text.AddComponent(new TextRendererComponent { Color = Color.FromArgb(255, 255, 0, 255), FontSize = FontSize.FromDips(25), SortingLayerName = "UI" }); text.AddComponent(new InputComponent()); text.AddComponent(new SetTextForCurrentKeyComponent()); Scene.AddEntity(text); }
private void CreateRotatingText() { var text = new Entity(); text.AddComponent(Transform2DComponent.CreateDefault()); text.AddComponent(new TextRendererComponent { Text = "I am Text!", Color = Color.FromArgb(255, 0, 255, 0), FontSize = FontSize.FromPoints(16) }); text.AddComponent(new FollowEllipseComponent { Velocity = 1, Width = 300, Height = 300 }); text.AddComponent(new RotateComponent()); text.AddComponent(new DoMagicWithTextComponent()); Scene.AddEntity(text); }
public void SerializeAndDeserialize() { // Arrange var component = new Transform2DComponent { Translation = new Vector2(12.34, 56.78), Rotation = 123.456, Scale = new Vector2(87.65, 43.21) }; // Act var actual = SerializeAndDeserialize(component); // Assert Assert.That(actual.Translation, Is.EqualTo(component.Translation)); Assert.That(actual.Rotation, Is.EqualTo(component.Rotation)); Assert.That(actual.Scale, Is.EqualTo(component.Scale)); }
private void RenderDiagnosticInfo() { var width = _renderer2D.ScreenWidth; var height = _renderer2D.ScreenHeight; var color = Color.FromArgb(255, 0, 255, 0); var transform = new Transform2DComponent { Translation = new Vector2(-(width / 2) + 1, height / 2 - 1), Rotation = 0, Scale = Vector2.One }; foreach (var diagnosticInfo in _aggregatedDiagnosticInfoProvider.GetAllDiagnosticInfo()) { _renderer2D.RenderText(diagnosticInfo.ToString(), FontSize.FromDips(14), color, transform.ToMatrix()); transform.Translation -= new Vector2(0, 14); } }
private void CreateMousePointer() { var mousePointer = new Entity { Name = "MousePointer" }; mousePointer.AddComponent(Transform2DComponent.CreateDefault()); mousePointer.AddComponent(new EllipseRendererComponent { Radius = 10, Color = Color.FromArgb(255, 255, 0, 0), FillInterior = true }); mousePointer.AddComponent(new CircleColliderComponent { Radius = 10 }); mousePointer.AddComponent(new InputComponent()); mousePointer.AddComponent(new MousePointerComponent()); Scene.AddEntity(mousePointer); }
public void RenderScene_ShouldApplyViewRectangleOfCameraWithUnderscanMatchedByHeight_WhenCameraAndScreenAspectRatioDiffers() { // Arrange var renderingSystem = GetRenderingSystem(); var renderingSceneBuilder = new RenderingSceneBuilder(); var cameraTransform = new Transform2DComponent { Translation = new Vector2(10, -10), Rotation = 0, Scale = Vector2.One }; var cameraEntity = renderingSceneBuilder.AddCamera(cameraTransform); var camera = cameraEntity.GetComponent <CameraComponent>(); camera.AspectRatioBehavior = AspectRatioBehavior.Underscan; // Camera view rectangle 1xScreenWidth and 2xScreenHeight // Camera view rectangle is 1:1 ratio while screen is 2:1 ratio camera.ViewRectangle = new Vector2(ScreenWidth, ScreenHeight * 2); var entity = renderingSceneBuilder.AddSprite(Transform2DComponent.CreateDefault()); var scene = renderingSceneBuilder.Build(); // Act renderingSystem.RenderScene(scene); // Assert Received.InOrder(() => { _renderer2D.Clear(Color.FromArgb(255, 255, 255, 255)); _renderer2D.Clear(Color.FromArgb(255, 0, 0, 0)); _renderer2D.SetClippingRectangle(new AxisAlignedRectangle(ScreenHeight, ScreenHeight)); _renderer2D.Clear(Color.FromArgb(255, 255, 255, 255)); _renderer2D.Received(1).RenderSprite(entity.GetSprite(), // Sprite transform is half the scale and translation due to camera view rectangle being scaled by height to match new Matrix3x3(m11: 0.5, m12: 0, m13: -5, m21: 0, m22: 0.5, m23: 5, m31: 0, m32: 0, m33: 1)); _renderer2D.ClearClipping(); }); }
public void RenderScene_ShouldPerformCameraTransformationOnEntity_WhenSceneContainsEntityAndCamera() { // Arrange var renderingSystem = GetRenderingSystem(); var renderingSceneBuilder = new RenderingSceneBuilder(); var cameraTransform = new Transform2DComponent { Translation = new Vector2(10, -10), Rotation = 0, Scale = Vector2.One }; renderingSceneBuilder.AddCamera(cameraTransform); var entity = renderingSceneBuilder.AddSprite(Transform2DComponent.CreateDefault()); var scene = renderingSceneBuilder.Build(); // Act renderingSystem.RenderScene(scene); // Assert _renderer2D.Received(1).RenderSprite(entity.GetSprite(), Matrix3x3.CreateTranslation(new Vector2(-10, 10))); }
static void Main(string[] args) { // fisrt of all, perform scanning of assemblies for factory ECSManagerFactory.ScanAssemblies(AppDomain.CurrentDomain.GetAssemblies()); // after that, we can create ECS Manager ECSManager manager = ECSManagerFactory.CreateECSManager(); // let's create first entity! Entity firstEntity = manager.CreateEntity(); // now let's get transform component and move entity a little bit Transform2DComponent component = firstEntity.GetComponentOrDefault <Transform2DComponent>(); component.Position += new Vector2(10, 10); // attach a new component and change its values TestComponent newComponent = firstEntity.AttachComponent <TestComponent>(); newComponent.Variable1 += 10; GameTime testGameTime = new GameTime(TimeSpan.FromMilliseconds(100), TimeSpan.FromMilliseconds(100)); // here is the call of Update() // All routine, connected to creation of entities, attaching of components and etc. is performed within Update() manager.Update(testGameTime); // it is better to call Draw, isn't it? manager.Draw(testGameTime); // here is the one more call of Update() // Now all components are registered and can be processed in Systems manager.Update(testGameTime); // Now it is time to shutdown ECS manager - lets perform unloading of content manager.UnloadContent(); }
public Rectangle GetBoundingRectangle(Transform2DComponent transform2D) { var rectBody = new Rectangle(Offset.ToPoint(), Size.ToPoint()); return(RectangleExtension.Transform(rectBody, transform2D.WorldMatrix)); }