Beispiel #1
0
        public void HandleRequest(Request request, Response response)
        {
            // check if file exist at folder (need to assume a base local root)
            var fullPath = "res://public" + Uri.UnescapeDataString(request.uri.LocalPath);
            // get file extension to add to header
            var fileExt = System.IO.Path.GetExtension(fullPath);
            //Debug.Log($"fullPath:{fullPath} fileExt:{fileExt}");

            var f = new Godot.File();

            // not found
            if (!f.FileExists(fullPath))
            {
                response.statusCode = 404;
                response.message    = "Not Found";
                return;
            }

            // serve the file
            response.statusCode = 200;
            response.message    = "OK";
            response.headers.Add("Content-Type", MimeTypeMap.GetMimeType(fileExt));

            var ret = f.Open(fullPath, Godot.File.ModeFlags.Read);

            // read file and set bytes
            if (ret == Error.Ok)
            {
                var length = (int)f.GetLen();
                // add content length
                response.headers.Add("Content-Length", length.ToString());
                response.SetBytes(f.GetBuffer(length));
            }
            f.Close();
        }
Beispiel #2
0
        public static byte[] LoadData(string path)
        {
            var f = new Godot.File();

            f.Open($"res://public/{path}", Godot.File.ModeFlags.Read);

            var buffer = f.GetBuffer((int)f.GetLen());

            f.Close();
            return(buffer);
        }
Beispiel #3
0
    public void load_state_from_file(Godot.File file)
    {
        if (story == null)
        {
            PushNullStoryError();
            return;
        }

        if (!file.IsOpen())
        {
            return;
        }

        file.Seek(0);
        if (file.GetLen() > 0)
        {
            story.state.LoadJson(file.GetAsText());
        }
    }
Beispiel #4
0
    private static void WriteDataToSaveFile(string target, string justInfo, string serialized, string tempScreenshot)
    {
        using (var file = new File())
        {
            file.Open(target, File.ModeFlags.Write);
            using (Stream gzoStream = new GZipOutputStream(new GodotFileStream(file)))
            {
                using (var tar = new TarOutputStream(gzoStream))
                {
                    OutputEntry(tar, SAVE_INFO_JSON, Encoding.UTF8.GetBytes(justInfo));

                    if (tempScreenshot != null)
                    {
                        byte[] data = null;

                        using (var reader = new File())
                        {
                            reader.Open(tempScreenshot, File.ModeFlags.Read);

                            if (!reader.IsOpen())
                            {
                                GD.PrintErr("Failed to open temp screenshot for writing to save");
                            }
                            else
                            {
                                data = reader.GetBuffer((int)reader.GetLen());
                            }
                        }

                        if (data != null && data.Length > 0)
                        {
                            OutputEntry(tar, SAVE_SCREENSHOT, data);
                        }
                    }

                    OutputEntry(tar, SAVE_SAVE_JSON, Encoding.UTF8.GetBytes(serialized));
                }
            }
        }
    }
Beispiel #5
0
        public static void Load(string folder, XElement xml)
        {
            Clear();
            XML = xml;
            if (XML.Element("VSwap") != null)
            {
                VSwap = VSwap.Load(folder, XML);
            }
            if (XML.Element("Maps") != null)
            {
                Maps = GameMap.Load(folder, XML);
            }
            if (XML.Element("Audio") != null)
            {
                AudioT = AudioT.Load(folder, XML);
            }
            if (XML.Element("VgaGraph") != null)
            {
                VgaGraph = VgaGraph.Load(folder, XML);
            }

            Walls     = XML.Element("VSwap")?.Element("Walls")?.Elements("Wall").Select(e => ushort.Parse(e.Attribute("Number").Value)).ToArray();
            Doors     = XML.Element("VSwap")?.Element("Walls")?.Elements("Door")?.Select(e => ushort.Parse(e.Attribute("Number").Value))?.ToArray();
            Elevators = XML.Element("VSwap")?.Element("Walls")?.Elements("Elevator")?.Select(e => ushort.Parse(e.Attribute("Number").Value))?.ToArray();
            PushWalls = PushWall?.Select(e => ushort.Parse(e.Attribute("Number").Value))?.ToArray();

            States.Clear();
            foreach (XElement xState in XML?.Element("VSwap")?.Element("Objects")?.Elements("State") ?? Enumerable.Empty <XElement>())
            {
                States.Add(xState.Attribute("Name").Value, new State(xState));
            }
            foreach (State state in States.Values)
            {
                if (state.XML.Attribute("Next")?.Value is string next)
                {
                    state.Next = States[next];
                }
            }

            Turns.Clear();
            foreach (XElement xTurn in XML?.Element("VSwap")?.Element("Objects")?.Elements("Turn") ?? Enumerable.Empty <XElement>())
            {
                Turns.Add((ushort)(int)xTurn.Attribute("Number"), Direction8.From(xTurn.Attribute("Direction")));
            }

            EndStrings = XML?.Element("VgaGraph")?.Element("Menus")?.Elements("EndString")?.Select(a => a.Value)?.ToArray() ?? new string[] { "Sure you want to quit? Y/N" };

            if (ushort.TryParse(XML?.Element("VSwap")?.Element("Walls")?.Attribute("FloorCodeFirst")?.Value, out ushort floorCodeFirst))
            {
                FloorCodeFirst = floorCodeFirst;
            }
            if (ushort.TryParse(XML?.Element("VSwap")?.Element("Walls")?.Attribute("FloorCodeLast")?.Value, out ushort floorCodeLast))
            {
                FloorCodes = (ushort)(1 + floorCodeLast - FloorCodeFirst);
            }

            // Load "extra" IMF/WLF files not included in AudioT
            Godot.File file = new Godot.File();
            foreach (XElement songXML in XML.Element("Audio").Elements("Imf")?.Where(e => e.Attribute("File") is XAttribute))
            {
                if (file.Open(songXML.Attribute("File").Value, Godot.File.ModeFlags.Read) == Godot.Error.Ok && file.IsOpen())
                {
                    byte[] bytes = file.GetBuffer((int)file.GetLen());
                    file.Close();
                    AudioT.Songs.Add(songXML?.Attribute("Name")?.Value, new Song()
                    {
                        Name  = songXML?.Attribute("Name")?.Value,
                        Bytes = bytes,
                        Imf   = Imf.ReadImf(new MemoryStream(bytes)),
                    });
                }
            }
        }