|
From: <cn...@us...> - 2009-10-27 04:50:15
|
Revision: 592
http://hgengine.svn.sourceforge.net/hgengine/?rev=592&view=rev
Author: cnlohr
Date: 2009-10-27 04:50:09 +0000 (Tue, 27 Oct 2009)
Log Message:
-----------
add XML Saving to everything
Modified Paths:
--------------
Mercury2/modules/BillboardNode.cpp
Mercury2/modules/BillboardNode.h
Mercury2/modules/Terrain.h
Mercury2/modules/TextNode.cpp
Mercury2/modules/TextNode.h
Mercury2/modules/TextPlate.cpp
Mercury2/modules/TextPlate.h
Mercury2/src/Camera.cpp
Mercury2/src/Camera.h
Mercury2/src/FullscreenQuad.h
Mercury2/src/HGMDLModel.h
Mercury2/src/Mercury2.cpp
Mercury2/src/MercuryAsset.cpp
Mercury2/src/MercuryNode.cpp
Mercury2/src/MercuryNode.h
Mercury2/src/MercuryVBO.h
Mercury2/src/Quad.h
Mercury2/src/Texture.h
Mercury2/src/TransformNode.cpp
Mercury2/src/TransformNode.h
Mercury2/src/Viewport.cpp
Mercury2/src/Viewport.h
Modified: Mercury2/modules/BillboardNode.cpp
===================================================================
--- Mercury2/modules/BillboardNode.cpp 2009-10-27 04:49:25 UTC (rev 591)
+++ Mercury2/modules/BillboardNode.cpp 2009-10-27 04:50:09 UTC (rev 592)
@@ -60,6 +60,13 @@
return m_billboardMatrix;
}
+void BillboardNode::SaveToXMLTag( MString & sXMLStream )
+{
+ TransformNode::SaveToXMLTag( sXMLStream );
+ sXMLStream += ssprintf( "billboardaxis=\"%f,%f,%f\" spheremode=\"%d\" ",
+ m_billboardAxis[0], m_billboardAxis[1], m_billboardAxis[2], m_sphere );
+}
+
void BillboardNode::LoadFromXML(const XMLNode& node)
{
TransformNode::LoadFromXML(node);
@@ -68,7 +75,7 @@
m_billboardAxis = MercuryVector::CreateFromString( node.Attribute("billboardaxis") );
if ( !node.Attribute("spheremode").empty() )
- m_sphere = node.Attribute("spheremode") == "true"?true:false;
+ m_sphere = StrToBool( node.Attribute("spheremode") );
}
/****************************************************************************
Modified: Mercury2/modules/BillboardNode.h
===================================================================
--- Mercury2/modules/BillboardNode.h 2009-10-27 04:49:25 UTC (rev 591)
+++ Mercury2/modules/BillboardNode.h 2009-10-27 04:50:09 UTC (rev 592)
@@ -15,6 +15,7 @@
virtual const MercuryMatrix& GetGlobalMatrix() const;
virtual void LoadFromXML(const XMLNode& node);
+ virtual void SaveToXMLTag( MString & sXMLStream );
GENRTTI(BillboardNode);
Modified: Mercury2/modules/Terrain.h
===================================================================
--- Mercury2/modules/Terrain.h 2009-10-27 04:49:25 UTC (rev 591)
+++ Mercury2/modules/Terrain.h 2009-10-27 04:50:09 UTC (rev 592)
@@ -20,7 +20,7 @@
virtual MercuryAssetInstance* GenerateInstanceData(MercuryNode* parentNode);
MercuryVertex ComputePosition(const MercuryVertex& p);
MercuryVertex ComputePositionLinear(const MercuryVertex& p);
-
+ GENRTTI( Terrain );
private:
CLASS_HELPERS( HGMDLModel );
void BuildHash();
Modified: Mercury2/modules/TextNode.cpp
===================================================================
--- Mercury2/modules/TextNode.cpp 2009-10-27 04:49:25 UTC (rev 591)
+++ Mercury2/modules/TextNode.cpp 2009-10-27 04:50:09 UTC (rev 592)
@@ -31,6 +31,49 @@
MercuryNode::Update( dTime );
}
+void TextNode::SaveToXML( MString & sXMLStream, int depth )
+{
+ sXMLStream += ssprintf( "%*c<node ", depth*3, 32 );
+
+ SaveBaseXMLTag( sXMLStream );
+ SaveToXMLTag( sXMLStream );
+
+ sXMLStream += "/>\n";
+}
+
+void TextNode::SaveToXMLTag( MString & sXMLStream )
+{
+ MercuryNode::SaveToXMLTag( sXMLStream );
+ if( m_sFont.length() )
+ sXMLStream += ssprintf( "font=\"%s\" ", m_sFont.c_str() );
+ sXMLStream += ssprintf( "size=\"%f\" ", m_fSize );
+ if( m_sText.length() )
+ sXMLStream += ssprintf( "text=\"%s\" ", m_sText.c_str() );
+
+ if( m_fTextWidth < 1e9 )
+ sXMLStream += ssprintf( "width=\"%f\" ", m_fTextWidth );
+
+ sXMLStream += "alignment=\"";
+ switch( m_alignment )
+ {
+ case LEFT:
+ sXMLStream += "LEFT\" ";
+ break;
+ case RIGHT:
+ sXMLStream += "RIGHT\" ";
+ break;
+ case CENTER:
+ sXMLStream += "CENTER\" ";
+ break;
+ case FIT:
+ sXMLStream += "FIT\" ";
+ break;
+ case FIT_FULL:
+ sXMLStream += "FIT_FULL\" ";
+ break;
+ }
+}
+
void TextNode::LoadFromXML(const XMLNode& node)
{
MercuryNode::LoadFromXML(node);
@@ -348,7 +391,7 @@
} else
m_pThisFont = &g_AllFonts[sFont];
SetDirtyText();
-
+ m_sFont = sFont;
return true;
}
Modified: Mercury2/modules/TextNode.h
===================================================================
--- Mercury2/modules/TextNode.h 2009-10-27 04:49:25 UTC (rev 591)
+++ Mercury2/modules/TextNode.h 2009-10-27 04:50:09 UTC (rev 592)
@@ -45,6 +45,10 @@
inline float GetRMaxX() { return m_fRMaxX; }
inline float GetRMaxY() { return m_fRMaxY; }
+ ///Careful, Text node is a virtual node - it doesn't actually recurse into children.
+ virtual void SaveToXML( MString & sXMLStream, int depth = 0 );
+ virtual void SaveToXMLTag( MString & sXMLStream );
+
GENRTTI(TextNode);
private:
Modified: Mercury2/modules/TextPlate.cpp
===================================================================
--- Mercury2/modules/TextPlate.cpp 2009-10-27 04:49:25 UTC (rev 591)
+++ Mercury2/modules/TextPlate.cpp 2009-10-27 04:50:09 UTC (rev 592)
@@ -19,6 +19,24 @@
}
+void TextPlate::SaveToXML( MString & sXMLStream, int depth )
+{
+ sXMLStream += ssprintf( "%*c<node ", depth*3, 32 );
+
+ SaveBaseXMLTag( sXMLStream );
+ SaveToXMLTag( sXMLStream );
+ m_TextNode->SaveToXMLTag( sXMLStream );
+
+ sXMLStream += "/>\n";
+}
+
+void TextPlate::SaveToXMLTag( MString & sXMLStream )
+{
+ BillboardNode::SaveToXMLTag( sXMLStream );
+ if( m_fvOffset.Length() > 1e-9 )
+ sXMLStream += ssprintf( "offset=\"%f,%f,%f\" ", m_fvOffset[0], m_fvOffset[1], m_fvOffset[2] );
+}
+
void TextPlate::LoadFromXML(const XMLNode& node)
{
BillboardNode::LoadFromXML(node);
Modified: Mercury2/modules/TextPlate.h
===================================================================
--- Mercury2/modules/TextPlate.h 2009-10-27 04:49:25 UTC (rev 591)
+++ Mercury2/modules/TextPlate.h 2009-10-27 04:50:09 UTC (rev 592)
@@ -13,6 +13,11 @@
TextPlate();
virtual void Update(float dTime);
virtual void LoadFromXML(const XMLNode& node);
+
+ //Because this is a virtual node, we have to abstract from SaveToXML as well.
+ virtual void SaveToXML( MString & sXMLStream, int depth = 0 );
+ virtual void SaveToXMLTag( MString & sXMLStream );
+
GENRTTI(TextPlate);
private:
MercuryVector m_fvOffset;
Modified: Mercury2/src/Camera.cpp
===================================================================
--- Mercury2/src/Camera.cpp 2009-10-27 04:49:25 UTC (rev 591)
+++ Mercury2/src/Camera.cpp 2009-10-27 04:50:09 UTC (rev 592)
@@ -13,7 +13,6 @@
m_lookAt = MercuryVector(0,0,-1);
REGISTER_MESSAGE_WITH_DELEGATE( INPUTEVENT_MOUSE, &CameraNode::HandleMouseInput );
REGISTER_MESSAGE_WITH_DELEGATE( "SetCameraPosition", &CameraNode::SetCameraPosition );
- POST_MESSAGE("QueryTerrainPoint", new VertexDataMessage(m_origionalPosition), 0.00001);
}
void CameraNode::PreRender(const MercuryMatrix& matrix)
@@ -101,6 +100,7 @@
void CameraNode::SetCameraPosition(const MessageData& data)
{
const VertexDataMessage& m( dynamic_cast<const VertexDataMessage&>( data ) );
+
SetPosition(m.Vertex);
}
@@ -126,7 +126,8 @@
// SetPosition( p );
m_origionalPosition = p;
TransformNode::Update( dTime );
-
+
+
if (a != 0 || b != 0)
{
POST_MESSAGE("QueryTerrainPoint", new VertexDataMessage(p), 0);
@@ -134,6 +135,24 @@
}
+void CameraNode::SaveToXMLTag( MString & sXMLStream )
+{
+ //Tricky - we want to save where we think we are, not where the camera is.
+ //That way when we get re-opened, we are where we should be.
+ MercuryVertex OrigPos = GetPosition();
+ SetPosition( m_origionalPosition );
+ TransformNode::SaveToXMLTag( sXMLStream );
+ SetPosition( OrigPos );
+}
+
+void CameraNode::LoadFromXML(const XMLNode& node)
+{
+ TransformNode::LoadFromXML( node );
+ m_origionalPosition = GetPosition();
+ POST_MESSAGE("QueryTerrainPoint", new VertexDataMessage(GetPosition()), 0.00001);
+}
+
+
/****************************************************************************
* Copyright (C) 2009 by Joshua Allen *
* *
Modified: Mercury2/src/Camera.h
===================================================================
--- Mercury2/src/Camera.h 2009-10-27 04:49:25 UTC (rev 591)
+++ Mercury2/src/Camera.h 2009-10-27 04:50:09 UTC (rev 592)
@@ -14,6 +14,8 @@
virtual void PreRender(const MercuryMatrix& matrix);
virtual void Render(const MercuryMatrix& matrix);
virtual void SetCameraPosition(const MessageData& data);
+ virtual void LoadFromXML(const XMLNode& node);
+ virtual void SaveToXMLTag( MString & sXMLStream );
GENRTTI(CameraNode);
private:
Modified: Mercury2/src/FullscreenQuad.h
===================================================================
--- Mercury2/src/FullscreenQuad.h 2009-10-27 04:49:25 UTC (rev 591)
+++ Mercury2/src/FullscreenQuad.h 2009-10-27 04:50:09 UTC (rev 592)
@@ -13,6 +13,7 @@
virtual void Render(const MercuryNode* node);
static FullscreenQuad* Generate();
+ GENRTTI( FullscreenQuad );
private:
MercuryMatrix m_matrix;
};
Modified: Mercury2/src/HGMDLModel.h
===================================================================
--- Mercury2/src/HGMDLModel.h 2009-10-27 04:49:25 UTC (rev 591)
+++ Mercury2/src/HGMDLModel.h 2009-10-27 04:50:09 UTC (rev 592)
@@ -22,7 +22,7 @@
virtual bool DoCullingTests(OcclusionResult& occlusion, const MercuryMatrix& matrix);
virtual void PreRender(const MercuryNode* node);
virtual void Render(const MercuryNode* node);
-
+ GENRTTI( HGMDLModel );
protected:
std::vector< MAutoPtr< HGMDLMesh > > m_meshes;
Modified: Mercury2/src/Mercury2.cpp
===================================================================
--- Mercury2/src/Mercury2.cpp 2009-10-27 04:49:25 UTC (rev 591)
+++ Mercury2/src/Mercury2.cpp 2009-10-27 04:50:09 UTC (rev 592)
@@ -177,6 +177,7 @@
fpsTimer = timer;
}
+//Uncomment to enable scenegraph saving.
MString st;
root->SaveToXML( st );
StringToFile( "test.xml", st );
Modified: Mercury2/src/MercuryAsset.cpp
===================================================================
--- Mercury2/src/MercuryAsset.cpp 2009-10-27 04:49:25 UTC (rev 591)
+++ Mercury2/src/MercuryAsset.cpp 2009-10-27 04:50:09 UTC (rev 592)
@@ -79,7 +79,7 @@
void MercuryAsset::SaveToXML( MString & sXMLStream, int depth )
{
- sXMLStream += ssprintf( "%*c<node type=\"%s\" ", depth*3, 32, GetType() );
+ sXMLStream += ssprintf( "%*c<asset type=\"%s\" ", depth*3, 32, GetType() );
if( m_path.length() )
sXMLStream += ssprintf( "file=\"%s\" ", m_path.c_str() );
Modified: Mercury2/src/MercuryNode.cpp
===================================================================
--- Mercury2/src/MercuryNode.cpp 2009-10-27 04:49:25 UTC (rev 591)
+++ Mercury2/src/MercuryNode.cpp 2009-10-27 04:50:09 UTC (rev 592)
@@ -310,10 +310,9 @@
void MercuryNode::SaveToXML( MString & sXMLStream, int depth )
{
- sXMLStream += ssprintf( "%*c<node type=\"%s\" ", depth*3, 32, GetType() );
- if( GetName().length() )
- sXMLStream += ssprintf( "name=\"%s\" ", GetName().c_str() );
+ sXMLStream += ssprintf( "%*c<node ", depth * 3, 32 );
+ SaveBaseXMLTag( sXMLStream );
SaveToXMLTag( sXMLStream );
bool bNoChildren = true;
@@ -346,9 +345,18 @@
void MercuryNode::SaveToXMLTag( MString & sXMLStream )
{
- //MercuryNodes do not have anything else to save.
+ //Don't actually do anything here
}
+void MercuryNode::SaveBaseXMLTag( MString & sXMLStream )
+{
+ sXMLStream+= ssprintf( "type=\"%s\" ", GetType() );
+ if( GetName().length() )
+ sXMLStream += ssprintf( "name=\"%s\" ", GetName().c_str() );
+ if( m_useAlphaPath )
+ sXMLStream += "alphaPath=\"true\" ";
+}
+
void MercuryNode::PreRender(const MercuryMatrix& matrix)
{
SetCulled( false );
Modified: Mercury2/src/MercuryNode.h
===================================================================
--- Mercury2/src/MercuryNode.h 2009-10-27 04:49:25 UTC (rev 591)
+++ Mercury2/src/MercuryNode.h 2009-10-27 04:50:09 UTC (rev 592)
@@ -97,6 +97,8 @@
The various abstracted classes must append on arguments they require. */
virtual void SaveToXMLTag( MString & sXMLStream );
+ void SaveBaseXMLTag( MString & sXMLStream );
+
///Run on a child when added to a parent
virtual void OnAdded() {};
Modified: Mercury2/src/MercuryVBO.h
===================================================================
--- Mercury2/src/MercuryVBO.h 2009-10-27 04:49:25 UTC (rev 591)
+++ Mercury2/src/MercuryVBO.h 2009-10-27 04:50:09 UTC (rev 592)
@@ -37,6 +37,7 @@
void DirtyVertices() { m_bDirtyVertices = 1; }
void DirtyIndices() { m_bDirtyIndices = 1; }
+ GENRTTI( MercuryVBO );
private:
virtual void InitVBO();
Modified: Mercury2/src/Quad.h
===================================================================
--- Mercury2/src/Quad.h 2009-10-27 04:49:25 UTC (rev 591)
+++ Mercury2/src/Quad.h 2009-10-27 04:50:09 UTC (rev 592)
@@ -11,7 +11,7 @@
~Quad();
static Quad* Generate();
-
+ GENRTTI( Quad );
private:
};
Modified: Mercury2/src/Texture.h
===================================================================
--- Mercury2/src/Texture.h 2009-10-27 04:49:25 UTC (rev 591)
+++ Mercury2/src/Texture.h 2009-10-27 04:50:09 UTC (rev 592)
@@ -34,6 +34,7 @@
static void ApplyActiveTextures(uint16_t stride);
static void DisableUnusedTextures();
+ GENRTTI( Texture );
private:
void LoadImagePath(const MString& path);
Modified: Mercury2/src/TransformNode.cpp
===================================================================
--- Mercury2/src/TransformNode.cpp 2009-10-27 04:49:25 UTC (rev 591)
+++ Mercury2/src/TransformNode.cpp 2009-10-27 04:50:09 UTC (rev 592)
@@ -121,6 +121,28 @@
}
}
+void TransformNode::SaveToXMLTag( MString & sXMLStream )
+{
+ MercuryNode::SaveToXMLTag( sXMLStream );
+
+ const MercuryVertex & scale = GetScale();
+ if( scale[0] != 1 ) sXMLStream += ssprintf( "scalex=\"%f\" ", scale[0] );
+ if( scale[1] != 1 ) sXMLStream += ssprintf( "scaley=\"%f\" ", scale[1] );
+ if( scale[2] != 1 ) sXMLStream += ssprintf( "scalez=\"%f\" ", scale[2] );
+
+ const MercuryVertex & pos = GetPosition();
+ if( pos[0] != 0 ) sXMLStream += ssprintf( "movx=\"%f\" ", pos[0] );
+ if( pos[1] != 0 ) sXMLStream += ssprintf( "movy=\"%f\" ", pos[1] );
+ if( pos[2] != 0 ) sXMLStream += ssprintf( "movz=\"%f\" ", pos[2] );
+
+ MercuryVertex r;
+ GetRotation().ToEuler( r );
+ if( r[0] != 0 ) sXMLStream += ssprintf( "rotx=\"%f\" ", r[0] * RADDEG );
+ if( r[1] != 0 ) sXMLStream += ssprintf( "roty=\"%f\" ", r[1] * RADDEG );
+ if( r[2] != 0 ) sXMLStream += ssprintf( "rotz=\"%f\" ", r[2] * RADDEG );
+
+}
+
void TransformNode::LoadFromXML(const XMLNode& node)
{
MercuryVertex pos(m_position), scale(m_scale);
Modified: Mercury2/src/TransformNode.h
===================================================================
--- Mercury2/src/TransformNode.h 2009-10-27 04:49:25 UTC (rev 591)
+++ Mercury2/src/TransformNode.h 2009-10-27 04:50:09 UTC (rev 592)
@@ -33,7 +33,8 @@
virtual void ComputeMatrix();
virtual void LoadFromXML(const XMLNode& node);
-
+ virtual void SaveToXMLTag( MString & sXMLStream );
+
virtual void OnAdded();
virtual void RecursivePreRender();
Modified: Mercury2/src/Viewport.cpp
===================================================================
--- Mercury2/src/Viewport.cpp 2009-10-27 04:49:25 UTC (rev 591)
+++ Mercury2/src/Viewport.cpp 2009-10-27 04:50:09 UTC (rev 592)
@@ -95,6 +95,13 @@
MercuryNode::PostRender(matrix);
}
+void Viewport::SaveToXMLTag( MString & sXMLStream )
+{
+ MercuryNode::SaveToXMLTag( sXMLStream );
+ sXMLStream += ssprintf( "xfactor=\"%f\" yfactor=\"%f\" minx=\"%d\" miny=\"%d\" fov=\"%f\" near=\"%f\" far=\"%f\" ",
+ m_xFactor, m_yFactor, m_minx, m_miny, m_fov, m_frustum.ZNear(), m_frustum.ZFar() );
+}
+
void Viewport::LoadFromXML(const XMLNode& node)
{
m_xFactor = StrToFloat(node.Attribute("xfactor"), 1.0f);
@@ -104,7 +111,8 @@
MercuryWindow* w = MercuryWindow::GetCurrentWindow();
- m_frustum.SetPerspective( StrToFloat(node.Attribute("fov")),
+ m_fov = StrToFloat(node.Attribute("fov"), 60.f);
+ m_frustum.SetPerspective( m_fov,
(w->Width()*m_xFactor)/(w->Height()*m_yFactor),
// StrToFloat(node.Attribute("aspect")),
StrToFloat(node.Attribute("near")),
Modified: Mercury2/src/Viewport.h
===================================================================
--- Mercury2/src/Viewport.h 2009-10-27 04:49:25 UTC (rev 591)
+++ Mercury2/src/Viewport.h 2009-10-27 04:50:09 UTC (rev 592)
@@ -17,12 +17,13 @@
virtual void PostRender(const MercuryMatrix& matrix);
virtual void LoadFromXML(const XMLNode& node);
-
+ virtual void SaveToXMLTag( MString & sXMLStream );
GENRTTI(Viewport);
private:
Frustum m_frustum;
float m_xFactor, m_yFactor;
int m_minx, m_miny;
+ float m_fov;
};
#endif
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|