using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using MrGameEng.Core; namespace KniWebSpike { /// /// Мини-хост в духе MrGameEng.Host.GameHost, но поверх KNI (BlazorGL/WebGL): /// владеет EngineContext ядра, гонит GameClock и фазы сцены. Если этот класс /// работает в браузере — будущий MrGameEng.Host.Web реализуем. /// public class KniWebSpikeGame : Game { public EngineContext Context { get; } = new EngineContext(); private GraphicsDeviceManager _graphics; private SpriteBatch _spriteBatch; private Texture2D _pixel; public KniWebSpikeGame() { _graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } protected override void Initialize() { base.Initialize(); var viewport = GraphicsDevice.Viewport; Context.Scenes.Switch( new SpikeScene(() => _spriteBatch, () => _pixel, viewport.Width, viewport.Height) ); } protected override void LoadContent() { _spriteBatch = new SpriteBatch(GraphicsDevice); _pixel = new Texture2D(GraphicsDevice, 1, 1); _pixel.SetData(new[] { Color.White }); } protected override void Update(GameTime gameTime) { Context.Clock.Advance((float)gameTime.ElapsedGameTime.TotalSeconds); Context.Scenes.Update(Context.Clock); base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(new Color(12, 16, 24)); Context.Scenes.Draw(Context.Clock); base.Draw(gameTime); } } }