GE Lua Documentation

Press F to search!

onPreRender

Definition


-- @/lua/ge/extensions/core/camera.lua:825
local function onPreRender(dtReal, dtSim, dtRaw)
  if not levelLoaded then return end

  local player = 0
  local veh = getPlayerVehicle(player)
  local vid = veh and veh:getId()

  -- fixup res if a reference in it has been altered
  resPos:set(camData.pos)
  resTargetPos:set(0, 0, 0)
  resRot:set(1,0,0,0)
  camData.res.pos = resPos
  camData.res.targetPos = resTargetPos
  camData.res.rot = resRot

  camData.veh = veh
  camData.vid = vid
  camData.dtSim = dtSim * M.speedFactor-- smoothed dt used by physics, includes time scaling
  camData.dtReal = dtReal * M.speedFactor -- smoothed gfx render dt
  camData.dtRaw = dtRaw  * M.speedFactor -- gfx render dt, in seconds from wall clock
  camData.dt = dtReal * M.speedFactor
  camData.prevPos:set(camData.pos)
  camData.prevVehPos:set(camData.vehPos)

  camData.openxrSessionRunning = render_openxr and render_openxr.isSessionRunning() or false
  if veh then
    camData.pos:set(veh:getPositionXYZ()) -- scene object position - this jumps on the floating point grid
    camData.vehPos:set(veh:getRefNodeAbsPositionXYZ()) -- vehicle's actual position on a double precision grid
  else
    camData.pos:set(0,0,0)
    camData.vehPos:set(0,0,0)
  end

  local paused = dtSim < 0.00001
  if paused then
    camData.teleported = false
  else
    camData.prevVel:set(camData.vel)
    camData.vel:set(camData.vehPos)
    camData.vel:setSub(camData.prevVehPos)
    camData.vel:setScaled(1/dtSim)
    camData.teleported = objectTeleported(camData.pos, camData.prevPos, camData.prevVel, dtSim)
    if camData.teleported then
      camData.vel:set(0,0,0)
    end
  end

  if veh then
    local vehicleName = veh:getField('name', '')
    if vehicleName ~= lastVehicleName then
      local lastVehicle = lastVehicleName and scenetree.findObject(lastVehicleName) or nil
      local lastVehicleId = lastVehicle and lastVehicle:getId() or nil
      vehicleChanged(lastVehicleId, vid)
      lastVehicleName = vehicleName
    end
  end

  if not configuration then return end

  camData.res.targetPos:set(camData.pos)   -- tracked target
  camData.res.fov = 60
  camData.res.nearClip = getLevelNearClip() or 0.1 -- choose a sane default if the level hasn't defined a nearclip

  -- update the selected camera
  local globalCam = getGlobalCameras()[activeGlobalCameraName]
  if globalCam then
    -- one of the global cameras
    if globalCam:update(camData) then
      extensions.hook("onCameraPreRender", camData)
    else
      setGlobalCameraByName(nil)
    end
  else
    -- one of the vehicle cameras
    local vdata = getVehicleData()[vid]
    if not vdata then
      --log("E", "", "No global cam used, and no vehicle exists either")
      return
    end
    local plvdata = core_vehicle_manager.getPlayerVehicleData()
    local isUnicycle = plvdata and plvdata.mainPartName == "unicycle"
    local camName = isUnicycle and "unicycle" or vdata.focusedCamName
    local cam = vdata.cameras[camName]
    if cam and vdata.focusedCamName then
      cam:update(camData)
      if not validateData(camData) and cam.init then cam:init() end -- if present, clean up NaN/infs in camera state, by re-initting it
    else
      local fallbackCamName = "orbit"
      local fallbackCam = vdata.cameras[fallbackCamName]
      if fallbackCam then
        log("E", "", "Vehicle cam \""..dumps(vdata.focusedCamName).."\" not found. Falling back to \""..dumps(fallbackCamName).."\"")
        setByName(0, fallbackCamName)
      else
        log("E", "", "Vehicle cam \""..dumps(vdata.focusedCamName).."\" not found. Fallback cam \""..dumps(fallbackCamName).."\" not found either. Falling back to free camera")
        commands.setFreeCamera()
      end
      return
    end
    camData.dt = camData.dtReal -- revert back to gfx dt, in case one filter switched it
  end

  -- running cameras
  for _,v in ipairs(getRunningCamsOrder()) do
    v.cam:update(camData)
  end

  MoveManager.yawRelative = 0
  MoveManager.pitchRelative = 0
  MoveManager.rollRelative = 0

  local clearAbsAxes = true
  -- keeps the camera moving for a set amount of time
  if absTranslateTimer then
    absTranslateTimer = absTranslateTimer + dtReal
    if absTranslateTimer < 0.05 then
      clearAbsAxes = false
    else
      absTranslateTimer = nil
    end
  end

  if clearAbsAxes then
    MoveManager.absXAxis = 0
    MoveManager.absYAxis = 0
    MoveManager.absZAxis = 0
  end

  updateCameraData(camData)

  if veh then setShadowLogWeight(veh) end
