Пример #1
0
        /// <summary>
        /// パーティクル番号を元にエッジを追加する
        /// </summary>
        /// <param name="aIdx"></param>
        /// <param name="bIdx"></param>
        /// <param name="width"></param>
        /// <param name="color"></param>
        /// <param name="materialID"></param>
        /// <returns></returns>
        public RefEdge AddEdge(int aIdx, int bIdx, float width, Color color, string materialID)
        {
            var e = new RefEdge(GetNextUID(), GetParticleAt(aIdx).uid, GetParticleAt(bIdx).uid, width, color, materialID);

            _edges.Add(e);
            return(e);
        }
Пример #2
0
        /// <summary>
        /// パーティクル参照を元にエッジを追加する
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <param name="width"></param>
        /// <param name="color"></param>
        /// <param name="materialID"></param>
        /// <returns></returns>
        public RefEdge AddEdge(RefParticle a, RefParticle b, float width, Color color, string materialID)
        {
            Assert.IsNotNull(a);
            Assert.IsNotNull(b);

            var e = new RefEdge(GetNextUID(), a.uid, b.uid, width, color, materialID);

            _edges.Add(e);
            return(e);
        }
        /// <summary>
        /// 指定した座標にヒットした最も近いエッジを返す
        /// </summary>
        /// <param name="s"></param>
        /// <param name="position"></param>
        /// <returns></returns>
        public static RefEdge HitEdge(RefStructure s, Vector2 position)
        {
            float   _minDist      = float.MaxValue;
            RefEdge nearestHitten = null;

            for (var i = 0; i < s._edges.Count; ++i)
            {
                var t    = s._edges[i];
                var a    = s.FindParticleFromUID(t.aUID);
                var b    = s.FindParticleFromUID(t.bUID);
                var dist = Utilities.CalcMinDist2(position, a.position, b.position);
                if (_minDist > dist && dist <= t.width)
                {
                    _minDist      = dist;
                    nearestHitten = t;
                }
            }

            return(nearestHitten);
        }
Пример #4
0
 /// <summary>
 /// 指定したUIDに紐付いているエッジを削除する
 /// </summary>
 /// <param name="uid"></param>
 public void RemoveEdge(RefEdge edge)
 {
     _edges.Remove(edge);
 }