Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
MainMenuScreen.cs
浏览该文件的文档.
1using System.Xml.Linq;
2using Engine;
3using Engine.Input;
4
5namespace Game {
6 public class MainMenuScreen : Screen {
7 public string m_versionString = string.Empty;
8
10
23
24 public const string fName = "MainMenuScreen";
25
26 public MainMenuScreen() {
27 XElement node = ContentManager.Get<XElement>("Screens/MainMenuScreen");
28 LoadContents(this, node);
29 m_disableSafeModeButton = Children.Find<ButtonWidget>("DisableSafeModeButton");
30 m_showBulletinButton = Children.Find<ButtonWidget>("BulletinButton", false);
31 m_copyrightLabel = Children.Find<LabelWidget>("CopyrightLabel", false);
32 m_languageSwitchButton = Children.Find<ButtonWidget>("LanguageSwitchButton", false);
33 m_leftBottomBar = Children.Find<StackPanelWidget>("LeftBottomBar", false);
34 m_rightBottomBar = Children.Find<StackPanelWidget>("RightBottomBar", false);
35 m_updateCheckButton = Children.Find<ButtonWidget>("UpdateCheckButton", false);
36 m_updateButtonIcon = Children.Find<RectangleWidget>("UpdateIcon", false);
37 m_needToUpdateIcon = ContentManager.Get<Subtexture>("Textures/Gui/NeedToUpdate");
38 m_dontNeedUpdateIcon = ContentManager.Get<Subtexture>("Textures/Gui/UpdateChecking");
39 m_fullscreenButton = Children.Find<ButtonWidget>("FullscreenButton", false);
40 m_dashboardButton = Children.Find<ButtonWidget>("DashboardButton", false);
41#if BROWSER
42 m_fullscreenButton.IsVisible = true;
43 m_dashboardButton.IsVisible = true;
44#endif
46 "OnMainMenuScreenCreated",
47 loader => {
48 loader.OnMainMenuScreenCreated(this, m_leftBottomBar, m_rightBottomBar);
49 return false;
50 }
51 );
52 }
53
54 public override void Enter(object[] parameters) {
56 Children.Find<MotdWidget>().Restart();
60 }
63 }
65 m_disableSafeModeButton.IsVisible = true;
66 }
67 m_leftBottomBar.MarginLeft = SettingsManager.AdaptEdgeToEdgeDisplay ? Window.DisplayCutoutInsets.X * ScreensManager.FinalUiScale : 0f;
68 m_rightBottomBar.MarginRight = SettingsManager.AdaptEdgeToEdgeDisplay ? Window.DisplayCutoutInsets.Z * ScreensManager.FinalUiScale : 0f;
69 }
70
71 public override void Leave() {
73 }
74
75 public override void Update() {
77 if (string.IsNullOrEmpty(m_versionString)
79 m_versionString = $"Version {VersionsManager.Version}{(MarketplaceManager.IsTrialMode ? " (Day One)" : string.Empty)}";
81 }
82 Children.Find("Buy").IsVisible = MarketplaceManager.IsTrialMode;
83 Children.Find<LabelWidget>("Version").Text = $"{m_versionString} - API {ModsManager.APIVersionString}";
84 RectangleWidget rectangleWidget = Children.Find<RectangleWidget>("Logo");
85 float num = 1f + 0.02f * MathF.Sin(1.5f * (float)MathUtils.Remainder(Time.FrameStartTime, 10000.0));
86 rectangleWidget.RenderTransform =
87 Matrix.CreateTranslation((0f - rectangleWidget.ActualSize.X) / 2f, (0f - rectangleWidget.ActualSize.Y) / 2f, 0f)
88 * Matrix.CreateScale(num, num, 1f)
89 * Matrix.CreateTranslation(rectangleWidget.ActualSize.X / 2f, rectangleWidget.ActualSize.Y / 2f, 0f);
90 if (m_languageSwitchButton?.IsClicked ?? false) {
92 }
93 //更新控制
94 if (!APIUpdateManager.IsNeedUpdate.HasValue) {
95 float angle = (float)Time.RealTime * 2; //获取更新时旋转图标
96 float scale = (angle + MathF.PI / 4) / (MathF.PI / 2);
97 scale -= MathF.Round(scale);
98 scale *= MathF.PI / 2;
99 scale = new Vector2(1, MathF.Tan(scale)).Length() / MathF.Sqrt(2);
100 if (m_updateButtonIcon != null) {
101 m_updateButtonIcon.LayoutTransform = Matrix.CreateRotationZ(angle) * Matrix.CreateScale(scale);
102 m_updateButtonIcon.FillColor = Color.White;
103 }
104 }
105 else {
106 if (m_updateButtonIcon != null) {
107 m_updateButtonIcon.LayoutTransform = Matrix.CreateRotationZ(0) * Matrix.CreateScale(1);
108 m_updateButtonIcon.Subtexture = APIUpdateManager.IsNeedUpdate.Value ? m_needToUpdateIcon : m_dontNeedUpdateIcon;
109 m_updateButtonIcon.FillColor = APIUpdateManager.IsNeedUpdate.Value ? Color.Yellow : Color.White;
110 }
111 }
112 if (m_updateCheckButton?.IsClicked ?? false) {
114 //TODO 原版的获取更新逻辑我不知道要咋处理
115 //ScreensManager.SwitchScreen("Releases", "https://gitee.com/api/v5/repos/yhuse/SunnyUI/releases", "SunnyUI", new Test());
116 //uint versionInt = APIUpdateManager.ParseVersionFromString(ModsManager.APIVersionString);
117 //Engine.Log.Information($"The current version is: {ModsManager.APIVersionString}, with uint 0x{versionInt:X8}");
118 //if (!APIUpdateManager.IsNeedUpdate.HasValue) DialogsManager.ShowDialog(this, new MessageDialog(LanguageControl.Get(fName,7), LanguageControl.Get(fName, 6), LanguageControl.Ok, LanguageControl.Get(fName, 8), (button) => {
119 // if(button == MessageDialogButton.Button2)
120 // {
121 // WebBrowserManager.LaunchBrowser(ModsManager.APIReleasesLink_Client);
122 // }
123 //}));
124 //else
125 //{
126 // if(APIUpdateManager.IsNeedUpdate.Value)
127 // DialogsManager.ShowDialog(this,new MessageDialog(LanguageControl.Get(fName,7),string.Format(LanguageControl.Get(fName,4),APIUpdateManager.LatestVersion,APIUpdateManager.CurrentVersion),LanguageControl.Get(fName,5),LanguageControl.Cancel,
128 // (button) => {
129 // if(button == MessageDialogButton.Button1)
130 // {
131 // WebBrowserManager.LaunchBrowser(ModsManager.APIReleasesLink_Client);
132 // }
133 // }));
134 // else DialogsManager.ShowDialog(this,new MessageDialog(LanguageControl.Get(fName,7),LanguageControl.Get(fName,3),LanguageControl.Ok,null,null));
135 //}
136 }
137#if BROWSER
138 if (m_fullscreenButton.IsClicked) {
140 }
141 if (m_dashboardButton.IsClicked) {
142 WebBrowserManager.LaunchBrowser("./dashboard.html");
143 }
144#endif
145 if (Children.Find<ButtonWidget>("Play").IsClicked) {
147 }
148 if (Children.Find<ButtonWidget>("Help").IsClicked) {
150 }
151 if (Children.Find<ButtonWidget>("Content").IsClicked) {
152 ScreensManager.SwitchScreen("Content");
153 }
154 if (Children.Find<ButtonWidget>("Settings").IsClicked) {
155 ScreensManager.SwitchScreen("Settings");
156 }
157 if (Children.Find<ButtonWidget>("Buy").IsClicked) {
159 }
160 if (m_disableSafeModeButton.IsClicked) {
163 null,
164 new MessageDialog(
166 LanguageControl.Get("SettingsCompatibilityScreen", "4"),
168 null,
169 null
170 )
171 );
172 }
173 if (m_showBulletinButton?.IsClicked ?? false) {
174 if (MotdManager.m_bulletin != null
175 && !MotdManager.m_bulletin.Title.Equals("null", StringComparison.CurrentCultureIgnoreCase)) {
177 }
178 else {
180 null,
182 );
183 }
184 }
185 if ((Input.Back || Input.IsKeyDownOnce(Key.Escape)) && !Keyboard.BackButtonQuitsApp) {
188 }
189 else {
190 Window.Close();
191 }
192 }
193 /*if (!string.IsNullOrEmpty(ExternalContentManager.openFilePath)) {
194 ScreensManager.SwitchScreen("ExternalContent");
195 }*/
196 }
197 }
198}
static bool BackButtonQuitsApp
static float Remainder(float x, float y)
static double RealTime
定义 Time.cs:38
static double FrameStartTime
定义 Time.cs:42
static void Close()
static WindowMode WindowMode
static ? bool IsNeedUpdate
API是否需要更新?ture:需要;false:不需要;null:正在获取
readonly WidgetsList Children
static object Get(Type type, string name)
static void ShowDialog(ContainerWidget parentWidget, Dialog dialog)
static void CreateLanguageSelectionDialog(Widget parent)
static string Get(string className, int key)
获取在当前语言类名键对应的字符串
ButtonWidget m_disableSafeModeButton
ButtonWidget m_showBulletinButton
override void Enter(object[] parameters)
StackPanelWidget m_rightBottomBar
StackPanelWidget m_leftBottomBar
RectangleWidget m_updateButtonIcon
ButtonWidget m_languageSwitchButton
static Bulletin m_bulletin
static void ShowBulletin()
static bool CanShowBulletin
static void SwitchScreen(string name, params object[] parameters)
static void LaunchBrowser(string url)
virtual void LoadContents(object eventsTarget, XElement node)
static void HookAction(string HookName, Func< ModLoader, bool > action)
执行Hook
static string APIReleasesLink_API
static Color White
static Matrix CreateTranslation(float x, float y, float z)
static Matrix CreateRotationZ(float radians)
static Matrix CreateScale(float scale)