/// <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); }
/// <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> /// 指定した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); }