Beispiel #1
0
    public void saveGame(KnyttSave save)
    {
        GDKnyttAssetManager.ensureDirExists("user://Saves");
        var f = new File();

        f.Open($"user://Saves/{save.SaveFileName}", File.ModeFlags.Write);
        f.StoreString(save.ToString());
        f.Close();
    }
Beispiel #2
0
    public void _on_SlotButton_StartGame(bool new_save, string filename, int slot)
    {
        GetNode <LevelSelection>("../LevelSelection").killConsumers();
        string fname = new_save ? KWorld.WorldDirectory + "/DefaultSavegame.ini" : filename;

        KnyttSave save = new KnyttSave(KWorld,
                                       new_save ? GDKnyttAssetManager.loadTextFile(KWorld.getWorldData("DefaultSavegame.ini")) :
                                       GDKnyttAssetManager.loadTextFile(filename),
                                       slot);

        KWorld.CurrentSave      = save;
        GDKnyttDataStore.KWorld = KWorld;
        GDKnyttDataStore.startGame(new_save);
        this.QueueFree();
    }
Beispiel #3
0
    public void _on_SlotButton_StartGame(bool new_save, string filename, int slot)
    {
        GetNode <LevelSelection>("../LevelSelection").killConsumers();

        string cache_dir = GDKnyttAssetManager.extractFilename(KWorld.WorldDirectory);

        GDKnyttAssetManager.ensureDirExists($"user://Cache/{cache_dir}");
        var f = new File();

        f.Open($"user://Cache/{cache_dir}/LastPlayed.flag", File.ModeFlags.Write);
        f.Close();

        KnyttSave save = new KnyttSave(KWorld,
                                       new_save ? GDKnyttAssetManager.loadTextFile(KWorld.getWorldData("DefaultSavegame.ini")) :
                                       GDKnyttAssetManager.loadTextFile(filename),
                                       slot);

        KWorld.CurrentSave      = save;
        GDKnyttDataStore.KWorld = KWorld;
        GDKnyttDataStore.startGame(new_save);
        this.QueueFree();
    }
Beispiel #4
0
        static void Main(string[] args)
        {
            /*KnyttWorld world = new KnyttWorld();
             * string world_ini = File.ReadAllText("Nifflas - The Machine/World.ini");
             * world.loadWorldConfig(world_ini);
             * var fs = File.Open("Nifflas - The Machine/Map.bin", FileMode.Open);
             * world.loadWorldMap(fs);
             * fs.Close();
             *
             * KnyttWorldManager<bool> manager = new KnyttWorldManager<bool>();
             * manager.addWorld(world, false);
             *
             * var save = new KnyttSave(world, File.ReadAllText("Nifflas - The Machine/DefaultSavegame.ini"), 1);
             * save.setPower(3, true);
             * save.setArea(new KnyttPoint(123, 456));
             * save.setAreaPosition(new KnyttPoint(1, 2));
             * save.setPower(13, false);
             * Console.WriteLine(save);
             *
             * Console.WriteLine(world.Info.Name);
             * Console.WriteLine(world.Info.Description);
             * Console.WriteLine(world.Info.Difficulties[0]);
             * Console.WriteLine(world.Info.Difficulties[1]);
             * Console.WriteLine(world.getArea(new KnyttPoint(998, 1021)));
             *
             * fs.Close();
             *
             * Stopwatch stopwatch = new Stopwatch();
             * stopwatch.Start();
             *
             * fs = File.Open("Fubaka - The Column.knytt.bin", FileMode.Open);
             * KnyttBinWorldLoader bworld = new KnyttBinWorldLoader(fs);
             *
             * stopwatch.Stop();
             * Console.WriteLine("Time elapsed: {0} ms", stopwatch.Elapsed.TotalMilliseconds);
             *
             * Console.WriteLine(bworld.RootDirectory);
             *
             * foreach (var fname in bworld.GetFileNames())
             * {
             *  Console.WriteLine(fname);
             * }*/

            KnyttWorld world     = new TestKnyttWorld();
            string     world_ini = File.ReadAllText("Nifflas - The Machine/World.ini");

            world.loadWorldConfig(world_ini);
            world.setDirectory("...", "Nifflas - Tutocdd2342342131235rial");

            KnyttSave save = new KnyttSave(world);

            save.setArea(new KnyttPoint(1007, 990));
            save.setAreaPosition(new KnyttPoint(12, 7));
            save.setPower(1, true);
            save.setPower(2, true);
            save.setPower(3, true);
            save.setPower(11, true);
            save.setFlag(3, true);

            Console.WriteLine(save);

            var password = save.ToPassword();

            Console.WriteLine(password);

            var save2 = KnyttSave.FromPassword(world, password);

            Console.WriteLine(save2);

            Console.ReadKey();
        }
