Example #1
0
    protected void MoveCape(CapeTile prevPiece, int newVerticalLayer, Vector3Int direction)
    {
        Vector3 myOldPosition = transform.position;

        transform.position += direction;

        if (prevPiece != null)
        {
            RotateFrontTowards(prevPiece);
        }

        int oldVerticalLayer = VerticalLayer;

        VerticalLayer = newVerticalLayer;

        if (NextCapePiece != null)
        {
            if (NextCapePiece.HadWeightOnTop)
            {
                NextCapePiece.HadWeightOnTop = false;
                SnapNextCapePiece();
                Level.DropAllVerticalLayers();
            }
            else
            {
                NextCapePiece.MoveCape(this, oldVerticalLayer, Vector3Int.RoundToInt(myOldPosition - NextCapePiece.transform.position));
                UpdateGeometryVariantBasedOnNextPiece();
                UpdateModel();
            }
        }
        else
        {
            Level.DropAllVerticalLayers();
        }
    }
Example #2
0
    public void RotateFrontTowards(CapeTile tile)
    {
        Vector3 offset = (tile.transform.position - transform.position);

        offset.y           = 0.0f;
        transform.rotation = Quaternion.LookRotation(offset.normalized);
    }
Example #3
0
    private void SpawnCapePieces()
    {
        CapeTile capeOwner = this;

        foreach (Vector2Int offset in CapePieceOffsets)
        {
            capeOwner.NextCapePiece = Instantiate(CapePrefab, capeOwner.transform.position + CapeOffsetToWorldSpace(offset), Quaternion.identity, Level.transform).GetComponent <CapeTile>();
            capeOwner.NextCapePiece.VerticalLayer = InitialVerticalLayer;
            capeOwner.NextCapePiece.CapeMaterial  = CapeMaterial;
            capeOwner.NextCapePiece.RotateFrontTowards(capeOwner);
            capeOwner = capeOwner.NextCapePiece;
        }
    }