示例#1
0
            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);
            }
示例#2
0
        public override void OnStart()
        {
            Debug.Assert(Entity != null, nameof(Entity) + " != null");

            _transformComponent = Entity.GetComponent <Transform2DComponent>();
            _inputComponent     = Entity.GetComponent <InputComponent>();
        }
示例#3
0
        public override void OnStart()
        {
            Debug.Assert(Entity != null, nameof(Entity) + " != null");
            Debug.Assert(Entity.Parent != null, "Entity.Parent != null");

            _cannonRotorTransform = Entity.Parent.GetComponent <Transform2DComponent>();
        }
示例#4
0
        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));
        }
示例#8
0
        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>();
        }
示例#9
0
        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));
        }
示例#17
0
        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);
        }
示例#19
0
            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);
            }
示例#20
0
            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);
            }
示例#21
0
        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));
        }
示例#22
0
        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);
            }
        }
示例#23
0
            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)));
        }
示例#26
0
        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));
        }