From a0fc2e47907c93f0518747d14b816369af2a0918 Mon Sep 17 00:00:00 2001 From: Nicola Sovic Date: Sat, 4 Jun 2022 18:49:32 +0200 Subject: [PATCH] v1.3.0, Added game saving mechanic (WIP) --- Assets/Scenes/GameScene.unity | 240 +++++++++++++++++++++++++++-- Assets/Scripts/AudioHandler.cs | 28 +--- Assets/Scripts/ButtonHandler.cs | 10 ++ Assets/Scripts/FileHandler.cs | 71 +++++++++ Assets/Scripts/FileHandler.cs.meta | 11 ++ Assets/Scripts/Player.cs | 23 +++ Assets/Scripts/Tile.cs | 6 + Assets/Scripts/WorldGenerator.cs | 28 ++++ audiosettings.txt | 2 +- save.json | 27 ++++ 10 files changed, 405 insertions(+), 41 deletions(-) create mode 100644 Assets/Scripts/FileHandler.cs create mode 100644 Assets/Scripts/FileHandler.cs.meta create mode 100644 save.json diff --git a/Assets/Scenes/GameScene.unity b/Assets/Scenes/GameScene.unity index 4ed447c..f0a149e 100644 --- a/Assets/Scenes/GameScene.unity +++ b/Assets/Scenes/GameScene.unity @@ -938,12 +938,12 @@ RectTransform: m_Children: - {fileID: 1052813663} m_Father: {fileID: 583695243} - m_RootOrder: 3 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.4, y: 0.2} + m_AnchorMin: {x: 0.4, y: 0.3} m_AnchorMax: {x: 0.6, y: 0.4} - m_AnchoredPosition: {x: 0, y: -12.5} - m_SizeDelta: {x: 0, y: -25} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &78655901 MonoBehaviour: @@ -2091,12 +2091,12 @@ RectTransform: m_Children: - {fileID: 1172954269} m_Father: {fileID: 583695243} - m_RootOrder: 2 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.4, y: 0.4} - m_AnchorMax: {x: 0.6, y: 0.6} - m_AnchoredPosition: {x: 0, y: -12.5} - m_SizeDelta: {x: 0, y: -25} + m_AnchorMax: {x: 0.6, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &215966563 MonoBehaviour: @@ -2491,6 +2491,136 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 240318489} m_CullTransparentMesh: 1 +--- !u!1 &257718088 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 257718089} + - component: {fileID: 257718092} + - component: {fileID: 257718091} + - component: {fileID: 257718090} + m_Layer: 5 + m_Name: btnSave + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &257718089 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 257718088} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 347957836} + m_Father: {fileID: 583695243} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.4, y: 0.5} + m_AnchorMax: {x: 0.6, y: 0.6} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &257718090 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 257718088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Texture: {fileID: 2800000, guid: cb116eb6b0a00b3498e75469e4a3ac7f, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!114 &257718091 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 257718088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 257718090} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1706844940} + m_TargetAssemblyTypeName: Assets.Scripts.ButtonHandler, Assembly-CSharp + m_MethodName: saveGame + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!222 &257718092 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 257718088} + m_CullTransparentMesh: 1 --- !u!1 &260699459 GameObject: m_ObjectHideFlags: 0 @@ -3445,6 +3575,85 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 345934873} m_CullTransparentMesh: 1 +--- !u!1 &347957835 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 347957836} + - component: {fileID: 347957838} + - component: {fileID: 347957837} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &347957836 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 347957835} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 257718089} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &347957837 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 347957835} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 26 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Save +--- !u!222 &347957838 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 347957835} + m_CullTransparentMesh: 1 --- !u!1 &350334947 GameObject: m_ObjectHideFlags: 0 @@ -4344,7 +4553,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 583695243} - m_RootOrder: 4 + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.2, y: 0} m_AnchorMax: {x: 0.8, y: 0} @@ -4384,7 +4593,7 @@ MonoBehaviour: m_HorizontalOverflow: 0 m_VerticalOverflow: 0 m_LineSpacing: 1 - m_Text: A game created by Nicola Sovic + m_Text: A game created by Finnchen --- !u!222 &402242114 CanvasRenderer: m_ObjectHideFlags: 0 @@ -6245,6 +6454,7 @@ RectTransform: m_Children: - {fileID: 1223560242} - {fileID: 1928144700} + - {fileID: 257718089} - {fileID: 215966562} - {fileID: 78655900} - {fileID: 402242112} @@ -12422,7 +12632,7 @@ MonoBehaviour: m_HorizontalOverflow: 0 m_VerticalOverflow: 0 m_LineSpacing: 1 - m_Text: Exit to menu + m_Text: Exit --- !u!222 &1052813665 CanvasRenderer: m_ObjectHideFlags: 0 @@ -15945,7 +16155,7 @@ RectTransform: - {fileID: 39651747} - {fileID: 631077882} m_Father: {fileID: 583695243} - m_RootOrder: 5 + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -20105,9 +20315,9 @@ RectTransform: m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.4, y: 0.6} - m_AnchorMax: {x: 0.6, y: 0.8} - m_AnchoredPosition: {x: 0, y: -12.5} - m_SizeDelta: {x: 0, y: -25} + m_AnchorMax: {x: 0.6, y: 0.7} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1928144701 MonoBehaviour: diff --git a/Assets/Scripts/AudioHandler.cs b/Assets/Scripts/AudioHandler.cs index fd0c2a2..67dedd4 100644 --- a/Assets/Scripts/AudioHandler.cs +++ b/Assets/Scripts/AudioHandler.cs @@ -1,3 +1,4 @@ +using Assets.Scripts; using System.Collections; using System.Collections.Generic; using System.Globalization; @@ -115,36 +116,13 @@ public class AudioHandler : MonoBehaviour public void loadAudioSettings() { - if (File.Exists(filepath)) - { - string[] lines = File.ReadAllLines(filepath); - cameraAudio.volume = float.Parse(lines[0].Split(':')[1]); - playerAudio.volume = float.Parse(lines[1].Split(':')[1]); - } - else - { - StreamWriter sw = File.CreateText(filepath); - sw.WriteLine("Music:0.5"); - sw.WriteLine("Effects:0.5"); - sw.Flush(); - } + FileHandler.loadAudio(filepath, cameraAudio, playerAudio); } public void saveAudioSettings() { float music = GameObject.Find("slideMusic").GetComponent().value; float effects = GameObject.Find("slideEffects").GetComponent().value; - StreamWriter sw; - if (!File.Exists(filepath)) - { - sw = File.CreateText(filepath); - } - else - { - sw = new StreamWriter(filepath); - } - sw.WriteLine("Music:"+ music); - sw.WriteLine("Effects:"+ effects); - sw.Flush(); + FileHandler.saveAudio(filepath, music, effects); } } diff --git a/Assets/Scripts/ButtonHandler.cs b/Assets/Scripts/ButtonHandler.cs index a7b1c7d..b8faf0e 100644 --- a/Assets/Scripts/ButtonHandler.cs +++ b/Assets/Scripts/ButtonHandler.cs @@ -11,11 +11,13 @@ namespace Assets.Scripts UIHandler uihandler; Player player; AudioHandler audioHandler; + WorldGenerator worldGenerator; private void Start() { uihandler = GameObject.Find("UIHandler").GetComponent(); player = GameObject.Find("Player").GetComponent(); + worldGenerator = GameObject.Find("WorldGenerator").GetComponent(); audioHandler = GameObject.Find("AudioHandler").GetComponent(); } @@ -111,5 +113,13 @@ namespace Assets.Scripts audioHandler.playButtonClick(); uihandler.switchPauseMenu(); } + + public void saveGame() + { + audioHandler.playButtonClick(); + string saveString = "[\r\n{\r\n\"Player\": {\r\n" + player.saveGame(); + saveString = saveString + "\r\n},\r\n\"World\": {\r\n" + worldGenerator.saveGame() + "\r\n}\r\n}\r\n]"; + FileHandler.saveGame(saveString, "./save.json"); + } } } diff --git a/Assets/Scripts/FileHandler.cs b/Assets/Scripts/FileHandler.cs new file mode 100644 index 0000000..304b617 --- /dev/null +++ b/Assets/Scripts/FileHandler.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; +using UnityEngine.UI; + +namespace Assets.Scripts +{ + public class FileHandler + { + static StreamWriter sw; + public static void saveGame(string data, string path) + { + if (!File.Exists(path)) + { + sw = File.CreateText(path); + } + else + { + sw = new StreamWriter(path); + } + sw.Write(data); + sw.Flush(); + } + + public static void loadGame() + { + + } + + public static void saveAudio(string path, float music, float effects) + { + if (!File.Exists(path)) + { + sw = File.CreateText(path); + } + else + { + sw = new StreamWriter(path); + } + sw.WriteLine("Music:" + music); + sw.WriteLine("Effects:" + effects); + sw.Flush(); + } + + public static void loadAudio(string path, AudioSource cameraAudio, AudioSource playerAudio) + { + if (File.Exists(path)) + { + string[] lines = File.ReadAllLines(path); + cameraAudio.volume = float.Parse(lines[0].Split(':')[1]); + playerAudio.volume = float.Parse(lines[1].Split(':')[1]); + } + else + { + sw = File.CreateText(path); + sw.WriteLine("Music:0.5"); + sw.WriteLine("Effects:0.5"); + sw.Flush(); + } + } + + public static string generateJSON(string key, object value) + { + return "\"" + key + "\": " + value; + } + } +} diff --git a/Assets/Scripts/FileHandler.cs.meta b/Assets/Scripts/FileHandler.cs.meta new file mode 100644 index 0000000..3cf32a4 --- /dev/null +++ b/Assets/Scripts/FileHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0aa6cfe5b8d20a24d9aa6ebaa044c2e8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player.cs b/Assets/Scripts/Player.cs index 1d5bf7e..88b8d89 100644 --- a/Assets/Scripts/Player.cs +++ b/Assets/Scripts/Player.cs @@ -557,5 +557,28 @@ namespace Assets.Scripts { return role; } + + public string saveGame() + { + string result = ""; + result = result + FileHandler.generateJSON("playername", "\"" + playername + "\"") + ",\r\n"; + result = result + FileHandler.generateJSON("maxHealth", maxHealth) + ",\r\n"; + result = result + FileHandler.generateJSON("maxSecondary", maxSecondary) + ",\r\n"; + result = result + FileHandler.generateJSON("secondary", secondary) + ",\r\n"; + result = result + FileHandler.generateJSON("health", health) + ",\r\n"; + result = result + FileHandler.generateJSON("strength", strength) + ",\r\n"; + result = result + FileHandler.generateJSON("dexterity", dexterity) + ",\r\n"; + result = result + FileHandler.generateJSON("intelligence", intelligence) + ",\r\n"; + result = result + FileHandler.generateJSON("level", level) + ",\r\n"; + result = result + FileHandler.generateJSON("experience", experience) + ",\r\n"; + result = result + FileHandler.generateJSON("maxExperience", maxExperience) + ",\r\n"; + result = result + FileHandler.generateJSON("race", "\"" + race.racename + "\"") + ",\r\n"; + result = result + FileHandler.generateJSON("role", "\"" + role.classname + "\"") + ",\r\n"; + result = result + FileHandler.generateJSON("points", points) + ",\r\n"; + result = result + FileHandler.generateJSON("isDodging", "\"" + isDodging + "\"") + ",\r\n"; + result = result + FileHandler.generateJSON("killcount", killcount) + ",\r\n"; + result = result + FileHandler.generateJSON("difficulty", difficulty); + return result; + } } } diff --git a/Assets/Scripts/Tile.cs b/Assets/Scripts/Tile.cs index a0a4af1..5332b47 100644 --- a/Assets/Scripts/Tile.cs +++ b/Assets/Scripts/Tile.cs @@ -214,4 +214,10 @@ public class Tile : MonoBehaviour { return tiletype; } + + public string saveTile() + { + string result = ""; + return result; + } } diff --git a/Assets/Scripts/WorldGenerator.cs b/Assets/Scripts/WorldGenerator.cs index ee9925e..8696ac6 100644 --- a/Assets/Scripts/WorldGenerator.cs +++ b/Assets/Scripts/WorldGenerator.cs @@ -1,3 +1,4 @@ +using Assets.Scripts; using System; using System.Collections; using System.Collections.Generic; @@ -178,4 +179,31 @@ public class WorldGenerator : MonoBehaviour { gameObject.GetComponent().text = "Cities: " + (maxCityAmount - cityAmount) + "/" + maxCityAmount; } + + public string saveGame() + { + Dictionary tiles; + GameObject currentTile; + string result = ""; + result = result + FileHandler.generateJSON("cityAmount", cityAmount) + ",\r\n"; + result = result + FileHandler.generateJSON("maxCityAmount", maxCityAmount) + ",\r\n"; + /*result = result + "'playername': " + playername + ",\r\n"; + result = result + "'maxHealth': " + maxHealth + ",\r\n"; + result = result + "'maxSecondary': " + maxSecondary + ",\r\n"; + result = result + "'secondary': " + secondary + ",\r\n"; + result = result + "'health': " + health + ",\r\n"; + result = result + "'strength': " + strength + ",\r\n"; + result = result + "'dexterity': " + dexterity + ",\r\n"; + result = result + "'intelligence': " + intelligence + ",\r\n"; + result = result + "'level': " + level + ",\r\n"; + result = result + "'experience': " + experience + ",\r\n"; + result = result + "'maxExperience': " + maxExperience + ",\r\n"; + result = result + "'race': " + race.racename + ",\r\n"; + result = result + "'role': " + role.classname + ",\r\n"; + result = result + "'points': " + points + ",\r\n"; + result = result + "'isDodging': " + isDodging + ",\r\n"; + result = result + "'killcount': " + killcount + ",\r\n"; + result = result + "'difficulty': " + difficulty;*/ + return result; + } } diff --git a/audiosettings.txt b/audiosettings.txt index 3406059..f8fca58 100644 --- a/audiosettings.txt +++ b/audiosettings.txt @@ -1,2 +1,2 @@ Music:0 -Effects:0 +Effects:0.5051396 diff --git a/save.json b/save.json new file mode 100644 index 0000000..b8310ff --- /dev/null +++ b/save.json @@ -0,0 +1,27 @@ +[ + { + "Player": { + "playername": "", +"maxHealth": 110, +"maxSecondary": 10, +"secondary": 10, +"health": 110, +"strength": 7, +"dexterity": 5, +"intelligence": 3, +"level": 0, +"experience": 0, +"maxExperience": 10, +"race": "Human", +"role": "Warrior", +"points": 0, +"isDodging": "False", +"killcount": 0, +"difficulty": 0, + + }, + "World": { + +} +} +] \ No newline at end of file