2023-03-28 13:16:30 -04:00
|
|
|
using System.Collections;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using UnityEngine;
|
|
|
|
using System.IO;
|
|
|
|
using RPGCreationKit;
|
|
|
|
using UnityEngine.UI;
|
|
|
|
using System.Globalization;
|
|
|
|
|
|
|
|
public class INIReader : MonoBehaviour
|
|
|
|
{
|
|
|
|
[Header("File path")]
|
|
|
|
[SerializeField] private string iniPath;
|
|
|
|
|
|
|
|
[Header("Objects that need initialized on load")]
|
|
|
|
[SerializeField] private Slider ScreenshotRes;
|
|
|
|
[SerializeField] private Slider MusicVolume;
|
2023-04-24 18:54:43 -04:00
|
|
|
[SerializeField] private Slider UIVolume;
|
2023-03-28 13:16:30 -04:00
|
|
|
[SerializeField] private List<Toggle> ScreenshotExtension;
|
2023-04-24 18:54:43 -04:00
|
|
|
[SerializeField] private bool InitializeSettings = false;
|
2023-03-28 13:16:30 -04:00
|
|
|
|
|
|
|
|
|
|
|
// Start is called before the first frame update
|
|
|
|
void Start() {
|
|
|
|
// Set all data if none exists
|
|
|
|
iniPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments)+@"\My Games\Firstborn\";
|
|
|
|
if (Directory.Exists(iniPath) == false){
|
|
|
|
Directory.CreateDirectory(iniPath);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!File.Exists(iniPath+@"\Settings.ini")) {
|
|
|
|
// Create a file to write to.
|
|
|
|
using (StreamWriter sw = File.CreateText(iniPath+@"\Settings.ini")) {
|
|
|
|
sw.WriteLine("[General]");
|
|
|
|
sw.WriteLine("NPC_TO_NPC_CONVERSATION_DISTANCE = 3.5");
|
|
|
|
sw.WriteLine("NPC_LOOKAT_TARGET_DISTANCE = 5");
|
|
|
|
sw.WriteLine("NPC_STOP_FOLLOW_AFTER_DISTANCE = 2.2");
|
|
|
|
sw.WriteLine("PLAYER_HEARS_NPC_DIALOGUES_DISTANCE = 15");
|
|
|
|
sw.WriteLine("PLAYER_DISTANCE_TO_DIALOGUE = 3");
|
|
|
|
sw.WriteLine("PLAYER_DISTANCE_TO_DISPLAY_ENEMY_BAR = 100");
|
|
|
|
sw.WriteLine("CHARGED_ATTACK_MOUSE_DOWN_TIME = 0.5");
|
|
|
|
sw.WriteLine("MIN_VELOCITY_TO_CONTINUE_ROTATING_ARROW = 5");
|
|
|
|
sw.WriteLine("DISTANCE_SHOW_NPC_IN_COMBAT_UI = 100");
|
|
|
|
sw.WriteLine("MELEE_GENERAL_RIGIDBODY_FORCE = 20");
|
|
|
|
sw.WriteLine("ARROW_GENERAL_RIGIDBODY_FORCE = 5");
|
|
|
|
sw.WriteLine("MELEE_ONBODY_RIGIDBODY_FORCE = 35");
|
|
|
|
sw.WriteLine("ARROW_ONBODY_RIGIDBODY_FORCE = 10");
|
|
|
|
sw.WriteLine("DRAIN_HEALTH_DEFAULT_RATE = 200");
|
|
|
|
sw.WriteLine("DRAIN_STAMINA_DEFAULT_RATE = 200");
|
|
|
|
sw.WriteLine("DISTANCE_WHEN_NPCS_START_LOOK_AT = 3.5");
|
|
|
|
sw.WriteLine("CROSSHAIR_HIT_TIME = .25");
|
|
|
|
sw.WriteLine("STOPPING_DETECTION_THRESHOLD = 0.15");
|
|
|
|
sw.WriteLine("HOSTILE_FACTION_COMBAT_THERSHOLD = 10");
|
|
|
|
|
|
|
|
sw.WriteLine("[EDITOR]");
|
|
|
|
sw.WriteLine("EDITOR_AI_LOAD_LOCATION = Assets/RPG Creation Kit/Prefab Library/AI/");
|
|
|
|
sw.WriteLine("EDITOR_AI_SAVE_LOCATION = Assets/RPG Creation Kit/Prefab Library/AI/");
|
|
|
|
sw.WriteLine("EDITOR_CREATUREAI_LOAD_LOCATION = Assets/RPG Creation Kit/Prefab Library/AI/Creatures/");
|
|
|
|
sw.WriteLine("EDITOR_CREATUREAI_SAVE_LOCATION = Assets/RPG Creation Kit/Prefab Library/AI/Creatures/");
|
|
|
|
|
|
|
|
sw.WriteLine("[Code]");
|
|
|
|
sw.WriteLine("DEFAULT_WEAPON_REACH = 4.0");
|
|
|
|
sw.WriteLine("INTERACTOR_RAYCAST_MAXDISTANCE = ");
|
|
|
|
sw.WriteLine("DRAIN_STAMINA_ON_ATTACK_SPEEDAMOUNT = 25");
|
|
|
|
sw.WriteLine("DRAIN_STAMINA_ON_ATTACKBLOCKED_SPEEDAMOUNT = 25");
|
|
|
|
sw.WriteLine("DRAIN_MANA_ON_CAST_SPEEDAMOUNT = 25");
|
|
|
|
sw.WriteLine("PROJECTILE_DESPAWN_TIME = 30");
|
|
|
|
sw.WriteLine("DISTANCE_BEFORE_ROTATING_TO_TARGET = 4.5");
|
|
|
|
|
|
|
|
sw.WriteLine("[Save Game]");
|
|
|
|
sw.WriteLine("JSON_PRETTY_PRINT = false");
|
|
|
|
sw.WriteLine("PLAYER_DAMAGE_SPEED = 100");
|
|
|
|
|
|
|
|
sw.WriteLine("[NEW GAME START]");
|
|
|
|
sw.WriteLine("RCK_NEW_STARTING_LOCATION = Starting cave");
|
|
|
|
sw.WriteLine("RCK_NEW_STARTING_WORLDSPACEID = 00CanyonInteriors");
|
|
|
|
sw.WriteLine("RCK_NEW_STARTING_CELLID = CanyonCaveCell1-1Cave2");
|
|
|
|
sw.WriteLine("RCK_NEW_STARTING_LEVEL = 1");
|
|
|
|
sw.WriteLine("STARTING_POSX = 93.52182");
|
|
|
|
sw.WriteLine("STARTING_POSX = -6.028");
|
|
|
|
sw.WriteLine("STARTING_POSX = -76.271");
|
|
|
|
sw.WriteLine("STARTING_ROTX = 0");
|
|
|
|
sw.WriteLine("STARTING_ROTX = 0");
|
|
|
|
sw.WriteLine("STARTING_ROTX = 0");
|
|
|
|
sw.WriteLine("ATTRIBUTES_DEF_HEALTH = 200.0");
|
|
|
|
sw.WriteLine("ATTRIBUTES_DEF_STAMINA = 200.0");
|
|
|
|
sw.WriteLine("ATTRIBUTES_DEF_MANA = 200.0");
|
|
|
|
|
|
|
|
sw.WriteLine("[Screenshot Tool]");
|
|
|
|
sw.WriteLine("Screenshot = 0");
|
|
|
|
sw.WriteLine("ScreenshotMultiplier = 2");
|
|
|
|
sw.WriteLine("ScreenshotExtension = 1");
|
|
|
|
|
|
|
|
sw.WriteLine("[Sound Settings]");
|
|
|
|
sw.WriteLine("MusicVolume = 1");
|
2023-04-24 18:54:43 -04:00
|
|
|
sw.WriteLine("UIVolume = 1");
|
2023-03-28 13:16:30 -04:00
|
|
|
}
|
|
|
|
} else {
|
2023-04-24 18:54:43 -04:00
|
|
|
if (InitializeSettings) {
|
|
|
|
// General Settings
|
|
|
|
RCKSettings.NPC_TO_NPC_CONVERSATION_DISTANCE = float.Parse(ReadSettingString("General", "NPC_TO_NPC_CONVERSATION_DISTANCE", "3.5"));
|
|
|
|
RCKSettings.NPC_LOOKAT_TARGET_DISTANCE = float.Parse(ReadSettingString("General", "NPC_LOOKAT_TARGET_DISTANCE", "5"));
|
|
|
|
RCKSettings.NPC_STOP_FOLLOW_AFTER_DISTANCE = float.Parse(ReadSettingString("General", "NPC_STOP_FOLLOW_AFTER_DISTANCE", "2.2"));
|
|
|
|
RCKSettings.PLAYER_HEARS_NPC_DIALOGUES_DISTANCE = float.Parse(ReadSettingString("General", "PLAYER_HEARS_NPC_DIALOGUES_DISTANCE", "15"));
|
|
|
|
RCKSettings.PLAYER_DISTANCE_TO_DIALOGUE = float.Parse(ReadSettingString("General", "PLAYER_DISTANCE_TO_DIALOGUE", "3"));
|
|
|
|
RCKSettings.PLAYER_DISTANCE_TO_DISPLAY_ENEMY_BAR = float.Parse(ReadSettingString("General", "PLAYER_DISTANCE_TO_DISPLAY_ENEMY_BAR", "100"));
|
|
|
|
RCKSettings.CHARGED_ATTACK_MOUSE_DOWN_TIME = float.Parse(ReadSettingString("General", "CHARGED_ATTACK_MOUSE_DOWN_TIME", "0.5"));
|
|
|
|
RCKSettings.MIN_VELOCITY_TO_CONTINUE_ROTATING_ARROW = float.Parse(ReadSettingString("General", "MIN_VELOCITY_TO_CONTINUE_ROTATING_ARROW", "5"));
|
|
|
|
RCKSettings.DISTANCE_SHOW_NPC_IN_COMBAT_UI = float.Parse(ReadSettingString("General", "DISTANCE_SHOW_NPC_IN_COMBAT_UI", "100"));
|
|
|
|
RCKSettings.MELEE_GENERAL_RIGIDBODY_FORCE = float.Parse(ReadSettingString("General", "MELEE_GENERAL_RIGIDBODY_FORCE", "20"));
|
|
|
|
RCKSettings.ARROW_GENERAL_RIGIDBODY_FORCE = float.Parse(ReadSettingString("General", "ARROW_GENERAL_RIGIDBODY_FORCE", "5"));
|
|
|
|
RCKSettings.MELEE_ONBODY_RIGIDBODY_FORCE = float.Parse(ReadSettingString("General", "MELEE_ONBODY_RIGIDBODY_FORCE", "35"));
|
|
|
|
RCKSettings.ARROW_ONBODY_RIGIDBODY_FORCE = float.Parse(ReadSettingString("General", "ARROW_ONBODY_RIGIDBODY_FORCE", "10"));
|
|
|
|
RCKSettings.DRAIN_HEALTH_DEFAULT_RATE = float.Parse(ReadSettingString("General", "DRAIN_HEALTH_DEFAULT_RATE", "200"));
|
|
|
|
RCKSettings.DRAIN_STAMINA_DEFAULT_RATE = float.Parse(ReadSettingString("General", "DRAIN_STAMINA_DEFAULT_RATE", "200"));
|
|
|
|
RCKSettings.DISTANCE_WHEN_NPCS_START_LOOK_AT = float.Parse(ReadSettingString("General", "DISTANCE_WHEN_NPCS_START_LOOK_AT", "3.5"));
|
|
|
|
RCKSettings.CROSSHAIR_HIT_TIME = float.Parse(ReadSettingString("General", "CROSSHAIR_HIT_TIME", ".25"));
|
|
|
|
RCKSettings.STOPPING_DETECTION_THRESHOLD = float.Parse(ReadSettingString("General", "STOPPING_DETECTION_THRESHOLD", "0.15"));
|
|
|
|
RCKSettings.HOSTILE_FACTION_COMBAT_THERSHOLD = float.Parse(ReadSettingString("General", "HOSTILE_FACTION_COMBAT_THERSHOLD", "10"));
|
|
|
|
|
|
|
|
// EDITOR
|
|
|
|
RCKSettings.EDITOR_AI_LOAD_LOCATION = ReadSettingString("EDITOR", "EDITOR_AI_LOAD_LOCATION", "Assets/RPG Creation Kit/Prefab Library/AI/");
|
|
|
|
RCKSettings.EDITOR_AI_SAVE_LOCATION = ReadSettingString("EDITOR", "EDITOR_AI_SAVE_LOCATION", "Assets/RPG Creation Kit/Prefab Library/AI/");
|
|
|
|
RCKSettings.EDITOR_CREATUREAI_LOAD_LOCATION = ReadSettingString("EDITOR", "EDITOR_CREATUREAI_LOAD_LOCATION", "Assets/RPG Creation Kit/Prefab Library/AI/Creatures/");
|
|
|
|
RCKSettings.EDITOR_CREATUREAI_SAVE_LOCATION = ReadSettingString("EDITOR", "EDITOR_CREATUREAI_SAVE_LOCATION", "Assets/RPG Creation Kit/Prefab Library/AI/Creatures/");
|
|
|
|
|
|
|
|
//Code
|
|
|
|
RCKSettings.DEFAULT_WEAPON_REACH = float.Parse(ReadSettingString("General", "DEFAULT_WEAPON_REACH", "4.0"));
|
|
|
|
float TempA = float.Parse(ReadSettingString("General", "INTERACTOR_RAYCAST_MAXDISTANCE", "0"));
|
|
|
|
if (TempA == 0f) {
|
|
|
|
RCKSettings.INTERACTOR_RAYCAST_MAXDISTANCE = float.MaxValue;
|
|
|
|
} else {
|
|
|
|
RCKSettings.INTERACTOR_RAYCAST_MAXDISTANCE = TempA;
|
|
|
|
}
|
|
|
|
RCKSettings.DRAIN_STAMINA_ON_ATTACK_SPEEDAMOUNT = float.Parse(ReadSettingString("General", "DRAIN_STAMINA_ON_ATTACK_SPEEDAMOUNT", "25"));
|
|
|
|
RCKSettings.DRAIN_STAMINA_ON_ATTACKBLOCKED_SPEEDAMOUNT = float.Parse(ReadSettingString("General", "DRAIN_STAMINA_ON_ATTACKBLOCKED_SPEEDAMOUNT", "25"));
|
|
|
|
RCKSettings.DRAIN_MANA_ON_CAST_SPEEDAMOUNT = float.Parse(ReadSettingString("General", "DRAIN_MANA_ON_CAST_SPEEDAMOUNT", "25"));
|
|
|
|
RCKSettings.PROJECTILE_DESPAWN_TIME = float.Parse(ReadSettingString("General", "PROJECTILE_DESPAWN_TIME", "30"));
|
|
|
|
RCKSettings.DISTANCE_BEFORE_ROTATING_TO_TARGET = float.Parse(ReadSettingString("General", "DISTANCE_BEFORE_ROTATING_TO_TARGET", "4.5"));
|
|
|
|
|
|
|
|
// Save Game
|
|
|
|
RCKSettings.JSON_PRETTY_PRINT = ReadSettingBool("Save Game", "JSON_PRETTY_PRINT", false);
|
|
|
|
RCKSettings.PLAYER_DAMAGE_SPEED = float.Parse(ReadSettingString("Save Game", "PLAYER_DAMAGE_SPEED", "100"));
|
|
|
|
|
|
|
|
// NEW GAME START
|
|
|
|
RCKSettings.RCK_NEW_STARTING_LOCATION = ReadSettingString("NEW GAME START", "RCK_NEW_STARTING_LOCATION", "Starting cave");
|
|
|
|
RCKSettings.RCK_NEW_STARTING_WORLDSPACEID = ReadSettingString("NEW GAME START", "RCK_NEW_STARTING_WORLDSPACEID", "00CanyonInteriors");
|
|
|
|
RCKSettings.RCK_NEW_STARTING_CELLID = ReadSettingString("NEW GAME START", "RCK_NEW_STARTING_CELLID", "CanyonCaveCell1-1Cave2");
|
|
|
|
RCKSettings.RCK_NEW_STARTING_LEVEL = ReadSettingInt("NEW GAME START", "RCK_NEW_STARTING_LEVEL", 1);
|
|
|
|
float StartPOSX = float.Parse(ReadSettingString("NEW GAME START", "STARTING_POSX", "93.52182"));
|
|
|
|
float StartPOSY = float.Parse(ReadSettingString("NEW GAME START", "STARTING_POSY", "-6.028"));
|
|
|
|
float StartPOSZ = float.Parse(ReadSettingString("NEW GAME START", "STARTING_POSZ", "-76.271"));
|
|
|
|
RCKSettings.RCK_NEW_STARTING_POS = new Vector3(StartPOSX, StartPOSY, StartPOSZ);
|
|
|
|
float StartROTX = float.Parse(ReadSettingString("NEW GAME START", "STARTING_ROTX", "0"));
|
|
|
|
float StartROTY = float.Parse(ReadSettingString("NEW GAME START", "STARTING_ROTY", "0"));
|
|
|
|
float StartROTZ = float.Parse(ReadSettingString("NEW GAME START", "STARTING_ROTZ", "0"));
|
|
|
|
RCKSettings.RCK_NEW_STARTING_ROT = new Vector3(StartROTX, StartROTY, StartROTZ);
|
|
|
|
RCKSettings.ATTRIBUTES_DEF_HEALTH = float.Parse(ReadSettingString("NEW GAME START", "ATTRIBUTES_DEF_HEALTH", "200.0"));
|
|
|
|
RCKSettings.ATTRIBUTES_DEF_STAMINA = float.Parse(ReadSettingString("NEW GAME START", "ATTRIBUTES_DEF_STAMINA", "200.0"));
|
|
|
|
RCKSettings.ATTRIBUTES_DEF_MANA = float.Parse(ReadSettingString("NEW GAME START", "ATTRIBUTES_DEF_MANA", "200.0"));
|
|
|
|
|
|
|
|
// Screenshot tools
|
|
|
|
ScreenshotRes.value = (float)ReadSettingInt("Screenshot Tool", "ScreenshotMultiplier", 0);
|
|
|
|
int A = ReadSettingInt("Screenshot Tool", "ScreenshotExtension", 0);
|
|
|
|
ScreenshotExtension[A].isOn = true;
|
|
|
|
}
|
2023-03-28 13:16:30 -04:00
|
|
|
|
|
|
|
// Sound settings
|
|
|
|
MusicVolume.value = float.Parse(ReadSettingString("Sound Settings", "MusicVolume", "1"));
|
2023-04-24 18:54:43 -04:00
|
|
|
UIVolume.value = float.Parse(ReadSettingString("Sound Settings", "UIVolume", "1"));
|
2023-03-28 13:16:30 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void SetScreenShotExtension(int A) {
|
|
|
|
SaveSettingInt("Screenshot Tool", "ScreenshotExtension", A);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void SetMusicVolume() {
|
|
|
|
SaveSettingString("Sound Settings", "MusicVolume", MusicVolume.value.ToString());
|
|
|
|
}
|
|
|
|
|
2023-04-24 18:54:43 -04:00
|
|
|
public void SetUIVolume() {
|
|
|
|
SaveSettingString("Sound Settings", "UIVolume", UIVolume.value.ToString());
|
|
|
|
}
|
|
|
|
|
2023-03-28 13:16:30 -04:00
|
|
|
|
|
|
|
/////////////////////////////////////////
|
|
|
|
////// - Read and save settings - ///////
|
|
|
|
/////////////////////////////////////////
|
|
|
|
|
|
|
|
public int ReadSettingInt(string CategoryName, string SettingName, int CurrentValue = 0){
|
|
|
|
INIParser ini = new INIParser();
|
|
|
|
ini.Open(iniPath+@"\Settings.ini");
|
|
|
|
int Value = ini.ReadValue(CategoryName, SettingName, CurrentValue);
|
|
|
|
ini.Close();
|
|
|
|
return Value;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void SaveSettingInt(string CategoryName, string SettingName, int NewValue) {
|
|
|
|
INIParser ini = new INIParser();
|
|
|
|
ini.Open(iniPath+@"\Settings.ini");
|
|
|
|
ini.WriteValue(CategoryName, SettingName, NewValue);
|
|
|
|
ini.Close();
|
|
|
|
}
|
|
|
|
|
|
|
|
public string ReadSettingString(string CategoryName, string SettingName, string CurrentValue){
|
|
|
|
INIParser ini = new INIParser();
|
|
|
|
ini.Open(iniPath+@"\Settings.ini");
|
|
|
|
string Value = ini.ReadValue(CategoryName, SettingName, CurrentValue);
|
|
|
|
ini.Close();
|
|
|
|
return Value;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void SaveSettingString(string CategoryName, string SettingName, string NewValue) {
|
|
|
|
INIParser ini = new INIParser();
|
|
|
|
ini.Open(iniPath+@"\Settings.ini");
|
|
|
|
ini.WriteValue(CategoryName, SettingName, NewValue);
|
|
|
|
ini.Close();
|
|
|
|
}
|
|
|
|
|
|
|
|
public bool ReadSettingBool(string CategoryName, string SettingName, bool CurrentValue){
|
|
|
|
INIParser ini = new INIParser();
|
|
|
|
ini.Open(iniPath+@"\Settings.ini");
|
|
|
|
bool Value = ini.ReadValue(CategoryName, SettingName, CurrentValue);
|
|
|
|
ini.Close();
|
|
|
|
return Value;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void SaveSettingBool(string CategoryName, string SettingName, bool NewValue) {
|
|
|
|
INIParser ini = new INIParser();
|
|
|
|
ini.Open(iniPath+@"\Settings.ini");
|
|
|
|
ini.WriteValue(CategoryName, SettingName, NewValue);
|
|
|
|
ini.Close();
|
|
|
|
}
|
|
|
|
|
|
|
|
public void Debugger(string A) {
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|