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;
100 friend struct CamV1DisguiseTask;
101 void updateLerping(Math::Vector3d &newCenter,
float deltaTime,
float speed);
109 bool _isLerping =
false;
110 float _lerpSpeed = 0.0f;
111 uint32 _lastUpdateTime = 0;
117 void update()
override;
118 void setRoomBounds(
Graphic &background)
override;
124 Math::Angle rotation()
const override;
125 float scale()
const override;
127 void preUpdate()
override;
128 void update()
override;
129 void setRoomBounds(
Graphic &background)
override;
132 void onChangedRoom(
bool resetCamera)
override;
135 void onScriptChangedCharacter(MainCharacterKind kind)
override;
136 void onUserChangedCharacter()
override;
137 void onOpenMenu()
override;
138 void onCloseMenu()
override;
142 Math::Vector2d targetPos,
143 int32 duration, EasingType easingType);
145 Math::Vector3d targetPos,
146 int32 duration, EasingType easingType);
149 int32 duration, EasingType easingType);
152 int32 duration, EasingType easingType);
154 float targetRotation,
155 int32 duration, EasingType easingType);
157 Math::Vector3d targetPos,
float targetScale,
158 int32 duration, EasingType moveEasingType, EasingType scaleEasingType);
160 Task *shake(
Process &process, Math::Vector2d amplitude, Math::Vector2d frequency, int32 duration);
163 friend struct CamLerpTask;
164 friend struct CamLerpPosTask;
165 friend struct CamLerpScaleTask;
166 friend struct CamLerpPosScaleTask;
167 friend struct CamLerpRotationTask;
168 friend struct CamShakeTask;
169 friend struct CamWaitToStopTask;
170 friend struct CamSetInactiveAttributeTask;
172 void resetRotationAndScale();
173 void setPosition(Math::Vector2d v);
174 void setPosition(Math::Vector3d v);
175 void backup(uint slot);
176 void restore(uint slot);
177 void updateFollowing(
float deltaTime);
180 Math::Vector3d _usedCenter = Math::Vector3d(512, 384, 0);
184 _maxSpeedFactor = 230.0f;
185 Math::Angle _rotation;
186 bool _isBraking =
false;
187 bool _isFollowingTarget =
false;
192 static constexpr uint kStateBackupCount = 2;
193 State _cur, _backups[kStateBackupCount];
195 uint32 _lastUpdateTime = 0;
196 bool _isChanging =
false,
198 Math::Vector2d _shake;
203 #endif // ALCACHOFA_CAMERA_H Definition: objects.h:534
Definition: alcachofa.h:45
Definition: scheduler.h:84
Definition: scheduler.h:164
Definition: graphics.h:297
Definition: serializer.h:80