22 #ifndef ALCACHOFA_CAMERA_H 23 #define ALCACHOFA_CAMERA_H 25 #include "alcachofa/common.h" 26 #include "math/matrix4.h" 31 class WalkingCharacter;
35 static constexpr
const int16_t kBaseScale = 300;
36 static constexpr
const float kInvBaseScale = 1.0f / kBaseScale;
42 virtual Math::Angle rotation()
const = 0;
43 virtual float scale()
const = 0;
45 virtual void preUpdate() = 0;
46 virtual void update() = 0;
47 virtual void setRoomBounds(
Graphic &background) = 0;
49 virtual void onChangedRoom(
bool resetCamera) = 0;
51 virtual void onTriggeredDoor(
Common::Point fixedPosition) = 0;
52 virtual void onScriptChangedCharacter(MainCharacterKind kind) = 0;
53 virtual void onUserChangedCharacter() = 0;
54 virtual void onOpenMenu() = 0;
55 virtual void onCloseMenu() = 0;
58 Math::Vector3d transform2Dto3D(Math::Vector3d v)
const;
59 Math::Vector3d transform3Dto2D(Math::Vector3d v)
const;
63 Math::Vector3d setAppliedCenter(Math::Vector3d center);
64 void setupMatricesAround(Math::Vector3d center);
66 float _roomScale = 1.0f;
68 _roomMin = Math::Vector2d(-10000, -10000),
69 _roomMax = Math::Vector2d(10000, 10000);
70 Math::Vector3d _appliedCenter;
78 Math::Angle rotation()
const override;
79 float scale()
const override;
81 void preUpdate()
override;
82 void update()
override;
83 void setRoomBounds(
Graphic &background)
override;
85 void onChangedRoom(
bool resetCamera)
override;
88 void onScriptChangedCharacter(MainCharacterKind kind)
override;
89 void onUserChangedCharacter()
override;
90 void onOpenMenu()
override;
91 void onCloseMenu()
override;
98 friend struct CamV1DisguiseTask;
99 void updateLerping(Math::Vector3d &newCenter,
float deltaTime,
float speed);
102 Math::Vector3d _target;
103 bool _isLerping =
false;
104 float _lerpSpeed = 0.0f;
105 uint32 _lastUpdateTime = 0;
111 void update()
override;
112 void setRoomBounds(
Graphic &background)
override;
118 Math::Angle rotation()
const override;
119 float scale()
const override;
121 void preUpdate()
override;
122 void update()
override;
123 void setRoomBounds(
Graphic &background)
override;
126 void onChangedRoom(
bool resetCamera)
override;
129 void onScriptChangedCharacter(MainCharacterKind kind)
override;
130 void onUserChangedCharacter()
override;
131 void onOpenMenu()
override;
132 void onCloseMenu()
override;
136 Math::Vector2d targetPos,
137 int32 duration, EasingType easingType);
139 Math::Vector3d targetPos,
140 int32 duration, EasingType easingType);
143 int32 duration, EasingType easingType);
146 int32 duration, EasingType easingType);
148 float targetRotation,
149 int32 duration, EasingType easingType);
151 Math::Vector3d targetPos,
float targetScale,
152 int32 duration, EasingType moveEasingType, EasingType scaleEasingType);
154 Task *shake(
Process &process, Math::Vector2d amplitude, Math::Vector2d frequency, int32 duration);
157 friend struct CamLerpTask;
158 friend struct CamLerpPosTask;
159 friend struct CamLerpScaleTask;
160 friend struct CamLerpPosScaleTask;
161 friend struct CamLerpRotationTask;
162 friend struct CamShakeTask;
163 friend struct CamWaitToStopTask;
164 friend struct CamSetInactiveAttributeTask;
166 void resetRotationAndScale();
167 void setPosition(Math::Vector2d v);
168 void setPosition(Math::Vector3d v);
169 void backup(uint slot);
170 void restore(uint slot);
171 void updateFollowing(
float deltaTime);
174 Math::Vector3d _usedCenter = Math::Vector3d(512, 384, 0);
178 _maxSpeedFactor = 230.0f;
179 Math::Angle _rotation;
180 bool _isBraking =
false;
181 bool _isFollowingTarget =
false;
186 static constexpr uint kStateBackupCount = 2;
187 State _cur, _backups[kStateBackupCount];
189 uint32 _lastUpdateTime = 0;
190 bool _isChanging =
false,
192 Math::Vector2d _shake;
197 #endif // ALCACHOFA_CAMERA_H Definition: objects.h:505
Definition: alcachofa.h:45
Definition: scheduler.h:84
Definition: scheduler.h:164
Definition: graphics.h:297
Definition: serializer.h:79