mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-10-04 03:27:41 -04:00
118 lines
3.6 KiB
C#
118 lines
3.6 KiB
C#
// ClassicalSharp copyright 2014-2016 UnknownShadow200 | Licensed under MIT
|
|
using System;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.Net;
|
|
using ClassicalSharp;
|
|
using Launcher.Gui.Views;
|
|
using Launcher.Web;
|
|
using Launcher.Gui.Widgets;
|
|
|
|
namespace Launcher.Gui.Screens {
|
|
public sealed partial class MainScreen : InputScreen {
|
|
|
|
MainView view;
|
|
public MainScreen( LauncherWindow game ) : base( game ) {
|
|
enterIndex = 2;
|
|
view = new MainView( game );
|
|
widgets = view.widgets;
|
|
LoadResumeInfo();
|
|
}
|
|
|
|
public override void Init() {
|
|
base.Init();
|
|
view.Init();
|
|
SetupWidgetHandlers();
|
|
Resize();
|
|
|
|
using( drawer ) {
|
|
drawer.SetBitmap( game.Framebuffer );
|
|
LoadSavedInfo();
|
|
}
|
|
}
|
|
|
|
public override void Resize() {
|
|
view.DrawAll();
|
|
game.Dirty = true;
|
|
}
|
|
|
|
bool updateDone;
|
|
void SuccessfulUpdateCheck( UpdateCheckTask task ) {
|
|
string latestVer = game.checkTask.LatestStable.Version.Substring( 1 );
|
|
int spaceIndex = Program.AppName.LastIndexOf( ' ' );
|
|
string currentVer = Program.AppName.Substring( spaceIndex + 1 );
|
|
bool update = new Version( latestVer ) > new Version( currentVer );
|
|
|
|
view.updateText = update ? "&aNew release" : "&eUp to date";
|
|
game.RedrawBackground();
|
|
Resize();
|
|
SelectWidget( selectedWidget );
|
|
}
|
|
|
|
void FailedUpdateCheck( UpdateCheckTask task ) {
|
|
view.updateText = "&cCheck failed";
|
|
game.RedrawBackground();
|
|
Resize();
|
|
SelectWidget( selectedWidget );
|
|
}
|
|
|
|
void SetupWidgetHandlers() {
|
|
widgets[view.loginIndex].OnClick = LoginAsync;
|
|
widgets[view.resIndex].OnClick = ResumeClick;
|
|
widgets[view.dcIndex].OnClick =
|
|
(x, y) => game.SetScreen( new DirectConnectScreen( game ) );
|
|
widgets[view.spIndex].OnClick =
|
|
(x, y) => Client.Start( widgets[0].Text, ref game.ShouldExit );
|
|
|
|
widgets[view.settingsIndex].OnClick =
|
|
(x, y) => game.SetScreen( new SettingsScreen( game ) );
|
|
SetupInputHandlers();
|
|
}
|
|
|
|
const int buttonWidth = 220, buttonHeight = 35, sideButtonWidth = 150;
|
|
string resumeUser, resumeIp, resumePort, resumeMppass;
|
|
bool resumeCCSkins, resumeValid;
|
|
|
|
void LoadResumeInfo() {
|
|
resumeUser = Options.Get( "launcher-username" );
|
|
resumeIp = Options.Get( "launcher-ip" ) ?? "";
|
|
resumePort = Options.Get( "launcher-port" ) ?? "";
|
|
resumeCCSkins = Options.GetBool( "launcher-ccskins", true );
|
|
|
|
IPAddress address;
|
|
if( !IPAddress.TryParse( resumeIp, out address ) ) resumeIp = "";
|
|
ushort portNum;
|
|
if( !UInt16.TryParse( resumePort, out portNum ) ) resumePort = "";
|
|
|
|
string mppass = Options.Get( "launcher-mppass" ) ?? null;
|
|
resumeMppass = Secure.Decode( mppass, resumeUser );
|
|
resumeValid = !String.IsNullOrEmpty( resumeUser ) && !String.IsNullOrEmpty( resumeIp )
|
|
&& !String.IsNullOrEmpty( resumePort ) && !String.IsNullOrEmpty( resumeMppass );
|
|
}
|
|
|
|
void ResumeClick( int mouseX, int mouseY ) {
|
|
if( !resumeValid ) return;
|
|
ClientStartData data = new ClientStartData( resumeUser, resumeMppass, resumeIp, resumePort );
|
|
Client.Start( data, resumeCCSkins, ref game.ShouldExit );
|
|
}
|
|
|
|
protected override void SelectWidget( Widget widget ) {
|
|
base.SelectWidget( widget );
|
|
if( signingIn || !resumeValid || widget != widgets[view.resIndex] ) return;
|
|
const string format = "&eResume to {0}:{1}, as {2}";
|
|
SetStatus( String.Format( format, resumeIp, resumePort, resumeUser ) );
|
|
}
|
|
|
|
protected override void UnselectWidget( Widget widget ) {
|
|
base.UnselectWidget( widget );
|
|
if( signingIn || !resumeValid || widget != widgets[view.resIndex] ) return;
|
|
SetStatus( "" );
|
|
}
|
|
|
|
public override void Dispose() {
|
|
StoreFields();
|
|
base.Dispose();
|
|
}
|
|
}
|
|
}
|