Implement CParticleGenInfoGeneric

This commit is contained in:
Phillip Stephens 2017-01-20 22:03:37 -08:00
parent 00247ca53e
commit 362fb6b00d
32 changed files with 268 additions and 146 deletions

View File

@ -31,6 +31,7 @@ set(DNACOMMON_SOURCES
BabeDead.hpp BabeDead.cpp BabeDead.hpp BabeDead.cpp
RigInverter.hpp RigInverter.cpp RigInverter.hpp RigInverter.cpp
AROTBuilder.hpp AROTBuilder.cpp AROTBuilder.hpp AROTBuilder.cpp
Tweaks/ITweak.hpp
Tweaks/TweakWriter.hpp Tweaks/TweakWriter.hpp
Tweaks/ITweakGame.hpp Tweaks/ITweakGame.hpp
Tweaks/ITweakParticle.hpp Tweaks/ITweakParticle.hpp
@ -40,7 +41,8 @@ set(DNACOMMON_SOURCES
Tweaks/ITweakGunRes.hpp Tweaks/ITweakGunRes.hpp
Tweaks/ITweakPlayerRes.hpp Tweaks/ITweakPlayerRes.hpp
Tweaks/ITweakGui.hpp Tweaks/ITweakGui.hpp
Tweaks/ITweakSlideShow.hpp) Tweaks/ITweakSlideShow.hpp
Tweaks/ITweakTargeting.hpp)
dataspec_add_list(DNACommon DNACOMMON_SOURCES) dataspec_add_list(DNACommon DNACOMMON_SOURCES)
list(APPEND DNACOMMON_SOURCES ${liblist}) list(APPEND DNACOMMON_SOURCES ${liblist})

View File

@ -0,0 +1,13 @@
#ifndef __DNACOMMON_ITWEAK_HPP__
#define __DNACOMMON_ITWEAK_HPP__
#include "../DNACommon.hpp"
namespace DataSpec
{
struct ITweak : BigYAML
{
};
}
#endif // __DNACOMMON_ITWEAK_HPP__

View File

