//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); }
// 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) ); } } }
public ButtonBuilder Offset(float x, float y) { _offsetComponent = new RenderOffsetComponent { Offset = new Vector2(x, y) }; return(this); }
//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); }