Пример #1
0
        public IngameScreen(IngameScene scene, float renderOffset, EngineScreen engineScreen, IngameScreenMessage[] messages)
        {
            _scene              = scene;
            _renderOffset       = renderOffset;
            _actionBrickRenders = new List <RendererActionBrick>();
            _glyphRenderers     = new List <RendererGlyph>();
            _smokeParticles     = new List <ParticleSmoke>();
            _stoneParticles     = new List <ParticleStone>();
            _messages           = new List <IngameScreenMessage>(messages);
            IsCompleted         = false;

            var parser = new EngineParser(engineScreen.Tiles);

            _solution = parser.Parse();

            if (_solution.Count > S.MaxActionsInLevel)
            {
                throw new Exception("Screen has more than 9 actions in its solution");
            }

            for (var x = 0; x < engineScreen.Width; x++)
            {
                for (var y = 0; y < engineScreen.Height; y++)
                {
                    if (engineScreen.Tiles[x, y].Type == EngineGlyphType.Nothing)
                    {
                        continue;
                    }

                    _glyphRenderers.Add(new RendererGlyph(engineScreen.Tiles[x, y].Type, x, y, engineScreen.Width,
                                                          engineScreen.Height));
                }
            }
        }
Пример #2
0
        public static string SerializeScreen(EngineScreen screen)
        {
            var result = new StringBuilder(screen.Width * screen.Height * 4);

            result.Append(screen.Width);
            result.Append(screen.Height);
            result.Append("\n");
            for (var y = 0; y < screen.Height; y++)
            {
                for (var x = 0; x < screen.Width; x++)
                {
                    var tileString = screen.Tiles[x, y];
                    result.Append(EngineSerializerGlyphs.GlyphToStringMap[tileString.Type]);
                    result.Append(" ");
                }

                result.Append("\n");
            }

            return(result.ToString());
        }
Пример #3
0
 public ScreenData(EngineScreen egineScreen, params IngameScreenMessage[] messages)
 {
     EgineScreen = egineScreen ?? throw new ArgumentNullException(nameof(egineScreen));
     Messages    = messages;
 }