2014-06-04 19:18:14 +00:00
using System ;
using System.Collections.Generic ;
using System.ComponentModel ;
using System.Data ;
using System.Drawing ;
using System.Linq ;
using System.Text ;
using System.Windows.Forms ;
2014-06-04 22:14:58 +00:00
using BizHawk.Client.Common ;
2014-06-04 19:18:14 +00:00
2014-07-02 14:27:12 +00:00
using BizHawk.Emulation.Cores.Nintendo.N64 ;
2014-06-04 19:18:14 +00:00
namespace BizHawk.Client.EmuHawk
{
public partial class ProfileConfig : Form
{
2014-07-02 21:20:45 +00:00
// TODO:
// Save the profile selected to Global.Config (Casual is the default)
// Default the dropdown to the current profile selected instead of empty
// Put save logic in the Ok button click, not the profile selected change event!
2014-06-04 19:18:14 +00:00
public ProfileConfig ( )
{
InitializeComponent ( ) ;
}
private void ProfileConfig_Load ( object sender , EventArgs e )
{
}
private void OkBtn_Click ( object sender , EventArgs e )
{
/* Saving logic goes here */
2014-06-04 22:14:58 +00:00
if ( ProfileSelectComboBox . SelectedIndex = = 3 )
{
//If custom profile, check all the checkboxes
2014-07-02 21:20:45 +00:00
//Save to config.ini
2014-06-04 22:14:58 +00:00
}
2014-07-02 21:20:45 +00:00
2014-06-04 19:18:14 +00:00
DialogResult = DialogResult . OK ;
Close ( ) ;
}
private void CancelBtn_Click ( object sender , EventArgs e )
{
DialogResult = DialogResult . Cancel ;
Close ( ) ;
}
2014-06-04 20:15:33 +00:00
2014-06-04 22:14:58 +00:00
private void ProfileSelectComboBox_SelectedIndexChanged ( object sender , EventArgs e )
2014-06-04 20:15:33 +00:00
{
2014-06-04 22:14:58 +00:00
if ( ProfileSelectComboBox . SelectedIndex = = 0 ) //Casual Gaming
{
DisplayProfileSettingBoxes ( false ) ;
Global . Config . SaveLargeScreenshotWithStates = false ;
Global . Config . SaveScreenshotWithStates = false ;
Global . Config . AllowUD_LR = false ;
2014-07-02 21:20:45 +00:00
Global . Config . BackupSavestates = false ;
Global . Config . RewindEnabledLarge = false ;
Global . Config . RewindEnabledMedium = false ;
Global . Config . RewindEnabledSmall = true ;
// N64
var n64Settings = GetN64SyncSettings ( ) ;
n64Settings . RspType = N64SyncSettings . RSPTYPE . Rsp_Hle ;
n64Settings . CoreType = N64SyncSettings . CORETYPE . Dynarec ;
Global . Config . N64UseCircularAnalogConstraint = true ;
PutN64SyncSettings ( n64Settings ) ;
2014-06-04 22:14:58 +00:00
}
else if ( ProfileSelectComboBox . SelectedIndex = = 2 ) //Long Plays
{
DisplayProfileSettingBoxes ( false ) ;
Global . Config . SaveLargeScreenshotWithStates = false ;
Global . Config . SaveScreenshotWithStates = false ;
Global . Config . AllowUD_LR = false ;
2014-07-02 21:20:45 +00:00
Global . Config . BackupSavestates = true ;
Global . Config . RewindEnabledLarge = false ;
Global . Config . RewindEnabledMedium = false ;
Global . Config . RewindEnabledSmall = true ;
// N64
var n64Settings = GetN64SyncSettings ( ) ;
n64Settings . RspType = N64SyncSettings . RSPTYPE . Rsp_Z64_hlevideo ;
n64Settings . CoreType = N64SyncSettings . CORETYPE . Pure_Interpret ;
Global . Config . N64UseCircularAnalogConstraint = true ;
PutN64SyncSettings ( n64Settings ) ;
}
else if ( ProfileSelectComboBox . SelectedIndex = = 1 ) //TAS
{
DisplayProfileSettingBoxes ( false ) ;
// General
Global . Config . SaveLargeScreenshotWithStates = true ;
Global . Config . SaveScreenshotWithStates = true ;
Global . Config . AllowUD_LR = true ;
Global . Config . BackupSavestates = true ;
// Rewind
Global . Config . RewindEnabledLarge = false ;
Global . Config . RewindEnabledMedium = false ;
Global . Config . RewindEnabledSmall = false ;
// N64
var n64Settings = GetN64SyncSettings ( ) ;
n64Settings . RspType = N64SyncSettings . RSPTYPE . Rsp_Z64_hlevideo ;
n64Settings . CoreType = N64SyncSettings . CORETYPE . Pure_Interpret ;
Global . Config . N64UseCircularAnalogConstraint = false ;
PutN64SyncSettings ( n64Settings ) ;
2014-06-04 22:14:58 +00:00
}
else if ( ProfileSelectComboBox . SelectedIndex = = 3 ) //custom
{
DisplayProfileSettingBoxes ( true ) ;
}
2014-06-04 20:15:33 +00:00
}
2014-06-04 22:14:58 +00:00
private void DisplayProfileSettingBoxes ( bool cProfile )
2014-06-04 20:15:33 +00:00
{
2014-06-04 22:14:58 +00:00
if ( cProfile = = true )
2014-06-04 20:15:33 +00:00
{
2014-06-29 02:28:48 +00:00
ProfileDialogHelpTexBox . Location = new Point ( 217 , 12 ) ;
ProfileDialogHelpTexBox . Size = new Size ( 165 , 126 ) ;
2014-06-04 22:14:58 +00:00
SaveScreenshotStatesCheckBox . Visible = true ;
SaveLargeScreenshotStatesCheckBox . Visible = true ;
AllowUDLRCheckBox . Visible = true ;
GeneralOptionsLabel . Visible = true ;
2014-06-04 20:15:33 +00:00
}
2014-06-04 22:14:58 +00:00
else if ( cProfile = = false )
2014-06-04 20:15:33 +00:00
{
2014-06-29 02:28:48 +00:00
ProfileDialogHelpTexBox . Location = new Point ( 184 , 12 ) ;
ProfileDialogHelpTexBox . Size = new Size ( 198 , 126 ) ;
2014-06-04 22:14:58 +00:00
ProfileDialogHelpTexBox . Text = "Options: \r\nCasual Gaming - All about performance! \r\n\nTool-Assisted Speedruns - Maximum Accuracy! \r\n\nLongplays - Stability is the key!" ;
SaveScreenshotStatesCheckBox . Visible = false ;
SaveLargeScreenshotStatesCheckBox . Visible = false ;
AllowUDLRCheckBox . Visible = false ;
GeneralOptionsLabel . Visible = false ;
2014-06-04 20:15:33 +00:00
}
}
2014-06-04 22:14:58 +00:00
private void SaveScreenshotStatesCheckBox_MouseHover ( object sender , EventArgs e )
{
ProfileDialogHelpTexBox . Text = "Save Screenshot with Savestates: \r\n * Required for TASing \r\n * Not Recommended for \r\n Longplays or Casual Gaming" ;
}
private void SaveLargeScreenshotStatesCheckBox_MouseHover ( object sender , EventArgs e )
{
ProfileDialogHelpTexBox . Text = "Save Large Screenshot With States: \r\n * Required for TASing \r\n * Not Recommended for \r\n Longplays or Casual Gaming" ;
}
private void AllowUDLRCheckBox_MouseHover ( object sender , EventArgs e )
{
ProfileDialogHelpTexBox . Text = "All Up+Down or Left+Right: \r\n * Useful for TASing \r\n * Unchecked for Casual Gaming \r\n * Unknown for longplays" ;
}
2014-07-02 14:27:12 +00:00
#region Core specific Config setting helpers
// Unfortunatley there is not yet a generic way to match a sync setting object with its core implementation, so we need a bunch of these
2014-07-02 21:20:45 +00:00
private static N64SyncSettings GetN64SyncSettings ( )
{
if ( Global . Emulator is N64 )
{
return ( N64SyncSettings ) Global . Emulator . GetSyncSettings ( ) ;
}
else
{
return ( N64SyncSettings ) Global . Config . GetCoreSyncSettings < N64 > ( ) ;
}
}
private static void PutN64SyncSettings ( N64SyncSettings s )
2014-07-02 14:27:12 +00:00
{
if ( Global . Emulator is N64 )
{
GlobalWin . MainForm . PutCoreSyncSettings ( s ) ;
}
else
{
Global . Config . PutCoreSyncSettings < N64 > ( s ) ;
}
}
#endregion
2014-06-04 19:18:14 +00:00
}
}