/
LogData.cs
106 lines (90 loc) · 3.06 KB
/
LogData.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
using AxeMan.GameSystem.GameDataTag;
using AxeMan.GameSystem.InitializeGameWorld;
using AxeMan.GameSystem.SaveLoadGameFile;
using System;
using System.Xml.Linq;
using UnityEngine;
namespace AxeMan.GameSystem.GameDataHub
{
public interface ILogData
{
string GetStringData(LogMessage logMessage);
}
public class LogData : MonoBehaviour, ILogData
{
private LanguageTag defaultLanguage;
private string errorMessage;
private XElement logDataFile;
private string replaceActor;
private string replaceTrap;
private LanguageTag userLanguage;
public string GetStringData(LogMessage logMessage)
{
string message;
if (TryGetData(logMessage, userLanguage, out XElement xElement)
|| TryGetData(logMessage, defaultLanguage, out xElement))
{
message = (string)xElement;
message = TryReplacePlaceholder(message, replaceActor,
MainTag.Actor, logMessage.ActorTag);
message = TryReplacePlaceholder(message, replaceTrap,
MainTag.Trap, logMessage.TrapTag);
}
else
{
message = errorMessage;
}
return message;
}
private void Awake()
{
defaultLanguage = LanguageTag.English;
errorMessage = "INVALID";
replaceActor = "%ACTOR%";
replaceTrap = "%TRAP%";
}
private void LoadLogData()
{
string file = "logData.xml";
string directory = "Data";
logDataFile = GetComponent<SaveLoadXML>().Load(file, directory);
}
private void LoadUserLanguage()
{
string language = GetComponent<SettingData>().GetStringData(
SettingDataTag.Language);
Enum.TryParse(language, out userLanguage);
}
private void LogData_LoadingGameData(object sender, EventArgs e)
{
LoadUserLanguage();
LoadLogData();
}
private void Start()
{
GetComponent<InitializeStartScreen>().LoadingGameData
+= LogData_LoadingGameData;
}
private bool TryGetData(LogMessage logMessage, LanguageTag languageTag,
out XElement xElement)
{
xElement = logDataFile
?.Element(logMessage.LogCategoryTag.ToString())
?.Element(logMessage.LogMessageTag.ToString())
?.Element(languageTag.ToString());
return xElement != null;
}
private string TryReplacePlaceholder(string source, string placeholder,
MainTag mainTag, SubTag subTag)
{
string newText;
if (subTag != SubTag.INVALID)
{
newText = GetComponent<ActorData>().GetStringData(
mainTag, subTag, ActorDataTag.Name);
source = source.Replace(placeholder, newText);
}
return source;
}
}
}