public void EmptyEntity_LocalIdentity()
        {
            var entity = new Entity();
            var result = TransformationUtils.GetTransformation(entity);

            Assert.AreEqual(Matrix.Identity, result.LocalTransformMatrix);
        }
        public void HaveSelfValues_LocalMatrixFilled()
        {
            var entity = new Entity();

            entity.AddComponent(new PositionComponent(2, 3));
            entity.AddComponent(new ScaleComponent(4, 5));
            var result = TransformationUtils.GetTransformation(entity);

            Assert.AreEqual(
                new Matrix
            {
                M11 = 4,
                M12 = 0,
                M13 = 0,
                M14 = 0,
                M21 = 0,
                M22 = 5,
                M23 = 0,
                M24 = 0,
                M31 = 0,
                M32 = 0,
                M33 = 1,
                M34 = 0,
                M41 = 2,
                M42 = 3,
                M43 = 0,
                M44 = 1
            },
                result.LocalTransformMatrix);
        }
示例#3
0
        protected override void DoAction(Entity entity, TimeSpan gameTime)
        {
            base.DoAction(entity, gameTime);
            var sprite = entity.GetComponent <SpriteComponent>();
            var effect = entity.GetComponent <SpriteEffectsComponent>()?.SpriteEffects ?? SpriteEffects.None;
            var color  = entity.GetComponent <ColorComponent>()?.Color ?? Color.White;
            var depth  = entity.GetComponent <DepthLayerComponent>()?.Depth ?? 0;

            if (sprite.Drawable == null)
            {
                entity.RemoveComponent <FinalRenderComponent>();
                return;
            }

            var finalRender = entity.GetOrCreateComponent <FinalRenderComponent>();

            finalRender.Batch.Clear();

            sprite.Drawable.DrawInto(color, depth, finalRender.Batch);
            var transformation = TransformationUtils.GetTransformation(entity).LocalTransformMatrix;

            foreach (var mesh in finalRender.Batch.Meshes)
            {
                mesh.ApplyEffectToMesh(effect);
                mesh.ApplyTransformMesh(transformation);
            }
        }
示例#4
0
        private void UpdateFollow(Entity entity)
        {
            var follow = entity.GetComponent <FollowCameraComponent>();

            follow.DesiredPosition.X = follow.DesiredPosition.Y = 0;

            var transform = TransformationUtils.GetTransformation(entity);

            follow.DesiredPosition.X = transform.Position.X;
            follow.DesiredPosition.Y = transform.Position.Y;
        }
示例#5
0
        protected override void DoAction(Entity entity, TimeSpan gameTime)
        {
            base.DoAction(entity, gameTime);
            var field       = entity.GetComponent <FieldComponent>();
            var finalRender = entity.GetOrCreateComponent <FinalRenderComponent>();
            var effect      = entity.GetComponent <SpriteEffectsComponent>()?.SpriteEffects ?? SpriteEffects.None;
            var depth       = entity.GetComponent <DepthLayerComponent>()?.Depth ?? 0;

            if (finalRender.Batch.Meshes.Count != field.Map.GetLength(0) * field.Map.GetLength(1))
            {
                finalRender.Batch.Clear();

                var texture = field.Texture;

                for (var x = 0; x < field.Map.GetLength(0); x++)
                {
                    for (var y = 0; y < field.Map.GetLength(1); y++)
                    {
                        finalRender.Batch.Draw(
                            texture,
                            new RectangleF(
                                x * (field.BlockSize + field.BlockInterval),
                                y * (field.BlockSize + field.BlockInterval),
                                field.BlockSize,
                                field.BlockSize),
                            texture.Bounds,
                            this.ConvertMapToColor(field.Map[x, y]),
                            depth);
                    }
                }

                var transformation = TransformationUtils.GetTransformation(entity).LocalTransformMatrix;
                foreach (var mesh in finalRender.Batch.Meshes)
                {
                    mesh.ApplyEffectToMesh(effect);
                    mesh.ApplyTransformMesh(transformation);
                }
            }
            else
            {
                for (var x = 0; x < field.Map.GetLength(0); x++)
                {
                    for (var y = 0; y < field.Map.GetLength(1); y++)
                    {
                        finalRender.Batch.Meshes[x * field.Map.GetLength(1) + y].SetColor(this.ConvertMapToColor(field.Map[x, y]));
                    }
                }
            }
        }
示例#6
0
        protected override void DoAction(Entity entity, TimeSpan gameTime)
        {
            base.DoAction(entity, gameTime);
            var map   = entity.GetComponent <TiledMapComponent>();
            var depth = entity.GetComponent <DepthLayerComponent>()?.Depth ?? 0;

            var finalRender = entity.GetComponent <FinalRenderComponent>();

            if (finalRender == null)
            {
                finalRender = entity.AddComponent <FinalRenderComponent>();
            }
            finalRender.Batch.Clear();

            var transformMatrix = TransformationUtils.GetTransformation(entity).LocalTransformMatrix;

            this.Draw(map, depth, finalRender.Batch, transformMatrix);
        }
        protected override void DoAction(Entity entity, TimeSpan gameTime)
        {
            base.DoAction(entity, gameTime);

            var mouse     = entity.GetComponent <InputMouseComponent>();
            var clickable = entity.GetComponent <CursorOverComponent>();

            var mousePosition  = this.scene.Camera.ScreenToWorldPoint(mouse.MousePosition);
            var entityPosition = TransformationUtils.GetTransformation(entity);

            var matrix = entityPosition.LocalTransformMatrix;

            Matrix.Invert(ref matrix, out matrix);
            Vector2.Transform(ref mousePosition, ref matrix, out mousePosition);

            var rect = clickable.OverRegion;

            clickable.IsMouseOver = rect.Contains(mousePosition);
        }
        public void HaveParentTranslation_LocalMatrixMoved()
        {
            var parent = new Entity();

            parent.AddComponent(new PositionComponent(2, 3));
            parent.AddComponent(new ScaleComponent(4, 5));

            var entity = new Entity();

            entity.AddComponent(new PositionComponent(2, 3));
            entity.AddComponent(new ScaleComponent(4, 5));
            entity.AddComponent(new ParentComponent(parent));
            var result = TransformationUtils.GetTransformation(entity);

            Assert.AreEqual(
                new Matrix
            {
                M11 = 16,
                M12 = 0,
                M13 = 0,
                M14 = 0,
                M21 = 0,
                M22 = 25,
                M23 = 0,
                M24 = 0,
                M31 = 0,
                M32 = 0,
                M33 = 1,
                M34 = 0,
                M41 = 10,
                M42 = 18,
                M43 = 0,
                M44 = 1
            },
                result.LocalTransformMatrix);
        }
        public void EntityNull_NullResponse()
        {
            var result = TransformationUtils.GetTransformation(null);

            Assert.IsNull(result);
        }