public Skybox(GameContext gameContext) : base(gameContext) { DrawableElement = new DrawableElement(false, null); var height = 1.0f / 3.0f; var width = 0.25f; const float threshold = 0.001f; var coords = new[] { new Vector2(1.0f * width + threshold, 1.0f * height + threshold), new Vector2(width - threshold * 2, height - threshold * 2), new Vector2(3.0f * width + threshold, 1.0f * height + threshold), new Vector2(width - threshold * 2, height - threshold * 2), new Vector2(2.0f * width + threshold, 1.0f * height + threshold), new Vector2(width - threshold * 2, height - threshold * 2), new Vector2(0.0f * width + threshold, 1.0f * height + threshold), new Vector2(width - threshold * 2, height - threshold * 2), new Vector2(1.0f * width + threshold, 0.0f * height + threshold), new Vector2(width - threshold * 2, height - threshold * 2), new Vector2(1.0f * width + threshold, 2.0f * height + threshold), new Vector2(width - threshold * 2, height - threshold * 2), }; _skyBoxModel = new Mesh(GameContext.GetService <GraphicsDevice>(), Primitives.GenerateCubeData(coords)); DrawableElement.Mesh = _skyBoxModel; DrawableElement.Material = new Material { CastShadow = false, ReceiveShadow = false, UseTransparency = false }; Scale = 1.0f; }
public ModelEntityComponent(EntityComponentDataCreationStruct parameters) : base(parameters) { _drawableElement = GameInstance.GetService<SceneRenderer>().CreateDrawableElement(true); IsBillboard = GetDataOrDefault("IsBillboard", false); var modelReference = GetData<string>("MeshReference"); var useTransparency = GetDataOrDefault("UseTransparency", false); var gameMode = GameInstance.GetService<GameModeManager>().ActiveGameMode; if (!string.IsNullOrEmpty(modelReference)) { var primitiveMesh = gameMode.GetPrimitiveMesh(modelReference); if (primitiveMesh != null) { _drawableElement.Mesh = primitiveMesh; _drawableElement.Material = new Material(); } else { var modelMesh = gameMode.GetModel(modelReference).First(); _drawableElement.Mesh = modelMesh.Mesh; _drawableElement.Material = modelMesh.Material; } _drawableElement.Material.Color = new Color(GetDataOrDefault("Shading", Vector3.One)); _drawableElement.Material.CastShadow = true; _drawableElement.Material.ReceiveShadow = !useTransparency; _drawableElement.Material.UseTransparency = useTransparency; _drawableElement.Material.IsUnlit = false; } _regions = new List<TextureRegion>(); var textures = GetEnumeratedData<string>("Texture"); var regions = GetEnumeratedData<Rectangle>("Rectangle"); if (textures.Length == 1) { AddTextureRegion(gameMode.GetTexture(textures[0]), regions.Length == 0 ? (Rectangle?)null : regions[0]); } else { for (var i = 0; i < textures.Length; i++) { AddTextureRegion(gameMode.GetTexture(textures[0]), i >= regions.Length ? (Rectangle?)null : regions[i]); } } SetTexture(0); _drawableElement.IsActive = ReferringEntity.IsActive; if (!ReferringEntity.IsInitializing) _drawableElement.EndInitialzing(); }
public WorldUiOverlayEntityComponent(Entity referringEntity, int width, int height) : base(referringEntity) { var graphicsDevice = GameInstance.GetService<GraphicsDevice>(); _renderTarget = new RenderTarget2D(graphicsDevice, width, height, false, SurfaceFormat.Color, DepthFormat.None); _drawableElement = GameInstance.GetService<SceneRenderer>().CreateDrawableElement(true, CameraMasks.UiOverlays); _drawableElement.Mesh = new Mesh(graphicsDevice, Primitives.GenerateQuadForYBillboard(), PrimitiveType.TriangleList, false); _drawableElement.Material = new Material { CastShadow = false, Color = Color.White, DiffuseTexture = _renderTarget, ReceiveShadow = false, UseTransparency = false, IsUnlit = true }; }
public TilemapEntityComponent(EntityComponentDataCreationStruct parameters) : base(parameters) { var gameMode = GameInstance.GetService<GameModeManager>().ActiveGameMode; _drawableElement = GameInstance.GetService<SceneRenderer>().CreateDrawableElement(true); _drawableElement.Material = new Material { Color = new Color(GetDataOrDefault("Shading", Vector3.One)), CastShadow = true, ReceiveShadow = true, UseTransparency = false, IsUnlit = false, DiffuseTexture = gameMode.GetTexture(GetData<string>("Texture")) }; _drawableElement.IsActive = ReferringEntity.IsActive; var geometryData = CreateTilemapData(); GameInstance.EnsureExecutedInMainThread(() => _drawableElement.Mesh = new Mesh(GameInstance.GraphicsDevice, geometryData, holdGeometryData: false)); if (!ReferringEntity.IsInitializing) _drawableElement.EndInitialzing(); }
public ModelEntityComponent(Entity referringEntity, Mesh mesh, Material material, bool isBillboard) : base(referringEntity) { _drawableElement = GameInstance.GetService<SceneRenderer>().CreateDrawableElement(true); _drawableElement.Material = material; _drawableElement.Mesh = mesh; IsBillboard = isBillboard; }
public override void OnComponentRemove() { GameInstance.GetService<SceneRenderer>().RemoveDrawableElement(_drawableElement); _drawableElement = null; }