Beispiel #5
0
    private void _on_StatHTTPRequest_request_completed(int result, int response_code, string[] headers, byte[] body)
    {
        if (result == (int)HTTPRequest.Result.Success && response_code == 200)
        {
            ;
        }
        else
        {
            return;
        }
        var response = Encoding.UTF8.GetString(body, 0, body.Length);
        var json     = JSON.Parse(response);

        if (json.Error != Error.Ok)
        {
            return;
        }

        var my_powers    = new HashSet <int>();
        var my_cutscenes = new HashSet <string>(StringComparer.OrdinalIgnoreCase);
        var my_endings   = new HashSet <string>(StringComparer.OrdinalIgnoreCase);

        for (int slot = 1; slot <= 3; slot++)
        {
            string savename = $"user://Saves/{KWorld.WorldDirectoryName} {slot}.ini";
            if (new File().FileExists(savename))
            {
                KnyttSave save = new KnyttSave(KWorld, GDKnyttAssetManager.loadTextFile(savename), slot);
                for (int i = 0; i < 13; i++)
                {
                    if (save.getPower(i))
                    {
                        my_powers.Add(i);
                    }
                }
                my_cutscenes.UnionWith(save.Cutscenes);
                my_endings.UnionWith(save.Endings);
            }
        }

        upvotes   = HTTPUtil.jsonInt(json.Result, "upvotes");
        downvotes = HTTPUtil.jsonInt(json.Result, "downvotes");
        complains = HTTPUtil.jsonInt(json.Result, "complains");
        updateRates();

        var stat_panel = GetNode <StatPanel>("InfoRect/StatPanel");

        int[] powers_count = new int[13];
        for (int i = 0; i < 13; i++)
        {
            powers_count[i] = HTTPUtil.jsonInt(json.Result, $"power{i}");
        }

        if (powers_count.Any(c => c > 0))
        {
            stat_panel.addLabel("Powers:");
            for (int i = 0; i < 13; i++)
            {
                if (powers_count[i] > 0)
                {
                    stat_panel.addPower(i, powers_count[i], my_powers.Contains(i));
                }
            }
        }

        List <string> cutscenes       = new List <string>();
        List <int>    cutscenes_count = new List <int>();
        List <string> endings         = new List <string>();
        List <int>    endings_count   = new List <int>();

        var cutscene_infos = HTTPUtil.jsonValue <Godot.Collections.Array>(json.Result, "cutscenes");

        foreach (Dictionary record in cutscene_infos)
        {
            bool is_ending = HTTPUtil.jsonBool(record, "ending");
            (is_ending ? endings : cutscenes).Add(HTTPUtil.jsonValue <string>(record, "name"));
            (is_ending ? endings_count : cutscenes_count).Add(HTTPUtil.jsonInt(record, "counter"));
        }

        if (endings.Count > 0)
        {
            stat_panel.addLabel("Endings:");
            foreach (var p in endings.Zip(endings_count, (a, b) => new { Name = a, Count = b }))
            {
                stat_panel.addEnding(p.Name, p.Count, my_endings.Contains(p.Name));
            }
        }

        if (cutscenes.Count > 0)
        {
            stat_panel.addLabel("Cutscenes:");
            foreach (var p in cutscenes.Zip(cutscenes_count, (a, b) => new { Name = a, Count = b }))
            {
                stat_panel.addCutscene(p.Name, p.Count, my_cutscenes.Contains(p.Name));
            }
        }

        if (!(powers_count.Any(c => c > 0) || endings.Count > 0 || cutscenes.Count > 0))
        {
            stat_panel.addLabel("No achievements found");
        }
    }