mirror of https://github.com/AxioDL/metaforce.git
Name PathCamera property fields
This commit is contained in:
parent
68504f5c3a
commit
f8b8211b0f
|
@ -14,25 +14,25 @@ struct PathCamera : IScriptObject
|
||||||
String<-1> name;
|
String<-1> name;
|
||||||
Value<atVec3f> location;
|
Value<atVec3f> location;
|
||||||
Value<atVec3f> orientation;
|
Value<atVec3f> orientation;
|
||||||
Value<bool> unknown1;
|
Value<bool> active;
|
||||||
struct CameraParameters : BigDNA
|
struct CameraParameters : BigDNA
|
||||||
{
|
{
|
||||||
AT_DECL_DNA
|
AT_DECL_DNA
|
||||||
Value<atUint32> propertyCount;
|
Value<atUint32> propertyCount;
|
||||||
Value<bool> unknown1;
|
Value<bool> closedLoop;
|
||||||
Value<bool> unknown2;
|
Value<bool> noFilter;
|
||||||
Value<bool> unknown3;
|
Value<bool> tangentOrientation;
|
||||||
Value<bool> unknown4;
|
Value<bool> easeDist;
|
||||||
Value<bool> unknown5;
|
Value<bool> useHintLookZ;
|
||||||
Value<bool> unknown6;
|
Value<bool> clampToClosedDoor;
|
||||||
} cameraParameters;
|
} cameraParameters;
|
||||||
|
|
||||||
Value<float> unknown2;
|
Value<float> lengthExtent;
|
||||||
Value<float> unknown3;
|
Value<float> filterMag;
|
||||||
Value<float> unknown4;
|
Value<float> filterProportion;
|
||||||
Value<atUint32> unknown5;
|
Value<atUint32> initPos;
|
||||||
Value<float> unknown6;
|
Value<float> minEaseDist;
|
||||||
Value<float> unknown7;
|
Value<float> maxEaseDist;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
namespace urde
|
namespace urde
|
||||||
{
|
{
|
||||||
CCameraSpline::CCameraSpline(bool b) : x48_closedLoop(b) {}
|
CCameraSpline::CCameraSpline(bool closedLoop) : x48_closedLoop(closedLoop) {}
|
||||||
|
|
||||||
void CCameraSpline::CalculateKnots(TUniqueId cameraId, const std::vector<SConnection>& connections, CStateManager& mgr)
|
void CCameraSpline::CalculateKnots(TUniqueId cameraId, const std::vector<SConnection>& connections, CStateManager& mgr)
|
||||||
{
|
{
|
||||||
|
|
|
@ -21,7 +21,7 @@ class CCameraSpline
|
||||||
bool GetSurroundingPoints(int idx, rstl::reserved_vector<zeus::CVector3f, 4>& positions,
|
bool GetSurroundingPoints(int idx, rstl::reserved_vector<zeus::CVector3f, 4>& positions,
|
||||||
rstl::reserved_vector<zeus::CVector3f, 4>& directions) const;
|
rstl::reserved_vector<zeus::CVector3f, 4>& directions) const;
|
||||||
public:
|
public:
|
||||||
CCameraSpline(bool);
|
CCameraSpline(bool closedLoop);
|
||||||
void CalculateKnots(TUniqueId, const std::vector<SConnection>&, CStateManager&);
|
void CalculateKnots(TUniqueId, const std::vector<SConnection>&, CStateManager&);
|
||||||
void Initialize(TUniqueId, const std::vector<SConnection>&, CStateManager&);
|
void Initialize(TUniqueId, const std::vector<SConnection>&, CStateManager&);
|
||||||
void Reset(int size);
|
void Reset(int size);
|
||||||
|
|
|
@ -12,15 +12,17 @@ namespace urde
|
||||||
{
|
{
|
||||||
|
|
||||||
CPathCamera::CPathCamera(TUniqueId uid, std::string_view name, const CEntityInfo& info,
|
CPathCamera::CPathCamera(TUniqueId uid, std::string_view name, const CEntityInfo& info,
|
||||||
const zeus::CTransform& xf, bool active, float f1, float f2,
|
const zeus::CTransform& xf, bool active, float lengthExtent, float filterMag,
|
||||||
float f3, float f4, float f5, u32 flags, EInitialSplinePosition initPos)
|
float filterProportion, float minEaseDist, float maxEaseDist, u32 flags,
|
||||||
|
EInitialSplinePosition initPos)
|
||||||
: CGameCamera(uid, active, name, info, xf,
|
: CGameCamera(uid, active, name, info, xf,
|
||||||
CCameraManager::ThirdPersonFOV(),
|
CCameraManager::ThirdPersonFOV(),
|
||||||
CCameraManager::NearPlane(),
|
CCameraManager::NearPlane(),
|
||||||
CCameraManager::FarPlane(),
|
CCameraManager::FarPlane(),
|
||||||
CCameraManager::Aspect(), kInvalidUniqueId, 0, 0)
|
CCameraManager::Aspect(), kInvalidUniqueId, 0, 0)
|
||||||
, x188_spline(flags & 1), x1dc_lengthExtent(f1), x1e0_(f2), x1e4_(f3), x1e8_initPos(initPos)
|
, x188_spline(flags & 1), x1dc_lengthExtent(lengthExtent), x1e0_filterMag(filterMag)
|
||||||
, x1ec_flags(flags), x1f0_(f4), x1f4_(f5)
|
, x1e4_filterProportion(filterProportion), x1e8_initPos(initPos), x1ec_flags(flags)
|
||||||
|
, x1f0_minEaseDist(minEaseDist), x1f4_maxEaseDist(maxEaseDist)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,7 +170,8 @@ zeus::CTransform CPathCamera::MoveAlongSpline(float t, CStateManager& mgr)
|
||||||
float distToPlayer = 0.f;
|
float distToPlayer = 0.f;
|
||||||
if (splineToPlayer.canBeNormalized())
|
if (splineToPlayer.canBeNormalized())
|
||||||
distToPlayer = splineToPlayer.magnitude();
|
distToPlayer = splineToPlayer.magnitude();
|
||||||
f30 *= 1.f - std::sin(zeus::degToRad(zeus::clamp(0.f, (distToPlayer - x1f0_) / (x1f4_ - x1f0_), 1.f) * 90.f));
|
f30 *= 1.f - std::sin(zeus::degToRad(zeus::clamp(0.f, (distToPlayer - x1f0_minEaseDist) /
|
||||||
|
(x1f4_maxEaseDist - x1f0_minEaseDist), 1.f) * 90.f));
|
||||||
}
|
}
|
||||||
|
|
||||||
float newPos;
|
float newPos;
|
||||||
|
@ -207,9 +210,8 @@ zeus::CTransform CPathCamera::MoveAlongSpline(float t, CStateManager& mgr)
|
||||||
if (x188_spline.IsClosedLoop())
|
if (x188_spline.IsClosedLoop())
|
||||||
{
|
{
|
||||||
float absDelta = std::fabs(newPos - x1d4_pos);
|
float absDelta = std::fabs(newPos - x1d4_pos);
|
||||||
if (absDelta > x188_spline.GetLength() - absDelta)
|
absDelta = std::min(absDelta, x188_spline.GetLength() - absDelta);
|
||||||
absDelta = x188_spline.GetLength() - absDelta;
|
float tBias = zeus::clamp(-1.f, absDelta / x1e4_filterProportion, 1.f) * x1e0_filterMag * t;
|
||||||
float tBias = zeus::clamp(-1.f, absDelta / x1e4_, 1.f) * x1e0_ * t;
|
|
||||||
float tmpAbs = std::fabs(x1d4_pos - newPos);
|
float tmpAbs = std::fabs(x1d4_pos - newPos);
|
||||||
float absDelta2 = x188_spline.GetLength() - tmpAbs;
|
float absDelta2 = x188_spline.GetLength() - tmpAbs;
|
||||||
if (x1d4_pos > newPos)
|
if (x1d4_pos > newPos)
|
||||||
|
@ -227,7 +229,7 @@ zeus::CTransform CPathCamera::MoveAlongSpline(float t, CStateManager& mgr)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
x1d4_pos = x188_spline.ValidateLength(
|
x1d4_pos = x188_spline.ValidateLength(
|
||||||
zeus::clamp(-1.f, (newPos - x1d4_pos) / x1e4_, 1.f) * x1e0_ * t + x1d4_pos);
|
zeus::clamp(-1.f, (newPos - x1d4_pos) / x1e4_filterProportion, 1.f) * x1e0_filterMag * t + x1d4_pos);
|
||||||
}
|
}
|
||||||
ret = x188_spline.GetInterpolatedSplinePointByLength(x1d4_pos);
|
ret = x188_spline.GetInterpolatedSplinePointByLength(x1d4_pos);
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,17 +23,18 @@ private:
|
||||||
float x1d4_pos = 0.f;
|
float x1d4_pos = 0.f;
|
||||||
float x1d8_time = 0.f;
|
float x1d8_time = 0.f;
|
||||||
float x1dc_lengthExtent;
|
float x1dc_lengthExtent;
|
||||||
float x1e0_;
|
float x1e0_filterMag;
|
||||||
float x1e4_;
|
float x1e4_filterProportion;
|
||||||
EInitialSplinePosition x1e8_initPos;
|
EInitialSplinePosition x1e8_initPos;
|
||||||
u32 x1ec_flags;
|
u32 x1ec_flags;
|
||||||
float x1f0_;
|
float x1f0_minEaseDist;
|
||||||
float x1f4_;
|
float x1f4_maxEaseDist;
|
||||||
public:
|
public:
|
||||||
|
|
||||||
CPathCamera(TUniqueId, std::string_view name, const CEntityInfo& info,
|
CPathCamera(TUniqueId uid, std::string_view name, const CEntityInfo& info,
|
||||||
const zeus::CTransform& xf, bool, float, float, float,
|
const zeus::CTransform& xf, bool active, float lengthExtent, float filterMag,
|
||||||
float, float, u32, EInitialSplinePosition);
|
float filterProportion, float minEaseDist, float maxEaseDist, u32 flags,
|
||||||
|
EInitialSplinePosition initPos);
|
||||||
|
|
||||||
void Accept(IVisitor&);
|
void Accept(IVisitor&);
|
||||||
void AcceptScriptMsg(EScriptObjectMessage, TUniqueId, CStateManager&);
|
void AcceptScriptMsg(EScriptObjectMessage, TUniqueId, CStateManager&);
|
||||||
|
|
|
@ -1452,14 +1452,15 @@ CEntity* ScriptLoader::LoadPathCamera(CStateManager& mgr, CInputStream& in, int
|
||||||
SActorHead aHead = LoadActorHead(in, mgr);
|
SActorHead aHead = LoadActorHead(in, mgr);
|
||||||
bool active = in.readBool();
|
bool active = in.readBool();
|
||||||
u32 flags = LoadParameterFlags(in);
|
u32 flags = LoadParameterFlags(in);
|
||||||
float f1 = in.readFloatBig();
|
float lengthExtent = in.readFloatBig();
|
||||||
float f2 = in.readFloatBig();
|
float filterMag = in.readFloatBig();
|
||||||
float f3 = in.readFloatBig();
|
float filterProportion = in.readFloatBig();
|
||||||
CPathCamera::EInitialSplinePosition initPos = CPathCamera::EInitialSplinePosition(in.readUint32Big());
|
CPathCamera::EInitialSplinePosition initPos = CPathCamera::EInitialSplinePosition(in.readUint32Big());
|
||||||
float f4 = in.readFloatBig();
|
float minEaseDist = in.readFloatBig();
|
||||||
float f5 = in.readFloatBig();
|
float maxEaseDist = in.readFloatBig();
|
||||||
return new CPathCamera(mgr.AllocateUniqueId(), aHead.x0_name, info, aHead.x10_transform, active, f1, f2, f3, f4, f5,
|
|
||||||
flags, initPos);
|
return new CPathCamera(mgr.AllocateUniqueId(), aHead.x0_name, info, aHead.x10_transform, active, lengthExtent,
|
||||||
|
filterMag, filterProportion, minEaseDist, maxEaseDist, flags, initPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadGrapplePoint(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info)
|
CEntity* ScriptLoader::LoadGrapplePoint(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info)
|
||||||
|
|
Loading…
Reference in New Issue