private void computeOxyLevel()
    {
        int   deriver = 1;
        float value   = o2Level;

        if (TileEdge.IsPassable(down) && downNeighbour != null && TileEdge.IsPassable(downNeighbour.up))
        {
            deriver++;
            value += downNeighbour.o2Level;
        }
        if (TileEdge.IsPassable(up) && upNeighbour != null && TileEdge.IsPassable(upNeighbour.down))
        {
            deriver++;
            value += upNeighbour.o2Level;
        }
        if (TileEdge.IsPassable(left) && leftNeighbour != null && TileEdge.IsPassable(leftNeighbour.right))
        {
            deriver++;
            value += leftNeighbour.o2Level;
        }
        if (TileEdge.IsPassable(right) && rightNeighbour != null && TileEdge.IsPassable(rightNeighbour.left))
        {
            deriver++;
            value += rightNeighbour.o2Level;
        }
        o2Level = value / deriver;
    }
    void GenerateVoidScent()
    {
        Queue <Tile>   queue        = new Queue <Tile> ();
        HashSet <Tile> visitedTiles = new HashSet <Tile> ();

        foreach (Tile tile in tiles)
        {
            if (tile.isVoidGenerator)
            {
                queue.Enqueue(tile);
            }
            tile.voidScent = false;
        }
        while (queue.Count > 0)
        {
            Tile tile = queue.Dequeue();
            tile.voidScent = true;
            visitedTiles.Add(tile);
            if (tile.upNeighbour && !visitedTiles.Contains(tile.upNeighbour) && TileEdge.IsPassable(tile.up) && TileEdge.IsPassable(tile.upNeighbour.down))
            {
                tile.upNeighbour.voidScent = true;
                queue.Enqueue(tile.upNeighbour);
            }
            if (tile.downNeighbour && !visitedTiles.Contains(tile.downNeighbour) && TileEdge.IsPassable(tile.down) && TileEdge.IsPassable(tile.downNeighbour.up))
            {
                tile.downNeighbour.voidScent = true;
                queue.Enqueue(tile.downNeighbour);
            }
            if (tile.leftNeighbour && !visitedTiles.Contains(tile.leftNeighbour) && TileEdge.IsPassable(tile.left) && TileEdge.IsPassable(tile.leftNeighbour.right))
            {
                tile.leftNeighbour.voidScent = true;
                queue.Enqueue(tile.leftNeighbour);
            }
            if (tile.rightNeighbour && !visitedTiles.Contains(tile.rightNeighbour) && TileEdge.IsPassable(tile.right) && TileEdge.IsPassable(tile.rightNeighbour.left))
            {
                tile.rightNeighbour.voidScent = true;
                queue.Enqueue(tile.rightNeighbour);
            }
        }
    }
    void Propagate()
    {
        int firesStarted   = 0;
        int contagiousness = Config.me.FireContagiousness;

        if (tile.system != null)
        {
            tile.system.GetComponent <TileSystem>().isBroken = true;
        }

        if (firesStarted < contagiousness && tile.downNeighbour != null && (TileEdge.IsPassable(tile.down)) && TileEdge.IsPassable(tile.downNeighbour.up))
        {
            if (tile.downNeighbour.StartFire())
            {
                firesStarted++;
            }
        }
        if (firesStarted < contagiousness && tile.upNeighbour != null && TileEdge.IsPassable(tile.up) && TileEdge.IsPassable(tile.upNeighbour.down))
        {
            if (tile.upNeighbour.StartFire())
            {
                firesStarted++;
            }
        }
        if (firesStarted < contagiousness && tile.leftNeighbour != null && TileEdge.IsPassable(tile.left) && TileEdge.IsPassable(tile.leftNeighbour.right))
        {
            if (tile.leftNeighbour.StartFire())
            {
                firesStarted++;
            }
        }
        if (firesStarted < contagiousness && tile.rightNeighbour != null && TileEdge.IsPassable(tile.right) && TileEdge.IsPassable(tile.rightNeighbour.left))
        {
            if (tile.rightNeighbour.StartFire())
            {
                firesStarted++;
            }
        }
        level = 0;
    }
示例#4
0
    Boolean checkIfCanMove(InGamePosition pos, bool up, bool down, bool left, bool right)
    {
        Ship ship = GameObject.FindGameObjectWithTag("ship").GetComponent <Ship>();
        Tile tile = ship.GetTileOnPosition(pos);

        if (left &&
            TileEdge.IsPassable(tile.down) &&
            tile.downNeighbour != null &&
            TileEdge.IsPassable(tile.downNeighbour.up))
        {
            return(true);
        }

        if (right &&
            TileEdge.IsPassable(tile.up) &&
            tile.upNeighbour != null &&
            TileEdge.IsPassable(tile.upNeighbour.down))
        {
            return(true);
        }

        if (down &&
            TileEdge.IsPassable(tile.left) &&
            tile.leftNeighbour != null &&
            TileEdge.IsPassable(tile.leftNeighbour.right))
        {
            return(true);
        }

        if (up &&
            TileEdge.IsPassable(tile.right) &&
            tile.rightNeighbour != null &&
            TileEdge.IsPassable(tile.rightNeighbour.left))
        {
            return(true);
        }

        return(false);
    }
    void PrepareRooms(bool fakeData)
    {
        rooms = new List <Room>();

        List <Tile> noScentTiles = new List <Tile>();

        foreach (Tile tile in tiles)
        {
            if (tile.voidScent == false)
            {
                noScentTiles.Add(tile);
            }
        }

        List <Tile>    tmp     = new List <Tile> ();
        HashSet <Tile> visited = new HashSet <Tile> ();
        Tile           currentTile;

        int counter = 0;

        while (noScentTiles.Count > 0)
        {
            Room room = new Room(fakeData ? 0.1f * (float)(counter++ % 10) : 1.0f);
            tmp.Add(noScentTiles[0]);
            room.AddTile(noScentTiles[0]);
            noScentTiles.Remove(noScentTiles[0]);
            while (tmp.Count > 0)
            {
                currentTile = tmp[0];
                tmp.RemoveAt(0);
                visited.Add(currentTile);

                if (currentTile.upNeighbour && !visited.Contains(currentTile.upNeighbour) && TileEdge.IsPassable(currentTile.up) && TileEdge.IsPassable(currentTile.upNeighbour.down))
                {
                    room.AddTile(currentTile.upNeighbour);
                    tmp.Add(currentTile.upNeighbour);
                    noScentTiles.Remove(currentTile.upNeighbour);
                }
                if (currentTile.downNeighbour && !visited.Contains(currentTile.downNeighbour) && TileEdge.IsPassable(currentTile.down) && TileEdge.IsPassable(currentTile.downNeighbour.up))
                {
                    room.AddTile(currentTile.downNeighbour);
                    tmp.Add(currentTile.downNeighbour);
                    noScentTiles.Remove(currentTile.downNeighbour);
                }
                if (currentTile.leftNeighbour && !visited.Contains(currentTile.leftNeighbour) && TileEdge.IsPassable(currentTile.left) && TileEdge.IsPassable(currentTile.leftNeighbour.right))
                {
                    room.AddTile(currentTile.leftNeighbour);
                    tmp.Add(currentTile.leftNeighbour);
                    noScentTiles.Remove(currentTile.leftNeighbour);
                }
                if (currentTile.rightNeighbour && !visited.Contains(currentTile.rightNeighbour) && TileEdge.IsPassable(currentTile.right) && TileEdge.IsPassable(currentTile.rightNeighbour.left))
                {
                    room.AddTile(currentTile.rightNeighbour);
                    tmp.Add(currentTile.rightNeighbour);
                    noScentTiles.Remove(currentTile.rightNeighbour);
                }
            }
            rooms.Add(room);
        }
    }