end

Callers

@/gameplay/missionTypes/collection/customNodes/collectionMarkersNode.lua

function C:onPreRender(dt)
  local cameraPos = core_camera.getPosition()
@/gameplay/missionTypes/scatterPickup/customNodes/scatterAnimatorNode.lua

function C:onPreRender(dt, dtSim)
  if not self.mgr.scatterPickup then return end
@/lua/ge/extensions/util/trackBuilder/splineTrack.lua
M.onCollectScreenshotMetadata = onCollectScreenshotMetadata
M.onPreRender = function(dt) transition.onPreRender(dt) end
@/lua/ge/extensions/scenario/demolitionDerby.lua
-- called before rendering a graphics frame
local function onPreRender(dt)
    local scenario = scenario_scenarios.getScenario()
@/lua/ge/extensions/flowgraph/nodes/vehicle/touchingStatic.lua

function C:onPreRender()
  if self.active and self.pinIn.debugMode.value then
@/lua/ge/extensions/gameplay/crawl/debug.lua

local function onPreRender(dtReal, dtSim, dtRaw)
  if not enableDebugWindow then return end
@/lua/ge/extensions/editor/roadEditor.lua

local function onPreRender()
  if not editor.editMode or (editor.editMode.displayName ~= editModeName) then
@/gameplay/missionTypes/cannon/customNodes/MarkersNode.lua

function C:onPreRender()
  if self.markers then
@/lua/ge/extensions/editor/veMain.lua
-- Update data for other vehicle editors to use
local function onPreRender(dtReal, dtSim, dtRaw)
  if not vEditor.vehicle then
@/lua/ge/extensions/scenario/scenarios.lua

local function onPreRender(dt, dtSim)
  if not scenario then return end
@/lua/ge/ge_utils.lua

local function onPreRender(dtReal, dtSim, dtRaw)
  if(fpsLimiter:update(dtReal)) then
@/lua/ge/extensions/gameplay/crashTest/scenarioManager.lua

local function onPreRender(dt, dtSim)
  if markers then
@/lua/ge/extensions/gameplay/statisticModules/watchJturn.lua

local function onPreRender()
  if myvid == -1 then return end
@/lua/ge/extensions/editor/terrainEditor.lua
  end
  terrainEditor:onPreRender()
  local hit
@/lua/common/utils/debugDraw.lua

-- GE do calls `onPreRender()`
-- VEH do calls on `onDebugDraw()`
@/lua/ge/extensions/util/screenshotCreator.lua

local function onPreRender(dt)
  if workerCoroutine ~= nil then
@/lua/ge/extensions/scenario/busdriver.lua

local function onPreRender(dt, dtSim)
  --local debugPath = true
@/lua/ge/extensions/c2/panelPlugins/tileManager.lua

local function onPreRender(dt)
  if not p_showWindow then
@/lua/ge/extensions/util/precompileShaders.lua

local function onPreRender(dt)
    if finished then return end
@/lua/ge/extensions/freeroam/dragRace.lua

local function onPreRender(dtReal, dtSim, dtRaw)
  if not opponentVehicle then return end
@/lua/ge/extensions/gameplay/markerInteraction.lua

local function onPreRender(dtReal, dtSim)
  if not gameplay_playmodeMarkers.isStateWithPlaymodeMarkers() then
@/lua/ge/extensions/core/hotlapping.lua
local colorOrange = ColorF(1, 0.5, 0, 0.5)
local function onPreRender(dt, dtSim)
  if editMode then
