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); }
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; }
public void Render(Render3DContext context, Effect renderEffect, string techniqueName) { _baseGeometry.Render(World, context, renderEffect, techniqueName); _fireGeometry.Render(_overlayWorld, context, renderEffect, techniqueName); }