KevinBlast/marble/client/init.cs

293 lines
8.9 KiB
C#

//-----------------------------------------------------------------------------
// Variables used by client scripts & code. The ones marked with (c)
// are accessed from code. Variables preceeded by Pref:: are client
// preferences and stored automatically in the ~/client/prefs.cs file
// in between sessions.
//
// (c) Client::MissionFile Mission file name
// ( ) Client::Password Password for server join
// (?) Pref::Player::CurrentFOV
// (?) Pref::Player::DefaultFov
// ( ) Pref::Input::KeyboardTurnSpeed
// (c) pref::Master[n] List of master servers
// (c) pref::Net::RegionMask
// (c) pref::Client::ServerFavoriteCount
// (c) pref::Client::ServerFavorite[FavoriteCount]
// .. Many more prefs... need to finish this off
// Moves, not finished with this either...
// (c) firstPerson
// $mv*Action...
//-----------------------------------------------------------------------------
// These are variables used to control the shell scripts and
// can be overriden by mods:
//-----------------------------------------------------------------------------
function initClient()
{
echo("\n--------- Initializing FPS: Client ---------");
// Make sure this variable reflects the correct state.
$Server::Dedicated = false;
// Game information used to query the master server
$Client::GameTypeQuery = "Test App";
$Client::MissionTypeQuery = "Any";
// Default level qualification
if (!$pref::QualifiedLevel["Beginner"])
$pref::QualifiedLevel["Beginner"] = 1;
if (!$pref::QualifiedLevel["Intermediate"])
$pref::QualifiedLevel["Intermediate"] = 1;
if (!$pref::QualifiedLevel["Advanced"])
$pref::QualifiedLevel["Advanced"] = 1;
if (!$pref::QualifiedLevel["Expert"])
$pref::QualifiedLevel["Expert"] = 1;
// The common module provides basic client functionality
initBaseClient();
// InitCanvas starts up the graphics system.
// The canvas needs to be constructed before the gui scripts are
// run because many of the controls assume the canvas exists at
// load time.
initCanvas(" Kevin Blast 1.5 - Created by KevinSoftware");
/// Load client-side Audio Profiles/Descriptions
exec("./scripts/audioProfiles.cs");
// Load up the Game GUIs
exec("./ui/defaultGameProfiles.cs");
exec("./ui/PlayGui.gui");
// Load up the shell GUIs
exec("./ui/ignitionGui.gui");
exec("./ui/ignitionStatusGui.gui");
exec("./ui/presentsGui.gui");
exec("./ui/productionGui.gui");
exec("./ui/titleGui.gui");
exec("./ui/playMissionGui.gui");
exec("./ui/mainMenuGui.gui");
exec("./ui/aboutDlg.gui");
exec("./ui/startMissionGui.gui"); // to be deleted
exec("./ui/chooseGui.gui");
exec("./ui/joinServerGui.gui");
exec("./ui/endGameGui.gui");
exec("./ui/upsell/UpsellGui.gui");
EndGameGui.preload();
exec("./ui/loadingGui.gui");
exec("./ui/optionsDlg.gui");
exec("./ui/remapDlg.gui");
exec("./ui/MOTDGui.gui");
exec("./ui/EnterNameDlg.gui");
EnterNameDlg.preload();
exec("./ui/HelpCreditsGui.gui");
exec("./ui/ExitGameDlg.gui");
exec("./ui/MiniShotGui.gui");
// custom gui files
exec("./ui/congratsGui.gui");
// Client scripts
exec("./scripts/client.cs");
exec("./scripts/helpCredits.cs");
exec("./scripts/missionDownload.cs");
exec("./scripts/serverConnection.cs");
exec("./scripts/playerList.cs");
exec("./scripts/loadingGui.cs");
exec("./scripts/optionsDlg.cs");
exec("./scripts/chatHud.cs");
exec("./scripts/messageHud.cs");
exec("./scripts/playGui.cs");
exec("./scripts/centerPrint.cs");
exec("./scripts/game.cs");
exec("./scripts/version.cs");
// custom gui scripts
exec("./scripts/MarbleSkinSelectionDlg.cs");
// Default player key bindings
exec("./scripts/default.bind.cs");
exec("./config.cs");
// Really shouldn't be starting the networking unless we are
// going to connect to a remote server, or host a multi-player
// game.
// setNetPort(0);
// Copy saved script prefs into C++ code.
setShadowDetailLevel( $pref::shadows );
setDefaultFov( $pref::Player::defaultFov );
setZoomSpeed( $pref::Player::zoomSpeed );
// Start up the main menu... this is separated out into a
// method for easier mod override.
loadMainMenu();
// Connect to server if requested.
if ($JoinGameAddress !$= "") {
connect($JoinGameAddress, "", $Pref::Player::Name);
}
else if($missionArg !$= "") {
%file = findNamedFile($missionArg, ".mis");
if(%file !$= "")
{
%this.io = new IgnitionObject();
%status = %this.io.validate();
echo("Ignition: " @ %status);
doCreateGame(%file);
}
}
else if($interiorArg !$= "") {
%file = findNamedFile($interiorArg, ".dif");
if(%file !$= "")
{
onServerCreated(); // gotta hack here to get the datablocks loaded...
%this.io = new IgnitionObject();
%status = %this.io.validate();
echo("Ignition: " @ %status);
%missionGroup = createEmptyMission($interiorArg);
%interior = new InteriorInstance() {
position = "0 0 0";
rotation = "1 0 0 0";
scale = "1 1 1";
interiorFile = %file;
};
%missionGroup.add(%interior);
%interior.magicButton();
if(!isObject(StartPoint))
{
%pt = new StaticShape(StartPoint) {
position = "0 -5 100";
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "StartPad";
};
MissionGroup.add(%pt);
}
if(!isObject(EndPoint))
{
%pt = new StaticShape(EndPoint) {
position = "0 5 100";
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "EndPad";
};
MissionGroup.add(%pt);
}
%box = %interior.getWorldBox();
%mx = getWord(%box, 0);
%my = getWord(%box, 1);
%mz = getWord(%box, 2);
%MMx = getWord(%box, 3);
%MMy = getWord(%box, 4);
%MMz = getWord(%box, 5);
%pos = (%mx - 3) SPC (%MMy + 3) SPC (%mz - 3);
%scale = (%MMx - %mx + 6) SPC (%MMy - %my + 6) SPC (%MMz - %mz + 20);
echo(%box);
echo(%pos);
echo(%scale);
new Trigger(Bounds) {
position = %pos;
scale = %scale;
rotation = "1 0 0 0";
dataBlock = "InBoundsTrigger";
polyhedron = "0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 0.0000000 -1.0000000 0.0000000 0.0000000 0.0000000 1.0000000";
};
MissionGroup.add(Bounds);
%missionGroup.save("marble/data/missions/testMission.mis");
%missionGroup.delete();
doCreateGame("marble/data/missions/testMission.mis");
}
}
}
function doCreateGame(%file)
{
echo("creating game!");
createServer("SinglePlayer", %file);
%conn = new GameConnection(ServerConnection);
RootGroup.add(ServerConnection);
%conn.setConnectArgs($pref::Player::Name);
%conn.setJoinPassword($Client::Password);
%conn.connectLocal();
}
function findNamedFile(%file, %ext)
{
if(fileExt(%file) !$= %ext)
%file = %file @ %ext;
%found = findFirstFile(%file);
if(%found $= "")
%found = findFirstFile("*/" @ %file);
return %found;
}
function setPlayMissionGui()
{
// save game too
export("$pref::*", "./prefs.cs", False);
Canvas.setContent(playMissionGui);
}
//-----------------------------------------------------------------------------
function loadMainMenu()
{
// Startup the client with the Main menu...
runPresentation();
buildMissionList();
Canvas.setCursor("DefaultCursor");
playShellMusic();
}
function createEmptyMission(%interiorArg)
{
return new SimGroup(MissionGroup) {
new ScriptObject(MissionInfo) {
level = "001";
desc = "A test mission for an interior";
type = "Template";
name = "Interior Test: " @ %interiorArg;
time = 0;
};
new MissionArea(MissionArea) {
area = "-360 -648 720 1296";
flightCeiling = "300";
flightCeilingRange = "20";
locked = "true";
};
new Sky(Sky) {
position = "336 136 0";
rotation = "1 0 0 0";
scale = "1 1 1";
visibleDistance = "500";
useSkyTextures = "1";
renderBottomTexture = "1";
SkySolidColor = "0.600000 0.600000 0.600000 1.000000";
fogDistance = "300";
fogColor = "0.600000 0.600000 0.600000 1.000000";
materialList = "~/data/skies/sky_day.dml";
noRenderBans = "1";
};
new Sun() {
direction = "0.57735 0.57735 -0.57735";
color = "0.600000 0.600000 0.600000 1.000000";
ambient = "0.400000 0.400000 0.400000 1.000000";
};
};
}