コード例 #1
0
        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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
     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;
     }
 }
コード例 #4
0
 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);
     }
 }
コード例 #5
0
        /// <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);
        }
コード例 #6
0
            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!");
                    }
                }
            }
コード例 #7
0
            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!");
                    }
                }
            }
コード例 #8
0
        /// <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;
        }
コード例 #9
0
        /// <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;
        }