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 Draw(DayLightCollider2D id, Vector2 offset) { if (id.mainShape.shadowType != DayLightCollider2D.ShadowType.SpriteOffset) { return; } if (id.InAnyCamera() == false) { return; } Material material = Lighting2D.materials.GetSpriteShadow(); material.color = Color.black; foreach (DayLightColliderShape shape in id.shapes) { SpriteRenderer spriteRenderer = shape.spriteShape.GetSpriteRenderer(); if (spriteRenderer == null) { continue; } virtualSpriteRenderer.sprite = spriteRenderer.sprite; virtualSpriteRenderer.flipX = spriteRenderer.flipX; virtualSpriteRenderer.flipY = spriteRenderer.flipY; if (virtualSpriteRenderer.sprite == null) { continue; } float x = id.transform.position.x + offset.x; float y = id.transform.position.y + offset.y; float rot = -Lighting2D.DayLightingSettings.direction * Mathf.Deg2Rad; float sunHeight = Lighting2D.DayLightingSettings.height; x += Mathf.Cos(rot) * id.mainShape.height * sunHeight; y += Mathf.Sin(rot) * id.mainShape.height * sunHeight; material.mainTexture = virtualSpriteRenderer.sprite.texture; Vector2 scale = new Vector2(id.transform.lossyScale.x, id.transform.lossyScale.y); Universal.Sprite.FullRect.Simple.Draw(id.spriteMeshObject, material, virtualSpriteRenderer, new Vector2(x, y), scale, id.transform.rotation.eulerAngles.z); } material.color = Color.white; }
static public void Draw(DayLightCollider2D id, Vector2 offset) { if (id.InAnyCamera() == false) { return; } float dayLightRotation = -(Lighting2D.DayLightingSettings.direction - 180) * Mathf.Deg2Rad; float dayLightHeight = Lighting2D.DayLightingSettings.bumpMap.height; float dayLightStrength = Lighting2D.DayLightingSettings.bumpMap.strength; switch (id.mainShape.maskType) { case DayLightCollider2D.MaskType.None: return; case DayLightCollider2D.MaskType.Sprite: Material material = Lighting2D.materials.GetMask(); foreach (DayLightColliderShape shape in id.shapes) { UnityEngine.SpriteRenderer spriteRenderer = shape.spriteShape.GetSpriteRenderer(); if (spriteRenderer == null || spriteRenderer.sprite == null) { continue; } Vector2 objectOffset = shape.transform2D.position + offset; material.mainTexture = spriteRenderer.sprite.texture; Universal.Sprite.Draw(id.spriteMeshObject, material, spriteRenderer, objectOffset, shape.transform2D.scale, shape.transform2D.rotation); } break; case DayLightCollider2D.MaskType.BumpedSprite: Texture bumpTexture = id.normalMapMode.GetBumpTexture(); if (bumpTexture == null) { return; } material = Lighting2D.materials.GetBumpedDaySprite(); material.SetFloat("_LightRZ", -dayLightHeight); material.SetTexture("_Bump", bumpTexture); foreach (DayLightColliderShape shape in id.shapes) { UnityEngine.SpriteRenderer spriteRenderer = shape.spriteShape.GetSpriteRenderer(); if (spriteRenderer == null || spriteRenderer.sprite == null) { continue; } float rotation = dayLightRotation - shape.transform2D.rotation * Mathf.Deg2Rad; material.SetFloat("_LightRX", Mathf.Cos(rotation) * dayLightStrength); material.SetFloat("_LightRY", Mathf.Sin(rotation) * dayLightStrength); Vector2 objectOffset = shape.transform2D.position + offset; material.mainTexture = spriteRenderer.sprite.texture; Universal.Sprite.FullRect.Draw(id.spriteMeshObject, material, spriteRenderer, objectOffset, id.transform.lossyScale, shape.transform2D.rotation); } break; } }
static public void Draw(Pass pass) { for (int id = 0; id < pass.sortList.count; id++) { Sorting.SortObject sortObject = pass.sortList.list[id]; switch (sortObject.type) { case Sorting.SortObject.Type.Collider: DayLightCollider2D collider = (DayLightCollider2D)sortObject.lightObject; if (collider != null) { if (collider.InAnyCamera() == false) { continue; } if (pass.drawShadows) { if (collider.mainShape.shadowType == DayLightCollider2D.ShadowType.Collider || collider.mainShape.shadowType == DayLightCollider2D.ShadowType.SpritePhysicsShape) { Lighting2D.materials.GetShadowBlur().SetPass(0); GL.Begin(GL.TRIANGLES); Shadow.Draw(collider, pass.offset); GL.End(); } SpriteRendererShadow.Draw(collider, pass.offset); } if (pass.drawMask) { SpriteRenderer2D.Draw(collider, pass.offset); } } break; case Sorting.SortObject.Type.TilemapCollider: DayLightTilemapCollider2D tilemap = (DayLightTilemapCollider2D)sortObject.lightObject; if (tilemap != null) { if (pass.drawShadows) { if (tilemap.ShadowsDisabled() == false) { Lighting2D.materials.GetShadowBlur().SetPass(0); GL.Begin(GL.TRIANGLES); Shadow.DrawTilemap(tilemap, pass.offset); GL.End(); } } if (pass.drawMask) { if (tilemap.MasksDisabled() == false) { SpriteRenderer2D.DrawTilemap(tilemap, pass.offset); } } } break; } } }
static public void DrawProjection(DayLightCollider2D id, Vector2 offset) { if (id.mainShape.shadowType != DayLightCollider2D.ShadowType.SpriteProjection) { return; } if (id.InAnyCamera() == false) { return; } Material material = Lighting2D.materials.GetSpriteShadow(); material.color = Color.black; foreach (DayLightColliderShape shape in id.shapes) { SpriteRenderer spriteRenderer = shape.spriteShape.GetSpriteRenderer(); if (spriteRenderer == null) { continue; } virtualSpriteRenderer.sprite = spriteRenderer.sprite; virtualSpriteRenderer.flipX = spriteRenderer.flipX; virtualSpriteRenderer.flipY = spriteRenderer.flipY; Sprite sprite = virtualSpriteRenderer.sprite; if (virtualSpriteRenderer.sprite == null) { continue; } float sunHeight = Lighting2D.DayLightingSettings.height; float rot = Lighting2D.DayLightingSettings.direction * Mathf.Deg2Rad; Vector2 pos = new Vector2(id.transform.position.x + offset.x, id.transform.position.y + offset.y); Vector2 scale = new Vector2(id.transform.lossyScale.x, id.transform.lossyScale.y); SpriteTransform spriteTransform = new SpriteTransform(virtualSpriteRenderer, pos, scale, id.transform.rotation.eulerAngles.z); Rect uv = spriteTransform.uv; float pivotY = (float)sprite.pivot.y / sprite.texture.height; pivotY = uv.y + pivotY; float pivotX = (float)sprite.pivot.x / sprite.texture.width; Pair2 pair = Pair2.Zero(); pair.A = pos + pair.A.Push(-rot + Mathf.PI / 2, id.shadowThickness); pair.B = pos + pair.B.Push(-rot - Mathf.PI / 2, id.shadowThickness); if (Lighting2D.DayLightingSettings.direction < 180) { float uvx = uv.x; uv.x = uv.width; uv.width = uvx; } Vector2 v1 = pair.A; Vector2 v2 = pair.A; Vector2 v3 = pair.B; Vector2 v4 = pair.B; v2 = v2.Push(-rot, id.shadowDistance * sunHeight); v3 = v3.Push(-rot, id.shadowDistance * sunHeight); material.mainTexture = virtualSpriteRenderer.sprite.texture; material.SetPass(0); GL.Begin(GL.QUADS); GL.Color(GLExtended.color); GL.TexCoord3(uv.x, pivotY, 0); GL.Vertex3(v1.x, v1.y, 0); GL.TexCoord3(uv.x, uv.height, 0); GL.Vertex3(v2.x, v2.y, 0); GL.TexCoord3(uv.width, uv.height, 0); GL.Vertex3(v3.x, v3.y, 0); GL.TexCoord3(uv.width, pivotY, 0); GL.Vertex3(v4.x, v4.y, 0); GL.End(); } material.color = Color.white; }