Ejemplo n.º 1
0
        public LuaArgs fill(LuaArgs args)
        {
            var color = args.GetByte(0);

            if (args.IsNil(1))
            {
                CheckWritable();
                Image.Fill(color);
            }
            else
            {
                int x = args.GetInt(1);
                int y = args.GetInt(2);
                int w = args.GetInt(3);
                int h = args.GetInt(4);
                if (w < 0)
                {
                    throw new LuaError("Fill width must be positive");
                }
                if (h < 0)
                {
                    throw new LuaError("Fill height must be positive");
                }
                if (x < 0 || x + w > Image.Width ||
                    y < 0 || y + h > Image.Height)
                {
                    throw new LuaError("Fill must start and end within the image bounds");
                }
                CheckWritable();
                Image.Fill(color, x, y, w, h);
            }
            return(LuaArgs.Empty);
        }
Ejemplo n.º 2
0
        public LuaArgs write(LuaArgs args)
        {
            int x = args.GetInt(0);
            int y = args.GetInt(1);

            if (args.IsNumber(2))
            {
                var n = args.GetByte(2);
                CheckWritable();
                if (x >= 0 && x < Image.Width &&
                    y >= 0 && y < Image.Height)
                {
                    Image[x, y] = n;
                }
                return(LuaArgs.Empty);
            }
            else
            {
                var bytes = args.GetByteString(2);
                if (x < 0 || x >= Image.Width ||
                    y < 0 || y >= Image.Height ||
                    (x + y * Image.Width + bytes.Length) > Image.Width * Image.Height)
                {
                    throw new LuaError("Write must start and end within the image bounds");
                }
                CheckWritable();
                Image.Write(bytes, 0, bytes.Length, x, y);
                return(LuaArgs.Empty);
            }
        }
Ejemplo n.º 3
0
        public LuaArgs newFont(LuaArgs args)
        {
            var image           = args.GetObject <LuaImage>(0);
            var characters      = args.GetString(1);
            var characterWidth  = args.GetInt(2);
            var characterHeight = args.GetInt(3);

            if (characterWidth <= 0)
            {
                throw new LuaError("Character width must be positive");
            }
            if (characterWidth > image.Image.Width)
            {
                throw new LuaError("Character width must be less than image width");
            }
            if (characterHeight <= 0)
            {
                throw new LuaError("Character height must be positive");
            }
            if (characterHeight > image.Image.Height)
            {
                throw new LuaError("Character width must be less than image height");
            }

            var font = new Font(image.Image, characters, characterWidth, characterHeight, true);

            return(new LuaArgs(new LuaFont(font, image)));
        }
Ejemplo n.º 4
0
        public LuaArgs read(LuaArgs args)
        {
            int x = args.GetInt(0);
            int y = args.GetInt(1);

            if (args.IsNil(2))
            {
                if (x >= 0 && x < Image.Width &&
                    y >= 0 && y < Image.Height)
                {
                    var b = Image[x, y];
                    return(new LuaArgs(b));
                }
                return(new LuaArgs(0));
            }
            else
            {
                int length = args.GetInt(2);
                if (length < 0)
                {
                    throw new LuaError("Read length must be positive");
                }
                if (x < 0 || x >= Image.Width ||
                    y < 0 || y >= Image.Height ||
                    (x + y * Image.Width + length) > Image.Width * Image.Height)
                {
                    throw new LuaError("Read must start and end within the image bounds");
                }
                var result = Image.Read(x, y, length);
                return(new LuaArgs(result));
            }
        }
Ejemplo n.º 5
0
        public LuaArgs read(LuaArgs args)
        {
            int start = args.GetInt(0);

            if (args.IsNil(1))
            {
                if (start >= 0 && start < Buffer.Length)
                {
                    var b = Buffer[start];
                    return(new LuaArgs(b));
                }
                return(new LuaArgs(0));
            }
            else
            {
                int length = args.GetInt(1);
                if (length < 0)
                {
                    throw new LuaError("Read length must be positive");
                }
                if (start < 0 || start + length > Buffer.Length)
                {
                    throw new LuaError("Read must start and end within the buffer");
                }
                var result = Buffer.Read(start, length);
                return(new LuaArgs(result));
            }
        }
Ejemplo n.º 6
0
        public LuaArgs getPixel(LuaArgs args)
        {
            int x     = args.GetInt(0);
            int y     = args.GetInt(1);
            var color = m_graphics.GetPixel(x, y);

            return(new LuaArgs(color));
        }
Ejemplo n.º 7
0
        public LuaArgs drawPixel(LuaArgs args)
        {
            int x     = args.GetInt(0);
            int y     = args.GetInt(1);
            var color = args.GetByte(2);

            m_graphics.DrawPixel(x, y, color);
            return(LuaArgs.Empty);
        }
Ejemplo n.º 8
0
        public LuaArgs drawText(LuaArgs args)
        {
            int startX = args.GetInt(0);
            int startY = args.GetInt(1);
            var text   = args.GetString(2);

            m_graphics.DrawText(startX, startY, text);
            return(LuaArgs.Empty);
        }
