Beispiel #1
0
            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);
                    }
                }
            }
Beispiel #2
0
            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);
            }