@/lua/ge/extensions/core/sounds.lua

local function onPreRender(dtReal, dtSim, dtRaw)
  if Engine.Audio.getGlobalParams then
@/lua/ge/extensions/scenario/waypoints.lua

local function onPreRender(dtReal, dtSim, dtRaw)
  if not scenario_scenarios then return end
@/lua/ge/extensions/util/trackBuilder/cameraTransition.lua
local perc = 0
local function onPreRender(dt)
  if remainingTime <= 0 then return end
@/lua/ge/extensions/core/groundMarkerArrows.lua
local scale = vec3()
local function onPreRender(dt)
  -- Update all arrow objects based on their proxies
@/lua/ge/extensions/gameplay/traffic.lua

local function onPreRender(dt)
  if not M.debugMode then return end
@/lua/ge/extensions/editor/camPathEditor.lua

local function onPreRender()
  if
@/lua/ge/extensions/flowgraph/nodes/mission/knockAwayCheck.lua

function C:onPreRender(dt, dtSim)
  if self.markers then
@/lua/common/extensions/networking/editorToolchain.lua

local function onPreRender(dtReal, dtSim, dtRaw)
  if not server then return end
@/lua/ge/extensions/flowgraph/nodes/gameplay/race/raceMarkers.lua

function C:onPreRender(dt, dtSim)
  if self.markers then
@/lua/ge/extensions/util/decalRoadsEditor.lua

local function onPreRender(dt)
  local camPos = core_camera.getPosition()
@/lua/ge/extensions/editor/shapeEditor.lua

local function onPreRender()
  if(shapePrev) then
@/lua/ge/extensions/freeroam/bigMapPoiProvider.lua
-- gets called only while career mode is enabled
local function onPreRender(dtReal, dtSim)
  if not gameplay_playmodeMarkers.isStateWithPlaymodeMarkers() then
@/lua/ge/extensions/flowgraph/nodes/gfx/blur.lua

function C:onPreRender(dt, dtSim)
  if not extensions.ui_visibility.getCef() then return end
@/lua/ge/extensions/editor/vehicleEditor/staticEditor/veStaticRenderView.lua
-- Do debugDrawer stuff here
local function onPreRender()
  for wndID, wndData in ipairs(wndsData) do
@/lua/ge/extensions/core/vehicleMirrors.lua

local function onPreRender(dtReal, dtSim, dtRaw)
  local veh = getPlayerVehicle(0)
@/lua/ge/extensions/ui/gameBlur.lua

local function onPreRender()
  if not extensions.ui_visibility.getCef() then return end
@/lua/ge/extensions/util/precompileVehicles.lua

local function onPreRender(dt)
    if finished then return end
@/lua/ge/extensions/gameplay/statisticModules/watchRollover.lua

local function onPreRender()
  if myvid == -1 then return end
@/lua/ge/extensions/gameplay/crawl/utils.lua

local function onPreRender(dtReal, dtSim, dtRaw)
  if not crawlStates then
@/lua/ge/extensions/flowgraph/nodes/util/customLua.lua
end
function C:onPreRender(dt, dtSim)
  self:exec('onPreRender')
@/lua/ge/extensions/core/groundMarkers.lua
local playerVehPos = vec3()
local function onPreRender(dt)
  if not M.endWP then return end
@/lua/ge/extensions/editor/vehicleDetailViewer.lua

local function onPreRender(dtReal, dtSim, dtRaw)
  if not editor.beginWindow or not detailViewerActive then return end -- for some frames, the editor is not ready yet
@/lua/ge/extensions/tech/multiscreen.lua
local rotation = QuatF(0, 0, 0, 1)
local function onPreRender()
  if not getOrCreateCameraToWindow or not requestCameraToWindowRender then return end
@/lua/ge/extensions/core/checkpoints.lua

local function onPreRender(dt)
  local scenario = scenario_scenarios and scenario_scenarios.getScenario()
@/lua/ge/extensions/util/instancedLineRenderDemo.lua

local function onPreRender(dtReal, dtSim, dtRaw)
  t = t + dtSim * 0.5
@/lua/ge/extensions/campaign/exploration.lua

local function onPreRender(dt)
  if not getExplorationActive() then
@/lua/ge/extensions/core/weather.lua

local function onPreRender(dt)
  if switch == true then