/** * 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"); }
/** * 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); }
/** * 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); }