Part of a Scene with contains Transformation and Optional Rendering Attachments. SceneNodes can be arranged in a hierarchy to allow complex transformations.
Inheritance: Pokemon3D.Common.IdObject
Example #1
0
        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;
 }