Exemple #1
0
/**
 * Make a clear tile.
 * @param t       the tile to make a clear tile
 * @param g       the type of ground
 * @param density the density of the grass/snow/desert etc
 */
        public static void MakeClear(this TileIndex t, ClearGround g, uint density)
        {
            TileMap.SetTileType(t, TileType.MP_CLEAR);
            Map._m[t].m1 = 0;
            TileMap.SetTileOwner(t, Owner.OWNER_NONE);
            Map._m[t].m2 = 0;
            Map._m[t].m3 = 0;
            Map._m[t].m4 = 0 << 5 | 0 << 2;
            SetClearGroundDensity(t, g, density); // Sets m5
            Map._me[t].m6 = 0;
            Map._me[t].m7 = 0;
        }
    //---------------------------------------------------------------------------------------------------------------------
    //---------------------------------------------------------------------------------------------------------------------

    void SetLevelTerrain(List <PixelClass> pList, List <GroundTileScript> gtList)
    {
        if (pList.Count != gtList.Count || pList == null || gtList == null)
        {
            Debug.Log("ERROR: Discrepancy between lists p|gt " + pList.Count + " " + gtList.Count);
            return;
        }

        /* Layers for each tile type and their binary value:
         *  9  :  Clear/Objective/Base      512
         *  10 : FixedTerrain/Impassable    1024
         *  11 : Rough                      2048
         *  12 : Hazard                     4096
         */

        for (int i = 0; i < gtList.Count; i++)
        {
            switch (pList[i].colourCompare)
            {
            case PixelClass.pixelReader.BLACK:
                ImpassableGround impassableTile = new ImpassableGround();
                gtList[i].tileReference              = impassableTile;
                gtList[i].tileReference.tileID       = i;
                gtList[i].tileReference.hasBlockOnIt = true;
                gtList[i].tileReference.type         = GroundTile.GroundType.IMPASSABLE;
                gtList[i].tileReference.tileRenderer = gtList[i].gameObject.GetComponent <MeshRenderer>();
                gtList[i].gameObject.layer           = 10;

                break;

            case PixelClass.pixelReader.RED:
                HazardGround hazardTile = new HazardGround();
                gtList[i].tileReference              = hazardTile;
                gtList[i].tileReference.tileID       = i;
                gtList[i].tileReference.type         = GroundTile.GroundType.HAZARD;
                gtList[i].tileReference.tileRenderer = gtList[i].gameObject.GetComponent <MeshRenderer>();
                gtList[i].gameObject.layer           = 12;

                break;

            case PixelClass.pixelReader.DARK_RED:
                HazardGround hazardTileBlocked = new HazardGround();
                gtList[i].tileReference              = hazardTileBlocked;
                gtList[i].tileReference.tileID       = i;
                gtList[i].tileReference.hasBlockOnIt = true;
                gtList[i].tileReference.type         = GroundTile.GroundType.HAZARD;
                gtList[i].tileReference.tileRenderer = gtList[i].gameObject.GetComponent <MeshRenderer>();
                gtList[i].gameObject.layer           = 12;

                break;

            case PixelClass.pixelReader.GREEN:
                ClearGround clearTile = new ClearGround();
                gtList[i].tileReference              = clearTile;
                gtList[i].tileReference.tileID       = i;
                gtList[i].tileReference.type         = GroundTile.GroundType.CLEAR;
                gtList[i].tileReference.tileRenderer = gtList[i].gameObject.GetComponent <MeshRenderer>();
                gtList[i].gameObject.layer           = 9;

                break;

            case PixelClass.pixelReader.TEAL_GREEN:
                ClearGround clearTileBlocked = new ClearGround();
                gtList[i].tileReference              = clearTileBlocked;
                gtList[i].tileReference.tileID       = i;
                gtList[i].tileReference.hasBlockOnIt = true;
                gtList[i].tileReference.type         = GroundTile.GroundType.CLEAR;
                gtList[i].tileReference.tileRenderer = gtList[i].gameObject.GetComponent <MeshRenderer>();
                gtList[i].gameObject.layer           = 9;

                break;

            case PixelClass.pixelReader.BLUE:
                ObjectiveGround objectiveTile = new ObjectiveGround();
                gtList[i].tileReference              = objectiveTile;
                gtList[i].tileReference.tileID       = i;
                gtList[i].tileReference.type         = GroundTile.GroundType.OBJECTIVE;
                gtList[i].tileReference.tileRenderer = gtList[i].gameObject.GetComponent <MeshRenderer>();
                gtList[i].gameObject.layer           = 9;

                break;

            case PixelClass.pixelReader.GREY:
                RoughGround roughTile = new RoughGround();
                gtList[i].tileReference              = roughTile;
                gtList[i].tileReference.tileID       = i;
                gtList[i].tileReference.type         = GroundTile.GroundType.ROUGH;
                gtList[i].tileReference.tileRenderer = gtList[i].gameObject.GetComponent <MeshRenderer>();
                gtList[i].gameObject.layer           = 11;

                break;

            case PixelClass.pixelReader.DARK_GREY:
                RoughGround roughTileBlocked = new RoughGround();
                gtList[i].tileReference              = roughTileBlocked;
                gtList[i].tileReference.tileID       = i;
                gtList[i].tileReference.hasBlockOnIt = true;
                gtList[i].tileReference.type         = GroundTile.GroundType.ROUGH;
                gtList[i].tileReference.tileRenderer = gtList[i].gameObject.GetComponent <MeshRenderer>();
                gtList[i].gameObject.layer           = 11;

                break;

            case PixelClass.pixelReader.MAGENTA:
                BaseGround baseTile = new BaseGround();
                gtList[i].tileReference              = baseTile;
                gtList[i].tileReference.tileID       = i;
                gtList[i].tileReference.type         = GroundTile.GroundType.BASE;
                gtList[i].tileReference.tileRenderer = gtList[i].gameObject.GetComponent <MeshRenderer>();
                gtList[i].gameObject.layer           = 9;

                baseTilesList.Add(gtList[i]);
                // Maybe add baseTile to a list of base tiles, then return the 5th member (index [4]) to always find the center of the base prefab (which currently consists of 9 tiles).

                break;

            default:
                ClearGround defaultClearTile = new ClearGround();
                gtList[i].tileReference              = defaultClearTile;
                gtList[i].tileReference.tileID       = i;
                gtList[i].tileReference.type         = GroundTile.GroundType.CLEAR;
                gtList[i].tileReference.tileRenderer = gtList[i].gameObject.GetComponent <MeshRenderer>();
                gtList[i].gameObject.layer           = 9;

                Debug.Log("No usable info found, using default tile state");
                break;
            }
            //Debug.Log("Loading properties for individual tile: " + i);
            gtList[i].tileReference.LoadProperties();

            Vector3 wPosition = gtList[i].nodeReference.worldPosition;
            gtList[i].nodeReference.walkableNode = !(Physics.CheckSphere(wPosition, (displace - 1) / 2, unwalkableNode));

            //gtList[i].nodeReference.movementModifier = gtList[i].tileReference.tileMovementPenaltyForPF;  // deprecated

            if (gtList[i].tileReference.isWalkable | gtList[i].nodeReference.walkableNode)
            {
                Ray        ray = new Ray(gtList[i].transform.position + Vector3.up * 30, Vector3.down);
                RaycastHit hit;

                if (Physics.Raycast(ray, out hit, 100, traversableMask))
                {
                    traversableTilesDictionary.TryGetValue(hit.collider.gameObject.layer, out gtList[i].nodeReference.movementModifier);
                }
            }
        }
        Debug.Log("Level Terrain Set");
    }
Exemple #3
0
/**
 * Set the type of clear tile.
 * @param t  the tile to set the clear ground type of
 * @param ct the ground type
 * @pre TileMap.IsTileType(t, TileType.MP_CLEAR)
 */
        public static bool IsClearGround(this TileIndex t, ClearGround ct)
        {
            return(GetClearGround(t) == ct);
        }
Exemple #4
0
/**
 * Sets ground type and density in one go, also sets the counter to 0
 * @param t       the tile to set the ground type and density for
 * @param type    the new ground type of the tile
 * @param density the density of the ground tile
 * @pre TileMap.IsTileType(t, TileType.MP_CLEAR)
 */
        public static void SetClearGroundDensity(this TileIndex t, ClearGround type, uint density)
        {
            Debug.Assert(TileMap.IsTileType(t, TileType.MP_CLEAR)); // XXX incomplete
            Map._m[t].m5 = (byte)(0 << 5 | (byte)type << 2 | density);
        }