static public void LightTilemapOffset(LightingTilemapRoom2D id, Vector2 scale, Camera camera) { Vector2 newPosition = camera.transform.position; newPosition.x -= id.area.position.x; newPosition.y -= id.area.position.y; newPosition.x -= id.transform.position.x; newPosition.y -= id.transform.position.y; newPosition.x -= id.cellAnchor.x; newPosition.y -= id.cellAnchor.y; // Cell Size Is Not Calculated Correctly //if (id.mapType == LightingTilemapCollider2D.MapType.SuperTilemapEditor) { // newPosition.x += id.area.size.x / 2; // newPosition.y += id.area.size.y / 2; //} else { newPosition.x += 1; newPosition.y += 1; newPosition.x *= scale.x; newPosition.y *= scale.y; newPositionInt.x = (int)newPosition.x; newPositionInt.y = (int)newPosition.y; }
static public void SetupLocation(Camera camera, LightingTilemapRoom2D id) { Vector3 rot = Math2D.GetPitchYawRollRad(id.transform.rotation); float rotationYScale = Mathf.Sin(rot.x + Mathf.PI / 2); float rotationXScale = Mathf.Sin(rot.y + Mathf.PI / 2); scale.x = id.transform.lossyScale.x * rotationXScale * id.cellSize.x; scale.y = id.transform.lossyScale.y * rotationYScale * id.cellSize.y; sizeInt = LightTilemapSize(id, camera); LightTilemapOffset(id, scale, camera); offset.x = -camera.transform.position.x; offset.y = -camera.transform.position.y; tilemapOffset.x = id.transform.position.x + id.area.position.x + id.cellAnchor.x; tilemapOffset.y = id.transform.position.y + id.area.position.y + id.cellAnchor.y; //if (id.mapType == LightingTilemapCollider2D.MapType.SuperTilemapEditor) { // tilemapOffset.x -= id.area.size.x / 2; // tilemapOffset.y -= id.area.size.y / 2; //} tileSize.x = scale.x / id.cellSize.x; tileSize.y = scale.y / id.cellSize.y; }
void DrawTilemapRooms(Vector2D offset, float z) { LightingManager2D manager = LightingManager2D.Get(); Material materialWhite = manager.materials.GetWhiteSprite(); Material materialBlack = manager.materials.GetBlackSprite(); GL.PushMatrix(); foreach (LightingTilemapRoom2D id in LightingTilemapRoom2D.GetList()) { LightingRoomTilemap.MaskSpriteWithoutAtlas(manager.GetCamera(), id, materialWhite, materialBlack, offset, z); } GL.PopMatrix(); }
static public void MaskSpriteWithoutAtlas(Camera camera, LightingTilemapRoom2D id, Material materialA, Material materialB, Vector2D offset, float z) { //if (id.maskType != LightingTilemapCollider2D.MaskType.Sprite) { // return; //} if (id.map == null) { return; } Material material; SetupLocation(camera, id); //bool invisible = true; //(id.maskMode == LightingMaskMode.Invisible); for (int x = newPositionInt.x - sizeInt; x < newPositionInt.x + sizeInt; x++) { for (int y = newPositionInt.y - sizeInt; y < newPositionInt.y + sizeInt; y++) { if (x < 0 || y < 0) { continue; } if (x >= id.area.size.x || y >= id.area.size.y) { continue; } tile = id.map[x, y]; if (tile == null) { continue; } if (tile.GetOriginalSprite() == null) { return; } polyOffset.x = x + tilemapOffset.x; polyOffset.y = y + tilemapOffset.y; polyOffset.x *= scale.x; polyOffset.y *= scale.y; polyOffset2.x = (float)polyOffset.x; polyOffset2.y = (float)polyOffset.y; //if (LightingManager2D.culling && Vector2.Distance(polyOffset2, buffer.lightSource.transform.position) > 2 + buffer.lightSource.lightSize) { // LightingDebug.culled ++; // continue; //} polyOffset.x += offset.x; polyOffset.y += offset.y; spriteRenderer.sprite = tile.GetOriginalSprite(); polyOffset2.x = (float)polyOffset.x; polyOffset2.y = (float)polyOffset.y; material = materialB; material.mainTexture = spriteRenderer.sprite.texture; Max2D.DrawSprite(material, spriteRenderer, polyOffset2, tileSize, 0, z); material.mainTexture = null; LightingDebug.maskGenerations++; } } }
static public int LightTilemapSize(LightingTilemapRoom2D id, Camera camera) { return((int)camera.orthographicSize + 5); }