OpenGothic
Open source reimplementation of Gothic I and II
Loading...
Searching...
No Matches
cscamera.h
Go to the documentation of this file.
1#pragma once
2
3#include <zenkit/vobs/Camera.hh>
4
5#include "abstracttrigger.h"
6
7class World;
8class DbgPainter;
9
10class CsCamera : public AbstractTrigger {
11 public:
12 CsCamera(Vob* parent, World& world, const zenkit::VCutsceneCamera& data, Flags flags);
13
14 bool isPlayerMovable() const;
15
16 void debugDraw(DbgPainter& p) const;
17
18 private:
19 struct KeyFrame {
20 float time = 0;
21 Tempest::Vec3 c[4] = {};
22 zenkit::CameraMotion motionType = zenkit::CameraMotion::LINEAR;
23
24 auto position(float u) const -> Tempest::Vec3;
25 float arcLength() const;
26 };
27
28 struct KbSpline {
29 KbSpline() = default;
30 KbSpline(const std::vector<std::shared_ptr<zenkit::VCameraTrajectoryFrame>>& frames, const float duration, std::string_view vobName);
31
32 std::vector<KeyFrame> keyframe;
33 size_t size() const { return keyframe.size(); }
34 auto position(const uint64_t time) const -> Tempest::Vec3;
35 };
36
37 void onTrigger(const TriggerEvent& evt) override;
38 void onUntrigger(const TriggerEvent& evt) override;
39 void tick(uint64_t dt) override;
40
41 auto position() -> Tempest::Vec3;
42 auto spin(Tempest::Vec3& d) -> Tempest::PointF;
43
44 KbSpline posSpline = {};
45 KbSpline targetSpline = {};
46
47 uint64_t duration = 0;
48 uint64_t delay = 0;
49 uint64_t timeTrigger = 0;
50
51 bool playerMovable = false;
52 bool autoUntrigger = false;
53 };
std::string vobName
void debugDraw(DbgPainter &p) const
Definition cscamera.cpp:126
bool isPlayerMovable() const
Definition cscamera.cpp:122
Definition vob.h:11
Flags
Definition vob.h:13
World & world
Definition vob.h:45
Definition world.h:31