public bool SerchConnectedEdge(ChainEdge chainEdge)
 {
     foreach (var connectedObject in connectObjects)
     {
         if (connectedObject == chainEdge)
         {
             return(true);
         }
     }
     return(false);
 }
 bool CheckEdgePass(ChainEdge edge)
 {
     foreach (var connectedObject in connectObjects)
     {
         if (edge == connectedObject)
         {
             return(true);
         }
     }
     return(false);
 }
Beispiel #3
0
    /// <summary>
    /// 呼び出し側のノードから引数へ渡したノードへ接続する
    /// </summary>
    /// <param name="conectNode">接続先のノード</param>
    /// <param name="chainEdge">この子階層に生成する</param>
    /// <returns></returns>
    public IEnumerator Connect(ChainNode conectNode, ChainEdge chainEdge)
    {
        float connectingTime = MainGameSceneManager.Instance.GameParameter.ChainConnectTime;
        float timer          = 0f;
        var   chainObject    = Instantiate(chain, chainEdge.transform);

        chainEdge.ChainModel = chainObject;

        chainObject.transform.position = transform.position;
        var   chainMaterial = chainObject.GetComponent <MeshRenderer>().material;
        float distance      = Vector2.Distance(transform.position, conectNode.transform.position);

        chainObject.transform.up = (transform.position - conectNode.transform.position).normalized;

        SoundManager.Instance.PlaySE(chainExtendSound);
        while (true)
        {
            yield return(null);

            timer += Time.deltaTime;
            float rate         = timer / connectingTime;
            float distanceRate = timer / connectingTime * distance;
            if (1 <= rate)
            {
                break;
            }
            var chainDelta = -chainObject.transform.up * distance * rate;
            chainObject.transform.position = transform.position + chainDelta;
            chainMaterial.SetFloat("_Extend", distanceRate);
        }
        chainObject.transform.position = transform.position + (-chainObject.transform.up * distance);
        chainMaterial.SetFloat("_Extend", distance);

        //ここで接続完了
        SoundManager.Instance.PlaySE(connectChainSound);
        CameraEffects.Instance.Shake();
        Instantiate(ringEffect, conectNode.transform.position, ringEffect.transform.rotation);

        bool b = SequanceManager.Instance.CheckDeadEndNode(conectNode);

        if (b)
        {
            SequanceManager.Instance.ChainAllConect();
        }
    }
    public void AddChainNode(ChainNode chainNode, ChainEdge chainEdge = null)
    {
        const float ChainNodeImageZ = -0.6f;//モデルに隠れないための調整分;

        var pos = chainNode.transform.position;

        pos.z = ChainNodeImageZ;
        if (connectObjects.Count == 0)
        {
            lastChainNodeImage = Instantiate(lastChainNodeImagePrefab, transform);
            lastChainNodeImage.transform.position = pos;
            connectObjects.Add(chainNode);
            return;
        }
        Debug.Assert(chainEdge != null);
        connectObjects.Add(chainEdge);
        lastChainNodeImage.transform.position = pos;
        connectObjects.Add(chainNode);
        FireCounter.Instance.RemoveFire();
    }