public LuaArgs move(LuaArgs args) { var path = Sanitize(args.GetString(0)); var dest = Sanitize(args.GetString(1)); try { CheckConnected(); CheckWritable(); CheckEitherExists(path); CheckEitherDoesNotExist(dest); CheckParentDirExists(dest); CheckPathsNotOverlapping(path, dest); WritableMount.Move(path, dest); return(LuaArgs.Empty); } catch (IOException e) { throw new LuaError(e.Message); } }
public LuaArgs showHint(LuaArgs args) { var type = args.GetString(0); switch (type) { case "play": { m_state.ShowPlayHint = true; break; } case "rewind": { m_state.ShowRewindHint = true; break; } case "fastforward": { m_state.ShowFastForwardHint = true; break; } case "place": { var coords = GetCoordinates(args, 1); m_state.ShowWorldHint(coords, WorldHintType.Place); break; } case "remove": { var coords = GetCoordinates(args, 1); m_state.ShowWorldHint(coords, WorldHintType.Remove); break; } case "tweak": { var coords = GetCoordinates(args, 1); m_state.ShowWorldHint(coords, WorldHintType.Tweak); break; } default: { throw new LuaError("Unrecognised hint type: " + type); } } return(LuaArgs.Empty); }
public LuaArgs exists(LuaArgs args) { var path = new FilePath(args.GetString(0)); try { return(new LuaArgs(m_fileSystem.Exists(path))); } catch (IOException e) { throw new LuaError(e.Message); } }
public LuaArgs playMusic(LuaArgs args) { var path = args.IsNil(0) ? null : args.GetString(0); var loop = args.IsNil(1) ? true : args.GetBool(1); var transition = args.IsNil(2) ? 1.0f : args.GetFloat(2); if (transition < 0.0f) { throw new LuaError("Transition duration must be positive"); } m_state.PlayMusic(path, transition, loop); return(LuaArgs.Empty); }
public LuaArgs execute(LuaArgs args) { var command = args.IsNil(0) ? null : args.GetString(0); if (command != null) { return(LuaArgs.Nil); } else { return(new LuaArgs(false)); } }
public LuaArgs getSize(LuaArgs args) { var path = new FilePath(args.GetString(0)); try { var size = m_fileSystem.GetSize(path); return(new LuaArgs(size)); } catch (IOException e) { throw new LuaError(e.Message); } }
public LuaArgs exists(LuaArgs args) { var path = Sanitize(args.GetString(0)); try { CheckConnected(); return(new LuaArgs(Mount.Exists(path))); } catch (IOException e) { throw new LuaError(e.Message); } }
public LuaArgs wipeTo(LuaArgs args) { var path = args.GetString(0); if (Assets.Exists <LevelData>(path)) { m_state.WipeTo(path); return(LuaArgs.Empty); } else { throw new LuaError(string.Format("No such level: {0}", path)); } }
public LuaArgs queueEvent(LuaArgs args) { var eventName = args.GetString(0); var result = m_computer.Events.Queue(eventName, args.Select(1)); if (!result) { throw new LuaError("Event queue full"); } else { return(LuaArgs.Empty); } }
public LuaArgs remove(LuaArgs args) { var path = new FilePath(args.GetString(0)); try { m_fileSystem.Delete(path); return(LuaArgs.Empty); } catch (IOException e) { throw new LuaError(e.Message); } }
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)); } }
public LuaArgs playCameraAnimation(LuaArgs args) { var path = args.GetString(0); if (LuaAnimation.Exists(path)) { var anim = LuaAnimation.Get(path); m_state.StartCameraAnimation(anim); return(LuaArgs.Empty); } else { throw new LuaError(string.Format("No such animation: {0}", path)); } }
public LuaArgs getModifiedTime(LuaArgs args) { var path = new FilePath(args.GetString(0)); try { var date = m_fileSystem.GetModifiedTime(path); var seconds = OSAPI.TimeFromDate(date); return(new LuaArgs(seconds)); } catch (IOException e) { throw new LuaError(e.Message); } }
public LuaArgs startScrollingText(LuaArgs args) { var path = args.GetString(0); if (Assets.Exists <TextAsset>(path)) { var text = TextAsset.Get(path); m_state.StartScrollingText(text); return(LuaArgs.Empty); } else { throw new LuaError(string.Format("No such text file: {0}", path)); } }
public LuaArgs getDeviceNames(LuaArgs args) { var filter = args.IsNil(0) ? null : args.GetString(0); var devices = m_computer.Devices; var table = new LuaTable(devices.Count); int i = 1; foreach (var device in devices) { if (filter == null || device.Type == filter) { table[i++] = devices.GetName(device); } } return(new LuaArgs(table)); }
public LuaArgs playAnimation(LuaArgs args) { var path = args.GetString(0); var animateRoot = args.IsNil(1) ? true : args.GetBool(1); if (LuaAnimation.Exists(path)) { var anim = LuaAnimation.Get(path); m_entity.StartAnimation(anim, animateRoot); return(LuaArgs.Empty); } else { throw new LuaError(string.Format("No such animation: {0}", path)); } }
public LuaArgs hideHint(LuaArgs args) { if (args.IsTable(0)) { var coords = GetCoordinates(args, 0); m_state.HideWorldHint(coords); } else { var type = args.GetString(0); switch (type) { case "play": { m_state.ShowPlayHint = false; break; } case "rewind": { m_state.ShowRewindHint = false; break; } case "fastforward": { m_state.ShowFastForwardHint = false; break; } case "place": case "remove": case "tweak": { var coords = GetCoordinates(args, 1); m_state.HideWorldHint(coords); break; } default: { throw new LuaError("Unrecognised hint type: " + type); } } } return(LuaArgs.Empty); }
public LuaArgs getModifiedTime(LuaArgs args) { var path = Sanitize(args.GetString(0)); try { CheckConnected(); CheckFileExists(path); var date = Mount.GetModifiedTime(path); var seconds = OSAPI.TimeFromDate(date); return(new LuaArgs(seconds)); } catch (IOException e) { throw new LuaError(e.Message); } }
public LuaArgs list(LuaArgs args) { var path = new FilePath(args.GetString(0)); try { var results = m_fileSystem.List(path); var table = new LuaTable(); for (int i = 0; i < results.Length; ++i) { table[i + 1] = results[i]; } return(new LuaArgs(table)); } catch (IOException e) { throw new LuaError(e.Message); } }
public LuaArgs find(LuaArgs args) { var wildcard = new FilePath(args.GetString(0)); try { var results = m_fileSystem.Find(wildcard); var table = new LuaTable(); for (int i = 0; i < results.Length; ++i) { table[i + 1] = results[i].ToString(); } return(new LuaArgs(table)); } catch (IOException e) { throw new LuaError(e.Message); } }
public LuaArgs getCharacterImage(LuaArgs args) { var text = args.GetString(0); var values = new List <LuaValue>(); for (int i = 0; i < text.Length; ++i) { if (!char.IsLowSurrogate(text, i)) { var codepoint = char.ConvertToUtf32(text, i); values.Add( new LuaImage( Font.GetCharacterImage(codepoint), m_luaImage.Value ) ); } } return(new LuaArgs(values.ToArray())); }
public LuaArgs lines(LuaArgs args) { if (args.IsNil(0)) { return(m_input.Value.lines(LuaArgs.Empty)); } else { var sPath = args.GetString(0); var results = open(new LuaArgs(sPath, "r")); if (results.IsObject <LuaFile>(0)) { return(results.GetObject <LuaFile>(0).Lines(args.Select(1), true)); } else { throw new LuaError("File not found: " + sPath); } } }
public LuaArgs makeDir(LuaArgs args) { var path = Sanitize(args.GetString(0)); try { CheckConnected(); CheckWritable(); CheckFileDoesNotExist(path); if (!Mount.Exists(path)) { WritableMount.MakeDir(path); } return(LuaArgs.Empty); } catch (IOException e) { throw new LuaError(e.Message); } }
public LuaArgs list(LuaArgs args) { var path = Sanitize(args.GetString(0)); try { CheckConnected(); CheckDirExists(path); var results = Mount.List(path); var table = new LuaTable(results.Length); for (int i = 0; i < results.Length; ++i) { table[i + 1] = new LuaValue(results[i]); } return(new LuaArgs(table)); } catch (IOException e) { throw new LuaError(e.Message); } }
public LuaArgs unmount(LuaArgs args) { try { if (args.IsString(0)) { var path = new FilePath(args.GetString(0)); m_fileSystem.Unmount(path); } else { var mount = args.GetObject <LuaMount>(0); m_fileSystem.Unmount(mount); } return(LuaArgs.Empty); } catch (IOException e) { throw new LuaError(e.Message); } }
public LuaArgs delete(LuaArgs args) { var path = Sanitize(args.GetString(0)); try { CheckConnected(); CheckWritable(); if (path.IsEmpty) { throw new IOException("Cannot delete mount root"); } if (Mount.Exists(path)) { WritableMount.Delete(path); } return(LuaArgs.Empty); } catch (IOException e) { throw new LuaError(e.Message); } }
public LuaArgs getMount(LuaArgs args) { var path = new FilePath(args.GetString(0)); try { FilePath subPath; bool readOnly; var mount = m_fileSystem.GetMount(path, out subPath, out readOnly); if (mount != null) { return(new LuaArgs(mount, subPath.ToString(), readOnly)); } else { return(LuaArgs.Nil); } } catch (IOException e) { throw new LuaError(e.Message); } }
public LuaArgs translate(LuaArgs args) { var language = m_state.Game.Language; var key = args.GetString(0); if (args.Length > 1) { object[] strings = new object[args.Length - 1]; for (int i = 1; i < args.Length; ++i) { strings[i - 1] = args.ToString(i); } return(new LuaArgs( language.Translate(key, strings) )); } else { return(new LuaArgs( language.Translate(key) )); } }
public LuaArgs wrapTextForOverlay(LuaArgs args) { var line = args.GetString(0); int pos = m_state.WrapTerminalLine(line, 0); if (pos < line.Length) { var results = new List <LuaValue>(); results.Add(line.Substring(0, pos)); pos += Font.AdvanceWhitespace(line, pos); while (pos < line.Length) { var partLen = m_state.WrapTerminalLine(line, pos); results.Add(line.Substring(pos, partLen)); pos += partLen; pos += Font.AdvanceWhitespace(line, pos); } return(new LuaArgs(results.ToArray())); } else { return(new LuaArgs(line)); } }
public LuaArgs open(LuaArgs args) { if (args.IsFunction(0)) { // Open a function var function = args.GetFunction(0); var mode = args.IsNil(1) ? "r" : args.GetString(1); if (mode == "r" || mode == "rb") { var stream = new LuaFunctionStream(function, LuaFileOpenMode.Read); return(new LuaArgs(new LuaFile(stream, LuaFileOpenMode.Read))); } else if (mode == "w" || mode == "a" || mode == "wb" || mode == "ab") { var stream = new LuaFunctionStream(function, LuaFileOpenMode.Write); return(new LuaArgs(new LuaFile(stream, LuaFileOpenMode.Write))); } else { throw new LuaError("Unsupported mode: " + mode); } } else { // Open a file var path = new FilePath(args.GetString(0)); var mode = args.IsNil(1) ? "r" : args.GetString(1); try { if (mode == "r") { return(new LuaArgs(new LuaFile(m_fileSystem.OpenForRead(path)))); } else if (mode == "rb") { return(new LuaArgs(new LuaFile(m_fileSystem.OpenForBinaryRead(path), LuaFileOpenMode.Read))); } else if (mode == "w") { return(new LuaArgs(new LuaFile(m_fileSystem.OpenForWrite(path, false)))); } else if (mode == "wb") { return(new LuaArgs(new LuaFile(m_fileSystem.OpenForBinaryWrite(path, false), LuaFileOpenMode.Write))); } else if (mode == "a") { return(new LuaArgs(new LuaFile(m_fileSystem.OpenForWrite(path, true)))); } else if (mode == "ab") { return(new LuaArgs(new LuaFile(m_fileSystem.OpenForBinaryWrite(path, true), LuaFileOpenMode.Write))); } else { throw new LuaError("Unsupported mode: " + mode); } } catch (FileNotFoundException) { return(LuaArgs.Nil); } catch (IOException e) { throw new LuaError(e.Message); } } }