BannerlordTwitch.Util.RenderExport.GetItemPoseAndCamera C# (CSharp) Method

GetItemPoseAndCamera() private method

private GetItemPoseAndCamera ( ItemObject item, Scene scene, Camera &camera, MatrixFrame &itemFrame, MatrixFrame &itemFrame1, MatrixFrame &itemFrame2 ) : void
item ItemObject
scene Scene
camera Camera
itemFrame MatrixFrame
itemFrame1 MatrixFrame
itemFrame2 MatrixFrame
return void
        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;
			}
		}