private object CreateFlatRedBallTypeNos(NamedObjectSave namedObjectSave,
PositionedObjectList<ElementRuntime> listToPopulate, Layer layerToPutOn)
{
object returnObject = null;
ElementRuntime newElementRuntime = null;
switch (namedObjectSave.SourceClassType)
{
case "Layer":
case "FlatRedBall.Graphics.Layer":
returnObject = CreateLayerObject(namedObjectSave, returnObject);
break;
case "AxisAlignedRectangle":
case "FlatRedBall.Math.Geometry.AxisAlignedRectangle":
AxisAlignedRectangle aaRectangle = ShapeManager.AddAxisAlignedRectangle();
if (layerToPutOn != null)
{
ShapeManager.AddToLayer(aaRectangle, layerToPutOn);
}
aaRectangle.Name = namedObjectSave.InstanceName;
returnObject = aaRectangle;
break;
case "Camera":
case "FlatRedBall.Camera":
if (namedObjectSave.IsNewCamera)
{
returnObject = null;
}
else
{
returnObject = SpriteManager.Camera;
}
break;
case "Circle":
case "FlatRedBall.Math.Geometry.Circle":
Circle circle = ShapeManager.AddCircle();
circle.Name = namedObjectSave.InstanceName;
if (layerToPutOn != null)
{
ShapeManager.AddToLayer(circle, layerToPutOn);
}
returnObject = circle;
break;
case "Polygon":
case "FlatRedBall.Math.Geometry.Polygon":
Polygon polygon = ShapeManager.AddPolygon();
polygon.Name = namedObjectSave.InstanceName;
if(layerToPutOn != null)
{
ShapeManager.AddToLayer(polygon, layerToPutOn);
}
returnObject = polygon;
break;
case "Sprite":
case "FlatRedBall.Sprite":
Sprite sprite = SpriteManager.AddSprite((Texture2D)null);
if (layerToPutOn != null)
{
SpriteManager.AddToLayer(sprite, layerToPutOn);
}
sprite.Name = namedObjectSave.InstanceName;
returnObject = sprite;
break;
case "SpriteFrame":
case "FlatRedBall.ManagedSpriteGroups.SpriteFrame":
SpriteFrame spriteFrame = SpriteManager.AddSpriteFrame(null, SpriteFrame.BorderSides.All);
if (layerToPutOn != null)
{
SpriteManager.AddToLayer(spriteFrame, layerToPutOn);
}
spriteFrame.Name = namedObjectSave.InstanceName;
returnObject = spriteFrame;
break;
case "Text":
case "FlatRedBall.Graphics.Text":
Text text = TextManager.AddText("");
if (layerToPutOn != null)
{
TextManager.AddToLayer(text, layerToPutOn);
text.SetPixelPerfectScale(layerToPutOn);
}
text.Name = namedObjectSave.InstanceName;
returnObject = text;
break;
case "Scene":
case "FlatRedBall.Scene":
Scene scene = new Scene();
scene.Name = namedObjectSave.InstanceName;
returnObject = scene;
break;
default:
// do nothing - need to add more types?
break;
}
if (returnObject != null)
{
if (returnObject is IScalable)
{
newElementRuntime = new ScalableElementRuntime(null, layerToPutOn, namedObjectSave, CreationOptions.OnBeforeVariableSet, CreationOptions.OnAfterVariableSet);
}
else
{
newElementRuntime = new ElementRuntime(null, layerToPutOn, namedObjectSave, CreationOptions.OnBeforeVariableSet, CreationOptions.OnAfterVariableSet);
}
newElementRuntime.mDirectObjectReference = returnObject;
if (returnObject is Camera && !namedObjectSave.IsNewCamera)
{
SpriteManager.Camera.AttachTo(newElementRuntime, false);
SpriteManager.Camera.RelativePosition = Vector3.Zero;
newElementRuntime.Z = 40;
newElementRuntime.Name = namedObjectSave.InstanceName;
}
else if (returnObject is FlatRedBall.Utilities.INameable)
{
newElementRuntime.Name = ((FlatRedBall.Utilities.INameable)returnObject).Name;
}
else
{
object nameValueAsObject;
if (LateBinder.TryGetValueStatic(returnObject, "Name", out nameValueAsObject))
{
newElementRuntime.Name = (string)nameValueAsObject;
}
}
listToPopulate.Add(newElementRuntime);
}
return returnObject;
}