public static void Mask(Light2D light, LightCollider2D id, LayerSetting layerSetting) { if (id.InLight(light) == false) { return; } int shapeCount = id.shapes.Count; for (int i = 0; i < shapeCount; i++) { LightColliderShape shape = id.shapes[i]; List <MeshObject> meshObjects = shape.GetMeshes(); if (meshObjects == null) { return; } Vector2 position = shape.transform2D.position - light.transform2D.position; Vector2 pivotPosition = shape.GetPivotPoint() - light.transform2D.position; GL.Color(LayerSettingColor.Get(pivotPosition, layerSetting, id.maskEffect, id.maskTranslucency)); GLExtended.DrawMeshPass(meshObjects, position, shape.transform.lossyScale, shape.transform2D.rotation); } }
static public void Grid(Light2D light, LightTilemapCollider2D id) { if (id.superTilemapEditor.maskTypeSTE != SuperTilemapEditorSupport.TilemapCollider2D.MaskType.Grid) { return; } Vector2 lightPosition = -light.transform.position; MeshObject tileMesh = LightingTile.Rectangle.GetStaticMesh(); GL.Color(Color.white); LightTilemapCollider.Base tilemapBase = id.GetCurrentTilemap(); foreach (LightingTile tile in id.superTilemapEditor.mapTiles) { Vector2 tilePosition = tile.GetWorldPosition(tilemapBase); tilePosition += lightPosition; if (tile.NotInRange(tilePosition, light.size)) { continue; } GLExtended.DrawMeshPass(tileMesh, tilePosition, tile.worldScale, tile.worldRotation); } }
static public void MaskShape(Light2D light, LightTilemapCollider2D id, LayerSetting layerSetting) { Vector2 lightPosition = -light.transform.position; LightTilemapCollider.Base tilemap = id.GetCurrentTilemap(); bool isGrid = !tilemap.IsPhysicsShape(); Vector2 scale = tilemap.TileWorldScale(); float rotation = id.transform.eulerAngles.z; MeshObject tileMesh = null; if (isGrid) { tileMesh = LightTile.GetStaticMesh(tilemap); } int count = tilemap.chunkManager.GetTiles(light.GetWorldRect()); for (int i = 0; i < count; i++) { LightTile tile = tilemap.chunkManager.display[i]; Vector2 tilePosition = tilemap.TileWorldPosition(tile); tilePosition += lightPosition; if (tile.NotInRange(tilePosition, light.size)) { continue; } if (isGrid == false) { tileMesh = null; tileMesh = tile.GetDynamicMesh(); } if (tileMesh == null) { continue; } Color color = LayerSettingColor.Get(tilePosition, layerSetting, MaskEffect.Lit, 1); // 1? GL.Color(color); GLExtended.DrawMeshPass(tileMesh, tilePosition, scale, rotation + tile.rotation); } GL.Color(Color.white); }
static public void Draw(DayLightCollider2D id, Vector2 position) { if (id.mainShape.shadowType == DayLightCollider2D.ShadowType.None) { return; } if (id.mainShape.shadowType == DayLightCollider2D.ShadowType.SpriteOffset) { return; } if (id.mainShape.shadowType == DayLightCollider2D.ShadowType.SpriteProjection) { return; } if (id.mainShape.height < 0) { return; } if (id.InAnyCamera() == false) { return; } Color color = new Color(id.shadowTranslucency, id.shadowTranslucency, id.shadowTranslucency, 1); GL.Color(color); foreach (DayLightColliderShape shape in id.shapes) { DayLighting.ShadowMesh shadow = shape.shadowMesh; if (shadow == null) { continue; } Vector3 pos = new Vector3(shape.transform2D.position.x + position.x, shape.transform2D.position.y + position.y, 0); Matrix4x4 matrix = Matrix4x4.TRS(pos, Quaternion.Euler(0, 0, 0), Vector3.one); foreach (MeshObject mesh in shadow.softMeshes) { GLExtended.DrawMeshPass(mesh, pos, Vector3.one, 0); } foreach (MeshObject mesh in shadow.meshes) { GLExtended.DrawMeshPass(mesh, pos, Vector3.one, 0); } } }
static public void DrawTilemap(DayLightTilemapCollider2D id, Vector2 position) { //if (id.mainShape.shadowType == DayLightCollider2D.shadowType.None) { // return; //} // if (id.mainShape.shadowType == DayLightCollider2D.shadowType.Sprite) { // return; //} //if (id.mainShape.height < 0) { // return; //}// //if (id.InAnyCamera() == false) { // continue; //} // shadowTranslucency GL.Color(Color.black); foreach (DayLightingTile dayTile in id.dayTiles) { DayLighting.TilemapShadowMesh shadow = dayTile.shadowMesh; if (shadow == null) { continue; } Vector3 pos = new Vector3(position.x, position.y, 0); Matrix4x4 matrix = Matrix4x4.TRS(pos, Quaternion.Euler(0, 0, 0), Vector3.one); foreach (MeshObject mesh in shadow.softMeshes) { GLExtended.DrawMeshPass(mesh, pos, Vector3.one, 0); } foreach (MeshObject mesh in shadow.meshes) { GLExtended.DrawMeshPass(mesh, pos, Vector3.one, 0); } } }