Example #1
0
        /// <summary>
        /// パーティクルを追加する
        /// </summary>
        /// <param name="position"></param>
        /// <param name="size"></param>
        /// <param name="color"></param>
        /// <param name="materialID"></param>
        /// <returns></returns>
        public RefParticle AddParticle(Vector2 position, float size, Color color, string materialID)
        {
            var p = new RefParticle(GetNextUID(), position, size, color, materialID);

            _particles.Add(p);
            return(p);
        }
Example #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);
        }
Example #3
0
        /// <summary>
        /// 指定したuidに紐付いているパーティクルを削除する
        /// </summary>
        /// <param name="uid"></param>
        public void RemoveParticle(RefParticle p)
        {
            if (p == null)
            {
                return;
            }

            // 紐付いているエッジを削除する
            var result = FindEdgesWithParticle(p.uid);

            for (var i = 0; i < result.Count; ++i)
            {
                _edges.Remove(result[i]);
            }

            _particles.Remove(p);
        }
        /// <summary>
        /// 指定した座標にヒットした最も近いパーティクルを返す
        /// </summary>
        /// <param name="s"></param>
        /// <param name="position"></param>
        /// <returns></returns>
        public static RefParticle HitParticle(RefStructure s, Vector2 position)
        {
            float       _minDist      = float.MaxValue;
            RefParticle nearestHitten = null;

            for (var i = 0; i < s._particles.Count; ++i)
            {
                var t    = s._particles[i];
                var dist = (t.position - position).magnitude;
                if (_minDist > dist && dist <= t.size)
                {
                    _minDist      = dist;
                    nearestHitten = t;
                }
            }

            return(nearestHitten);
        }