109 lines
3.2 KiB
C#
109 lines
3.2 KiB
C#
|
//-----------------------------------------------------------------------------
|
|||
|
// Torque Game Engine
|
|||
|
//
|
|||
|
// Copyright (c) 2001 GarageGames.Com
|
|||
|
// Portions Copyright (c) 2001 by Sierra Online, Inc.
|
|||
|
//-----------------------------------------------------------------------------
|
|||
|
|
|||
|
//-----------------------------------------------------------------------------
|
|||
|
// Misc. server commands avialable to clients
|
|||
|
//-----------------------------------------------------------------------------
|
|||
|
|
|||
|
//-----------------------------------------------------------------------------
|
|||
|
|
|||
|
function serverCmdToggleCamera(%client)
|
|||
|
{
|
|||
|
if ($Server::TestCheats || $Server::ServerType $= "SinglePlayer")
|
|||
|
{
|
|||
|
%control = %client.getControlObject();
|
|||
|
if (%control == %client.player)
|
|||
|
{
|
|||
|
%control = %client.camera;
|
|||
|
%control.mode = toggleCameraFly;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
%control = %client.player;
|
|||
|
%control.mode = observerFly;
|
|||
|
}
|
|||
|
%client.setControlObject(%control);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function serverCmdDropPlayerAtCamera(%client)
|
|||
|
{
|
|||
|
if ($Server::TestCheats)
|
|||
|
{
|
|||
|
%client.player.setTransform(%client.camera.getTransform());
|
|||
|
%client.player.setVelocity("0 0 0");
|
|||
|
%client.setControlObject(%client.player);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function serverCmdDropCameraAtPlayer(%client)
|
|||
|
{
|
|||
|
if ($Server::TestCheats)
|
|||
|
{
|
|||
|
%client.camera.setTransform(%client.player.getEyeTransform());
|
|||
|
%client.camera.setVelocity("0 0 0");
|
|||
|
%client.setControlObject(%client.camera);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//-----------------------------------------------------------------------------
|
|||
|
|
|||
|
function serverCmdSuicide(%client)
|
|||
|
{
|
|||
|
%client.player.kill("Suicide");
|
|||
|
}
|
|||
|
|
|||
|
function serverCmdPlayCel(%client,%anim)
|
|||
|
{
|
|||
|
if (isObject(%client.player))
|
|||
|
%client.player.playCelAnimation(%anim);
|
|||
|
}
|
|||
|
|
|||
|
function serverCmdPlayDeath(%client)
|
|||
|
{
|
|||
|
if (isObject(%client.player))
|
|||
|
%client.player.playDeathAnimation();
|
|||
|
}
|
|||
|
|
|||
|
function serverCmdSelectObject(%client, %mouseVec, %cameraPoint)
|
|||
|
{
|
|||
|
//Determine how far should the picking ray extend into the world?
|
|||
|
%selectRange = 200;
|
|||
|
// scale mouseVec to the range the player is able to select with mouse
|
|||
|
%mouseScaled = VectorScale(%mouseVec, %selectRange);
|
|||
|
// cameraPoint = the world position of the camera
|
|||
|
// rangeEnd = camera point + length of selectable range
|
|||
|
%rangeEnd = VectorAdd(%cameraPoint, %mouseScaled);
|
|||
|
|
|||
|
// Search for anything that is selectable <20> below are some examples
|
|||
|
%searchMasks = $TypeMasks::PlayerObjectType | $TypeMasks::CorpseObjectType |
|
|||
|
$TypeMasks::ItemObjectType | $TypeMasks::TriggerObjectType;
|
|||
|
|
|||
|
// Search for objects within the range that fit the masks above
|
|||
|
// If we are in first person mode, we make sure player is not selectable by setting fourth parameter (exempt
|
|||
|
// from collisions) when calling ContainerRayCast
|
|||
|
%player = %client.player;
|
|||
|
if ($firstPerson)
|
|||
|
{
|
|||
|
%scanTarg = ContainerRayCast (%cameraPoint, %rangeEnd, %searchMasks, %player);
|
|||
|
}
|
|||
|
else //3rd person - player is selectable in this case
|
|||
|
{
|
|||
|
%scanTarg = ContainerRayCast (%cameraPoint, %rangeEnd, %searchMasks);
|
|||
|
}
|
|||
|
|
|||
|
// a target in range was found so select it
|
|||
|
if (%scanTarg)
|
|||
|
{
|
|||
|
%targetObject = firstWord(%scanTarg);
|
|||
|
|
|||
|
%client.setSelectedObj(%targetObject);
|
|||
|
}
|
|||
|
}
|
|||
|
|