mirror of
https://github.com/id-Software/DOOM-3-BFG.git
synced 2025-05-31 08:50:54 +00:00
JSON Flash improved reimport
This commit is contained in:
parent
c552d8108c
commit
db560ecd7b
1 changed files with 121 additions and 78 deletions
|
@ -1163,15 +1163,18 @@ bool idSWF::LoadJSON( const char* bfilename )
|
|||
fillDraw.style.bitmapID = 65535;
|
||||
}
|
||||
|
||||
Value& startVerts = jsonDraw["startVerts"];
|
||||
|
||||
fillDraw.startVerts.SetNum( startVerts.Size() );
|
||||
for( int v = 0; v < fillDraw.startVerts.Num(); v++ )
|
||||
if( jsonDraw.HasMember( "startVerts" ) )
|
||||
{
|
||||
idVec2& vert = fillDraw.startVerts[v];
|
||||
Value& startVerts = jsonDraw["startVerts"];
|
||||
|
||||
vert.x = startVerts[v]["v"][0].GetDouble();
|
||||
vert.y = startVerts[v]["v"][1].GetDouble();
|
||||
fillDraw.startVerts.SetNum( startVerts.Size() );
|
||||
for( int v = 0; v < fillDraw.startVerts.Num(); v++ )
|
||||
{
|
||||
idVec2& vert = fillDraw.startVerts[v];
|
||||
|
||||
vert.x = startVerts[v]["v"][0].GetDouble();
|
||||
vert.y = startVerts[v]["v"][1].GetDouble();
|
||||
}
|
||||
}
|
||||
|
||||
if( jsonDraw.HasMember( "endVerts" ) )
|
||||
|
@ -1190,29 +1193,30 @@ bool idSWF::LoadJSON( const char* bfilename )
|
|||
}
|
||||
}
|
||||
|
||||
Value& indices = jsonDraw["indices"];
|
||||
fillDraw.indices.SetNum( indices.Size() );
|
||||
|
||||
#if 1
|
||||
for( int v = 0; v < fillDraw.indices.Num(); v++ )
|
||||
if( jsonDraw.HasMember( "indices" ) )
|
||||
{
|
||||
uint16& vert = fillDraw.indices[v];
|
||||
Value& indices = jsonDraw["indices"];
|
||||
fillDraw.indices.SetNum( indices.Size() );
|
||||
|
||||
vert = indices[v].GetUint();
|
||||
}
|
||||
#if 1
|
||||
for( int v = 0; v < fillDraw.indices.Num(); v++ )
|
||||
{
|
||||
uint16& vert = fillDraw.indices[v];
|
||||
|
||||
vert = indices[v].GetUint();
|
||||
}
|
||||
#else
|
||||
for( int v = fillDraw.indices.Num() - 1; v >= 0; v-- )
|
||||
{
|
||||
uint16& vert = fillDraw.indices[v];
|
||||
|
||||
vert = indices[v].GetUint();
|
||||
}
|
||||
for( int v = fillDraw.indices.Num() - 1; v >= 0; v-- )
|
||||
{
|
||||
uint16& vert = fillDraw.indices[v];
|
||||
|
||||
vert = indices[v].GetUint();
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if( entry.HasMember( "lineDraws" ) )
|
||||
{
|
||||
shape->lineDraws.SetNum( entry["lineDraws"].Size() );
|
||||
|
@ -1305,8 +1309,80 @@ bool idSWF::LoadJSON( const char* bfilename )
|
|||
dictionary[i].sprite->ReadJSON( entry );
|
||||
}
|
||||
}
|
||||
else if( type == "FONT" )
|
||||
{
|
||||
dictionary[i].type = SWF_DICT_FONT;
|
||||
dictionary[i].font = new( TAG_SWF ) idSWFFont;
|
||||
|
||||
idSWFFont* font = dictionary[i].font;
|
||||
idStr fontName = entry["name"].GetString();
|
||||
font->fontID = renderSystem->RegisterFont( fontName );
|
||||
|
||||
|
||||
font->ascent = entry["ascent"].GetUint();
|
||||
font->descent = entry["descent"].GetUint();
|
||||
font->leading = entry["leading"].GetUint();
|
||||
|
||||
// RB: ignore glyphs because they are not used
|
||||
}
|
||||
else if( type == "EDITTEXT" )
|
||||
{
|
||||
dictionary[i].type = SWF_DICT_EDITTEXT;
|
||||
dictionary[i].edittext = new( TAG_SWF ) idSWFEditText;
|
||||
idSWFEditText* edittext = dictionary[i].edittext;
|
||||
|
||||
edittext->bounds.tl.x = entry["bounds"][0].GetDouble();
|
||||
edittext->bounds.tl.y = entry["bounds"][1].GetDouble();
|
||||
edittext->bounds.br.x = entry["bounds"][2].GetDouble();
|
||||
edittext->bounds.br.y = entry["bounds"][3].GetDouble();
|
||||
|
||||
|
||||
edittext->flags = entry["flags"].GetUint();
|
||||
edittext->fontID = entry["fontID"].GetUint();
|
||||
edittext->fontHeight = entry["fontHeight"].GetUint();
|
||||
|
||||
Value& color = entry["color"];
|
||||
edittext->color.r = ( uint8 )( color[0].GetDouble() * 255 ) & 0xFF;
|
||||
edittext->color.g = ( uint8 )( color[1].GetDouble() * 255 ) & 0xFF;
|
||||
edittext->color.b = ( uint8 )( color[2].GetDouble() * 255 ) & 0xFF;
|
||||
edittext->color.a = ( uint8 )( color[3].GetDouble() * 255 ) & 0xFF;
|
||||
|
||||
edittext->maxLength = entry["maxLength"].GetUint();
|
||||
|
||||
idStr align = entry["align"].GetString();
|
||||
if( align == "RIGHT" )
|
||||
{
|
||||
edittext->align = SWF_ET_ALIGN_RIGHT;
|
||||
}
|
||||
else if( align == "CENTER" )
|
||||
{
|
||||
edittext->align = SWF_ET_ALIGN_CENTER;
|
||||
}
|
||||
else if( align == "JUSTITY" )
|
||||
{
|
||||
edittext->align = SWF_ET_ALIGN_JUSTIFY;
|
||||
}
|
||||
else
|
||||
{
|
||||
edittext->align = SWF_ET_ALIGN_LEFT;
|
||||
}
|
||||
|
||||
edittext->leftMargin = entry["leftMargin"].GetUint();
|
||||
edittext->rightMargin = entry["rightMargin"].GetUint();
|
||||
edittext->indent = entry["indent"].GetUint();
|
||||
edittext->leading = entry["leading"].GetUint();
|
||||
|
||||
edittext->variable = entry["variable"].GetString();
|
||||
edittext->initialText = entry["initialText"].GetString();
|
||||
}
|
||||
else if( type == "TEXT" )
|
||||
{
|
||||
// RB: FIXME? not used on BFG files
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
#if 0
|
||||
mainsprite->Read( f );
|
||||
|
||||
|
@ -1318,37 +1394,6 @@ bool idSWF::LoadJSON( const char* bfilename )
|
|||
f->ReadBig( dictionary[i].type );
|
||||
switch( dictionary[i].type )
|
||||
{
|
||||
case SWF_DICT_SPRITE:
|
||||
{
|
||||
dictionary[i].sprite = new( TAG_SWF ) idSWFSprite( this );
|
||||
dictionary[i].sprite->Read( f );
|
||||
break;
|
||||
}
|
||||
case SWF_DICT_FONT:
|
||||
{
|
||||
dictionary[i].font = new( TAG_SWF ) idSWFFont;
|
||||
idSWFFont* font = dictionary[i].font;
|
||||
idStr fontName;
|
||||
f->ReadString( fontName );
|
||||
font->fontID = renderSystem->RegisterFont( fontName );
|
||||
f->ReadBig( font->ascent );
|
||||
f->ReadBig( font->descent );
|
||||
f->ReadBig( font->leading );
|
||||
f->ReadBig( num );
|
||||
font->glyphs.SetNum( num );
|
||||
for( int g = 0; g < font->glyphs.Num(); g++ )
|
||||
{
|
||||
f->ReadBig( font->glyphs[g].code );
|
||||
f->ReadBig( font->glyphs[g].advance );
|
||||
f->ReadBig( num );
|
||||
font->glyphs[g].verts.SetNum( num );
|
||||
f->ReadBigArray( font->glyphs[g].verts.Ptr(), font->glyphs[g].verts.Num() );
|
||||
f->ReadBig( num );
|
||||
font->glyphs[g].indices.SetNum( num );
|
||||
f->ReadBigArray( font->glyphs[g].indices.Ptr(), font->glyphs[g].indices.Num() );
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SWF_DICT_TEXT:
|
||||
{
|
||||
dictionary[i].text = new( TAG_SWF ) idSWFText;
|
||||
|
@ -1423,8 +1468,7 @@ void idSWF::WriteJSON( const char* filename )
|
|||
return;
|
||||
}
|
||||
|
||||
//file->WriteFloatString( "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" );
|
||||
file->WriteFloatString( "{\n \t\"version\": %i,\n \t\"timestamp\": %i,\n \t\"frameWidth\": %f,\n \t\"frameHeight\": %f,\n \t\"frameRate\": %i,\n", XSWF_VERSION, timestamp, frameWidth, frameHeight, frameRate );
|
||||
file->WriteFloatString( "{\n \t\"version\": %i,\n \t\"frameWidth\": %f,\n \t\"frameHeight\": %f,\n \t\"frameRate\": %i,\n", XSWF_VERSION, ( float )frameWidth, ( float )frameHeight, ( int )frameRate );
|
||||
|
||||
file->WriteFloatString( "\t\"dict\":\n\t[\n" );
|
||||
for( int i = 0; i < dictionary.Num(); i++ )
|
||||
|
@ -1614,6 +1658,10 @@ void idSWF::WriteJSON( const char* filename )
|
|||
}
|
||||
file->WriteFloatString( "\t\t\t\t\t]" );
|
||||
}
|
||||
else
|
||||
{
|
||||
idLib::Printf( "fillDraw %i of characterID %i has no startVerts\n", d, i );
|
||||
}
|
||||
|
||||
if( fillDraw.endVerts.Num() )
|
||||
{
|
||||
|
@ -1648,6 +1696,16 @@ void idSWF::WriteJSON( const char* filename )
|
|||
file->WriteFloatString( "]\n" );
|
||||
}
|
||||
|
||||
if( !fillDraw.startVerts.Num() && !fillDraw.endVerts.Num() && !fillDraw.indices.Num() )
|
||||
{
|
||||
file->WriteFloatString( "\n" );
|
||||
}
|
||||
//else
|
||||
{
|
||||
// skip \t\t\t\t}
|
||||
//file->WriteFloatString( "%s\n", ( d == ( shape->fillDraws.Num() - 1 ) ) ? "" : "," );
|
||||
}
|
||||
|
||||
file->WriteFloatString( "\t\t\t\t}%s\n", ( d == ( shape->fillDraws.Num() - 1 ) ) ? "" : "," );
|
||||
}
|
||||
|
||||
|
@ -1745,8 +1803,8 @@ void idSWF::WriteJSON( const char* filename )
|
|||
{
|
||||
const idSWFFont* font = dictionary[i].font;
|
||||
|
||||
file->WriteFloatString( "\t\t\t\"name\": \"%s\", \"ascent\": %i, \"descent\": %i, \"leading\": %i, \"glyphsNum\": %i\n",
|
||||
font->fontID->GetName(), font->ascent, font->descent, font->leading, font->glyphs.Num() );
|
||||
file->WriteFloatString( "\t\t\t\"name\": \"%s\", \"ascent\": %i, \"descent\": %i, \"leading\": %i\n", //, \"glyphsNum\": %i\n",
|
||||
font->fontID->GetName(), font->ascent, font->descent, font->leading ); //, font->glyphs.Num() );
|
||||
|
||||
#if 0
|
||||
for( int g = 0; g < font->glyphs.Num(); g++ )
|
||||
|
@ -1779,6 +1837,8 @@ void idSWF::WriteJSON( const char* filename )
|
|||
|
||||
case SWF_DICT_TEXT:
|
||||
{
|
||||
// RB: not used in BFG files
|
||||
|
||||
const idSWFText* text = dictionary[i].text;
|
||||
|
||||
file->WriteFloatString( "\t\t<Text characterID=\"%i\">\n", i );
|
||||
|
@ -1851,30 +1911,13 @@ void idSWF::WriteJSON( const char* filename )
|
|||
et->leftMargin, et->rightMargin, et->indent, et->leading,
|
||||
et->variable.c_str(), initialText.c_str() );
|
||||
|
||||
float x = et->bounds.tl.x;
|
||||
float y = et->bounds.tl.y;
|
||||
float width = fabs( et->bounds.br.x - et->bounds.tl.x );
|
||||
float height = fabs( et->bounds.br.y - et->bounds.tl.y );
|
||||
idVec2 tl = et->bounds.tl;
|
||||
idVec2 br = et->bounds.br;
|
||||
|
||||
file->WriteFloatString( "\t\t\t\"bounds\": { \"x\": %f, \"y\": %f, \"width\": %f, \"height\": %f },\n", x, y, width, height );
|
||||
file->WriteFloatString( "\t\t\t\"bounds\": [ %f, %f, %f, %f ],\n", tl.x, tl.y, br.x, br.y );
|
||||
|
||||
idVec4 color = et->color.ToVec4();
|
||||
file->WriteFloatString( "\t\t\t\"color\": [ %f, %f, %f, %f ]\n", color.x, color.y, color.z, color.w );
|
||||
|
||||
//file->WriteBig( et->bounds.tl );
|
||||
//file->WriteBig( et->bounds.br );
|
||||
//file->WriteBig( et->flags );
|
||||
//file->WriteBig( et->fontID );
|
||||
//file->WriteBig( et->fontHeight );
|
||||
//file->Write( &et->color, 4 );
|
||||
//file->WriteBig( et->maxLength );
|
||||
//file->WriteBig( et->align );
|
||||
//file->WriteBig( et->leftMargin );
|
||||
//file->WriteBig( et->rightMargin );
|
||||
//file->WriteBig( et->indent );
|
||||
//file->WriteBig( et->leading );
|
||||
//file->WriteString( et->variable );
|
||||
//file->WriteString( et->initialText );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue