Skip to content

Commit

Permalink
Clean GameMtlLib sources.
Browse files Browse the repository at this point in the history
  • Loading branch information
nitrocaster committed Nov 1, 2015
1 parent 4ddede6 commit 5d63a89
Show file tree
Hide file tree
Showing 10 changed files with 239 additions and 322 deletions.
95 changes: 54 additions & 41 deletions src/editors/ShaderEditor/GameMtlLib_Editor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,18 +51,26 @@ void SGameMtl::FillProp (PropItemVec& items, ListItem* owner)
PHelper().CreateFloat (items, "Factors\\Density Factor", &fDensityFactor, 0.0f, 1000.0f, 1.0f, 1);
}

void CGameMtlLibrary::CopyMtlPairs(SGameMtl* from, SGameMtl* to)
SGameMtlPair::SGameMtlPair(const SGameMtlPair &src)
{
for (GameMtlIt m1_it=materials.begin(); m1_it!=materials.end(); ++m1_it)
{
SGameMtl* M1 = *m1_it;
SGameMtlPair* p_from = GetMaterialPair(from->GetID(), M1->GetID());
SGameMtlPair* p_to = GetMaterialPair(to->GetID(), M1->GetID());
OwnProps = src.OwnProps;
ID_parent = src.ID_parent;
BreakingSounds = src.BreakingSounds;
StepSounds = src.StepSounds;
CollideSounds = src.CollideSounds;
CollideParticles = src.CollideParticles;
CollideMarks = src.CollideMarks;
}

if(p_from && p_to)
p_to->CopyFrom(p_from);
void CGameMtlLibrary::CopyMtlPairs(SGameMtl *src, SGameMtl *dst)
{
for (auto &mtl : materials)
{
SGameMtlPair *srcPair = GetMaterialPair(src->GetID(), mtl->GetID());
SGameMtlPair *dstPair = GetMaterialPair(dst->GetID(), mtl->GetID());
if (srcPair && dstPair)
new (dstPair)SGameMtlPair(*srcPair);
}

}

BOOL CGameMtlLibrary::UpdateMtlPairs(SGameMtl* src)
Expand Down Expand Up @@ -126,6 +134,43 @@ void CGameMtlLibrary::RemoveMaterial(LPCSTR name)
//------------------------------------------------------------------------------
// material pair routines
//------------------------------------------------------------------------------

static IC bool ValidateParent(const SGameMtlPair *who, const SGameMtlPair *parent)
{
if (!parent)
return true;
if (who == parent)
return false;
return ValidateParent(who, parent->m_Owner->GetMaterialPair(parent->GetParent()));
}

bool SGameMtlPair::SetParent(int parentId)
{
int ID_parent_save = ID_parent;
ID_parent = parentId;
for (GameMtlPairIt it = m_Owner->FirstMaterialPair(); it != m_Owner->LastMaterialPair(); it++)
{
if (!ValidateParent(*it, m_Owner->GetMaterialPair((*it)->GetParent())))
{
ID_parent = ID_parent_save;
return false;
}
}
// all right
if (GAMEMTL_NONE_ID == ID_parent)
OwnProps.one();
else
{
OwnProps.zero();
OwnProps.set(flBreakingSounds, BreakingSounds.size());
OwnProps.set(flStepSounds, StepSounds.size());
OwnProps.set(flCollideSounds, CollideSounds.size());
OwnProps.set(flCollideParticles, CollideParticles.size());
OwnProps.set(flCollideMarks, CollideMarks.size());
}
return true;
}

void __fastcall SGameMtlPair::OnFlagChange(PropValue* sender)
{
bool bChecked = sender->Owner()->m_Flags.is(PropItem::flCBChecked);
Expand Down Expand Up @@ -155,38 +200,6 @@ IC SGameMtlPair* GetLastParentValue(SGameMtlPair* who, u32 flag)
else return GetLastParentValue(who->m_Owner->GetMaterialPair(who->GetParent()),flag);
}

IC BOOL ValidateParent(SGameMtlPair* who, SGameMtlPair* parent)
{
if (!parent) return TRUE;
if (who==parent) return FALSE;
else return ValidateParent(who,parent->m_Owner->GetMaterialPair(parent->GetParent()));
}

BOOL SGameMtlPair::SetParent(int parent)
{
int ID_parent_save = ID_parent;
ID_parent = parent;

for (GameMtlPairIt it=m_Owner->FirstMaterialPair(); it!=m_Owner->LastMaterialPair(); it++){
if (!ValidateParent(*it,m_Owner->GetMaterialPair((*it)->GetParent()))){
ID_parent = ID_parent_save;
return FALSE;
}
}
// all right
if (GAMEMTL_NONE_ID==ID_parent){
OwnProps.one ();
}else{
OwnProps.zero ();
OwnProps.set (flBreakingSounds, BreakingSounds.size());
OwnProps.set (flStepSounds, StepSounds.size());
OwnProps.set (flCollideSounds, CollideSounds.size());
OwnProps.set (flCollideParticles,CollideParticles.size());
OwnProps.set (flCollideMarks, CollideMarks.size());
}
return TRUE;
}

void __fastcall SGameMtlPair::FillChooseMtl(ChooseItemVec& items, void* param)
{
for (GameMtlIt m0_it=m_Owner->FirstMaterial(); m0_it!=m_Owner->LastMaterial(); m0_it++){
Expand Down
69 changes: 24 additions & 45 deletions src/xrEngine/GameMtlLib.cpp
Original file line number Diff line number Diff line change
@@ -1,24 +1,20 @@
//---------------------------------------------------------------------------
#include "stdafx.h"
#pragma hdrstop

#include "GameMtlLib.h"
#include "Common/FSMacros.hpp"

CGameMtlLibrary GMLib;
//CSound_manager_interface* Sound = NULL;
#ifdef _EDITOR
CGameMtlLibrary* PGMLib = NULL;
#endif
CGameMtlLibrary::CGameMtlLibrary()
CGameMtlLibrary *PGMLib = nullptr;

#ifdef DEBUG
const char *SGameMtlPair::dbg_Name()
{
material_index = 0;
material_pair_index = 0;
#ifndef _EDITOR
material_count = 0;
#endif
PGMLib = &GMLib;
static string256 nm;
SGameMtl* M0 = GMLib.GetMaterialByID(GetMtl0());
SGameMtl* M1 = GMLib.GetMaterialByID(GetMtl1());
xr_sprintf(nm, sizeof(nm), "Pair: %s - %s", *M0->m_Name, *M1->m_Name);
return nm;
}
#endif

void SGameMtl::Load(IReader& fs)
{
Expand Down Expand Up @@ -63,6 +59,13 @@ void SGameMtl::Load(IReader& fs)
fDensityFactor = fs.r_float();
}

CGameMtlLibrary::CGameMtlLibrary()
{
material_index = 0;
material_pair_index = 0;
PGMLib = &GMLib;
}

void CGameMtlLibrary::Load()
{
string_path name;
Expand Down Expand Up @@ -119,38 +122,14 @@ void CGameMtlLibrary::Load()
}
OBJ->close();
}

#ifndef _EDITOR
material_count = (u32)materials.size();
material_pairs_rt.resize(material_count*material_count, 0);
for (GameMtlPairIt p_it = material_pairs.begin(); material_pairs.end() != p_it; ++p_it)
u32 mtlCount = materials.size();
material_pairs_rt.resize(mtlCount*mtlCount, 0);
for (auto &mtlPair : material_pairs)
{
SGameMtlPair* S = *p_it;
int idx0 = GetMaterialIdx(S->mtl0)*material_count + GetMaterialIdx(S->mtl1);
int idx1 = GetMaterialIdx(S->mtl1)*material_count + GetMaterialIdx(S->mtl0);
material_pairs_rt[idx0] = S;
material_pairs_rt[idx1] = S;
int idx0 = GetMaterialIdx(mtlPair->mtl0)*mtlCount + GetMaterialIdx(mtlPair->mtl1);
int idx1 = GetMaterialIdx(mtlPair->mtl1)*mtlCount + GetMaterialIdx(mtlPair->mtl0);
material_pairs_rt[idx0] = mtlPair;
material_pairs_rt[idx1] = mtlPair;
}
#endif

/*
for (GameMtlPairIt p_it=material_pairs.begin(); material_pairs.end() != p_it; ++p_it){
SGameMtlPair* S = *p_it;
for (int k=0; k<S->StepSounds.size(); k++){
Msg("%40s - 0x%x", S->StepSounds[k].handle->file_name(), S->StepSounds[k].g_type);
}
}
*/
FS.r_close (F);
}

#ifdef DEBUG
LPCSTR SGameMtlPair::dbg_Name()
{
static string256 nm;
SGameMtl* M0 = GMLib.GetMaterialByID(GetMtl0());
SGameMtl* M1 = GMLib.GetMaterialByID(GetMtl1());
xr_sprintf(nm, sizeof(nm), "Pair: %s - %s", *M0->m_Name, *M1->m_Name);
return nm;
}
#endif
Loading

0 comments on commit 5d63a89

Please sign in to comment.