Exemplo n.º 1
0
        protected override void OnOverTile(Vector2Int tileXY)
        {
            base.OnOverTile(tileXY);

            UnitData   structure     = GetStructureData();
            Vector2Int structureSize = StructureData.GetStructureSize(structure.typeID);

            structureSize += new Vector2Int(2, 2);            // Bulldozed area
            Vector2Int minOffset = new Vector2Int(-structureSize.x / 2, -structureSize.y / 2);

            // Set each tile status based on collision within structure area
            for (int x = 0; x < structureSize.x; ++x)
            {
                for (int y = 0; y < structureSize.y; ++y)
                {
                    Vector2Int localTileXY = new Vector2Int(x, y);
                    Vector2Int curTileXY   = tileXY + localTileXY + minOffset;

                    bool isInBulldozedArea = x == 0 || y == 0 || x == structureSize.x - 1 || y == structureSize.y - 1;

                    // Structures can't be placed on impassable terrain, including bulldozed area
                    bool canPlace = TileMapData.IsTilePassable(curTileXY);

                    // Structures can have units in bulldozed area, but not in building area
                    if (canPlace && !isInBulldozedArea)
                    {
                        canPlace = !AreUnitsInArea(new RectInt(curTileXY, Vector2Int.one));
                    }

                    // Structures can have walls in bulldozed area, but not in building area
                    if (canPlace && !isInBulldozedArea)
                    {
                        canPlace = !AreWallsInArea(new RectInt(curTileXY, Vector2Int.one));
                    }

                    Color color = Color.red;
                    if (canPlace)
                    {
                        color = isInBulldozedArea ? Color.yellow : Color.green;
                    }

                    m_OverlayRenderer.SetTileStatus(localTileXY, color);
                }
            }
        }
Exemplo n.º 2
0
        public void RefreshOverlay()
        {
            if (!gameObject.activeSelf)
            {
                return;
            }

            if (m_SelectedButtonName == null)
            {
                return;
            }

            UnitData   structure     = GetStructureData();
            Vector2Int structureSize = StructureData.GetStructureSize(structure.typeID);

            structureSize += new Vector2Int(2, 2);             // Bulldozed area
            Vector2 offset = new Vector2(-structureSize.x / 2, -structureSize.y / 2);

            offset *= m_Tilemap.cellSize;

            PlayerData player = UserData.current.selectedVariant.players[m_DropdownPlayer.value];

            m_OverlayRenderer.SetOverlay(m_UnitRenderer.AddUnit(player, structure), structureSize, offset);
        }