===============================================================================
CameraSpot 111
Copyright 2002 by Mychaeel <mychaeel@planetunreal.com>
===============================================================================

Mail all bug reports and suggestions to Mychaeel <mychaeel@planetunreal.com>


===============================================================================
Info
===============================================================================

Remember Duke Nukem's surveillance cameras? When you approached and activated
them, they showed you another part of the map from a surveillance camera's
point of view, allowing you to check whether some door was open or closed,
where enemies were hiding or where a special item was located.

The CameraSpot actor does the same for Unreal Tournament maps, and more. When
triggered, the instigator's viewpoint switches to the CameraSpot; as soon as
the instigator leaves the trigger's radius, his/her viewpoint is switched back
to first-person view.

CameraSpots can be easily set up to monitor a fixed spot or to rotate slowly
back and forth in order to cover a larger area; or attach them to a mover to
create flyby sequences. CameraSpots can display an unzoomed view or zoom in as
closely as you wish. In addition, you can set a short descriptive caption that
is displayed at the bottom of the viewer's screen when watching through a
CameraSpot.


===============================================================================
Usage
===============================================================================

Load DM-CameraSpot in UnrealEd; this will also load the CameraSpot actor and
will make it available in the actor browser:

  Actor >> Keypoint >> CameraSpot

The CameraSpot actor will persist in the actor browser until you close
UnrealEd even if you load other maps after loading DM-CameraSpot. If you use
the CameraSpot actor in one of your own maps, UnrealEd will automatically embed
its code in MyLevel of your map. (Using this approach saves you and your map's
users from having to deal with an extra .u file bundled with your map,
including all of the usual caveats of extra .u files like version conflicts.)

To set up a CameraSpot, simply add it to your world and rotate it so that the
red arrow visible in UnrealEd points to the desired view direction.

  TIP  Navigate to the desired viewpoint in UnrealEd's 3D viewport. Click on
       the eye symbol that represents your current viewpoint and copy the
       values of the Rotation property (in Display) and the Location property
       (in Movement) to the CameraSpot's own Rotation and Location properties.

Then, add a Trigger to your world at the spot from where you would like the
player to be able to view through the CameraSpot. Set the Trigger's Event
property to the same arbitary name as the CameraSpot's Tag property contains.
By default, this is 'CameraSpot', but if you're using more than one CameraSpot
in your map, you can use any name you like as long as the Trigger's Event and
the corresponding CameraSpot's Tag match.

That's it. When a player touches the Trigger, his/her viewpoint will be
automatically switched to the CameraSpot's location and direction. When the
player moves away from the Trigger, he/she will switch back to first-person
view.

If you wish to set up the CameraSpot to automatically rotate or if you want to
change the default caption displayed when viewing through the CameraSpot, see
the documentation section below.


===============================================================================
Documentation
===============================================================================

  Caption       Descriptive caption that is displayed at the bottom of the
                player's screen when viewing through a CameraSpot. You can use
                this to tell the player which part of the map he/she is 
                viewing through this CameraSpot.
  
  CaptionColor  Select the color that is used for drawing the Caption on the
                viewer's screen.

  FieldOfView   Sets the field of view used for this CameraSpot. It defaults to
                90 degrees; if you set it to a smaller value, the view through
                the CameraSpot appears zoomed in.

  OverlayTexturesModulated
  OverlayTexturesTranslucent
                You can specify up to twelve textures for each of those
                properties which are painted in two layers on the player's
                screen while viewing through this CameraSpot. Textures will be
                stretched to fill the screen; multiple textures in either of
                these properties will be tiled for a higher resolution (just
                like Unreal Tournament's desktop image). If you don't want to
                display any overlay textures, set all elements of those two
                property arrays to None.

You can, of course, attach a CameraSpot to a mover by setting the CameraSpot's
AttachTag (in Movement) to the same value as the mover's Tag (in Events).

CameraSpots support three automatic rotation modes: Standing still (default),
rotating back and forth, and continuously rotating. The CameraSpot's actual
rotation mode is selected through the InitialState property (in Object).

  InitialState (in Object)

    RotateNone        CameraSpot points to the set direction without rotating.

    RotateToggle      CameraSpot rotates according to its RotationRate setting
                      for a given time, then stops briefly, then rotates back,
                      and so on. See below for details.

    RotateContinuous  CameraSpot rotates continuously according to its
                      RotationRate setting.

The RotationRate property determines the speed of rotation, measured as an
angle per second. A value of 65536 corresponds to a single full rotation in
Yaw, Pitch and Roll; for example, if you set Yaw to 65536, the CameraSpot will
revolve once per second around the Z axis. The CameraSpot's RotationRate is
preset to a rotation speed that will cover 45 degrees in 4 seconds.

If InitialState is set to RotateToggle, two more CameraSpot properties apply:

  TimeRotate  Specifies the number of seconds the camera rotates according to
              its RotationRate before rotating back. With the default settings
              of 4 seconds for TimeRotate and the default RotationRate, the
              CameraSpot will cover an area of 45 degrees starting from its
              original direction.

  TimeStill   Specifies the number of seconds the camera stands still after
              rotating for TimeRotate seconds. When TimeStill seconds have
              elapsed, the camera starts rotating back again. If you set
              TimeStill to 0, the camera won't wait before rotating back.

If you have questions or suggestions, feel free contact me by email.


===============================================================================
Versions
===============================================================================

CameraSpot 111
- Fixed problems that arose when the game programmatically reset a player's
  ViewTarget. Rather than sticking with that ViewTarget, the CameraSpot would
  reset it to the player him/herself.

CameraSpot 110
- Added OverlayTexturesModulated and OverlayTexturesTranslucent.
- Made the continuously rotating CameraSpot in the demo map RotateToggle.
- Fixed a nasty bug on clients in network games for RotateToggle which made the
  camera move with a multiple of its RotationRate. I must admit that I do not
  comprehend this bug. Anyway, the workaround I added does its duty.

CameraSpot 100
- Initial release.


===============================================================================
Bugs
===============================================================================

None known yet. If you find any, please drop me a line. Thanks.


===============================================================================
Copyright/Permissions
===============================================================================

CameraSpot    (c) 2002 by Mychaeel <mychaeel@planetunreal.com>
DM-CameraSpot (c) 2002 by Snowdog <metalscape@hotmail.com>

This component is freely available for noncommercial use and distribution 
through any electronic network, provided you include this documentation file.
For any other use and distribution please contact me for permission.
