//The camera cage keeps players from reaching the edge of the screen
        public int SetupCameraCage()
        {
            var cameraCage = EntityManager.GetEntityManager().NewEntity();
//            var renderComponentCage = new RenderComponentBuilder()
////                .Position((int)((int)viewportDimensions.X * 0.5), (int)(viewportDimensions.Y * 0.5), 2)
//                .Position(0, 0, 2)
//                .Dimensions((int)(viewportDimensions.X * 0.8), (int)(viewportDimensions.Y * 0.8))
//                .Fixed(true).Build();
            var cageSprite = new SpriteComponent()
            {
                SpriteName = "dot"
            };
            var collisionComponentCage = new CollisionComponent()
            {
                IsCage = true,
            };
            var offsetComponent = new RenderOffsetComponent()
            {
                Offset = new Vector2((float)(viewportDimensions.X * 0.25), (float)(viewportDimensions.Y * 0.25))
            };

            //          ComponentManager.Instance.AddComponentToEntity(renderComponentCage, cameraCage);
//            ComponentManager.Instance.AddComponentToEntity(cageSprite, cameraCage);
            ComponentManager.Instance.AddComponentToEntity(collisionComponentCage, cameraCage);
            ComponentManager.Instance.AddComponentToEntity(offsetComponent, cameraCage);
            return(cameraCage);
        }
Exemplo n.º 2
0
        // This method will render all the entities that are associated
        // with the render component. 1. we use our Component manager instance
        // to get all the entities with RenderComponent and then we render them.
        // we use the spritebach to draw all the entities.
        private void DrawEntities(SpriteBatch spriteBatch)
        {
            Dictionary <int, IComponent> renderableEntities =
                ComponentManager.Instance.GetEntitiesWithComponent(typeof(RenderComponent));

            foreach (var entity in renderableEntities)
            {
                PositionComponent positionComponent = ComponentManager.GetEntityComponentOrDefault <PositionComponent>(entity.Key);
                if (positionComponent == null)
                {
                    continue;
                }

                SpriteComponent sprite = ComponentManager.GetEntityComponentOrDefault <SpriteComponent>(entity.Key);
                if (sprite == null)
                {
                    continue;
                }

                RenderComponent       renderComponent = entity.Value as RenderComponent;
                RenderOffsetComponent offsetComponent = ComponentManager.GetEntityComponentOrDefault <RenderOffsetComponent>(entity.Key);
                MoveComponent         moveComponent   = ComponentManager.GetEntityComponentOrDefault <MoveComponent>(entity.Key);

                int       zIndex = positionComponent.ZIndex;
                Vector2   offset = offsetComponent?.Offset ?? default(Vector2);
                float     angle  = moveComponent?.Direction ?? 0;
                Rectangle destinationRectangle =
                    new Rectangle(
                        (int)(positionComponent.Position.X + offset.X),
                        (int)(positionComponent.Position.Y + offset.Y),
                        (int)(RenderComponentHelper.GetDimensions(renderComponent).Width *sprite.Scale),
                        (int)(RenderComponentHelper.GetDimensions(renderComponent).Height *sprite.Scale)
                        );

                // render the sprite only if it's visible (sourceRectangle) intersects
                // with the viewport.
                KeyValuePair <int, IComponent> camera = ComponentManager.Instance.GetEntitiesWithComponent(typeof(CameraViewComponent)).First();
                CameraViewComponent            cameraViewComponent = camera.Value as CameraViewComponent;
                if (cameraViewComponent.View.Intersects(destinationRectangle))
                {
                    var spriteCrop = new Rectangle(
                        sprite.Position,
                        new Point(sprite.TileWidth, sprite.TileHeight)
                        );

                    spriteBatch.Draw(
                        texture: sprite.Sprite,
                        destinationRectangle: destinationRectangle,
                        sourceRectangle: spriteCrop,
                        color: Color.White * sprite.Alpha,
                        rotation: (float)angle,
                        origin: new Vector2(x: sprite.TileWidth / 2, y: sprite.TileHeight / 2),
                        effects: SpriteEffects.None,
                        layerDepth: (float)zIndex / SystemConstants.LayerDepthMaxLimit
                        //layerDepth is a float between 0-1, as a result ZIndex will have a dividend (i.e. limit)
                        );
                }
            }
        }
Exemplo n.º 3
0
        public ButtonBuilder Offset(float x, float y)
        {
            _offsetComponent = new RenderOffsetComponent
            {
                Offset = new Vector2(x, y)
            };

            return(this);
        }
Exemplo n.º 4
0
        //The camera cage keeps players from reaching the edge of the screen
        public int SetupCameraCage()
        {
            var cameraCage = EntityManager.GetEntityManager().NewEntity();

            var renderComponentCage = new RenderComponent()
            {
                DimensionsComponent = new DimensionsComponent()
                {
                    Width  = (int)(viewportDimensions.X * 0.8),
                    Height = (int)(viewportDimensions.Y * 0.8)
                },
                Fixed = true
            };

            var position = new PositionComponent()
            {
                Position = new Vector2(0, 0),
                ZIndex   = 2
            };

            var cageSprite = new SpriteComponent()
            {
                SpriteName = "dot"
            };
            var collisionComponentCage = new CollisionComponent()
            {
                IsCage = true,
            };
            var offsetComponent = new RenderOffsetComponent()
            {
                Offset = new Vector2((float)(viewportDimensions.X * 0.25), (float)(viewportDimensions.Y * 0.25))
            };

            ComponentManager.Instance.AddComponentToEntity(renderComponentCage, cameraCage);
            //            ComponentManager.Instance.AddComponentToEntity(cageSprite, cameraCage);
            ComponentManager.Instance.AddComponentToEntity(position, cameraCage);
            ComponentManager.Instance.AddComponentToEntity(collisionComponentCage, cameraCage);
            ComponentManager.Instance.AddComponentToEntity(offsetComponent, cameraCage);
            return(cameraCage);
        }