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); }
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); } }
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))); }
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)); } }
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)); } }
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)); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
public LuaArgs scrollOverlay(LuaArgs args) { var i = args.GetInt(0); m_state.ScrollTerminal(i); return(LuaArgs.Empty); }
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"); } }
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))); }
public LuaArgs setOverlayLine(LuaArgs args) { var line = args.GetInt(0) - 1; var text = args.GetString(1); m_state.SetTerminalLine(line, text); return(LuaArgs.Empty); }
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)); }
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)); }
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); }); }
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 )); }
public LuaArgs submit(LuaArgs args) { var score = args.GetInt(0); if (score > Score) { Score = score; return(new LuaArgs(true)); } return(new LuaArgs(false)); }
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)); }
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); }
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); }
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))); }
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)); } }