/** ******************************************************************************** * @summary 消す想定のラインを選択する ***********************************************************************************/ private void CheckSelect(ChalkLine line) { var id = line.GetInstanceID(); // 既にあればスキップする if (this.selectableLines.ContainsKey(id)) { return; } // まだ書いてる途中のときスキップする if (line.Drawing) { return; } // 選択中のものを変更する this.selectableLines.Add(id, line); if (this.selectedLine != null) { this.selectedLine.DeselectLine(); } this.selectedLine = this.selectableLines.OrderByDescending(item => item.Value.CreatedTime).First().Value; this.selectedLine.SelectLine(); }
/** ******************************************************************************** * @summary 出たときの処理 ***********************************************************************************/ private void OnTriggerExit2D(Collider2D collision) { if (collision.tag == "Line") { var removeId = collision.GetComponent <ChalkLine>().GetInstanceID(); this.selectableLines.Remove(removeId); if (this.selectedLine != null && this.selectedLine.GetInstanceID() == removeId) { // 非選択状態にする this.selectedLine.DeselectLine(); // 選択中のものを変える if (this.selectableLines.Count() > 0) { this.selectedLine = this.selectableLines.OrderByDescending(item => item.Value.CreatedTime).First().Value; this.selectedLine.SelectLine(); } else { this.selectedLine = null; } } } }
/** ******************************************************************************** * @summary 線をクリアする ***********************************************************************************/ public void ClearLines() { linePoints.Clear(); if (newLine != null) { Destroy(newLine.gameObject); newLine = null; } }
/** ******************************************************************************** * @summary 選択状態を全て解除する ***********************************************************************************/ public void ResetSelectAll() { if (this.selectedLine != null) { this.selectedLine.DeselectLine(); this.selectedLine = null; } this.selectableLines.Clear(); }
/** ******************************************************************************** * @summary 線の初期地点を設定する * 基本的にはコントローラーでの判定用 ***********************************************************************************/ public void SetStartPos(Vector3 initPos) { this.touchPos = initPos; this.touchPos.z = 0; // ClearLines(); // 二本め以降引くための処理 this.linePoints.Clear(); this.newLine = null; }
} // 消すオブジェクトがあるかどうか(消せるかどうか) /** ******************************************************************************** * @summary 選択状態の線を削除する ***********************************************************************************/ public void DeleteLine() { if (this.selectedLine != null) { var removeId = this.selectedLine.GetInstanceID(); this.selectedLine.DeleteLine(); this.selectedLine = null; this.selectableLines.Remove(removeId); // 消した後に次のやつを選択する if (this.selectableLines.Count() > 0) { this.selectedLine = this.selectableLines.OrderByDescending(item => item.Value.CreatedTime).First().Value; this.selectedLine.SelectLine(); } } }
/** ******************************************************************************** * @summary 線を引く * 基本的にはコントローラーでの判定用 ***********************************************************************************/ public void DragLine(Vector3 currentPos) { Vector3 startPos = this.touchPos; Vector3 endPos = currentPos; endPos.z = 0; if (linePoints.Count == 0) { linePoints.Add(startPos); } // lineLength以上、カーソルが移動していたら if ((endPos - startPos).magnitude > lineLength) { if (newLine == null) { newLine = Instantiate(linePrefab); newLine.gameObject.name = "Line" + linePoints.Count; } LineRenderer line = newLine.GetComponent <LineRenderer>();// write line line.startColor = this.lineColor; line.endColor = this.lineColor; line.positionCount = 2; line.startWidth = lineWidth;//0.2f; // 線の始点、終点設定 line.SetPosition(0, startPos); line.SetPosition(1, endPos); // 線のその他情報の設定 Rigidbody2D rigid2D = newLine.GetComponent <Rigidbody2D>(); newLine.transform.parent = this.transform; PolygonCollider2D polygon = newLine.GetComponent <PolygonCollider2D>(); linePoints.Add(endPos); WriteLine2D(line, polygon); touchPos = endPos; } }
private ChalkLine newLine; // 現在引いてる線 /** ******************************************************************************** * @summary 初期化処理 ***********************************************************************************/ private void Start() { this.linePoints = new List <Vector2>(); this.newLine = null; }