MoveCameraTo: Difference between revisions

From Wiki G1R-MP G1 Remake Multiplayer
Jump to navigation Jump to search
Document scripted camera API and events available from G1R:MP 0.1.3
 
Update 0.1.3 camera world placement, streaming safety and far camera test
 
Line 59: Line 59:
* Rotation interpolation uses shortest-angle transitions; FOV is interpolated as part of the pose.
* Rotation interpolation uses shortest-angle transitions; FOV is interpolated as part of the pose.
* Only the owning resource may change an already controlled camera. Server and client ownership are distinct, even when resource names match; use one side consistently for a camera sequence.
* Only the owning resource may change an already controlled camera. Server and client ownership are distinct, even when resource names match; use one side consistently for a camera sequence.
* Camera positions and complete paths/orbits must stay within 100 metres of the local character. Camera control does not move the character, change replication distance, freeze input, or enable remote-player spectating.
* Camera positions, paths and orbits have no distance limit relative to the local character. All world coordinates must remain finite and within -1,000,000 to 1,000,000 metres; the complete orbit extent is validated too. Camera control does not move the character, change replication distance, freeze input, or enable remote-player spectating.
* Use [[resetCameraPos]] to restore gameplay view. Resource stop, disconnect and world/character changes release camera ownership; see [[onClientCameraReset]].
* Use [[resetCameraPos]] to restore gameplay view. Resource stop, disconnect and world/character changes release camera ownership; see [[onClientCameraReset]].
* An applied acknowledgement confirms command handling, not that the resulting view has rendered. For a fresh read-back, request state after another frame or a short timer. See [[Scripted camera]] for lifecycle, acknowledgement and state-cache details.
* An applied acknowledgement confirms command handling, not rendering or completion of world streaming. For a fresh read-back, request state after another frame or a short timer. See [[Scripted camera]] for distant scenes, lifecycle, acknowledgement and state-cache details.


[[Category:Lua Functions]]
[[Category:Lua Functions]]
[[Category:Shared Functions]]
[[Category:Shared Functions]]
[[Category:Camera Functions]]
[[Category:Camera Functions]]

Latest revision as of 00:07, 9 September 2026

moveCameraTo

AVAILABLE FROM UPDATE 0.1.3
This function is available in G1R:MP 0.1.3 and later. The contract below includes the compatibility guarantees introduced in that update.

Interpolates the scripted camera from its current pose to a target position, rotation and FOV.

Syntax

-- Client-side
number|false moveCameraTo(table pose, number durationMs [, string easing = "smooth"])
-- Server-side
bool moveCameraTo(int playerId, table pose, number durationMs [, string easing = "smooth"])

Parameters

Name Type Required Description
playerId int yes Server-side only: the connected player whose local camera receives the command.
pose table yes Target pose using x/y/z, pitch/yaw/roll and fov. See side-specific defaults below.
durationMs int yes Whole milliseconds from 0 to 600,000; 0 performs an immediate transition.
easing string no One of linear, smooth, in or out. Defaults to smooth.

Returns

Client-side: a positive requestId, or false when validation or queuing fails. Wait for onClientCameraCommandResult to learn the execution result. Server-side: true only means validated and queued for the connected player; false means rejected. A server return value is not a client acknowledgement.

Examples

Read the local camera/player state before issuing the command. The command's own result arrives separately in onClientCameraCommandResult.

-- Client-side: run after the local world and player camera are ready.
local query
addEventHandler("onClientCameraCommandResult", resourceRoot,
    function(requestId, ok, phase, errorText, stateJson)
        if requestId ~= query then return end
        query = nil
        if not ok or phase ~= "state" then
            outputDebugString("Camera query failed: " .. tostring(errorText), 2)
            return
        end
        local state = getCameraState()
        if not state or not state.ready then return end
        moveCameraTo({x=state.playerX - 5, y=state.playerY + 3, z=state.playerZ + 3,
            pitch=-15, yaw=-30, roll=0, fov=70}, 3000, "smooth")
    end)
query = requestCameraState()
if not query then outputDebugString("Camera query was not queued", 2) end

Notes

  • Available in client-side and server-side resource scripts. Equivalent PascalCase spelling: MoveCameraTo.
  • Client-side pose fields omitted after a ready acknowledged state inherit that resource's cached pose. Without such a cache, all seven fields (x, y, z, pitch, yaw, roll, fov) are required. Server-side x/y/z are required and omitted angles default to 0, FOV to 90; there is no server camera cache.
  • Client success phases are applied followed by completed. A replacement movement, stop or reset can cancel the earlier movement; correlate results by requestId.
  • Rotation interpolation uses shortest-angle transitions; FOV is interpolated as part of the pose.
  • Only the owning resource may change an already controlled camera. Server and client ownership are distinct, even when resource names match; use one side consistently for a camera sequence.
  • Camera positions, paths and orbits have no distance limit relative to the local character. All world coordinates must remain finite and within -1,000,000 to 1,000,000 metres; the complete orbit extent is validated too. Camera control does not move the character, change replication distance, freeze input, or enable remote-player spectating.
  • Use resetCameraPos to restore gameplay view. Resource stop, disconnect and world/character changes release camera ownership; see onClientCameraReset.
  • An applied acknowledgement confirms command handling, not rendering or completion of world streaming. For a fresh read-back, request state after another frame or a short timer. See Scripted camera for distant scenes, lifecycle, acknowledgement and state-cache details.