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;
41 virtual Math::Angle rotation()
const = 0;
42 virtual float scale()
const = 0;
44 virtual void preUpdate() = 0;
45 virtual void update() = 0;
46 virtual void setRoomBounds(
Graphic &background) = 0;
48 virtual void onChangedRoom(
bool resetCamera) = 0;
50 virtual void onTriggeredDoor(
Common::Point fixedPosition) = 0;
51 virtual void onScriptChangedCharacter(MainCharacterKind kind) = 0;
52 virtual void onUserChangedCharacter() = 0;
53 virtual void onOpenMenu() = 0;
54 virtual void onCloseMenu() = 0;
57 Math::Vector3d transform2Dto3D(Math::Vector3d v)
const;
58 Math::Vector3d transform3Dto2D(Math::Vector3d v)
const;
62 Math::Vector3d setAppliedCenter(Math::Vector3d center);
63 void setupMatricesAround(Math::Vector3d center);
65 float _roomScale = 1.0f;
67 _roomMin = Math::Vector2d(-10000, -10000),
68 _roomMax = Math::Vector2d(10000, 10000);
69 Math::Vector3d _appliedCenter;
77 Math::Angle rotation()
const override;
78 float scale()
const override;
80 void preUpdate()
override;
81 void update()
override;
82 void setRoomBounds(
Graphic &background)
override;
84 void onChangedRoom(
bool resetCamera)
override;
87 void onScriptChangedCharacter(MainCharacterKind kind)
override;
88 void onUserChangedCharacter()
override;
89 void onOpenMenu()
override;
90 void onCloseMenu()
override;
97 friend struct CamV1DisguiseTask;
100 Math::Vector3d _target;
101 bool _isLerping =
false;
102 float _lerpSpeed = 0.0f;
103 uint32 _lastUpdateTime = 0;
108 Math::Angle rotation()
const override;
109 float scale()
const override;
111 void preUpdate()
override;
112 void update()
override;
113 void setRoomBounds(
Graphic &background)
override;
116 void onChangedRoom(
bool resetCamera)
override;
119 void onScriptChangedCharacter(MainCharacterKind kind)
override;
120 void onUserChangedCharacter()
override;
121 void onOpenMenu()
override;
122 void onCloseMenu()
override;
126 Math::Vector2d targetPos,
127 int32 duration, EasingType easingType);
129 Math::Vector3d targetPos,
130 int32 duration, EasingType easingType);
133 int32 duration, EasingType easingType);
136 int32 duration, EasingType easingType);
138 float targetRotation,
139 int32 duration, EasingType easingType);
141 Math::Vector3d targetPos,
float targetScale,
142 int32 duration, EasingType moveEasingType, EasingType scaleEasingType);
144 Task *shake(
Process &process, Math::Vector2d amplitude, Math::Vector2d frequency, int32 duration);
147 friend struct CamLerpTask;
148 friend struct CamLerpPosTask;
149 friend struct CamLerpScaleTask;
150 friend struct CamLerpPosScaleTask;
151 friend struct CamLerpRotationTask;
152 friend struct CamShakeTask;
153 friend struct CamWaitToStopTask;
154 friend struct CamSetInactiveAttributeTask;
156 void resetRotationAndScale();
157 void setPosition(Math::Vector2d v);
158 void setPosition(Math::Vector3d v);
159 void backup(uint slot);
160 void restore(uint slot);
161 void updateFollowing(
float deltaTime);
164 Math::Vector3d _usedCenter = Math::Vector3d(512, 384, 0);
168 _maxSpeedFactor = 230.0f;
169 Math::Angle _rotation;
170 bool _isBraking =
false;
171 bool _isFollowingTarget =
false;
176 static constexpr uint kStateBackupCount = 2;
177 State _cur, _backups[kStateBackupCount];
179 uint32 _lastUpdateTime = 0;
180 bool _isChanging =
false,
182 Math::Vector2d _shake;
187 #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