mirror of
https://github.com/exogen/t2-mapper.git
synced 2026-07-11 14:34:51 +00:00
Initial commit
This commit is contained in:
parent
2211ed7650
commit
ebb3dc9cdd
10121 changed files with 801 additions and 4 deletions
752
docs/base/@vl2/scripts.vl2/scripts/recordings.cs
Normal file
752
docs/base/@vl2/scripts.vl2/scripts/recordings.cs
Normal file
|
|
@ -0,0 +1,752 @@
|
|||
function RecordingsDlg::onWake(%gui)
|
||||
{
|
||||
%gui.fillRecordingsList();
|
||||
updateRecordingButtons();
|
||||
}
|
||||
|
||||
function msToMinSec(%time)
|
||||
{
|
||||
%sec = mFloor(%time / 1000);
|
||||
%min = mFloor(%sec / 60);
|
||||
%sec -= %min * 60;
|
||||
|
||||
// pad it
|
||||
if(%min < 10)
|
||||
%min = "0" @ %min;
|
||||
if(%sec < 10)
|
||||
%sec = "0" @ %sec;
|
||||
|
||||
return(%min @ ":" @ %sec);
|
||||
}
|
||||
|
||||
function RecordingsDlg::fillRecordingsList(%gui)
|
||||
{
|
||||
// setup the ctrl
|
||||
if(!%gui.initialized)
|
||||
{
|
||||
RecordingsDlgList.setSortColumn(0);
|
||||
RecordingsDlgList.setSortIncreasing(true);
|
||||
|
||||
RecordingsDlgList.addStyle(1, $ShellFont, $ShellFontSize, "80 220 200", "30 255 225", "10 60 40" );
|
||||
RecordingsDlgList.addStyle(2, $ShellFont, $ShellFontSize, "120 120 120", "120 120 120", "120 120 120" );
|
||||
|
||||
// add the columns
|
||||
RecordingsDlgList.addColumn(0, "Recording", 200, 100, 300);
|
||||
RecordingsDlgList.addColumn(1, "Time", 140, 60, 180, "filetime center");
|
||||
RecordingsDlgList.addColumn(2, "Length (min:sec)", 40, 40, 80, "center");
|
||||
|
||||
%gui.initialized = true;
|
||||
}
|
||||
|
||||
RecordingsDlgList.clear();
|
||||
RecordingsDlgList.clearList();
|
||||
|
||||
// process all the recordings
|
||||
%search = "recordings/*.rec";
|
||||
%ct = 0;
|
||||
%demoVersion = getDemoVersion();
|
||||
|
||||
for(%file = findFirstFile(%search); %file !$= ""; %file = findNextFile(%search))
|
||||
{
|
||||
%fileName = fileBase(%file);
|
||||
|
||||
// query the version/length of the recording
|
||||
%val = getDemoVersionLength(%file);
|
||||
%version = getField(%val, 0);
|
||||
|
||||
// unknown version
|
||||
if(%version == -1)
|
||||
{
|
||||
%version = "???";
|
||||
%length = "???";
|
||||
}
|
||||
else
|
||||
%length = msToMinSec(getField(%val, 1));
|
||||
|
||||
%fileTime = getFileModifyTime(%file);
|
||||
RecordingsDlgList.addRow(%ct, %fileName TAB %fileTime TAB %length);
|
||||
RecordingsDlgList.setRowStyle(%ct, (%version == %demoVersion) ? 1 : 2);
|
||||
|
||||
%ct++;
|
||||
}
|
||||
|
||||
RecordingsDlgList.sort(0, true);
|
||||
RecordingsDlgList.setSelectedRow(0);
|
||||
}
|
||||
|
||||
function updateRecordingButtons()
|
||||
{
|
||||
%active = RecordingsDlgList.rowCount() != 0;
|
||||
PR_StartDemoBtn.setActive(%active);
|
||||
PR_DeleteDemoBtn.setActive(%active);
|
||||
PR_RenameDemoBtn.setActive(%active);
|
||||
|
||||
if(%active)
|
||||
PR_StartDemoBtn.makeFirstResponder(1);
|
||||
else
|
||||
PR_CancelBtn.makeFirstResponder(1);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// functions to handle the progress bar for loading demo
|
||||
function DemoLoadProgressDlg::onWake(%this)
|
||||
{
|
||||
DemoLoadProgressCtrl.setValue(0.0);
|
||||
}
|
||||
|
||||
function demoUpdateDatablockProgress(%count, %total)
|
||||
{
|
||||
DemoLoadProgressCtrl.setValue(%count / %total);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// sequential variables named $DemoValue[?] will be stored in the demo stream
|
||||
// and accessable right after the demo has been loaded
|
||||
function saveDemoSettings()
|
||||
{
|
||||
$DemoValueIdx = 0;
|
||||
|
||||
getState(MISC);
|
||||
|
||||
// store the playergroup
|
||||
getState(PLAYERLIST);
|
||||
|
||||
// get the states for all the gui's of interest
|
||||
getState(RETICLE);
|
||||
getState(BACKPACK);
|
||||
getState(WEAPON);
|
||||
getState(INVENTORY);
|
||||
getState(SCORE);
|
||||
getState(CLOCK);
|
||||
getState(CHAT);
|
||||
|
||||
// KP: save gravity
|
||||
getState(GRAVITY);
|
||||
}
|
||||
|
||||
function resetGameState()
|
||||
{
|
||||
$timeScale = 1;
|
||||
|
||||
// reset some state
|
||||
HudMessageVector.clear();
|
||||
if(isObject(PlayerListGroup))
|
||||
PlayerListGroup.delete();
|
||||
|
||||
// stop all sound
|
||||
alxStopAll();
|
||||
|
||||
// clean up voting
|
||||
voteHud.voting = false;
|
||||
mainVoteHud.setvisible(0);
|
||||
|
||||
// clear all print messages
|
||||
clientCmdclearBottomPrint();
|
||||
clientCmdClearCenterPrint();
|
||||
|
||||
clientCmdResetCommandMap();
|
||||
|
||||
// clear the inventory and weapons hud
|
||||
weaponsHud.reset();
|
||||
inventoryHud.reset();
|
||||
|
||||
// reset the objective hud
|
||||
objectiveHud.setSeparators("");
|
||||
objectiveHud.disableHorzSeparator();
|
||||
while(objectiveHud.getCount() > 0)
|
||||
objectiveHud.getObject(0).delete();
|
||||
}
|
||||
|
||||
function loadDemoSettings()
|
||||
{
|
||||
$DemoValueIdx = 0;
|
||||
|
||||
setState(MISC);
|
||||
|
||||
// restore the playergroup
|
||||
setState(PLAYERLIST);
|
||||
|
||||
// set the states for all the gui's of interest
|
||||
setState(RETICLE);
|
||||
setState(BACKPACK);
|
||||
setState(WEAPON);
|
||||
setState(INVENTORY);
|
||||
setState(SCORE);
|
||||
setState(CLOCK);
|
||||
setState(CHAT);
|
||||
|
||||
// KP: load gravity
|
||||
setState(GRAVITY);
|
||||
}
|
||||
|
||||
function addDemoValue(%val)
|
||||
{
|
||||
// make sure variables get saved
|
||||
if(%val $= "")
|
||||
%val = "<BLANK>";
|
||||
|
||||
$DemoValue[$DemoValueIdx] = %val;
|
||||
$DemoValueIdx++;
|
||||
}
|
||||
|
||||
function getDemoValue()
|
||||
{
|
||||
%val = $DemoValue[$DemoValueIdx];
|
||||
$DemoValueIdx++;
|
||||
|
||||
if(%val $= "<BLANK>")
|
||||
%val = "";
|
||||
|
||||
return(%val);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// get/setState
|
||||
// - strings max of 255 chars
|
||||
function getState(%type)
|
||||
{
|
||||
switch$(%type)
|
||||
{
|
||||
case MISC:
|
||||
addDemoValue( $HudMode TAB $HudModeType TAB $HudModeNode TAB voteHud.voting TAB isObject(passengerKeys) TAB musicPlayer.currentTrack );
|
||||
|
||||
case PLAYERLIST:
|
||||
|
||||
%count = PlayerListGroup.getCount();
|
||||
addDemoValue(%count);
|
||||
for(%i = 0; %i < %count; %i++)
|
||||
{
|
||||
%obj = PlayerListGroup.getObject(%i);
|
||||
addDemoValue( %obj.name TAB
|
||||
%obj.guid TAB
|
||||
%obj.clientId TAB
|
||||
%obj.targetId TAB
|
||||
%obj.teamId TAB
|
||||
%obj.score TAB
|
||||
%obj.ping TAB
|
||||
%obj.packetLoss TAB
|
||||
%obj.chatMuted TAB
|
||||
%obj.canListen TAB
|
||||
%obj.voiceEnabled TAB
|
||||
%obj.isListening TAB
|
||||
%obj.isBot TAB
|
||||
%obj.isAdmin TAB
|
||||
%obj.isSuperAdmin TAB
|
||||
%obj.isSmurf );
|
||||
}
|
||||
|
||||
case RETICLE:
|
||||
addDemoValue( reticleHud.bitmap TAB
|
||||
reticleHud.isVisible() TAB
|
||||
retCenterHud.isVisible() TAB
|
||||
ammoHud.isVisible() TAB
|
||||
ammoHud.getValue() TAB
|
||||
deploySensor.isVisible() TAB
|
||||
reticleFrameHud.isVisible() );
|
||||
|
||||
case BACKPACK:
|
||||
addDemoValue( backpackIcon.bitmap TAB backpackFrame.isVisible() TAB backpackText.getValue() TAB backpackText.isVisible TAB backpackFrame.pack );
|
||||
|
||||
case WEAPON:
|
||||
%count = weaponsHud.getNumItems();
|
||||
%slotCount = weaponsHud.getNumSlots();
|
||||
%active = weaponsHud.getActiveItem();
|
||||
|
||||
// visible/bitmaps(3)/count/slotcount/active
|
||||
addDemoValue( weaponsHud.isVisible() TAB weaponsHud.getBackgroundBitmap() TAB weaponsHud.getHighLightBitmap() TAB weaponsHud.getInfiniteBitmap() TAB %count TAB %slotCount TAB %active );
|
||||
|
||||
// images
|
||||
for(%i = 0; %i < %count; %i++)
|
||||
addDemoValue( $WeaponNames[%i] TAB weaponsHud.getItemBitmap(%i) );
|
||||
|
||||
// items
|
||||
for(%i = 0; %i < %slotCount; %i++)
|
||||
addDemoValue( weaponsHud.getSlotId(%i) TAB weaponsHud.getSlotCount(%i) );
|
||||
|
||||
case INVENTORY:
|
||||
// count/active
|
||||
%count = inventoryHud.getNumItems();
|
||||
%slotCount = inventoryHud.getNumSlots();
|
||||
%active = inventoryHud.getActiveItem();
|
||||
|
||||
// visible/bitmaps(3)/count/slotCount/active
|
||||
addDemoValue( inventoryHud.isVisible() TAB inventoryHud.getBackgroundBitmap() TAB inventoryHud.getHighLightBitmap() TAB inventoryHud.getInfiniteBitmap() TAB %count TAB %slotCount TAB %active );
|
||||
|
||||
// images
|
||||
for(%i = 0; %i < %count; %i++)
|
||||
addDemoValue( inventoryHud.getItemBitmap(%i) );
|
||||
|
||||
// items
|
||||
for(%i = 0; %i < %slotCount; %i++)
|
||||
addDemoValue( inventoryHud.getSlotId(%i) TAB inventoryHud.getSlotCount(%i) );
|
||||
|
||||
case SCORE:
|
||||
%objCount = objectiveHud.getCount();
|
||||
|
||||
// visible/gametype/numobjects
|
||||
addDemoValue( objectiveHud.isVisible() TAB objectiveHud.gameType TAB %objCount );
|
||||
|
||||
// only text ctrls exist in this thing.. so just dump the strings
|
||||
for(%i = 0; %i < %objCount; %i++)
|
||||
addDemoValue(objectiveHud.getObject(%i).getValue());
|
||||
|
||||
case CLOCK:
|
||||
addDemoValue( clockHud.isVisible() TAB clockHud.getTime() );
|
||||
|
||||
case CHAT:
|
||||
|
||||
// store last 10 messages
|
||||
%numLines = HudMessageVector.getNumLines();
|
||||
for(%i = (%numLines - 10); %i < %numLines; %i++)
|
||||
{
|
||||
if(%i < 0)
|
||||
addDemoValue("");
|
||||
else
|
||||
addDemoValue(HudMessageVector.getLineText(%i));
|
||||
}
|
||||
|
||||
case GRAVITY:
|
||||
// KP + PanamaJack
|
||||
// Store the gravity setting regardless of what it is
|
||||
addDemoValue(getGravity());
|
||||
}
|
||||
}
|
||||
|
||||
function setState(%type)
|
||||
{
|
||||
switch$(%type)
|
||||
{
|
||||
case MISC:
|
||||
%val = getDemoValue();
|
||||
$HudMode = getField(%val, 0);
|
||||
$HudModeType = getField(%val, 1);
|
||||
$HudModeNode = getField(%val, 2);
|
||||
voteHud.voting = getField(%val, 3);
|
||||
|
||||
clientCmdSetDefaultVehicleKeys(getField(%val, 4));
|
||||
clientCmdPlayMusic(getField(%val, 5));
|
||||
|
||||
ClientCmdDisplayHuds();
|
||||
|
||||
case PLAYERLIST:
|
||||
new SimGroup("PlayerListGroup");
|
||||
%count = getDemoValue();
|
||||
for(%i = 0; %i < %count; %i++)
|
||||
{
|
||||
%val = getDemoValue();
|
||||
|
||||
%player = new ScriptObject()
|
||||
{
|
||||
className = "PlayerRep";
|
||||
name = getField(%val, 0);
|
||||
guid = getField(%val, 1);
|
||||
clientId = getField(%val, 2);
|
||||
targetId = getField(%val, 3);
|
||||
teamId = getField(%val, 4);
|
||||
score = getField(%val, 5);
|
||||
ping = getField(%val, 6);
|
||||
packetLoss = getField(%val, 7);
|
||||
chatMuted = getField(%val, 8);
|
||||
canListen = getField(%val, 9);
|
||||
voiceEnabled = getField(%val, 10);
|
||||
isListening = getField(%val, 11);
|
||||
isBot = getField(%val, 12);
|
||||
isAdmin = getField(%val, 13);
|
||||
isSuperAdmin = getField(%val, 14);
|
||||
isSmurf = getField(%val, 15);
|
||||
};
|
||||
|
||||
PlayerListGroup.add(%player);
|
||||
$PlayerList[%player.clientId] = %player;
|
||||
|
||||
lobbyUpdatePlayer(%player.clientId);
|
||||
}
|
||||
|
||||
case RETICLE:
|
||||
%val = getDemoValue();
|
||||
reticleHud.setBitmap(getField(%val, 0));
|
||||
reticleHud.setVisible(getField(%val, 1));
|
||||
retCenterHud.setVisible(getField(%val, 2));
|
||||
ammoHud.setVisible(getField(%val, 3));
|
||||
ammoHud.setValue(getField(%val, 4));
|
||||
deploySensor.setVisible(getField(%val, 5));
|
||||
reticleFrameHud.setVisible(getField(%val, 6));
|
||||
|
||||
case BACKPACK:
|
||||
%val = getDemoValue();
|
||||
backpackIcon.setBitmap(getField(%val, 0));
|
||||
backpackFrame.setVisible(getField(%val, 1));
|
||||
backpackText.setValue(getField(%val, 2));
|
||||
backpackText.setVisible(getField(%val, 3));
|
||||
backpackFrame.pack = getField(%val, 4);
|
||||
|
||||
case WEAPON:
|
||||
%val = getDemoValue();
|
||||
|
||||
// visible
|
||||
weaponsHud.reset();
|
||||
weaponsHud.setVisible(getField(%val, 0));
|
||||
|
||||
// bitmaps
|
||||
weaponsHud.setBackgroundBitmap(getField(%val, 1));
|
||||
weaponsHud.setHighLightBitmap(getField(%val, 2));
|
||||
weaponsHud.setInfiniteAmmoBitmap(getField(%val, 3));
|
||||
|
||||
// count/slotCount/active
|
||||
%count = getField(%val, 4);
|
||||
%slotCount = getField(%val, 5);
|
||||
%active = getField(%val, 6);
|
||||
|
||||
// bitmaps
|
||||
for(%i = 0; %i < %count; %i++)
|
||||
{
|
||||
%val = getDemoValue();
|
||||
$WeaponNames[%i] = getField(%val, 0);
|
||||
weaponsHud.setWeaponBitmap(%i, getField(%val, 1));
|
||||
}
|
||||
|
||||
// items
|
||||
for(%i = 0; %i < %slotCount; %i++)
|
||||
{
|
||||
%val = getDemoValue();
|
||||
weaponsHud.addWeapon(getField(%val, 0), getField(%val, 1));
|
||||
}
|
||||
|
||||
// active
|
||||
weaponsHud.setActiveWeapon(%active);
|
||||
|
||||
case INVENTORY:
|
||||
%val = getDemoValue();
|
||||
|
||||
// visible
|
||||
inventoryHud.reset();
|
||||
inventoryHud.setVisible(getField(%val, 0));
|
||||
|
||||
// bitmaps
|
||||
inventoryHud.setBackgroundBitmap(getField(%val, 1));
|
||||
inventoryHud.setHighLightBitmap(getField(%val, 2));
|
||||
inventoryHud.setInfiniteAmountBitmap(getField(%val, 3));
|
||||
|
||||
// count/slotCount/active
|
||||
%count = getField(%val, 4);
|
||||
%slotCount = getField(%val, 5);
|
||||
%active = getField(%val, 6);
|
||||
|
||||
// images
|
||||
for(%i = 0; %i < %count; %i++)
|
||||
{
|
||||
%val = getDemoValue();
|
||||
inventoryHud.setInventoryBitmap(%i, %val);
|
||||
}
|
||||
|
||||
// items
|
||||
for(%i = 0; %i < %slotCount; %i++)
|
||||
{
|
||||
%val = getDemoValue();
|
||||
inventoryHud.addInventory(getField(%val, 0), getField(%val, 1));
|
||||
}
|
||||
|
||||
// active
|
||||
inventoryHud.setActiveInventory(%active);
|
||||
|
||||
case SCORE:
|
||||
%val = getDemoValue();
|
||||
|
||||
objectiveHud.setVisible(getField(%val, 0));
|
||||
setupObjHud(getField(%val, 1));
|
||||
%objCount = getField(%val, 2);
|
||||
|
||||
// must read in all values even if not used
|
||||
for(%i = 0; %i < %objCount; %i++)
|
||||
{
|
||||
%val = getDemoValue();
|
||||
if(%i < objectiveHud.getCount())
|
||||
objectiveHud.getObject(%i).setValue(%val);
|
||||
}
|
||||
|
||||
case CLOCK:
|
||||
%val = getDemoValue();
|
||||
clockHud.setVisible(getField(%val, 0));
|
||||
clockHud.setTime(getField(%val, 1));
|
||||
|
||||
case CHAT:
|
||||
HudMessageVector.clear();
|
||||
for(%i = 0; %i < 10; %i++)
|
||||
{
|
||||
%val = getDemoValue();
|
||||
if(%val !$= "")
|
||||
HudMessageVector.pushBackLine(%val);
|
||||
}
|
||||
|
||||
case GRAVITY:
|
||||
// KP
|
||||
// Try to get a gravity value, but don't set gravity unless it's valid.
|
||||
%gravity = getDemoValue();
|
||||
if (%gravity !$= "")
|
||||
setGravity(%gravity);
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
function doRecordingDelete(%file)
|
||||
{
|
||||
// delete it
|
||||
if(deleteFile("recordings/" @ %file @ ".rec"))
|
||||
{
|
||||
%sel = RecordingsDlgList.getSelectedId();
|
||||
RecordingsDlgList.removeRowById(%sel);
|
||||
RecordingsDlgList.setSelectedRow(0);
|
||||
|
||||
updateRecordingButtons();
|
||||
}
|
||||
else
|
||||
messageBoxOK("Failed", "Failed to remove file '" @ %file @ "'.");
|
||||
}
|
||||
|
||||
function DeleteSelectedDemo()
|
||||
{
|
||||
%sel = RecordingsDlgList.getSelectedId();
|
||||
%file = getField(RecordingsDlgList.getRowTextById(%sel), 0);
|
||||
|
||||
messageBoxOkCancel("Delete Recording?", "Are you sure you wish to delete recording file '" @ %file @ "'?", "doRecordingDelete(\"" @ %file @ "\");");
|
||||
}
|
||||
|
||||
function StartSelectedDemo()
|
||||
{
|
||||
// first unit is filename
|
||||
%sel = RecordingsDlgList.getSelectedId();
|
||||
%rowText = RecordingsDlgList.getRowTextById(%sel);
|
||||
|
||||
%file = "recordings/" @ getField(%rowText, 0) @ ".rec";
|
||||
%verLen = getDemoVersionLength(%file);
|
||||
|
||||
Canvas.pushDialog(DemoLoadProgressDlg);
|
||||
if(playDemo(%file))
|
||||
{
|
||||
// do not allow new sources to have a force feedback effect
|
||||
alxEnableForceFeedback(false);
|
||||
|
||||
resetGameState();
|
||||
Canvas.popDialog(DemoLoadProgressDlg);
|
||||
Canvas.popDialog(RecordingsDlg);
|
||||
Canvas.setContent(PlayGui);
|
||||
loadDemoSettings();
|
||||
|
||||
$DemoPlaybackIndex = 5;
|
||||
$DemoPlaybackLastIndex = 5;
|
||||
|
||||
// setup the global action map
|
||||
GlobalActionMap.bindCmd(keyboard, "escape", "", "stopDemoPlayback();");
|
||||
GlobalActionMap.bindCmd(keyboard, "tab", "", "toggleDemoPlaybackHud();");
|
||||
GlobalActionMap.bindCmd(keyboard, "space", "", "toggleDemoPause();");
|
||||
GlobalActionMap.bindCmd(keyboard, "numpadadd", "", "stepDemoPlaybackSpeed(1);");
|
||||
GlobalActionMap.bindCmd(keyboard, "numpadminus", "", "stepDemoPlaybackSpeed(-1);");
|
||||
$globalActionMapOnly = true;
|
||||
|
||||
$DemoPlaybackProgress = 0;
|
||||
$DemoPlaybackLength = getField(%verLen, 1);
|
||||
|
||||
// playback length may be 0 if recording was not clean (just set to 1min)
|
||||
if($DemoPlaybackLength == 0)
|
||||
$DemoPlaybackLength = 60000;
|
||||
|
||||
DemoPlayback_EndTime.setValue(msToMinSec($DemoPlaybackLength));
|
||||
|
||||
$DemoPlaybackIndex = 5;
|
||||
$DemoPlaybackLastIndex = 5;
|
||||
$DemoPlaybackProgress = 0;
|
||||
demoPlaybackUpdate(0);
|
||||
|
||||
updateDemoPlaybackStatus();
|
||||
}
|
||||
else
|
||||
MessageBoxOK("Playback Failed", "Demo playback failed for file '" @ %file @ "'.");
|
||||
|
||||
Canvas.popDialog(DemoLoadProgressDlg);
|
||||
}
|
||||
|
||||
function demoPlaybackComplete()
|
||||
{
|
||||
alxStopAll();
|
||||
|
||||
// allow new sources to have a force feedback effect
|
||||
alxEnableForceFeedback(true);
|
||||
|
||||
// remove the playback dialog
|
||||
if(DemoPlaybackDlg.isAwake())
|
||||
Canvas.popDialog(DemoPlaybackDlg);
|
||||
|
||||
Canvas.setContent("LaunchGui");
|
||||
Canvas.pushDialog(RecordingsDlg);
|
||||
|
||||
// cleanup
|
||||
resetGameState();
|
||||
purgeResources();
|
||||
|
||||
// clean the globalActionMap
|
||||
GlobalActionMap.unbind(keyboard, escape);
|
||||
GlobalActionMap.unbind(keyboard, tab);
|
||||
GlobalActionMap.unbind(keyboard, space);
|
||||
GlobalActionMap.unbind(keyboard, numpadadd);
|
||||
GlobalActionMap.unbind(keyboard, numpadminus);
|
||||
$globalActionMapOnly = false;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
function doDemoFileRename()
|
||||
{
|
||||
// first unit is filename
|
||||
%sel = RecordingsDlgList.getSelectedId();
|
||||
%file = getField(RecordingsDlgList.getRowTextById(%sel), 0);
|
||||
|
||||
%newFile = DemoRenameFile_Edit.getValue();
|
||||
|
||||
if(%file $= %newFile)
|
||||
return;
|
||||
|
||||
if(%newFile !$= "")
|
||||
{
|
||||
if(renameFile("recordings/" @ %file @ ".rec", "recordings/" @ %newFile @ ".rec"))
|
||||
{
|
||||
rebuildModPaths();
|
||||
RecordingsDlg.fillRecordingsList();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
MessageBoxOK("Rename Failed", "Failed to rename file '" @ %file @ "' to '" @ %newFile @ "'.");
|
||||
}
|
||||
|
||||
function RenameSelectedDemo()
|
||||
{
|
||||
// first unit is filename
|
||||
%sel = RecordingsDlgList.getSelectedId();
|
||||
%file = getField(RecordingsDlgList.getRowTextById(%sel), 0);
|
||||
|
||||
DemoRenameFile_Edit.setValue(%file);
|
||||
Canvas.pushDialog(DemoRenameFileDlg);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
function beginDemoRecord()
|
||||
{
|
||||
if(isDemo())
|
||||
return;
|
||||
|
||||
// make sure that current recording stream is stopped
|
||||
stopDemoRecord();
|
||||
|
||||
for(%i = 0; %i < 1000; %i++)
|
||||
{
|
||||
%num = %i;
|
||||
if(%num < 10)
|
||||
%num = "0" @ %num;
|
||||
if(%num < 100)
|
||||
%num = "0" @ %num;
|
||||
%file = "recordings/demo" @ %num @ ".rec";
|
||||
if(!isfile(%file))
|
||||
break;
|
||||
}
|
||||
if(%i == 1000)
|
||||
return;
|
||||
|
||||
$DemoFile = %file;
|
||||
|
||||
addMessageHudLine( "\c4Recording to file [\c2" @ $DemoFile @ "\cr].");
|
||||
|
||||
saveDemoSettings();
|
||||
startRecord(%file);
|
||||
|
||||
// make sure start worked
|
||||
if(!isRecordingDemo())
|
||||
{
|
||||
deleteFile("recordings/" @ $DemoFile @ ".rec");
|
||||
addMessageHudLine( "\c3 *** Failed to record to file [\c2" @ $DemoFile @ "\cr].");
|
||||
$DemoFile = "";
|
||||
}
|
||||
}
|
||||
|
||||
function stopDemoRecord()
|
||||
{
|
||||
if(isDemo())
|
||||
return;
|
||||
|
||||
// make sure we are recording (and have a valid file)
|
||||
if(isRecordingDemo())
|
||||
stopRecord();
|
||||
}
|
||||
|
||||
function demoRecordComplete()
|
||||
{
|
||||
// tell the user
|
||||
if($DemoFile !$= "")
|
||||
{
|
||||
addMessageHudLine( "\c4Stopped recording to file [\c2" @ $DemoFile @ "\cr].");
|
||||
$DemoFile = "";
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
function toggleDemoPlaybackHud()
|
||||
{
|
||||
if(DemoPlaybackDlg.isAwake())
|
||||
Canvas.popDialog(DemoPlaybackDlg);
|
||||
else
|
||||
Canvas.pushDialog(DemoPlaybackDlg, 99);
|
||||
}
|
||||
|
||||
$DemoPlaybackText[0] = "Paused"; $DemoPlaybackSpeed[0] = 0;
|
||||
$DemoPlaybackText[1] = "Play 1/16X"; $DemoPlaybackSpeed[1] = 0.0625;
|
||||
$DemoPlaybackText[2] = "Play 1/8X"; $DemoPlaybackSpeed[2] = 0.125;
|
||||
$DemoPlaybackText[3] = "Play 1/4X"; $DemoPlaybackSpeed[3] = 0.25;
|
||||
$DemoPlaybackText[4] = "Play 1/2X"; $DemoPlaybackSpeed[4] = 0.5;
|
||||
$DemoPlaybackText[5] = "Play 1X"; $DemoPlaybackSpeed[5] = 1;
|
||||
$DemoPlaybackText[6] = "Play 2X"; $DemoPlaybackSpeed[6] = 2;
|
||||
$DemoPlaybackText[7] = "Play 4X"; $DemoPlaybackSpeed[7] = 4;
|
||||
$DemoPlaybackText[8] = "Play 8X"; $DemoPlaybackSpeed[8] = 8;
|
||||
$DemoPlaybackText[9] = "Play 16X"; $DemoPlaybackSpeed[9] = 16;
|
||||
|
||||
// called after each processTime
|
||||
function demoPlaybackUpdate(%curTime)
|
||||
{
|
||||
DemoPlayback_CurTime.setValue(msToMinSec(%curTime));
|
||||
$DemoPlaybackProgress = %curTime / $DemoPlaybackLength;
|
||||
}
|
||||
|
||||
function updateDemoPlaybackStatus()
|
||||
{
|
||||
// clamp the speed
|
||||
if($DemoPlaybackIndex < 0)
|
||||
$DemoPlaybackIndex = 0;
|
||||
|
||||
if($DemoPlaybackIndex > 9)
|
||||
$DemoPlaybackIndex = 9;
|
||||
|
||||
DemoPlayback_StatusText.setValue($DemoPlaybackText[$DemoPlaybackIndex]);
|
||||
$timeScale = $DemoPlaybackSpeed[$DemoPlaybackIndex];
|
||||
}
|
||||
|
||||
function toggleDemoPause()
|
||||
{
|
||||
// save the current index for unpause
|
||||
if($DemoPlaybackIndex == 0)
|
||||
$DemoPlaybackIndex = $DemoPlaybackLastIndex;
|
||||
else
|
||||
{
|
||||
$DemoPlaybackLastIndex = $DemoPlaybackIndex;
|
||||
$DemoPlaybackIndex = 0;
|
||||
}
|
||||
|
||||
updateDemoPlaybackStatus();
|
||||
}
|
||||
|
||||
function stepDemoPlaybackSpeed(%step)
|
||||
{
|
||||
$DemoPlaybackIndex += %step;
|
||||
updateDemoPlaybackStatus();
|
||||
}
|
||||
|
||||
function DemoPlaybackDlg::onWake(%this)
|
||||
{
|
||||
updateDemoPlaybackStatus();
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue