public void Initialize(Game2D game, ILevelDataProvider levelDataProvider)
        {
            _gameInformation = new GameInformation(game, levelDataProvider)
            {
                Width = BombGame.Tilesize * 15
            };

            _graphicsDevice  = game.GraphicsDevice;
            _levelData       = levelDataProvider;
            _context         = new Render3DContext(game);
            _objectsToRender = new List <IRenderObject> {
                new Level(game.GraphicsDevice, game.Content, levelDataProvider)
            };
            _bombGeometry             = new ModelGeometry(this, game.GraphicsDevice, game.Content.Load <Model>("Models/Bomb/BombMesh"), _context.ToonEffect);
            _playerGeometry           = new ModelGeometry(this, game.GraphicsDevice, game.Content.Load <Model>("Models/Player/bomberman"), _context.ToonEffect);
            _baseItemGeometry         = new ModelGeometry(this, game.GraphicsDevice, game.Content.Load <Model>("Models/items/itemBase"), _context.ToonEffect);
            _fireOverlayGeometry      = new ModelGeometry(this, game.GraphicsDevice, game.Content.Load <Model>("Models/items/fireoverlay"), _context.ToonEffect);
            _explosionFragmentManager = new ExplosionFragmentManager(game, _levelData);

            _players = new List <Player>();
            foreach (var figure in _levelData.Figures)
            {
                var player = new Player(figure, _playerGeometry);
                AddRenderObject(player);
                _players.Add(player);
            }

            foreach (var itemDataProvider in _levelData.ItemData)
            {
                AddRenderObject(new Item3D(itemDataProvider, _baseItemGeometry, _fireOverlayGeometry));
            }
        }
        public void Update(Render3DContext context, float elapsedTime)
        {
            foreach (var explosionFragment in _level.OverlayData)
            {
                if (explosionFragment.IsActive && _instances.All(i => i.TilePosition != explosionFragment.TilePosition))
                {
                    SpawnParticle(explosionFragment);
                }
            }

            _instances.ForEach(i => i.Update(context.CameraPosition, elapsedTime));
            _instances.RemoveAll(p => p.IsDead);
        }
Exemple #3
0
        public void Render(Render3DContext context, Effect renderEffect, string techniqueName)
        {
            renderEffect.CurrentTechnique = renderEffect.Techniques[techniqueName];
            renderEffect.Parameters["View"].SetValue(context.View);
            renderEffect.Parameters["Projection"].SetValue(context.Projection);
            renderEffect.Parameters["LightMatrix"].SetValue(context.LightMatrix);
            if (techniqueName != "ShadowDepth")
            {
                renderEffect.Parameters["ShadowMap"].SetValue(context.NormalLightDepthRenderTarget);
            }

            var worldParameter = renderEffect.Parameters["World"];

            _device.SetVertexBuffer(_groundVertexBuffer);
            renderEffect.Parameters["DiffuseTexture"].SetValue(_grassTexture);
            worldParameter.SetValue(Matrix.CreateScale(13, 1, 11) * Matrix.CreateTranslation(7.5f, 0.0f, 6.5f));
            foreach (var pass in renderEffect.CurrentTechnique.Passes)
            {
                pass.Apply();
                _device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2);
            }

            _device.SetVertexBuffer(_vertexBuffer);
            _device.Indices = _indexBuffer;
            renderEffect.Parameters["DiffuseTexture"].SetValue(_wallTexture);
            worldParameter.SetValue(Matrix.Identity);
            foreach (var pass in renderEffect.CurrentTechnique.Passes)
            {
                pass.Apply();
                _device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, _vertexCount, 0, _primitiveCount);
            }

            for (var z = 0; z < 13; z++)
            {
                for (var x = 0; x < 15; x++)
                {
                    var fringe = _levelData.Fringe[z * 15 + x];
                    if (fringe.IsActive && fringe.Type == BlockType.Box)
                    {
                        worldParameter.SetValue(Matrix.CreateScale(0.8f, 1.0f, 0.8f) * Matrix.CreateTranslation(x + 0.5f, 0.5f, z + 0.5f));
                        _boxCube.Draw(renderEffect);
                    }
                }
            }
        }
        public void Render(Render3DContext context)
        {
            var device = _particleEffect.GraphicsDevice;

            device.BlendState        = BlendState.AlphaBlend;
            device.DepthStencilState = DepthStencilState.DepthRead;
            device.SetVertexBuffer(_quadVertexBuffer);

            _textureParameter.SetValue(_texture);

            foreach (var fragmentInstance in _instances)
            {
                _worldViewProjParameter.SetValue(fragmentInstance.World * context.View * context.Projection);
                _particleEffect.CurrentTechnique.Passes[0].Apply();
                device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2);
            }

            device.DepthStencilState = DepthStencilState.Default;
        }
Exemple #5
0
 public void Render(Render3DContext context, Effect renderEffect, string techniqueName)
 {
     _baseGeometry.Render(World, context, renderEffect, techniqueName);
     _fireGeometry.Render(_overlayWorld, context, renderEffect, techniqueName);
 }