Beispiel #1
0
    static public LightingMainBuffer2D Get(CameraSettings cameraSettings)
    {
        if (cameraSettings.GetCamera() == null)
        {
            return(null);
        }

        foreach (LightingMainBuffer2D mainBuffer in List)
        {
            if (mainBuffer.cameraSettings.GetCamera() == cameraSettings.GetCamera() && mainBuffer.cameraSettings.bufferID == cameraSettings.bufferID)
            {
                return(mainBuffer);
            }
        }

        if (Lighting2D.BufferPresets.Length <= cameraSettings.bufferID)
        {
            Debug.LogWarning("Lighting2D: Not enough buffer settings initialized");

            return(null);
        }

        Buffers.Get();

        LightingMainBuffer2D buffer = new LightingMainBuffer2D();

        buffer.cameraSettings = cameraSettings;

        Rendering.LightingMainBuffer.InitializeRenderTexture(buffer);

        return(buffer);
    }
	private void DrawGizmos() {
	
		if (isActiveAndEnabled == false) {
			return;
		}

		Gizmos.color = new Color(0, 1f, 1f);

		if (Lighting2D.ProjectSettings.editorView.drawGizmosBounds == EditorGizmosBounds.Rectangle) {
			for(int i = 0; i < cameraSettings.Length; i++) {
				CameraSettings cameraSetting = cameraSettings[i];

				Camera camera = cameraSetting.GetCamera();

				if (camera != null) {
					Rect cameraRect = CameraTransform.GetWorldRect(camera);

					GizmosHelper.DrawRect(transform.position, cameraRect);
				}
			}
		}

		for(int i = 0; i < Scriptable.LightSprite2D.List.Count; i++) {
			Scriptable.LightSprite2D light = Scriptable.LightSprite2D.List[i];

			Rect rect = light.lightSpriteShape.GetWorldRect();

			Gizmos.color = new Color(1f, 0.5f, 0.25f);

			GizmosHelper.DrawPolygon(light.lightSpriteShape.GetSpriteWorldPolygon(), transform.position);

			Gizmos.color = new Color(0, 1f, 1f);
			GizmosHelper.DrawRect(transform.position, rect);
		}
	}
	public void UpdateMainBuffers() {
		for(int i = 0; i < cameraSettings.Length; i++) {
			CameraSettings cameraSetting = cameraSettings[i];

			if (cameraSetting.renderMode == CameraSettings.RenderMode.Disabled) {
				continue;
			}
			
			LightingMainBuffer2D buffer = LightingMainBuffer2D.Get(cameraSetting);

			if (buffer != null) {
				buffer.cameraSettings.renderMode = cameraSetting.renderMode;

				buffer.cameraSettings.renderLayerId = cameraSetting.renderLayerId;

				if (buffer.cameraSettings.customMaterial != cameraSetting.customMaterial) {
					buffer.cameraSettings.customMaterial = cameraSetting.customMaterial;

					buffer.ClearMaterial();
				}

				if (buffer.cameraSettings.renderShader != cameraSetting.renderShader) {
					buffer.cameraSettings.renderShader = cameraSetting.renderShader;

					buffer.ClearMaterial();
				}


				foreach(Material material in cameraSetting.GetMaterials().materials) {
					if (material == null) {
						continue;
					}

					Camera camera = cameraSetting.GetCamera();
					if (cameraSetting.cameraType == CameraSettings.CameraType.SceneView) {
						CameraMaterials.SetMaterial(2, material, camera, buffer.renderTexture);
					} else {
						CameraMaterials.SetMaterial(1, material, camera, buffer.renderTexture);
					}
					
				}
			}
		}

		for(int i = 0; i < LightingMainBuffer2D.List.Count; i++) {
			LightingMainBuffer2D buffer = LightingMainBuffer2D.List[i];

			if (buffer != null) {
				buffer.Update();
			}
			
		}

		if (LightingMainBuffer2D.List.Count > 0) {
			foreach(LightingMainBuffer2D buffer in LightingMainBuffer2D.List) {
				if (Lighting2D.disable) {
					buffer.updateNeeded = false;	
					return;
				}

				CameraSettings cameraSettings = buffer.cameraSettings;
				bool render = cameraSettings.renderMode != CameraSettings.RenderMode.Disabled;

				if (render && cameraSettings.GetCamera() != null) {
					buffer.updateNeeded = true;
				
				} else {
					buffer.updateNeeded = false;
				}
			}
		}
	}