public void BuildPrefab(GridCell cell, GridCell[] neighborCells, int dir) { float mult = GridMetrics.squareSize / 1.5f; int rand = Random.Range(0, prefabs.Length); Vector3 adjustedOffset = dir % 2 == 0 ? offsets[rand] : new Vector3(offsets[rand].z, offsets[rand].y, offsets[rand].x); adjustedOffset *= mult; Vector3[] stairDirections = { new Vector3(-1, 1, 1), new Vector3(1, 1, 1), new Vector3(1, 1, -1), new Vector3(-1, 1, -1) }; Vector3 obPos = cell.transform.position + Vector3.Scale(adjustedOffset, stairDirections[dir]); GameObject ob = Instantiate(prefabs[rand], obPos, cell.transform.rotation); ob.transform.localScale = scales[rand] * mult; ob.transform.Rotate(new Vector3(0, 90 * dir + rotationOffset, 0)); ob.transform.SetParent(cell.transform); if (stairDecorationMode == StairDecorations.PrefabList) { stairDecorationData.BuildPrefab(cell, dir); } StairPosition stairPosition = StairIsTopOrBottom(cell, neighborCells); if (stairConditionalDecoration == StairContional.PrefabList) { if (stairPosition == StairPosition.Bottom || stairPosition == StairPosition.Top) { stairConditionData.BuildPrefab(cell, dir, (int)stairPosition); } if (stairPosition == StairPosition.Single) { stairConditionData.BuildPrefab(cell, dir, (int)StairPosition.Top); stairConditionData.BuildPrefab(cell, dir, (int)StairPosition.Bottom); } } }
public StairPosition StairIsTopOrBottom(GridCell cell, GridCell[] neighborCells) { StairPosition pos = StairPosition.Single; for (int i = 0; i < neighborCells.Length; i++) { if (neighborCells[i] == null) { continue; } if (neighborCells[i].cellTemplate.stairMode != StairMode.None) { if (neighborCells[i].height < cell.height) { if (pos == StairPosition.Single) { pos = StairPosition.Top; } else { pos = StairPosition.Middle; } } else if (neighborCells[i].height > cell.height) { if (pos == StairPosition.Single) { pos = StairPosition.Bottom; } else { pos = StairPosition.Middle; } } } } return(pos); }