TGB to MITT2D Converter
by practicing01 · in Torque 2D Beginner · 08/22/2014 (5:42 am) · 4 replies
I lost my original SceneGraph converter script in a fracked os upgrade. That script parsed the text but as I originally mentioned, there are many ways to go about converting. Here is a better method: a TGB script that outputs the SceneGraph in taml format. It's not perfect and if I come across bugs I'll update. Also not everything is converted, just: sprites, triggers, sceneObjects, scrollers and tileLayers. TileLayers are interpreted as compositeSprites because I couldn't figure out how to make tileMaps in the TGB editor. The script also converts the datablocks into taml assets. www.dropbox.com/s/xebg7ai10wyslom/Convert_To_MITT2D.cs?dl=0 Code tag seems to mess up some formating like the tab and double quote characters, so don't copy/paste it, download from dropbox or here: pastebin.com/q458LThN
function Convert_Assets()
{
%SimSet_DataBlocks=getT2DDatablockSet();
for (%x=0;%x<%SimSet_DataBlocks.getCount();%x++)
{
%DataBlock=%SimSet_DataBlocks.getObject(%x);
if (%DataBlock.getDatablockClassName()$="t2dImageMapDatablock")
{
%FileStreamObject_File=new FileStreamObject();
%FileStreamObject_File.open("~/assets/images/"@%DataBlock.getName()@".asset.taml","write");
%FileStreamObject_File.writeLine("<ImageAsset");
%FileStreamObject_File.writeLine("\t" @ "AssetName=\"" @ %DataBlock.getName() @ "\"");
%FileStreamObject_File.writeLine("\t" @ "ImageFile=\"" @ fileName(%DataBlock.getSrcBitmapName()) @ "\"");
if (%DataBlock.getImageMapMode()$="CELL")
{
%FileStreamObject_File.writeLine("\t" @ "CellCountX=\"" @ %DataBlock.cellCountX @ "\"");
%FileStreamObject_File.writeLine("\t" @ "CellCountY=\"" @ %DataBlock.cellCountY @ "\"");
%FileStreamObject_File.writeLine("\t" @ "CellWidth=\"" @ %DataBlock.cellWidth @ "\"");
%FileStreamObject_File.writeLine("\t" @ "CellHeight=\"" @ %DataBlock.cellHeight @ "\"");
}
%FileStreamObject_File.writeLine("/>");
%FileStreamObject_File.close();
}
else if (%DataBlock.getDatablockClassName()$="t2dAnimationDatablock")
{
%FileStreamObject_File=new FileStreamObject();
%FileStreamObject_File.open("~/assets/animations/" @ %DataBlock.getName() @ ".asset.taml","write");
%FileStreamObject_File.writeLine("<AnimationAsset");
%FileStreamObject_File.writeLine("\t" @ "AssetName=\"" @ %DataBlock.getName() @ "\"");
%FileStreamObject_File.writeLine("\t" @ "Image=\"@asset=ModuleName:" @ %DataBlock.imageMap @ "\"");
%FileStreamObject_File.writeLine("\t" @ "AnimationFrames=\"" @ %DataBlock.animationFrames @ "\"");
%FileStreamObject_File.writeLine("\t" @ "AnimationCycle=\"" @ %DataBlock.AnimationCycle @ "\"");
%FileStreamObject_File.writeLine("\t" @ "AnimationTime=\"" @ %DataBlock.animationTime @ "\"");
%FileStreamObject_File.writeLine("/>");
%FileStreamObject_File.close();
}
}
}
function Convert_Default_Fields(%FileObject_File,%Object,%Bool_Close_Angle_Brackets)
{
if (%Object.Immovable)
{
%FileObject_File.writeLine("\t\t" @ "BodyType=\"static\"");
}
else
{
%FileObject_File.writeLine("\t\t" @ "BodyType=\"dynamic\"");
}
%FileObject_File.writeLine("\t\t" @ "class=\"" @ %Object.class @ "\"");
%FileObject_File.writeLine("\t\t" @ "Visible=\"" @ %Object.Visible @ "\"");
%FileObject_File.writeLine("\t\t" @ "Lifetime=\"" @ %Object.Lifetime @ "\"");
%FileObject_File.writeLine("\t\t" @ "Position=\"" @ %Object.Position.X SPC %Object.Position.Y*-1 @ "\"");//Flip Y
%FileObject_File.writeLine("\t\t" @ "Size=\"" @ %Object.Size @ "\"");
%FileObject_File.writeLine("\t\t" @ "Angle=\"" @ %Object.Rotation @ "\"");
%FileObject_File.writeLine("\t\t" @ "FlipX=\"" @ %Object.FlipX @ "\"");
%FileObject_File.writeLine("\t\t" @ "FlipY=\"" @ %Object.FlipY @ "\"");
%FileObject_File.writeLine("\t\t" @ "SceneLayer=\"" @ %Object.Layer @ "\"");
%FileObject_File.writeLine("\t\t" @ "SceneGroup=\"" @ %Object.GraphGroup @ "\"");
%FileObject_File.writeLine("\t\t" @ "CollisionGroups=\"" @ %Object.CollisionGroups @ "\"");
%FileObject_File.writeLine("\t\t" @ "CollisionLayers=\"" @ %Object.CollisionLayers @ "\"");
%FileObject_File.writeLine("\t\t" @ "CollisionCallback=\"" @ %Object.CollisionCallback @ "\"");
%FileObject_File.writeLine("\t\t" @ "BlendColor=\"" @ %Object.BlendColor @ "\"");
%FileObject_File.writeLine("\t\t" @ "LinearVelocity=\"" @ %Object.LinearVelocity @ "\"");
%String_Line="\t\t" @ "AngularVelocity=\"" @ %Object.AngularVelocity @ "\"";
if (%Object.getDynamicFieldCount()==0&&%Bool_Close_Angle_Brackets)
{
%String_Line=%String_Line SPC "/>";
}
else if (%Object.getDynamicFieldCount()==0&&!%Bool_Close_Angle_Brackets)
{
%String_Line=%String_Line SPC ">";
}
%FileObject_File.writeLine(%String_Line);
//Dynamic fields.
for (%x=0;%x<%Object.getDynamicFieldCount();%x++)
{
%String_Line="\t\t" @ %Object.getDynamicField(%x) @ "=\"" @ %Object.getFieldValue(%Object.getDynamicField(%x)) @ "\"";
if (%x==%Object.getDynamicFieldCount()-1&&%Bool_Close_Angle_Brackets)
{
%String_Line=%String_Line SPC "/>";
}
else if (%x==%Object.getDynamicFieldCount()-1&&!%Bool_Close_Angle_Brackets)
{
%String_Line=%String_Line SPC ">";
}
%FileObject_File.writeLine(%String_Line);
}
}
function Convert_Scroller(%FileObject_File,%Object)
{
%FileObject_File.writeLine("\t<Scroller");
%FileObject_File.writeLine("\t\t" @ "Image=\"@asset=ModuleName:" @ %Object.imageMap @ "\"");
%FileObject_File.writeLine("\t\t" @ "repeatX=\"" @ %Object.repeatX @ "\"");
%FileObject_File.writeLine("\t\t" @ "repeatY=\"" @ %Object.repeatY @ "\"");
%FileObject_File.writeLine("\t\t" @ "scrollX=\"" @ %Object.scrollX @ "\"");
%FileObject_File.writeLine("\t\t" @ "scrollY=\"" @ %Object.scrollY @ "\"");
%FileObject_File.writeLine("\t\t" @ "scrollPositionX=\"" @ %Object.scrollPositionX @ "\"");
%FileObject_File.writeLine("\t\t" @ "scrollPositionY=\"" @ %Object.scrollPositionY @ "\"");
//Collision shape.
if (%Object.CollisionPolyList$="")
{
Convert_Default_Fields(%FileObject_File,%Object,true);
}
else
{
Convert_Default_Fields(%FileObject_File,%Object,false);
%FileObject_File.writeLine("\t\t<Scroller.CollisionShapes>");
%FileObject_File.writeLine("\t\t\t<Polygon");
%FileObject_File.writeLine("\t\t\t\tSensor=\"" @ !%Object.CollisionActiveSend @ "\">");
for (%x=0;%x<getWordCount(%Object.CollisionPolyList);%x+=2)
{
%Vector2D_Point=getWord(%Object.CollisionPolyList,%x)*(%Object.Size.X*0.5) SPC getWord(%Object.CollisionPolyList,%x+1)*(%Object.Size.Y*0.5);
%Vector2D_Point.Y*=-1;//Flip Y
%FileObject_File.writeLine("\t\t\t\t<Point>" @ %Vector2D_Point @ "</Point>");
}
%FileObject_File.writeLine("\t\t\t</Polygon>");
%FileObject_File.writeLine("\t\t</Scroller.CollisionShapes>");
%FileObject_File.writeLine("\t</Scroller>");
}
}
function Convert_SceneObject(%FileObject_File,%Object)
{
%FileObject_File.writeLine("\t<SceneObject");
//Collision shape.
if (%Object.CollisionPolyList$="")
{
Convert_Default_Fields(%FileObject_File,%Object,true);
}
else
{
Convert_Default_Fields(%FileObject_File,%Object,false);
%FileObject_File.writeLine("\t\t<SceneObject.CollisionShapes>");
%FileObject_File.writeLine("\t\t\t<Polygon");
%FileObject_File.writeLine("\t\t\t\tSensor=\"" @ !%Object.CollisionActiveSend @ "\">");
for (%x=0;%x<getWordCount(%Object.CollisionPolyList);%x+=2)
{
%Vector2D_Point=getWord(%Object.CollisionPolyList,%x)*(%Object.Size.X*0.5) SPC getWord(%Object.CollisionPolyList,%x+1)*(%Object.Size.Y*0.5);
%Vector2D_Point.Y*=-1;//Flip Y
%FileObject_File.writeLine("\t\t\t\t<Point>" @ %Vector2D_Point @ "</Point>");
}
%FileObject_File.writeLine("\t\t\t</Polygon>");
%FileObject_File.writeLine("\t\t</SceneObject.CollisionShapes>");
%FileObject_File.writeLine("\t</SceneObject>");
}
}
function Convert_Trigger(%FileObject_File,%Object)
{
%FileObject_File.writeLine("\t<Trigger");
%FileObject_File.writeLine("\t\t" @ "EnterCallback=\"" @ %Object.EnterCallback @ "\"");
%FileObject_File.writeLine("\t\t" @ "StayCallback=\"" @ %Object.StayCallback @ "\"");
%FileObject_File.writeLine("\t\t" @ "LeaveCallback=\"" @ %Object.LeaveCallback @ "\"");
//Collision shape.
if (%Object.CollisionPolyList$="")
{
Convert_Default_Fields(%FileObject_File,%Object,true);
}
else
{
Convert_Default_Fields(%FileObject_File,%Object,false);
%FileObject_File.writeLine("\t\t<Trigger.CollisionShapes>");
%FileObject_File.writeLine("\t\t\t<Polygon");
%FileObject_File.writeLine("\t\t\t\tSensor=\"" @ !%Object.CollisionActiveSend @ "\">");
for (%x=0;%x<getWordCount(%Object.CollisionPolyList);%x+=2)
{
%Vector2D_Point=getWord(%Object.CollisionPolyList,%x)*(%Object.Size.X*0.5) SPC getWord(%Object.CollisionPolyList,%x+1)*(%Object.Size.Y*0.5);
%Vector2D_Point.Y*=-1;//Flip Y
%FileObject_File.writeLine("\t\t\t\t<Point>" @ %Vector2D_Point @ "</Point>");
}
%FileObject_File.writeLine("\t\t\t</Polygon>");
%FileObject_File.writeLine("\t\t</Trigger.CollisionShapes>");
%FileObject_File.writeLine("\t</Trigger>");
}
}
function Convert_AnimatedSprite(%FileObject_File,%Object)
{
%FileObject_File.writeLine("\t<Sprite");
%FileObject_File.writeLine("\t\t" @ "Animation=\"@asset=ModuleName:" @ %Object.animationName @ "\"");
//Collision shape.
if (%Object.CollisionPolyList$="")
{
Convert_Default_Fields(%FileObject_File,%Object,true);
}
else
{
Convert_Default_Fields(%FileObject_File,%Object,false);
%FileObject_File.writeLine("\t\t<Sprite.CollisionShapes>");
%FileObject_File.writeLine("\t\t\t<Polygon");
%FileObject_File.writeLine("\t\t\t\tSensor=\"" @ !%Object.CollisionActiveSend @ "\">");
for (%x=0;%x<getWordCount(%Object.CollisionPolyList);%x+=2)
{
%Vector2D_Point=getWord(%Object.CollisionPolyList,%x)*(%Object.Size.X*0.5) SPC getWord(%Object.CollisionPolyList,%x+1)*(%Object.Size.Y*0.5);
%Vector2D_Point.Y*=-1;//Flip Y
%FileObject_File.writeLine("\t\t\t\t<Point>" @ %Vector2D_Point @ "</Point>");
}
%FileObject_File.writeLine("\t\t\t</Polygon>");
%FileObject_File.writeLine("\t\t</Sprite.CollisionShapes>");
%FileObject_File.writeLine("\t</Sprite>");
}
}
function Convert_StaticSprite(%FileObject_File,%Object)
{
%FileObject_File.writeLine("\t<Sprite");
%FileObject_File.writeLine("\t\t" @ "Image=\"@asset=ModuleName:" @ %Object.imageMap@"\"");
%FileObject_File.writeLine("\t\t" @ "frame=\"" @ %Object.frame @ "\"");
//Collision shape.
if (%Object.CollisionPolyList$="")
{
Convert_Default_Fields(%FileObject_File,%Object,true);
}
else
{
Convert_Default_Fields(%FileObject_File,%Object,false);
%FileObject_File.writeLine("\t\t<Sprite.CollisionShapes>");
%FileObject_File.writeLine("\t\t\t<Polygon");
%FileObject_File.writeLine("\t\t\t\tSensor=\"" @ !%Object.CollisionActiveSend @ "\">");
for (%x=0;%x<getWordCount(%Object.CollisionPolyList);%x+=2)
{
%Vector2D_Point=getWord(%Object.CollisionPolyList,%x)*(%Object.Size.X*0.5) SPC getWord(%Object.CollisionPolyList,%x+1)*(%Object.Size.Y*0.5);
%Vector2D_Point.Y*=-1;//Flip Y
%FileObject_File.writeLine("\t\t\t\t<Point>" @ %Vector2D_Point @ "</Point>");
}
%FileObject_File.writeLine("\t\t\t</Polygon>");
%FileObject_File.writeLine("\t\t</Sprite.CollisionShapes>");
%FileObject_File.writeLine("\t</Sprite>");
}
}
function Convert_TileLayer(%FileObject_File,%Object)
{
%Vector2D_TileCount=%Object.getTileCount();
%Vector2D_TileSize=%Object.getTileSize();
%Vector2D_TileSize_Half=%Vector2D_TileSize.X*0.5 SPC %Vector2D_TileSize.Y*0.5;
%Vector2D_LayerSize=%Vector2D_TileSize.X*%Vector2D_TileCount.X SPC %Vector2D_TileSize.Y*%Vector2D_TileCount.Y;
%Vector2D_LayerSize_Half=%Vector2D_LayerSize.X*0.5 SPC %Vector2D_LayerSize.Y*0.5;
%FileObject_File.writeLine("\t<CompositeSprite");
%FileObject_File.writeLine("\t\t" @ "BatchIsolated=\"1\"");
%FileObject_File.writeLine("\t\t" @ "BatchSortMode=\"Z\"");
Convert_Default_Fields(%FileObject_File,%Object,false);
//Collision shape.
%FileObject_File.writeLine("\t\t<CompositeSprite.CollisionShapes>");
%FileObject_File.writeLine("\t\t\t<Polygon");
%FileObject_File.writeLine("\t\t\t\tSensor=\"" @ !%Object.CollisionActiveSend @ "\">");
for (%x=0;%x<getWordCount(%Object.CollisionPolyList);%x+=2)
{
%Vector2D_Point=getWord(%Object.CollisionPolyList,%x)*(%Object.Size.X*0.5) SPC getWord(%Object.CollisionPolyList,%x+1)*(%Object.Size.Y*0.5);
%Vector2D_Point.Y*=-1;//Flip Y
%FileObject_File.writeLine("\t\t\t\t<Point>" @ %Vector2D_Point @ "</Point>");
}
%FileObject_File.writeLine("\t\t\t</Polygon>");
%FileObject_File.writeLine("\t\t</CompositeSprite.CollisionShapes>");
%FileObject_File.writeLine("\t\t" @ "<CompositeSprite.Sprites>");
for (%y=0;%y<%Vector2D_TileCount.Y;%y++)
{
for (%x=0;%x<%Vector2D_TileCount.X;%x++)
{
%StringType_Type=%Object.getTileType(%x,%y);
if (%StringType_Type!$="")
{
%FileObject_File.writeLine("\t\t\t" @ "<Sprite");
if (getWord(%StringType_Type,0)$="static")
{
%FileObject_File.writeLine("\t\t\t\t" @ "Image=\"ModuleName:" @ getWord(%StringType_Type,1) @ "\"");
%FileObject_File.writeLine("\t\t\t\t" @ "Frame=\"" @ getWord(%StringType_Type,2) @ "\"");
}
else
{
%FileObject_File.writeLine("\t\t\t\t" @ "Animation=\"ModuleName:" @ getWord(%StringType_Type,1) @ "\"");
}
%Vector2D_Position=%x*%Vector2D_TileSize.X SPC %y*%Vector2D_TileSize.Y;
%Vector2D_Position=%Vector2D_Position.X-%Vector2D_LayerSize_Half.X SPC %Vector2D_Position.Y-%Vector2D_LayerSize_Half.Y;
%Vector2D_Position=%Vector2D_Position.X+%Vector2D_TileSize_Half.X SPC %Vector2D_Position.Y+%Vector2D_TileSize_Half.Y;
%FileObject_File.writeLine("\t\t\t\t" @ "Position=\"" @ %Vector2D_Position @ "\"");
%FileObject_File.writeLine("\t\t\t\t" @ "Size=\"" @ %Vector2D_TileSize @ "\"" SPC "/>");
}
}
}
%FileObject_File.writeLine("\t\t" @ "</CompositeSprite.Sprites>");
%FileObject_File.writeLine("\t</CompositeSprite>");
}
function Convert_Path(%FileObject_File,%Object)
{//Object: mount id, start node, end node, speed, move forward, orient to path, rotation offset, loops, follow mode
for (%x=0;%x<%Object.getAttachedObjectCount();%x++)
{
echo(%Object.getAttachedObject(%x));
}
%FileObject_File.writeLine("\t<SceneObject");
//Collision shape.
if (%Object.CollisionPolyList$="")
{
Convert_Default_Fields(%FileObject_File,%Object,true);
}
else
{
Convert_Default_Fields(%FileObject_File,%Object,false);
%FileObject_File.writeLine("\t\t<SceneObject.CollisionShapes>");
%FileObject_File.writeLine("\t\t\t<Polygon");
%FileObject_File.writeLine("\t\t\t\tSensor=\"" @ !%Object.CollisionActiveSend @ "\">");
for (%x=0;%x<getWordCount(%Object.CollisionPolyList);%x+=2)
{
%Vector2D_Point=getWord(%Object.CollisionPolyList,%x)*(%Object.Size.X*0.5) SPC getWord(%Object.CollisionPolyList,%x+1)*(%Object.Size.Y*0.5);
%Vector2D_Point.Y*=-1;//Flip Y
%FileObject_File.writeLine("\t\t\t\t<Point>" @ %Vector2D_Point @ "</Point>");
}
%FileObject_File.writeLine("\t\t\t</Polygon>");
%FileObject_File.writeLine("\t\t</SceneObject.CollisionShapes>");
%FileObject_File.writeLine("\t</SceneObject>");
}
}
function Convert_To_MITT2D()
{
%FileStreamObject_File=new FileStreamObject();
%FileStreamObject_File.open("~/Scene.scene.taml","write");
%FileStreamObject_File.writeLine("<Scene>");
for (%x=0;%x<t2dSceneGraph_SceneGraph.getCount();%x++)
{
%Object=t2dSceneGraph_SceneGraph.getObject(%x);
if (%Object.getClassName()$="t2dTileLayer")
{
Convert_TileLayer(%FileStreamObject_File,%Object);
}
else if (%Object.getClassName()$="t2dStaticSprite")
{
Convert_StaticSprite(%FileStreamObject_File,%Object);
}
else if (%Object.getClassName()$="t2dAnimatedSprite")
{
Convert_AnimatedSprite(%FileStreamObject_File,%Object);
}
else if (%Object.getClassName()$="t2dTrigger")
{
Convert_Trigger(%FileStreamObject_File,%Object);
}
else if (%Object.getClassName()$="t2dSceneObject")
{
Convert_SceneObject(%FileStreamObject_File,%Object);
}
else if (%Object.getClassName()$="t2dScroller")
{
Convert_Scroller(%FileStreamObject_File,%Object);
}
else if (%Object.getClassName()$="t2dPath")
{
//Convert_Path(%FileStreamObject_File,%Object);
}
}
%FileStreamObject_File.writeLine("</Scene>");
%FileStreamObject_File.close();
Convert_Assets();
}Edit: 9/7/14 nano bug fix.
Torque Owner Richard Ranft
Roostertail Games