Ejemplo n.º 9
0
        public LuaArgs floodFill(LuaArgs args)
        {
            int x     = args.GetInt(0);
            int y     = args.GetInt(1);
            var color = args.GetByte(2);

            m_graphics.FloodFill(x, y, color);
            return(LuaArgs.Empty);
        }
Ejemplo n.º 10
0
        public LuaArgs setOffset(LuaArgs args)
        {
            int x = args.GetInt(0);
            int y = args.GetInt(1);

            m_graphics.OffsetX = x;
            m_graphics.OffsetY = y;
            return(LuaArgs.Empty);
        }
Ejemplo n.º 11
0
        public LuaArgs translate(LuaArgs args)
        {
            var x         = args.GetInt(0);
            var y         = args.GetInt(1);
            var fillColor = args.IsNil(2) ? (byte)0 : args.GetByte(2);

            CheckWritable();
            Image.Translate(x, y, fillColor);
            return(LuaArgs.Empty);
        }
Ejemplo n.º 12
0
        public LuaArgs blit(LuaArgs args)
        {
            int x     = args.GetInt(0);
            int y     = args.GetInt(1);
            var image = args.GetObject <LuaImage>(2).Image;

            CheckWritable();
            Image.Blit(image, x, y);
            return(LuaArgs.Empty);
        }
Ejemplo n.º 13
0
        public LuaArgs drawLine(LuaArgs args)
        {
            int startX = args.GetInt(0);
            int startY = args.GetInt(1);
            int endX   = args.GetInt(2);
            int endY   = args.GetInt(3);
            var color  = args.GetByte(4);

            m_graphics.DrawLine(startX, startY, endX, endY, color);
            return(LuaArgs.Empty);
        }
Ejemplo n.º 14
0
        public LuaArgs xorImage(LuaArgs args)
        {
            int startX = args.GetInt(0);
            int startY = args.GetInt(1);
            var image  = args.GetObject <LuaImage>(2).Image;
            int scale  = args.IsNil(3) ? 1 : args.GetInt(3);

            if (scale <= 0)
            {
                throw new LuaError("Scale must be an integer 1 or greater");
            }
            m_graphics.XorImage(startX, startY, image, scale);
            return(LuaArgs.Empty);
        }
Ejemplo n.º 15
0
        public LuaArgs drawMap(LuaArgs args)
        {
            int startX  = args.GetInt(0);
            int startY  = args.GetInt(1);
            var map     = args.GetObject <LuaImage>(2).Image;
            var tileset = args.GetObject <LuaImage>(3).Image;
            int scale   = args.IsNil(4) ? 1 : args.GetInt(4);

            if (scale <= 0)
            {
                throw new LuaError("Scale must be an integer 1 or greater");
            }
            m_graphics.DrawMap(startX, startY, map, tileset, scale);
            return(LuaArgs.Empty);
        }
Ejemplo n.º 16
0
        public LuaArgs setOverlayAlignment(LuaArgs args)
        {
            var line      = args.GetInt(0) - 1;
            var alignment = args.GetString(1);

            switch (alignment)
            {
            case "left":
            {
                m_state.SetTerminalAlignment(line, TextAlignment.Left);
                break;
            }

            case "right":
            {
                m_state.SetTerminalAlignment(line, TextAlignment.Right);
                break;
            }

            case "center":
            {
                m_state.SetTerminalAlignment(line, TextAlignment.Center);
                break;
            }

            default:
            {
                throw new LuaError("Invalid alignment: " + alignment);
            }
            }
            return(LuaArgs.Empty);
        }
Ejemplo n.º 17
0
        public LuaArgs scrollOverlay(LuaArgs args)
        {
            var i = args.GetInt(0);

            m_state.ScrollTerminal(i);
            return(LuaArgs.Empty);
        }
Ejemplo n.º 18
0
        public LuaArgs newPalette(LuaArgs args)
        {
            var size = args.IsNil(0) ? 16 : args.GetInt(0);

            if (size < 1 || size > 256)
            {
                throw new LuaError("Palette size must be in range 1-256");
            }
            if (m_computer.Memory.Alloc(size * 3))
            {
                // Create a simple greyscale palette
                uint   usize  = (uint)size;
                uint[] colors = new uint[usize];
                colors[0] = 0x000000ff;
                for (uint i = 1; i < colors.Length; ++i)
                {
                    uint bright = ((i * 255) / (usize - 1)) & 0xff;
                    colors[i] = (bright << 24) + (bright << 16) + (bright << 8) + 255;
                }
                var palette = new Palette(colors);
                return(new LuaArgs(new LuaPalette(palette, m_computer.Memory)));
            }
            else
            {
                throw new LuaError("not enough memory");
            }
        }
Ejemplo n.º 19
0
        public LuaArgs sub(LuaArgs args)
        {
            int start  = args.GetInt(0);
            int length = args.IsNil(1) ? (Buffer.Length - start) : args.GetInt(1);

            if (length < 0)
            {
                throw new LuaError("Subbuffer size must be positive");
            }
            if (start < 0 || start + length > Buffer.Length)
            {
                throw new LuaError("Subbuffer bounds must lie within the buffer");
            }
            var result = Buffer.Sub(start, length);

            return(new LuaArgs(new LuaBuffer(result, this)));
        }
