Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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));
            }
        }
Exemplo n.º 6
0
        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);
            }
        }
Exemplo n.º 7
0
        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);
            }
        }
Exemplo n.º 8
0
        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));
            }
        }
Exemplo n.º 9
0
        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);
            }
        }
Exemplo n.º 10
0
        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);
            }
        }
Exemplo n.º 11
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));
            }
        }
Exemplo n.º 12
0
        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));
            }
        }
Exemplo n.º 13
0
        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);
            }
        }
Exemplo n.º 14
0
        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));
            }
        }
Exemplo n.º 15
0
        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));
        }
Exemplo n.º 16
0
            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));
                }
            }
Exemplo n.º 17
0
        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);
        }
Exemplo n.º 18
0
        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);
            }
        }
Exemplo n.º 19
0
        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);
            }
        }
Exemplo n.º 20
0
        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);
            }
        }
Exemplo n.º 21
0
        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()));
        }
Exemplo n.º 22
0
 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);
         }
     }
 }
Exemplo n.º 23
0
        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);
            }
        }
Exemplo n.º 24
0
        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);
            }
        }
Exemplo n.º 25
0
 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);
     }
 }
Exemplo n.º 26
0
        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);
            }
        }
Exemplo n.º 27
0
        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);
            }
        }
Exemplo n.º 28
0
        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)
                           ));
            }
        }
Exemplo n.º 29
0
        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));
            }
        }
Exemplo n.º 30
0
 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);
         }
     }
 }