Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
Program.cs
Go to the documentation of this file.
1using System;
4using System.IO;
7using System.Text;
9using System.Windows.Forms;
10using ReLogic.IO;
11using ReLogic.OS;
14using Terraria.Social;
16
17namespace Terraria;
18
19public static class Program
20{
21 public static bool IsXna = true;
22
23 public static bool IsFna = false;
24
25 public static bool IsMono = Type.GetType("Mono.Runtime") != null;
26
27 public const bool IsDebug = false;
28
30
31 public static string SavePath;
32
33 public const string TerrariaSaveFolderPath = "Terraria";
34
35 private static int ThingsToLoad;
36
37 private static int ThingsLoaded;
38
39 public static bool LoadedEverything;
40
42
43 public static float LoadedPercentage
44 {
45 get
46 {
47 if (ThingsToLoad == 0)
48 {
49 return 1f;
50 }
51 return (float)ThingsLoaded / (float)ThingsToLoad;
52 }
53 }
54
55 public static void StartForceLoad()
56 {
58 {
60 thread.IsBackground = true;
61 thread.Start();
62 }
63 else
64 {
65 LoadedEverything = true;
66 }
67 }
68
74
76 {
77 Type[] types = assembly.GetTypes();
78 foreach (Type type in types)
79 {
80 MethodInfo[] array = (IsMono ? type.GetMethods() : type.GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic));
81 foreach (MethodInfo methodInfo in array)
82 {
83 if (!methodInfo.IsAbstract && !methodInfo.ContainsGenericParameters && methodInfo.GetMethodBody() != null)
84 {
85 if (IsMono)
86 {
87 JitForcedMethodCache = methodInfo.MethodHandle.GetFunctionPointer();
88 }
89 else
90 {
92 }
93 }
94 }
96 }
97 }
98
100 {
101 Type[] types = assembly.GetTypes();
102 foreach (Type type in types)
103 {
104 if (!type.IsGenericType)
105 {
107 }
108 }
109 }
110
112 {
113 ThingsToLoad = assembly.GetTypes().Length;
116 {
118 }
119 }
120
121 private static void ForceLoadAssembly(string name, bool initializeStaticMembers)
122 {
123 Assembly assembly = null;
124 Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
125 for (int i = 0; i < assemblies.Length; i++)
126 {
127 if (assemblies[i].GetName().Name.Equals(name))
128 {
129 assembly = assemblies[i];
130 break;
131 }
132 }
133 if (assembly == null)
134 {
135 assembly = Assembly.Load(name);
136 }
138 }
139
140 private static void SetupLogging()
141 {
142 if (LaunchParameters.ContainsKey("-logfile"))
143 {
144 string text = LaunchParameters["-logfile"];
145 text = ((text != null && !(text.Trim() == "")) ? Path.Combine(text, $"Log_{DateTime.Now:yyyyMMddHHmmssfff}.log") : Path.Combine(SavePath, "Logs", $"Log_{DateTime.Now:yyyyMMddHHmmssfff}.log"));
147 }
149 CrashWatcher.DumpOnException = LaunchParameters.ContainsKey("-minidump");
150 CrashWatcher.LogAllExceptions = LaunchParameters.ContainsKey("-logerrors");
151 if (LaunchParameters.ContainsKey("-fulldump"))
152 {
153 Console.WriteLine("Full Dump logs enabled.");
155 }
156 }
157
158 private static void InitializeConsoleOutput()
159 {
161 {
162 return;
163 }
164 try
165 {
166 Console.OutputEncoding = Encoding.UTF8;
168 {
169 Console.InputEncoding = Encoding.Unicode;
170 }
171 else
172 {
173 Console.InputEncoding = Encoding.UTF8;
174 }
175 }
176 catch
177 {
178 }
179 }
180
181 public static void LaunchGame(string[] args, bool monoArgs = false)
182 {
183 Thread.CurrentThread.Name = "Main Thread";
184 if (monoArgs)
185 {
187 }
188 if (IsFna)
189 {
191 }
193 SavePath = (LaunchParameters.ContainsKey("-savedirectory") ? LaunchParameters["-savedirectory"] : Platform.Get<IPathService>().GetStoragePath("Terraria"));
196 SetupLogging();
197 Platform.Get<IWindowService>().SetQuickEditEnabled(false);
198 RunGame();
199 }
200
201 public static void RunGame()
202 {
204 if (Platform.IsOSX)
205 {
206 Main.OnEngineLoad += delegate
207 {
208 Main.instance.IsMouseVisible = false;
209 };
210 }
211 using Main main = new Main();
212 try
213 {
217 Main.OnEnginePreload += StartForceLoad;
218 if (Main.dedServ)
219 {
220 main.DedServ();
221 }
222 main.Run();
223 }
224 catch (Exception e)
225 {
227 }
228 }
229
230 private static void TrySettingFNAToOpenGL(string[] args)
231 {
232 bool flag = false;
233 for (int i = 0; i < args.Length; i++)
234 {
235 if (args[i].Contains("gldevice"))
236 {
237 flag = true;
238 break;
239 }
240 }
241 if (!flag)
242 {
243 Environment.SetEnvironmentVariable("FNA3D_FORCE_DRIVER", "OpenGL");
244 }
245 }
246
247 private static void DisplayException(Exception e)
248 {
249 try
250 {
251 string text = e.ToString();
252 if (WorldGen.gen)
253 {
254 try
255 {
256 text = $"Creating world - Seed: {Main.ActiveWorldFileData.Seed} Width: {Main.maxTilesX}, Height: {Main.maxTilesY}, Evil: {WorldGen.WorldGenParam_Evil}, IsExpert: {Main.expertMode}\n{text}";
257 }
258 catch
259 {
260 }
261 }
262 using (StreamWriter streamWriter = new StreamWriter("client-crashlog.txt", append: true))
263 {
264 streamWriter.WriteLine(DateTime.Now);
265 streamWriter.WriteLine(text);
266 streamWriter.WriteLine("");
267 }
268 if (Main.dedServ)
269 {
270 Console.WriteLine(Language.GetTextValue("Error.ServerCrash"), DateTime.Now, text);
271 }
272 MessageBox.Show(text, "Terraria: Error");
273 }
274 catch
275 {
276 }
277 }
278}
static void ToFile(string path)
static bool IsOSX
Definition Platform.cs:21
static bool IsWindows
Definition Platform.cs:19
static AppDomain CurrentDomain
Definition AppDomain.cs:28
static void WriteLine()
Definition Console.cs:733
static void SetEnvironmentVariable(string variable, string? value)
override string ToString()
Definition Exception.cs:384
static string Combine(string path1, string path2)
Definition Path.cs:304
static Assembly Load(string assemblyString)
Definition Assembly.cs:157
static RuntimeAssembly GetExecutingAssembly(ref StackCrawlMark stackMark)
Definition Assembly.cs:198
static void RunClassConstructor(QCallTypeHandle type)
static unsafe void PrepareMethod(RuntimeMethodHandleInternal method, IntPtr *pInstantiation, int cInstantiation)
static Encoding Unicode
Definition Encoding.cs:519
static Encoding UTF8
Definition Encoding.cs:526
static bool SetMinThreads(int workerThreads, int completionPortThreads)
static ? Type GetType(string typeName, bool throwOnError, bool ignoreCase)
Definition Type.cs:408
static void InitializeLegacyLocalization()
Definition Lang.cs:444
static GameCulture DefaultCulture
static string GetTextValue(string key)
Definition Language.cs:15
static bool dedServ
Definition Main.cs:1226
static bool SkipAssemblyLoad
Definition Main.cs:946
static int ThingsLoaded
Definition Program.cs:37
static bool IsFna
Definition Program.cs:23
static void ForceLoadAssembly(Assembly assembly, bool initializeStaticMembers)
Definition Program.cs:111
static IntPtr JitForcedMethodCache
Definition Program.cs:41
static bool IsXna
Definition Program.cs:21
static void ForceStaticInitializers(Assembly assembly)
Definition Program.cs:99
static void InitializeConsoleOutput()
Definition Program.cs:158
static void ForceJITOnAssembly(Assembly assembly)
Definition Program.cs:75
static int ThingsToLoad
Definition Program.cs:35
static void SetupLogging()
Definition Program.cs:140
static bool IsMono
Definition Program.cs:25
static void StartForceLoad()
Definition Program.cs:55
static void ForceLoadAssembly(string name, bool initializeStaticMembers)
Definition Program.cs:121
static void ForceLoadThread(object threadContext)
Definition Program.cs:69
static void TrySettingFNAToOpenGL(string[] args)
Definition Program.cs:230
static bool LoadedEverything
Definition Program.cs:39
static void LaunchGame(string[] args, bool monoArgs=false)
Definition Program.cs:181
const string TerrariaSaveFolderPath
Definition Program.cs:33
const bool IsDebug
Definition Program.cs:27
static string SavePath
Definition Program.cs:31
static Dictionary< string, string > LaunchParameters
Definition Program.cs:29
static float LoadedPercentage
Definition Program.cs:44
static void RunGame()
Definition Program.cs:201
static void DisplayException(Exception e)
Definition Program.cs:247
static void Initialize(SocialMode? mode=null)
Definition SocialAPI.cs:34
static void EnableCrashDumps(CrashDump.Options options)
static string[] ConvertMonoArgsToDotNet(string[] brokenArgs)
Definition Utils.cs:374
static Dictionary< string, string > ParseArguements(string[] args)
Definition Utils.cs:103
static volatile bool gen
Definition WorldGen.cs:972
static DateTime Now
Definition DateTime.cs:103