Terraria 1.4.0.5 Source Code
This commit is contained in:
commit
05205f009e
1059 changed files with 563450 additions and 0 deletions
87
Social/WeGame/CoreSocialModule.cs
Normal file
87
Social/WeGame/CoreSocialModule.cs
Normal file
|
@ -0,0 +1,87 @@
|
|||
// Decompiled with JetBrains decompiler
|
||||
// Type: Terraria.Social.WeGame.CoreSocialModule
|
||||
// Assembly: Terraria, Version=1.4.0.5, Culture=neutral, PublicKeyToken=null
|
||||
// MVID: 67F9E73E-0A81-4937-A22C-5515CD405A83
|
||||
// Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe
|
||||
|
||||
using rail;
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Threading;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Terraria.Social.WeGame
|
||||
{
|
||||
public class CoreSocialModule : ISocialModule
|
||||
{
|
||||
private RailCallBackHelper _callbackHelper = new RailCallBackHelper();
|
||||
private static object _railTickLock = new object();
|
||||
private bool isRailValid;
|
||||
|
||||
[DllImport("kernel32.dll")]
|
||||
private static extern uint GetCurrentThreadId();
|
||||
|
||||
public static event Action OnTick;
|
||||
|
||||
public void Initialize()
|
||||
{
|
||||
RailGameID railGameId = new RailGameID();
|
||||
((RailComparableID) railGameId).id_ = (__Null) 2000328L;
|
||||
string[] strArray = new string[1]{ " " };
|
||||
if (rail_api.RailNeedRestartAppForCheckingEnvironment(railGameId, strArray.Length, strArray))
|
||||
Environment.Exit(1);
|
||||
if (!rail_api.RailInitialize())
|
||||
Environment.Exit(1);
|
||||
// ISSUE: method pointer
|
||||
this._callbackHelper.RegisterCallback((RAILEventID) 2, new RailEventCallBackHandler((object) null, __methodptr(RailEventCallBack)));
|
||||
this.isRailValid = true;
|
||||
ThreadPool.QueueUserWorkItem(new WaitCallback(this.TickThread), (object) null);
|
||||
Main.OnTickForThirdPartySoftwareOnly += new Action(CoreSocialModule.RailEventTick);
|
||||
}
|
||||
|
||||
public static void RailEventTick()
|
||||
{
|
||||
rail_api.RailFireEvents();
|
||||
if (!Monitor.TryEnter(CoreSocialModule._railTickLock))
|
||||
return;
|
||||
Monitor.Pulse(CoreSocialModule._railTickLock);
|
||||
Monitor.Exit(CoreSocialModule._railTickLock);
|
||||
}
|
||||
|
||||
private void TickThread(object context)
|
||||
{
|
||||
Monitor.Enter(CoreSocialModule._railTickLock);
|
||||
while (this.isRailValid)
|
||||
{
|
||||
if (CoreSocialModule.OnTick != null)
|
||||
CoreSocialModule.OnTick();
|
||||
Monitor.Wait(CoreSocialModule._railTickLock);
|
||||
}
|
||||
Monitor.Exit(CoreSocialModule._railTickLock);
|
||||
}
|
||||
|
||||
public void Shutdown()
|
||||
{
|
||||
Application.ApplicationExit += (EventHandler) ((obj, evt) => this.isRailValid = false);
|
||||
this._callbackHelper.UnregisterAllCallback();
|
||||
rail_api.RailFinalize();
|
||||
}
|
||||
|
||||
public static void RailEventCallBack(RAILEventID eventId, EventBase data)
|
||||
{
|
||||
if (eventId != 2)
|
||||
return;
|
||||
CoreSocialModule.ProcessRailSystemStateChange((RailSystemState) ((RailSystemStateChanged) data).state);
|
||||
}
|
||||
|
||||
public static void SaveAndQuitCallBack() => Main.WeGameRequireExitGame();
|
||||
|
||||
private static void ProcessRailSystemStateChange(RailSystemState state)
|
||||
{
|
||||
if (state != 2 && state != 3)
|
||||
return;
|
||||
int num = (int) MessageBox.Show("检测到WeGame异常,游戏将自动保存进度并退出游戏", "Terraria--WeGame Error");
|
||||
WorldGen.SaveAndQuit(new Action(CoreSocialModule.SaveAndQuitCallBack));
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue