/// <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); }
/// <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); }
/// <summary> /// 指定したUIDに紐付いているエッジを削除する /// </summary> /// <param name="uid"></param> public void RemoveEdge(RefEdge edge) { _edges.Remove(edge); }