public VMMultitileGroup CreateObjectInstance(UInt32 GUID, LotTilePos pos, Direction direction, short MainStackOBJ, short MainParam, bool ghostImage)
{
VMMultitileGroup group = new VMMultitileGroup();
var objDefinition = FSO.Content.Content.Get().WorldObjects.Get(GUID);
if (objDefinition == null)
{
return(null);
}
var master = objDefinition.OBJ.MasterID;
if (master != 0 && objDefinition.OBJ.SubIndex == -1)
{
group.MultiTile = true;
var objd = objDefinition.Resource.List <OBJD>();
for (int i = 0; i < objd.Count; i++)
{
if (objd[i].MasterID == master && objd[i].SubIndex != -1) //if sub-part of this object, make it!
{
var subObjDefinition = FSO.Content.Content.Get().WorldObjects.Get(objd[i].GUID);
if (subObjDefinition != null)
{
var worldObject = new ObjectComponent(subObjDefinition);
var vmObject = new VMGameObject(subObjDefinition, worldObject);
vmObject.GhostImage = ghostImage;
if (UseWorld)
{
Blueprint.AddObject(worldObject);
}
vmObject.MasterDefinition = objDefinition.OBJ;
vmObject.UseTreeTableOf(objDefinition);
vmObject.MainParam = MainParam;
vmObject.MainStackOBJ = MainStackOBJ;
group.AddObject(vmObject);
vmObject.MultitileGroup = group;
if (!ghostImage)
{
VM.AddEntity(vmObject);
}
}
}
}
group.Init(this);
VMPlacementError couldPlace = group.ChangePosition(pos, direction, this).Status;
return(group);
}
else
{
if (objDefinition.OBJ.ObjectType == OBJDType.Person) //person
{
var vmObject = new VMAvatar(objDefinition);
vmObject.MultitileGroup = group;
group.AddObject(vmObject);
vmObject.GhostImage = ghostImage;
if (!ghostImage)
{
VM.AddEntity(vmObject);
}
if (UseWorld)
{
Blueprint.AddAvatar((AvatarComponent)vmObject.WorldUI);
}
vmObject.MainParam = MainParam;
vmObject.MainStackOBJ = MainStackOBJ;
group.Init(this);
vmObject.SetPosition(pos, direction, this);
return(group);
}
else
{
var worldObject = new ObjectComponent(objDefinition);
var vmObject = new VMGameObject(objDefinition, worldObject);
vmObject.MultitileGroup = group;
group.AddObject(vmObject);
vmObject.GhostImage = ghostImage;
if (!ghostImage)
{
VM.AddEntity(vmObject);
}
if (UseWorld && Blueprint != null)
{
Blueprint.AddObject(worldObject);
}
vmObject.MainParam = MainParam;
vmObject.MainStackOBJ = MainStackOBJ;
group.Init(this);
vmObject.SetPosition(pos, direction, this);
return(group);
}
}
}