mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-04-27 23:35:45 +00:00
Full Template for ticket #1
This commit is contained in:
parent
74f265b3b3
commit
f439dc8dcd
2150 changed files with 286240 additions and 0 deletions
42
Templates/Full/game/scripts/client/audioData.cs
Normal file
42
Templates/Full/game/scripts/client/audioData.cs
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// Game specific audio descriptions. Always declare SFXDescription's (the type of sound)
|
||||
// before SFXProfile's (the sound itself) when creating new ones
|
||||
|
||||
singleton SFXDescription(BulletFireDesc : AudioEffect )
|
||||
{
|
||||
isLooping = false;
|
||||
is3D = true;
|
||||
ReferenceDistance = 10.0;
|
||||
MaxDistance = 60.0;
|
||||
};
|
||||
|
||||
singleton SFXDescription(BulletImpactDesc : AudioEffect )
|
||||
{
|
||||
isLooping = false;
|
||||
is3D = true;
|
||||
ReferenceDistance = 10.0;
|
||||
MaxDistance = 30.0;
|
||||
volume = 0.4;
|
||||
pitch = 1.4;
|
||||
};
|
||||
323
Templates/Full/game/scripts/client/chatHud.cs
Normal file
323
Templates/Full/game/scripts/client/chatHud.cs
Normal file
|
|
@ -0,0 +1,323 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Message Hud
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// chat hud sizes in lines
|
||||
$outerChatLenY[1] = 4;
|
||||
$outerChatLenY[2] = 9;
|
||||
$outerChatLenY[3] = 13;
|
||||
|
||||
// Only play sound files that are <= 5000ms in length.
|
||||
$MaxMessageWavLength = 5000;
|
||||
|
||||
// Helper function to play a sound file if the message indicates.
|
||||
// Returns starting position of wave file indicator.
|
||||
function playMessageSound(%message, %voice, %pitch)
|
||||
{
|
||||
// Search for wav tag marker.
|
||||
%wavStart = strstr(%message, "~w");
|
||||
if (%wavStart == -1)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
%wav = getSubStr(%message, %wavStart + 2, 1000);
|
||||
|
||||
if (%voice !$= "")
|
||||
{
|
||||
%wavFile = "art/sound/voice/" @ %voice @ "/" @ %wav;
|
||||
}
|
||||
else
|
||||
%wavFile = "art/sound/" @ %wav;
|
||||
|
||||
if (strstr(%wavFile, ".wav") != (strlen(%wavFile) - 4))
|
||||
%wavFile = %wavFile @ ".wav";
|
||||
|
||||
// XXX This only expands to a single filepath, of course; it
|
||||
// would be nice to support checking in each mod path if we
|
||||
// have multiple mods active.
|
||||
%wavFile = ExpandFilename(%wavFile);
|
||||
|
||||
%wavSource = sfxCreateSource(AudioMessage, %wavFile);
|
||||
|
||||
if (isObject(%wavSource))
|
||||
{
|
||||
%wavLengthMS = %wavSource.getDuration() * %pitch;
|
||||
|
||||
if (%wavLengthMS == 0)
|
||||
error("** WAV file \"" @ %wavFile @ "\" is nonexistent or sound is zero-length **");
|
||||
else if (%wavLengthMS <= $MaxMessageWavLength)
|
||||
{
|
||||
if (isObject($ClientChatHandle[%sender]))
|
||||
$ClientChatHandle[%sender].delete();
|
||||
|
||||
$ClientChatHandle[%sender] = %wavSource;
|
||||
|
||||
if (%pitch != 1.0)
|
||||
$ClientChatHandle[%sender].setPitch(%pitch);
|
||||
|
||||
$ClientChatHandle[%sender].play();
|
||||
}
|
||||
else
|
||||
error("** WAV file \"" @ %wavFile @ "\" is too long **");
|
||||
}
|
||||
else
|
||||
error("** Unable to load WAV file : \"" @ %wavFile @ "\" **");
|
||||
|
||||
return %wavStart;
|
||||
}
|
||||
|
||||
|
||||
// All messages are stored in this HudMessageVector, the actual
|
||||
// MainChatHud only displays the contents of this vector.
|
||||
|
||||
new MessageVector(HudMessageVector);
|
||||
$LastHudTarget = 0;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
function onChatMessage(%message, %voice, %pitch)
|
||||
{
|
||||
// XXX Client objects on the server must have voiceTag and voicePitch
|
||||
// fields for values to be passed in for %voice and %pitch... in
|
||||
// this example mod, they don't have those fields.
|
||||
|
||||
// Clients are not allowed to trigger general game sounds with their
|
||||
// chat messages... a voice directory MUST be specified.
|
||||
if (%voice $= "") {
|
||||
%voice = "default";
|
||||
}
|
||||
|
||||
// See if there's a sound at the end of the message, and play it.
|
||||
if ((%wavStart = playMessageSound(%message, %voice, %pitch)) != -1) {
|
||||
// Remove the sound marker from the end of the message.
|
||||
%message = getSubStr(%message, 0, %wavStart);
|
||||
}
|
||||
|
||||
// Chat goes to the chat HUD.
|
||||
if (getWordCount(%message)) {
|
||||
ChatHud.addLine(%message);
|
||||
}
|
||||
}
|
||||
|
||||
function onServerMessage(%message)
|
||||
{
|
||||
// See if there's a sound at the end of the message, and play it.
|
||||
if ((%wavStart = playMessageSound(%message)) != -1) {
|
||||
// Remove the sound marker from the end of the message.
|
||||
%message = getSubStr(%message, 0, %wavStart);
|
||||
}
|
||||
|
||||
// Server messages go to the chat HUD too.
|
||||
if (getWordCount(%message)) {
|
||||
ChatHud.addLine(%message);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// MainChatHud methods
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
function MainChatHud::onWake( %this )
|
||||
{
|
||||
// set the chat hud to the users pref
|
||||
%this.setChatHudLength( $Pref::ChatHudLength );
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
function MainChatHud::setChatHudLength( %this, %length )
|
||||
{
|
||||
%textHeight = ChatHud.Profile.fontSize + ChatHud.lineSpacing;
|
||||
if (%textHeight <= 0)
|
||||
%textHeight = 12;
|
||||
%lengthInPixels = $outerChatLenY[%length] * %textHeight;
|
||||
%chatMargin = getWord(OuterChatHud.extent, 1) - getWord(ChatScrollHud.Extent, 1)
|
||||
+ 2 * ChatScrollHud.profile.borderThickness;
|
||||
OuterChatHud.setExtent(firstWord(OuterChatHud.extent), %lengthInPixels + %chatMargin);
|
||||
ChatScrollHud.scrollToBottom();
|
||||
ChatPageDown.setVisible(false);
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
function MainChatHud::nextChatHudLen( %this )
|
||||
{
|
||||
%len = $pref::ChatHudLength++;
|
||||
if ($pref::ChatHudLength == 4)
|
||||
$pref::ChatHudLength = 1;
|
||||
%this.setChatHudLength($pref::ChatHudLength);
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// ChatHud methods
|
||||
// This is the actual message vector/text control which is part of
|
||||
// the MainChatHud dialog
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
function ChatHud::addLine(%this,%text)
|
||||
{
|
||||
//first, see if we're "scrolled up"...
|
||||
%textHeight = %this.profile.fontSize + %this.lineSpacing;
|
||||
if (%textHeight <= 0)
|
||||
%textHeight = 12;
|
||||
|
||||
%scrollBox = %this.getGroup();
|
||||
%chatScrollHeight = getWord(%scrollBox.extent, 1) - 2 * %scrollBox.profile.borderThickness;
|
||||
%chatPosition = getWord(%this.extent, 1) - %chatScrollHeight + getWord(%this.position, 1) - %scrollBox.profile.borderThickness;
|
||||
%linesToScroll = mFloor((%chatPosition / %textHeight) + 0.5);
|
||||
if (%linesToScroll > 0)
|
||||
%origPosition = %this.position;
|
||||
|
||||
//remove old messages from the top only if scrolled down all the way
|
||||
while( !chatPageDown.isVisible() && HudMessageVector.getNumLines() && (HudMessageVector.getNumLines() >= $pref::HudMessageLogSize))
|
||||
{
|
||||
%tag = HudMessageVector.getLineTag(0);
|
||||
if(%tag != 0)
|
||||
%tag.delete();
|
||||
HudMessageVector.popFrontLine();
|
||||
}
|
||||
|
||||
//add the message...
|
||||
HudMessageVector.pushBackLine(%text, $LastHudTarget);
|
||||
$LastHudTarget = 0;
|
||||
|
||||
//now that we've added the message, see if we need to reset the position
|
||||
if (%linesToScroll > 0)
|
||||
{
|
||||
chatPageDown.setVisible(true);
|
||||
%this.position = %origPosition;
|
||||
}
|
||||
else
|
||||
chatPageDown.setVisible(false);
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
function ChatHud::pageUp(%this)
|
||||
{
|
||||
// Find out the text line height
|
||||
%textHeight = %this.profile.fontSize + %this.lineSpacing;
|
||||
if (%textHeight <= 0)
|
||||
%textHeight = 12;
|
||||
|
||||
%scrollBox = %this.getGroup();
|
||||
|
||||
// Find out how many lines per page are visible
|
||||
%chatScrollHeight = getWord(%scrollBox.extent, 1) - 2 * %scrollBox.profile.borderThickness;
|
||||
if (%chatScrollHeight <= 0)
|
||||
return;
|
||||
|
||||
%pageLines = mFloor(%chatScrollHeight / %textHeight) - 1; // have a 1 line overlap on pages
|
||||
if (%pageLines <= 0)
|
||||
%pageLines = 1;
|
||||
|
||||
// See how many lines we actually can scroll up:
|
||||
%chatPosition = -1 * (getWord(%this.position, 1) - %scrollBox.profile.borderThickness);
|
||||
%linesToScroll = mFloor((%chatPosition / %textHeight) + 0.5);
|
||||
if (%linesToScroll <= 0)
|
||||
return;
|
||||
|
||||
if (%linesToScroll > %pageLines)
|
||||
%scrollLines = %pageLines;
|
||||
else
|
||||
%scrollLines = %linesToScroll;
|
||||
|
||||
// Now set the position
|
||||
%this.position = firstWord(%this.position) SPC (getWord(%this.position, 1) + (%scrollLines * %textHeight));
|
||||
|
||||
// Display the pageup icon
|
||||
chatPageDown.setVisible(true);
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
function ChatHud::pageDown(%this)
|
||||
{
|
||||
// Find out the text line height
|
||||
%textHeight = %this.profile.fontSize + %this.lineSpacing;
|
||||
if (%textHeight <= 0)
|
||||
%textHeight = 12;
|
||||
|
||||
%scrollBox = %this.getGroup();
|
||||
|
||||
// Find out how many lines per page are visible
|
||||
%chatScrollHeight = getWord(%scrollBox.extent, 1) - 2 * %scrollBox.profile.borderThickness;
|
||||
if (%chatScrollHeight <= 0)
|
||||
return;
|
||||
|
||||
%pageLines = mFloor(%chatScrollHeight / %textHeight) - 1;
|
||||
if (%pageLines <= 0)
|
||||
%pageLines = 1;
|
||||
|
||||
// See how many lines we actually can scroll down:
|
||||
%chatPosition = getWord(%this.extent, 1) - %chatScrollHeight + getWord(%this.position, 1) - %scrollBox.profile.borderThickness;
|
||||
%linesToScroll = mFloor((%chatPosition / %textHeight) + 0.5);
|
||||
if (%linesToScroll <= 0)
|
||||
return;
|
||||
|
||||
if (%linesToScroll > %pageLines)
|
||||
%scrollLines = %pageLines;
|
||||
else
|
||||
%scrollLines = %linesToScroll;
|
||||
|
||||
// Now set the position
|
||||
%this.position = firstWord(%this.position) SPC (getWord(%this.position, 1) - (%scrollLines * %textHeight));
|
||||
|
||||
// See if we have should (still) display the pagedown icon
|
||||
if (%scrollLines < %linesToScroll)
|
||||
chatPageDown.setVisible(true);
|
||||
else
|
||||
chatPageDown.setVisible(false);
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Support functions
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
function pageUpMessageHud()
|
||||
{
|
||||
ChatHud.pageUp();
|
||||
}
|
||||
|
||||
function pageDownMessageHud()
|
||||
{
|
||||
ChatHud.pageDown();
|
||||
}
|
||||
|
||||
function cycleMessageHudSize()
|
||||
{
|
||||
MainChatHud.nextChatHudLen();
|
||||
}
|
||||
199
Templates/Full/game/scripts/client/client.cs
Normal file
199
Templates/Full/game/scripts/client/client.cs
Normal file
|
|
@ -0,0 +1,199 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Server Admin Commands
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
function SAD(%password)
|
||||
{
|
||||
if (%password !$= "")
|
||||
commandToServer('SAD', %password);
|
||||
}
|
||||
|
||||
function SADSetPassword(%password)
|
||||
{
|
||||
commandToServer('SADSetPassword', %password);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Misc server commands
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
function clientCmdSyncClock(%time)
|
||||
{
|
||||
// Time update from the server, this is only sent at the start of a mission
|
||||
// or when a client joins a game in progress.
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Numerical Health Counter
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
function clientCmdSetNumericalHealthHUD(%curHealth)
|
||||
{
|
||||
// Skip if the hud is missing.
|
||||
if (!isObject(numericalHealthHUD))
|
||||
return;
|
||||
|
||||
// The server has sent us our current health, display it on the HUD
|
||||
numericalHealthHUD.setValue(%curHealth);
|
||||
|
||||
// Ensure the HUD is set to visible while we have health / are alive
|
||||
if (%curHealth)
|
||||
HealthHUD.setVisible(true);
|
||||
else
|
||||
HealthHUD.setVisible(false);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Damage Direction Indicator
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
function clientCmdSetDamageDirection(%direction)
|
||||
{
|
||||
eval("%ctrl = DamageHUD-->damage_" @ %direction @ ";");
|
||||
if (isObject(%ctrl))
|
||||
{
|
||||
// Show the indicator, and schedule an event to hide it again
|
||||
cancelAll(%ctrl);
|
||||
%ctrl.setVisible(true);
|
||||
%ctrl.schedule(500, setVisible, false);
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Teleporter visual effect
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
function clientCmdPlayTeleportEffect(%position, %effectDataBlock)
|
||||
{
|
||||
if (isObject(%effectDataBlock))
|
||||
{
|
||||
new Explosion()
|
||||
{
|
||||
position = %position;
|
||||
dataBlock = %effectDataBlock;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// WeaponHUD
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// Update the Ammo Counter with current ammo, if not any then hide the counter.
|
||||
function clientCmdSetAmmoAmountHud(%amount, %amountInClips)
|
||||
{
|
||||
if (!%amount)
|
||||
AmmoAmount.setVisible(false);
|
||||
else
|
||||
{
|
||||
AmmoAmount.setVisible(true);
|
||||
AmmoAmount.setText("Ammo: " @ %amount @ "/" @ %amountInClips);
|
||||
}
|
||||
}
|
||||
|
||||
// Here we update the Weapon Preview image & reticle for each weapon. We also
|
||||
// update the Ammo Counter (just so we don't have to call it separately).
|
||||
// Passing an empty parameter ("") hides the HUD component.
|
||||
|
||||
function clientCmdRefreshWeaponHUD(%amount, %preview, %ret, %zoomRet, %amountInClips)
|
||||
{
|
||||
if (!%amount)
|
||||
AmmoAmount.setVisible(false);
|
||||
else
|
||||
{
|
||||
AmmoAmount.setVisible(true);
|
||||
AmmoAmount.setText("Ammo: " @ %amount @ "/" @ %amountInClips);
|
||||
}
|
||||
|
||||
if (%preview $= "")
|
||||
WeaponHUD.setVisible(false);//PreviewImage.setVisible(false);
|
||||
else
|
||||
{
|
||||
WeaponHUD.setVisible(true);//PreviewImage.setVisible(true);
|
||||
PreviewImage.setbitmap("art/gui/weaponHud/"@ detag(%preview));
|
||||
}
|
||||
|
||||
if (%ret $= "")
|
||||
Reticle.setVisible(false);
|
||||
else
|
||||
{
|
||||
Reticle.setVisible(true);
|
||||
Reticle.setbitmap("art/gui/weaponHud/"@ detag(%ret));
|
||||
}
|
||||
|
||||
if (isObject(ZoomReticle))
|
||||
{
|
||||
if (%zoomRet $= "")
|
||||
{
|
||||
ZoomReticle.setBitmap("");
|
||||
}
|
||||
else
|
||||
{
|
||||
ZoomReticle.setBitmap("art/gui/weaponHud/"@ detag(%zoomRet));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Vehicle Support
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
function clientCmdtoggleVehicleMap(%toggle)
|
||||
{
|
||||
if(%toggle)
|
||||
{
|
||||
moveMap.pop();
|
||||
vehicleMap.push();
|
||||
}
|
||||
else
|
||||
{
|
||||
vehicleMap.pop();
|
||||
moveMap.push();
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Turret Support
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// Call by the Turret class when a player mounts or unmounts it.
|
||||
// %turret = The turret that was mounted
|
||||
// %player = The player doing the mounting
|
||||
// %mounted = True if the turret was mounted, false if it was unmounted
|
||||
function turretMountCallback(%turret, %player, %mounted)
|
||||
{
|
||||
//echo ( "\c4turretMountCallback -> " @ %mounted );
|
||||
|
||||
if (%mounted)
|
||||
{
|
||||
// Push the action map
|
||||
turretMap.push();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Pop the action map
|
||||
turretMap.pop();
|
||||
}
|
||||
}
|
||||
809
Templates/Full/game/scripts/client/default.bind.cs
Normal file
809
Templates/Full/game/scripts/client/default.bind.cs
Normal file
|
|
@ -0,0 +1,809 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
if ( isObject( moveMap ) )
|
||||
moveMap.delete();
|
||||
new ActionMap(moveMap);
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Non-remapable binds
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
function escapeFromGame()
|
||||
{
|
||||
if ( $Server::ServerType $= "SinglePlayer" )
|
||||
MessageBoxYesNo( "Exit", "Exit from this Mission?", "disconnect();", "");
|
||||
else
|
||||
MessageBoxYesNo( "Disconnect", "Disconnect from the server?", "disconnect();", "");
|
||||
}
|
||||
|
||||
moveMap.bindCmd(keyboard, "escape", "", "handleEscape();");
|
||||
|
||||
function showPlayerList(%val)
|
||||
{
|
||||
if (%val)
|
||||
PlayerListGui.toggle();
|
||||
}
|
||||
|
||||
moveMap.bind( keyboard, F2, showPlayerList );
|
||||
|
||||
function showControlsHelp(%val)
|
||||
{
|
||||
if (%val)
|
||||
ControlsHelpDlg.toggle();
|
||||
}
|
||||
|
||||
moveMap.bind(keyboard, h, showControlsHelp);
|
||||
|
||||
function hideHUDs(%val)
|
||||
{
|
||||
if (%val)
|
||||
HudlessPlayGui.toggle();
|
||||
}
|
||||
|
||||
moveMap.bind(keyboard, "ctrl h", hideHUDs);
|
||||
|
||||
function doScreenShotHudless(%val)
|
||||
{
|
||||
if(%val)
|
||||
{
|
||||
canvas.setContent(HudlessPlayGui);
|
||||
//doScreenshot(%val);
|
||||
schedule(10, 0, "doScreenShot", %val);
|
||||
}
|
||||
else
|
||||
canvas.setContent(PlayGui);
|
||||
}
|
||||
|
||||
moveMap.bind(keyboard, "alt p", doScreenShotHudless);
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Movement Keys
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
$movementSpeed = 1; // m/s
|
||||
|
||||
function setSpeed(%speed)
|
||||
{
|
||||
if(%speed)
|
||||
$movementSpeed = %speed;
|
||||
}
|
||||
|
||||
function moveleft(%val)
|
||||
{
|
||||
$mvLeftAction = %val * $movementSpeed;
|
||||
}
|
||||
|
||||
function moveright(%val)
|
||||
{
|
||||
$mvRightAction = %val * $movementSpeed;
|
||||
}
|
||||
|
||||
function moveforward(%val)
|
||||
{
|
||||
$mvForwardAction = %val * $movementSpeed;
|
||||
}
|
||||
|
||||
function movebackward(%val)
|
||||
{
|
||||
$mvBackwardAction = %val * $movementSpeed;
|
||||
}
|
||||
|
||||
function moveup(%val)
|
||||
{
|
||||
%object = ServerConnection.getControlObject();
|
||||
|
||||
if(%object.isInNamespaceHierarchy("Camera"))
|
||||
$mvUpAction = %val * $movementSpeed;
|
||||
}
|
||||
|
||||
function movedown(%val)
|
||||
{
|
||||
%object = ServerConnection.getControlObject();
|
||||
|
||||
if(%object.isInNamespaceHierarchy("Camera"))
|
||||
$mvDownAction = %val * $movementSpeed;
|
||||
}
|
||||
|
||||
function turnLeft( %val )
|
||||
{
|
||||
$mvYawRightSpeed = %val ? $Pref::Input::KeyboardTurnSpeed : 0;
|
||||
}
|
||||
|
||||
function turnRight( %val )
|
||||
{
|
||||
$mvYawLeftSpeed = %val ? $Pref::Input::KeyboardTurnSpeed : 0;
|
||||
}
|
||||
|
||||
function panUp( %val )
|
||||
{
|
||||
$mvPitchDownSpeed = %val ? $Pref::Input::KeyboardTurnSpeed : 0;
|
||||
}
|
||||
|
||||
function panDown( %val )
|
||||
{
|
||||
$mvPitchUpSpeed = %val ? $Pref::Input::KeyboardTurnSpeed : 0;
|
||||
}
|
||||
|
||||
function getMouseAdjustAmount(%val)
|
||||
{
|
||||
// based on a default camera FOV of 90'
|
||||
return(%val * ($cameraFov / 90) * 0.01) * $pref::Input::LinkMouseSensitivity;
|
||||
}
|
||||
|
||||
function getGamepadAdjustAmount(%val)
|
||||
{
|
||||
// based on a default camera FOV of 90'
|
||||
return(%val * ($cameraFov / 90) * 0.01) * 10.0;
|
||||
}
|
||||
|
||||
function yaw(%val)
|
||||
{
|
||||
%yawAdj = getMouseAdjustAmount(%val);
|
||||
if(ServerConnection.isControlObjectRotDampedCamera())
|
||||
{
|
||||
// Clamp and scale
|
||||
%yawAdj = mClamp(%yawAdj, -m2Pi()+0.01, m2Pi()-0.01);
|
||||
%yawAdj *= 0.5;
|
||||
}
|
||||
|
||||
$mvYaw += %yawAdj;
|
||||
}
|
||||
|
||||
function pitch(%val)
|
||||
{
|
||||
%pitchAdj = getMouseAdjustAmount(%val);
|
||||
if(ServerConnection.isControlObjectRotDampedCamera())
|
||||
{
|
||||
// Clamp and scale
|
||||
%pitchAdj = mClamp(%pitchAdj, -m2Pi()+0.01, m2Pi()-0.01);
|
||||
%pitchAdj *= 0.5;
|
||||
}
|
||||
|
||||
$mvPitch += %pitchAdj;
|
||||
}
|
||||
|
||||
function jump(%val)
|
||||
{
|
||||
$mvTriggerCount2++;
|
||||
}
|
||||
|
||||
function gamePadMoveX( %val )
|
||||
{
|
||||
if(%val > 0)
|
||||
{
|
||||
$mvRightAction = %val * $movementSpeed;
|
||||
$mvLeftAction = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
$mvRightAction = 0;
|
||||
$mvLeftAction = -%val * $movementSpeed;
|
||||
}
|
||||
}
|
||||
|
||||
function gamePadMoveY( %val )
|
||||
{
|
||||
if(%val > 0)
|
||||
{
|
||||
$mvForwardAction = %val * $movementSpeed;
|
||||
$mvBackwardAction = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
$mvForwardAction = 0;
|
||||
$mvBackwardAction = -%val * $movementSpeed;
|
||||
}
|
||||
}
|
||||
|
||||
function gamepadYaw(%val)
|
||||
{
|
||||
%yawAdj = getGamepadAdjustAmount(%val);
|
||||
if(ServerConnection.isControlObjectRotDampedCamera())
|
||||
{
|
||||
// Clamp and scale
|
||||
%yawAdj = mClamp(%yawAdj, -m2Pi()+0.01, m2Pi()-0.01);
|
||||
%yawAdj *= 0.5;
|
||||
}
|
||||
|
||||
if(%yawAdj > 0)
|
||||
{
|
||||
$mvYawLeftSpeed = %yawAdj;
|
||||
$mvYawRightSpeed = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
$mvYawLeftSpeed = 0;
|
||||
$mvYawRightSpeed = -%yawAdj;
|
||||
}
|
||||
}
|
||||
|
||||
function gamepadPitch(%val)
|
||||
{
|
||||
%pitchAdj = getGamepadAdjustAmount(%val);
|
||||
if(ServerConnection.isControlObjectRotDampedCamera())
|
||||
{
|
||||
// Clamp and scale
|
||||
%pitchAdj = mClamp(%pitchAdj, -m2Pi()+0.01, m2Pi()-0.01);
|
||||
%pitchAdj *= 0.5;
|
||||
}
|
||||
|
||||
if(%pitchAdj > 0)
|
||||
{
|
||||
$mvPitchDownSpeed = %pitchAdj;
|
||||
$mvPitchUpSpeed = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
$mvPitchDownSpeed = 0;
|
||||
$mvPitchUpSpeed = -%pitchAdj;
|
||||
}
|
||||
}
|
||||
|
||||
moveMap.bind( keyboard, a, moveleft );
|
||||
moveMap.bind( keyboard, d, moveright );
|
||||
moveMap.bind( keyboard, left, moveleft );
|
||||
moveMap.bind( keyboard, right, moveright );
|
||||
|
||||
moveMap.bind( keyboard, w, moveforward );
|
||||
moveMap.bind( keyboard, s, movebackward );
|
||||
moveMap.bind( keyboard, up, moveforward );
|
||||
moveMap.bind( keyboard, down, movebackward );
|
||||
|
||||
moveMap.bind( keyboard, e, moveup );
|
||||
moveMap.bind( keyboard, c, movedown );
|
||||
|
||||
moveMap.bind( keyboard, space, jump );
|
||||
moveMap.bind( mouse, xaxis, yaw );
|
||||
moveMap.bind( mouse, yaxis, pitch );
|
||||
|
||||
moveMap.bind( gamepad, thumbrx, "D", "-0.23 0.23", gamepadYaw );
|
||||
moveMap.bind( gamepad, thumbry, "D", "-0.23 0.23", gamepadPitch );
|
||||
moveMap.bind( gamepad, thumblx, "D", "-0.23 0.23", gamePadMoveX );
|
||||
moveMap.bind( gamepad, thumbly, "D", "-0.23 0.23", gamePadMoveY );
|
||||
|
||||
moveMap.bind( gamepad, btn_a, jump );
|
||||
moveMap.bindCmd( gamepad, btn_back, "disconnect();", "" );
|
||||
|
||||
moveMap.bindCmd(gamepad, dpadl, "toggleLightColorViz();", "");
|
||||
moveMap.bindCmd(gamepad, dpadu, "toggleDepthViz();", "");
|
||||
moveMap.bindCmd(gamepad, dpadd, "toggleNormalsViz();", "");
|
||||
moveMap.bindCmd(gamepad, dpadr, "toggleLightSpecularViz();", "");
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Stance/pose
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
function doCrouch(%val)
|
||||
{
|
||||
$mvTriggerCount3++;
|
||||
}
|
||||
|
||||
moveMap.bind(keyboard, lcontrol, doCrouch);
|
||||
moveMap.bind(gamepad, btn_b, doCrouch);
|
||||
|
||||
function doSprint(%val)
|
||||
{
|
||||
$mvTriggerCount5++;
|
||||
}
|
||||
|
||||
moveMap.bind(keyboard, lshift, doSprint);
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Mouse Trigger
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
function mouseFire(%val)
|
||||
{
|
||||
$mvTriggerCount0++;
|
||||
}
|
||||
|
||||
//function altTrigger(%val)
|
||||
//{
|
||||
//$mvTriggerCount1++;
|
||||
//}
|
||||
|
||||
moveMap.bind( mouse, button0, mouseFire );
|
||||
//moveMap.bind( mouse, button1, altTrigger );
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Gamepad Trigger
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
function gamepadFire(%val)
|
||||
{
|
||||
if(%val > 0.1 && !$gamepadFireTriggered)
|
||||
{
|
||||
$gamepadFireTriggered = true;
|
||||
$mvTriggerCount0++;
|
||||
}
|
||||
else if(%val <= 0.1 && $gamepadFireTriggered)
|
||||
{
|
||||
$gamepadFireTriggered = false;
|
||||
$mvTriggerCount0++;
|
||||
}
|
||||
}
|
||||
|
||||
function gamepadAltTrigger(%val)
|
||||
{
|
||||
if(%val > 0.1 && !$gamepadAltTriggerTriggered)
|
||||
{
|
||||
$gamepadAltTriggerTriggered = true;
|
||||
$mvTriggerCount1++;
|
||||
}
|
||||
else if(%val <= 0.1 && $gamepadAltTriggerTriggered)
|
||||
{
|
||||
$gamepadAltTriggerTriggered = false;
|
||||
$mvTriggerCount1++;
|
||||
}
|
||||
}
|
||||
|
||||
moveMap.bind(gamepad, triggerr, gamepadFire);
|
||||
moveMap.bind(gamepad, triggerl, gamepadAltTrigger);
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Zoom and FOV functions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
if($Player::CurrentFOV $= "")
|
||||
$Player::CurrentFOV = $pref::Player::DefaultFOV / 2;
|
||||
|
||||
// toggleZoomFOV() works by dividing the CurrentFOV by 2. Each time that this
|
||||
// toggle is hit it simply divides the CurrentFOV by 2 once again. If the
|
||||
// FOV is reduced below a certain threshold then it resets to equal half of the
|
||||
// DefaultFOV value. This gives us 4 zoom levels to cycle through.
|
||||
|
||||
function toggleZoomFOV()
|
||||
{
|
||||
$Player::CurrentFOV = $Player::CurrentFOV / 2;
|
||||
|
||||
if($Player::CurrentFOV < 5)
|
||||
resetCurrentFOV();
|
||||
|
||||
if(ServerConnection.zoomed)
|
||||
setFOV($Player::CurrentFOV);
|
||||
else
|
||||
{
|
||||
setFov(ServerConnection.getControlCameraDefaultFov());
|
||||
}
|
||||
}
|
||||
|
||||
function resetCurrentFOV()
|
||||
{
|
||||
$Player::CurrentFOV = ServerConnection.getControlCameraDefaultFov() / 2;
|
||||
}
|
||||
|
||||
function turnOffZoom()
|
||||
{
|
||||
ServerConnection.zoomed = false;
|
||||
setFov(ServerConnection.getControlCameraDefaultFov());
|
||||
Reticle.setVisible(true);
|
||||
zoomReticle.setVisible(false);
|
||||
|
||||
// Rather than just disable the DOF effect, we want to set it to the level's
|
||||
// preset values.
|
||||
//DOFPostEffect.disable();
|
||||
ppOptionsUpdateDOFSettings();
|
||||
}
|
||||
|
||||
function setZoomFOV(%val)
|
||||
{
|
||||
if(%val)
|
||||
toggleZoomFOV();
|
||||
}
|
||||
|
||||
function toggleZoom(%val)
|
||||
{
|
||||
if (%val)
|
||||
{
|
||||
ServerConnection.zoomed = true;
|
||||
setFov($Player::CurrentFOV);
|
||||
Reticle.setVisible(false);
|
||||
zoomReticle.setVisible(true);
|
||||
|
||||
DOFPostEffect.setAutoFocus( true );
|
||||
DOFPostEffect.setFocusParams( 0.5, 0.5, 50, 500, -5, 5 );
|
||||
DOFPostEffect.enable();
|
||||
}
|
||||
else
|
||||
{
|
||||
turnOffZoom();
|
||||
}
|
||||
}
|
||||
|
||||
function mouseButtonZoom(%val)
|
||||
{
|
||||
toggleZoom(%val);
|
||||
}
|
||||
|
||||
moveMap.bind(keyboard, f, setZoomFOV); // f for field of view
|
||||
moveMap.bind(keyboard, z, toggleZoom); // z for zoom
|
||||
moveMap.bind( mouse, button1, mouseButtonZoom );
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Camera & View functions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
function toggleFreeLook( %val )
|
||||
{
|
||||
if ( %val )
|
||||
$mvFreeLook = true;
|
||||
else
|
||||
$mvFreeLook = false;
|
||||
}
|
||||
|
||||
function toggleFirstPerson(%val)
|
||||
{
|
||||
if (%val)
|
||||
{
|
||||
ServerConnection.setFirstPerson(!ServerConnection.isFirstPerson());
|
||||
}
|
||||
}
|
||||
|
||||
function toggleCamera(%val)
|
||||
{
|
||||
if (%val)
|
||||
commandToServer('ToggleCamera');
|
||||
}
|
||||
|
||||
moveMap.bind( keyboard, v, toggleFreeLook ); // v for vanity
|
||||
moveMap.bind(keyboard, tab, toggleFirstPerson );
|
||||
moveMap.bind(keyboard, "alt c", toggleCamera);
|
||||
|
||||
moveMap.bind( gamepad, btn_start, toggleCamera );
|
||||
moveMap.bind( gamepad, btn_x, toggleFirstPerson );
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Misc. Player stuff
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// Gideon does not have these animations, so the player does not need access to
|
||||
// them. Commenting instead of removing so as to retain an example for those
|
||||
// who will want to use a player model that has these animations and wishes to
|
||||
// use them.
|
||||
|
||||
//moveMap.bindCmd(keyboard, "ctrl w", "commandToServer('playCel',\"wave\");", "");
|
||||
//moveMap.bindCmd(keyboard, "ctrl s", "commandToServer('playCel',\"salute\");", "");
|
||||
|
||||
moveMap.bindCmd(keyboard, "ctrl k", "commandToServer('suicide');", "");
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Item manipulation
|
||||
//------------------------------------------------------------------------------
|
||||
moveMap.bindCmd(keyboard, "1", "commandToServer('use',\"Ryder\");", "");
|
||||
moveMap.bindCmd(keyboard, "2", "commandToServer('use',\"Lurker\");", "");
|
||||
moveMap.bindCmd(keyboard, "3", "commandToServer('use',\"LurkerGrenadeLauncher\");", "");
|
||||
moveMap.bindCmd(keyboard, "4", "commandToServer('use',\"ProxMine\");", "");
|
||||
moveMap.bindCmd(keyboard, "5", "commandToServer('use',\"DeployableTurret\");", "");
|
||||
|
||||
moveMap.bindCmd(keyboard, "r", "commandToServer('reloadWeapon');", "");
|
||||
|
||||
function unmountWeapon(%val)
|
||||
{
|
||||
if (%val)
|
||||
commandToServer('unmountWeapon');
|
||||
}
|
||||
|
||||
moveMap.bind(keyboard, 0, unmountWeapon);
|
||||
|
||||
function throwWeapon(%val)
|
||||
{
|
||||
if (%val)
|
||||
commandToServer('Throw', "Weapon");
|
||||
}
|
||||
function tossAmmo(%val)
|
||||
{
|
||||
if (%val)
|
||||
commandToServer('Throw', "Ammo");
|
||||
}
|
||||
|
||||
moveMap.bind(keyboard, "alt w", throwWeapon);
|
||||
moveMap.bind(keyboard, "alt a", tossAmmo);
|
||||
|
||||
function nextWeapon(%val)
|
||||
{
|
||||
if (%val)
|
||||
commandToServer('cycleWeapon', "next");
|
||||
}
|
||||
|
||||
function prevWeapon(%val)
|
||||
{
|
||||
if (%val)
|
||||
commandToServer('cycleWeapon', "prev");
|
||||
}
|
||||
|
||||
function mouseWheelWeaponCycle(%val)
|
||||
{
|
||||
if (%val < 0)
|
||||
commandToServer('cycleWeapon', "next");
|
||||
else if (%val > 0)
|
||||
commandToServer('cycleWeapon', "prev");
|
||||
}
|
||||
|
||||
moveMap.bind(keyboard, q, nextWeapon);
|
||||
moveMap.bind(keyboard, "ctrl q", prevWeapon);
|
||||
moveMap.bind(mouse, "zaxis", mouseWheelWeaponCycle);
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Message HUD functions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
function pageMessageHudUp( %val )
|
||||
{
|
||||
if ( %val )
|
||||
pageUpMessageHud();
|
||||
}
|
||||
|
||||
function pageMessageHudDown( %val )
|
||||
{
|
||||
if ( %val )
|
||||
pageDownMessageHud();
|
||||
}
|
||||
|
||||
function resizeMessageHud( %val )
|
||||
{
|
||||
if ( %val )
|
||||
cycleMessageHudSize();
|
||||
}
|
||||
|
||||
moveMap.bind(keyboard, u, toggleMessageHud );
|
||||
//moveMap.bind(keyboard, y, teamMessageHud );
|
||||
moveMap.bind(keyboard, "pageUp", pageMessageHudUp );
|
||||
moveMap.bind(keyboard, "pageDown", pageMessageHudDown );
|
||||
moveMap.bind(keyboard, "p", resizeMessageHud );
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Demo recording functions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
function startRecordingDemo( %val )
|
||||
{
|
||||
if ( %val )
|
||||
startDemoRecord();
|
||||
}
|
||||
|
||||
function stopRecordingDemo( %val )
|
||||
{
|
||||
if ( %val )
|
||||
stopDemoRecord();
|
||||
}
|
||||
|
||||
moveMap.bind( keyboard, F3, startRecordingDemo );
|
||||
moveMap.bind( keyboard, F4, stopRecordingDemo );
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Helper Functions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
function dropCameraAtPlayer(%val)
|
||||
{
|
||||
if (%val)
|
||||
commandToServer('dropCameraAtPlayer');
|
||||
}
|
||||
|
||||
function dropPlayerAtCamera(%val)
|
||||
{
|
||||
if (%val)
|
||||
commandToServer('DropPlayerAtCamera');
|
||||
}
|
||||
|
||||
moveMap.bind(keyboard, "F8", dropCameraAtPlayer);
|
||||
moveMap.bind(keyboard, "F7", dropPlayerAtCamera);
|
||||
|
||||
function bringUpOptions(%val)
|
||||
{
|
||||
if (%val)
|
||||
Canvas.pushDialog(OptionsDlg);
|
||||
}
|
||||
|
||||
GlobalActionMap.bind(keyboard, "ctrl o", bringUpOptions);
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Debugging Functions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
$MFDebugRenderMode = 0;
|
||||
function cycleDebugRenderMode(%val)
|
||||
{
|
||||
if (!%val)
|
||||
return;
|
||||
|
||||
$MFDebugRenderMode++;
|
||||
|
||||
if ($MFDebugRenderMode > 16)
|
||||
$MFDebugRenderMode = 0;
|
||||
if ($MFDebugRenderMode == 15)
|
||||
$MFDebugRenderMode = 16;
|
||||
|
||||
setInteriorRenderMode($MFDebugRenderMode);
|
||||
|
||||
if (isObject(ChatHud))
|
||||
{
|
||||
%message = "Setting Interior debug render mode to ";
|
||||
%debugMode = "Unknown";
|
||||
|
||||
switch($MFDebugRenderMode)
|
||||
{
|
||||
case 0:
|
||||
%debugMode = "NormalRender";
|
||||
case 1:
|
||||
%debugMode = "NormalRenderLines";
|
||||
case 2:
|
||||
%debugMode = "ShowDetail";
|
||||
case 3:
|
||||
%debugMode = "ShowAmbiguous";
|
||||
case 4:
|
||||
%debugMode = "ShowOrphan";
|
||||
case 5:
|
||||
%debugMode = "ShowLightmaps";
|
||||
case 6:
|
||||
%debugMode = "ShowTexturesOnly";
|
||||
case 7:
|
||||
%debugMode = "ShowPortalZones";
|
||||
case 8:
|
||||
%debugMode = "ShowOutsideVisible";
|
||||
case 9:
|
||||
%debugMode = "ShowCollisionFans";
|
||||
case 10:
|
||||
%debugMode = "ShowStrips";
|
||||
case 11:
|
||||
%debugMode = "ShowNullSurfaces";
|
||||
case 12:
|
||||
%debugMode = "ShowLargeTextures";
|
||||
case 13:
|
||||
%debugMode = "ShowHullSurfaces";
|
||||
case 14:
|
||||
%debugMode = "ShowVehicleHullSurfaces";
|
||||
// Depreciated
|
||||
//case 15:
|
||||
// %debugMode = "ShowVertexColors";
|
||||
case 16:
|
||||
%debugMode = "ShowDetailLevel";
|
||||
}
|
||||
|
||||
ChatHud.addLine(%message @ %debugMode);
|
||||
}
|
||||
}
|
||||
|
||||
GlobalActionMap.bind(keyboard, "F9", cycleDebugRenderMode);
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
//
|
||||
// Start profiler by pressing ctrl f3
|
||||
// ctrl f3 - starts profile that will dump to console and file
|
||||
//
|
||||
function doProfile(%val)
|
||||
{
|
||||
if (%val)
|
||||
{
|
||||
// key down -- start profile
|
||||
echo("Starting profile session...");
|
||||
profilerReset();
|
||||
profilerEnable(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
// key up -- finish off profile
|
||||
echo("Ending profile session...");
|
||||
|
||||
profilerDumpToFile("profilerDumpToFile" @ getSimTime() @ ".txt");
|
||||
profilerEnable(false);
|
||||
}
|
||||
}
|
||||
|
||||
GlobalActionMap.bind(keyboard, "ctrl F3", doProfile);
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Misc.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
GlobalActionMap.bind(keyboard, "tilde", toggleConsole);
|
||||
GlobalActionMap.bindCmd(keyboard, "alt k", "cls();","");
|
||||
GlobalActionMap.bindCmd(keyboard, "alt enter", "", "Canvas.attemptFullscreenToggle();");
|
||||
GlobalActionMap.bindCmd(keyboard, "F1", "", "contextHelp();");
|
||||
moveMap.bindCmd(keyboard, "n", "toggleNetGraph();", "");
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Useful vehicle stuff
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// Trace a line along the direction the crosshair is pointing
|
||||
// If you find a car with a player in it...eject them
|
||||
function carjack()
|
||||
{
|
||||
%player = LocalClientConnection.getControlObject();
|
||||
|
||||
if (%player.getClassName() $= "Player")
|
||||
{
|
||||
%eyeVec = %player.getEyeVector();
|
||||
|
||||
%startPos = %player.getEyePoint();
|
||||
%endPos = VectorAdd(%startPos, VectorScale(%eyeVec, 1000));
|
||||
|
||||
%target = ContainerRayCast(%startPos, %endPos, $TypeMasks::VehicleObjectType);
|
||||
|
||||
if (%target)
|
||||
{
|
||||
// See if anyone is mounted in the car's driver seat
|
||||
%mount = %target.getMountNodeObject(0);
|
||||
|
||||
// Can only carjack bots
|
||||
// remove '&& %mount.getClassName() $= "AIPlayer"' to allow you
|
||||
// to carjack anyone/anything
|
||||
if (%mount && %mount.getClassName() $= "AIPlayer")
|
||||
{
|
||||
commandToServer('carUnmountObj', %mount);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Bind the keys to the carjack command
|
||||
moveMap.bindCmd(keyboard, "ctrl z", "carjack();", "");
|
||||
|
||||
|
||||
// Starting vehicle action map code
|
||||
if ( isObject( vehicleMap ) )
|
||||
vehicleMap.delete();
|
||||
new ActionMap(vehicleMap);
|
||||
|
||||
// The key command for flipping the car
|
||||
vehicleMap.bindCmd(keyboard, "ctrl x", "commandToServer(\'flipCar\');", "");
|
||||
|
||||
function getOut()
|
||||
{
|
||||
vehicleMap.pop();
|
||||
moveMap.push();
|
||||
commandToServer('dismountVehicle');
|
||||
}
|
||||
|
||||
function brakeLights()
|
||||
{
|
||||
// Turn on/off the Cheetah's head lights.
|
||||
commandToServer('toggleBrakeLights');
|
||||
}
|
||||
|
||||
function brake(%val)
|
||||
{
|
||||
commandToServer('toggleBrakeLights');
|
||||
$mvTriggerCount2++;
|
||||
}
|
||||
|
||||
vehicleMap.bind( keyboard, w, moveforward );
|
||||
vehicleMap.bind( keyboard, s, movebackward );
|
||||
vehicleMap.bind( keyboard, up, moveforward );
|
||||
vehicleMap.bind( keyboard, down, movebackward );
|
||||
vehicleMap.bind( mouse, xaxis, yaw );
|
||||
vehicleMap.bind( mouse, yaxis, pitch );
|
||||
vehicleMap.bind( mouse, button0, mouseFire );
|
||||
vehicleMap.bind( mouse, button1, altTrigger );
|
||||
vehicleMap.bindCmd(keyboard, "ctrl f","getout();","");
|
||||
vehicleMap.bind(keyboard, space, brake);
|
||||
vehicleMap.bindCmd(keyboard, "l", "brakeLights();", "");
|
||||
vehicleMap.bindCmd(keyboard, "escape", "", "handleEscape();");
|
||||
vehicleMap.bind(keyboard, h, showControlsHelp);
|
||||
vehicleMap.bind( keyboard, v, toggleFreeLook ); // v for vanity
|
||||
//vehicleMap.bind(keyboard, tab, toggleFirstPerson );
|
||||
vehicleMap.bind(keyboard, "alt c", toggleCamera);
|
||||
43
Templates/Full/game/scripts/client/defaults.cs
Normal file
43
Templates/Full/game/scripts/client/defaults.cs
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// First we execute the core default preferences.
|
||||
exec( "core/scripts/client/defaults.cs" );
|
||||
|
||||
|
||||
// Now add your own game specific client preferences as
|
||||
// well as any overloaded core defaults here.
|
||||
$PhysXLogWarnings = false;
|
||||
|
||||
|
||||
|
||||
// Finally load the preferences saved from the last
|
||||
// game execution if they exist.
|
||||
if ( $platform !$= "xenon" )
|
||||
{
|
||||
if ( isFile( "./prefs.cs" ) )
|
||||
exec( "./prefs.cs" );
|
||||
}
|
||||
else
|
||||
{
|
||||
echo( "Not loading client prefs.cs on Xbox360" );
|
||||
}
|
||||
54
Templates/Full/game/scripts/client/game.cs
Normal file
54
Templates/Full/game/scripts/client/game.cs
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Game start / end events sent from the server
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
function clientCmdGameStart(%seq)
|
||||
{
|
||||
PlayerListGui.zeroScores();
|
||||
ControlsHelpDlg.toggle();
|
||||
}
|
||||
|
||||
function clientCmdGameEnd(%seq)
|
||||
{
|
||||
// Stop local activity... the game will be destroyed on the server
|
||||
sfxStopAll();
|
||||
|
||||
if ((!EditorIsActive() && !GuiEditorIsActive()))
|
||||
{
|
||||
// Copy the current scores from the player list into the
|
||||
// end game gui (bit of a hack for now).
|
||||
EndGameGuiList.clear();
|
||||
for (%i = 0; %i < PlayerListGuiList.rowCount(); %i++)
|
||||
{
|
||||
%text = PlayerListGuiList.getRowText(%i);
|
||||
%id = PlayerListGuiList.getRowId(%i);
|
||||
EndGameGuiList.addRow(%id, %text);
|
||||
}
|
||||
EndGameGuiList.sortNumerical(1, false);
|
||||
|
||||
// Display the end-game screen
|
||||
Canvas.setContent(EndGameGui);
|
||||
}
|
||||
}
|
||||
194
Templates/Full/game/scripts/client/init.cs
Normal file
194
Templates/Full/game/scripts/client/init.cs
Normal file
|
|
@ -0,0 +1,194 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// 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 " @ $appName @ ": Client Scripts ---------");
|
||||
|
||||
// Make sure this variable reflects the correct state.
|
||||
$Server::Dedicated = false;
|
||||
|
||||
// Game information used to query the master server
|
||||
$Client::GameTypeQuery = $appName;
|
||||
$Client::MissionTypeQuery = "Any";
|
||||
|
||||
exec("art/gui/customProfiles.cs"); // override the base profiles if necessary
|
||||
|
||||
// The common module provides basic client functionality
|
||||
initBaseClient();
|
||||
|
||||
// Use our prefs to configure our Canvas/Window
|
||||
configureCanvas();
|
||||
|
||||
// Load up the Game GUIs
|
||||
exec("art/gui/defaultGameProfiles.cs");
|
||||
exec("art/gui/PlayGui.gui");
|
||||
exec("art/gui/ChatHud.gui");
|
||||
exec("art/gui/playerList.gui");
|
||||
exec("art/gui/hudlessGui.gui");
|
||||
exec("art/gui/controlsHelpDlg.gui");
|
||||
|
||||
// Load up the shell GUIs
|
||||
if($platform !$= "xenon") // Use the unified shell instead
|
||||
exec("art/gui/mainMenuGui.gui");
|
||||
exec("art/gui/joinServerDlg.gui");
|
||||
exec("art/gui/endGameGui.gui");
|
||||
exec("art/gui/StartupGui.gui");
|
||||
|
||||
// Gui scripts
|
||||
exec("./playerList.cs");
|
||||
exec("./chatHud.cs");
|
||||
exec("./messageHud.cs");
|
||||
exec("scripts/gui/playGui.cs");
|
||||
exec("scripts/gui/startupGui.cs");
|
||||
|
||||
// Client scripts
|
||||
exec("./client.cs");
|
||||
exec("./game.cs");
|
||||
exec("./missionDownload.cs");
|
||||
exec("./serverConnection.cs");
|
||||
|
||||
// Load useful Materials
|
||||
exec("./shaders.cs");
|
||||
|
||||
// Default player key bindings
|
||||
exec("./default.bind.cs");
|
||||
|
||||
if (isFile("./config.cs"))
|
||||
exec("./config.cs");
|
||||
|
||||
loadMaterials();
|
||||
|
||||
// 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.
|
||||
setDefaultFov( $pref::Player::defaultFov );
|
||||
setZoomSpeed( $pref::Player::zoomSpeed );
|
||||
|
||||
if( isFile( "./audioData.cs" ) )
|
||||
exec( "./audioData.cs" );
|
||||
|
||||
// Start up the main menu... this is separated out into a
|
||||
// method for easier mod override.
|
||||
|
||||
if ($startWorldEditor || $startGUIEditor) {
|
||||
// Editor GUI's will start up in the primary main.cs once
|
||||
// engine is initialized.
|
||||
return;
|
||||
}
|
||||
|
||||
// Connect to server if requested.
|
||||
if ($JoinGameAddress !$= "") {
|
||||
// If we are instantly connecting to an address, load the
|
||||
// loading GUI then attempt the connect.
|
||||
loadLoadingGui();
|
||||
connect($JoinGameAddress, "", $Pref::Player::Name);
|
||||
}
|
||||
else {
|
||||
// Otherwise go to the splash screen.
|
||||
Canvas.setCursor("DefaultCursor");
|
||||
loadStartup();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
function loadMainMenu()
|
||||
{
|
||||
// Startup the client with the Main menu...
|
||||
if (isObject( MainMenuGui ))
|
||||
Canvas.setContent( MainMenuGui );
|
||||
else if (isObject( UnifiedMainMenuGui ))
|
||||
Canvas.setContent( UnifiedMainMenuGui );
|
||||
Canvas.setCursor("DefaultCursor");
|
||||
|
||||
// first check if we have a level file to load
|
||||
if ($levelToLoad !$= "")
|
||||
{
|
||||
%levelFile = "levels/";
|
||||
%ext = getSubStr($levelToLoad, strlen($levelToLoad) - 3, 3);
|
||||
if(%ext !$= "mis")
|
||||
%levelFile = %levelFile @ $levelToLoad @ ".mis";
|
||||
else
|
||||
%levelFile = %levelFile @ $levelToLoad;
|
||||
|
||||
// Clear out the $levelToLoad so we don't attempt to load the level again
|
||||
// later on.
|
||||
$levelToLoad = "";
|
||||
|
||||
// let's make sure the file exists
|
||||
%file = findFirstFile(%levelFile);
|
||||
|
||||
if(%file !$= "")
|
||||
createAndConnectToLocalServer( "SinglePlayer", %file );
|
||||
}
|
||||
}
|
||||
|
||||
function loadLoadingGui(%displayText)
|
||||
{
|
||||
Canvas.setContent("LoadingGui");
|
||||
LoadingProgress.setValue(1);
|
||||
|
||||
if (%displayText !$= "")
|
||||
{
|
||||
LoadingProgressTxt.setValue(%displayText);
|
||||
}
|
||||
else
|
||||
{
|
||||
LoadingProgressTxt.setValue("WAITING FOR SERVER");
|
||||
}
|
||||
|
||||
Canvas.repaint();
|
||||
}
|
||||
130
Templates/Full/game/scripts/client/messageHud.cs
Normal file
130
Templates/Full/game/scripts/client/messageHud.cs
Normal file
|
|
@ -0,0 +1,130 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Enter Chat Message Hud
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
function MessageHud::open(%this)
|
||||
{
|
||||
%offset = 6;
|
||||
|
||||
if(%this.isVisible())
|
||||
return;
|
||||
|
||||
if(%this.isTeamMsg)
|
||||
%text = "TEAM:";
|
||||
else
|
||||
%text = "GLOBAL:";
|
||||
|
||||
MessageHud_Text.setValue(%text);
|
||||
|
||||
%windowPos = "0 " @ ( getWord( outerChatHud.position, 1 ) + getWord( outerChatHud.extent, 1 ) + 1 );
|
||||
%windowExt = getWord( OuterChatHud.extent, 0 ) @ " " @ getWord( MessageHud_Frame.extent, 1 );
|
||||
|
||||
%textExtent = getWord(MessageHud_Text.extent, 0) + 14;
|
||||
%ctrlExtent = getWord(MessageHud_Frame.extent, 0);
|
||||
|
||||
Canvas.pushDialog(%this);
|
||||
|
||||
messageHud_Frame.position = %windowPos;
|
||||
messageHud_Frame.extent = %windowExt;
|
||||
MessageHud_Edit.position = setWord(MessageHud_Edit.position, 0, %textExtent + %offset);
|
||||
MessageHud_Edit.extent = setWord(MessageHud_Edit.extent, 0, %ctrlExtent - %textExtent - (2 * %offset));
|
||||
|
||||
%this.setVisible(true);
|
||||
deactivateKeyboard();
|
||||
MessageHud_Edit.makeFirstResponder(true);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
function MessageHud::close(%this)
|
||||
{
|
||||
if(!%this.isVisible())
|
||||
return;
|
||||
|
||||
Canvas.popDialog(%this);
|
||||
%this.setVisible(false);
|
||||
if ( $enableDirectInput )
|
||||
activateKeyboard();
|
||||
MessageHud_Edit.setValue("");
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
function MessageHud::toggleState(%this)
|
||||
{
|
||||
if(%this.isVisible())
|
||||
%this.close();
|
||||
else
|
||||
%this.open();
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
function MessageHud_Edit::onEscape(%this)
|
||||
{
|
||||
MessageHud.close();
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
function MessageHud_Edit::eval(%this)
|
||||
{
|
||||
%text = collapseEscape(trim(%this.getValue()));
|
||||
|
||||
if(%text !$= "")
|
||||
{
|
||||
if(MessageHud.isTeamMsg)
|
||||
commandToServer('teamMessageSent', %text);
|
||||
else
|
||||
commandToServer('messageSent', %text);
|
||||
}
|
||||
|
||||
MessageHud.close();
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// MessageHud key handlers
|
||||
|
||||
function toggleMessageHud(%make)
|
||||
{
|
||||
if(%make)
|
||||
{
|
||||
MessageHud.isTeamMsg = false;
|
||||
MessageHud.toggleState();
|
||||
}
|
||||
}
|
||||
|
||||
function teamMessageHud(%make)
|
||||
{
|
||||
if(%make)
|
||||
{
|
||||
MessageHud.isTeamMsg = true;
|
||||
MessageHud.toggleState();
|
||||
}
|
||||
}
|
||||
221
Templates/Full/game/scripts/client/missionDownload.cs
Normal file
221
Templates/Full/game/scripts/client/missionDownload.cs
Normal file
|
|
@ -0,0 +1,221 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Mission Loading & Mission Info
|
||||
// The mission loading server handshaking is handled by the
|
||||
// core/scripts/client/missingLoading.cs. This portion handles the interface
|
||||
// with the game GUI.
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Loading Phases:
|
||||
// Phase 1: Download Datablocks
|
||||
// Phase 2: Download Ghost Objects
|
||||
// Phase 3: Scene Lighting
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Phase 1
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
function onMissionDownloadPhase1(%missionName, %musicTrack)
|
||||
{
|
||||
// Load the post effect presets for this mission.
|
||||
%path = "levels/" @ fileBase( %missionName ) @ $PostFXManager::fileExtension;
|
||||
if ( isScriptFile( %path ) )
|
||||
postFXManager::loadPresetHandler( %path );
|
||||
else
|
||||
PostFXManager::settingsApplyDefaultPreset();
|
||||
|
||||
// Close and clear the message hud (in case it's open)
|
||||
if ( isObject( MessageHud ) )
|
||||
MessageHud.close();
|
||||
|
||||
// Reset the loading progress controls:
|
||||
if ( !isObject( LoadingProgress ) )
|
||||
return;
|
||||
|
||||
LoadingProgress.setValue(0);
|
||||
LoadingProgressTxt.setValue("LOADING DATABLOCKS");
|
||||
Canvas.repaint();
|
||||
}
|
||||
|
||||
function onPhase1Progress(%progress)
|
||||
{
|
||||
if ( !isObject( LoadingProgress ) )
|
||||
return;
|
||||
|
||||
LoadingProgress.setValue(%progress);
|
||||
Canvas.repaint(33);
|
||||
}
|
||||
|
||||
function onPhase1Complete()
|
||||
{
|
||||
if ( !isObject( LoadingProgress ) )
|
||||
return;
|
||||
|
||||
LoadingProgress.setValue( 1 );
|
||||
Canvas.repaint();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Phase 2
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
function onMissionDownloadPhase2()
|
||||
{
|
||||
if ( !isObject( LoadingProgress ) )
|
||||
return;
|
||||
|
||||
LoadingProgress.setValue(0);
|
||||
LoadingProgressTxt.setValue("LOADING OBJECTS");
|
||||
Canvas.repaint();
|
||||
}
|
||||
|
||||
function onPhase2Progress(%progress)
|
||||
{
|
||||
if ( !isObject( LoadingProgress ) )
|
||||
return;
|
||||
|
||||
LoadingProgress.setValue(%progress);
|
||||
Canvas.repaint(33);
|
||||
}
|
||||
|
||||
function onPhase2Complete()
|
||||
{
|
||||
if ( !isObject( LoadingProgress ) )
|
||||
return;
|
||||
|
||||
LoadingProgress.setValue( 1 );
|
||||
Canvas.repaint();
|
||||
}
|
||||
|
||||
function onFileChunkReceived(%fileName, %ofs, %size)
|
||||
{
|
||||
if ( !isObject( LoadingProgress ) )
|
||||
return;
|
||||
|
||||
LoadingProgress.setValue(%ofs / %size);
|
||||
LoadingProgressTxt.setValue("Downloading " @ %fileName @ "...");
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Phase 3
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
function onMissionDownloadPhase3()
|
||||
{
|
||||
if ( !isObject( LoadingProgress ) )
|
||||
return;
|
||||
|
||||
LoadingProgress.setValue(0);
|
||||
LoadingProgressTxt.setValue("LIGHTING MISSION");
|
||||
Canvas.repaint();
|
||||
}
|
||||
|
||||
function onPhase3Progress(%progress)
|
||||
{
|
||||
if ( !isObject( LoadingProgress ) )
|
||||
return;
|
||||
|
||||
LoadingProgress.setValue(%progress);
|
||||
Canvas.repaint(33);
|
||||
}
|
||||
|
||||
function onPhase3Complete()
|
||||
{
|
||||
$lightingMission = false;
|
||||
|
||||
if ( !isObject( LoadingProgress ) )
|
||||
return;
|
||||
|
||||
LoadingProgressTxt.setValue("STARTING MISSION");
|
||||
LoadingProgress.setValue( 1 );
|
||||
Canvas.repaint();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Mission loading done!
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
function onMissionDownloadComplete()
|
||||
{
|
||||
// Client will shortly be dropped into the game, so this is
|
||||
// good place for any last minute gui cleanup.
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Before downloading a mission, the server transmits the mission
|
||||
// information through these messages.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
addMessageCallback( 'MsgLoadInfo', handleLoadInfoMessage );
|
||||
addMessageCallback( 'MsgLoadDescripition', handleLoadDescriptionMessage );
|
||||
addMessageCallback( 'MsgLoadInfoDone', handleLoadInfoDoneMessage );
|
||||
addMessageCallback( 'MsgLoadFailed', handleLoadFailedMessage );
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
function handleLoadInfoMessage( %msgType, %msgString, %mapName )
|
||||
{
|
||||
// Make sure the LoadingGUI is displayed
|
||||
if (Canvas.getContent() != LoadingGui.getId())
|
||||
{
|
||||
loadLoadingGui("LOADING MISSION FILE");
|
||||
}
|
||||
|
||||
// Clear all of the loading info lines:
|
||||
for( %line = 0; %line < LoadingGui.qLineCount; %line++ )
|
||||
LoadingGui.qLine[%line] = "";
|
||||
LoadingGui.qLineCount = 0;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
function handleLoadDescriptionMessage( %msgType, %msgString, %line )
|
||||
{
|
||||
LoadingGui.qLine[LoadingGui.qLineCount] = %line;
|
||||
LoadingGui.qLineCount++;
|
||||
|
||||
// Gather up all the previous lines, append the current one
|
||||
// and stuff it into the control
|
||||
%text = "<spush><font:Arial:16>";
|
||||
|
||||
for( %line = 0; %line < LoadingGui.qLineCount - 1; %line++ )
|
||||
%text = %text @ LoadingGui.qLine[%line] @ " ";
|
||||
%text = %text @ LoadingGui.qLine[%line] @ "<spop>";
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
function handleLoadInfoDoneMessage( %msgType, %msgString )
|
||||
{
|
||||
// This will get called after the last description line is sent.
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
function handleLoadFailedMessage( %msgType, %msgString )
|
||||
{
|
||||
MessageBoxOK( "Mission Load Failed", %msgString NL "Press OK to return to the Main Menu", "disconnect();" );
|
||||
}
|
||||
116
Templates/Full/game/scripts/client/playerList.cs
Normal file
116
Templates/Full/game/scripts/client/playerList.cs
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Hook into the client update messages to maintain our player list and scores.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
addMessageCallback('MsgClientJoin', handleClientJoin);
|
||||
addMessageCallback('MsgClientDrop', handleClientDrop);
|
||||
addMessageCallback('MsgClientScoreChanged', handleClientScoreChanged);
|
||||
|
||||
function handleClientJoin(%msgType, %msgString, %clientName, %clientId, %guid,
|
||||
%score, %kills, %deaths, %isAI, %isAdmin, %isSuperAdmin)
|
||||
{
|
||||
PlayerListGui.update(%clientId, detag(%clientName), %isSuperAdmin, %isAdmin,
|
||||
%isAI, %score, %kills, %deaths);
|
||||
}
|
||||
|
||||
function handleClientDrop(%msgType, %msgString, %clientName, %clientId)
|
||||
{
|
||||
PlayerListGui.remove(%clientId);
|
||||
}
|
||||
|
||||
function handleClientScoreChanged(%msgType, %msgString, %score, %kills, %deaths, %clientId)
|
||||
{
|
||||
PlayerListGui.updateScore(%clientId, %score, %kills, %deaths);
|
||||
echo(" score:"@%score@" kills:"@%kills@" deaths:"@%deaths);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// GUI methods
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
function PlayerListGui::update(%this, %clientId, %name, %isSuperAdmin, %isAdmin, %isAI, %score, %kills, %deaths)
|
||||
{
|
||||
// Build the row to display. The name can have ML control tags, including
|
||||
// color and font. Since we're not using an ML control here, we need to
|
||||
// strip them off.
|
||||
%tag = %isSuperAdmin ? "[Super]" :
|
||||
(%isAdmin ? "[Admin]" :
|
||||
(%isAI ? "[Bot]" :
|
||||
""));
|
||||
%text = StripMLControlChars(%name) SPC %tag TAB %score TAB %kills TAB %deaths;
|
||||
|
||||
// Update or add the player to the control
|
||||
if (PlayerListGuiList.getRowNumById(%clientId) == -1)
|
||||
PlayerListGuiList.addRow(%clientId, %text);
|
||||
else
|
||||
PlayerListGuiList.setRowById(%clientId, %text);
|
||||
|
||||
// Sorts by score
|
||||
PlayerListGuiList.sortNumerical(1, false);
|
||||
PlayerListGuiList.clearSelection();
|
||||
}
|
||||
|
||||
function PlayerListGui::updateScore(%this, %clientId, %score, %kills, %deaths)
|
||||
{
|
||||
%text = PlayerListGuiList.getRowTextById(%clientId);
|
||||
%text = setField(%text, 1, %score);
|
||||
%text = setField(%text, 2, %kills);
|
||||
%text = setField(%text, 3, %deaths);
|
||||
PlayerListGuiList.setRowById(%clientId, %text);
|
||||
PlayerListGuiList.sortNumerical(1, false);
|
||||
PlayerListGuiList.clearSelection();
|
||||
}
|
||||
|
||||
function PlayerListGui::remove(%this, %clientId)
|
||||
{
|
||||
PlayerListGuiList.removeRowById(%clientId);
|
||||
}
|
||||
|
||||
function PlayerListGui::toggle(%this)
|
||||
{
|
||||
if (%this.isAwake())
|
||||
Canvas.popDialog(%this);
|
||||
else
|
||||
Canvas.pushDialog(%this);
|
||||
}
|
||||
|
||||
function PlayerListGui::clear(%this)
|
||||
{
|
||||
// Override to clear the list.
|
||||
PlayerListGuiList.clear();
|
||||
}
|
||||
|
||||
function PlayerListGui::zeroScores(%this)
|
||||
{
|
||||
for (%i = 0; %i < PlayerListGuiList.rowCount(); %i++)
|
||||
{
|
||||
%text = PlayerListGuiList.getRowText(%i);
|
||||
%text = setField(%text, 1, "0");
|
||||
%text = setField(%text, 2, "0");
|
||||
%text = setField(%text, 3, "0");
|
||||
PlayerListGuiList.setRowById(PlayerListGuiList.getRowId(%i), %text);
|
||||
}
|
||||
PlayerListGuiList.clearSelection();
|
||||
}
|
||||
228
Templates/Full/game/scripts/client/serverConnection.cs
Normal file
228
Templates/Full/game/scripts/client/serverConnection.cs
Normal file
|
|
@ -0,0 +1,228 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// Functions dealing with connecting to a server
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Server connection error
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
addMessageCallback( 'MsgConnectionError', handleConnectionErrorMessage );
|
||||
|
||||
function handleConnectionErrorMessage(%msgType, %msgString, %msgError)
|
||||
{
|
||||
// On connect the server transmits a message to display if there
|
||||
// are any problems with the connection. Most connection errors
|
||||
// are game version differences, so hopefully the server message
|
||||
// will tell us where to get the latest version of the game.
|
||||
$ServerConnectionErrorMessage = %msgError;
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// GameConnection client callbacks
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
function GameConnection::initialControlSet(%this)
|
||||
{
|
||||
echo ("*** Initial Control Object");
|
||||
|
||||
// The first control object has been set by the server
|
||||
// and we are now ready to go.
|
||||
|
||||
// first check if the editor is active
|
||||
if (!isToolBuild() || !Editor::checkActiveLoadDone())
|
||||
{
|
||||
if (Canvas.getContent() != PlayGui.getId())
|
||||
{
|
||||
Canvas.setContent(PlayGui);
|
||||
ControlsHelpDlg.toggle();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function GameConnection::onControlObjectChange(%this)
|
||||
{
|
||||
echo ("*** Control Object Changed");
|
||||
|
||||
// Reset the current FOV to match the new object
|
||||
// and turn off any current zoom.
|
||||
resetCurrentFOV();
|
||||
turnOffZoom();
|
||||
}
|
||||
|
||||
function GameConnection::setLagIcon(%this, %state)
|
||||
{
|
||||
if (%this.getAddress() $= "local")
|
||||
return;
|
||||
LagIcon.setVisible(%state $= "true");
|
||||
}
|
||||
|
||||
function GameConnection::onFlash(%this, %state)
|
||||
{
|
||||
if (isObject(FlashFx))
|
||||
{
|
||||
if (%state)
|
||||
{
|
||||
FlashFx.enable();
|
||||
}
|
||||
else
|
||||
{
|
||||
FlashFx.disable();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Called on the new connection object after connect() succeeds.
|
||||
function GameConnection::onConnectionAccepted(%this)
|
||||
{
|
||||
// Called on the new connection object after connect() succeeds.
|
||||
LagIcon.setVisible(false);
|
||||
|
||||
// Startup the physics world on the client before any
|
||||
// datablocks and objects are ghosted over.
|
||||
physicsInitWorld( "client" );
|
||||
}
|
||||
|
||||
function GameConnection::onConnectionTimedOut(%this)
|
||||
{
|
||||
// Called when an established connection times out
|
||||
disconnectedCleanup();
|
||||
MessageBoxOK( "TIMED OUT", "The server connection has timed out.");
|
||||
}
|
||||
|
||||
function GameConnection::onConnectionDropped(%this, %msg)
|
||||
{
|
||||
// Established connection was dropped by the server
|
||||
disconnectedCleanup();
|
||||
MessageBoxOK( "DISCONNECT", "The server has dropped the connection: " @ %msg);
|
||||
}
|
||||
|
||||
function GameConnection::onConnectionError(%this, %msg)
|
||||
{
|
||||
// General connection error, usually raised by ghosted objects
|
||||
// initialization problems, such as missing files. We'll display
|
||||
// the server's connection error message.
|
||||
disconnectedCleanup();
|
||||
MessageBoxOK( "DISCONNECT", $ServerConnectionErrorMessage @ " (" @ %msg @ ")" );
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Connection Failed Events
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
function GameConnection::onConnectRequestRejected( %this, %msg )
|
||||
{
|
||||
switch$(%msg)
|
||||
{
|
||||
case "CR_INVALID_PROTOCOL_VERSION":
|
||||
%error = "Incompatible protocol version: Your game version is not compatible with this server.";
|
||||
case "CR_INVALID_CONNECT_PACKET":
|
||||
%error = "Internal Error: badly formed network packet";
|
||||
case "CR_YOUAREBANNED":
|
||||
%error = "You are not allowed to play on this server.";
|
||||
case "CR_SERVERFULL":
|
||||
%error = "This server is full.";
|
||||
case "CHR_PASSWORD":
|
||||
// XXX Should put up a password-entry dialog.
|
||||
if ($Client::Password $= "")
|
||||
MessageBoxOK( "REJECTED", "That server requires a password.");
|
||||
else {
|
||||
$Client::Password = "";
|
||||
MessageBoxOK( "REJECTED", "That password is incorrect.");
|
||||
}
|
||||
return;
|
||||
case "CHR_PROTOCOL":
|
||||
%error = "Incompatible protocol version: Your game version is not compatible with this server.";
|
||||
case "CHR_CLASSCRC":
|
||||
%error = "Incompatible game classes: Your game version is not compatible with this server.";
|
||||
case "CHR_INVALID_CHALLENGE_PACKET":
|
||||
%error = "Internal Error: Invalid server response packet";
|
||||
default:
|
||||
%error = "Connection error. Please try another server. Error code: (" @ %msg @ ")";
|
||||
}
|
||||
disconnectedCleanup();
|
||||
MessageBoxOK( "REJECTED", %error);
|
||||
}
|
||||
|
||||
function GameConnection::onConnectRequestTimedOut(%this)
|
||||
{
|
||||
disconnectedCleanup();
|
||||
MessageBoxOK( "TIMED OUT", "Your connection to the server timed out." );
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Disconnect
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
function disconnect()
|
||||
{
|
||||
// We need to stop the client side simulation
|
||||
// else physics resources will not cleanup properly.
|
||||
physicsStopSimulation( "client" );
|
||||
|
||||
// Delete the connection if it's still there.
|
||||
if (isObject(ServerConnection))
|
||||
ServerConnection.delete();
|
||||
|
||||
disconnectedCleanup();
|
||||
|
||||
// Call destroyServer in case we're hosting
|
||||
destroyServer();
|
||||
}
|
||||
|
||||
function disconnectedCleanup()
|
||||
{
|
||||
// End mission, if it's running.
|
||||
|
||||
if( $Client::missionRunning )
|
||||
clientEndMission();
|
||||
|
||||
// Disable mission lighting if it's going, this is here
|
||||
// in case we're disconnected while the mission is loading.
|
||||
|
||||
$lightingMission = false;
|
||||
$sceneLighting::terminateLighting = true;
|
||||
|
||||
// Clear misc script stuff
|
||||
HudMessageVector.clear();
|
||||
|
||||
//
|
||||
LagIcon.setVisible(false);
|
||||
PlayerListGui.clear();
|
||||
|
||||
// Clear all print messages
|
||||
clientCmdclearBottomPrint();
|
||||
clientCmdClearCenterPrint();
|
||||
|
||||
// Back to the launch screen
|
||||
if (isObject( MainMenuGui ))
|
||||
Canvas.setContent( MainMenuGui );
|
||||
else if (isObject( UnifiedMainMenuGui ))
|
||||
Canvas.setContent( UnifiedMainMenuGui );
|
||||
|
||||
// We can now delete the client physics simulation.
|
||||
physicsDestroyWorld( "client" );
|
||||
}
|
||||
25
Templates/Full/game/scripts/client/shaders.cs
Normal file
25
Templates/Full/game/scripts/client/shaders.cs
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
//*****************************************************************************
|
||||
// Shaders ( For Custom Materials )
|
||||
//*****************************************************************************
|
||||
Loading…
Add table
Add a link
Reference in a new issue