Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
PlayerFileData.cs
Go to the documentation of this file.
1using System;
3using System.IO;
4using System.Linq;
7
8namespace Terraria.IO;
9
11{
12 private Player _player;
13
15
16 private readonly Stopwatch _timer = new Stopwatch();
17
18 private bool _isTimerActive;
19
21 {
22 get
23 {
24 return _player;
25 }
26 set
27 {
28 _player = value;
29 if (value != null)
30 {
32 }
33 }
34 }
35
36 public bool ServerSideCharacter { get; private set; }
37
39 : base("Player")
40 {
41 }
42
43 public PlayerFileData(string path, bool cloudSave)
44 : base("Player", path, cloudSave)
45 {
46 }
47
48 public static PlayerFileData CreateAndSave(Player player)
49 {
50 PlayerFileData playerFileData = new PlayerFileData();
51 playerFileData.Metadata = FileMetadata.FromCurrentSettings(FileType.Player);
52 playerFileData.Player = player;
53 playerFileData._isCloudSave = SocialAPI.Cloud != null && SocialAPI.Cloud.EnabledByDefault;
54 playerFileData._path = Main.GetPlayerPathFromName(player.name, playerFileData.IsCloudSave);
55 (playerFileData.IsCloudSave ? Main.CloudFavoritesData : Main.LocalFavoriteData).ClearEntry(playerFileData);
56 Player.SavePlayer(playerFileData, skipMapSave: true);
57 return playerFileData;
58 }
59
60 public override void SetAsActive()
61 {
62 Main.ActivePlayerFileData = this;
64 }
65
66 public void MarkAsServerSide()
67 {
69 }
70
71 public override void MoveToCloud()
72 {
73 if (base.IsCloudSave || SocialAPI.Cloud == null)
74 {
75 return;
76 }
77 string playerPathFromName = Main.GetPlayerPathFromName(Name, cloudSave: true);
78 if (!FileUtilities.MoveToCloud(base.Path, playerPathFromName))
79 {
80 return;
81 }
82 string fileName = GetFileName(includeExtension: false);
83 string path = Main.PlayerPath + System.IO.Path.DirectorySeparatorChar + fileName + System.IO.Path.DirectorySeparatorChar;
84 if (Directory.Exists(path))
85 {
86 string[] files = Directory.GetFiles(path);
87 for (int i = 0; i < files.Length; i++)
88 {
89 string cloudPath = Main.CloudPlayerPath + "/" + fileName + "/" + FileUtilities.GetFileName(files[i]);
90 FileUtilities.MoveToCloud(files[i], cloudPath);
91 }
92 }
93 Main.LocalFavoriteData.ClearEntry(this);
94 _isCloudSave = true;
95 _path = playerPathFromName;
96 Main.CloudFavoritesData.SaveFavorite(this);
97 }
98
99 public override void MoveToLocal()
100 {
101 if (!base.IsCloudSave || SocialAPI.Cloud == null)
102 {
103 return;
104 }
105 string playerPathFromName = Main.GetPlayerPathFromName(Name, cloudSave: false);
106 if (!FileUtilities.MoveToLocal(base.Path, playerPathFromName))
107 {
108 return;
109 }
110 string fileName = GetFileName(includeExtension: false);
111 string mapPath = System.IO.Path.Combine(Main.CloudPlayerPath, fileName);
112 foreach (string item in (from path in SocialAPI.Cloud.GetFiles().ToList()
113 where MapBelongsToPath(mapPath, path)
114 select path).ToList())
115 {
116 string localPath = System.IO.Path.Combine(Main.PlayerPath, fileName, FileUtilities.GetFileName(item));
117 FileUtilities.MoveToLocal(item, localPath);
118 }
119 Main.CloudFavoritesData.ClearEntry(this);
120 _isCloudSave = false;
121 _path = playerPathFromName;
122 Main.LocalFavoriteData.SaveFavorite(this);
123 }
124
125 private bool MapBelongsToPath(string mapPath, string filePath)
126 {
127 if (!filePath.EndsWith(".map", StringComparison.CurrentCultureIgnoreCase))
128 {
129 return false;
130 }
131 string value = mapPath.Replace('\\', '/');
132 return filePath.StartsWith(value, StringComparison.CurrentCultureIgnoreCase);
133 }
134
135 public void UpdatePlayTimer()
136 {
137 bool flag = Main.gamePaused && !Main.hasFocus;
138 bool flag2 = Main.instance.IsActive && !flag;
139 if (Main.gameMenu)
140 {
141 flag2 = false;
142 }
143 if (flag2)
144 {
146 }
147 else
148 {
150 }
151 }
152
153 public void StartPlayTimer()
154 {
155 if (!_isTimerActive)
156 {
157 _isTimerActive = true;
158 if (!_timer.IsRunning)
159 {
160 _timer.Start();
161 }
162 }
163 }
164
165 public void PausePlayTimer()
166 {
168 }
169
171 {
172 if (_timer.IsRunning)
173 {
174 return _playTime + _timer.Elapsed;
175 }
176 return _playTime;
177 }
178
180 {
181 bool isRunning = _timer.IsRunning;
183 _timer.Reset();
184 if (isRunning)
185 {
186 _timer.Start();
187 }
188 }
189
190 public void StopPlayTimer()
191 {
192 if (_isTimerActive)
193 {
194 _isTimerActive = false;
195 if (_timer.IsRunning)
196 {
198 _timer.Reset();
199 }
200 }
201 }
202
203 public void SetPlayTime(TimeSpan time)
204 {
205 _playTime = time;
206 }
207
208 public void Rename(string newName)
209 {
210 if (Player != null)
211 {
212 Player.name = newName.Trim();
213 }
214 Player.SavePlayer(this);
215 }
216}
static string[] GetFiles(string path)
Definition Directory.cs:136
static bool Exists([NotNullWhen(true)] string? path)
Definition Directory.cs:43
static string Combine(string path1, string path2)
Definition Path.cs:304
static readonly char DirectorySeparatorChar
Definition Path.cs:71
string GetFileName(bool includeExtension=true)
Definition FileData.cs:43
static FileMetadata FromCurrentSettings(FileType type)
readonly Stopwatch _timer
PlayerFileData(string path, bool cloudSave)
bool MapBelongsToPath(string mapPath, string filePath)
void Rename(string newName)
void SetPlayTime(TimeSpan time)
static PlayerFileData CreateAndSave(Player player)
static FavoritesFile CloudFavoritesData
Definition Main.cs:359
static FavoritesFile LocalFavoriteData
Definition Main.cs:357
static int myPlayer
Definition Main.cs:1801
static bool hasFocus
Definition Main.cs:1781
static string GetPlayerPathFromName(string playerName, bool cloudSave)
Definition Main.cs:4461
static string PlayerPath
Definition Main.cs:1952
static string CloudPlayerPath
Definition Main.cs:1954
static bool gameMenu
Definition Main.cs:1926
static Player[] player
Definition Main.cs:1803
string name
Definition Player.cs:621
static void SavePlayer(PlayerFileData playerFile, bool skipMapSave=false)
Definition Player.cs:51176
static Terraria.Social.Base.CloudSocialModule Cloud
Definition SocialAPI.cs:18
static bool MoveToCloud(string localPath, string cloudPath)
static string GetFileName(string path, bool includeExtension=true)
static bool MoveToLocal(string cloudPath, string localPath)
static readonly TimeSpan Zero
Definition TimeSpan.cs:21