mirror of
https://github.com/Jusctsch5/ironsphererpg.git
synced 2026-01-19 19:44:45 +00:00
265 lines
7.4 KiB
C#
265 lines
7.4 KiB
C#
|
|
//------------------------------------------------------------------------------
|
||
|
|
//
|
||
|
|
// TrainingGui.cs
|
||
|
|
//
|
||
|
|
//------------------------------------------------------------------------------
|
||
|
|
|
||
|
|
//------------------------------------------------------------------------------
|
||
|
|
function LaunchTraining()
|
||
|
|
{
|
||
|
|
LaunchTabView.viewTab( "TRAINING", TrainingGui, 0 );
|
||
|
|
}
|
||
|
|
|
||
|
|
//------------------------------------------------------------------------------
|
||
|
|
function TrainingGui::onWake( %this )
|
||
|
|
{
|
||
|
|
Canvas.pushDialog( LaunchToolbarDlg );
|
||
|
|
|
||
|
|
%this.soundHandle = 0;
|
||
|
|
%this.briefEventCount = 0;
|
||
|
|
%this.briefWAV = "";
|
||
|
|
%ct = 1;
|
||
|
|
%fobject = new FileObject();
|
||
|
|
%search = "missions/*.mis";
|
||
|
|
TrainingMissionList.clear();
|
||
|
|
for ( %file = findFirstFile( %search ); %file !$= ""; %file = findNextFile( %search ) )
|
||
|
|
{
|
||
|
|
%name = fileBase(%file); // get the mission name
|
||
|
|
|
||
|
|
if ( !%fobject.openForRead( %file ) )
|
||
|
|
continue;
|
||
|
|
|
||
|
|
%typeList = "None";
|
||
|
|
|
||
|
|
while( !%fobject.isEOF() )
|
||
|
|
{
|
||
|
|
%line = %fobject.readLine();
|
||
|
|
if ( getSubStr( %line, 0, 18 ) $= "// MissionTypes = " )
|
||
|
|
{
|
||
|
|
%typeList = getSubStr( %line, 18, 1000 );
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if ( strstr( %typeList, "SinglePlayer" ) != -1 )
|
||
|
|
{
|
||
|
|
// Get the mission display name:
|
||
|
|
%displayName = %name;
|
||
|
|
while ( !%fobject.isEOF() )
|
||
|
|
{
|
||
|
|
%line = %fobject.readLine();
|
||
|
|
if ( getSubStr( %line, 0, 16 ) $= "// PlanetName = " )
|
||
|
|
{
|
||
|
|
%displayName = getSubStr( %line, 16, 1000 );
|
||
|
|
// Strip the date:
|
||
|
|
%pos = strpos( %displayName, "," );
|
||
|
|
if ( %pos != -1 )
|
||
|
|
%displayName = getSubStr( %displayName, 0, %pos );
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
TrainingMissionList.addRow( %ct++, %displayName TAB %name );
|
||
|
|
}
|
||
|
|
|
||
|
|
%fobject.close();
|
||
|
|
}
|
||
|
|
|
||
|
|
TrainingMissionList.sort( 1 );
|
||
|
|
TrainingMissionList.setSelectedRow( 0 );
|
||
|
|
if ( $pref::TrainingDifficulty > 0 && $pref::TrainingDifficulty < 4 )
|
||
|
|
TrainingDifficultyMenu.setSelected( $pref::TrainingDifficulty );
|
||
|
|
else
|
||
|
|
TrainingDifficultyMenu.setSelected( 1 );
|
||
|
|
}
|
||
|
|
|
||
|
|
//------------------------------------------------------------------------------
|
||
|
|
function TrainingGui::onSleep( %this )
|
||
|
|
{
|
||
|
|
%this.stopBriefing();
|
||
|
|
|
||
|
|
Canvas.popDialog(LaunchToolbarDlg);
|
||
|
|
}
|
||
|
|
|
||
|
|
//------------------------------------------------------------------------------
|
||
|
|
function TrainingGui::setKey( %this )
|
||
|
|
{
|
||
|
|
}
|
||
|
|
|
||
|
|
//------------------------------------------------------------------------------
|
||
|
|
function TrainingGui::onClose( %this )
|
||
|
|
{
|
||
|
|
}
|
||
|
|
|
||
|
|
//------------------------------------------------------------------------------
|
||
|
|
function TrainingDifficultyMenu::onAdd( %this )
|
||
|
|
{
|
||
|
|
%this.add( "Easy", 1 );
|
||
|
|
%this.add( "Medium", 2 );
|
||
|
|
%this.add( "Hard", 3 );
|
||
|
|
}
|
||
|
|
|
||
|
|
//------------------------------------------------------------------------------
|
||
|
|
function TrainingDifficultyMenu::onSelect( %this, %id, %text )
|
||
|
|
{
|
||
|
|
$pref::TrainingDifficulty = %id;
|
||
|
|
}
|
||
|
|
|
||
|
|
//------------------------------------------------------------------------------
|
||
|
|
function TrainingMissionList::onSelect( %this, %id, %text )
|
||
|
|
{
|
||
|
|
TrainingGui.stopBriefing();
|
||
|
|
%fileName = "missions/" @ getField( %text, 1 ) @ ".mis";
|
||
|
|
%file = new FileObject();
|
||
|
|
%state = 0;
|
||
|
|
if ( %file.openForRead( %fileName ) )
|
||
|
|
{
|
||
|
|
// Get the mission briefing text:
|
||
|
|
while ( !%file.isEOF() )
|
||
|
|
{
|
||
|
|
%line = %file.readLine();
|
||
|
|
if ( %state == 0 && %line $= "//--- MISSION BRIEFING BEGIN ---" )
|
||
|
|
%state = 1;
|
||
|
|
else if ( %state > 0 && %line $= "//--- MISSION BRIEFING END ---" )
|
||
|
|
break;
|
||
|
|
else if ( %state == 1 )
|
||
|
|
{
|
||
|
|
%briefText = %briefText @ getSubStr( %line, 2, 1000 );
|
||
|
|
%state = 2;
|
||
|
|
}
|
||
|
|
else if ( %state == 2 )
|
||
|
|
%briefText = %briefText NL getSubStr( %line, 2, 1000 );
|
||
|
|
}
|
||
|
|
|
||
|
|
// Get the mission briefing WAV file:
|
||
|
|
while ( !%file.isEOF() )
|
||
|
|
{
|
||
|
|
%line = %file.readLine();
|
||
|
|
if ( getSubStr( %line, 0, 17 ) $= "// BriefingWAV = " )
|
||
|
|
{
|
||
|
|
%briefWAV = getSubStr( %line, 17, 1000 );
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Get the bitmap name:
|
||
|
|
while ( !%file.isEOF() )
|
||
|
|
{
|
||
|
|
%line = %file.readLine();
|
||
|
|
if ( getSubStr( %line, 0, 12 ) $= "// Bitmap = " )
|
||
|
|
{
|
||
|
|
%briefPic = getSubStr( %line, 12, 1000 );
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
%file.close();
|
||
|
|
}
|
||
|
|
else
|
||
|
|
error( "Failed to open Single Player mission file " @ %fileName @ "!" );
|
||
|
|
|
||
|
|
if (!isDemo())
|
||
|
|
%bmp = "gui/" @ %briefPic @ ".png";
|
||
|
|
else
|
||
|
|
%bmp = "gui/" @ %briefPic @ ".bm8";
|
||
|
|
if ( isFile( "textures/" @ %bmp ) )
|
||
|
|
{
|
||
|
|
TrainingPic.setBitmap( %bmp );
|
||
|
|
TrainingPicFrame.setVisible( true );
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
TrainingPic.setBitmap( "" );
|
||
|
|
TrainingPicFrame.setVisible( false );
|
||
|
|
}
|
||
|
|
|
||
|
|
TrainingPlayBtn.setActive( %briefWAV !$= "" );
|
||
|
|
TrainingBriefingText.setValue( %briefText );
|
||
|
|
TrainingBriefingScroll.scrollToTop();
|
||
|
|
TrainingGui.WAVBase = firstWord( %briefWAV );
|
||
|
|
TrainingGui.WAVCount = restWords( %briefWAV );
|
||
|
|
%file.delete();
|
||
|
|
|
||
|
|
//if ( TrainingPlayTgl.getValue() )
|
||
|
|
// TrainingGui.startBriefing();
|
||
|
|
}
|
||
|
|
|
||
|
|
//------------------------------------------------------------------------------
|
||
|
|
function TrainingPlayTgl::onAction( %this )
|
||
|
|
{
|
||
|
|
if ( %this.getValue() )
|
||
|
|
{
|
||
|
|
if ( TrainingMissionList.getSelectedId() != -1 )
|
||
|
|
TrainingGui.startBriefing();
|
||
|
|
}
|
||
|
|
else
|
||
|
|
TrainingGui.stopBriefing();
|
||
|
|
}
|
||
|
|
|
||
|
|
//--------------------------------------------------------
|
||
|
|
function TrainingGui::toggleBriefing( %this )
|
||
|
|
{
|
||
|
|
if ( %this.soundHandle $= "" )
|
||
|
|
%this.startBriefing();
|
||
|
|
else
|
||
|
|
%this.stopBriefing();
|
||
|
|
}
|
||
|
|
|
||
|
|
//--------------------------------------------------------
|
||
|
|
function TrainingGui::startBriefing( %this )
|
||
|
|
{
|
||
|
|
%this.stopBriefing();
|
||
|
|
if ( %this.WAVBase !$= "" )
|
||
|
|
{
|
||
|
|
%this.instance = %this.instance $= "" ? 0 : %this.instance;
|
||
|
|
%this.playNextBriefWAV( %this.WAVBase, 0, %this.WAVCount, %this.instance );
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
//--------------------------------------------------------
|
||
|
|
function TrainingGui::playNextBriefWAV( %this, %wavBase, %id, %count, %instance )
|
||
|
|
{
|
||
|
|
if ( %instance == %this.instance )
|
||
|
|
{
|
||
|
|
if ( %id < %count )
|
||
|
|
{
|
||
|
|
%wav = "voice/Training/Briefings/" @ %wavBase @ ".brief0" @ ( %id + 1 ) @ ".wav";
|
||
|
|
%this.soundHandle = alxCreateSource( AudioGui, %wav );
|
||
|
|
alxPlay( %this.soundHandle );
|
||
|
|
|
||
|
|
// Schedule the next WAV:
|
||
|
|
%delay = alxGetWaveLen( %wav ) + 500;
|
||
|
|
%this.schedule( %delay, playNextBriefWAV, %wavBase, %id + 1, %count, %instance );
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
// We're all done!
|
||
|
|
%this.soundHandle = "";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
//--------------------------------------------------------
|
||
|
|
function TrainingGui::stopBriefing( %this )
|
||
|
|
{
|
||
|
|
if ( %this.soundHandle !$= "" )
|
||
|
|
{
|
||
|
|
alxStop( %this.soundHandle );
|
||
|
|
%this.soundHandle = "";
|
||
|
|
%this.instance++;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
//--------------------------------------------------------
|
||
|
|
function TrainingGui::startTraining( %this )
|
||
|
|
{
|
||
|
|
MessagePopup( "STARTING MISSION", "Initializing, please wait..." );
|
||
|
|
Canvas.repaint();
|
||
|
|
cancelServerQuery();
|
||
|
|
%file = getField( TrainingMissionList.getValue(), 1 );
|
||
|
|
$ServerName = "Single Player Training";
|
||
|
|
$HostGameType = "SinglePlayer";
|
||
|
|
CreateServer( %file, "SinglePlayer" );
|
||
|
|
localConnect( "Lone Wolf", "Human Male", "swolf", "Male1" );
|
||
|
|
}
|