@ -1,12 +1,12 @@
#ifndef __DNACOMMON_ITWEAKGAME_HPP__ #ifndef __DNACOMMON_ITWEAKGAME_HPP__
#define __DNACOMMON_ITWEAKGAME_HPP__ #define __DNACOMMON_ITWEAKGAME_HPP__
#include "../DNACommon.hpp" #include "ITweak.hpp"
namespace DataSpec namespace DataSpec
{ {
struct ITweakGame : BigYAML struct ITweakGame : ITweak
{ {
virtual const std::string& GetWorldPrefix() const = 0; virtual const std::string& GetWorldPrefix() const = 0;
virtual bool GetSplashScreensDisabled() const = 0; virtual bool GetSplashScreensDisabled() const = 0;

View File

@ -1,13 +1,13 @@
#ifndef __DNACOMMON_ITWEAKGUI_HPP__ #ifndef __DNACOMMON_ITWEAKGUI_HPP__
#define __DNACOMMON_ITWEAKGUI_HPP__ #define __DNACOMMON_ITWEAKGUI_HPP__
#include "../DNACommon.hpp" #include "ITweak.hpp"
#include "zeus/CVector2f.hpp" #include "zeus/CVector2f.hpp"
namespace DataSpec namespace DataSpec
{ {
struct ITweakGui : BigYAML struct ITweakGui : ITweak
{ {
virtual float GetScanSpeed(int idx) const=0; virtual float GetScanSpeed(int idx) const=0;
virtual float GetXrayBlurScaleLinear() const=0; virtual float GetXrayBlurScaleLinear() const=0;

View File

@ -1,13 +1,13 @@
#ifndef __DNACOMMON_ITWEAKGUNRES_HPP__ #ifndef __DNACOMMON_ITWEAKGUNRES_HPP__
#define __DNACOMMON_ITWEAKGUNRES_HPP__ #define __DNACOMMON_ITWEAKGUNRES_HPP__
#include "../DNACommon.hpp" #include "ITweak.hpp"
#include "Runtime/IFactory.hpp" #include "Runtime/IFactory.hpp"
namespace DataSpec namespace DataSpec
{ {
struct ITweakGunRes : BigYAML struct ITweakGunRes : ITweak
{ {
using ResId = int64_t; using ResId = int64_t;
enum class EBeamId enum class EBeamId

View File

@ -1,12 +1,12 @@
#ifndef __DNACOMMON_ITWEAKPARTICLE_HPP__ #ifndef __DNACOMMON_ITWEAKPARTICLE_HPP__
#define __DNACOMMON_ITWEAKPARTICLE_HPP__ #define __DNACOMMON_ITWEAKPARTICLE_HPP__
#include "../DNACommon.hpp" #include "ITweak.hpp"
namespace DataSpec namespace DataSpec
{ {
struct ITweakParticle : BigYAML struct ITweakParticle : ITweak
{ {
}; };

View File

@ -1,13 +1,13 @@
#ifndef __DNACOMMON_ITWEAKPLAYER_HPP__ #ifndef __DNACOMMON_ITWEAKPLAYER_HPP__
#define __DNACOMMON_ITWEAKPLAYER_HPP__ #define __DNACOMMON_ITWEAKPLAYER_HPP__
#include "../DNACommon.hpp" #include "ITweak.hpp"
#include "zeus/CAABox.hpp" #include "zeus/CAABox.hpp"
namespace DataSpec namespace DataSpec
{ {
struct ITweakPlayer : BigYAML struct ITweakPlayer : ITweak
{ {
virtual float GetX50() const=0; virtual float GetX50() const=0;
virtual float GetX54() const=0; virtual float GetX54() const=0;

View File

@ -1,12 +1,12 @@
#ifndef __DNACOMMON_ITWEAKPLAYERCONTROL_HPP__ #ifndef __DNACOMMON_ITWEAKPLAYERCONTROL_HPP__
#define __DNACOMMON_ITWEAKPLAYERCONTROL_HPP__ #define __DNACOMMON_ITWEAKPLAYERCONTROL_HPP__
#include "../DNACommon.hpp" #include "ITweak.hpp"
namespace DataSpec namespace DataSpec
{ {
struct ITweakPlayerControl : BigYAML struct ITweakPlayerControl : ITweak
{ {
virtual atUint32 GetMapping(atUint32) const=0; virtual atUint32 GetMapping(atUint32) const=0;
}; };

View File

@ -1,13 +1,13 @@
#ifndef __DNACOMMON_ITWEAKPLAYERGUN_HPP__ #ifndef __DNACOMMON_ITWEAKPLAYERGUN_HPP__
#define __DNACOMMON_ITWEAKPLAYERGUN_HPP__ #define __DNACOMMON_ITWEAKPLAYERGUN_HPP__
#include "../DNACommon.hpp" #include "ITweak.hpp"
#include "zeus/CAABox.hpp" #include "zeus/CAABox.hpp"
namespace DataSpec namespace DataSpec
{ {
struct ITweakPlayerGun : BigYAML struct ITweakPlayerGun : ITweak
{ {
virtual float GetSomething1() const=0; // x24 virtual float GetSomething1() const=0; // x24
virtual float GetSomething2() const=0; // x28 virtual float GetSomething2() const=0; // x28

View File

@ -1,13 +1,13 @@
#ifndef __DNACOMMON_ITWEAKPLAYERRES_HPP__ #ifndef __DNACOMMON_ITWEAKPLAYERRES_HPP__
#define __DNACOMMON_ITWEAKPLAYERRES_HPP__ #define __DNACOMMON_ITWEAKPLAYERRES_HPP__
#include "../DNACommon.hpp" #include "ITweak.hpp"
#include "Runtime/IFactory.hpp" #include "Runtime/IFactory.hpp"
namespace DataSpec namespace DataSpec
{ {
struct ITweakPlayerRes : BigYAML struct ITweakPlayerRes : ITweak
{ {
using ResId = int64_t; using ResId = int64_t;
enum class EBeamId enum class EBeamId

View File

@ -1,12 +1,12 @@
#ifndef __DNACOMMON_ITWEAKSLIDESHOW_HPP__ #ifndef __DNACOMMON_ITWEAKSLIDESHOW_HPP__
#define __DNACOMMON_ITWEAKSLIDESHOW_HPP__ #define __DNACOMMON_ITWEAKSLIDESHOW_HPP__
#include "../DNACommon.hpp" #include "ITweak.hpp"
namespace DataSpec namespace DataSpec
{ {
struct ITweakSlideShow : BigYAML struct ITweakSlideShow : ITweak
{ {
virtual const std::string& GetFont() const=0; virtual const std::string& GetFont() const=0;
virtual const zeus::CColor& GetFontColor() const=0; virtual const zeus::CColor& GetFontColor() const=0;

View File

@ -0,0 +1,12 @@
#ifndef __DNACOMMON_ITWEAKTARGETING_HPP__
#define __DNACOMMON_ITWEAKTARGETING_HPP__
#include "ITweak.hpp"
namespace DataSpec
{
struct ITweakTargeting : public ITweak
{
};
}
#endif // __DNACOMMON_ITWEAKTARGETING_HPP__

View File

@ -28,7 +28,8 @@ make_dnalist(liblist DNAMP1
Tweaks/CTweakPlayerRes Tweaks/CTweakPlayerRes
Tweaks/CTweakGui Tweaks/CTweakGui
Tweaks/CTweakSlideShow Tweaks/CTweakSlideShow
Tweaks/CTweakCameraBob) Tweaks/CTweakCameraBob
Tweaks/CTweakTargeting)
set(DNAMP1_SOURCES set(DNAMP1_SOURCES
DNAMP1.hpp DNAMP1.cpp DNAMP1.hpp DNAMP1.cpp
@ -48,7 +49,8 @@ set(DNAMP1_SOURCES
SCLY.hpp SCLY.cpp SCLY.hpp SCLY.cpp
FRME.cpp FRME.cpp
DeafBabe.cpp DeafBabe.cpp
Tweaks/CTweakPlayer.cpp) Tweaks/CTweakPlayer.cpp
Tweaks/CTweakTargeting.cpp)
dataspec_add_list(DNAMP1 DNAMP1_SOURCES) dataspec_add_list(DNAMP1 DNAMP1_SOURCES)
list(APPEND DNAMP1_SOURCES ${liblist}) list(APPEND DNAMP1_SOURCES ${liblist})

View File

@ -0,0 +1,16 @@
#ifndef _DNAMP1_CTWEAKTARGETING_HPP_
#define _DNAMP1_CTWEAKTARGETING_HPP_
#include "../../DNACommon/Tweaks/ITweakTargeting.hpp"
namespace DataSpec
{
namespace DNAMP1
{
struct CTweakTargeting : public ITweakTargeting
{
DECL_YAML
};
}
}
#endif // _DNAMP1_CTWEAKTARGETING_HPP_

View File

@ -1,108 +1,148 @@
#include "CParticleGenInfo.hpp" #include "CParticleGenInfo.hpp"
#include "Graphics/IRenderer.hpp"
#include "Particle/CParticleGen.hpp" #include "Particle/CParticleGen.hpp"
#include "GameGlobalObjects.hpp"
#include "World/CGameLight.hpp"
#include "CStateManager.hpp"
#include "Graphics/CBooRenderer.hpp"
#include "TCastTo.hpp"
namespace urde namespace urde
{ {
CParticleGenInfo::CParticleGenInfo(const SObjectTag& part, int frameCount, const std::string& boneName, CParticleGenInfo::CParticleGenInfo(const SObjectTag& part, int frameCount, const std::string& boneName,
const zeus::CVector3f& scale, CParticleData::EParentedMode parentMode, const zeus::CVector3f& scale, CParticleData::EParentedMode parentMode, int a, int b)
int a) : x4_part(part)
: x4_part(part), xc_seconds(frameCount / 60.f), x10_boneName(boneName), x28_parentMode(parentMode), , xc_seconds(frameCount / 60.f)
x2c_a(a), x30_particleScale(scale) , x10_boneName(boneName)
{} , x28_parentMode(parentMode)
, x2c_a(a)
static TUniqueId _initializeLight(const std::weak_ptr<CParticleGen>& system, , x30_particleScale(scale)
CStateManager& stateMgr, int lightId) , x80_(b)
{ {
}
static TUniqueId _initializeLight(const std::weak_ptr<CParticleGen>& system, CStateManager& stateMgr, TAreaId areaId,
int lightId)
{
TUniqueId ret = kInvalidUniqueId;
std::shared_ptr<CParticleGen> systemRef = system.lock(); std::shared_ptr<CParticleGen> systemRef = system.lock();
if (systemRef->SystemHasLight()) if (systemRef->SystemHasLight())
{ {
ret = stateMgr.AllocateUniqueId();
stateMgr.AddObject(
new CGameLight(ret, areaId, false, "ParticleLight",
zeus::CTransform(systemRef->GetOrientation().buildMatrix3f(), systemRef->GetTranslation()),
kInvalidUniqueId, systemRef->GetLight(), lightId, 0, 0.f));
} }
return kInvalidUniqueId; return ret;
} }
CParticleGenInfoGeneric::CParticleGenInfoGeneric(const SObjectTag& part, CParticleGenInfoGeneric::CParticleGenInfoGeneric(const SObjectTag& part, const std::weak_ptr<CParticleGen>& system,
const std::weak_ptr<CParticleGen>& system,
int frameCount, const std::string& boneName, int frameCount, const std::string& boneName,
const zeus::CVector3f& scale, const zeus::CVector3f& scale, CParticleData::EParentedMode parentMode,
CParticleData::EParentedMode parentMode, int a, CStateManager& stateMgr, TAreaId areaId, int lightId, int b)
int a, CStateManager& stateMgr, int lightId) : CParticleGenInfo(part, frameCount, boneName, scale, parentMode, a, b), x84_system(system)
: CParticleGenInfo(part, frameCount, boneName, scale, parentMode, a), x80_system(system)
{ {
if (lightId == -1) if (lightId == -1)
x84_lightId = kInvalidUniqueId; x88_lightId = kInvalidUniqueId;
else else
x84_lightId = _initializeLight(system, stateMgr, lightId); x88_lightId = _initializeLight(system, stateMgr, lightId, areaId);
} }
void CParticleGenInfoGeneric::AddToRenderer() void CParticleGenInfoGeneric::AddToRenderer() { g_Renderer->AddParticleGen(*x84_system.get()); }
{
}
void CParticleGenInfoGeneric::Render() void CParticleGenInfoGeneric::Render() { x84_system->Render(); }
{
}
void CParticleGenInfoGeneric::Update(float dt, CStateManager& stateMgr) void CParticleGenInfoGeneric::Update(float dt, CStateManager& stateMgr)
{ {
x84_system->Update(dt);
if (x88_lightId != kInvalidUniqueId)
{
TCastToPtr<CGameLight> gl(stateMgr.ObjectById(x88_lightId));
if (gl)
gl->SetLight(x84_system->GetLight());
}
} }
void CParticleGenInfoGeneric::SetOrientation(const zeus::CTransform& xf, CStateManager& stateMgr) void CParticleGenInfoGeneric::SetOrientation(const zeus::CTransform& xf, CStateManager& stateMgr)
{ {
x84_system->SetOrientation(xf);
if (x88_lightId != kInvalidUniqueId)
{
TCastToPtr<CGameLight> gl(stateMgr.ObjectById(x88_lightId));
if (gl)
gl->SetRotation(zeus::CQuaternion(xf.buildMatrix3f()));
}
} }
void CParticleGenInfoGeneric::SetTranslation(const zeus::CVector3f& trans, CStateManager& stateMgr) void CParticleGenInfoGeneric::SetTranslation(const zeus::CVector3f& trans, CStateManager& stateMgr)
{ {
x84_system->SetTranslation(trans);
if (x88_lightId != kInvalidUniqueId)
{
TCastToPtr<CGameLight> gl(stateMgr.ObjectById(x88_lightId));
if (gl)
gl->SetTranslation(trans);
}
} }
void CParticleGenInfoGeneric::SetGlobalOrientation(const zeus::CTransform& xf, CStateManager& stateMgr) void CParticleGenInfoGeneric::SetGlobalOrientation(const zeus::CTransform& xf, CStateManager& stateMgr)
{ {
x84_system->SetGlobalOrientation(xf);
if (x88_lightId != kInvalidUniqueId)
{
TCastToPtr<CGameLight> gl(stateMgr.ObjectById(x88_lightId));
if (gl)
gl->SetRotation(zeus::CQuaternion(xf.buildMatrix3f()));
}
} }
void CParticleGenInfoGeneric::SetGlobalTranslation(const zeus::CVector3f& trans, CStateManager& stateMgr) void CParticleGenInfoGeneric::SetGlobalTranslation(const zeus::CVector3f& trans, CStateManager& stateMgr)
{ {
x84_system->SetGlobalTranslation(trans);
if (x88_lightId != kInvalidUniqueId)
{
TCastToPtr<CGameLight> gl(stateMgr.ObjectById(x88_lightId));
if (gl)
gl->SetTranslation(trans);
}
} }
void CParticleGenInfoGeneric::SetGlobalScale(const zeus::CVector3f& scale) void CParticleGenInfoGeneric::SetGlobalScale(const zeus::CVector3f& scale) { x84_system->SetGlobalScale(scale); }
void CParticleGenInfoGeneric::SetParticleEmission(bool emission, CStateManager& stateMgr)
{ {
x84_system->SetParticleEmission(emission);
TCastToPtr<CGameLight> gl(stateMgr.ObjectById(x88_lightId));
if (gl)
gl->SetActive(emission);
} }
void CParticleGenInfoGeneric::SetParticleEmission(bool, CStateManager& stateMgr) bool CParticleGenInfoGeneric::IsSystemDeletable() const { return x84_system->IsSystemDeletable(); }
{
} rstl::optional_object<zeus::CAABox> CParticleGenInfoGeneric::GetBounds() const { return x84_system->GetBounds(); }
bool CParticleGenInfoGeneric::IsSystemDeletable() const bool CParticleGenInfoGeneric::HasActiveParticles() const { return x84_system->GetParticleCount() != 0; }
{
return false; void CParticleGenInfoGeneric::DestroyParticles() { x84_system->DestroyParticles(); }
}
bool CParticleGenInfoGeneric::HasLight() const { return x84_system->SystemHasLight(); }
zeus::CAABox CParticleGenInfoGeneric::GetBounds() const
{ TUniqueId CParticleGenInfoGeneric::GetLightId() const { return x88_lightId; }
return {};
} void CParticleGenInfoGeneric::DeleteLight(CStateManager& mgr)
bool CParticleGenInfoGeneric::HasActiveParticles() const
{
return false;
}
void CParticleGenInfoGeneric::DestroyParticles()
{
}
bool CParticleGenInfoGeneric::HasLight() const
{
return false;
}
TUniqueId CParticleGenInfoGeneric::GetLightId() const
{
return kInvalidUniqueId;
}
void CParticleGenInfoGeneric::SetModulationColor(const zeus::CColor& color)
{ {
if (x88_lightId != kInvalidUniqueId)
mgr.DeleteObjectRequest(x88_lightId);
} }
void CParticleGenInfoGeneric::SetModulationColor(const zeus::CColor& color) { x84_system->SetModulationColor(color); }
} }

View File

@ -24,40 +24,61 @@ class CParticleGenInfo
zeus::CVector3f x30_particleScale; zeus::CVector3f x30_particleScale;
float x3c_ = 0.f; float x3c_ = 0.f;
bool x40_ = false; bool x40_ = false;
zeus::CTransform x44_; zeus::CTransform x44_transform;
zeus::CVector3f x74_; zeus::CVector3f x74_offset;
s32 x80_;
public: public:
CParticleGenInfo(const SObjectTag& part, int frameCount, const std::string& boneName, CParticleGenInfo(const SObjectTag& part, int frameCount, const std::string& boneName, const zeus::CVector3f&,
const zeus::CVector3f&, CParticleData::EParentedMode parentMode, int a); CParticleData::EParentedMode parentMode, int a, int b);
virtual ~CParticleGenInfo() = default; virtual ~CParticleGenInfo() = default;
virtual void AddToRenderer()=0; virtual void AddToRenderer() = 0;
virtual void Render()=0; virtual void Render() = 0;
virtual void Update(float dt, CStateManager& stateMgr)=0; virtual void Update(float dt, CStateManager& stateMgr) = 0;
virtual void SetOrientation(const zeus::CTransform& xf, CStateManager& stateMgr)=0; virtual void SetOrientation(const zeus::CTransform& xf, CStateManager& stateMgr) = 0;
virtual void SetTranslation(const zeus::CVector3f& trans, CStateManager& stateMgr)=0; virtual void SetTranslation(const zeus::CVector3f& trans, CStateManager& stateMgr) = 0;
virtual void SetGlobalOrientation(const zeus::CTransform& xf, CStateManager& stateMgr)=0; virtual void SetGlobalOrientation(const zeus::CTransform& xf, CStateManager& stateMgr) = 0;
virtual void SetGlobalTranslation(const zeus::CVector3f& trans, CStateManager& stateMgr)=0; virtual void SetGlobalTranslation(const zeus::CVector3f& trans, CStateManager& stateMgr) = 0;
virtual void SetGlobalScale(const zeus::CVector3f& scale)=0; virtual void SetGlobalScale(const zeus::CVector3f& scale) = 0;
virtual void SetParticleEmission(bool, CStateManager& stateMgr)=0; virtual void SetParticleEmission(bool, CStateManager& stateMgr) = 0;
virtual bool IsSystemDeletable() const=0; virtual bool IsSystemDeletable() const = 0;
virtual zeus::CAABox GetBounds() const=0; virtual rstl::optional_object<zeus::CAABox> GetBounds() const = 0;
virtual bool HasActiveParticles() const=0; virtual bool HasActiveParticles() const = 0;
virtual void DestroyParticles()=0; virtual void DestroyParticles() = 0;
virtual bool HasLight() const=0; virtual bool HasLight() const = 0;
virtual TUniqueId GetLightId() const=0; virtual TUniqueId GetLightId() const = 0;
virtual void SetModulationColor(const zeus::CColor& color)=0; virtual void DeleteLight(CStateManager&) const = 0;
virtual void SetModulationColor(const zeus::CColor& color) = 0;
void SetFlags(s32);
s32 GetFlags() const;
void SetIsGrabInitialData(bool);
bool GetIsGrabInitialData() const;
bool GetIsActive() const;
bool SetIsActive(bool);
void OffsetTime(float);
void SetCurOffset(const zeus::CVector3f& offset) { x74_offset = offset; }
void SetCurTransform(const zeus::CTransform& xf) { x44_transform = xf; }
void SetInactiveStartTime(float);
float GetInactiveStartTime() const;
float GetFinishTime() const;
float GetCurrentTime() const;
CParticleData::EParentedMode GetParentedMode() const { return x28_parentMode; }
const std::string& GetLocatorName() const { return x10_boneName; }
}; };
class CParticleGenInfoGeneric : public CParticleGenInfo class CParticleGenInfoGeneric : public CParticleGenInfo
{ {
std::shared_ptr<CParticleGen> x80_system; std::shared_ptr<CParticleGen> x84_system;
TUniqueId x84_lightId; TUniqueId x88_lightId;
public: public:
CParticleGenInfoGeneric(const SObjectTag& part, const std::weak_ptr<CParticleGen>& system, CParticleGenInfoGeneric(const SObjectTag& part, const std::weak_ptr<CParticleGen>& system, int,
int, const std::string& boneName, const zeus::CVector3f& scale, const std::string& boneName, const zeus::CVector3f& scale,
CParticleData::EParentedMode parentMode, int a, CStateManager& stateMgr, CParticleData::EParentedMode parentMode, int a, CStateManager& stateMgr, TAreaId,
int lightId); int lightId, int b);
void AddToRenderer(); void AddToRenderer();
void Render(); void Render();
@ -69,14 +90,14 @@ public:
void SetGlobalScale(const zeus::CVector3f& scale); void SetGlobalScale(const zeus::CVector3f& scale);
void SetParticleEmission(bool, CStateManager& stateMgr); void SetParticleEmission(bool, CStateManager& stateMgr);
bool IsSystemDeletable() const; bool IsSystemDeletable() const;
zeus::CAABox GetBounds() const; rstl::optional_object<zeus::CAABox> GetBounds() const;
bool HasActiveParticles() const; bool HasActiveParticles() const;
void DestroyParticles(); void DestroyParticles();
bool HasLight() const; bool HasLight() const;
TUniqueId GetLightId() const; TUniqueId GetLightId() const;
void DeleteLight(CStateManager&);
void SetModulationColor(const zeus::CColor& color); void SetModulationColor(const zeus::CColor& color);
}; };
} }
#endif // __URDE_CPARTICLEGENINFO_HPP__ #endif // __URDE_CPARTICLEGENINFO_HPP__

View File

@ -483,11 +483,11 @@ void CBooRenderer::PostRenderFogs()
void CBooRenderer::AddParticleGen(const CParticleGen& gen) void CBooRenderer::AddParticleGen(const CParticleGen& gen)
{ {
std::pair<zeus::CAABox, bool> bounds = gen.GetBounds(); auto bounds = gen.GetBounds();
if (bounds.second) if (bounds)
{ {
zeus::CVector3f pt = bounds.first.closestPointAlongVector(xb0_viewPlane.vec); zeus::CVector3f pt = bounds.value().closestPointAlongVector(xb0_viewPlane.vec);
Buckets::Insert(pt, bounds.first, EDrawableType::Particle, &gen, xb0_viewPlane, 0); Buckets::Insert(pt, bounds.value(), EDrawableType::Particle, &gen, xb0_viewPlane, 0);
} }
} }

View File

@ -58,14 +58,14 @@ class CGameGlobalObjects
std::unique_ptr<CGameState> x134_gameState; std::unique_ptr<CGameState> x134_gameState;
TLockedToken<CStringTable> x13c_mainStringTable; TLockedToken<CStringTable> x13c_mainStringTable;
CInGameTweakManager x150_tweakManager; CInGameTweakManager x150_tweakManager;
std::unique_ptr<CBooRenderer> m_renderer; std::unique_ptr<IRenderer> m_renderer;
void LoadStringTable() void LoadStringTable()
{ {
x13c_mainStringTable = g_SimplePool->GetObj("STRG_Main"); x13c_mainStringTable = g_SimplePool->GetObj("STRG_Main");
g_MainStringTable = x13c_mainStringTable.GetObj(); g_MainStringTable = x13c_mainStringTable.GetObj();
} }
static CBooRenderer* static IRenderer*
AllocateRenderer(IObjectStore& store, IFactory& resFactory) AllocateRenderer(IObjectStore& store, IFactory& resFactory)
{ {
g_Renderer = new CBooRenderer(store, resFactory); g_Renderer = new CBooRenderer(store, resFactory);

View File

@ -1152,41 +1152,41 @@ void CElementGen::BuildParticleSystemBounds()
for (std::unique_ptr<CElementGen>& ch : x234_activePartChildren) for (std::unique_ptr<CElementGen>& ch : x234_activePartChildren)
{ {
std::pair<zeus::CAABox, bool> chBounds = ch->GetBounds(); auto chBounds = ch->GetBounds();
if (chBounds.second) if (chBounds)
{ {
accumulated = true; accumulated = true;
aabb.accumulateBounds(chBounds.first); aabb.accumulateBounds(chBounds.value());
} }
} }
for (std::unique_ptr<CElementGen>& ch : x248_finishPartChildren) for (std::unique_ptr<CElementGen>& ch : x248_finishPartChildren)
{ {
std::pair<zeus::CAABox, bool> chBounds = ch->GetBounds(); auto chBounds = ch->GetBounds();
if (chBounds.second) if (chBounds)
{ {
accumulated = true; accumulated = true;
aabb.accumulateBounds(chBounds.first); aabb.accumulateBounds(chBounds.value());
} }
} }
for (std::unique_ptr<CParticleSwoosh>& ch : x260_swhcChildren) for (std::unique_ptr<CParticleSwoosh>& ch : x260_swhcChildren)
{ {
std::pair<zeus::CAABox, bool> chBounds = ch->GetBounds(); auto chBounds = ch->GetBounds();
if (chBounds.second) if (chBounds)
{ {
accumulated = true; accumulated = true;
aabb.accumulateBounds(chBounds.first); aabb.accumulateBounds(chBounds.value());
} }
} }
for (std::unique_ptr<CParticleElectric>& ch : x280_elscChildren) for (std::unique_ptr<CParticleElectric>& ch : x280_elscChildren)
{ {
std::pair<zeus::CAABox, bool> chBounds = ch->GetBounds(); auto chBounds = ch->GetBounds();
if (chBounds.second) if (chBounds)
{ {
accumulated = true; accumulated = true;
aabb.accumulateBounds(chBounds.first); aabb.accumulateBounds(chBounds.value());
} }
} }
@ -2245,12 +2245,12 @@ bool CElementGen::IsSystemDeletable() const
return false; return false;
} }
std::pair<zeus::CAABox, bool> CElementGen::GetBounds() const rstl::optional_object<zeus::CAABox> CElementGen::GetBounds() const
{ {
if (GetParticleCountAll() == 0) if (GetParticleCountAll() == 0)
return {zeus::CAABox(), false}; return {zeus::CAABox()};
else else
return {x2c4_systemBounds, true}; return {x2c4_systemBounds};
} }
u32 CElementGen::GetParticleCount() const u32 CElementGen::GetParticleCount() const

View File

@ -232,7 +232,7 @@ public:
const zeus::CVector3f& GetGlobalScale() const; const zeus::CVector3f& GetGlobalScale() const;
const zeus::CColor& GetModulationColor() const; const zeus::CColor& GetModulationColor() const;
bool IsSystemDeletable() const; bool IsSystemDeletable() const;
std::pair<zeus::CAABox, bool> GetBounds() const; rstl::optional_object<zeus::CAABox> GetBounds() const;
u32 GetParticleCount() const; u32 GetParticleCount() const;
bool SystemHasLight() const; bool SystemHasLight() const;
CLight GetLight() const; CLight GetLight() const;

View File

@ -185,9 +185,9 @@ bool CParticleElectric::IsSystemDeletable() const
return false; return false;
} }
std::pair<zeus::CAABox, bool> CParticleElectric::GetBounds() const rstl::optional_object<zeus::CAABox> CParticleElectric::GetBounds() const
{ {
return std::make_pair(zeus::CAABox(), false); return {};
} }
u32 CParticleElectric::GetParticleCount() const u32 CParticleElectric::GetParticleCount() const

View File

@ -97,7 +97,7 @@ public:
const zeus::CVector3f& GetGlobalScale() const; const zeus::CVector3f& GetGlobalScale() const;
const zeus::CColor& GetModulationColor() const; const zeus::CColor& GetModulationColor() const;
bool IsSystemDeletable() const; bool IsSystemDeletable() const;
std::pair<zeus::CAABox, bool> GetBounds() const; rstl::optional_object<zeus::CAABox> GetBounds() const;
u32 GetParticleCount() const; u32 GetParticleCount() const;
bool SystemHasLight() const; bool SystemHasLight() const;
CLight GetLight() const; CLight GetLight() const;

View File

@ -36,7 +36,7 @@ public:
virtual const zeus::CVector3f& GetGlobalScale() const=0; virtual const zeus::CVector3f& GetGlobalScale() const=0;
virtual const zeus::CColor& GetModulationColor() const=0; virtual const zeus::CColor& GetModulationColor() const=0;
virtual bool IsSystemDeletable() const=0; virtual bool IsSystemDeletable() const=0;
virtual std::pair<zeus::CAABox, bool> GetBounds() const=0; virtual rstl::optional_object<zeus::CAABox> GetBounds() const=0;
virtual u32 GetParticleCount() const=0; virtual u32 GetParticleCount() const=0;
virtual bool SystemHasLight() const=0; virtual bool SystemHasLight() const=0;
virtual CLight GetLight() const=0; virtual CLight GetLight() const=0;

View File

@ -88,9 +88,9 @@ bool CParticleSwoosh::IsSystemDeletable() const
return false; return false;
} }
std::pair<zeus::CAABox, bool> CParticleSwoosh::GetBounds() const rstl::optional_object<zeus::CAABox> CParticleSwoosh::GetBounds() const
{ {
return std::make_pair(zeus::CAABox(), false); return {};
} }
u32 CParticleSwoosh::GetParticleCount() const u32 CParticleSwoosh::GetParticleCount() const

View File

@ -30,7 +30,7 @@ public:
const zeus::CVector3f& GetGlobalScale() const; const zeus::CVector3f& GetGlobalScale() const;
const zeus::CColor& GetModulationColor() const; const zeus::CColor& GetModulationColor() const;
bool IsSystemDeletable() const; bool IsSystemDeletable() const;
std::pair<zeus::CAABox, bool> GetBounds() const; rstl::optional_object<zeus::CAABox> GetBounds() const;
u32 GetParticleCount() const; u32 GetParticleCount() const;
bool SystemHasLight() const; bool SystemHasLight() const;
CLight GetLight() const; CLight GetLight() const;

View File

@ -253,6 +253,14 @@ void CActor::SetSfxPitchBend(s32 val)
CSfxManager::PitchBend(*x8c_sfxHandle.get(), val); CSfxManager::PitchBend(*x8c_sfxHandle.get(), val);
} }
void CActor::SetRotation(const zeus::CQuaternion &q)
{
x34_transform = q.toTransform(x34_transform.origin);
xe4_27_ = true;
xe4_28_ = true;
xe4_29_ = true;
}
void CActor::SetTranslation(const zeus::CVector3f& tr) void CActor::SetTranslation(const zeus::CVector3f& tr)
{ {
x34_transform.origin = tr; x34_transform.origin = tr;

View File

@ -140,6 +140,7 @@ public:
bool HasModelData() const; bool HasModelData() const;
const CSfxHandle* GetSfxHandle() const; const CSfxHandle* GetSfxHandle() const;
void SetSfxPitchBend(s32); void SetSfxPitchBend(s32);
void SetRotation(const zeus::CQuaternion& q);
void SetTranslation(const zeus::CVector3f& tr); void SetTranslation(const zeus::CVector3f& tr);
void SetAddedToken(u32 tok); void SetAddedToken(u32 tok);
float GetPitch() const; float GetPitch() const;

View File

@ -1,6 +1,7 @@
#include "CGameLight.hpp" #include "World/CGameLight.hpp"
#include "CActorParameters.hpp" #include "World/CActorParameters.hpp"
#include "CStateManager.hpp" #include "CStateManager.hpp"
#include "TCastTo.hpp"
namespace urde namespace urde
{ {
@ -9,20 +10,25 @@ CGameLight::CGameLight(TUniqueId uid, TAreaId aid, bool active, const std::strin
TUniqueId parentId, const CLight& light, u32 w1, u32 w2, float f1) TUniqueId parentId, const CLight& light, u32 w1, u32 w2, float f1)
: CActor(uid, active, name, CEntityInfo(aid, CEntity::NullConnectionList), xf, : CActor(uid, active, name, CEntityInfo(aid, CEntity::NullConnectionList), xf,
CModelData::CModelDataNull(), CMaterialList(), CActorParameters::None(), kInvalidUniqueId), CModelData::CModelDataNull(), CMaterialList(), CActorParameters::None(), kInvalidUniqueId),
xe8_parentId(parentId), xec_light(light), x13c_(w1), x140_(w2), x144_(f1) xe8_parentId(parentId), xec_light(light), x13c_(w1), x140_(w2), x144_lifeTime(f1)
{ {
xec_light.GetRadius(); xec_light.GetRadius();
xec_light.GetIntensity(); xec_light.GetIntensity();
SetLightPriorityAndId(); SetLightPriorityAndId();
} }
void CGameLight::Accept(IVisitor &visitor)
{
visitor.Visit(this);
}
void CGameLight::Think(float dt, CStateManager& mgr) void CGameLight::Think(float dt, CStateManager& mgr)
{ {
if (x144_ <= 0.f) if (x144_lifeTime <= 0.f)
return; return;
x144_ -= dt; x144_lifeTime -= dt;
if (x144_ <= 0.f) if (x144_lifeTime <= 0.f)
mgr.RemoveActor(GetUniqueId()); mgr.RemoveActor(GetUniqueId());
} }

View File

@ -11,12 +11,13 @@ class CGameLight : public CActor
CLight xec_light; CLight xec_light;
u32 x13c_; u32 x13c_;
u32 x140_; u32 x140_;
float x144_; float x144_lifeTime;
public: public:
CGameLight(TUniqueId, TAreaId, bool, const std::string&, const zeus::CTransform&, TUniqueId, const CLight&, u32, CGameLight(TUniqueId, TAreaId, bool, const std::string&, const zeus::CTransform&, TUniqueId, const CLight&, u32,
u32, float); u32, float);
void Accept(IVisitor &visitor);
void Think(float, CStateManager&); void Think(float, CStateManager&);
void SetLightPriorityAndId(); void SetLightPriorityAndId();
void SetLight(const CLight&); void SetLight(const CLight&);

View File

@ -23,7 +23,7 @@ CLight CWorldLight::GetAsCGraphicsLight() const
zeus::CColor color(x4_color.x, x4_color.y, x4_color.z); zeus::CColor color(x4_color.x, x4_color.y, x4_color.z);
float tmp = x28_q; float tmp = x28_q;
if (epsilon < tmp) if (epsilon < tmp)
tmp = 0.0000011920929f; tmp = 0.000001f;
/* /*
if (x0_type == ELightType::Spot) if (x0_type == ELightType::Spot)
{ {

@ -1 +1 @@
Subproject commit 03e7124c5f576033c10ad2d0a116e4a331c0381d Subproject commit a4761350329459605dfb98d7eb27d453e6da2d29