private void CreateTile(List <Vector3> vertices, List <int> triangles, List <Vector2> uvs, int x, int y, int tile, TilesetManager tilesetManager) { // coordinates start from top-left, remember vertices.Add(new Vector2f(x, y)); // TL vertices.Add(new Vector2f(x + 1, y)); // TR vertices.Add(new Vector2f(x, y + 1)); // BL vertices.Add(new Vector2f(x, y + 1)); // BL vertices.Add(new Vector2f(x + 1, y)); // TR vertices.Add(new Vector2f(x + 1, y + 1)); // BR for (int i = 0; i < 6; i++) { triangles.Add(triangles.Count); } Sprite sprite = TilemapSpriteManager.Instance.GetSprite(tilesetManager, tile); if (sprite == null) { FlaiDebug.LogErrorWithTypeTag <Tilemap>("Error - No Sprite found in TilemapSpriteManager"); return; } RectangleF uv = sprite.textureRect.ToRectangleF() * sprite.texture.texelSize; uvs.Add(uv.TopLeft); uvs.Add(uv.TopRight); uvs.Add(uv.BottomLeft); uvs.Add(uv.BottomLeft); uvs.Add(uv.TopRight); uvs.Add(uv.BottomRight); }
public void OnMapUpdated() { Ensure.IsEditor(); this.GameObject.DestroyAllChildrenImmediate(); // if the map was removed, then no need to create a new map if (this.TmxAsset == null || this.Tilemaps == null || this.Tilemaps.Count == 0) { return; } if (this.TilemapPrefab == null) { FlaiDebug.LogErrorWithTypeTag <TilemapContainer>("TilemapPrefab is null - aborting!"); return; } foreach (TilemapData data in this.Tilemaps) { FlaiDebug.LogWithTypeTag <TilemapContainer>("Building a tilemap \"{2}\" ({0}x{1})", data.Width, data.Height, data.Name); GameObject tilemap = this.TilemapPrefab.Instantiate(); if (data.HasProperty("CreateColliders")) { bool value; if (bool.TryParse(data.GetProperty("CreateColliders"), out value)) { tilemap.Get <Tilemap>().CreateColliders = value; } } tilemap.name = data.Name.NullIfEmpty() ?? "Tilemap"; tilemap.SetParent(this.GameObject); tilemap.SetLayer("Tiles"); try { tilemap.Get <Tilemap>().CreateFrom(data, this.TmxAsset.TilesetManager); } catch { FlaiDebug.LogErrorWithTypeTag <TilemapContainer>("Error - Aborting"); throw; } this.TmxAsset.NeedsRefresh = false; } }
public void Create() { if (this.TilemapData == null) { FlaiDebug.LogErrorWithTypeTag <Tilemap>("Error creating a Tilemap: TilemapData is null!"); return; } if (this.TilesetManager == null) { FlaiDebug.LogErrorWithTypeTag <Tilemap>("Error creating a Tilemap: TilesetManager is null!"); return; } try { this.CreateMesh(); } catch { FlaiDebug.LogErrorWithTypeTag <Tilemap>("Error Creating Mesh - aborting"); throw; } foreach (EdgeCollider2D collider in this.GetComponents <EdgeCollider2D>()) { Component.Destroy(collider); } if (this.CreateColliders) { try { this.CreateEdgeColliders(); } catch { FlaiDebug.LogErrorWithTypeTag <Tilemap>("Error Creating Colliders - aborting"); throw; } } }