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);
107 bool _isLerping =
false;
108 float _lerpSpeed = 0.0f;
109 uint32 _lastUpdateTime = 0;
115 void update()
override;
116 void setRoomBounds(
Graphic &background)
override;
122 Math::Angle rotation()
const override;
123 float scale()
const override;
125 void preUpdate()
override;
126 void update()
override;
127 void setRoomBounds(
Graphic &background)
override;
130 void onChangedRoom(
bool resetCamera)
override;
133 void onScriptChangedCharacter(MainCharacterKind kind)
override;
134 void onUserChangedCharacter()
override;
135 void onOpenMenu()
override;
136 void onCloseMenu()
override;
140 Math::Vector2d targetPos,
141 int32 duration, EasingType easingType);
143 Math::Vector3d targetPos,
144 int32 duration, EasingType easingType);
147 int32 duration, EasingType easingType);
150 int32 duration, EasingType easingType);
152 float targetRotation,
153 int32 duration, EasingType easingType);
155 Math::Vector3d targetPos,
float targetScale,
156 int32 duration, EasingType moveEasingType, EasingType scaleEasingType);
158 Task *shake(
Process &process, Math::Vector2d amplitude, Math::Vector2d frequency, int32 duration);
161 friend struct CamLerpTask;
162 friend struct CamLerpPosTask;
163 friend struct CamLerpScaleTask;
164 friend struct CamLerpPosScaleTask;
165 friend struct CamLerpRotationTask;
166 friend struct CamShakeTask;
167 friend struct CamWaitToStopTask;
168 friend struct CamSetInactiveAttributeTask;
170 void resetRotationAndScale();
171 void setPosition(Math::Vector2d v);
172 void setPosition(Math::Vector3d v);
173 void backup(uint slot);
174 void restore(uint slot);
175 void updateFollowing(
float deltaTime);
178 Math::Vector3d _usedCenter = Math::Vector3d(512, 384, 0);
182 _maxSpeedFactor = 230.0f;
183 Math::Angle _rotation;
184 bool _isBraking =
false;
185 bool _isFollowingTarget =
false;
190 static constexpr uint kStateBackupCount = 2;
191 State _cur, _backups[kStateBackupCount];
193 uint32 _lastUpdateTime = 0;
194 bool _isChanging =
false,
196 Math::Vector2d _shake;
201 #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