Exemple #1
0
    // check the map tile for landing or stop field
    private void CheckMapTile(bool checkLanding = false)
    {
        RaycastHit hit;

        if (Physics.Raycast(planeMesh.transform.position, -planeTransform.up, out hit, 1, ignoreMask))
        {
            MapTile mapTile = hit.collider.gameObject.GetComponent <MapTile>();
            if (mapTile != null)
            {
                MapTile.BuildStatus status = mapTile.TileStatus;
                switch (status)
                {
                //case MapTile.BuildStatus.Start:
                case MapTile.BuildStatus.Park:
                    mapTile.PlanePathField();
                    break;

                case MapTile.BuildStatus.Stop:
                    if (!mapTile.Dirty)
                    {
                        StopCoroutine(movementCoroutine);
                        planeOnField         = mapTile;
                        mapTile.PlaneOnField = true;
                        movementCoroutine    = StartCoroutine(StopAtField(mapTile.gameObject.transform.position));
                        mapTile.PlanePathField();
                    }
                    break;
                }

                if (checkLanding)
                {
                    if (status == MapTile.BuildStatus.Road && !isStartingPlane)
                    {
                        StopCoroutine(movementCoroutine);
                        landing           = true;
                        movementCoroutine = StartCoroutine(StopAtField(mapTile.gameObject.transform.position));
                    }
                    else
                    {
                        planeOnField         = mapTile;
                        mapTile.PlaneOnField = true;
                    }
                }
            }
        }
    }
    private void SetUpMap()
    {
        buildableTiles = new int[map.Length][];
        int rowID = 0;

        foreach (Map row in map)
        {
            buildableTiles[rowID] = new int[row.tiles.Length];
            int tileID = 0;
            foreach (MapTile tile in row.tiles)
            {
                MapTile.BuildStatus status = tile.TileStatus;
                if (status == MapTile.BuildStatus.Building || status == MapTile.BuildStatus.Start)
                {
                    buildableTiles[rowID][tileID] = 12;
                }
                else if (status == MapTile.BuildStatus.Road)
                {
                    buildableTiles[rowID][tileID] = 11;
                }
                else
                {
                    buildableTiles[rowID][tileID] = 0;
                }
                tileID++;
            }
            rowID++;
        }

        for (int i = 0; i < buildableTiles.Length; i++)
        {
            for (int j = 0; j < buildableTiles[i].Length; j++)
            {
                int type = buildableTiles[i][j];
                if (type > 10)
                {
                    CheckAndSetAroundTiles(i, j, type % 10);
                }
            }
        }
    }