mirror of https://github.com/AxioDL/metaforce.git
initial CGraphics class
This commit is contained in:
parent
93f8ae8905
commit
43a818d1a3
|
@ -0,0 +1,36 @@
|
||||||
|
#include "CGraphics.hpp"
|
||||||
|
#include <Math.hpp>
|
||||||
|
|
||||||
|
namespace Retro
|
||||||
|
{
|
||||||
|
|
||||||
|
u32 CGraphics::g_NumLightsActive = 0;
|
||||||
|
ERglLight CGraphics::g_LightActive = ERglLight::None;
|
||||||
|
ERglLight CGraphics::g_LightsWereOn = ERglLight::None;
|
||||||
|
|
||||||
|
void CGraphics::DisableAllLights()
|
||||||
|
{
|
||||||
|
g_NumLightsActive = 0;
|
||||||
|
g_LightActive = ERglLight::None;
|
||||||
|
// TODO: turn lights off for real
|
||||||
|
}
|
||||||
|
|
||||||
|
void CGraphics::EnableLight(ERglLight light)
|
||||||
|
{
|
||||||
|
if ((light & g_LightActive) == ERglLight::None)
|
||||||
|
{
|
||||||
|
g_LightActive |= light;
|
||||||
|
++g_NumLightsActive;
|
||||||
|
// TODO: turn light on for real
|
||||||
|
}
|
||||||
|
g_LightsWereOn = g_LightActive;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CGraphics::SetLightState(ERglLight lightState)
|
||||||
|
{
|
||||||
|
// TODO: set state for real
|
||||||
|
g_LightActive = lightState;
|
||||||
|
g_NumLightsActive = Zeus::Math::PopCount(lightState);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
#ifndef __RETRO_CGRAPHICS_HPP__
|
||||||
|
#define __RETRO_CGRAPHICS_HPP__
|
||||||
|
|
||||||
|
#include "RetroTypes.hpp"
|
||||||
|
|
||||||
|
namespace Retro
|
||||||
|
{
|
||||||
|
|
||||||
|
enum class ERglLight : u8
|
||||||
|
{
|
||||||
|
None = 0,
|
||||||
|
Zero = 1,
|
||||||
|
One = 1 << 1,
|
||||||
|
Two = 1 << 2,
|
||||||
|
Three = 1 << 3,
|
||||||
|
Four = 1 << 4,
|
||||||
|
Five = 1 << 5,
|
||||||
|
Six = 1 << 6,
|
||||||
|
Seven = 1 << 7
|
||||||
|
};
|
||||||
|
ENABLE_BITWISE_ENUM(ERglLight)
|
||||||
|
|
||||||
|
class CGraphics
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static u32 g_NumLightsActive;
|
||||||
|
static ERglLight g_LightActive;
|
||||||
|
static ERglLight g_LightsWereOn;
|
||||||
|
static void DisableAllLights();
|
||||||
|
static void EnableLight(ERglLight light);
|
||||||
|
static void SetLightState(ERglLight lightState);
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __RETRO_CGRAPHICS_HPP__
|
|
@ -67,6 +67,7 @@ add_library(RuntimeCommon
|
||||||
CPlayMovieBase.hpp
|
CPlayMovieBase.hpp
|
||||||
CMoviePlayer.hpp CMoviePlayer.cpp
|
CMoviePlayer.hpp CMoviePlayer.cpp
|
||||||
CGameDebug.hpp CGameDebug.cpp
|
CGameDebug.hpp CGameDebug.cpp
|
||||||
|
CGraphics.hpp CGraphics.cpp
|
||||||
rstl.hpp rstl.cpp
|
rstl.hpp rstl.cpp
|
||||||
GameGlobalObjects.hpp
|
GameGlobalObjects.hpp
|
||||||
RetroTypes.hpp
|
RetroTypes.hpp
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
#include "CElementGen.hpp"
|
#include "CElementGen.hpp"
|
||||||
#include "CGenDescription.hpp"
|
#include "CGenDescription.hpp"
|
||||||
#include "CLight.hpp"
|
|
||||||
#include "CParticleGlobals.hpp"
|
#include "CParticleGlobals.hpp"
|
||||||
#include "CParticleSwoosh.hpp"
|
#include "CParticleSwoosh.hpp"
|
||||||
#include "CParticleElectric.hpp"
|
#include "CParticleElectric.hpp"
|
||||||
|
@ -925,6 +924,48 @@ u32 CElementGen::GetSystemCount()
|
||||||
}
|
}
|
||||||
|
|
||||||
void CElementGen::Render()
|
void CElementGen::Render()
|
||||||
|
{
|
||||||
|
CGenDescription* desc = x1c_genDesc.CastObj<CGenDescription>();
|
||||||
|
|
||||||
|
x22c_backupLightActive = CGraphics::g_LightActive;
|
||||||
|
CGraphics::DisableAllLights();
|
||||||
|
|
||||||
|
for (std::unique_ptr<CElementGen>& child : x234_activePartChildren)
|
||||||
|
child->Render();
|
||||||
|
|
||||||
|
if (x214_PSLT <= x50_curFrame)
|
||||||
|
for (std::unique_ptr<CElementGen>& child : x248_finishPartChildren)
|
||||||
|
child->Render();
|
||||||
|
|
||||||
|
for (std::unique_ptr<CParticleSwoosh>& child : x260_swhcChildren)
|
||||||
|
child->Render();
|
||||||
|
|
||||||
|
for (std::unique_ptr<CParticleElectric>& child : x280_elscChildren)
|
||||||
|
child->Render();
|
||||||
|
|
||||||
|
if (x2c_particleLists.size())
|
||||||
|
{
|
||||||
|
SParticleModel& pmdl = desc->x5c_PMDL;
|
||||||
|
if (pmdl.m_found || desc->x45_24_PMUS)
|
||||||
|
RenderModels();
|
||||||
|
|
||||||
|
if (x225_26_LINE)
|
||||||
|
RenderLines();
|
||||||
|
else
|
||||||
|
RenderParticles();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CElementGen::RenderModels()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CElementGen::RenderLines()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void CElementGen::RenderParticles()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include "CAABox.hpp"
|
#include "CAABox.hpp"
|
||||||
#include "CToken.hpp"
|
#include "CToken.hpp"
|
||||||
#include "CLight.hpp"
|
#include "CLight.hpp"
|
||||||
|
#include "CGraphics.hpp"
|
||||||
#include "CRandom16.hpp"
|
#include "CRandom16.hpp"
|
||||||
|
|
||||||
namespace Retro
|
namespace Retro
|
||||||
|
@ -110,7 +111,7 @@ protected:
|
||||||
bool x225_29 = false;
|
bool x225_29 = false;
|
||||||
bool x226;
|
bool x226;
|
||||||
int x228_MBSP;
|
int x228_MBSP;
|
||||||
bool x22c = false;
|
ERglLight x22c_backupLightActive = ERglLight::None;
|
||||||
CRandom16 x230_randState;
|
CRandom16 x230_randState;
|
||||||
std::vector<std::unique_ptr<CElementGen>> x234_activePartChildren;
|
std::vector<std::unique_ptr<CElementGen>> x234_activePartChildren;
|
||||||
int x244_CSSD = 0;
|
int x244_CSSD = 0;
|
||||||
|
@ -183,6 +184,10 @@ public:
|
||||||
u32 GetParticleCountAllInternal() const;
|
u32 GetParticleCountAllInternal() const;
|
||||||
u32 GetParticleCountAll() const {return x20c_recursiveParticleCount;}
|
u32 GetParticleCountAll() const {return x20c_recursiveParticleCount;}
|
||||||
|
|
||||||
|
void RenderModels();
|
||||||
|
void RenderLines();
|
||||||
|
void RenderParticles();
|
||||||
|
|
||||||
virtual void Update(double);
|
virtual void Update(double);
|
||||||
bool InternalUpdate(double);
|
bool InternalUpdate(double);
|
||||||
virtual void Render();
|
virtual void Render();
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 831be46890a3c97b7dde4fa777ddba7a0826c98b
|
Subproject commit d6f77c2afe63259dfd23ff80574ebacfc13cca4d
|
Loading…
Reference in New Issue