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(); }
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(); }
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(); }
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(); }
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"); } }