mirror of
https://github.com/whoahq/whoa.git
synced 2026-02-01 16:22:45 +03:00
chore(component): render prep funcs are not static
This commit is contained in:
parent
794003086b
commit
b370d86f7d
@ -18,7 +18,7 @@ uint32_t CCharacterComponent::s_chrVarArrayLength;
|
|||||||
EGxTexFormat CCharacterComponent::s_gxFormat;
|
EGxTexFormat CCharacterComponent::s_gxFormat;
|
||||||
ITEM_FUNC CCharacterComponent::s_itemFunc[];
|
ITEM_FUNC CCharacterComponent::s_itemFunc[];
|
||||||
uint32_t CCharacterComponent::s_mipLevels;
|
uint32_t CCharacterComponent::s_mipLevels;
|
||||||
PREP_FUNC* CCharacterComponent::s_prepFunc[];
|
PREP_FUNC CCharacterComponent::s_prepFunc[];
|
||||||
CompSectionInfo CCharacterComponent::s_sectionInfo[];
|
CompSectionInfo CCharacterComponent::s_sectionInfo[];
|
||||||
MipBits* CCharacterComponent::s_textureBuffer;
|
MipBits* CCharacterComponent::s_textureBuffer;
|
||||||
MipBits* CCharacterComponent::s_textureBufferCompressed;
|
MipBits* CCharacterComponent::s_textureBufferCompressed;
|
||||||
@ -401,230 +401,6 @@ void CCharacterComponent::PasteTransparent8Bit(void* srcTexture, const BlpPalPix
|
|||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCharacterComponent::RenderPrepAL(CCharacterComponent* component) {
|
|
||||||
auto& itemDisplay = component->m_itemDisplays[SECTION_ARM_LOWER];
|
|
||||||
|
|
||||||
// Skin texture
|
|
||||||
|
|
||||||
auto skinTexture = component->m_texture[TEXTURE_INDEX(VARIATION_SKIN, 0)];
|
|
||||||
CCharacterComponent::PasteFromSkin(SECTION_ARM_LOWER, skinTexture, CCharacterComponent::s_textureBuffer);
|
|
||||||
|
|
||||||
// Item textures
|
|
||||||
|
|
||||||
for (int32_t priority = 0; priority < SECTION_AL_ITEM_PRIORITIES; priority++) {
|
|
||||||
if (itemDisplay.priorityDirty & (1 << priority)) {
|
|
||||||
CCharacterComponent::PasteToSection(SECTION_ARM_LOWER, itemDisplay.texture[priority], CCharacterComponent::s_textureBuffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCharacterComponent::RenderPrepAU(CCharacterComponent* component) {
|
|
||||||
auto& itemDisplay = component->m_itemDisplays[SECTION_ARM_UPPER];
|
|
||||||
|
|
||||||
// Skin texture
|
|
||||||
|
|
||||||
auto skinTexture = component->m_texture[TEXTURE_INDEX(VARIATION_SKIN, 0)];
|
|
||||||
CCharacterComponent::PasteFromSkin(SECTION_ARM_UPPER, skinTexture, CCharacterComponent::s_textureBuffer);
|
|
||||||
|
|
||||||
// Item textures
|
|
||||||
|
|
||||||
for (int32_t priority = 0; priority < SECTION_AU_ITEM_PRIORITIES; priority++) {
|
|
||||||
if (itemDisplay.priorityDirty & (1 << priority)) {
|
|
||||||
CCharacterComponent::PasteToSection(SECTION_ARM_UPPER, itemDisplay.texture[priority], CCharacterComponent::s_textureBuffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCharacterComponent::RenderPrepFO(CCharacterComponent* component) {
|
|
||||||
auto& itemDisplay = component->m_itemDisplays[SECTION_FOOT];
|
|
||||||
|
|
||||||
// Skin texture
|
|
||||||
|
|
||||||
auto skinTexture = component->m_texture[TEXTURE_INDEX(VARIATION_SKIN, 0)];
|
|
||||||
CCharacterComponent::PasteFromSkin(SECTION_FOOT, skinTexture, CCharacterComponent::s_textureBuffer);
|
|
||||||
|
|
||||||
// Item textures
|
|
||||||
|
|
||||||
for (int32_t priority = 0; priority < SECTION_FO_ITEM_PRIORITIES; priority++) {
|
|
||||||
if (itemDisplay.priorityDirty & (1 << priority)) {
|
|
||||||
CCharacterComponent::PasteToSection(SECTION_FOOT, itemDisplay.texture[priority], CCharacterComponent::s_textureBuffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCharacterComponent::RenderPrepHA(CCharacterComponent* component) {
|
|
||||||
auto& itemDisplay = component->m_itemDisplays[SECTION_HAND];
|
|
||||||
|
|
||||||
// Skin texture
|
|
||||||
|
|
||||||
auto skinTexture = component->m_texture[TEXTURE_INDEX(VARIATION_SKIN, 0)];
|
|
||||||
CCharacterComponent::PasteFromSkin(SECTION_HAND, skinTexture, CCharacterComponent::s_textureBuffer);
|
|
||||||
|
|
||||||
// Item textures
|
|
||||||
|
|
||||||
for (int32_t priority = 0; priority < SECTION_HA_ITEM_PRIORITIES; priority++) {
|
|
||||||
if (itemDisplay.priorityDirty & (1 << priority)) {
|
|
||||||
CCharacterComponent::PasteToSection(SECTION_HAND, itemDisplay.texture[priority], CCharacterComponent::s_textureBuffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCharacterComponent::RenderPrepHL(CCharacterComponent* component) {
|
|
||||||
auto sectionsRec = component->GetSectionsRecord(VARIATION_SKIN, 0, component->m_data.skinColorID, nullptr);
|
|
||||||
|
|
||||||
// Skin texture
|
|
||||||
|
|
||||||
if (sectionsRec && sectionsRec->m_flags & 0x8) {
|
|
||||||
auto skinTexture = component->m_texture[TEXTURE_INDEX(VARIATION_SKIN, 0)];
|
|
||||||
CCharacterComponent::PasteFromSkin(SECTION_HEAD_LOWER, skinTexture, CCharacterComponent::s_textureBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Face texture
|
|
||||||
|
|
||||||
auto faceLowerTexture = component->m_texture[TEXTURE_INDEX(VARIATION_FACE, 0)];
|
|
||||||
if (faceLowerTexture) {
|
|
||||||
CCharacterComponent::PasteToSection(SECTION_HEAD_LOWER, faceLowerTexture, CCharacterComponent::s_textureBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Hair textures
|
|
||||||
|
|
||||||
auto facialHairLowerTexture = component->m_texture[TEXTURE_INDEX(VARIATION_FACIAL_HAIR, 0)];
|
|
||||||
if (facialHairLowerTexture) {
|
|
||||||
CCharacterComponent::PasteToSection(SECTION_HEAD_LOWER, facialHairLowerTexture, CCharacterComponent::s_textureBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
auto hairLowerTexture = component->m_texture[TEXTURE_INDEX(VARIATION_HAIR, 1)];
|
|
||||||
if (hairLowerTexture) {
|
|
||||||
CCharacterComponent::PasteToSection(SECTION_HEAD_LOWER, hairLowerTexture, CCharacterComponent::s_textureBuffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCharacterComponent::RenderPrepHU(CCharacterComponent* component) {
|
|
||||||
auto sectionsRec = component->GetSectionsRecord(VARIATION_SKIN, 0, component->m_data.skinColorID, nullptr);
|
|
||||||
|
|
||||||
// Skin texture
|
|
||||||
|
|
||||||
if (sectionsRec && sectionsRec->m_flags & 0x8) {
|
|
||||||
auto skinTexture = component->m_texture[TEXTURE_INDEX(VARIATION_SKIN, 0)];
|
|
||||||
CCharacterComponent::PasteFromSkin(SECTION_HEAD_UPPER, skinTexture, CCharacterComponent::s_textureBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Face texture
|
|
||||||
|
|
||||||
auto faceUpperTexture = component->m_texture[TEXTURE_INDEX(VARIATION_FACE, 1)];
|
|
||||||
if (faceUpperTexture) {
|
|
||||||
CCharacterComponent::PasteToSection(SECTION_HEAD_UPPER, faceUpperTexture, CCharacterComponent::s_textureBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Hair textures
|
|
||||||
|
|
||||||
auto facialHairUpperTexture = component->m_texture[TEXTURE_INDEX(VARIATION_FACIAL_HAIR, 1)];
|
|
||||||
if (facialHairUpperTexture) {
|
|
||||||
CCharacterComponent::PasteToSection(SECTION_HEAD_UPPER, facialHairUpperTexture, CCharacterComponent::s_textureBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
auto hairUpperTexture = component->m_texture[TEXTURE_INDEX(VARIATION_HAIR, 2)];
|
|
||||||
if (hairUpperTexture) {
|
|
||||||
CCharacterComponent::PasteToSection(SECTION_HEAD_UPPER, hairUpperTexture, CCharacterComponent::s_textureBuffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCharacterComponent::RenderPrepLL(CCharacterComponent* component) {
|
|
||||||
auto& itemDisplay = component->m_itemDisplays[SECTION_LEG_LOWER];
|
|
||||||
|
|
||||||
// Skin texture
|
|
||||||
|
|
||||||
auto skinTexture = component->m_texture[TEXTURE_INDEX(VARIATION_SKIN, 0)];
|
|
||||||
CCharacterComponent::PasteFromSkin(SECTION_LEG_LOWER, skinTexture, CCharacterComponent::s_textureBuffer);
|
|
||||||
|
|
||||||
// Item textures
|
|
||||||
|
|
||||||
auto firstPriority = 0;
|
|
||||||
auto itemPriorities = SECTION_LL_ITEM_PRIORITIES;
|
|
||||||
|
|
||||||
if (component->m_flags & 0x20) {
|
|
||||||
firstPriority = 1;
|
|
||||||
itemPriorities = SECTION_LL_ITEM_PRIORITIES - 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int32_t priority = firstPriority; priority < itemPriorities; priority++) {
|
|
||||||
if (itemDisplay.priorityDirty & (1 << priority)) {
|
|
||||||
CCharacterComponent::PasteToSection(SECTION_LEG_LOWER, itemDisplay.texture[priority], CCharacterComponent::s_textureBuffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCharacterComponent::RenderPrepLU(CCharacterComponent* component) {
|
|
||||||
auto& itemDisplay = component->m_itemDisplays[SECTION_LEG_UPPER];
|
|
||||||
|
|
||||||
// Skin texture
|
|
||||||
|
|
||||||
auto skinTexture = component->m_texture[TEXTURE_INDEX(VARIATION_SKIN, 0)];
|
|
||||||
CCharacterComponent::PasteFromSkin(SECTION_LEG_UPPER, skinTexture, CCharacterComponent::s_textureBuffer);
|
|
||||||
|
|
||||||
// Underwear texture
|
|
||||||
|
|
||||||
if ((component->m_flags & 0x20) || !(itemDisplay.priorityDirty & ((1 << 0) | (1 << 1)))) {
|
|
||||||
auto bottomUnderwearTexture = component->m_texture[TEXTURE_INDEX(VARIATION_UNDERWEAR, 0)];
|
|
||||||
if (bottomUnderwearTexture) {
|
|
||||||
CCharacterComponent::PasteToSection(SECTION_LEG_UPPER, bottomUnderwearTexture, CCharacterComponent::s_textureBuffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Item textures
|
|
||||||
|
|
||||||
auto firstPriority = (component->m_flags & 0x20) ? 1 : 0;
|
|
||||||
|
|
||||||
for (int32_t priority = firstPriority; priority < SECTION_LU_ITEM_PRIORITIES; priority++) {
|
|
||||||
if (itemDisplay.priorityDirty & (1 << priority)) {
|
|
||||||
CCharacterComponent::PasteToSection(SECTION_LEG_UPPER, itemDisplay.texture[priority], CCharacterComponent::s_textureBuffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCharacterComponent::RenderPrepTL(CCharacterComponent* component) {
|
|
||||||
auto& itemDisplay = component->m_itemDisplays[SECTION_TORSO_LOWER];
|
|
||||||
|
|
||||||
// Skin texture
|
|
||||||
|
|
||||||
auto skinTexture = component->m_texture[TEXTURE_INDEX(VARIATION_SKIN, 0)];
|
|
||||||
CCharacterComponent::PasteFromSkin(SECTION_TORSO_LOWER, skinTexture, CCharacterComponent::s_textureBuffer);
|
|
||||||
|
|
||||||
// Item textures
|
|
||||||
|
|
||||||
for (int32_t priority = 0; priority < SECTION_TL_ITEM_PRIORITIES; priority++) {
|
|
||||||
if (itemDisplay.priorityDirty & (1 << priority)) {
|
|
||||||
CCharacterComponent::PasteToSection(SECTION_TORSO_LOWER, itemDisplay.texture[priority], CCharacterComponent::s_textureBuffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCharacterComponent::RenderPrepTU(CCharacterComponent* component) {
|
|
||||||
auto& itemDisplay = component->m_itemDisplays[SECTION_TORSO_UPPER];
|
|
||||||
|
|
||||||
// Skin texture
|
|
||||||
|
|
||||||
auto skinTexture = component->m_texture[TEXTURE_INDEX(VARIATION_SKIN, 0)];
|
|
||||||
CCharacterComponent::PasteFromSkin(SECTION_TORSO_UPPER, skinTexture, CCharacterComponent::s_textureBuffer);
|
|
||||||
|
|
||||||
// Underwear texture
|
|
||||||
|
|
||||||
if (!(itemDisplay.priorityDirty & ((1 << 0) | (1 << 1) | (1 << 2)))) {
|
|
||||||
auto topUnderwearTexture = component->m_texture[TEXTURE_INDEX(VARIATION_UNDERWEAR, 1)];
|
|
||||||
if (topUnderwearTexture) {
|
|
||||||
CCharacterComponent::PasteToSection(SECTION_TORSO_UPPER, topUnderwearTexture, CCharacterComponent::s_textureBuffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Item textures
|
|
||||||
|
|
||||||
for (int32_t priority = 0; priority < SECTION_TU_ITEM_PRIORITIES; priority++) {
|
|
||||||
if (itemDisplay.priorityDirty & (1 << priority)) {
|
|
||||||
CCharacterComponent::PasteToSection(SECTION_TORSO_UPPER, itemDisplay.texture[priority], CCharacterComponent::s_textureBuffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCharacterComponent::UpdateBaseTexture(EGxTexCommand cmd, uint32_t width, uint32_t height, uint32_t depth, uint32_t mipLevel, void* userArg, uint32_t& texelStrideInBytes, const void*& texels) {
|
void CCharacterComponent::UpdateBaseTexture(EGxTexCommand cmd, uint32_t width, uint32_t height, uint32_t depth, uint32_t mipLevel, void* userArg, uint32_t& texelStrideInBytes, const void*& texels) {
|
||||||
auto component = static_cast<CCharacterComponent*>(userArg);
|
auto component = static_cast<CCharacterComponent*>(userArg);
|
||||||
|
|
||||||
@ -847,6 +623,230 @@ int32_t CCharacterComponent::RenderPrep(int32_t a2) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CCharacterComponent::RenderPrepAL() {
|
||||||
|
auto& itemDisplay = this->m_itemDisplays[SECTION_ARM_LOWER];
|
||||||
|
|
||||||
|
// Skin texture
|
||||||
|
|
||||||
|
auto skinTexture = this->m_texture[TEXTURE_INDEX(VARIATION_SKIN, 0)];
|
||||||
|
CCharacterComponent::PasteFromSkin(SECTION_ARM_LOWER, skinTexture, CCharacterComponent::s_textureBuffer);
|
||||||
|
|
||||||
|
// Item textures
|
||||||
|
|
||||||
|
for (int32_t priority = 0; priority < SECTION_AL_ITEM_PRIORITIES; priority++) {
|
||||||
|
if (itemDisplay.priorityDirty & (1 << priority)) {
|
||||||
|
CCharacterComponent::PasteToSection(SECTION_ARM_LOWER, itemDisplay.texture[priority], CCharacterComponent::s_textureBuffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CCharacterComponent::RenderPrepAU() {
|
||||||
|
auto& itemDisplay = this->m_itemDisplays[SECTION_ARM_UPPER];
|
||||||
|
|
||||||
|
// Skin texture
|
||||||
|
|
||||||
|
auto skinTexture = this->m_texture[TEXTURE_INDEX(VARIATION_SKIN, 0)];
|
||||||
|
CCharacterComponent::PasteFromSkin(SECTION_ARM_UPPER, skinTexture, CCharacterComponent::s_textureBuffer);
|
||||||
|
|
||||||
|
// Item textures
|
||||||
|
|
||||||
|
for (int32_t priority = 0; priority < SECTION_AU_ITEM_PRIORITIES; priority++) {
|
||||||
|
if (itemDisplay.priorityDirty & (1 << priority)) {
|
||||||
|
CCharacterComponent::PasteToSection(SECTION_ARM_UPPER, itemDisplay.texture[priority], CCharacterComponent::s_textureBuffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CCharacterComponent::RenderPrepFO() {
|
||||||
|
auto& itemDisplay = this->m_itemDisplays[SECTION_FOOT];
|
||||||
|
|
||||||
|
// Skin texture
|
||||||
|
|
||||||
|
auto skinTexture = this->m_texture[TEXTURE_INDEX(VARIATION_SKIN, 0)];
|
||||||
|
CCharacterComponent::PasteFromSkin(SECTION_FOOT, skinTexture, CCharacterComponent::s_textureBuffer);
|
||||||
|
|
||||||
|
// Item textures
|
||||||
|
|
||||||
|
for (int32_t priority = 0; priority < SECTION_FO_ITEM_PRIORITIES; priority++) {
|
||||||
|
if (itemDisplay.priorityDirty & (1 << priority)) {
|
||||||
|
CCharacterComponent::PasteToSection(SECTION_FOOT, itemDisplay.texture[priority], CCharacterComponent::s_textureBuffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CCharacterComponent::RenderPrepHA() {
|
||||||
|
auto& itemDisplay = this->m_itemDisplays[SECTION_HAND];
|
||||||
|
|
||||||
|
// Skin texture
|
||||||
|
|
||||||
|
auto skinTexture = this->m_texture[TEXTURE_INDEX(VARIATION_SKIN, 0)];
|
||||||
|
CCharacterComponent::PasteFromSkin(SECTION_HAND, skinTexture, CCharacterComponent::s_textureBuffer);
|
||||||
|
|
||||||
|
// Item textures
|
||||||
|
|
||||||
|
for (int32_t priority = 0; priority < SECTION_HA_ITEM_PRIORITIES; priority++) {
|
||||||
|
if (itemDisplay.priorityDirty & (1 << priority)) {
|
||||||
|
CCharacterComponent::PasteToSection(SECTION_HAND, itemDisplay.texture[priority], CCharacterComponent::s_textureBuffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CCharacterComponent::RenderPrepHL() {
|
||||||
|
auto sectionsRec = this->GetSectionsRecord(VARIATION_SKIN, 0, this->m_data.skinColorID, nullptr);
|
||||||
|
|
||||||
|
// Skin texture
|
||||||
|
|
||||||
|
if (sectionsRec && sectionsRec->m_flags & 0x8) {
|
||||||
|
auto skinTexture = this->m_texture[TEXTURE_INDEX(VARIATION_SKIN, 0)];
|
||||||
|
CCharacterComponent::PasteFromSkin(SECTION_HEAD_LOWER, skinTexture, CCharacterComponent::s_textureBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Face texture
|
||||||
|
|
||||||
|
auto faceLowerTexture = this->m_texture[TEXTURE_INDEX(VARIATION_FACE, 0)];
|
||||||
|
if (faceLowerTexture) {
|
||||||
|
CCharacterComponent::PasteToSection(SECTION_HEAD_LOWER, faceLowerTexture, CCharacterComponent::s_textureBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hair textures
|
||||||
|
|
||||||
|
auto facialHairLowerTexture = this->m_texture[TEXTURE_INDEX(VARIATION_FACIAL_HAIR, 0)];
|
||||||
|
if (facialHairLowerTexture) {
|
||||||
|
CCharacterComponent::PasteToSection(SECTION_HEAD_LOWER, facialHairLowerTexture, CCharacterComponent::s_textureBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
auto hairLowerTexture = this->m_texture[TEXTURE_INDEX(VARIATION_HAIR, 1)];
|
||||||
|
if (hairLowerTexture) {
|
||||||
|
CCharacterComponent::PasteToSection(SECTION_HEAD_LOWER, hairLowerTexture, CCharacterComponent::s_textureBuffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CCharacterComponent::RenderPrepHU() {
|
||||||
|
auto sectionsRec = this->GetSectionsRecord(VARIATION_SKIN, 0, this->m_data.skinColorID, nullptr);
|
||||||
|
|
||||||
|
// Skin texture
|
||||||
|
|
||||||
|
if (sectionsRec && sectionsRec->m_flags & 0x8) {
|
||||||
|
auto skinTexture = this->m_texture[TEXTURE_INDEX(VARIATION_SKIN, 0)];
|
||||||
|
CCharacterComponent::PasteFromSkin(SECTION_HEAD_UPPER, skinTexture, CCharacterComponent::s_textureBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Face texture
|
||||||
|
|
||||||
|
auto faceUpperTexture = this->m_texture[TEXTURE_INDEX(VARIATION_FACE, 1)];
|
||||||
|
if (faceUpperTexture) {
|
||||||
|
CCharacterComponent::PasteToSection(SECTION_HEAD_UPPER, faceUpperTexture, CCharacterComponent::s_textureBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hair textures
|
||||||
|
|
||||||
|
auto facialHairUpperTexture = this->m_texture[TEXTURE_INDEX(VARIATION_FACIAL_HAIR, 1)];
|
||||||
|
if (facialHairUpperTexture) {
|
||||||
|
CCharacterComponent::PasteToSection(SECTION_HEAD_UPPER, facialHairUpperTexture, CCharacterComponent::s_textureBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
auto hairUpperTexture = this->m_texture[TEXTURE_INDEX(VARIATION_HAIR, 2)];
|
||||||
|
if (hairUpperTexture) {
|
||||||
|
CCharacterComponent::PasteToSection(SECTION_HEAD_UPPER, hairUpperTexture, CCharacterComponent::s_textureBuffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CCharacterComponent::RenderPrepLL() {
|
||||||
|
auto& itemDisplay = this->m_itemDisplays[SECTION_LEG_LOWER];
|
||||||
|
|
||||||
|
// Skin texture
|
||||||
|
|
||||||
|
auto skinTexture = this->m_texture[TEXTURE_INDEX(VARIATION_SKIN, 0)];
|
||||||
|
CCharacterComponent::PasteFromSkin(SECTION_LEG_LOWER, skinTexture, CCharacterComponent::s_textureBuffer);
|
||||||
|
|
||||||
|
// Item textures
|
||||||
|
|
||||||
|
auto firstPriority = 0;
|
||||||
|
auto itemPriorities = SECTION_LL_ITEM_PRIORITIES;
|
||||||
|
|
||||||
|
if (this->m_flags & 0x20) {
|
||||||
|
firstPriority = 1;
|
||||||
|
itemPriorities = SECTION_LL_ITEM_PRIORITIES - 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int32_t priority = firstPriority; priority < itemPriorities; priority++) {
|
||||||
|
if (itemDisplay.priorityDirty & (1 << priority)) {
|
||||||
|
CCharacterComponent::PasteToSection(SECTION_LEG_LOWER, itemDisplay.texture[priority], CCharacterComponent::s_textureBuffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CCharacterComponent::RenderPrepLU() {
|
||||||
|
auto& itemDisplay = this->m_itemDisplays[SECTION_LEG_UPPER];
|
||||||
|
|
||||||
|
// Skin texture
|
||||||
|
|
||||||
|
auto skinTexture = this->m_texture[TEXTURE_INDEX(VARIATION_SKIN, 0)];
|
||||||
|
CCharacterComponent::PasteFromSkin(SECTION_LEG_UPPER, skinTexture, CCharacterComponent::s_textureBuffer);
|
||||||
|
|
||||||
|
// Underwear texture
|
||||||
|
|
||||||
|
if ((this->m_flags & 0x20) || !(itemDisplay.priorityDirty & ((1 << 0) | (1 << 1)))) {
|
||||||
|
auto bottomUnderwearTexture = this->m_texture[TEXTURE_INDEX(VARIATION_UNDERWEAR, 0)];
|
||||||
|
if (bottomUnderwearTexture) {
|
||||||
|
CCharacterComponent::PasteToSection(SECTION_LEG_UPPER, bottomUnderwearTexture, CCharacterComponent::s_textureBuffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Item textures
|
||||||
|
|
||||||
|
auto firstPriority = (this->m_flags & 0x20) ? 1 : 0;
|
||||||
|
|
||||||
|
for (int32_t priority = firstPriority; priority < SECTION_LU_ITEM_PRIORITIES; priority++) {
|
||||||
|
if (itemDisplay.priorityDirty & (1 << priority)) {
|
||||||
|
CCharacterComponent::PasteToSection(SECTION_LEG_UPPER, itemDisplay.texture[priority], CCharacterComponent::s_textureBuffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CCharacterComponent::RenderPrepTL() {
|
||||||
|
auto& itemDisplay = this->m_itemDisplays[SECTION_TORSO_LOWER];
|
||||||
|
|
||||||
|
// Skin texture
|
||||||
|
|
||||||
|
auto skinTexture = this->m_texture[TEXTURE_INDEX(VARIATION_SKIN, 0)];
|
||||||
|
CCharacterComponent::PasteFromSkin(SECTION_TORSO_LOWER, skinTexture, CCharacterComponent::s_textureBuffer);
|
||||||
|
|
||||||
|
// Item textures
|
||||||
|
|
||||||
|
for (int32_t priority = 0; priority < SECTION_TL_ITEM_PRIORITIES; priority++) {
|
||||||
|
if (itemDisplay.priorityDirty & (1 << priority)) {
|
||||||
|
CCharacterComponent::PasteToSection(SECTION_TORSO_LOWER, itemDisplay.texture[priority], CCharacterComponent::s_textureBuffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CCharacterComponent::RenderPrepTU() {
|
||||||
|
auto& itemDisplay = this->m_itemDisplays[SECTION_TORSO_UPPER];
|
||||||
|
|
||||||
|
// Skin texture
|
||||||
|
|
||||||
|
auto skinTexture = this->m_texture[TEXTURE_INDEX(VARIATION_SKIN, 0)];
|
||||||
|
CCharacterComponent::PasteFromSkin(SECTION_TORSO_UPPER, skinTexture, CCharacterComponent::s_textureBuffer);
|
||||||
|
|
||||||
|
// Underwear texture
|
||||||
|
|
||||||
|
if (!(itemDisplay.priorityDirty & ((1 << 0) | (1 << 1) | (1 << 2)))) {
|
||||||
|
auto topUnderwearTexture = this->m_texture[TEXTURE_INDEX(VARIATION_UNDERWEAR, 1)];
|
||||||
|
if (topUnderwearTexture) {
|
||||||
|
CCharacterComponent::PasteToSection(SECTION_TORSO_UPPER, topUnderwearTexture, CCharacterComponent::s_textureBuffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Item textures
|
||||||
|
|
||||||
|
for (int32_t priority = 0; priority < SECTION_TU_ITEM_PRIORITIES; priority++) {
|
||||||
|
if (itemDisplay.priorityDirty & (1 << priority)) {
|
||||||
|
CCharacterComponent::PasteToSection(SECTION_TORSO_UPPER, itemDisplay.texture[priority], CCharacterComponent::s_textureBuffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CCharacterComponent::RenderPrepAll() {
|
void CCharacterComponent::RenderPrepAll() {
|
||||||
// TODO
|
// TODO
|
||||||
|
|
||||||
@ -856,7 +856,7 @@ void CCharacterComponent::RenderPrepAll() {
|
|||||||
this->ItemsLoaded(1);
|
this->ItemsLoaded(1);
|
||||||
|
|
||||||
for (uint32_t i = 0; i < NUM_COMPONENT_SECTIONS; i++) {
|
for (uint32_t i = 0; i < NUM_COMPONENT_SECTIONS; i++) {
|
||||||
CCharacterComponent::s_prepFunc[i](this);
|
(this->*CCharacterComponent::s_prepFunc[i])();
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
|
|||||||
@ -16,7 +16,7 @@ struct st_race;
|
|||||||
struct TCTEXTUREINFO;
|
struct TCTEXTUREINFO;
|
||||||
|
|
||||||
typedef void (CCharacterComponent::*ITEM_FUNC)(ITEM_SLOT itemSlot, const ItemDisplayInfoRec* displayRec, bool update);
|
typedef void (CCharacterComponent::*ITEM_FUNC)(ITEM_SLOT itemSlot, const ItemDisplayInfoRec* displayRec, bool update);
|
||||||
typedef void (PREP_FUNC)(CCharacterComponent* component);
|
typedef void (CCharacterComponent::*PREP_FUNC)();
|
||||||
|
|
||||||
struct CompSectionInfo {
|
struct CompSectionInfo {
|
||||||
C2iVector pos;
|
C2iVector pos;
|
||||||
@ -38,7 +38,7 @@ class CCharacterComponent {
|
|||||||
static EGxTexFormat s_gxFormat;
|
static EGxTexFormat s_gxFormat;
|
||||||
static ITEM_FUNC s_itemFunc[NUM_COMPONENT_SECTIONS];
|
static ITEM_FUNC s_itemFunc[NUM_COMPONENT_SECTIONS];
|
||||||
static uint32_t s_mipLevels;
|
static uint32_t s_mipLevels;
|
||||||
static PREP_FUNC* s_prepFunc[NUM_COMPONENT_SECTIONS];
|
static PREP_FUNC s_prepFunc[NUM_COMPONENT_SECTIONS];
|
||||||
static CompSectionInfo s_sectionInfo[NUM_COMPONENT_SECTIONS];
|
static CompSectionInfo s_sectionInfo[NUM_COMPONENT_SECTIONS];
|
||||||
static CompSectionInfo s_sectionInfoRaw[NUM_COMPONENT_SECTIONS];
|
static CompSectionInfo s_sectionInfoRaw[NUM_COMPONENT_SECTIONS];
|
||||||
static MipBits* s_textureBuffer;
|
static MipBits* s_textureBuffer;
|
||||||
@ -51,16 +51,6 @@ class CCharacterComponent {
|
|||||||
static void Initialize();
|
static void Initialize();
|
||||||
static void Initialize(EGxTexFormat textureFormat, uint32_t textureLevel, int32_t thread, int32_t compress);
|
static void Initialize(EGxTexFormat textureFormat, uint32_t textureLevel, int32_t thread, int32_t compress);
|
||||||
static void InitDbData();
|
static void InitDbData();
|
||||||
static void RenderPrepAL(CCharacterComponent* component);
|
|
||||||
static void RenderPrepAU(CCharacterComponent* component);
|
|
||||||
static void RenderPrepFO(CCharacterComponent* component);
|
|
||||||
static void RenderPrepHA(CCharacterComponent* component);
|
|
||||||
static void RenderPrepHL(CCharacterComponent* component);
|
|
||||||
static void RenderPrepHU(CCharacterComponent* component);
|
|
||||||
static void RenderPrepLL(CCharacterComponent* component);
|
|
||||||
static void RenderPrepLU(CCharacterComponent* component);
|
|
||||||
static void RenderPrepTL(CCharacterComponent* component);
|
|
||||||
static void RenderPrepTU(CCharacterComponent* component);
|
|
||||||
static void Paste(void* srcTexture, MipBits* dstMips, const C2iVector& a3, const C2iVector& a4, const C2iVector& a5, TCTEXTUREINFO& srcInfo, int32_t srcMipLevel);
|
static void Paste(void* srcTexture, MipBits* dstMips, const C2iVector& a3, const C2iVector& a4, const C2iVector& a5, TCTEXTUREINFO& srcInfo, int32_t srcMipLevel);
|
||||||
static void PasteFromSkin(COMPONENT_SECTIONS section, void* srcTexture, MipBits* dstMips);
|
static void PasteFromSkin(COMPONENT_SECTIONS section, void* srcTexture, MipBits* dstMips);
|
||||||
static void PasteOpaque(void* srcTexture, const BlpPalPixel* srcPal, MipBits* dstMips, const C2iVector& dstPos, uint32_t dstWidth, const C2iVector& srcPos, const C2iVector& srcSize, TCTEXTUREINFO& srcInfo, int32_t srcMipLevel, int32_t dstMipLevelOfs);
|
static void PasteOpaque(void* srcTexture, const BlpPalPixel* srcPal, MipBits* dstMips, const C2iVector& dstPos, uint32_t dstWidth, const C2iVector& srcPos, const C2iVector& srcSize, TCTEXTUREINFO& srcInfo, int32_t srcMipLevel, int32_t dstMipLevelOfs);
|
||||||
@ -91,6 +81,16 @@ class CCharacterComponent {
|
|||||||
void LoadBaseVariation(COMPONENT_VARIATIONS sectionIndex, int32_t textureIndex, int32_t variationIndex, int32_t colorIndex, COMPONENT_SECTIONS section, const char* a7);
|
void LoadBaseVariation(COMPONENT_VARIATIONS sectionIndex, int32_t textureIndex, int32_t variationIndex, int32_t colorIndex, COMPONENT_SECTIONS section, const char* a7);
|
||||||
void PrepSections();
|
void PrepSections();
|
||||||
int32_t RenderPrep(int32_t a2);
|
int32_t RenderPrep(int32_t a2);
|
||||||
|
void RenderPrepAL();
|
||||||
|
void RenderPrepAU();
|
||||||
|
void RenderPrepFO();
|
||||||
|
void RenderPrepHA();
|
||||||
|
void RenderPrepHL();
|
||||||
|
void RenderPrepHU();
|
||||||
|
void RenderPrepLL();
|
||||||
|
void RenderPrepLU();
|
||||||
|
void RenderPrepTL();
|
||||||
|
void RenderPrepTU();
|
||||||
void RenderPrepAll();
|
void RenderPrepAll();
|
||||||
void RenderPrepSections();
|
void RenderPrepSections();
|
||||||
void ReplaceExtraSkinTexture(const char* a2);
|
void ReplaceExtraSkinTexture(const char* a2);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user