summaryrefslogtreecommitdiff
path: root/src/engine/cameras/LookBehindCamera.cpp
blob: 9bfe01e0a00f4253022a2ea97100fcdb20659fa5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <libultraship.h>
#include <libultra/gbi.h>
#include "LookBehindCamera.h"
#include "port/interpolation/FrameInterpolation.h"
#include "engine/Matrix.h"
#include "port/Game.h"

#include "src/enhancements/freecam/freecam.h"

extern "C" {
#include "main.h"
#include "code_800029B0.h"
#include "camera.h"
#include "code_80057C60.h"
#include "defines.h"
}

LookBehindCamera::LookBehindCamera(FVector pos, s16 rot, u32 mode) : GameCamera() {
    _camera->renderMode = RENDER_TRACK_SECTIONS;
    ProjMode = ProjectionMode::PERSPECTIVE;
    bActive = true;

    // Look behind
    Vec3f spawn = {pos.x, pos.y, pos.z};
    camera_init(spawn, rot, mode, _camera->cameraId);

    // Flip camera to look backwards
    _camera->unk_30[2] = -_camera->unk_30[2];
    _camera->unk_3C[2] = -_camera->unk_3C[2];
}

void LookBehindCamera::Tick() {
    if (!bActive) { return; }

    if (nullptr == _camera) {
        bActive = false;
        return;
    }

    func_8001EE98(&gPlayers[_camera->playerId], _camera, _camera->cameraId);
}