// TerrainPreviewGUI by beffy, 03/23/2002 //--- OBJECT WRITE BEGIN --- new GuiChunkedBitmapCtrl(TerrainPreviewGui) { profile = "GuiDefaultProfile"; horizSizing = "right"; vertSizing = "bottom"; position = "0 0"; extent = "780 580"; minExtent = "8 8"; visible = "1"; helpTag = "0"; new GuiControl() { profile = "GuiWindowProfile"; horizSizing = "center"; vertSizing = "center"; position = "60 74"; extent = "710 400"; minExtent = "8 8"; visible = "1"; helpTag = "0"; new GuiButtonCtrl(PrevModelButton) { profile = "GuiButtonProfile"; horizSizing = "right"; vertSizing = "top"; position = "495 310"; extent = "80 23"; minExtent = "8 8"; visible = "0"; command = "TerrainPreviewGui::prevModel();"; helpTag = "1"; text = "<< Back"; }; new GuiButtonCtrl(NextModelButton) { profile = "GuiButtonProfile"; horizSizing = "right"; vertSizing = "top"; position = "590 310"; extent = "80 23"; minExtent = "8 8"; visible = "1"; command = "TerrainPreviewGui::nextModel();"; helpTag = "0"; text = "Next >>"; }; new GuiTextCtrl(PlayerSelectTextCtrl) { profile = "GuiTextProfile"; horizSizing = "right"; vertSizing = "bottom"; position = "485 25"; extent = "88 20"; minExtent = "8 8"; visible = "1"; text = "Select Model:"; helpTag = "0"; maxLength = "255"; }; // place to render the selected item new GuiObjectView(ToRKDisplayWindow) { profile = "GuiDefaultProfile"; horizSizing = "relative"; vertSizing = "relative"; position = "485 64"; extent = "230 220"; minExtent = "8 8"; visible = "1"; helpTag = "0"; }; new GuiTerView(MM_ShowTerrain) { profile = "GuiButtonProfile"; horizSizing = "right"; vertSizing = "bottom"; position = "210 93"; extent = "240 240"; minExtent = "8 8"; visible = "1"; modal = "0"; helpTag = "0"; }; new GuiTextCtrl(MissionTextCtrl) { profile = "GuiTextProfile"; horizSizing = "right"; vertSizing = "bottom"; position = "210 4"; extent = "88 20"; minExtent = "8 8"; visible = "1"; helpTag = "0"; maxLength = "255"; }; new GuiTextCtrl(TerrainTextCtrl) { profile = "GuiTextProfile"; horizSizing = "right"; vertSizing = "bottom"; position = "210 25"; extent = "88 20"; minExtent = "8 8"; visible = "1"; helpTag = "0"; maxLength = "255"; }; new GuiButtonCtrl() { profile = "GuiButtonProfile"; horizSizing = "right"; vertSizing = "top"; position = "10 184"; extent = "127 23"; minExtent = "8 8"; visible = "1"; command = "TerrainPreviewGui::StartMission();"; helpTag = "0"; text = "Go!"; }; new GuiButtonCtrl() { profile = "GuiButtonProfile"; horizSizing = "right"; vertSizing = "top"; position = "10 212"; extent = "127 23"; minExtent = "8 8"; visible = "1"; //command = "TerrainPreviewGui::selectNextTerrain();"; command = "TerrainPreviewGui::previewTerrain();"; helpTag = "0"; text = "Preview"; }; new GuiButtonCtrl() { profile = "GuiButtonProfile"; horizSizing = "right"; vertSizing = "top"; position = "10 240"; extent = "127 23"; minExtent = "8 8"; visible = "1"; command = "Canvas.getContent().exit();"; helpTag = "0"; text = "<< Back"; }; new GuiCheckBoxCtrl(ML_isMultiplayer) { profile = "GuiCheckBoxProfile"; horizSizing = "right"; vertSizing = "bottom"; position = "12 303"; extent = "147 23"; minExtent = "8 8"; visible = "1"; variable = "pref::HostMultiPlayer"; helpTag = "0"; text = "Multiplayer Mission"; maxLength = "255"; }; new GuiTextEditCtrl() { profile = "GuiTextEditProfile"; horizSizing = "right"; vertSizing = "bottom"; position = "12 30"; extent = "164 16"; minExtent = "8 8"; visible = "1"; variable = "pref::Player::Name"; helpTag = "0"; maxLength = "255"; historySize = "0"; password = "0"; tabComplete = "0"; }; new GuiTextCtrl() { profile = "GuiTextProfile"; horizSizing = "right"; vertSizing = "bottom"; position = "12 11"; extent = "79 20"; minExtent = "8 8"; visible = "1"; helpTag = "0"; text = "Player Name:"; maxLength = "255"; }; new GuiScrollCtrl() { profile = "GuiScrollProfile"; horizSizing = "right"; vertSizing = "bottom"; position = "12 55"; extent = "164 100"; minExtent = "8 8"; visible = "1"; helpTag = "0"; willFirstRespond = "1"; hScrollBar = "dynamic"; vScrollBar = "alwaysOn"; constantThumbHeight = "0"; defaultLineHeight = "15"; childMargin = "0 0"; new GuiTextListCtrl(ToRK_missionList) { profile = "GuiTextArrayProfile"; horizSizing = "right"; vertSizing = "bottom"; position = "0 0"; extent = "150 40"; minExtent = "8 8"; visible = "1"; helpTag = "0"; enumerate = "0"; resizeCell = "1"; columns = "0"; fitParentWidth = "1"; clipColumnText = "0"; noDuplicates = "false"; }; }; }; }; //--- OBJECT WRITE END --- //---------------------------------------- function TerrainPreviewGui::onWake() { //reset vars $numDTS = 0; $currentDTS = 0; $playerCSFile = ""; $currTerrainId = 0; $terrCounter = 0; // 25/09/02: set default mod if($currentUserMod $= "") $currentUserMod = $userMods; // clear Gui elements ToRK_missionList.clear(); ToRKDisplayWindow.setEmpty(); MM_ShowTerrain.detachTerrain(); // search *.ter files and init the mission list TerrainPreviewGui::loadTerrains(); TerrainPreviewGui::loadPlayerShapes($currentUserMod); // display first model in array TerrainPreviewGui::displayDTSItem(); } //---------------------------------------- function TerrainPreviewGui::cancel(%this) { } //---------------------------------------- function TerrainPreviewGui::exit(%this) { // cleanup MM_ShowTerrain.detachTerrain(); ToRKDisplayWindow.setEmpty(); Canvas.setContent(mainMenuGui); } //-------------------------------------------------------------------- // Search *.ter files, fill arrays and display all missions in list //-------------------------------------------------------------------- function TerrainPreviewGui::loadTerrains() { //$currentUserMod is set in "example/main.cs"... %filespec = $currentUserMod @ "/data" @ "/*.ter"; %missionPath = $currentUserMod @ "/data/missions"; // a little hack to get the mod directory //%delpos = strpos($Client::MissionFileSpec, "/*"); //%modDir = getSubStr($Client::MissionFileSpec, 0, %delpos); for(%file = findFirstFile(%filespec); %file !$= ""; %file = findNextFile(%filespec)) { // ignore CVS folder... // 25/09/02: ignore "newMission.ter" also if (strStr(%file, "CVS/") == -1 && strStr(%file, "/newMission") == -1) { //echo("count: " @ getFileCount("*.ter")); $terrFiles[$terrCounter] = filePath(%file) @ "/" @ fileName(%file); $missionFiles[$terrCounter] = %missionPath @ "/" @ fileBase(%file) @ ".mis"; echo("File " @ $terrCounter @ ": " @ $terrFiles[$terrCounter]); ToRK_missionList.addRow($terrCounter, getMissionDisplayName($missionFiles[$terrCounter]) @ "\t" @ %file ); $terrCounter++; } } ToRK_missionList.sort(0); ToRK_missionList.setSelectedRow(0); ToRK_missionList.scrollVisible(0); } //-------------------------------------------------------------------- // Preview selected mission terrain //-------------------------------------------------------------------- function TerrainPreviewGui::previewTerrain() { %id = ToRK_missionList.getSelectedId(); TerrainTextCtrl.setText("Terrain file: " @ $terrFiles[%id]); MissionTextCtrl.setText("Mission: " @ getMissionDisplayName($missionFiles[%id])); MM_ShowTerrain.detachTerrain(); MM_ShowTerrain.attachTerrain($terrFiles[%id]); } //-------------------------------------------------------------------- // Return the next terrain in cycle //-------------------------------------------------------------------- function TerrainPreviewGui::cycleTerrains() { if($currTerrainId++ == $terrCounter) { $currTerrainId = 0; } TerrainTextCtrl.setText("Terrain file: " @ $terrFiles[$currTerrainId]); MissionTextCtrl.setText("Mission: " @ getMissionDisplayName($missionFiles[$currTerrainId])); return $terrFiles[$currTerrainId]; } //-------------------------------------------------------------------- // Select the next terrain in cycle //-------------------------------------------------------------------- function TerrainPreviewGui::selectNextTerrain() { MM_ShowTerrain.detachTerrain(); MM_ShowTerrain.attachTerrain(TerrainPreviewGui::cycleTerrains()); } //-------------------------------------------------------------------- // Start the selected mission //-------------------------------------------------------------------- function TerrainPreviewGui::StartMission() { MM_ShowTerrain.detachTerrain(); %mission = $missionFiles[ToRK_missionList.getSelectedId()]; // used in game.cs to load the appropriate player script $playerCSFile = $playerFiles[$currentDTS]; if ($pref::HostMultiPlayer) %serverType = "MultiPlayer"; else %serverType = "SinglePlayer"; createServer(%serverType, %mission); // 25/09/02: changed for latest HEAD %conn = new GameConnection(ServerConnection); RootGroup.add(ServerConnection); %conn.setConnectArgs($pref::Player::Name); %conn.setJoinPassword($Client::Password); %conn.connectLocal(); } //-------------------------------------------------------------------- // Parse mission files for mission name //-------------------------------------------------------------------- function getMissionDisplayName( %missionFile ) { %file = new FileObject(); %MissionInfoObject = ""; if ( %file.openForRead( %missionFile ) ) { %inInfoBlock = false; while ( !%file.isEOF() ) { %line = %file.readLine(); %line = trim( %line ); if( %line $= "new ScriptObject(MissionInfo) {" ) %inInfoBlock = true; else if( %inInfoBlock && %line $= "};" ) { %inInfoBlock = false; %MissionInfoObject = %MissionInfoObject @ %line; break; } if( %inInfoBlock ) %MissionInfoObject = %MissionInfoObject @ %line @ " "; } %file.close(); } %MissionInfoObject = "%MissionInfoObject = " @ %MissionInfoObject; eval( %MissionInfoObject ); %file.delete(); if( %MissionInfoObject.name !$= "" ) return %MissionInfoObject.name; else return fileBase(%missionFile); } //-------------------------------------------------------------------- // initialize arrays with shape- and scriptpaths //-------------------------------------------------------------------- function TerrainPreviewGui::loadPlayerShapes(%mod) { if(%mod $= "fps") { $playerShapes[0] = %mod @ "/data/shapes/player/player.dts"; $playerFiles[0] = %mod @ "/server/scripts/player.cs"; $numDTS++; } else if(%mod $= "racing") { $playerShapes[2] = %mod @ "/data/shapes/car/car.dts"; $playerFiles[2] = %mod @ "/server/scripts/car.cs"; $numDTS++; } else { error("Unknown mod name!"); } } //-------------------------------------------------------------------- // display current *.dts //-------------------------------------------------------------------- function TerrainPreviewGui::displayDTSItem() { PrevModelButton.visible = "1"; NextModelButton.visible = "1"; ToRKDisplayWindow.setEmpty(); %file = $playerShapes[$currentDTS]; echo("Loading " @ %file); ToRKDisplayWindow.setModel(%file , ""); } //-------------------------------------------------------------------- // go back one dts //-------------------------------------------------------------------- function TerrainPreviewGui::prevModel() { if($currentDTS-- < 0) { $currentDTS = $numDTS-1; } echo($currentDTS); TerrainPreviewGui::displayDTSItem(); } //-------------------------------------------------------------------- // show next dts //-------------------------------------------------------------------- function TerrainPreviewGui::nextModel() { if($currentDTS++ >= $numDTS) { $currentDTS = 0; } echo($currentDTS); TerrainPreviewGui::displayDTSItem(); }