public int AddInstance(MyStringHash subtypeId, int modelId, int localId, ref Matrix localMatrix, BoundingBox localAabb, MyInstanceFlagsEnum instanceFlags, float maxViewDistance, Vector3 colorMaskHsv = new Vector3()) { MyModelInstanceData data; using (this.m_instancePartsLock.AcquireExclusiveUsing()) { if (!this.m_instanceParts.TryGetValue(modelId, out data)) { data = new MyModelInstanceData(this, subtypeId, modelId, instanceFlags, maxViewDistance, localAabb); this.m_instanceParts.Add(modelId, data); } } MySectorInstanceData data3 = new MySectorInstanceData { LocalId = localId }; MyInstanceData data4 = new MyInstanceData { ColorMaskHSV = new HalfVector4(colorMaskHsv.X, colorMaskHsv.Y, colorMaskHsv.Z, 0f), LocalMatrix = localMatrix }; data3.InstanceData = data4; MySectorInstanceData instanceData = data3; int num = data.AddInstanceData(ref instanceData); localMatrix = data.InstanceData[num].LocalMatrix; this.m_AABB = this.m_AABB.Include(localAabb.Transform((Matrix)localMatrix)); this.m_sectorItemCount++; this.m_invalidateAABB = true; return(num); }
/// <summary> /// Adds instance of the given model. Local matrix specified might be changed internally for renderer (must be used for removing instances). /// </summary> /// <param name="subtypeId"></param> /// <param name="localMatrix">Local transformation matrix. Changed to internal matrix.</param> /// <param name="colorMaskHsv"></param> public int AddInstance( MyStringHash subtypeId, ModelId modelId, int localId, ref Matrix localMatrix, BoundingBox localAabb, MyInstanceFlagsEnum instanceFlags, float maxViewDistance, Vector4 colorMaskHsv = default(Vector4), Vector2I uvOffset = default(Vector2I)) { MyModelInstanceData builderInstanceData; using (m_instancePartsLock.AcquireExclusiveUsing()) { if (!m_instanceParts.TryGetValue(modelId, out builderInstanceData)) { builderInstanceData = new MyModelInstanceData(subtypeId, instanceFlags, maxViewDistance, localAabb); m_instanceParts.Add(modelId, builderInstanceData); } } uvOffset = new Vector2I(MyUtils.GetRandomInt(2), MyUtils.GetRandomInt(2)); Color green = Color.Green; Vector3 hsv = green.ColorToHSVDX11(); hsv.Y = MyUtils.GetRandomFloat(0.0f, 1.0f); colorMaskHsv = new Vector4(hsv, 0); MySectorInstanceData newInstance = new MySectorInstanceData() { LocalId = localId, InstanceData = new MyInstanceData() { ColorMaskHSV = new VRageMath.PackedVector.HalfVector4(colorMaskHsv), LocalMatrix = localMatrix, UVOffset = new VRageMath.PackedVector.HalfVector2(uvOffset) } }; int sectorInstanceId = builderInstanceData.AddInstanceData(ref newInstance); // Matrix has been changed due to packing. localMatrix = builderInstanceData.InstanceData[sectorInstanceId].InstanceData.LocalMatrix; Debug.Assert(builderInstanceData.InstanceData[sectorInstanceId].InstanceData.LocalMatrix == localMatrix, "Bad matrix"); m_AABB = m_AABB.Include(localAabb.Transform(localMatrix)); m_sectorItemCount++; m_invalidateAABB = true; return(sectorInstanceId); }
public int AddInstanceData(ref MySectorInstanceData instanceData) { if (FreeInstances.Count > 0) { var idx = FreeInstances.Dequeue(); InstanceData[idx] = instanceData; return idx; } else { InstanceData.Add(instanceData); return InstanceData.Count - 1; } }
public int AddInstanceData(ref MySectorInstanceData instanceData) { if (FreeInstances.Count > 0) { var idx = FreeInstances.Dequeue(); InstanceData[idx] = instanceData; return(idx); } else { InstanceData.Add(instanceData); return(InstanceData.Count - 1); } }
/// <summary> /// Adds instance of the given model. Local matrix specified might be changed internally for renderer (must be used for removing instances). /// </summary> /// <param name="subtypeId"></param> /// <param name="localMatrix">Local transformation matrix. Changed to internal matrix.</param> /// <param name="colorMaskHsv"></param> public int AddInstance( MyStringHash subtypeId, ModelId modelId, int localId, ref Matrix localMatrix, BoundingBox localAabb, MyInstanceFlagsEnum instanceFlags, float maxViewDistance, Vector3 colorMaskHsv = default(Vector3)) { MyModelInstanceData builderInstanceData; using (m_instancePartsLock.AcquireExclusiveUsing()) { if (!m_instanceParts.TryGetValue(modelId, out builderInstanceData)) { builderInstanceData = new MyModelInstanceData(this, subtypeId, modelId, instanceFlags, maxViewDistance, localAabb); m_instanceParts.Add(modelId, builderInstanceData); } } MySectorInstanceData newInstance = new MySectorInstanceData() { LocalId = localId, InstanceData = new MyInstanceData() { ColorMaskHSV = new VRageMath.PackedVector.HalfVector4(colorMaskHsv.X, colorMaskHsv.Y, colorMaskHsv.Z, 0), LocalMatrix = localMatrix, } }; int sectorInstanceId = builderInstanceData.AddInstanceData(ref newInstance); // Matrix has been changed due to packing. localMatrix = builderInstanceData.InstanceData[sectorInstanceId].LocalMatrix; Debug.Assert(builderInstanceData.InstanceData[sectorInstanceId].LocalMatrix == localMatrix, "Bad matrix"); m_AABB = m_AABB.Include(localAabb.Transform(localMatrix)); m_sectorItemCount++; m_invalidateAABB = true; return(sectorInstanceId); }
public int AddInstanceData(ref MySectorInstanceData instanceData) { using (InstanceBufferLock.AcquireExclusiveUsing()) { while (InstanceData.ContainsKey(m_keyIndex) && InstanceData.Count < int.MaxValue) { m_keyIndex++; } if (!InstanceData.ContainsKey(m_keyIndex)) { InstanceData.Add(m_keyIndex, instanceData.InstanceData); InstanceIds.Add(m_keyIndex, instanceData.LocalId); return m_keyIndex; } else { throw new Exception("No available keys to add new instance data to sector!"); } } }
public int AddInstanceData(ref MySectorInstanceData instanceData) { using (InstanceBufferLock.AcquireExclusiveUsing()) { while (InstanceData.ContainsKey(m_keyIndex) && InstanceData.Count < int.MaxValue) { m_keyIndex++; } if (!InstanceData.ContainsKey(m_keyIndex)) { InstanceData.Add(m_keyIndex, instanceData.InstanceData); InstanceIds.Add(m_keyIndex, instanceData.LocalId); return(m_keyIndex); } else { throw new Exception("No available keys to add new instance data to sector!"); } } }
/// <summary> /// Adds instance of the given model. Local matrix specified might be changed internally for renderer (must be used for removing instances). /// </summary> /// <param name="subtypeId"></param> /// <param name="localMatrix">Local transformation matrix. Changed to internal matrix.</param> /// <param name="colorMaskHsv"></param> public int AddInstance( MyStringHash subtypeId, ModelId modelId, int localId, ref Matrix localMatrix, BoundingBox localAabb, MyInstanceFlagsEnum instanceFlags, float maxViewDistance, Vector4 colorMaskHsv = default(Vector4)) { MyModelInstanceData builderInstanceData; if (!m_instanceParts.TryGetValue(modelId, out builderInstanceData)) { builderInstanceData = new MyModelInstanceData(subtypeId, instanceFlags, maxViewDistance, localAabb); m_instanceParts.Add(modelId, builderInstanceData); } MySectorInstanceData newInstance = new MySectorInstanceData() { LocalId = localId, InstanceData = new MyInstanceData() { ColorMaskHSV = new VRageMath.PackedVector.HalfVector4(colorMaskHsv), LocalMatrix = localMatrix } }; int sectorInstanceId = builderInstanceData.AddInstanceData(ref newInstance); // Matrix has been changed due to packing. localMatrix = builderInstanceData.InstanceData[sectorInstanceId].InstanceData.LocalMatrix; Debug.Assert(builderInstanceData.InstanceData[sectorInstanceId].InstanceData.LocalMatrix == localMatrix, "Bad matrix"); m_AABB = m_AABB.Include(localAabb.Transform(localMatrix)); m_sectorItemCount++; m_invalidateAABB = true; return sectorInstanceId; }
/// <summary> /// Adds instance of the given model. Local matrix specified might be changed internally for renderer (must be used for removing instances). /// </summary> /// <param name="subtypeId"></param> /// <param name="localMatrix">Local transformation matrix. Changed to internal matrix.</param> /// <param name="colorMaskHsv"></param> public int AddInstance( MyStringHash subtypeId, ModelId modelId, int localId, ref Matrix localMatrix, BoundingBox localAabb, MyInstanceFlagsEnum instanceFlags, float maxViewDistance, Vector4 colorMaskHsv = default(Vector4), Vector2I uvOffset = default(Vector2I)) { MyModelInstanceData builderInstanceData; using (m_instancePartsLock.AcquireExclusiveUsing()) { if (!m_instanceParts.TryGetValue(modelId, out builderInstanceData)) { builderInstanceData = new MyModelInstanceData(subtypeId, instanceFlags, maxViewDistance, localAabb); m_instanceParts.Add(modelId, builderInstanceData); } } uvOffset = new Vector2I(MyUtils.GetRandomInt(2), MyUtils.GetRandomInt(2)); Color green = Color.Green; Vector3 hsv = green.ColorToHSVDX11(); hsv.Y = MyUtils.GetRandomFloat(0.0f, 1.0f); colorMaskHsv = new Vector4(hsv, 0); MySectorInstanceData newInstance = new MySectorInstanceData() { LocalId = localId, InstanceData = new MyInstanceData() { ColorMaskHSV = new VRageMath.PackedVector.HalfVector4(colorMaskHsv), LocalMatrix = localMatrix, UVOffset = new VRageMath.PackedVector.HalfVector2(uvOffset) } }; int sectorInstanceId = builderInstanceData.AddInstanceData(ref newInstance); // Matrix has been changed due to packing. localMatrix = builderInstanceData.InstanceData[sectorInstanceId].InstanceData.LocalMatrix; Debug.Assert(builderInstanceData.InstanceData[sectorInstanceId].InstanceData.LocalMatrix == localMatrix, "Bad matrix"); m_AABB = m_AABB.Include(localAabb.Transform(localMatrix)); m_sectorItemCount++; m_invalidateAABB = true; return sectorInstanceId; }