//
// Copyright (C) 2014 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Keep this file even on unsupported configurations.
namespace GooglePlayGames.Editor
{
using System.Collections.Generic;
using System.IO;
#if UNITY_2017_3_OR_NEWER
using UnityEngine.Networking;
#else
using UnityEngine;
#endif
public class GPGSProjectSettings
{
private static GPGSProjectSettings sInstance = null;
public static GPGSProjectSettings Instance
{
get
{
if (sInstance == null)
{
sInstance = new GPGSProjectSettings();
}
return sInstance;
}
}
private bool mDirty = false;
private readonly string mFile;
private Dictionary mDict = new Dictionary();
private GPGSProjectSettings()
{
mFile = GPGSUtil.SlashesToPlatformSeparator("ProjectSettings/GooglePlayGameSettings.txt");
StreamReader rd = null;
// read the settings file, this list is all the locations it can be in order of precedence.
string[] fileLocations =
{
mFile,
GPGSUtil.SlashesToPlatformSeparator(Path.Combine(GPGSUtil.RootPath, "Editor/projsettings.txt")),
GPGSUtil.SlashesToPlatformSeparator("Assets/Editor/projsettings.txt")
};
foreach (string f in fileLocations)
{
if (File.Exists(f))
{
// assign the reader and break out of the loop
rd = new StreamReader(f);
break;
}
}
if (rd != null)
{
while (!rd.EndOfStream)
{
string line = rd.ReadLine();
if (line == null || line.Trim().Length == 0)
{
break;
}
line = line.Trim();
string[] p = line.Split(new char[] {'='}, 2);
if (p.Length >= 2)
{
mDict[p[0].Trim()] = p[1].Trim();
}
}
rd.Close();
}
}
public string Get(string key, Dictionary overrides)
{
if (overrides.ContainsKey(key))
{
return overrides[key];
}
else if (mDict.ContainsKey(key))
{
#if UNITY_2017_3_OR_NEWER
return UnityWebRequest.UnEscapeURL(mDict[key]);
#else
return WWW.UnEscapeURL(mDict[key]);
#endif
}
else
{
return string.Empty;
}
}
public string Get(string key, string defaultValue)
{
if (mDict.ContainsKey(key))
{
#if UNITY_2017_3_OR_NEWER
return UnityWebRequest.UnEscapeURL(mDict[key]);
#else
return WWW.UnEscapeURL(mDict[key]);
#endif
}
else
{
return defaultValue;
}
}
public string Get(string key)
{
return Get(key, string.Empty);
}
public bool GetBool(string key, bool defaultValue)
{
return Get(key, defaultValue ? "true" : "false").Equals("true");
}
public bool GetBool(string key)
{
return Get(key, "false").Equals("true");
}
public void Set(string key, string val)
{
#if UNITY_2017_3_OR_NEWER
string escaped = UnityWebRequest.EscapeURL(val);
#else
string escaped = WWW.EscapeURL(val);
#endif
mDict[key] = escaped;
mDirty = true;
}
public void Set(string key, bool val)
{
Set(key, val ? "true" : "false");
}
public void Save()
{
// See if we are building the plugin, and don't write the settings file
string[] args = System.Environment.GetCommandLineArgs();
foreach (string a in args)
{
if (a == "-g.building")
{
mDirty = false;
break;
}
}
if (!mDirty)
{
return;
}
StreamWriter wr = new StreamWriter(mFile, false);
foreach (string key in mDict.Keys)
{
wr.WriteLine(key + "=" + mDict[key]);
}
wr.Close();
mDirty = false;
}
public static void Reload()
{
sInstance = new GPGSProjectSettings();
}
}
}