Ejemplo n.º 20
0
        public LuaArgs setOverlayLine(LuaArgs args)
        {
            var line = args.GetInt(0) - 1;
            var text = args.GetString(1);

            m_state.SetTerminalLine(line, text);
            return(LuaArgs.Empty);
        }
Ejemplo n.º 21
0
        public LuaArgs getAxis(LuaArgs args)
        {
            int axis = args.GetInt(0);

            if (axis >= 0 && axis < m_axes.Length)
            {
                return(new LuaArgs(m_axes[axis]));
            }
            return(new LuaArgs(0.0f));
        }
Ejemplo n.º 22
0
        public LuaArgs getButton(LuaArgs args)
        {
            int button = args.GetInt(0);

            if (button >= 0 && button < m_buttons.Length)
            {
                return(new LuaArgs(m_buttons[button] > 0));
            }
            return(new LuaArgs(false));
        }
Ejemplo n.º 23
0
 public LuaArgs exit(LuaArgs args)
 {
     if (!args.IsNil(0) && !args.IsBool(0))
     {
         args.GetInt(0);
     }
     m_cpu.RequestShutdown();
     throw new LuaYield(LuaArgs.Empty, delegate {
         return(LuaArgs.Empty);
     });
 }
Ejemplo n.º 24
0
        public LuaArgs getChannelState(LuaArgs args)
        {
            int channel = args.GetInt(0);
            int queuedSounds;
            var state = m_speaker.GetChannelState(channel, out queuedSounds);

            return(new LuaArgs(
                       state.ToString().ToLowerInvariant(),
                       queuedSounds
                       ));
        }
Ejemplo n.º 25
0
        public LuaArgs submit(LuaArgs args)
        {
            var score = args.GetInt(0);

            if (score > Score)
            {
                Score = score;
                return(new LuaArgs(true));
            }
            return(new LuaArgs(false));
        }
Ejemplo n.º 26
0
        public LuaArgs isLevelUnlocked(LuaArgs args)
        {
            var num      = args.GetInt(0);
            var campaign = GetCampaign();

            if (campaign != null)
            {
                return(new LuaArgs(ProgressUtils.IsLevelUnlocked(campaign, GetMod(), num, m_state.Game.User, GetIgnoreLevel())));
            }
            return(new LuaArgs(false));
        }
Ejemplo n.º 27
0
        public LuaArgs drawEllipseOutline(LuaArgs args)
        {
            int startX = args.GetInt(0);
            int startY = args.GetInt(1);
            int width  = args.GetInt(2);

            if (width < 0)
            {
                throw new LuaError("Ellipse width must be positive");
            }
            int height = args.GetInt(3);

            if (height < 0)
            {
                throw new LuaError("Ellipse height must be positive");
            }
            var color = args.GetByte(4);

            m_graphics.DrawEllipseOutline(startX, startY, width, height, color);
            return(LuaArgs.Empty);
        }
Ejemplo n.º 28
0
 public LuaArgs stop(LuaArgs args)
 {
     if (args.IsNil(0))
     {
         m_speaker.Stop();
     }
     else
     {
         int channel = args.GetInt(0);
         m_speaker.Stop(channel);
     }
     return(LuaArgs.Empty);
 }
Ejemplo n.º 29
0
        public LuaArgs sub(LuaArgs args)
        {
            int x      = args.GetInt(0);
            int y      = args.GetInt(1);
            int width  = args.GetInt(2);
            int height = args.GetInt(3);

            if (width <= 0)
            {
                throw new LuaError("Subimage width must be positive");
            }
            if (height <= 0)
            {
                throw new LuaError("Subimage height must be positive");
            }
            if (x < 0 || (x + width) > Image.Width || y < 0 || (y + height) > Image.Height)
            {
                throw new LuaError("Subimage bounds must lie within image");
            }
            var result = Image.Sub(x, y, width, height);

            return(new LuaArgs(new LuaImage(result, this)));
        }
Ejemplo n.º 30
0
        public LuaArgs seek(LuaArgs args)
        {
            try
            {
                var whence = args.IsNil(0) ? "cur" : args.GetString(0);
                var offset = args.IsNil(1) ? 0 : args.GetInt(1);

                CheckOpen();
                if (m_contentType == LuaFileContentType.Binary)
                {
                    // Seek in a binary file
                    switch (whence)
                    {
                    case "set":
                    {
                        m_stream.Seek(offset, SeekOrigin.Begin);
                        break;
                    }

                    case "cur":
                    {
                        m_stream.Seek(offset, SeekOrigin.Current);
                        break;
                    }

                    case "end":
                    {
                        m_stream.Seek(offset, SeekOrigin.End);
                        break;
                    }

                    default:
                    {
                        throw new LuaError("Unsupported option: " + whence);
                    }
                    }
                    return(new LuaArgs(m_stream.Position));
                }
                else
                {
                    // Seek in a text file
                    throw new NotImplementedException();
                }
            }
            catch (IOException e)
            {
                return(new LuaArgs(LuaValue.Nil, e.Message));
            }
        }