point_viewcontrol
Class hierarchy |
---|
CTriggerCamera |
triggers.cpp
|
point_viewcontrol
is a point entity available in all Source games. It is a camera entity that controls the player's view. While it's active, the player will see out of the camera.
Note:In , the camera chooses a random
point_viewcontrol
entity to look through when the client has not chosen a team yet. This is equivalent to info_player_observer
.Note:This entity has many problems. See the discussion page for full descriptions and fixes.
Warning:For ,
point_viewcontrol
makes the player invulnerable while enabled on camera. However, point_viewcontrol_survivor
and point_viewcontrol_multiplayer
don't.Bug:The camera doesn't follow its path correctly. It will not follow paths at all if it doesn't have an
Entity to Look At
set. [todo tested in?]Bug:The camera ignores the
New Train Speed
keyvalue and Teleport to THIS path_corner
spawnflag on path_tracks. [todo tested in?]Bug:The camera fails to function when parented in Hammer, logic_measure_movement can be used as a workaround. (Fixed in and onward.) [todo tested in?]
Bug:In , if the map switches during intermission while a player has a camera enabled, the camera will persist into the next map! To fix this, you can copy the following VScript code to a .nut file and assign it to every point_viewcontrol as an Entity Script.
[todo tested in?]
if (!("SetInputHook" in getroottable()))
{
::_PostInputScope <- null;
::_PostInputFunc <- null;
::SetInputHook <- function(entity, input, pre_func, post_func)
{
entity.ValidateScriptScope();
local scope = entity.GetScriptScope();
if (post_func)
{
local wrapper_func = function()
{
_PostInputScope = scope;
_PostInputFunc = post_func;
if (pre_func)
return pre_func.call(scope);
return true;
};
scope["Input" + input] <- wrapper_func;
scope["Input" + input.tolower()] <- wrapper_func;
}
else if (pre_func)
{
scope["Input" + input] <- pre_func;
scope["Input" + input.tolower()] <- pre_func;
}
}
getroottable().setdelegate(
{
_delslot = function(k)
{
if (_PostInputScope && k == "activator" && "activator" in this)
{
_PostInputFunc.call(_PostInputScope);
_PostInputFunc = null;
}
rawdelete(k);
}
});
}
if (!("CameraFixer" in getroottable()))
{
::_CameraFixLifestate <- 0;
::CameraFixPre <- function()
{
if (activator)
{
_CameraFixLifestate = NetProps.GetPropInt(activator, "m_lifeState");
NetProps.SetPropInt(activator, "m_lifeState", 0);
NetProps.SetPropEntity(self, "m_hPlayer", activator);
}
return true;
}
::CameraFixPost <- function()
{
if (activator)
{
NetProps.SetPropInt(activator, "m_lifeState", _CameraFixLifestate);
NetProps.SetPropInt(activator, "m_takedamage", 2);
}
}
::CameraDisableAll <- function()
{
for (local player; player = Entities.FindByClassname(player, "player");)
EntFireByHandle(CameraFixer, "Disable", "", -1, player, player);
EntFireByHandle(CameraFixer, "Kill", "", 1, null, null);
}
::CameraFixer <- Entities.CreateByClassname("point_viewcontrol");
::CameraFixer.KeyValueFromString("classname", "camera_fixer");
::CameraFixer.AddEFlags(1);
SetInputHook(CameraFixer, "Disable", CameraFixPre, CameraFixPost);
SpawnEntityFromTable("logic_eventlistener",
{
classname = "move_rope",
eventname = "teamplay_round_start",
IsEnabled = true,
OnEventFired = "worldspawn,CallScriptFunction,CameraDisableAll,-1,-1",
});
SpawnEntityFromTable("logic_eventlistener",
{
classname = "move_rope",
eventname = "recalculate_holidays",
IsEnabled = true,
OnEventFired = "worldspawn,RunScriptCode,if (GetRoundState() == 8) CameraDisableAll(),0.1,-1",
});
}
function Precache()
{
SetInputHook(self, "Disable", CameraFixPre, CameraFixPost);
}
Contents
Keyvalues
- Name
(targetname)
<string> - The name that other entities refer to this entity by, via Inputs/Outputs or other keyvalues (e.g.
parentname
ortarget
).
Also displayed in Hammer's 2D views and Entity Report.See also: Generic Keyvalues, Inputs and Outputs available to all entities
- Entity to Look At
(target)
<targetname> - Name of the entity that the camera should point at and track while active.
- Target Attachment Name
(targetattachment)
<string> - If set, the camera will focus on the specified attachment on the 'Entity to Look At'.
- Hold Time
(wait)
<integer> - The amount of time the camera should control the player's view for, after which it deactivates itself. If the camera should stay active until told to deactive, set the 'Infinite Hold Time' spawnflag.
- Path Corner
(moveto)
<targetname> - The first path corner in a track that the camera should move along once it's activated. If not specified, the camera won't move.
- Interpolate Position To Player
(interpolatepositiontoplayer)
<boolean> (only in ) - Gradually interpolate player's position to here on start.
- Initial Speed
(speed)
<string> - The starting speed that the camera moves at, if it's on a path track.
- Acceleration units/sec^2
(acceleration)
<string> - The speed at which the camera accelerates to path corner's desired speeds.
- Stop Deceleration units/sec^2
(deceleration)
<string> - The speed at which the camera decelerates to path corner's desired speeds.
- FOV
(fov)
<float> (in all games since ) (also in ) !FGD - The FOV when using this camera.
- FOV rate
(fov_rate)
<float> (in all games since ) (also in ) !FGD - How fast we change to the new FOV.
- Tracking Speed of the camera
(trackspeed)
<float> (in all games since ) (also in ) - The speed that the camera tries to follow its look target.
- Pitch Yaw Roll (Y Z X)
(angles)
<angle> - This entity's orientation in the world. Pitch is rotation around the Y axis, yaw is the rotation around the Z axis, roll is the rotation around the X axis.
Flags
Start At Player : [1]
- Start the camera at the player's position. Bug:Breaks the camera movement if the player was still moving when the camera activated. [todo tested in?]
Follow Player : [2]
- This is the same as if you set the lookat target to !player. Bug:Causes camera issues in multiplayer. [todo tested in?]
Freeze Player : [4]
- Stop recognizing input from the player.
Infinite Hold Time : [8]
- Ignore the hold time, and stay activated until explicitly disabled.
Snap to goal angles : [16]
Make Player non-solid : [32]
Interruptable by Player : [64]
- If the player presses +Use, disable.
Set FOV : [128]
(in all games since ) (also in ) !FGD
All Players : [128]
(only in )
- Controls the view of all players. Note:
point_viewcontrol_multiplayer
can be used instead in Left 4 Dead and later.
Inputs
Enable
- Enable the
point_viewcontrol
, and start controlling the player's view.
Disable
- Disable the
point_viewcontrol
, and stop controlling the player's view.
SetTarget
<string> (in all games since ) (also in )- Set a new target for the camera to point at.
SetTargetAttachment
<string> (in all games since ) (also in )- Set a new attachment on the target for the camera to point at.
TeleportToView
(in all games since ) (also in )- Teleport the player to the current position of the camera.
SetTrackSpeed
<float> (in all games since ) (also in )- Set the speed that the camera will try to track it's target.
SetPath
<string> (in all games since ) (also in )- Have the camera start following a new path.
Outputs
OnEndFollow
- Fired when the
point_viewcontrol
deactivates, due to theDisable
input being received, theEntity to Look At
being destroyed, or theHold Time
expiring.