private void GetItemPoseAndCamera(ItemObject item, Scene scene, ref Camera camera,
ref MatrixFrame itemFrame, ref MatrixFrame itemFrame1, ref MatrixFrame itemFrame2)
{
if (item.IsCraftedWeapon)
{
GetItemPoseAndCameraForCraftedItem(item, scene, ref camera, ref itemFrame, ref itemFrame1, ref itemFrame2);
return;
}
string str = "";
bool flag = false;
if (item.WeaponComponent != null)
{
WeaponClass weaponClass = item.WeaponComponent.PrimaryWeapon.WeaponClass;
if (weaponClass - WeaponClass.OneHandedSword <= 1)
{
str = "sword";
flag = true;
}
}
else
{
ItemObject.ItemTypeEnum type = item.Type;
if (type != ItemObject.ItemTypeEnum.HeadArmor)
{
if (type == ItemObject.ItemTypeEnum.BodyArmor)
{
str = "armor";
flag = true;
}
}
else
{
str = "helmet";
flag = true;
}
}
if (item.Type == ItemObject.ItemTypeEnum.Shield)
{
str = "shield";
flag = true;
}
if (item.Type == ItemObject.ItemTypeEnum.Crossbow)
{
str = "crossbow";
flag = true;
}
if (item.Type == ItemObject.ItemTypeEnum.Bow)
{
str = "bow";
flag = true;
}
if (item.Type == ItemObject.ItemTypeEnum.LegArmor)
{
str = "boot";
flag = true;
}
if (item.Type == ItemObject.ItemTypeEnum.Horse || item.Type == ItemObject.ItemTypeEnum.HorseHarness)
{
str = "horse";
flag = true;
}
if (item.Type == ItemObject.ItemTypeEnum.Cape)
{
str = "cape";
flag = true;
}
if (item.Type == ItemObject.ItemTypeEnum.HandArmor)
{
str = "glove";
flag = true;
}
if (item.Type == ItemObject.ItemTypeEnum.Arrows)
{
str = "arrow";
flag = true;
}
if (item.Type == ItemObject.ItemTypeEnum.Bolts)
{
str = "bolt";
flag = true;
}
Game game = Game.Current;
if (((game != null) ? game.DefaultItems : null) != null && (item == DefaultItems.IronOre || item == DefaultItems.HardWood || item == DefaultItems.Charcoal || item == DefaultItems.IronIngot1 || item == DefaultItems.IronIngot2 || item == DefaultItems.IronIngot3 || item == DefaultItems.IronIngot4 || item == DefaultItems.IronIngot5 || item == DefaultItems.IronIngot6 || item.ItemCategory == DefaultItemCategories.Silver))
{
str = "craftmat";
flag = true;
}
string tag = str + "_cam";
string tag2 = str + "_frame";
if (flag)
{
GameEntity gameEntity = scene.FindEntityWithTag(tag);
if (gameEntity != null)
{
camera = Camera.CreateCamera();
Vec3 vec = default(Vec3);
gameEntity.GetCameraParamsFromCameraScript(camera, ref vec);
}
GameEntity gameEntity2 = scene.FindEntityWithTag(tag2);
if (gameEntity2 != null)
{
itemFrame = gameEntity2.GetGlobalFrame();
gameEntity2.SetVisibilityExcludeParents(false);
}
}
else
{
GameEntity gameEntity3 = scene.FindEntityWithTag("goods_cam");
if (gameEntity3 != null)
{
camera = Camera.CreateCamera();
Vec3 vec2 = default(Vec3);
gameEntity3.GetCameraParamsFromCameraScript(camera, ref vec2);
}
GameEntity gameEntity4 = scene.FindEntityWithTag("goods_frame");
if (gameEntity4 != null)
{
itemFrame = gameEntity4.GetGlobalFrame();
gameEntity4.SetVisibilityExcludeParents(false);
gameEntity4.UpdateGlobalBounds();
MatrixFrame globalFrame = gameEntity4.GetGlobalFrame();
MetaMesh itemMeshForInventory = new ItemRosterElement(item, 0, null).GetItemMeshForInventory(false);
Vec3 vec3 = new Vec3(1000000f, 1000000f, 1000000f, -1f);
Vec3 vec4 = new Vec3(-1000000f, -1000000f, -1000000f, -1f);
if (itemMeshForInventory != null)
{
MatrixFrame identity = MatrixFrame.Identity;
for (int num = 0; num != itemMeshForInventory.MeshCount; num++)
{
Vec3 boundingBoxMin = itemMeshForInventory.GetMeshAtIndex(num).GetBoundingBoxMin();
Vec3 boundingBoxMax = itemMeshForInventory.GetMeshAtIndex(num).GetBoundingBoxMax();
Vec3[] array = new Vec3[]
{
globalFrame.TransformToParent(new Vec3(boundingBoxMin.x, boundingBoxMin.y, boundingBoxMin.z, -1f)),
globalFrame.TransformToParent(new Vec3(boundingBoxMin.x, boundingBoxMin.y, boundingBoxMax.z, -1f)),
globalFrame.TransformToParent(new Vec3(boundingBoxMin.x, boundingBoxMax.y, boundingBoxMin.z, -1f)),
globalFrame.TransformToParent(new Vec3(boundingBoxMin.x, boundingBoxMax.y, boundingBoxMax.z, -1f)),
globalFrame.TransformToParent(new Vec3(boundingBoxMax.x, boundingBoxMin.y, boundingBoxMin.z, -1f)),
globalFrame.TransformToParent(new Vec3(boundingBoxMax.x, boundingBoxMin.y, boundingBoxMax.z, -1f)),
globalFrame.TransformToParent(new Vec3(boundingBoxMax.x, boundingBoxMax.y, boundingBoxMin.z, -1f)),
globalFrame.TransformToParent(new Vec3(boundingBoxMax.x, boundingBoxMax.y, boundingBoxMax.z, -1f))
};
for (int i = 0; i < 8; i++)
{
vec3 = Vec3.Vec3Min(vec3, array[i]);
vec4 = Vec3.Vec3Max(vec4, array[i]);
}
}
}
Vec3 v = (vec3 + vec4) * 0.5f;
Vec3 v2 = gameEntity4.GetGlobalFrame().TransformToLocal(v);
MatrixFrame globalFrame2 = gameEntity4.GetGlobalFrame();
globalFrame2.origin -= v2;
itemFrame = globalFrame2;
MatrixFrame frame = camera.Frame;
float f = (vec4 - vec3).Length * 6f;
if (item.Type == ItemObject.ItemTypeEnum.Animal)
{
f = (vec4 - vec3).Length * 3f;
}
frame.origin += frame.rotation.u * f;
camera.Frame = frame;
}
}
if (camera == null)
{
camera = Camera.CreateCamera();
camera.SetViewVolume(false, -1f, 1f, -0.5f, 0.5f, 0.01f, 100f);
MatrixFrame identity2 = MatrixFrame.Identity;
identity2.origin -= identity2.rotation.u * 7f;
identity2.rotation.u = identity2.rotation.u * -1f;
camera.Frame = identity2;
}
if (item.Type == ItemObject.ItemTypeEnum.Shield)
{
GameEntity gameEntity5 = scene.FindEntityWithTag(tag);
MatrixFrame holsterFrameByIndex = MBItem.GetHolsterFrameByIndex(MBItem.GetItemHolsterIndex(item.ItemHolsters[0]));
itemFrame.rotation = holsterFrameByIndex.rotation;
MatrixFrame frame2 = itemFrame.TransformToParent(gameEntity5.GetFrame());
camera.Frame = frame2;
}
}