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(); } }
public void RotateFrontTowards(CapeTile tile) { Vector3 offset = (tile.transform.position - transform.position); offset.y = 0.0f; transform.rotation = Quaternion.LookRotation(offset.normalized); }
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; } }