3#include <Tempest/Event>
4#include <Tempest/Matrix4x4>
5#include <Tempest/Point>
7#include <zenkit/addon/daedalus.hh>
85 void tick(uint64_t dt);
88 Tempest::PointF
spin()
const;
93 void setSpin(
const Tempest::PointF& p);
104 Tempest::Matrix4x4
view()
const;
105 Tempest::Matrix4x4
viewProj()
const;
106 Tempest::Matrix4x4
viewShadow(
const Tempest::Vec3& ldir,
size_t layer)
const;
108 Tempest::Matrix4x4
viewLwc()
const;
110 Tempest::Matrix4x4
viewShadowLwc(
const Tempest::Vec3& ldir,
size_t layer)
const;
112 Tempest::Matrix4x4
viewShadowVsm(
const Tempest::Vec3& ldir)
const;
124 Tempest::Vec3 spin = {};
125 Tempest::Vec3 target = {};
129 Tempest::Vec3 origin = {};
130 Tempest::Vec3 spin = {};
133 Tempest::Vec3 cameraPos = {};
134 Tempest::Vec3 origin = {};
135 Tempest::Vec3 rotOffset = {};
136 Tempest::Vec3 offsetAng = {};
142 float userRange = 0.13f;
143 float targetVelo = 0;
146 Tempest::Matrix4x4 proj;
152 bool tgEnable =
true;
153 bool fpEnable =
false;
154 bool lbEnable =
false;
155 bool inertiaTarget =
true;
158 bool inWater =
false;
160 mutable int raysCasted = 0;
162 static float maxDist;
163 static float baseSpeeed;
164 static float offsetAngleMul;
165 static const float minLength;
167 void calcControlPoints(
float dtF);
169 Tempest::Vec3 calcOffsetAngles(
const Tempest::Vec3& srcOrigin,
const Tempest::Vec3& target)
const;
170 Tempest::Vec3 calcOffsetAngles(Tempest::Vec3 srcOrigin, Tempest::Vec3 dstOrigin, Tempest::Vec3 target)
const;
171 Tempest::Vec3 calcCameraColision(
const Tempest::Vec3& target,
const Tempest::Vec3& origin,
const Tempest::Vec3& rotSpin,
float dist)
const;
173 void implMove(Tempest::KeyEvent::KeyType t, uint64_t dt);
174 Tempest::Matrix4x4 mkView (
const Tempest::Vec3& pos,
const Tempest::Vec3&
spin)
const;
175 Tempest::Matrix4x4 mkRotation(
const Tempest::Vec3&
spin)
const;
176 Tempest::Matrix4x4 mkViewShadow(
const Tempest::Vec3& cameraPos,
float rotation,
177 const Tempest::Matrix4x4&
viewProj,
const Tempest::Vec3& lightDir,
size_t layer)
const;
178 Tempest::Matrix4x4 mkViewShadowVsm(
const Tempest::Vec3& cameraPos,
const Tempest::Vec3& ldir)
const;
181 void clampRotation(Tempest::Vec3&
spin);
183 void followCamera(Tempest::Vec3& pos, Tempest::Vec3 dest,
float dtF);
184 void followPos (Tempest::Vec3& pos, Tempest::Vec3 dest,
float dtF);
185 void followAng (Tempest::Vec3&
spin, Tempest::Vec3 dest,
float dtF);
186 static void followAng (
float& ang,
float dest,
float speed,
float dtF);
188 const zenkit::ICamera& cameraDef()
const;
void setMarvinMode(MarvinMode m)
Tempest::PointF spin() const
bool isToggleEnabled() const
Tempest::Matrix4x4 viewShadowLwc(const Tempest::Vec3 &ldir, size_t layer) const
void moveForward(uint64_t dt)
void setPosition(const Tempest::Vec3 &pos)
void setViewport(uint32_t w, uint32_t h)
Tempest::Matrix4x4 view() const
void setSpin(const Tempest::PointF &p)
void moveRight(uint64_t dt)
void moveLeft(uint64_t dt)
void debugDraw(DbgPainter &p)
void rotateLeft(uint64_t dt)
Tempest::Matrix4x4 projective() const
void setFirstPerson(bool fp)
void setToggleEnable(bool e)
void onRotateMouse(const Tempest::PointF &dpos)
void moveBack(uint64_t dt)
void setDialogDistance(float d)
void setDestPosition(const Tempest::Vec3 &pos)
void setDestSpin(const Tempest::PointF &p)
void setLookBack(bool lb)
bool isInertiaTargetEnabled() const
static constexpr const float minShadowY
Tempest::Matrix4x4 viewProjLwc() const
Tempest::Vec3 destPosition() const
void rotateRight(uint64_t dt)
void setInertiaTargetEnable(bool e)
Tempest::Matrix4x4 viewLwc() const
Tempest::Matrix4x4 viewShadowVsm(const Tempest::Vec3 &ldir) const
ListenerPos listenerPosition() const
bool isFirstPerson() const
Tempest::Matrix4x4 viewShadow(const Tempest::Vec3 &ldir, size_t layer) const
Tempest::PointF destSpin() const
void changeZoom(int delta)
Tempest::Matrix4x4 viewShadowVsmLwc(const Tempest::Vec3 &ldir) const
Tempest::Matrix4x4 viewProj() const
Tempest::Vec3 originLwc() const
void load(Serialize &s, Npc *pl)