add support for models in NoteSkin

This commit is contained in:
Chris Danford
2003-05-11 07:23:47 +00:00
parent 433dda1d1f
commit dd8331d9fc
7 changed files with 134 additions and 28 deletions
+57 -13
View File
@@ -1,7 +1,7 @@
#include "global.h"
/*
-----------------------------------------------------------------------------
Class: Milkshape
Class: Model
Desc: Types defined in msLib.h.
@@ -10,11 +10,12 @@
-----------------------------------------------------------------------------
*/
#include "Model.h"
#include "Milkshape.h"
#include "ModelTypes.h"
#include "mathlib.h"
#include "RageDisplay.h"
#include "RageUtil.h"
#include "RageTextureManager.h"
#include "IniFile.h"
const float FRAMES_PER_SECOND = 30;
@@ -39,6 +40,33 @@ void Model::Clear ()
m_pModel = NULL;
}
bool Model::LoadFromModelFile( CString sPath )
{
CString sDir, sThrowAway;
splitrelpath( sPath, sDir, sThrowAway, sThrowAway );
IniFile ini;
ini.SetPath( sPath );
ini.ReadFile();
if( !ini.GetKey("Model") )
RageException::Throw( "The model file '%s' is invalid.", sPath.c_str() );
CString sFileName;
ini.GetValue( "Model", "File", sFileName );
LoadMilkshapeAscii( sDir+sFileName );
float f;
if( ini.GetValueF( "Model", "BaseRotationXDegrees", f ) ) Actor::SetBaseRotationX( f );
if( ini.GetValueF( "Model", "BaseRotationYDegrees", f ) ) Actor::SetBaseRotationY( f );
if( ini.GetValueF( "Model", "BaseRotationZDegrees", f ) ) Actor::SetBaseRotationZ( f );
if( ini.GetValueF( "Model", "BaseZoomX", f ) ) Actor::SetBaseZoomX( f );
if( ini.GetValueF( "Model", "BaseZoomY", f ) ) Actor::SetBaseZoomY( f );
if( ini.GetValueF( "Model", "BaseZoomZ", f ) ) Actor::SetBaseZoomZ( f );
return true;
}
bool Model::LoadMilkshapeAscii( CString sPath )
{
CString sDir, sThrowAway;
@@ -46,7 +74,7 @@ bool Model::LoadMilkshapeAscii( CString sPath )
FILE *file = fopen (sPath, "rt");
if (!file)
RageException::Throw( "Model:: Could not open '%s'.", sPath.c_str() );
RageException::Throw( "Model::LoadMilkshapeAscii Could not open '%s'.", sPath.c_str() );
Clear ();
@@ -378,14 +406,10 @@ bool Model::LoadMilkshapeAscii( CString sPath )
sscanf (szLine, "\"%[^\"]\"", szName);
strcpy( Material.szAlphaTexture, szName );
Material.pTexture = NULL;
if( strcmp(Material.szDiffuseTexture, "")!=0 )
{
RageTextureID ID;
ID.filename = sDir+Material.szDiffuseTexture;
ID.bStretch = true;
if( DoesFileExist(ID.filename) )
Material.pTexture = TEXTUREMAN->LoadTexture( ID );
if( IsAFile(sDir+Material.szDiffuseTexture) )
Material.aniTexture.Load( sDir+Material.szDiffuseTexture );
}
}
}
@@ -722,7 +746,7 @@ void Model::DrawPrimitives()
mat.Diffuse,
mat.Specular,
mat.fShininess );
DISPLAY->SetTexture( mat.pTexture );
DISPLAY->SetTexture( mat.aniTexture.GetCurrentTexture() );
}
else
{
@@ -758,10 +782,11 @@ void Model::DrawPrimitives()
}
else
{
VectorRotate (originalVert.Normal, m_pBones[originalVert.nBoneIndex].mFinal, tempVert.n);
int bone = originalVert.nBoneIndex;
VectorRotate (originalVert.Vertex, m_pBones[originalVert.nBoneIndex].mFinal, tempVert.p);
VectorRotate (originalVert.Normal, m_pBones[bone].mFinal, tempVert.n);
VectorRotate (originalVert.Vertex, m_pBones[bone].mFinal, tempVert.p);
tempVert.p[0] += m_pBones[bone].mFinal[0][3];
tempVert.p[1] += m_pBones[bone].mFinal[1][3];
tempVert.p[2] += m_pBones[bone].mFinal[2][3];
@@ -971,4 +996,23 @@ void Model::Update( float fDelta )
{
Actor::Update( fDelta );
AdvanceFrame( fDelta );
if( m_pModel )
for( int i=0; i<m_pModel->Materials.size(); i++ )
m_pModel->Materials[i].aniTexture.Update( fDelta );
}
void Model::SetState( int iNewState )
{
if( m_pModel )
for( int i=0; i<m_pModel->Materials.size(); i++ )
m_pModel->Materials[i].aniTexture.SetState( iNewState );
}
int Model::GetNumStates()
{
int iMaxStates = 0;
if( m_pModel )
for( int i=0; i<m_pModel->Materials.size(); i++ )
iMaxStates = max( iMaxStates, m_pModel->Materials[i].aniTexture.GetNumStates() );
return iMaxStates;
}
+14
View File
@@ -35,6 +35,16 @@ public:
public:
void Clear ();
void Load( CString sPath )
{
if( sPath == "" ) return;
if( sPath.Right(6) == ".model" )
LoadFromModelFile( sPath );
else
LoadMilkshapeAscii( sPath );
};
bool LoadFromModelFile( CString sPath );
bool LoadMilkshapeAscii( CString sPath );
bool LoadMilkshapeAsciiBones( CString sPath );
@@ -45,6 +55,10 @@ public:
void SetupBones ();
void AdvanceFrame (float dt);
virtual void SetState( int iNewState );
virtual int GetNumStates();
private:
msModel *m_pModel;
RageVector3 m_vMins, m_vMaxs;
+15 -2
View File
@@ -29,10 +29,10 @@
Actor* MakeModelOrSprite( CString sFile )
{
if( sFile.Right(3)=="txt" )
if( sFile.Right(3)=="txt"||sFile.Right(5)=="model" )
{
Model* pModel = new Model;
pModel->LoadMilkshapeAscii( sFile );
pModel->Load( sFile );
return pModel;
}
else
@@ -699,7 +699,20 @@ void NoteDisplay::DrawTap( const int iCol, const float fBeat, const bool bOnSame
pActor->SetXY( fXPos, fYPos );
pActor->SetDiffuse( diffuse );
pActor->SetGlow( glow );
DISPLAY->EnableLighting( true );
DISPLAY->SetLightDirectional(
0,
RageColor(0.0f,0.0f,0.0f,1),
RageColor(1,1,1,1),
RageColor(1,1,1,1),
RageVector3(1, 0, +1) );
pActor->Draw();
DISPLAY->SetLightOff( 0 );
DISPLAY->EnableLighting( false );
}
+22 -4
View File
@@ -18,6 +18,8 @@
#include "ScreenSandbox.h"
#include "GameConstantsAndTypes.h"
#include "ThemeManager.h"
#include "RageDisplay.h"
#include "RageTimer.h"
ScreenSandbox::ScreenSandbox() : Screen("ScreenSandbox")
@@ -32,12 +34,12 @@ ScreenSandbox::ScreenSandbox() : Screen("ScreenSandbox")
// this->AddChild( &m_sprite );
m_model.SetXY(CENTER_X, CENTER_Y);
m_model.SetZoomX(1);
m_model.SetZoomY(-1);
m_model.LoadMilkshapeAscii( "arrow.txt" );
m_model.SetZoom(3);
//m_model.SetZoomY(-1);
m_model.LoadMilkshapeAscii( "Down Tap Note 4th.txt" );
// m_model.LoadMilkshapeAsciiBones( "D:\\Dev\\ddrpc char hacking\\DDRPCRip\\models\\howtoplay.bones.txt" );
this->AddChild(&m_model);
m_model.SetEffectSpin( RageVector3(0,90,0) );
m_model.SetEffectSpin( RageVector3(0,90,90) );
this->AddChild( &m_In );
@@ -58,6 +60,22 @@ void ScreenSandbox::Update( float fDeltaTime )
Screen::Update(fDeltaTime);
}
void ScreenSandbox::DrawPrimitives()
{
DISPLAY->EnableLighting( true );
DISPLAY->SetLightDirectional(
0,
RageColor(0,0,0,0),
RageColor(1,1,1,1),
RageColor(0,0,0,1),
RageVector3(0, -1, 0) );
Screen::DrawPrimitives();
DISPLAY->SetLightOff( 0 );
DISPLAY->EnableLighting( false );
}
void ScreenSandbox::MenuLeft( PlayerNumber pn )
{
m_In.Load( THEME->GetPathToB("_menu in") );
+2 -1
View File
@@ -23,11 +23,12 @@ public:
virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI );
virtual void HandleScreenMessage( const ScreenMessage SM );
virtual void Update(float f);
virtual void DrawPrimitives();
void MenuLeft( PlayerNumber pn );
void MenuRight( PlayerNumber pn );
void Update(float f);
Model m_model;
Quad m_quad;
Transition m_In;
+22 -6
View File
@@ -60,7 +60,7 @@ IntDir=.\../Release6
TargetDir=\stepmania\stepmania
TargetName=StepMania
SOURCE="$(InputPath)"
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi
# End Special Build Tool
@@ -95,7 +95,7 @@ IntDir=.\../Debug6
TargetDir=\stepmania\stepmania
TargetName=StepMania-debug
SOURCE="$(InputPath)"
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi
# End Special Build Tool
@@ -1008,10 +1008,6 @@ SOURCE=.\mathlib.h
# End Source File
# Begin Source File
SOURCE=.\Milkshape.h
# End Source File
# Begin Source File
SOURCE=.\Model.cpp
# End Source File
# Begin Source File
@@ -1020,6 +1016,14 @@ SOURCE=.\Model.h
# End Source File
# Begin Source File
SOURCE=.\ModelTypes.cpp
# End Source File
# Begin Source File
SOURCE=.\ModelTypes.h
# End Source File
# Begin Source File
SOURCE=.\Quad.h
# End Source File
# Begin Source File
@@ -2029,6 +2033,10 @@ SOURCE=.\ScreenTitleMenu.h
# End Source File
# Begin Source File
SOURCE=.\ScreenUnlock.cpp
# End Source File
# Begin Source File
SOURCE=.\ScreenUnlock.h
# End Source File
# Begin Source File
@@ -2139,6 +2147,14 @@ SOURCE=.\ThemeManager.cpp
SOURCE=.\ThemeManager.h
# End Source File
# Begin Source File
SOURCE=.\UnlockSystem.cpp
# End Source File
# Begin Source File
SOURCE=.\UnlockSystem.h
# End Source File
# End Group
# Begin Source File
+1 -1
View File
@@ -138,7 +138,7 @@ try_element_again:
static const char *masks[NUM_ELEMENT_CATEGORIES][12] = {
{ "", NULL },
{ "*.ini", NULL },
{"*.sprite", "*.png", "*.jpg", "*.bmp", "*.gif","*.avi", "*.mpg", "*.mpeg", NULL},
{ "*.model", "*.sprite", "*.png", "*.jpg", "*.bmp", "*.gif","*.avi", "*.mpg", "*.mpeg", NULL},
{ "*.png", NULL },
{ ".set", ".mp3", ".ogg", ".wav", NULL },
};